Commit Graph

60 Commits

Author SHA1 Message Date
pfg
123efcdbc4 ixl(4): replace 0 with NULL for pointers.
Found by devel/coccinelle.

Differential Revision:	https://reviews.freebsd.org/D5894
Reviewed by:	erj
2016-04-09 17:37:36 +00:00
sephe
d0428dd51c tcp/lro: Use tcp_lro_flush_all in device drivers to avoid code duplication
And factor out tcp_lro_rx_done, which deduplicates the same logic with
netinet/tcp_lro.c

Reviewed by:	gallatin (1st version), hps, zbb, np, Dexuan Cui <decui microsoft com>
Sponsored by:	Microsoft OSTC
Differential Revision:	https://reviews.freebsd.org/D5725
2016-04-01 06:28:33 +00:00
smh
6203396b65 Fix ixl with RSS
Fix compilation of ixl when RSS option is set, broken by r295946

MFC after:	3 weeks
X-MFC-With:	r295946
Sponsored by:	Multiplay
Differential Revision:	https://reviews.freebsd.org/D5428
2016-03-03 19:49:37 +00:00
erj
c2197759a2 ixl(4)/ixlv(4): Remove a couple unnecessary register writes/flushes.
The one in ixl_xmit() has brought up to us as being unnecessary at least a
couple times.

Differential Revision:	https://reviews.freebsd.org/D5208
Tested by:	jeffrey.e.pieper@intel.com
Sponsored by:	Intel Corporation
2016-02-24 01:11:51 +00:00
erj
79e87efc0f ixl(4): Fix potential driver interrupt setup issues and startup crash.
- Limit queue autoconfiguration to 8 queues to prevent the driver from
  requesting a large number of MSI-X vectors at boot.

- Fix potential kernel panic that occurs when the driver loads and cannot
  get all requested MSIX vectors. Instead, attach() will fail with an error.
  - Move taskqueue setup to later in attach() to prevent having to free
    taskqueues if some other error in attach() occurs.

Differential Revision:	 https://reviews.freebsd.org/D5205
MFC after:	1 month
Tested by:	jeffrey.e.pieper@intel.com
Sponsored by:	Intel Corporation
2016-02-24 00:42:43 +00:00
erj
7a33cbc5f7 ixl(4)/ixlv(4): Revert m_collapse() in ixl_xmit() to m_defrag().
The m_collapse() call would fail when transmitting medium-sized packets
when the interface mtu was set to 9000, so revert back to m_defrag(),
which does not fail.

Differential Revision:	https://reviews.freebsd.org/D5207
Tested by:	jeffrey.e.pieper@intel.com
Sponsored by:	Intel Corporation
2016-02-19 22:48:20 +00:00
erj
225a8e89c9 ixl(4): Fix errors in queue interrupt setup in MSIX mode.
- I40E_PFINT_DYN_CTLN needs to be cleared, and not have a queue index
  written to it.
- The interrupt linked list for each queue is changed to only include
  the queue's Rx and Tx queues.

Differential Revision:	https://reviews.freebsd.org/D5206
Reviewed by:	sbruno
Tested by:	jeffrey.e.pieper@intel.com
Sponsored by:	Intel Corporation
2016-02-19 22:45:09 +00:00
erj
2465eca61d ixl(4): Remove unsupported device IDs.
There is no official support for 20G SKUs on FreeBSD, and the KX_A
device ID was never used.

Differential Revision:	https://reviews.freebsd.org/D5204
Reviewed by:	sbruno, jeffrey.e.pieper@intel.com
Sponsored by:	Intel Corporation
2016-02-19 22:33:50 +00:00
erj
e34609452b ixl(4): Fix two important RSS bugs.
- Change tc_mapping field to assign 64 queues instead of 16 to the PF's VSI;
  add comments to describe how this is done.

- Set hash lut size to 512 when setting filter control; the lut size defaults
  to 128 if this isn't set.

Differential Revision:	https://reviews.freebsd.org/D5203
Reviewed by:	gallatin
Tested by:	jeffrey.e.pieper@intel.com
Sponsored by:	Intel Corporation
2016-02-19 21:58:14 +00:00
kevlo
2c479e8390 Add missing parentheses.
Found by:	PVS-Studio
2016-02-19 01:56:59 +00:00
smh
4b996ada09 Fix phy interrupts setup for ixl
Fix the inverted set of interrupts being used as the mask for ixl.

Without this ixl devices fail to detect link state changes.

Reviewed by:	erj, sbruno
MFC after:	2 days
Sponsored by:	Multiplay
2016-01-29 21:06:59 +00:00
ngie
e3d5f3b7b8 Fix ixl(4) compilation with PCI_IOV pre-r266974
stable/10 doesn't have the if_getdrvflags(9) KPI. Reference the field in the
structure directly if the __FreeBSD_version is < 1100022, so the driver can
be built with PCI_IOV support on stable/10, without backporting all of
r266974 (which requires additional changes due to projects/ifnet, etc)

Differential Revision: https://reviews.freebsd.org/D4759
Reviewed by: erj, sbruno
Sponsored by: EMC / Isilon Storage Division
2016-01-03 18:09:46 +00:00
smh
6db964f7f3 Fix ixl debug sysctls panic
Remove the use of sbuf_data on drained sbufs from the debug sysctls:
* ixl_sysctl_hw_res_alloc
* ixl_sysctl_switch_config

This prevents a kernel panic when accessing these values under a kernel
compiled with INVARIANTS.

Sponsored by:	Multiplay
2015-11-12 09:45:35 +00:00
sbruno
87513df011 ixl(4): Remove compile warning for unused function.
sys/dev/ixl/if_ixl.c:4377:1: warning: unused function 'ixl_debug_info' [-Wunused-function]
ixl_debug_info(SYSCTL_HANDLER_ARGS)

Differential Revision:	https://reviews.freebsd.org/D3718
Submitted by:	bz
2015-10-13 17:20:05 +00:00
erj
ca4bbb4933 Fix for a customer issue with ixl(4):
- Add required MAC/VLAN filter when adding an LAA
- Fix bug where code did not check for I40E_SUCCESS from a successful
  i40e_validate_mac_address() call in ixl_init_locked(), when setting
  an LAA.

PR: 201240
Differential Revision: https://reviews.freebsd.org/D3111
Submitted by: Gregory Rose <gregory.v.rose@intel.com>
Reviewed by: gnn, rstone
Approved by: gnn
MFC after: 2 weeks
2015-07-21 21:07:18 +00:00
gallatin
a82bff7dcf Fix typo in baudrate initialization that was causing ixl to be seen as
a 4GbE NIC, rather than a 40GbE NIC.

Reviewed by:	Eric Joyner <eric.joyner@intel.com>
MFC after:	3 days
Sponsored by:	Netflix
2015-06-19 21:40:26 +00:00
jfv
d19d4db4e2 Update SW4 to the Intel ixl/ixlv drivers. This is primarily a shared
code update, with supporting changes in the CORE. Changes for the extended
media types, VF driver has virtual channel protocol changes, and some
register use corrections.  This software change should be coordinated with
Firmware updates to your hardware, contact your support channels for that.

MFC after:	1 week
2015-06-05 22:52:42 +00:00
jhb
a2158a48ce Create a separate kobj interface for leaf-driver PCI IOV methods.
Leaf drivers should not import the PCI bus interface to add IOV handling.
Instead, move the IOV client methods to a separate kobj interface.

Differential Revision:	https://reviews.freebsd.org/D2584
Reviewed by:	rstone
2015-05-28 22:01:50 +00:00
jhb
a7c0f715c7 Remove executable property from several ixl(4) source files.
Differential Revision:	https://reviews.freebsd.org/D2583
Reviewed by:	erj
2015-05-19 18:35:18 +00:00
araujo
7f58a65822 Free vsi->queues after use.
Differential Revision:	D2344
Reviewed by:		erj
2015-05-15 06:11:47 +00:00
jhb
4df8afdd58 Various fixes to the stats in igb(4), ixgbe(4), and ixl(4).
- Use hardware counters for ifnet stats in igb(4) when possible.  This
  ensures these stats include packets that bypass the regular stack via
  netmap.
- Don't derefence values off the end of the igb(4) VF stats structure.
  Instead, add a dedicated if_get_counter method for igb(4) VF interfaces.
- Report missed packets on igb(4) as input queue drops rather than an
  input error.
- Report bug_ring drop counts as output queue drops for igb(4) and ixgbe(4).
- Export the buf_ring drop stats for individual rings via sysctl on
  ixgbe(4).
- Fix a typo that in ixl(4) that caused output queue drops to be reported
  as input queue drops and input queue drops to be unreported.

Differential Revision:	https://reviews.freebsd.org/D2402
Reviewed by:	jfv, rstone (6)
Sponsored by:	Norse Corp, Inc.
2015-04-30 18:23:38 +00:00
ian
209179a5f9 Remove redundant sysctl_handle_string() calls, the sbuf auto-drain takes
care of that.

Reviewed by:	erj@
2015-03-15 17:39:38 +00:00
jfv
df6f03cc35 Replace the DEV_NETMAP code that accidentally got removed in the
last commit.

MFC after: 1 week
2015-03-10 19:55:43 +00:00
jfv
1d8f4435d6 This delta introduces SRIOV support, thanks to Ryan Stone of Sandvine for
adding this major feature to the driver. Secondly, this updates the base
driver with new 20G device support, and with the new firmware levels some
changes to link handling and initialization were required.

MFC after: 1 week
2015-03-10 19:17:40 +00:00
adrian
c346822f0b Migrate using CPU_ZERO() + CPU_SET() -> CPU_SETOF().
Tested:

* ixgbe, igb, RSS enabled

Submitted by:	jhb
Sponsored by:	Norse Corp, Inc.
2015-02-25 21:44:53 +00:00
adrian
fb45b18a63 Change uses of taskqueue_start_threads_pinned() -> taskqueue_start_threads_cpuset()
Differential Revision:	https://reviews.freebsd.org/D1897
Reviewed by:	jfv
2015-02-24 22:17:12 +00:00
luigi
b870399cc1 Add native netmap support to ixl.
Preliminary tests indicate 32 Mpps on tx, 24 Mpps on rx
with source and receiver on two different ports of the same 40G card.
Optimizations are likely possible.
The code follows closely the one for ixgbe so i do not
expect stability issues.

Hardware kindly supplied by Intel.

Reviewed by:	Jack Vogel
MFC after:	1 week
2015-02-24 06:20:50 +00:00
jfv
c0ae6c2127 Bring the XL710 drivers up to the SW3 release level.
MFC after: 1 week
2015-02-20 00:40:26 +00:00
adrian
f1c9d3f332 Refactor / restructure the RSS code into generic, IPv4 and IPv6 specific
bits.

The motivation here is to eventually teach netisr and potentially
other networking subsystems a bit more about how RSS work queues / buckets
are configured so things have a hope of auto-configuring in the future.

* net/rss_config.[ch] takes care of the generic bits for doing
  configuration, hash function selection, etc;
* topelitz.[ch] is now in net/ rather than netinet/;
* (and would be in libkern if it didn't directly include RSS_KEYSIZE;
  that's a later thing to fix up.)
* netinet/in_rss.[ch] now just contains the IPv4 specific methods;
* and netinet/in6_rss.[ch] now just contains the IPv6 specific methods.

This should have no functional impact on anyone currently using
the RSS support.

Differential Revision:	D1383
Reviewed by:	gnn, jfv (intel driver bits)
2015-01-18 18:06:40 +00:00
jfv
ce3bcc13cb Some RSS issues discovered by Adrian, missing header, variable
names fat fingered, incorrect hash config setup. Thanks :)

MFC after: 1 week
2015-01-16 19:11:58 +00:00
jfv
31bf2a65cc Cleanup some bogus code in the RSS config, and add the include
for the rss option file. And bump the version.

MFC after:	1 week
2015-01-13 22:13:30 +00:00
jfv
ea004da6c1 Complete the RX side RSS code: parse the encoded portion of the RX
descriptor to determine the correct hash type.

MFC after:1 week
2015-01-13 18:56:29 +00:00
bz
e0dcbcc41d Move the vsi variable outside of the #ifdef block to unbreak NOIP kernels
after r277084.

MFC after:	6 days
X-MFC with:	r277084
2015-01-13 14:15:00 +00:00
jfv
030bdce2ee Missing RSS support added, this fixes the build, but the code
in the RX side was complicated by recent changes and will need
some further tweaking.
2015-01-12 20:59:07 +00:00
jfv
b5fde175b4 Intel I40E driver updates:
if_ixl to version 1.3.0, if_ixlv to version 1.2.0
	- Major change in both drivers is to add RSS support
	- In ixl fix some interface speed related issues, dual
	  speed was not changing correctly, KR/X media was not
	  displaying correctly (this has a workaround until a
	  more robust media handling is in place)
	- Add a warning when using Dell NPAR and the speed is
	  less than 10G
	- Wrap a queue hung message in IXL_DEBUG, as it is non-fatal,
	  and without tuning can display excessively

MFC after: 1 week
2015-01-12 18:43:34 +00:00
jfv
a5395845cc Update to the shared code for Intel I40E drivers in preparation
for the ixl 1.3.0 and ixlv 1.2.0 revisions.

MFC after:	1 week
2015-01-12 18:32:45 +00:00
hselasky
12fec3618b Start process of removing the use of the deprecated "M_FLOWID" flag
from the FreeBSD network code. The flag is still kept around in the
"sys/mbuf.h" header file, but does no longer have any users. Instead
the "m_pkthdr.rsstype" field in the mbuf structure is now used to
decide the meaning of the "m_pkthdr.flowid" field. To modify the
"m_pkthdr.rsstype" field please use the existing "M_HASHTYPE_XXX"
macros as defined in the "sys/mbuf.h" header file.

This patch introduces new behaviour in the transmit direction.
Previously network drivers checked if "M_FLOWID" was set in "m_flags"
before using the "m_pkthdr.flowid" field. This check has now now been
replaced by checking if "M_HASHTYPE_GET(m)" is different from
"M_HASHTYPE_NONE". In the future more hashtypes will be added, for
example hashtypes for hardware dedicated flows.

"M_HASHTYPE_OPAQUE" indicates that the "m_pkthdr.flowid" value is
valid and has no particular type. This change removes the need for an
"if" statement in TCP transmit code checking for the presence of a
valid flowid value. The "if" statement mentioned above is now a direct
variable assignment which is then later checked by the respective
network drivers like before.

Additional notes:
- The SCTP code changes will be committed as a separate patch.
- Removal of the "M_FLOWID" flag will also be done separately.
- The FreeBSD version has been bumped.

MFC after:	1 month
Sponsored by:	Mellanox Technologies
2014-12-01 11:45:24 +00:00
bz
08e27a29f2 After r274205 unbreak NOIP kernels. vsi is now also used outside
address family specific blocks so move it out from under the condition.

MFC after:	6 days
X-MFC with:	r274205
2014-11-07 11:34:06 +00:00
jfv
fa8aef64de Add header file missing from last commit.
Submitted by: jfv
MFC after: 1 week
2014-11-07 04:47:46 +00:00
jfv
0899364592 Update the Intel i40e drivers, ixl version 1.2.8, ixlv version 1.1.18
-Improved VF stability, thanks to changes from Ryan Stone,
	 and Juniper.
	- RSS fixes in the ixlv driver
	- link detection in the ixlv driver
	- New sysctl's added in ixl and ixlv
	- reset timeout increased for ixlv
	- stability fixes in detach
	- correct media reporting
	- Coverity warnings fixed
	- Many small bug fixes
	- VF Makefile modified - nvm shared code needed
	- remove unused sleep channels in ixlv_sc struct

Submitted by: Eric Joyner (committed by jfv)
MFC after:	1 week
2014-11-06 23:45:05 +00:00
jimharris
5d932fc621 ixl: remove i40e_register_x710_int.h
This file is not used by the FreeBSD ixl driver.

Submitted by:	Eric Joyner <eric.joyner@intel.com>
MFC after:	3 days
2014-10-21 18:00:56 +00:00
hselasky
49c137f7be Fix multiple incorrect SYSCTL arguments in the kernel:
- Wrong integer type was specified.

- Wrong or missing "access" specifier. The "access" specifier
sometimes included the SYSCTL type, which it should not, except for
procedural SYSCTL nodes.

- Logical OR where binary OR was expected.

- Properly assert the "access" argument passed to all SYSCTL macros,
using the CTASSERT macro. This applies to both static- and dynamically
created SYSCTLs.

- Properly assert the the data type for both static and dynamic
SYSCTLs. In the case of static SYSCTLs we only assert that the data
pointed to by the SYSCTL data pointer has the correct size, hence
there is no easy way to assert types in the C language outside a
C-function.

- Rewrote some code which doesn't pass a constant "access" specifier
when creating dynamic SYSCTL nodes, which is now a requirement.

- Updated "EXAMPLES" section in SYSCTL manual page.

MFC after:	3 days
Sponsored by:	Mellanox Technologies
2014-10-21 07:31:21 +00:00
rstone
4f65713d76 Ensure that ixl_flush() uses a defined register on VFs
In some code that is shared between the ixl(4) and ixlv(4) drivers,
a macro hard-coded a register offset that was not valid on ixlv devices.
Fix this by having each driver define a variable that contains the correct
offset.

Reviewed by:	Eric Joyner <ricera10 AT gmail.com>
MFC after:	3 days
Sponsored by:	Sandvine Inc
2014-09-29 17:51:39 +00:00
glebius
957dedb1ad Convert driver to if_get_counter method.
Submitted by:	rstone
Reviewed by:	Eric Joyner <ricera10 gmail.com>
2014-09-27 20:54:57 +00:00
bz
a54263628c Given we are restricting ixl(4) to 64bit platforms now backout the change
r270820 to common (shared) Intel code no longer needed.

MFC after:	3 days
2014-09-23 08:39:08 +00:00
bz
c09cc0a642 Hide LRO code under #ifdef INET/INET6 to allow NOIP kernel to compile.
While the code comments indicate that LRO is currently only supported
for IPv4/TCP, we'll still compile it in for IPv6.

MFC after:	3 days
2014-09-21 00:05:44 +00:00
bz
590ea256c3 Properly hide calls to ARP under #ifdef INET to allow IPv6-only
kernels to compile.

MFC atfer:	3 days
2014-09-20 08:34:56 +00:00
bz
a8148aa736 Revert r270808, which were changes to common code (i40e_alloc.h).
Rather than #define-ing common code function calls to OS-dependent
ones, make the osdep versions match the common code expectations,
adjust the FreeBSD specific code to use those, and remove the
#defines.

In the FreeBSD specific code, use "i40e_mem_reserved" for the
now expected but unused argument to i40e_allocate_dma_mem().

Reviewed by:	gnn, eric.joyner intel.com
MFC after:	3 days
2014-09-18 21:13:03 +00:00
bz
b30be52a0a For consistency with the shared header file (and to avoid confusion
with mbufs normally called *m in one place), rename the function
arguments to "mem".

This is a non-functional change.

Reviewed by:	gnn, eric.joyner intel.com
MFC after:	3 days
2014-09-18 08:56:25 +00:00
glebius
9b93b159b3 Use define from if_var.h to access a field inside struct if_data,
that resides in struct ifnet.

Sponsored by:	Nginx, Inc.
2014-08-30 19:55:54 +00:00