Date: Thu, 2 Jun 2011 12:32:52 +0800 From: Martin Wilke <miwi@FreeBSD.org> To: Jack F Vogel <jfv@freebsd.org> Cc: 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: <BANLkTinX6uTK=_z4znb51VDtuN0PXOXt%2BQ@mail.gmail.com> In-Reply-To: <201106020034.p520YwBu093285@svn.freebsd.org> References: <201106020034.p520YwBu093285@svn.freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
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?BANLkTinX6uTK=_z4znb51VDtuN0PXOXt%2BQ>