1. 31 8月, 2015 7 次提交
    • S
      net: thunderx: mailboxes: remove code duplication · 6051cba7
      Sunil Goutham 提交于
      Use the nicvf_send_msg_to_pf() function in the mailbox code.
      Signed-off-by: NSunil Goutham <sgoutham@cavium.com>
      Signed-off-by: NRobert Richter <rrichter@cavium.com>
      Signed-off-by: NAleksey Makarov <aleksey.makarov@caviumnetworks.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      6051cba7
    • S
      net: thunderx: Add receive error stats reporting via ethtool · a2dc5ded
      Sunil Goutham 提交于
      Added ethtool support to dump receive packet error statistics reported
      in CQE. Also made some small fixes
      Signed-off-by: NSunil Goutham <sgoutham@cavium.com>
      Signed-off-by: NAleksey Makarov <aleksey.makarov@caviumnetworks.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      a2dc5ded
    • A
      net: thunderx: fix MAINTAINERS · 322e5cc5
      Aleksey Makarov 提交于
      The liquidio and thunder drivers have different maintainers.
      Signed-off-by: NAleksey Makarov <aleksey.makarov@caviumnetworks.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      322e5cc5
    • D
      Merge branch 'snmp-stat-aggregation' · ef34c0f6
      David S. Miller 提交于
      Raghavendra K T says:
      
      ====================
      Optimize the snmp stat aggregation for large cpus
      
      While creating 1000 containers, perf is showing lot of time spent in
      snmp_fold_field on a large cpu system.
      
      The current patch tries to improve by reordering the statistics gathering.
      
      Please note that similar overhead was also reported while creating
      veth pairs  https://lkml.org/lkml/2013/3/19/556
      
      Changes in V4:
       - remove 'item' variable and use IPSTATS_MIB_MAX to avoid sparse
         warning (Eric) also remove 'item' parameter (Joe)
       - add missing memset of padding.
      
      Changes in V3:
       - use memset to initialize temp buffer in leaf function. (David)
       - use memcpy to copy the buffer data to stat instead of unalign_pu (Joe)
       - Move buffer definition to leaf function __snmp6_fill_stats64() (Eric)
       -
      Changes in V2:
       - Allocate the stat calculation buffer in stack. (Eric)
      
      Setup:
      160 cpu (20 core) baremetal powerpc system with 1TB memory
      
      1000 docker containers was created with command
      docker run -itd  ubuntu:15.04  /bin/bash in loop
      
      observation:
      Docker container creation linearly increased from around 1.6 sec to 7.5 sec
      (at 1000 containers) perf data showed, creating veth interfaces resulting in
      the below code path was taking more time.
      
      rtnl_fill_ifinfo
        -> inet6_fill_link_af
          -> inet6_fill_ifla6_attrs
            -> snmp_fold_field
      
      proposed idea:
       currently __snmp6_fill_stats64 calls snmp_fold_field that walks
      through per cpu data to of an item (iteratively for around 36 items).
       The patch tries to aggregate the statistics by going through
      all the items of each cpu sequentially which is reducing cache
      misses.
      
      Performance of docker creation improved by around more than 2x
      after the patch.
      
      before the patch:
      ================
      3f45ba571a42e925c4ec4aaee0e48d7610a9ed82a4c931f83324d41822cf6617
      real	0m6.836s
      user	0m0.095s
      sys	0m0.011s
      
      perf record -a docker run -itd  ubuntu:15.04  /bin/bash
      =======================================================
          50.73%  docker           [kernel.kallsyms]       [k] snmp_fold_field
           9.07%  swapper          [kernel.kallsyms]       [k] snooze_loop
           3.49%  docker           [kernel.kallsyms]       [k] veth_stats_one
           2.85%  swapper          [kernel.kallsyms]       [k] _raw_spin_lock
           1.37%  docker           docker                  [.] backtrace_qsort
           1.31%  docker           docker                  [.] strings.FieldsFunc
      
        cache-misses:  2.7%
      
      after the patch:
      =============
      9178273e9df399c8290b6c196e4aef9273be2876225f63b14a60cf97eacfafb5
      real	0m3.249s
      user	0m0.088s
      sys	0m0.020s
      
      perf record -a docker run -itd  ubuntu:15.04  /bin/bash
      =======================================================
          10.57%  docker           docker                [.] scanblock
           8.37%  swapper          [kernel.kallsyms]     [k] snooze_loop
           6.91%  docker           [kernel.kallsyms]     [k] snmp_get_cpu_field
           6.67%  docker           [kernel.kallsyms]     [k] veth_stats_one
           3.96%  docker           docker                [.] runtime_MSpan_Sweep
           2.47%  docker           docker                [.] strings.FieldsFunc
      
      cache-misses: 1.41 %
      
      Please let me know if you have suggestions/comments.
      Thanks Eric, Joe and David for the comments.
      ====================
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      ef34c0f6
    • R
      net: Optimize snmp stat aggregation by walking all the percpu data at once · a3a77372
      Raghavendra K T 提交于
      Docker container creation linearly increased from around 1.6 sec to 7.5 sec
      (at 1000 containers) and perf data showed 50% ovehead in snmp_fold_field.
      
      reason: currently __snmp6_fill_stats64 calls snmp_fold_field that walks
      through per cpu data of an item (iteratively for around 36 items).
      
      idea: This patch tries to aggregate the statistics by going through
      all the items of each cpu sequentially which is reducing cache
      misses.
      
      Docker creation got faster by more than 2x after the patch.
      
      Result:
                             Before           After
      Docker creation time   6.836s           3.25s
      cache miss             2.7%             1.41%
      
      perf before:
          50.73%  docker           [kernel.kallsyms]       [k] snmp_fold_field
           9.07%  swapper          [kernel.kallsyms]       [k] snooze_loop
           3.49%  docker           [kernel.kallsyms]       [k] veth_stats_one
           2.85%  swapper          [kernel.kallsyms]       [k] _raw_spin_lock
      
      perf after:
          10.57%  docker           docker                [.] scanblock
           8.37%  swapper          [kernel.kallsyms]     [k] snooze_loop
           6.91%  docker           [kernel.kallsyms]     [k] snmp_get_cpu_field
           6.67%  docker           [kernel.kallsyms]     [k] veth_stats_one
      
      changes/ideas suggested:
      Using buffer in stack (Eric), Usage of memset (David), Using memcpy in
      place of unaligned_put (Joe).
      Signed-off-by: NRaghavendra K T <raghavendra.kt@linux.vnet.ibm.com>
      Acked-by: NEric Dumazet <edumazet@google.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      a3a77372
    • R
    • D
      06fb4e70
  2. 30 8月, 2015 15 次提交
  3. 29 8月, 2015 18 次提交
    • V
      sctp: Do not try to search for the transport twice · 73e67420
      Vlad Yasevich 提交于
      When removing an non-primary transport during ASCONF
      processing, we end up traversing the transport list
      twice: once in sctp_cmd_del_non_primary, and once in
      sctp_assoc_del_peer.  We can avoid the second
      search and call sctp_assoc_rm_peer() instead.
      Found by code inspection during code reviews.
      Signed-off-by: NVladislav Yasevich <vyasevich@gmail.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      73e67420
    • N
      bonding: fix bond_poll_controller bh_enable warning · b0d4943e
      Nikolay Aleksandrov 提交于
      The problem is rcu_read_unlock_bh() which triggers a warning when irqs are
      disabled. ndo_poll_controller should run with irqs disabled always so we
      can drop the rcu_read_lock_bh.
      
      [   98.502922] bond0: making interface eth1 the new active one
      [   98.503039] ------------[ cut here ]------------
      [   98.503039] WARNING: CPU: 0 PID: 1744 at kernel/softirq.c:150 __local_bh_enable_ip+0x96/0xc0()
      [   98.503039] Modules linked in: bonding(OE) rpcsec_gss_krb5 nfsv4 dns_resolver nfs fscache netconsole ppdev joydev parport_pc serio_raw parport i2c_piix4 video acpi_cpufreq nfsd auth_rpcgss nfs_acl lockd grace sunrpc virtio_net e1000 ata_generic pcnet32 mii virtio_pci virtio_ring virtio pata_acpi
      [   98.503039] CPU: 0 PID: 1744 Comm: ifenslave Tainted: G           OE   4.2.0-rc7+ #56
      [   98.503039] Hardware name: innotek GmbH VirtualBox/VirtualBox, BIOS VirtualBox 12/01/2006
      [   98.503039]  0000000000000000 00000000e96ba230 ffff880020c236b8 ffffffff8183f105
      [   98.503039]  0000000000000000 0000000000000000 ffff880020c236f8 ffffffff810a9496
      [   98.503039]  ffff88002ea99e08 0000000000000200 ffffffffa02a8e06 ffff88002ea99e08
      [   98.503039] Call Trace:
      [   98.503039]  [<ffffffff8183f105>] dump_stack+0x4c/0x65
      [   98.503039]  [<ffffffff810a9496>] warn_slowpath_common+0x86/0xc0
      [   98.503039]  [<ffffffffa02a8e06>] ? bond_poll_controller+0x146/0x250 [bonding]
      [   98.503039]  [<ffffffff810a95ca>] warn_slowpath_null+0x1a/0x20
      [   98.503039]  [<ffffffff810ae376>] __local_bh_enable_ip+0x96/0xc0
      [   98.503039]  [<ffffffffa02a8e2f>] bond_poll_controller+0x16f/0x250 [bonding]
      [   98.503039]  [<ffffffffa02a8cf3>] ? bond_poll_controller+0x33/0x250 [bonding]
      [   98.503039]  [<ffffffff810feaed>] ? trace_hardirqs_off+0xd/0x10
      [   98.503039]  [<ffffffff81848afb>] ? _raw_spin_unlock_irqrestore+0x5b/0x60
      [   98.503039]  [<ffffffff816ec48e>] netpoll_poll_dev+0x6e/0x350
      [   98.503039]  [<ffffffff816eb977>] ? netpoll_start_xmit+0x137/0x1d0
      [   98.503039]  [<ffffffff816b2e8b>] ? __alloc_skb+0x5b/0x210
      [   98.503039]  [<ffffffff816ec89d>] netpoll_send_skb_on_dev+0x12d/0x2a0
      [   98.503039]  [<ffffffff816eccde>] netpoll_send_udp+0x2ce/0x430
      [   98.503039]  [<ffffffffa0190850>] write_msg+0xb0/0xf0 [netconsole]
      [   98.503039]  [<ffffffff81116b63>] call_console_drivers.constprop.25+0x133/0x260
      [   98.503039]  [<ffffffff81117934>] console_unlock+0x2f4/0x580
      [   98.503039]  [<ffffffff81117ea5>] ? vprintk_emit+0x2e5/0x630
      [   98.503039]  [<ffffffff81117ee5>] vprintk_emit+0x325/0x630
      [   98.503039]  [<ffffffff81118379>] vprintk_default+0x29/0x40
      [   98.503039]  [<ffffffff8183de4f>] printk+0x55/0x6b
      [   98.503039]  [<ffffffff816c754c>] __netdev_printk+0x16c/0x260
      [   98.503039]  [<ffffffff816c7a12>] netdev_info+0x62/0x80
      [   98.503039]  [<ffffffffa02ab464>] bond_change_active_slave+0x134/0x6a0 [bonding]
      [   98.503039]  [<ffffffffa02aba95>] bond_select_active_slave+0xc5/0x310 [bonding]
      [   98.503039]  [<ffffffffa02aeb78>] bond_enslave+0x1088/0x10c0 [bonding]
      [   98.503039]  [<ffffffffa02af46b>] bond_do_ioctl+0x37b/0x400 [bonding]
      [   98.503039]  [<ffffffff81101d8d>] ? trace_hardirqs_on+0xd/0x10
      [   98.503039]  [<ffffffff816dc437>] ? rtnl_lock+0x17/0x20
      [   98.503039]  [<ffffffff816e5fd1>] dev_ifsioc+0x331/0x3e0
      [   98.503039]  [<ffffffff816e62dc>] dev_ioctl+0xec/0x6c0
      [   98.503039]  [<ffffffff816a6c6a>] sock_do_ioctl+0x4a/0x60
      [   98.503039]  [<ffffffff816a7300>] sock_ioctl+0x1c0/0x250
      [   98.503039]  [<ffffffff81271bfe>] do_vfs_ioctl+0x2ee/0x540
      [   98.503039]  [<ffffffff810fd943>] ? up_read+0x23/0x40
      [   98.503039]  [<ffffffff81070993>] ? __do_page_fault+0x1d3/0x420
      [   98.503039]  [<ffffffff8127e246>] ? __fget_light+0x66/0x90
      [   98.503039]  [<ffffffff81271ec9>] SyS_ioctl+0x79/0x90
      [   98.503039]  [<ffffffff8184936e>] entry_SYSCALL_64_fastpath+0x12/0x76
      [   98.503039] ---[ end trace 00cfa804b0670051 ]---
      
      Fixes: 616f4541 ("bonding: implement bond_poll_controller()")
      Signed-off-by: NNikolay Aleksandrov <nikolay@cumulusnetworks.com>
      Acked-by: NMahesh Bandewar <maheshb@google.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      b0d4943e
    • S
      sh_eth: propagate platform_get_irq() error upstream · 7a468ac6
      Sergei Shtylyov 提交于
      The driver overrides the error returned by platform_get_irq() with -ENODEV
      which e.g. precludes the deferred  probing from working. Propagate the real
      error code to the driver core instead.
      Signed-off-by: NSergei Shtylyov <sergei.shtylyov@cogentembedded.com>
      Acked-by: NGeert Uytterhoeven <geert+renesas@glider.be>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      7a468ac6
    • S
      ravb: propagate platform_get_irq() error upstream · f375339e
      Sergei Shtylyov 提交于
      The driver overrides the error returned by platform_get_irq() with -ENODEV
      which e.g. precludes the deferred  probing from working. Propagate the real
      error code to the driver core instead.
      Signed-off-by: NSergei Shtylyov <sergei.shtylyov@cogentembedded.com>
      Acked-by: NGeert Uytterhoeven <geert+renesas@glider.be>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      f375339e
    • L
      sctp: ASCONF-ACK with Unresolvable Address should be sent · 7c5a9461
      lucien 提交于
      RFC 5061:
          This is an opaque integer assigned by the sender to identify each
          request parameter.  The receiver of the ASCONF Chunk will copy this
          32-bit value into the ASCONF Response Correlation ID field of the
          ASCONF-ACK response parameter.  The sender of the ASCONF can use this
          same value in the ASCONF-ACK to find which request the response is
          for.  Note that the receiver MUST NOT change this 32-bit value.
      
          Address Parameter: TLV
      
          This field contains an IPv4 or IPv6 address parameter, as described
          in Section 3.3.2.1 of [RFC4960].
      
      ASCONF chunk with Error Cause Indication Parameter (Unresolvable Address)
      should be sent if the Delete IP Address is not part of the association.
      
        Endpoint A                           Endpoint B
        (ESTABLISHED)                        (ESTABLISHED)
      
        ASCONF        ----------------->
        (Delete IP Address)
                      <-----------------      ASCONF-ACK
                                              (Unresolvable Address)
      Signed-off-by: NXin Long <lucien.xin@gmail.com>
      Acked-by: NVlad Yasevich <vyasevich@gmail.com>
      Acked-by: NMarcelo Ricardo Leitner <marcelo.leitner@gmail.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      7c5a9461
    • K
      netlink: mmap: fix lookup frame position · 7084a315
      Ken-ichirou MATSUZAWA 提交于
      __netlink_lookup_frame() was always called with the same "pos"
      value in netlink_forward_ring(). It will look at the same ring entry
      header over and over again, every time through this loop. Then cycle
      through the whole ring, advancing ring->head, not "pos" until it
      equals the "ring->head != head" loop test fails.
      Signed-off-by: NKen-ichirou MATSUZAWA <chamas@h4.dion.ne.jp>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      7084a315
    • C
      netlink: add NETLINK_CAP_ACK socket option · 0a6a3a23
      Christophe Ricard 提交于
      Since commit c05cdb1b ("netlink: allow large data transfers from
      user-space"), the kernel may fail to allocate the necessary room for the
      acknowledgment message back to userspace. This patch introduces a new
      socket option that trims off the payload of the original netlink message.
      
      The netlink message header is still included, so the user can guess from
      the sequence number what is the message that has triggered the
      acknowledgment.
      Signed-off-by: NPablo Neira Ayuso <pablo@netfilter.org>
      Signed-off-by: NChristophe Ricard <christophe-h.ricard@st.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      0a6a3a23
    • J
      openvswitch: Fix conntrack compilation without mark. · 0d5cdef8
      Joe Stringer 提交于
      Fix build with !CONFIG_NF_CONNTRACK_MARK && CONFIG_OPENVSWITCH_CONNTRACK
      
      Fixes: 182e3042 ("openvswitch: Allow matching on conntrack mark")
      Reported-by: NSimon Horman <simon.horman@netronome.com>
      Signed-off-by: NJoe Stringer <joestringer@nicira.com>
      Tested-by: NSimon Horman <simon.horman@netronome.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      0d5cdef8
    • D
      Merge git://git.kernel.org/pub/scm/linux/kernel/git/pablo/nf-next · 581a5f2a
      David S. Miller 提交于
      Pablo Neira Ayuso says:
      
      ====================
      Netfilter updates for net-next
      
      The following patchset contains Netfilter/IPVS updates for your net-next tree.
      In sum, patches to address fallout from the previous round plus updates from
      the IPVS folks via Simon Horman, they are:
      
      1) Add a new scheduler to IPVS: The weighted overflow scheduling algorithm
         directs network connections to the server with the highest weight that is
         currently available and overflows to the next when active connections exceed
         the node's weight. From Raducu Deaconu.
      
      2) Fix locking ordering in IPVS, always take rtnl_lock in first place. Patch
         from Julian Anastasov.
      
      3) Allow to indicate the MTU to the IPVS in-kernel state sync daemon. From
         Julian Anastasov.
      
      4) Enhance multicast configuration for the IPVS state sync daemon. Also from
         Julian.
      
      5) Resolve sparse warnings in the nf_dup modules.
      
      6) Fix a linking problem when CONFIG_NF_DUP_IPV6 is not set.
      
      7) Add ICMP codes 5 and 6 to IPv6 REJECT target, they are more informative
         subsets of code 1. From Andreas Herz.
      
      8) Revert the jumpstack size calculation from mark_source_chains due to chain
         depth miscalculations, from Florian Westphal.
      
      9) Calm down more sparse warning around the Netfilter tree, again from Florian
         Westphal.
      ====================
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      581a5f2a
    • D
      Merge branch 'bpf_trace_printk-percent-s' · cc7acad1
      David S. Miller 提交于
      Alexei Starovoitov says:
      
      ====================
      support for '%s' in bpf_trace_printk
      
      v2->v3:
      fix the comment to mention that strncpy_from_unsafe() returns
      the length of the string including the trailing NUL.
      
      v1->v2:
      patch 1: generalize FETCH_FUNC_NAME(memory, string) into
      strncpy_from_unsafe()
      patch 2: use it in bpf_trace_printk
      ====================
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      cc7acad1
    • A
      bpf: add support for %s specifier to bpf_trace_printk() · 8d3b7dce
      Alexei Starovoitov 提交于
      %s specifier makes bpf program and kernel debugging easier.
      To make sure that trace_printk won't crash the unsafe string
      is copied into stack and unsafe pointer is substituted.
      
      The following C program:
       #include <linux/fs.h>
      int foo(struct pt_regs *ctx, struct filename *filename)
      {
        void *name = 0;
      
        bpf_probe_read(&name, sizeof(name), &filename->name);
        bpf_trace_printk("executed %s\n", name);
        return 0;
      }
      
      when attached to kprobe do_execve()
      will produce output in /sys/kernel/debug/tracing/trace_pipe :
          make-13492 [002] d..1  3250.997277: : executed /bin/sh
            sh-13493 [004] d..1  3250.998716: : executed /usr/bin/gcc
           gcc-13494 [002] d..1  3250.999822: : executed /usr/lib/gcc/x86_64-linux-gnu/4.7/cc1
           gcc-13495 [002] d..1  3251.006731: : executed /usr/bin/as
           gcc-13496 [002] d..1  3251.011831: : executed /usr/lib/gcc/x86_64-linux-gnu/4.7/collect2
      collect2-13497 [000] d..1  3251.012941: : executed /usr/bin/ld
      Suggested-by: NBrendan Gregg <brendan.d.gregg@gmail.com>
      Signed-off-by: NAlexei Starovoitov <ast@plumgrid.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      8d3b7dce
    • A
      lib: introduce strncpy_from_unsafe() · 1a6877b9
      Alexei Starovoitov 提交于
      generalize FETCH_FUNC_NAME(memory, string) into
      strncpy_from_unsafe() and fix sparse warnings that were
      present in original implementation.
      Signed-off-by: NAlexei Starovoitov <ast@plumgrid.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      1a6877b9
    • N
      netpoll: warn on netpoll_send_udp users who haven't disabled irqs · c9fd56b3
      Nikolay Aleksandrov 提交于
      Make sure we catch future netpoll_send_udp users who use it without
      disabling irqs and also as a hint for poll_controller users.
      Signed-off-by: NNikolay Aleksandrov <nikolay@cumulusnetworks.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      c9fd56b3
    • D
      Merge branch 'phylib-simplifications' · 55cc0519
      David S. Miller 提交于
      Sergei Shtylyov says:
      
      ====================
      Some phylib simplifications
      
         Here's 2 patches against DaveM's 'net-next.git' repo. We simplify a bogus
      string of type casts in the 1st patch and make the code respect some coding
      standards of the networking code in the 2nd one. I may follow with fixing of
      checkpatch.pl's complaints. if I have time..
      ====================
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      55cc0519
    • S
      phylib: simplify NULL checks · ef899c07
      Sergei Shtylyov 提交于
      Fix scripts/checkpatch.pl's messages like:
      
      CHECK: Comparison to NULL could be written "!phydrv->read_mmd_indirect"
      
      BTW, it doesn't detect the reversed comparisons (which I've fixed as well).
      Signed-off-by: NSergei Shtylyov <sergei.shtylyov@cogentembedded.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      ef899c07
    • S
      phylib: simplify bogus phy_device_create() result · d3765f08
      Sergei Shtylyov 提交于
      Get rid of the bogus string of type casts where ERR_PTR() is enough.
      Signed-off-by: NSergei Shtylyov <sergei.shtylyov@cogentembedded.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      d3765f08
    • D
      net: sched: don't break line in tc_classify loop notification · c1b3b199
      Daniel Borkmann 提交于
      Just some minor noise follow-up to address some stylistic issues of
      commit 3b3ae880 ("net: sched: consolidate tc_classify{,_compat}").
      Accidentally v1 instead of v2 of that commit got applied, so this
      patch adds the relative diff.
      Suggested-by: NAlexei Starovoitov <ast@plumgrid.com>
      Signed-off-by: NDaniel Borkmann <daniel@iogearbox.net>
      Acked-by: NAlexei Starovoitov <ast@plumgrid.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      c1b3b199
    • S
      sfc: Allow driver to cope with a lower number of VIs than it needs for RSS · b0fbdae1
      Shradha Shah 提交于
      Previously, the driver would refuse to load if it couldn't secure
      enough VIs from the MC to fulfill its RSS requirements.
      This was causing probe to fail on later functions in
      configurations where we'd run out of VIs, such as having many
      VFs.
      
      This change allows the driver to load with fewer VIs, down to a
      minimum of 2. A warning will be printed saying that RSS
      requirements were not met, possibly affecting performance.
      
      efx->max_tx_channels needs to be set to avoid going down the
      failure path in efx_probe_nic() immediately in the loop after the
      probe() NIC-type function.
      Also, Set rc=ENOSPC when bombing out of efx_probe_nic due to lack
      of VIs.
      Signed-off-by: NShradha Shah <sshah@solarflare.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      b0fbdae1