svn commit: r222588 - head/sys/dev/ixgbe
Jack Vogel
jfvogel at gmail.com
Thu Jun 2 05:15:22 UTC 2011
Opps, will fix directly, forgot about a last minute change to ixv.c
Jack
On Wed, Jun 1, 2011 at 9:32 PM, Martin Wilke <miwi at freebsd.org> wrote:
> that commit break the build ..
>
> -Wno-pointer-sign -fformat-extensions -Wmissing-include-dirs
> -fdiagnostics-show-option -nostdinc -I. -I/usr/src/sys
> -I/usr/src/sys/contrib/altq -D_KERNEL -DHAVE_KERNEL_OPTION_HEADERS -include
> opt_global.h -fno-common -finline-limit=8000 --param inline-unit-growth=100
> --param large-function-growth=1000 -fno-omit-frame-pointer -mno-sse
> -mcmodel=kernel -mno-red-zone -mno-mmx -msoft-float
> -fno-asynchronous-unwind-tables -ffreestanding -fstack-protector -Werror
> /usr/src/sys/dev/iwn/if_iwn.c
> cc -c -O2 -frename-registers -pipe -fno-strict-aliasing -std=c99 -g -Wall
> -Wredundant-decls -Wnested-externs -Wstrict-prototypes -Wmissing-prototypes
> -Wpointer-arith -Winline -Wcast-qual -Wundef -Wno-pointer-sign
> -fformat-extensions -Wmissing-include-dirs -fdiagnostics-show-option
> -nostdinc -I. -I/usr/src/sys -I/usr/src/sys/contrib/altq -D_KERNEL
> -DHAVE_KERNEL_OPTION_HEADERS -include opt_global.h -fno-common
> -finline-limit=8000 --param inline-unit-growth=100 --param
> large-function-growth=1000 -fno-omit-frame-pointer -mno-sse -mcmodel=kernel
> -mno-red-zone -mno-mmx -msoft-float -fno-asynchronous-unwind-tables
> -ffreestanding -fstack-protector -Werror /usr/src/sys/dev/ixgbe/ixgbe.c
> -I/usr/src/sys/dev/ixgbe
> cc -c -O2 -frename-registers -pipe -fno-strict-aliasing -std=c99 -g -Wall
> -Wredundant-decls -Wnested-externs -Wstrict-prototypes -Wmissing-prototypes
> -Wpointer-arith -Winline -Wcast-qual -Wundef -Wno-pointer-sign
> -fformat-extensions -Wmissing-include-dirs -fdiagnostics-show-option
> -nostdinc -I. -I/usr/src/sys -I/usr/src/sys/contrib/altq -D_KERNEL
> -DHAVE_KERNEL_OPTION_HEADERS -include opt_global.h -fno-common
> -finline-limit=8000 --param inline-unit-growth=100 --param
> large-function-growth=1000 -fno-omit-frame-pointer -mno-sse -mcmodel=kernel
> -mno-red-zone -mno-mmx -msoft-float -fno-asynchronous-unwind-tables
> -ffreestanding -fstack-protector -Werror /usr/src/sys/dev/ixgbe/ixv.c
> -I/usr/src/sys/dev/ixgbe
> cc1: warnings being treated as errors
> /usr/src/sys/dev/ixgbe/ixv.c: In function 'ixv_ioctl':
> /usr/src/sys/dev/ixgbe/ixv.c:700: warning: initialization from incompatible
> pointer type
> /usr/src/sys/dev/ixgbe/ixv.c:709: error: 'struct ifreq' has no member named
> 'ifa_addr'
> /usr/src/sys/dev/ixgbe/ixv.c:713: error: 'struct ifreq' has no member named
> 'ifa_addr'
> /usr/src/sys/dev/ixgbe/ixv.c:726: warning: passing argument 2 of
> 'arp_ifinit' from incompatible pointer type
> *** Error code 1
>
> Stop in /usr/obj/usr/src/sys/GENERIC.
> *** Error code 1
>
> Stop in /usr/src.
> *** Error code 1
>
>
>
> On Thu, Jun 2, 2011 at 8:34 AM, Jack F Vogel <jfv at freebsd.org> wrote:
>
>> Author: jfv
>> Date: Thu Jun 2 00:34:57 2011
>> New Revision: 222588
>> URL: http://svn.freebsd.org/changeset/base/222588
>>
>> Log:
>> First off: update the driver README, the old one was horribly
>> crusty, and this still isn't perfect, but its at least a bit
>> more recent.
>>
>> Secondly, a few improvements to the driver from Andrew Boyer,
>> support hint to allow devices to not attach, add VLAN_HWTSO
>> capability so vlans can use TSO, fix in the interrupt handler
>> to make sure the stack TX queue is processed. Oh, and also
>> make sure IPv6 does not cause a re-init in the ioctl routine.
>> Thanks for your efforts Andrew!
>>
>> Thanks to Claudio Jeker for noticing the ixgbe_xmit() routine
>> was not correctly swapping the dma map from the first to the
>> last descriptor in a multi-descriptor transmission, corrected
>> this.
>>
>> Modified:
>> head/sys/dev/ixgbe/LICENSE
>> head/sys/dev/ixgbe/README
>> head/sys/dev/ixgbe/ixgbe.c
>> head/sys/dev/ixgbe/ixv.c
>>
>> Modified: head/sys/dev/ixgbe/LICENSE
>>
>> ==============================================================================
>> --- head/sys/dev/ixgbe/LICENSE Wed Jun 1 22:56:02 2011 (r222587)
>> +++ head/sys/dev/ixgbe/LICENSE Thu Jun 2 00:34:57 2011 (r222588)
>> @@ -1,6 +1,6 @@
>>
>> /******************************************************************************
>>
>> - Copyright (c) 2001-2010, Intel Corporation
>> + Copyright (c) 2001-2011, Intel Corporation
>> All rights reserved.
>>
>> Redistribution and use in source and binary forms, with or without
>>
>> Modified: head/sys/dev/ixgbe/README
>>
>> ==============================================================================
>> --- head/sys/dev/ixgbe/README Wed Jun 1 22:56:02 2011 (r222587)
>> +++ head/sys/dev/ixgbe/README Thu Jun 2 00:34:57 2011 (r222588)
>> @@ -1,8 +1,8 @@
>> -FreeBSD Driver for 10 Gigabit PCI Express Server Adapters
>> -=============================================
>> +FreeBSD Driver for Intel(R) Ethernet 10 Gigabit PCI Express Server
>> Adapters
>>
>> +============================================================================
>> /*$FreeBSD$*/
>>
>> -May 14, 2008
>> +November 12, 2010
>>
>>
>> Contents
>> @@ -11,15 +11,15 @@ Contents
>> - Overview
>> - Supported Adapters
>> - Building and Installation
>> -- Additional Configurations
>> +- Additional Configurations and Tuning
>> - Known Limitations
>>
>>
>> Overview
>> ========
>>
>> -This file describes the FreeBSD* driver for the 10 Gigabit PCIE Family of
>> -Adapters. Drivers has been developed for use with FreeBSD 7 or later.
>> +This file describes the FreeBSD* driver for the Intel(R) Ethernet 10
>> Gigabit
>> +Family of Adapters. Driver has been developed for use with FreeBSD 7.2
>> or later.
>>
>> For questions related to hardware requirements, refer to the
>> documentation
>> supplied with your Intel 10GbE adapter. All hardware requirements listed
>> @@ -29,100 +29,98 @@ apply to use with FreeBSD.
>> Supported Adapters
>> ==================
>>
>> -The following Intel network adapters are compatible with the drivers in
>> this
>> -release:
>> -
>> -Controller Adapter Name Physical Layer
>> ----------- ------------ --------------
>> -82598EB Intel(R) 10 Gigabit XF SR/AF 10G Base -LR (850 nm
>> optical fiber)
>> - Dual Port Server Adapter 10G Base -SR (1310 nm
>> optical fiber)
>> -82598EB Intel(R) 10 Gigabit XF SR/LR
>> - Server Adapter
>> - Intel(R) 82598EB 10 Gigabit AF
>> - Network Connection
>> - Intel(R) 82598EB 10 Gigabit AT
>> - CX4 Network Connection
>> +The driver in this release is compatible with 82598 and 82599-based Intel
>> +Network Connections.
>>
>> +SFP+ Devices with Pluggable Optics
>> +----------------------------------
>>
>> -Building and Installation
>> -=========================
>> -
>> -NOTE: You must have kernel sources installed in order to compile the
>> driver
>> - module.
>> -
>> - In the instructions below, x.x.x is the driver version as indicated
>> in
>> - the name of the driver tar.
>> -
>> -1. Move the base driver tar file to the directory of your choice. For
>> - example, use /home/username/ixgbe or /usr/local/src/ixgbe.
>> -
>> -2. Untar/unzip the archive:
>> - tar xfz ixgbe-x.x.x.tar.gz
>> -
>> -3. To install man page:
>> - cd ixgbe-x.x.x
>> - gzip -c ixgbe.4 > /usr/share/man/man4/ixgbee.4.gz
>> -
>> -4. To load the driver onto a running system:
>> - cd ixgbe-x.x.x/src
>> - make load
>> -
>> -5. To assign an IP address to the interface, enter the following:
>> - ifconfig ix<interface_num> <IP_address>
>> -
>> -6. Verify that the interface works. Enter the following, where
>> <IP_address>
>> - is the IP address for another machine on the same subnet as the
>> interface
>> - that is being tested:
>> - ping <IP_address>
>> -
>> -7. If you want the driver to load automatically when the system is
>> booted:
>> -
>> - cd ixgbe-x.x.x/src
>> - make
>> - make install
>> -
>> - Edit /boot/loader.conf, and add the following line:
>> - ixgbe_load="YES"
>> -
>> - OR
>> -
>> - compile the driver into the kernel (see item 8).
>> -
>> -
>> - Edit /etc/rc.conf, and create the appropriate
>> ifconfig_ixgbe<interface_num>
>> - entry:
>> -
>> - ifconfig_ix<interface_num>="<ifconfig_settings>"
>> -
>> - Example usage:
>> -
>> - ifconfig_ix0="inet 192.168.10.1 netmask 255.255.255.0"
>> -
>> - NOTE: For assistance, see the ifconfig man page.
>> -
>> -8. If you want to compile the driver into the kernel, enter:
>> +82599-BASED ADAPTERS
>>
>> - FreeBSD 7 or later:
>> +NOTE: If your 82599-based Intel(R) Ethernet Network Adapter came with
>> Intel
>> +optics, or is an Intel(R) Ethernet Server Adapter X520-2, then it only
>> supports
>> +Intel optics and/or the direct attach cables listed below.
>>
>> - cd ixgbe-x.x.x/src
>> -
>> - cp *.[ch] /usr/src/sys/dev/ixgbe
>> -
>> - cp Makefile.kernel /usr/src/sys/modules/ixgbe/Makefile
>> -
>> - Edit the kernel configuration file (i.e., GENERIC or MYKERNEL) in
>> - /usr/src/sys/i386/conf (replace "i386" with the appropriate system
>> - architecture if necessary), and ensure the following line is
>> present:
>> -
>> - device ixgbe
>> -
>> - Compile and install the kernel. The system must be reboot for the
>> kernel
>> - updates to take affect. For additional information on compiling the
>> kernel,
>> - consult the FreeBSD operating system documentation.
>> +When 82599-based SFP+ devices are connected back to back, they should be
>> set to
>> +the same Speed setting via Ethtool. Results may vary if you mix speed
>> settings.
>> +
>> +Supplier Type Part Numbers
>>
>> +SR Modules
>> +Intel DUAL RATE 1G/10G SFP+ SR (bailed)
>> FTLX8571D3BCV-IT
>> +Intel DUAL RATE 1G/10G SFP+ SR (bailed)
>> AFBR-703SDZ-IN2
>> +Intel DUAL RATE 1G/10G SFP+ SR (bailed)
>> AFBR-703SDDZ-IN1
>> +LR Modules
>> +Intel DUAL RATE 1G/10G SFP+ LR (bailed)
>> FTLX1471D3BCV-IT
>> +Intel DUAL RATE 1G/10G SFP+ LR (bailed)
>> AFCT-701SDZ-IN2
>> +Intel DUAL RATE 1G/10G SFP+ LR (bailed)
>> AFCT-701SDDZ-IN1
>> +
>> +The following is a list of 3rd party SFP+ modules and direct attach
>> cables that
>> +have received some testing. Not all modules are applicable to all
>> devices.
>> +
>> +Supplier Type Part Numbers
>> +
>> +Finisar SFP+ SR bailed, 10g single rate
>> FTLX8571D3BCL
>> +Avago SFP+ SR bailed, 10g single rate AFBR-700SDZ
>> +Finisar SFP+ LR bailed, 10g single rate
>> FTLX8571D3BCV-IT
>> +
>> +Finisar DUAL RATE 1G/10G SFP+ SR (No Bail)
>> FTLX8571D3QCV-IT
>> +Avago DUAL RATE 1G/10G SFP+ SR (No Bail)
>> AFBR-703SDZ-IN1
>> +Finisar DUAL RATE 1G/10G SFP+ LR (No Bail)
>> FTLX1471D3QCV-IT
>> +Avago DUAL RATE 1G/10G SFP+ LR (No Bail)
>> AFCT-701SDZ-IN1
>> +Finistar 1000BASE-T SFP
>> FCLF8522P2BTL
>> +Avago 1000BASE-T SFP ABCU-5710RZ
>> +
>> +82599-based adapters support all passive and active limiting direct
>> attach
>> +cables that comply with SFF-8431 v4.1 and SFF-8472 v10.4 specifications.
>> +
>> +Laser turns off for SFP+ when ifconfig down
>> +--------------------------------------------------------
>> +"ifconfig down" turns off the laser for 82599-based SFP+ fiber adapters.
>> +"ifconfig up" turns on the later.
>> +
>> +82598-BASED ADAPTERS
>> +
>> +NOTES for 82598-Based Adapters:
>> +- Intel(R) Ethernet Network Adapters that support removable optical
>> modules
>> + only support their original module type (i.e., the Intel(R) 10 Gigabit
>> SR
>> + Dual Port Express Module only supports SR optical modules). If you plug
>> + in a different type of module, the driver will not load.
>> +- Hot Swapping/hot plugging optical modules is not supported.
>> +- Only single speed, 10 gigabit modules are supported.
>> +- LAN on Motherboard (LOMs) may support DA, SR, or LR modules. Other
>> module
>> + types are not supported. Please see your system documentation for
>> details.
>> +
>> +The following is a list of 3rd party SFP+ modules and direct attach
>> cables that have
>> +received some testing. Not all modules are applicable to all devices.
>> +
>> +Supplier Type Part Numbers
>> +
>> +Finisar SFP+ SR bailed, 10g single rate
>> FTLX8571D3BCL
>> +Avago SFP+ SR bailed, 10g single rate AFBR-700SDZ
>> +Finisar SFP+ LR bailed, 10g single rate
>> FTLX1471D3BCL
>> +
>> +82598-based adapters support all passive direct attach cables that comply
>> +with SFF-8431 v4.1 and SFF-8472 v10.4 specifications. Active direct
>> attach
>> +cables are not supported.
>> +
>> +Third party optic modules and cables referred to above are listed only
>> for the
>> +purpose of highlighting third party specifications and potential
>> compatibility,
>> +and are not recommendations or endorsements or sponsorship of any third
>> party's
>> +product by Intel. Intel is not endorsing or promoting products made by
>> any
>> +third party and the third party reference is provided only to share
>> information
>> +regarding certain optic modules and cables with the above specifications.
>> There
>> +may be other manufacturers or suppliers, producing or supplying optic
>> modules
>> +and cables with similar or matching descriptions. Customers must use
>> their own
>> +discretion and diligence to purchase optic modules and cables from any
>> third
>> +party of their choice. Customer are solely responsible for assessing the
>> +suitability of the product and/or devices and for the selection of the
>> vendor
>> +for purchasing any product. INTEL ASSUMES NO LIABILITY WHATSOEVER, AND
>> INTEL
>> +DISCLAIMS ANY EXPRESS OR IMPLIED WARRANTY, RELATING TO SALE AND/OR USE OF
>> +SUCH THIRD PARTY PRODUCTS OR SELECTION OF VENDOR BY CUSTOMERS.
>>
>> Configuration and Tuning
>> -=========================
>> +========================
>>
>> The driver supports Transmit/Receive Checksum Offload and Jumbo Frames on
>> all 10 Gigabit adapters.
>> @@ -143,7 +141,7 @@ all 10 Gigabit adapters.
>> The Jumbo Frames MTU range for Intel Adapters is 1500 to 16114. The
>> default
>> MTU range is 1500. To modify the setting, enter the following:
>>
>> - ifconfig ix <interface_num> <hostname or IP address> mtu 9000
>> + ifconfig ix<interface_num> <hostname or IP address> mtu 9000
>>
>> To confirm an interface's MTU value, use the ifconfig command. To
>> confirm
>> the MTU used between two specific devices, use:
>> @@ -200,6 +198,8 @@ all 10 Gigabit adapters.
>> TSO
>> ---
>>
>> + TSO is enabled by default.
>> +
>> To disable:
>>
>> ifconfig <interface_num> -tso
>> @@ -209,23 +209,21 @@ all 10 Gigabit adapters.
>> ifconfig <interface_num> tso
>>
>> LRO
>> - ___
>> + ---
>>
>> - Large Receive Offload is available in version 1.4.4, it is on
>> - by default. It can be toggled off and on by using:
>> - sysctl dev.ix.X.enable_lro=[0,1]
>> -
>> - NOTE: when changing this feature you MUST be sure the interface
>> - is reinitialized, it is easy to do this with ifconfig down/up.
>> - The LRO code will ultimately move into the kernel stack code,
>> - but for this first release it was included with the driver.
>> + Large Receive Offload is available in the driver; it is on by default.
>> + It can be disabled by using:
>> + ifconfig <interface_num> -lro
>> + To enable:
>> + ifconfig <interface_num> lro
>> +
>>
>> Important system configuration changes:
>> ---------------------------------------
>>
>> - When there is a choice run on a 64bit OS rather than 32, it makes
>> - a significant difference in improvement.
>> -
>> + When there is a choice run on a 64bit OS rather than 32, it makes a
>> + significant difference in improvement.
>> +
>> The default scheduler SCHED_4BSD is not smart about SMP locality issues.
>> Significant improvement can be achieved by switching to the ULE
>> scheduler.
>>
>> @@ -233,34 +231,79 @@ all 10 Gigabit adapters.
>> SCHED_ULE. Note that this is only advisable on FreeBSD 7, on 6.X there
>> have
>> been stability problems with ULE.
>>
>> - Change the file /etc/sysctl.conf, add the line:
>> + The interface can generate high number of interrupts. To avoid running
>> + into the limit set by the kernel, adjust hw.intr_storm_threshold
>> + setting using sysctl:
>>
>> - hw.intr_storm_threshold: 8000 (the default is 1000)
>> + sysctl hw.intr_storm_threshold=9000 (the default is 1000)
>> +
>> + For this change to take effect on boot, edit /etc/sysctl.conf and add
>> the
>> + line:
>> + hw.intr_storm_threshold=9000
>> +
>> + If you still see Interrupt Storm detected messages, increase the limit
>> to a
>> + higher number.
>>
>> Best throughput results are seen with a large MTU; use 9000 if possible.
>>
>> - The default number of descriptors is 256, increasing this to 1024 or
>> even
>> - 2048 may improve performance.
>> + The default number of descriptors is 1024, increasing this to 2K or
>> even
>> + 4K may improve performance in some workloads, but change carefully.
>>
>>
>> Known Limitations
>> =================
>> +
>> +For known hardware and troubleshooting issues, refer to the following
>> website.
>> +
>> + http://support.intel.com/support/go/network/adapter/home.htm
>> +
>> +Either select the link for your adapter or perform a search for the
>> adapter
>> +number. The adapter's page lists many issues. For a complete list of
>> hardware
>> +issues download your adapter's user guide and read the Release Notes.
>> +
>> + UDP stress test with 10GbE driver
>> + ---------------------------------
>> Under small packets UDP stress test with 10GbE driver, the FreeBSD
>> system
>> will drop UDP packets due to the fullness of socket buffers. You may
>> want
>> to change the driver's Flow Control variables to the minimum value for
>> controlling packet reception.
>>
>> + Attempting to configure larger MTUs with a large numbers of processors
>> may
>> + generate the error message "ix0:could not setup receive structures"
>> +
>> --------------------------------------------------------------------------
>> + When using the ixgbe driver with RSS autoconfigured based on the number
>> of
>> + cores (the default setting) and that number is larger than 4, increase
>> the
>> + memory resources allocated for the mbuf pool as follows:
>> +
>> + Add to the sysctl.conf file for the system:
>> +
>> + kern.ipc.nmbclusters=262144
>> + kern.ipc.nmbjumbop=262144
>> +
>> + Lower than expected performance on dual port 10GbE devices
>> + ----------------------------------------------------------
>> + Some PCI-E x8 slots are actually configured as x4 slots. These slots
>> have
>> + insufficient bandwidth for full 10Gbe line rate with dual port 10GbE
>> devices.
>> + The driver can detect this situation and will write the following
>> message in
>> + the system log: "PCI-Express bandwidth available for this card is not
>> + sufficient for optimal performance. For optimal performance a x8
>> PCI-Express
>> + slot is required."
>> +
>> + If this error occurs, moving your adapter to a true x8 slot will
>> resolve the
>> + issue.
>> +
>> +
>>
>> Support
>> =======
>>
>> For general information and support, go to the Intel support website at:
>>
>> - http://support.intel.com
>> + www.intel.com/support/
>>
>> If an issue is identified with the released source code on the supported
>> kernel with a supported adapter, email the specific information related
>> to
>> -the issue to freebsd at intel.com.
>> +the issue to freebsd at intel.com
>>
>>
>>
>>
>> Modified: head/sys/dev/ixgbe/ixgbe.c
>>
>> ==============================================================================
>> --- head/sys/dev/ixgbe/ixgbe.c Wed Jun 1 22:56:02 2011 (r222587)
>> +++ head/sys/dev/ixgbe/ixgbe.c Thu Jun 2 00:34:57 2011 (r222588)
>> @@ -34,6 +34,7 @@
>>
>> #ifdef HAVE_KERNEL_OPTION_HEADERS
>> #include "opt_inet.h"
>> +#include "opt_inet6.h"
>> #endif
>>
>> #include "ixgbe.h"
>> @@ -46,7 +47,7 @@ int ixgbe_display_debug_stat
>> /*********************************************************************
>> * Driver version
>> *********************************************************************/
>> -char ixgbe_driver_version[] = "2.3.10";
>> +char ixgbe_driver_version[] = "2.3.11";
>>
>> /*********************************************************************
>> * PCI Device ID Table
>> @@ -318,7 +319,7 @@ static int fdir_pballoc = 1;
>> * ixgbe_probe determines if the driver should be loaded on
>> * adapter based on PCI vendor/device id of the adapter.
>> *
>> - * return 0 on success, positive on failure
>> + * return BUS_PROBE_DEFAULT on success, positive on failure
>> *********************************************************************/
>>
>> static int
>> @@ -357,7 +358,7 @@ ixgbe_probe(device_t dev)
>> ixgbe_driver_version);
>> device_set_desc_copy(dev, adapter_name);
>> ++ixgbe_total_ports;
>> - return (0);
>> + return (BUS_PROBE_DEFAULT);
>> }
>> ent++;
>> }
>> @@ -385,6 +386,11 @@ ixgbe_attach(device_t dev)
>>
>> INIT_DEBUGOUT("ixgbe_attach: begin");
>>
>> + if (resource_disabled("ixgbe", device_get_unit(dev))) {
>> + device_printf(dev, "Disabled by device hint\n");
>> + return (ENXIO);
>> + }
>> +
>> /* Allocate, clear, and link in our adapter structure */
>> adapter = device_get_softc(dev);
>> adapter->dev = adapter->osdep.dev = dev;
>> @@ -862,8 +868,9 @@ ixgbe_ioctl(struct ifnet * ifp, u_long c
>> {
>> struct adapter *adapter = ifp->if_softc;
>> struct ifreq *ifr = (struct ifreq *) data;
>> -#ifdef INET
>> +#if defined(INET) || defined(INET6)
>> struct ifaddr *ifa = (struct ifaddr *)data;
>> + bool avoid_reset = FALSE;
>> #endif
>> int error = 0;
>>
>> @@ -871,26 +878,28 @@ ixgbe_ioctl(struct ifnet * ifp, u_long c
>>
>> case SIOCSIFADDR:
>> #ifdef INET
>> - if (ifa->ifa_addr->sa_family == AF_INET) {
>> - /*
>> - * Since resetting hardware takes a very long time
>> - * and results in link renegotiation we only
>> - * initialize the hardware only when it is
>> absolutely
>> - * required.
>> - */
>> + if (ifa->ifa_addr->sa_family == AF_INET)
>> + avoid_reset = TRUE;
>> +#endif
>> +#ifdef INET6
>> + if (ifa->ifa_addr->sa_family == AF_INET6)
>> + avoid_reset = TRUE;
>> +#endif
>> +#if defined(INET) || defined(INET6)
>> + /*
>> + ** Calling init results in link renegotiation,
>> + ** so we avoid doing it when possible.
>> + */
>> + if (avoid_reset) {
>> ifp->if_flags |= IFF_UP;
>> - if (!(ifp->if_drv_flags & IFF_DRV_RUNNING)) {
>> - IXGBE_CORE_LOCK(adapter);
>> - ixgbe_init_locked(adapter);
>> - IXGBE_CORE_UNLOCK(adapter);
>> - }
>> + if (!(ifp->if_drv_flags & IFF_DRV_RUNNING))
>> + ixgbe_init(adapter);
>> if (!(ifp->if_flags & IFF_NOARP))
>> arp_ifinit(ifp, ifa);
>> } else
>> -#endif
>> error = ether_ioctl(ifp, command, data);
>> break;
>> -
>> +#endif
>> case SIOCSIFMTU:
>> IOCTL_DEBUGOUT("ioctl: SIOCSIFMTU (Set Interface MTU)");
>> if (ifr->ifr_mtu > IXGBE_MAX_FRAME_SIZE - ETHER_HDR_LEN) {
>> @@ -951,6 +960,8 @@ ixgbe_ioctl(struct ifnet * ifp, u_long c
>> ifp->if_capenable ^= IFCAP_VLAN_HWTAGGING;
>> if (mask & IFCAP_VLAN_HWFILTER)
>> ifp->if_capenable ^= IFCAP_VLAN_HWFILTER;
>> + if (mask & IFCAP_VLAN_HWTSO)
>> + ifp->if_capenable ^= IFCAP_VLAN_HWTSO;
>> if (ifp->if_drv_flags & IFF_DRV_RUNNING) {
>> IXGBE_CORE_LOCK(adapter);
>> ixgbe_init_locked(adapter);
>> @@ -1338,7 +1349,7 @@ ixgbe_legacy_irq(void *arg)
>>
>> /*********************************************************************
>> *
>> - * MSI Queue Interrupt Service routine
>> + * MSIX Queue Interrupt Service routine
>> *
>> **********************************************************************/
>> void
>> @@ -1357,6 +1368,17 @@ ixgbe_msix_que(void *arg)
>>
>> IXGBE_TX_LOCK(txr);
>> more_tx = ixgbe_txeof(txr);
>> + /*
>> + ** Make certain that if the stack
>> + ** has anything queued the task gets
>> + ** scheduled to handle it.
>> + */
>> +#if __FreeBSD_version < 800000
>> + if (!IFQ_DRV_IS_EMPTY(&adapter->ifp->if_snd))
>> +#else
>> + if (!drbr_empty(adapter->ifp, txr->br))
>> +#endif
>> + more_tx = 1;
>> IXGBE_TX_UNLOCK(txr);
>>
>> /* Do AIM now? */
>> @@ -1570,7 +1592,7 @@ ixgbe_xmit(struct tx_ring *txr, struct m
>> struct mbuf *m_head;
>> bus_dma_segment_t segs[adapter->num_segs];
>> bus_dmamap_t map;
>> - struct ixgbe_tx_buf *txbuf, *txbuf_mapped;
>> + struct ixgbe_tx_buf *txbuf;
>> union ixgbe_adv_tx_desc *txd = NULL;
>>
>> m_head = *m_headp;
>> @@ -1589,7 +1611,6 @@ ixgbe_xmit(struct tx_ring *txr, struct m
>> */
>> first = txr->next_avail_desc;
>> txbuf = &txr->tx_buffers[first];
>> - txbuf_mapped = txbuf;
>> map = txbuf->map;
>>
>> /*
>> @@ -1708,6 +1729,8 @@ ixgbe_xmit(struct tx_ring *txr, struct m
>> txr->next_avail_desc = i;
>>
>> txbuf->m_head = m_head;
>> + /* Swap the dma map between the first and last descriptor */
>> + txr->tx_buffers[first].map = txbuf->map;
>> txbuf->map = map;
>> bus_dmamap_sync(txr->txtag, map, BUS_DMASYNC_PREWRITE);
>>
>> @@ -2265,7 +2288,9 @@ ixgbe_setup_msix(struct adapter *adapter
>> msi:
>> msgs = pci_msi_count(dev);
>> if (msgs == 1 && pci_alloc_msi(dev, &msgs) == 0)
>> - device_printf(adapter->dev,"Using MSI
>> interrupt\n");
>> + device_printf(adapter->dev,"Using an MSI
>> interrupt\n");
>> + else
>> + device_printf(adapter->dev,"Using a Legacy
>> interrupt\n");
>> return (msgs);
>> }
>>
>> @@ -2412,19 +2437,21 @@ ixgbe_setup_interface(device_t dev, stru
>> ifp->if_data.ifi_hdrlen = sizeof(struct ether_vlan_header);
>>
>> ifp->if_capabilities |= IFCAP_HWCSUM | IFCAP_TSO4 |
>> IFCAP_VLAN_HWCSUM;
>> - ifp->if_capabilities |= IFCAP_VLAN_HWTAGGING | IFCAP_VLAN_MTU;
>> ifp->if_capabilities |= IFCAP_JUMBO_MTU;
>> + ifp->if_capabilities |= IFCAP_VLAN_HWTAGGING
>> + | IFCAP_VLAN_HWTSO
>> + | IFCAP_VLAN_MTU;
>> ifp->if_capenable = ifp->if_capabilities;
>>
>> /* Don't enable LRO by default */
>> ifp->if_capabilities |= IFCAP_LRO;
>>
>> /*
>> - ** Dont turn this on by default, if vlans are
>> + ** Don't turn this on by default, if vlans are
>> ** created on another pseudo device (eg. lagg)
>> ** then vlan events are not passed thru, breaking
>> ** operation, but with HW FILTER off it works. If
>> - ** using vlans directly on the em driver you can
>> + ** using vlans directly on the ixgbe driver you can
>> ** enable this and get full hardware tag filtering.
>> */
>> ifp->if_capabilities |= IFCAP_VLAN_HWFILTER;
>> @@ -5333,7 +5360,7 @@ ixgbe_add_rx_process_limit(struct adapte
>> static int
>> ixgbe_set_advertise(SYSCTL_HANDLER_ARGS)
>> {
>> - int error;
>> + int error = 0;
>> struct adapter *adapter;
>> struct ixgbe_hw *hw;
>> ixgbe_link_speed speed, last;
>>
>> Modified: head/sys/dev/ixgbe/ixv.c
>>
>> ==============================================================================
>> --- head/sys/dev/ixgbe/ixv.c Wed Jun 1 22:56:02 2011 (r222587)
>> +++ head/sys/dev/ixgbe/ixv.c Thu Jun 2 00:34:57 2011 (r222588)
>> @@ -1,6 +1,6 @@
>>
>> /******************************************************************************
>>
>> - Copyright (c) 2001-2010, Intel Corporation
>> + Copyright (c) 2001-2011, Intel Corporation
>> All rights reserved.
>>
>> Redistribution and use in source and binary forms, with or without
>> @@ -33,7 +33,8 @@
>> /*$FreeBSD$*/
>>
>> #ifdef HAVE_KERNEL_OPTION_HEADERS
>> -#include "opt_device_polling.h"
>> +#include "opt_inet.h"
>> +#include "opt_inet6.h"
>> #endif
>>
>> #include "ixv.h"
>> @@ -41,7 +42,7 @@
>> /*********************************************************************
>> * Driver version
>> *********************************************************************/
>> -char ixv_driver_version[] = "1.0.0";
>> +char ixv_driver_version[] = "1.0.1";
>>
>> /*********************************************************************
>> * PCI Device ID Table
>> @@ -234,7 +235,7 @@ static u32 ixv_shadow_vfta[VFTA_SIZE];
>> * ixv_probe determines if the driver should be loaded on
>> * adapter based on PCI vendor/device id of the adapter.
>> *
>> - * return 0 on success, positive on failure
>> + * return BUS_PROBE_DEFAULT on success, positive on failure
>> *********************************************************************/
>>
>> static int
>> @@ -271,7 +272,7 @@ ixv_probe(device_t dev)
>> ixv_strings[ent->index],
>> ixv_driver_version);
>> device_set_desc_copy(dev, adapter_name);
>> - return (0);
>> + return (BUS_PROBE_DEFAULT);
>> }
>> ent++;
>> }
>> @@ -297,6 +298,11 @@ ixv_attach(device_t dev)
>>
>> INIT_DEBUGOUT("ixv_attach: begin");
>>
>> + if (resource_disabled("ixgbe", device_get_unit(dev))) {
>> + device_printf(dev, "Disabled by device hint\n");
>> + return (ENXIO);
>> + }
>> +
>> /* Allocate, clear, and link in our adapter structure */
>> adapter = device_get_softc(dev);
>> adapter->dev = adapter->osdep.dev = dev;
>> @@ -690,10 +696,38 @@ ixv_ioctl(struct ifnet * ifp, u_long com
>> {
>> struct adapter *adapter = ifp->if_softc;
>> struct ifreq *ifr = (struct ifreq *) data;
>> +#if defined(INET) || defined(INET6)
>> + struct ifreq *ifa = (struct ifaddr *) data;
>> + bool avoid_reset = FALSE;
>> +#endif
>> int error = 0;
>>
>> switch (command) {
>>
>> + case SIOCSIFADDR:
>> +#ifdef INET
>> + if (ifa->ifa_addr->sa_family == AF_INET)
>> + avoid_reset = TRUE;
>> +#endif
>> +#ifdef INET6
>> + if (ifa->ifa_addr->sa_family == AF_INET6)
>> + avoid_reset = TRUE;
>> +#endif
>> +#if defined(INET) || defined(INET6)
>> + /*
>> + ** Calling init results in link renegotiation,
>> + ** so we avoid doing it when possible.
>> + */
>> + if (avoid_reset) {
>> + ifp->if_flags |= IFF_UP;
>> + if (!(ifp->if_drv_flags & IFF_DRV_RUNNING))
>> + ixv_init(adapter);
>> + if (!(ifp->if_flags & IFF_NOARP))
>> + arp_ifinit(ifp, ifa);
>> + } else
>> + error = ether_ioctl(ifp, command, data);
>> + break;
>> +#endif
>> case SIOCSIFMTU:
>> IOCTL_DEBUGOUT("ioctl: SIOCSIFMTU (Set Interface MTU)");
>> if (ifr->ifr_mtu > IXV_MAX_FRAME_SIZE - ETHER_HDR_LEN) {
>> @@ -1161,7 +1195,7 @@ ixv_xmit(struct tx_ring *txr, struct mbu
>> struct mbuf *m_head;
>> bus_dma_segment_t segs[32];
>> bus_dmamap_t map;
>> - struct ixv_tx_buf *txbuf, *txbuf_mapped;
>> + struct ixv_tx_buf *txbuf;
>> union ixgbe_adv_tx_desc *txd = NULL;
>>
>> m_head = *m_headp;
>> @@ -1180,7 +1214,6 @@ ixv_xmit(struct tx_ring *txr, struct mbu
>> */
>> first = txr->next_avail_desc;
>> txbuf = &txr->tx_buffers[first];
>> - txbuf_mapped = txbuf;
>> map = txbuf->map;
>>
>> /*
>> @@ -1283,6 +1316,7 @@ ixv_xmit(struct tx_ring *txr, struct mbu
>> txr->next_avail_desc = i;
>>
>> txbuf->m_head = m_head;
>> + txr->tx_buffers[first].map = txbuf->map;
>> txbuf->map = map;
>> bus_dmamap_sync(txr->txtag, map, BUS_DMASYNC_PREWRITE);
>>
>> @@ -1820,11 +1854,15 @@ ixv_setup_interface(device_t dev, struct
>> ifp->if_data.ifi_hdrlen = sizeof(struct ether_vlan_header);
>>
>> ifp->if_capabilities |= IFCAP_HWCSUM | IFCAP_TSO4 |
>> IFCAP_VLAN_HWCSUM;
>> - ifp->if_capabilities |= IFCAP_VLAN_HWTAGGING | IFCAP_VLAN_MTU;
>> - ifp->if_capabilities |= IFCAP_JUMBO_MTU | IFCAP_LRO;
>> -
>> + ifp->if_capabilities |= IFCAP_JUMBO_MTU;
>> + ifp->if_capabilities |= IFCAP_VLAN_HWTAGGING
>> + | IFCAP_VLAN_HWTSO
>> + | IFCAP_VLAN_MTU;
>> ifp->if_capenable = ifp->if_capabilities;
>>
>> + /* Don't enable LRO by default */
>> + ifp->if_capabilities |= IFCAP_LRO;
>> +
>> /*
>> * Specify the media types supported by this adapter and register
>> * callbacks to update media and link information
>>
>
>
>
> --
> +-----------------oOO--(_)--OOo-------------------------+
> With best Regards,
> Martin Wilke (miwi_(at)_FreeBSD.org)
>
> Mess with the Best, Die like the Rest
>
>
>
More information about the svn-src-all
mailing list