Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 1 Jun 2011 22:15:19 -0700
From:      Jack Vogel <jfvogel@gmail.com>
To:        miwi@freebsd.org
Cc:        Jack F Vogel <jfv@freebsd.org>, svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org
Subject:   Re: svn commit: r222588 - head/sys/dev/ixgbe
Message-ID:  <BANLkTim=BFE43p0ejA2jrCMDA8eRatX1HA@mail.gmail.com>
In-Reply-To: <BANLkTinX6uTK=_z4znb51VDtuN0PXOXt%2BQ@mail.gmail.com>
References:  <201106020034.p520YwBu093285@svn.freebsd.org> <BANLkTinX6uTK=_z4znb51VDtuN0PXOXt%2BQ@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
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@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@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@intel.com.
>> +the issue to freebsd@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
>
>
>



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?BANLkTim=BFE43p0ejA2jrCMDA8eRatX1HA>