diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2010-10-09 15:06:26 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2010-10-09 15:06:26 -0400 |
| commit | 85a331881dd52a93e7d4c57bcaf5486cc8718465 (patch) | |
| tree | 5a09ba7bac0bcc6a54c22e2f45fb7851c3c3f758 | |
| parent | 63847e66b28ed5e0dc28409d767e8f3891502ac4 (diff) | |
| parent | ae6df5f96a51818d6376da5307d773baeece4014 (diff) | |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6: (27 commits)
net: clear heap allocation for ETHTOOL_GRXCLSRLALL
isdn: strcpy() => strlcpy()
Revert "mac80211: use netif_receive_skb in ieee80211_tx_status callpath"
mac80211: delete AddBA response timer
ath9k_hw: fix regression in ANI listen time calculation
caif: fix two caif_connect() bugs
bonding: fix WARN_ON when writing to bond_master sysfs file
skge: add quirk to limit DMA
MAINTAINERS: update Intel LAN Ethernet info
e1000e.txt: Add e1000e documentation
e1000.txt: Update e1000 documentation
ixgbevf.txt: Update ixgbevf documentation
cls_u32: signedness bug
Bluetooth: Disallow to change L2CAP_OPTIONS values when connected
sctp: Fix out-of-bounds reading in sctp_asoc_get_hmac()
sctp: prevent reading out-of-bounds memory
ipv4: correct IGMP behavior on v3 query during v2-compatibility mode
netdev: Depend on INET before selecting INET_LRO
Revert "ipv4: Make INET_LRO a bool instead of tristate."
net: Fix the condition passed to sk_wait_event()
...
| -rw-r--r-- | Documentation/networking/e1000.txt | 373 | ||||
| -rw-r--r-- | Documentation/networking/e1000e.txt | 302 | ||||
| -rw-r--r--[-rwxr-xr-x] | Documentation/networking/ixgbevf.txt | 40 | ||||
| -rw-r--r-- | MAINTAINERS | 16 | ||||
| -rw-r--r-- | drivers/isdn/sc/interrupt.c | 18 | ||||
| -rw-r--r-- | drivers/net/Kconfig | 4 | ||||
| -rw-r--r-- | drivers/net/bonding/bond_main.c | 9 | ||||
| -rw-r--r-- | drivers/net/skge.c | 18 | ||||
| -rw-r--r-- | drivers/net/wireless/ath/ath9k/ani.c | 2 | ||||
| -rw-r--r-- | include/net/bluetooth/bluetooth.h | 18 | ||||
| -rw-r--r-- | net/bluetooth/l2cap.c | 62 | ||||
| -rw-r--r-- | net/bluetooth/rfcomm/sock.c | 4 | ||||
| -rw-r--r-- | net/caif/caif_socket.c | 21 | ||||
| -rw-r--r-- | net/core/ethtool.c | 2 | ||||
| -rw-r--r-- | net/core/stream.c | 8 | ||||
| -rw-r--r-- | net/ipv4/Kconfig | 2 | ||||
| -rw-r--r-- | net/ipv4/igmp.c | 14 | ||||
| -rw-r--r-- | net/ipv6/route.c | 28 | ||||
| -rw-r--r-- | net/mac80211/agg-tx.c | 2 | ||||
| -rw-r--r-- | net/mac80211/status.c | 4 | ||||
| -rw-r--r-- | net/sched/cls_u32.c | 2 | ||||
| -rw-r--r-- | net/sctp/auth.c | 8 | ||||
| -rw-r--r-- | net/sctp/socket.c | 13 |
23 files changed, 590 insertions, 380 deletions
diff --git a/Documentation/networking/e1000.txt b/Documentation/networking/e1000.txt index 2df71861e578..d9271e74e488 100644 --- a/Documentation/networking/e1000.txt +++ b/Documentation/networking/e1000.txt | |||
| @@ -1,82 +1,35 @@ | |||
| 1 | Linux* Base Driver for the Intel(R) PRO/1000 Family of Adapters | 1 | Linux* Base Driver for the Intel(R) PRO/1000 Family of Adapters |
| 2 | =============================================================== | 2 | =============================================================== |
| 3 | 3 | ||
| 4 | September 26, 2006 | 4 | Intel Gigabit Linux driver. |
| 5 | 5 | Copyright(c) 1999 - 2010 Intel Corporation. | |
| 6 | 6 | ||
| 7 | Contents | 7 | Contents |
| 8 | ======== | 8 | ======== |
| 9 | 9 | ||
| 10 | - In This Release | ||
| 11 | - Identifying Your Adapter | 10 | - Identifying Your Adapter |
| 12 | - Building and Installation | ||
| 13 | - Command Line Parameters | 11 | - Command Line Parameters |
| 14 | - Speed and Duplex Configuration | 12 | - Speed and Duplex Configuration |
| 15 | - Additional Configurations | 13 | - Additional Configurations |
| 16 | - Known Issues | ||
| 17 | - Support | 14 | - Support |
| 18 | 15 | ||
| 19 | |||
| 20 | In This Release | ||
| 21 | =============== | ||
| 22 | |||
| 23 | This file describes the Linux* Base Driver for the Intel(R) PRO/1000 Family | ||
| 24 | of Adapters. This driver includes support for Itanium(R)2-based systems. | ||
| 25 | |||
| 26 | For questions related to hardware requirements, refer to the documentation | ||
| 27 | supplied with your Intel PRO/1000 adapter. All hardware requirements listed | ||
| 28 | apply to use with Linux. | ||
| 29 | |||
| 30 | The following features are now available in supported kernels: | ||
| 31 | - Native VLANs | ||
| 32 | - Channel Bonding (teaming) | ||
| 33 | - SNMP | ||
| 34 | |||
| 35 | Channel Bonding documentation can be found in the Linux kernel source: | ||
| 36 | /Documentation/networking/bonding.txt | ||
| 37 | |||
| 38 | The driver information previously displayed in the /proc filesystem is not | ||
| 39 | supported in this release. Alternatively, you can use ethtool (version 1.6 | ||
| 40 | or later), lspci, and ifconfig to obtain the same information. | ||
| 41 | |||
| 42 | Instructions on updating ethtool can be found in the section "Additional | ||
| 43 | Configurations" later in this document. | ||
| 44 | |||
| 45 | NOTE: The Intel(R) 82562v 10/100 Network Connection only provides 10/100 | ||
| 46 | support. | ||
| 47 | |||
| 48 | |||
| 49 | Identifying Your Adapter | 16 | Identifying Your Adapter |
| 50 | ======================== | 17 | ======================== |
| 51 | 18 | ||
| 52 | For more information on how to identify your adapter, go to the Adapter & | 19 | For more information on how to identify your adapter, go to the Adapter & |
| 53 | Driver ID Guide at: | 20 | Driver ID Guide at: |
| 54 | 21 | ||
| 55 | http://support.intel.com/support/network/adapter/pro100/21397.htm | 22 | http://support.intel.com/support/go/network/adapter/idguide.htm |
| 56 | 23 | ||
| 57 | For the latest Intel network drivers for Linux, refer to the following | 24 | For the latest Intel network drivers for Linux, refer to the following |
| 58 | website. In the search field, enter your adapter name or type, or use the | 25 | website. In the search field, enter your adapter name or type, or use the |
| 59 | networking link on the left to search for your adapter: | 26 | networking link on the left to search for your adapter: |
| 60 | 27 | ||
| 61 | http://downloadfinder.intel.com/scripts-df/support_intel.asp | 28 | http://support.intel.com/support/go/network/adapter/home.htm |
| 62 | |||
| 63 | 29 | ||
| 64 | Command Line Parameters | 30 | Command Line Parameters |
| 65 | ======================= | 31 | ======================= |
| 66 | 32 | ||
| 67 | If the driver is built as a module, the following optional parameters | ||
| 68 | are used by entering them on the command line with the modprobe command | ||
| 69 | using this syntax: | ||
| 70 | |||
| 71 | modprobe e1000 [<option>=<VAL1>,<VAL2>,...] | ||
| 72 | |||
| 73 | For example, with two PRO/1000 PCI adapters, entering: | ||
| 74 | |||
| 75 | modprobe e1000 TxDescriptors=80,128 | ||
| 76 | |||
| 77 | loads the e1000 driver with 80 TX descriptors for the first adapter and | ||
| 78 | 128 TX descriptors for the second adapter. | ||
| 79 | |||
| 80 | The default value for each parameter is generally the recommended setting, | 33 | The default value for each parameter is generally the recommended setting, |
| 81 | unless otherwise noted. | 34 | unless otherwise noted. |
| 82 | 35 | ||
| @@ -89,10 +42,6 @@ NOTES: For more information about the AutoNeg, Duplex, and Speed | |||
| 89 | parameters, see the application note at: | 42 | parameters, see the application note at: |
| 90 | http://www.intel.com/design/network/applnots/ap450.htm | 43 | http://www.intel.com/design/network/applnots/ap450.htm |
| 91 | 44 | ||
| 92 | A descriptor describes a data buffer and attributes related to | ||
| 93 | the data buffer. This information is accessed by the hardware. | ||
| 94 | |||
| 95 | |||
| 96 | AutoNeg | 45 | AutoNeg |
| 97 | ------- | 46 | ------- |
| 98 | (Supported only on adapters with copper connections) | 47 | (Supported only on adapters with copper connections) |
| @@ -106,7 +55,6 @@ Duplex parameters must not be specified. | |||
| 106 | NOTE: Refer to the Speed and Duplex section of this readme for more | 55 | NOTE: Refer to the Speed and Duplex section of this readme for more |
| 107 | information on the AutoNeg parameter. | 56 | information on the AutoNeg parameter. |
| 108 | 57 | ||
| 109 | |||
| 110 | Duplex | 58 | Duplex |
| 111 | ------ | 59 | ------ |
| 112 | (Supported only on adapters with copper connections) | 60 | (Supported only on adapters with copper connections) |
| @@ -119,7 +67,6 @@ set to auto-negotiate, the board auto-detects the correct duplex. If the | |||
| 119 | link partner is forced (either full or half), Duplex defaults to half- | 67 | link partner is forced (either full or half), Duplex defaults to half- |
| 120 | duplex. | 68 | duplex. |
| 121 | 69 | ||
| 122 | |||
| 123 | FlowControl | 70 | FlowControl |
| 124 | ----------- | 71 | ----------- |
| 125 | Valid Range: 0-3 (0=none, 1=Rx only, 2=Tx only, 3=Rx&Tx) | 72 | Valid Range: 0-3 (0=none, 1=Rx only, 2=Tx only, 3=Rx&Tx) |
| @@ -128,16 +75,16 @@ Default Value: Reads flow control settings from the EEPROM | |||
| 128 | This parameter controls the automatic generation(Tx) and response(Rx) | 75 | This parameter controls the automatic generation(Tx) and response(Rx) |
| 129 | to Ethernet PAUSE frames. | 76 | to Ethernet PAUSE frames. |
| 130 | 77 | ||
| 131 | |||
| 132 | InterruptThrottleRate | 78 | InterruptThrottleRate |
| 133 | --------------------- | 79 | --------------------- |
| 134 | (not supported on Intel(R) 82542, 82543 or 82544-based adapters) | 80 | (not supported on Intel(R) 82542, 82543 or 82544-based adapters) |
| 135 | Valid Range: 0,1,3,100-100000 (0=off, 1=dynamic, 3=dynamic conservative) | 81 | Valid Range: 0,1,3,4,100-100000 (0=off, 1=dynamic, 3=dynamic conservative, |
| 82 | 4=simplified balancing) | ||
| 136 | Default Value: 3 | 83 | Default Value: 3 |
| 137 | 84 | ||
| 138 | The driver can limit the amount of interrupts per second that the adapter | 85 | The driver can limit the amount of interrupts per second that the adapter |
| 139 | will generate for incoming packets. It does this by writing a value to the | 86 | will generate for incoming packets. It does this by writing a value to the |
| 140 | adapter that is based on the maximum amount of interrupts that the adapter | 87 | adapter that is based on the maximum amount of interrupts that the adapter |
| 141 | will generate per second. | 88 | will generate per second. |
| 142 | 89 | ||
| 143 | Setting InterruptThrottleRate to a value greater or equal to 100 | 90 | Setting InterruptThrottleRate to a value greater or equal to 100 |
| @@ -146,37 +93,43 @@ per second, even if more packets have come in. This reduces interrupt | |||
| 146 | load on the system and can lower CPU utilization under heavy load, | 93 | load on the system and can lower CPU utilization under heavy load, |
| 147 | but will increase latency as packets are not processed as quickly. | 94 | but will increase latency as packets are not processed as quickly. |
| 148 | 95 | ||
| 149 | The default behaviour of the driver previously assumed a static | 96 | The default behaviour of the driver previously assumed a static |
| 150 | InterruptThrottleRate value of 8000, providing a good fallback value for | 97 | InterruptThrottleRate value of 8000, providing a good fallback value for |
| 151 | all traffic types,but lacking in small packet performance and latency. | 98 | all traffic types,but lacking in small packet performance and latency. |
| 152 | The hardware can handle many more small packets per second however, and | 99 | The hardware can handle many more small packets per second however, and |
| 153 | for this reason an adaptive interrupt moderation algorithm was implemented. | 100 | for this reason an adaptive interrupt moderation algorithm was implemented. |
| 154 | 101 | ||
| 155 | Since 7.3.x, the driver has two adaptive modes (setting 1 or 3) in which | 102 | Since 7.3.x, the driver has two adaptive modes (setting 1 or 3) in which |
| 156 | it dynamically adjusts the InterruptThrottleRate value based on the traffic | 103 | it dynamically adjusts the InterruptThrottleRate value based on the traffic |
| 157 | that it receives. After determining the type of incoming traffic in the last | 104 | that it receives. After determining the type of incoming traffic in the last |
| 158 | timeframe, it will adjust the InterruptThrottleRate to an appropriate value | 105 | timeframe, it will adjust the InterruptThrottleRate to an appropriate value |
| 159 | for that traffic. | 106 | for that traffic. |
| 160 | 107 | ||
| 161 | The algorithm classifies the incoming traffic every interval into | 108 | The algorithm classifies the incoming traffic every interval into |
| 162 | classes. Once the class is determined, the InterruptThrottleRate value is | 109 | classes. Once the class is determined, the InterruptThrottleRate value is |
| 163 | adjusted to suit that traffic type the best. There are three classes defined: | 110 | adjusted to suit that traffic type the best. There are three classes defined: |
| 164 | "Bulk traffic", for large amounts of packets of normal size; "Low latency", | 111 | "Bulk traffic", for large amounts of packets of normal size; "Low latency", |
| 165 | for small amounts of traffic and/or a significant percentage of small | 112 | for small amounts of traffic and/or a significant percentage of small |
| 166 | packets; and "Lowest latency", for almost completely small packets or | 113 | packets; and "Lowest latency", for almost completely small packets or |
| 167 | minimal traffic. | 114 | minimal traffic. |
| 168 | 115 | ||
| 169 | In dynamic conservative mode, the InterruptThrottleRate value is set to 4000 | 116 | In dynamic conservative mode, the InterruptThrottleRate value is set to 4000 |
| 170 | for traffic that falls in class "Bulk traffic". If traffic falls in the "Low | 117 | for traffic that falls in class "Bulk traffic". If traffic falls in the "Low |
| 171 | latency" or "Lowest latency" class, the InterruptThrottleRate is increased | 118 | latency" or "Lowest latency" class, the InterruptThrottleRate is increased |
| 172 | stepwise to 20000. This default mode is suitable for most applications. | 119 | stepwise to 20000. This default mode is suitable for most applications. |
| 173 | 120 | ||
| 174 | For situations where low latency is vital such as cluster or | 121 | For situations where low latency is vital such as cluster or |
| 175 | grid computing, the algorithm can reduce latency even more when | 122 | grid computing, the algorithm can reduce latency even more when |
| 176 | InterruptThrottleRate is set to mode 1. In this mode, which operates | 123 | InterruptThrottleRate is set to mode 1. In this mode, which operates |
| 177 | the same as mode 3, the InterruptThrottleRate will be increased stepwise to | 124 | the same as mode 3, the InterruptThrottleRate will be increased stepwise to |
| 178 | 70000 for traffic in class "Lowest latency". | 125 | 70000 for traffic in class "Lowest latency". |
| 179 | 126 | ||
| 127 | In simplified mode the interrupt rate is based on the ratio of Tx and | ||
| 128 | Rx traffic. If the bytes per second rate is approximately equal, the | ||
| 129 | interrupt rate will drop as low as 2000 interrupts per second. If the | ||
| 130 | traffic is mostly transmit or mostly receive, the interrupt rate could | ||
| 131 | be as high as 8000. | ||
| 132 | |||
| 180 | Setting InterruptThrottleRate to 0 turns off any interrupt moderation | 133 | Setting InterruptThrottleRate to 0 turns off any interrupt moderation |
| 181 | and may improve small packet latency, but is generally not suitable | 134 | and may improve small packet latency, but is generally not suitable |
| 182 | for bulk throughput traffic. | 135 | for bulk throughput traffic. |
| @@ -212,8 +165,6 @@ NOTE: When e1000 is loaded with default settings and multiple adapters | |||
| 212 | be platform-specific. If CPU utilization is not a concern, use | 165 | be platform-specific. If CPU utilization is not a concern, use |
| 213 | RX_POLLING (NAPI) and default driver settings. | 166 | RX_POLLING (NAPI) and default driver settings. |
| 214 | 167 | ||
| 215 | |||
| 216 | |||
| 217 | RxDescriptors | 168 | RxDescriptors |
| 218 | ------------- | 169 | ------------- |
| 219 | Valid Range: 80-256 for 82542 and 82543-based adapters | 170 | Valid Range: 80-256 for 82542 and 82543-based adapters |
| @@ -225,15 +176,14 @@ by the driver. Increasing this value allows the driver to buffer more | |||
| 225 | incoming packets, at the expense of increased system memory utilization. | 176 | incoming packets, at the expense of increased system memory utilization. |
| 226 | 177 | ||
| 227 | Each descriptor is 16 bytes. A receive buffer is also allocated for each | 178 | Each descriptor is 16 bytes. A receive buffer is also allocated for each |
| 228 | descriptor and can be either 2048, 4096, 8192, or 16384 bytes, depending | 179 | descriptor and can be either 2048, 4096, 8192, or 16384 bytes, depending |
| 229 | on the MTU setting. The maximum MTU size is 16110. | 180 | on the MTU setting. The maximum MTU size is 16110. |
| 230 | 181 | ||
| 231 | NOTE: MTU designates the frame size. It only needs to be set for Jumbo | 182 | NOTE: MTU designates the frame size. It only needs to be set for Jumbo |
| 232 | Frames. Depending on the available system resources, the request | 183 | Frames. Depending on the available system resources, the request |
| 233 | for a higher number of receive descriptors may be denied. In this | 184 | for a higher number of receive descriptors may be denied. In this |
| 234 | case, use a lower number. | 185 | case, use a lower number. |
| 235 | 186 | ||
| 236 | |||
| 237 | RxIntDelay | 187 | RxIntDelay |
| 238 | ---------- | 188 | ---------- |
| 239 | Valid Range: 0-65535 (0=off) | 189 | Valid Range: 0-65535 (0=off) |
| @@ -254,7 +204,6 @@ CAUTION: When setting RxIntDelay to a value other than 0, adapters may | |||
| 254 | restoring the network connection. To eliminate the potential | 204 | restoring the network connection. To eliminate the potential |
| 255 | for the hang ensure that RxIntDelay is set to 0. | 205 | for the hang ensure that RxIntDelay is set to 0. |
| 256 | 206 | ||
| 257 | |||
| 258 | RxAbsIntDelay | 207 | RxAbsIntDelay |
| 259 | ------------- | 208 | ------------- |
| 260 | (This parameter is supported only on 82540, 82545 and later adapters.) | 209 | (This parameter is supported only on 82540, 82545 and later adapters.) |
| @@ -268,7 +217,6 @@ packet is received within the set amount of time. Proper tuning, | |||
| 268 | along with RxIntDelay, may improve traffic throughput in specific network | 217 | along with RxIntDelay, may improve traffic throughput in specific network |
| 269 | conditions. | 218 | conditions. |
| 270 | 219 | ||
| 271 | |||
| 272 | Speed | 220 | Speed |
| 273 | ----- | 221 | ----- |
| 274 | (This parameter is supported only on adapters with copper connections.) | 222 | (This parameter is supported only on adapters with copper connections.) |
| @@ -280,7 +228,6 @@ Speed forces the line speed to the specified value in megabits per second | |||
| 280 | partner is set to auto-negotiate, the board will auto-detect the correct | 228 | partner is set to auto-negotiate, the board will auto-detect the correct |
| 281 | speed. Duplex should also be set when Speed is set to either 10 or 100. | 229 | speed. Duplex should also be set when Speed is set to either 10 or 100. |
| 282 | 230 | ||
| 283 | |||
| 284 | TxDescriptors | 231 | TxDescriptors |
| 285 | ------------- | 232 | ------------- |
| 286 | Valid Range: 80-256 for 82542 and 82543-based adapters | 233 | Valid Range: 80-256 for 82542 and 82543-based adapters |
| @@ -295,6 +242,36 @@ NOTE: Depending on the available system resources, the request for a | |||
| 295 | higher number of transmit descriptors may be denied. In this case, | 242 | higher number of transmit descriptors may be denied. In this case, |
| 296 | use a lower number. | 243 | use a lower number. |
| 297 | 244 | ||
| 245 | TxDescriptorStep | ||
| 246 | ---------------- | ||
| 247 | Valid Range: 1 (use every Tx Descriptor) | ||
| 248 | 4 (use every 4th Tx Descriptor) | ||
| 249 | |||
| 250 | Default Value: 1 (use every Tx Descriptor) | ||
| 251 | |||
| 252 | On certain non-Intel architectures, it has been observed that intense TX | ||
| 253 | traffic bursts of short packets may result in an improper descriptor | ||
| 254 | writeback. If this occurs, the driver will report a "TX Timeout" and reset | ||
| 255 | the adapter, after which the transmit flow will restart, though data may | ||
| 256 | have stalled for as much as 10 seconds before it resumes. | ||
| 257 | |||
| 258 | The improper writeback does not occur on the first descriptor in a system | ||
| 259 | memory cache-line, which is typically 32 bytes, or 4 descriptors long. | ||
| 260 | |||
| 261 | Setting TxDescriptorStep to a value of 4 will ensure that all TX descriptors | ||
| 262 | are aligned to the start of a system memory cache line, and so this problem | ||
| 263 | will not occur. | ||
| 264 | |||
| 265 | NOTES: Setting TxDescriptorStep to 4 effectively reduces the number of | ||
| 266 | TxDescriptors available for transmits to 1/4 of the normal allocation. | ||
| 267 | This has a possible negative performance impact, which may be | ||
| 268 | compensated for by allocating more descriptors using the TxDescriptors | ||
| 269 | module parameter. | ||
| 270 | |||
| 271 | There are other conditions which may result in "TX Timeout", which will | ||
| 272 | not be resolved by the use of the TxDescriptorStep parameter. As the | ||
| 273 | issue addressed by this parameter has never been observed on Intel | ||
| 274 | Architecture platforms, it should not be used on Intel platforms. | ||
| 298 | 275 | ||
| 299 | TxIntDelay | 276 | TxIntDelay |
| 300 | ---------- | 277 | ---------- |
| @@ -307,7 +284,6 @@ efficiency if properly tuned for specific network traffic. If the | |||
| 307 | system is reporting dropped transmits, this value may be set too high | 284 | system is reporting dropped transmits, this value may be set too high |
| 308 | causing the driver to run out of available transmit descriptors. | 285 | causing the driver to run out of available transmit descriptors. |
| 309 | 286 | ||
| 310 | |||
| 311 | TxAbsIntDelay | 287 | TxAbsIntDelay |
| 312 | ------------- | 288 | ------------- |
| 313 | (This parameter is supported only on 82540, 82545 and later adapters.) | 289 | (This parameter is supported only on 82540, 82545 and later adapters.) |
| @@ -330,6 +306,35 @@ Default Value: 1 | |||
| 330 | A value of '1' indicates that the driver should enable IP checksum | 306 | A value of '1' indicates that the driver should enable IP checksum |
| 331 | offload for received packets (both UDP and TCP) to the adapter hardware. | 307 | offload for received packets (both UDP and TCP) to the adapter hardware. |
| 332 | 308 | ||
| 309 | Copybreak | ||
| 310 | --------- | ||
| 311 | Valid Range: 0-xxxxxxx (0=off) | ||
| 312 | Default Value: 256 | ||
| 313 | Usage: insmod e1000.ko copybreak=128 | ||
| 314 | |||
| 315 | Driver copies all packets below or equaling this size to a fresh Rx | ||
| 316 | buffer before handing it up the stack. | ||
| 317 | |||
| 318 | This parameter is different than other parameters, in that it is a | ||
| 319 | single (not 1,1,1 etc.) parameter applied to all driver instances and | ||
| 320 | it is also available during runtime at | ||
| 321 | /sys/module/e1000/parameters/copybreak | ||
| 322 | |||
| 323 | SmartPowerDownEnable | ||
| 324 | -------------------- | ||
| 325 | Valid Range: 0-1 | ||
| 326 | Default Value: 0 (disabled) | ||
| 327 | |||
| 328 | Allows PHY to turn off in lower power states. The user can turn off | ||
| 329 | this parameter in supported chipsets. | ||
| 330 | |||
| 331 | KumeranLockLoss | ||
| 332 | --------------- | ||
| 333 | Valid Range: 0-1 | ||
| 334 | Default Value: 1 (enabled) | ||
| 335 | |||
| 336 | This workaround skips resetting the PHY at shutdown for the initial | ||
| 337 | silicon releases of ICH8 systems. | ||
| 333 | 338 | ||
| 334 | Speed and Duplex Configuration | 339 | Speed and Duplex Configuration |
| 335 | ============================== | 340 | ============================== |
| @@ -385,40 +390,9 @@ If the link partner is forced to a specific speed and duplex, then this | |||
| 385 | parameter should not be used. Instead, use the Speed and Duplex parameters | 390 | parameter should not be used. Instead, use the Speed and Duplex parameters |
| 386 | previously mentioned to force the adapter to the same speed and duplex. | 391 | previously mentioned to force the adapter to the same speed and duplex. |
| 387 | 392 | ||
| 388 | |||
| 389 | Additional Configurations | 393 | Additional Configurations |
| 390 | ========================= | 394 | ========================= |
| 391 | 395 | ||
| 392 | Configuring the Driver on Different Distributions | ||
| 393 | ------------------------------------------------- | ||
| 394 | Configuring a network driver to load properly when the system is started | ||
| 395 | is distribution dependent. Typically, the configuration process involves | ||
| 396 | adding an alias line to /etc/modules.conf or /etc/modprobe.conf as well | ||
| 397 | as editing other system startup scripts and/or configuration files. Many | ||
| 398 | popular Linux distributions ship with tools to make these changes for you. | ||
| 399 | To learn the proper way to configure a network device for your system, | ||
| 400 | refer to your distribution documentation. If during this process you are | ||
| 401 | asked for the driver or module name, the name for the Linux Base Driver | ||
| 402 | for the Intel(R) PRO/1000 Family of Adapters is e1000. | ||
| 403 | |||
| 404 | As an example, if you install the e1000 driver for two PRO/1000 adapters | ||
| 405 | (eth0 and eth1) and set the speed and duplex to 10full and 100half, add | ||
| 406 | the following to modules.conf or or modprobe.conf: | ||
| 407 | |||
| 408 | alias eth0 e1000 | ||
| 409 | alias eth1 e1000 | ||
| 410 | options e1000 Speed=10,100 Duplex=2,1 | ||
| 411 | |||
| 412 | Viewing Link Messages | ||
| 413 | --------------------- | ||
| 414 | Link messages will not be displayed to the console if the distribution is | ||
| 415 | restricting system messages. In order to see network driver link messages | ||
| 416 | on your console, set dmesg to eight by entering the following: | ||
| 417 | |||
| 418 | dmesg -n 8 | ||
| 419 | |||
| 420 | NOTE: This setting is not saved across reboots. | ||
| 421 | |||
| 422 | Jumbo Frames | 396 | Jumbo Frames |
| 423 | ------------ | 397 | ------------ |
| 424 | Jumbo Frames support is enabled by changing the MTU to a value larger than | 398 | Jumbo Frames support is enabled by changing the MTU to a value larger than |
| @@ -437,9 +411,11 @@ Additional Configurations | |||
| 437 | setting in a different location. | 411 | setting in a different location. |
| 438 | 412 | ||
| 439 | Notes: | 413 | Notes: |
| 440 | 414 | Degradation in throughput performance may be observed in some Jumbo frames | |
| 441 | - To enable Jumbo Frames, increase the MTU size on the interface beyond | 415 | environments. If this is observed, increasing the application's socket buffer |
| 442 | 1500. | 416 | size and/or increasing the /proc/sys/net/ipv4/tcp_*mem entry values may help. |
| 417 | See the specific application manual and /usr/src/linux*/Documentation/ | ||
| 418 | networking/ip-sysctl.txt for more details. | ||
| 443 | 419 | ||
| 444 | - The maximum MTU setting for Jumbo Frames is 16110. This value coincides | 420 | - The maximum MTU setting for Jumbo Frames is 16110. This value coincides |
| 445 | with the maximum Jumbo Frames size of 16128. | 421 | with the maximum Jumbo Frames size of 16128. |
| @@ -447,40 +423,11 @@ Additional Configurations | |||
| 447 | - Using Jumbo Frames at 10 or 100 Mbps may result in poor performance or | 423 | - Using Jumbo Frames at 10 or 100 Mbps may result in poor performance or |
| 448 | loss of link. | 424 | loss of link. |
| 449 | 425 | ||
| 450 | - Some Intel gigabit adapters that support Jumbo Frames have a frame size | ||
| 451 | limit of 9238 bytes, with a corresponding MTU size limit of 9216 bytes. | ||
| 452 | The adapters with this limitation are based on the Intel(R) 82571EB, | ||
| 453 | 82572EI, 82573L and 80003ES2LAN controller. These correspond to the | ||
| 454 | following product names: | ||
| 455 | Intel(R) PRO/1000 PT Server Adapter | ||
| 456 | Intel(R) PRO/1000 PT Desktop Adapter | ||
| 457 | Intel(R) PRO/1000 PT Network Connection | ||
| 458 | Intel(R) PRO/1000 PT Dual Port Server Adapter | ||
| 459 | Intel(R) PRO/1000 PT Dual Port Network Connection | ||
| 460 | Intel(R) PRO/1000 PF Server Adapter | ||
| 461 | Intel(R) PRO/1000 PF Network Connection | ||
| 462 | Intel(R) PRO/1000 PF Dual Port Server Adapter | ||
| 463 | Intel(R) PRO/1000 PB Server Connection | ||
| 464 | Intel(R) PRO/1000 PL Network Connection | ||
| 465 | Intel(R) PRO/1000 EB Network Connection with I/O Acceleration | ||
| 466 | Intel(R) PRO/1000 EB Backplane Connection with I/O Acceleration | ||
| 467 | Intel(R) PRO/1000 PT Quad Port Server Adapter | ||
| 468 | |||
| 469 | - Adapters based on the Intel(R) 82542 and 82573V/E controller do not | 426 | - Adapters based on the Intel(R) 82542 and 82573V/E controller do not |
| 470 | support Jumbo Frames. These correspond to the following product names: | 427 | support Jumbo Frames. These correspond to the following product names: |
| 471 | Intel(R) PRO/1000 Gigabit Server Adapter | 428 | Intel(R) PRO/1000 Gigabit Server Adapter |
| 472 | Intel(R) PRO/1000 PM Network Connection | 429 | Intel(R) PRO/1000 PM Network Connection |
| 473 | 430 | ||
| 474 | - The following adapters do not support Jumbo Frames: | ||
| 475 | Intel(R) 82562V 10/100 Network Connection | ||
| 476 | Intel(R) 82566DM Gigabit Network Connection | ||
| 477 | Intel(R) 82566DC Gigabit Network Connection | ||
| 478 | Intel(R) 82566MM Gigabit Network Connection | ||
| 479 | Intel(R) 82566MC Gigabit Network Connection | ||
| 480 | Intel(R) 82562GT 10/100 Network Connection | ||
| 481 | Intel(R) 82562G 10/100 Network Connection | ||
| 482 | |||
| 483 | |||
| 484 | Ethtool | 431 | Ethtool |
| 485 | ------- | 432 | ------- |
| 486 | The driver utilizes the ethtool interface for driver configuration and | 433 | The driver utilizes the ethtool interface for driver configuration and |
| @@ -490,142 +437,14 @@ Additional Configurations | |||
| 490 | The latest release of ethtool can be found from | 437 | The latest release of ethtool can be found from |
| 491 | http://sourceforge.net/projects/gkernel. | 438 | http://sourceforge.net/projects/gkernel. |
| 492 | 439 | ||
| 493 | NOTE: Ethtool 1.6 only supports a limited set of ethtool options. Support | ||
| 494 | for a more complete ethtool feature set can be enabled by upgrading | ||
| 495 | ethtool to ethtool-1.8.1. | ||
| 496 | |||
| 497 | Enabling Wake on LAN* (WoL) | 440 | Enabling Wake on LAN* (WoL) |
| 498 | --------------------------- | 441 | --------------------------- |
| 499 | WoL is configured through the Ethtool* utility. Ethtool is included with | 442 | WoL is configured through the Ethtool* utility. |
| 500 | all versions of Red Hat after Red Hat 7.2. For other Linux distributions, | ||
| 501 | download and install Ethtool from the following website: | ||
| 502 | http://sourceforge.net/projects/gkernel. | ||
| 503 | |||
| 504 | For instructions on enabling WoL with Ethtool, refer to the website listed | ||
| 505 | above. | ||
| 506 | 443 | ||
| 507 | WoL will be enabled on the system during the next shut down or reboot. | 444 | WoL will be enabled on the system during the next shut down or reboot. |
| 508 | For this driver version, in order to enable WoL, the e1000 driver must be | 445 | For this driver version, in order to enable WoL, the e1000 driver must be |
| 509 | loaded when shutting down or rebooting the system. | 446 | loaded when shutting down or rebooting the system. |
| 510 | 447 | ||
| 511 | Wake On LAN is only supported on port A for the following devices: | ||
| 512 | Intel(R) PRO/1000 PT Dual Port Network Connection | ||
| 513 | Intel(R) PRO/1000 PT Dual Port Server Connection | ||
| 514 | Intel(R) PRO/1000 PT Dual Port Server Adapter | ||
| 515 | Intel(R) PRO/1000 PF Dual Port Server Adapter | ||
| 516 | Intel(R) PRO/1000 PT Quad Port Server Adapter | ||
| 517 | |||
| 518 | NAPI | ||
| 519 | ---- | ||
| 520 | NAPI (Rx polling mode) is enabled in the e1000 driver. | ||
| 521 | |||
| 522 | See www.cyberus.ca/~hadi/usenix-paper.tgz for more information on NAPI. | ||
| 523 | |||
| 524 | |||
| 525 | Known Issues | ||
| 526 | ============ | ||
| 527 | |||
| 528 | Dropped Receive Packets on Half-duplex 10/100 Networks | ||
| 529 | ------------------------------------------------------ | ||
| 530 | If you have an Intel PCI Express adapter running at 10mbps or 100mbps, half- | ||
| 531 | duplex, you may observe occasional dropped receive packets. There are no | ||
| 532 | workarounds for this problem in this network configuration. The network must | ||
| 533 | be updated to operate in full-duplex, and/or 1000mbps only. | ||
| 534 | |||
| 535 | Jumbo Frames System Requirement | ||
| 536 | ------------------------------- | ||
| 537 | Memory allocation failures have been observed on Linux systems with 64 MB | ||
| 538 | of RAM or less that are running Jumbo Frames. If you are using Jumbo | ||
| 539 | Frames, your system may require more than the advertised minimum | ||
| 540 | requirement of 64 MB of system memory. | ||
| 541 | |||
| 542 | Performance Degradation with Jumbo Frames | ||
| 543 | ----------------------------------------- | ||
| 544 | Degradation in throughput performance may be observed in some Jumbo frames | ||
| 545 | environments. If this is observed, increasing the application's socket | ||
| 546 | buffer size and/or increasing the /proc/sys/net/ipv4/tcp_*mem entry values | ||
| 547 | may help. See the specific application manual and | ||
| 548 | /usr/src/linux*/Documentation/ | ||
| 549 | networking/ip-sysctl.txt for more details. | ||
| 550 | |||
| 551 | Jumbo Frames on Foundry BigIron 8000 switch | ||
| 552 | ------------------------------------------- | ||
| 553 | There is a known issue using Jumbo frames when connected to a Foundry | ||
| 554 | BigIron 8000 switch. This is a 3rd party limitation. If you experience | ||
| 555 | loss of packets, lower the MTU size. | ||
| 556 | |||
| 557 | Allocating Rx Buffers when Using Jumbo Frames | ||
| 558 | --------------------------------------------- | ||
| 559 | Allocating Rx buffers when using Jumbo Frames on 2.6.x kernels may fail if | ||
| 560 | the available memory is heavily fragmented. This issue may be seen with PCI-X | ||
| 561 | adapters or with packet split disabled. This can be reduced or eliminated | ||
| 562 | by changing the amount of available memory for receive buffer allocation, by | ||
| 563 | increasing /proc/sys/vm/min_free_kbytes. | ||
| 564 | |||
| 565 | Multiple Interfaces on Same Ethernet Broadcast Network | ||
| 566 | ------------------------------------------------------ | ||
| 567 | Due to the default ARP behavior on Linux, it is not possible to have | ||
| 568 | one system on two IP networks in the same Ethernet broadcast domain | ||
| 569 | (non-partitioned switch) behave as expected. All Ethernet interfaces | ||
| 570 | will respond to IP traffic for any IP address assigned to the system. | ||
| 571 | This results in unbalanced receive traffic. | ||
| 572 | |||
| 573 | If you have multiple interfaces in a server, either turn on ARP | ||
| 574 | filtering by entering: | ||
| 575 | |||
| 576 | echo 1 > /proc/sys/net/ipv4/conf/all/arp_filter | ||
| 577 | (this only works if your kernel's version is higher than 2.4.5), | ||
| 578 | |||
| 579 | NOTE: This setting is not saved across reboots. The configuration | ||
| 580 | change can be made permanent by adding the line: | ||
| 581 | net.ipv4.conf.all.arp_filter = 1 | ||
| 582 | to the file /etc/sysctl.conf | ||
| 583 | |||
| 584 | or, | ||
| 585 | |||
| 586 | install the interfaces in separate broadcast domains (either in | ||
| 587 | different switches or in a switch partitioned to VLANs). | ||
| 588 | |||
| 589 | 82541/82547 can't link or are slow to link with some link partners | ||
| 590 | ----------------------------------------------------------------- | ||
| 591 | There is a known compatibility issue with 82541/82547 and some | ||
| 592 | low-end switches where the link will not be established, or will | ||
| 593 | be slow to establish. In particular, these switches are known to | ||
| 594 | be incompatible with 82541/82547: | ||
| 595 | |||
| 596 | Planex FXG-08TE | ||
| 597 | I-O Data ETG-SH8 | ||
| 598 | |||
| 599 | To workaround this issue, the driver can be compiled with an override | ||
| 600 | of the PHY's master/slave setting. Forcing master or forcing slave | ||
| 601 | mode will improve time-to-link. | ||
| 602 | |||
| 603 | # make CFLAGS_EXTRA=-DE1000_MASTER_SLAVE=<n> | ||
| 604 | |||
| 605 | Where <n> is: | ||
| 606 | |||
| 607 | 0 = Hardware default | ||
| 608 | 1 = Master mode | ||
| 609 | 2 = Slave mode | ||
| 610 | 3 = Auto master/slave | ||
| 611 | |||
| 612 | Disable rx flow control with ethtool | ||
| 613 | ------------------------------------ | ||
| 614 | In order to disable receive flow control using ethtool, you must turn | ||
| 615 | off auto-negotiation on the same command line. | ||
| 616 | |||
| 617 | For example: | ||
| 618 | |||
| 619 | ethtool -A eth? autoneg off rx off | ||
| 620 | |||
| 621 | Unplugging network cable while ethtool -p is running | ||
| 622 | ---------------------------------------------------- | ||
| 623 | In kernel versions 2.5.50 and later (including 2.6 kernel), unplugging | ||
| 624 | the network cable while ethtool -p is running will cause the system to | ||
| 625 | become unresponsive to keyboard commands, except for control-alt-delete. | ||
| 626 | Restarting the system appears to be the only remedy. | ||
| 627 | |||
| 628 | |||
| 629 | Support | 448 | Support |
| 630 | ======= | 449 | ======= |
| 631 | 450 | ||
diff --git a/Documentation/networking/e1000e.txt b/Documentation/networking/e1000e.txt new file mode 100644 index 000000000000..6aa048badf32 --- /dev/null +++ b/Documentation/networking/e1000e.txt | |||
| @@ -0,0 +1,302 @@ | |||
| 1 | Linux* Driver for Intel(R) Network Connection | ||
| 2 | =============================================================== | ||
| 3 | |||
| 4 | Intel Gigabit Linux driver. | ||
| 5 | Copyright(c) 1999 - 2010 Intel Corporation. | ||
| 6 | |||
| 7 | Contents | ||
| 8 | ======== | ||
| 9 | |||
| 10 | - Identifying Your Adapter | ||
| 11 | - Command Line Parameters | ||
| 12 | - Additional Configurations | ||
| 13 | - Support | ||
| 14 | |||
| 15 | Identifying Your Adapter | ||
| 16 | ======================== | ||
| 17 | |||
| 18 | The e1000e driver supports all PCI Express Intel(R) Gigabit Network | ||
| 19 | Connections, except those that are 82575, 82576 and 82580-based*. | ||
| 20 | |||
| 21 | * NOTE: The Intel(R) PRO/1000 P Dual Port Server Adapter is supported by | ||
| 22 | the e1000 driver, not the e1000e driver due to the 82546 part being used | ||
| 23 | behind a PCI Express bridge. | ||
| 24 | |||
| 25 | For more information on how to identify your adapter, go to the Adapter & | ||
| 26 | Driver ID Guide at: | ||
| 27 | |||
| 28 | http://support.intel.com/support/go/network/adapter/idguide.htm | ||
| 29 | |||
| 30 | For the latest Intel network drivers for Linux, refer to the following | ||
| 31 | website. In the search field, enter your adapter name or type, or use the | ||
| 32 | networking link on the left to search for your adapter: | ||
| 33 | |||
| 34 | http://support.intel.com/support/go/network/adapter/home.htm | ||
| 35 | |||
| 36 | Command Line Parameters | ||
| 37 | ======================= | ||
| 38 | |||
| 39 | The default value for each parameter is generally the recommended setting, | ||
| 40 | unless otherwise noted. | ||
| 41 | |||
| 42 | NOTES: For more information about the InterruptThrottleRate, | ||
| 43 | RxIntDelay, TxIntDelay, RxAbsIntDelay, and TxAbsIntDelay | ||
| 44 | parameters, see the application note at: | ||
| 45 | http://www.intel.com/design/network/applnots/ap450.htm | ||
| 46 | |||
| 47 | InterruptThrottleRate | ||
| 48 | --------------------- | ||
| 49 | Valid Range: 0,1,3,4,100-100000 (0=off, 1=dynamic, 3=dynamic conservative, | ||
| 50 | 4=simplified balancing) | ||
| 51 | Default Value: 3 | ||
| 52 | |||
| 53 | The driver can limit the amount of interrupts per second that the adapter | ||
| 54 | will generate for incoming packets. It does this by writing a value to the | ||
| 55 | adapter that is based on the maximum amount of interrupts that the adapter | ||
| 56 | will generate per second. | ||
| 57 | |||
| 58 | Setting InterruptThrottleRate to a value greater or equal to 100 | ||
| 59 | will program the adapter to send out a maximum of that many interrupts | ||
| 60 | per second, even if more packets have come in. This reduces interrupt | ||
| 61 | load on the system and can lower CPU utilization under heavy load, | ||
| 62 | but will increase latency as packets are not processed as quickly. | ||
| 63 | |||
| 64 | The driver has two adaptive modes (setting 1 or 3) in which | ||
| 65 | it dynamically adjusts the InterruptThrottleRate value based on the traffic | ||
| 66 | that it receives. After determining the type of incoming traffic in the last | ||
| 67 | timeframe, it will adjust the InterruptThrottleRate to an appropriate value | ||
| 68 | for that traffic. | ||
| 69 | |||
| 70 | The algorithm classifies the incoming traffic every interval into | ||
| 71 | classes. Once the class is determined, the InterruptThrottleRate value is | ||
| 72 | adjusted to suit that traffic type the best. There are three classes defined: | ||
| 73 | "Bulk traffic", for large amounts of packets of normal size; "Low latency", | ||
| 74 | for small amounts of traffic and/or a significant percentage of small | ||
| 75 | packets; and "Lowest latency", for almost completely small packets or | ||
| 76 | minimal traffic. | ||
| 77 | |||
| 78 | In dynamic conservative mode, the InterruptThrottleRate value is set to 4000 | ||
| 79 | for traffic that falls in class "Bulk traffic". If traffic falls in the "Low | ||
| 80 | latency" or "Lowest latency" class, the InterruptThrottleRate is increased | ||
| 81 | stepwise to 20000. This default mode is suitable for most applications. | ||
| 82 | |||
| 83 | For situations where low latency is vital such as cluster or | ||
| 84 | grid computing, the algorithm can reduce latency even more when | ||
| 85 | InterruptThrottleRate is set to mode 1. In this mode, which operates | ||
| 86 | the same as mode 3, the InterruptThrottleRate will be increased stepwise to | ||
| 87 | 70000 for traffic in class "Lowest latency". | ||
| 88 | |||
| 89 | In simplified mode the interrupt rate is based on the ratio of Tx and | ||
| 90 | Rx traffic. If the bytes per second rate is approximately equal the | ||
| 91 | interrupt rate will drop as low as 2000 interrupts per second. If the | ||
| 92 | traffic is mostly transmit or mostly receive, the interrupt rate could | ||
| 93 | be as high as 8000. | ||
| 94 | |||
| 95 | Setting InterruptThrottleRate to 0 turns off any interrupt moderation | ||
| 96 | and may improve small packet latency, but is generally not suitable | ||
| 97 | for bulk throughput traffic. | ||
| 98 | |||
| 99 | NOTE: InterruptThrottleRate takes precedence over the TxAbsIntDelay and | ||
| 100 | RxAbsIntDelay parameters. In other words, minimizing the receive | ||
| 101 | and/or transmit absolute delays does not force the controller to | ||
| 102 | generate more interrupts than what the Interrupt Throttle Rate | ||
| 103 | allows. | ||
| 104 | |||
| 105 | NOTE: When e1000e is loaded with default settings and multiple adapters | ||
| 106 | are in use simultaneously, the CPU utilization may increase non- | ||
| 107 | linearly. In order to limit the CPU utilization without impacting | ||
| 108 | the overall throughput, we recommend that you load the driver as | ||
| 109 | follows: | ||
| 110 | |||
| 111 | modprobe e1000e InterruptThrottleRate=3000,3000,3000 | ||
| 112 | |||
| 113 | This sets the InterruptThrottleRate to 3000 interrupts/sec for | ||
| 114 | the first, second, and third instances of the driver. The range | ||
| 115 | of 2000 to 3000 interrupts per second works on a majority of | ||
| 116 | systems and is a good starting point, but the optimal value will | ||
| 117 | be platform-specific. If CPU utilization is not a concern, use | ||
| 118 | RX_POLLING (NAPI) and default driver settings. | ||
| 119 | |||
| 120 | RxIntDelay | ||
| 121 | ---------- | ||
| 122 | Valid Range: 0-65535 (0=off) | ||
| 123 | Default Value: 0 | ||
| 124 | |||
| 125 | This value delays the generation of receive interrupts in units of 1.024 | ||
| 126 | microseconds. Receive interrupt reduction can improve CPU efficiency if | ||
| 127 | properly tuned for specific network traffic. Increasing this value adds | ||
| 128 | extra latency to frame reception and can end up decreasing the throughput | ||
| 129 | of TCP traffic. If the system is reporting dropped receives, this value | ||
| 130 | may be set too high, causing the driver to run out of available receive | ||
| 131 | descriptors. | ||
| 132 | |||
| 133 | CAUTION: When setting RxIntDelay to a value other than 0, adapters may | ||
| 134 | hang (stop transmitting) under certain network conditions. If | ||
| 135 | this occurs a NETDEV WATCHDOG message is logged in the system | ||
| 136 | event log. In addition, the controller is automatically reset, | ||
| 137 | restoring the network connection. To eliminate the potential | ||
| 138 | for the hang ensure that RxIntDelay is set to 0. | ||
| 139 | |||
| 140 | RxAbsIntDelay | ||
| 141 | ------------- | ||
| 142 | Valid Range: 0-65535 (0=off) | ||
| 143 | Default Value: 8 | ||
| 144 | |||
| 145 | This value, in units of 1.024 microseconds, limits the delay in which a | ||
| 146 | receive interrupt is generated. Useful only if RxIntDelay is non-zero, | ||
| 147 | this value ensures that an interrupt is generated after the initial | ||
| 148 | packet is received within the set amount of time. Proper tuning, | ||
| 149 | along with RxIntDelay, may improve traffic throughput in specific network | ||
| 150 | conditions. | ||
| 151 | |||
| 152 | TxIntDelay | ||
| 153 | ---------- | ||
| 154 | Valid Range: 0-65535 (0=off) | ||
| 155 | Default Value: 8 | ||
| 156 | |||
| 157 | This value delays the generation of transmit interrupts in units of | ||
| 158 | 1.024 microseconds. Transmit interrupt reduction can improve CPU | ||
| 159 | efficiency if properly tuned for specific network traffic. If the | ||
| 160 | system is reporting dropped transmits, this value may be set too high | ||
| 161 | causing the driver to run out of available transmit descriptors. | ||
| 162 | |||
| 163 | TxAbsIntDelay | ||
| 164 | ------------- | ||
| 165 | Valid Range: 0-65535 (0=off) | ||
| 166 | Default Value: 32 | ||
| 167 | |||
| 168 | This value, in units of 1.024 microseconds, limits the delay in which a | ||
| 169 | transmit interrupt is generated. Useful only if TxIntDelay is non-zero, | ||
| 170 | this value ensures that an interrupt is generated after the initial | ||
| 171 | packet is sent on the wire within the set amount of time. Proper tuning, | ||
| 172 | along with TxIntDelay, may improve traffic throughput in specific | ||
| 173 | network conditions. | ||
| 174 | |||
| 175 | Copybreak | ||
| 176 | --------- | ||
| 177 | Valid Range: 0-xxxxxxx (0=off) | ||
| 178 | Default Value: 256 | ||
| 179 | |||
| 180 | Driver copies all packets below or equaling this size to a fresh Rx | ||
| 181 | buffer before handing it up the stack. | ||
| 182 | |||
| 183 | This parameter is different than other parameters, in that it is a | ||
| 184 | single (not 1,1,1 etc.) parameter applied to all driver instances and | ||
| 185 | it is also available during runtime at | ||
| 186 | /sys/module/e1000e/parameters/copybreak | ||
| 187 | |||
| 188 | SmartPowerDownEnable | ||
| 189 | -------------------- | ||
| 190 | Valid Range: 0-1 | ||
| 191 | Default Value: 0 (disabled) | ||
| 192 | |||
| 193 | Allows PHY to turn off in lower power states. The user can set this parameter | ||
| 194 | in supported chipsets. | ||
| 195 | |||
| 196 | KumeranLockLoss | ||
| 197 | --------------- | ||
| 198 | Valid Range: 0-1 | ||
| 199 | Default Value: 1 (enabled) | ||
| 200 | |||
| 201 | This workaround skips resetting the PHY at shutdown for the initial | ||
| 202 | silicon releases of ICH8 systems. | ||
| 203 | |||
| 204 | IntMode | ||
| 205 | ------- | ||
| 206 | Valid Range: 0-2 (0=legacy, 1=MSI, 2=MSI-X) | ||
| 207 | Default Value: 2 | ||
| 208 | |||
| 209 | Allows changing the interrupt mode at module load time, without requiring a | ||
| 210 | recompile. If the driver load fails to enable a specific interrupt mode, the | ||
| 211 | driver will try other interrupt modes, from least to most compatible. The | ||
| 212 | interrupt order is MSI-X, MSI, Legacy. If specifying MSI (IntMode=1) | ||
| 213 | interrupts, only MSI and Legacy will be attempted. | ||
| 214 | |||
| 215 | CrcStripping | ||
| 216 | ------------ | ||
| 217 | Valid Range: 0-1 | ||
| 218 | Default Value: 1 (enabled) | ||
| 219 | |||
| 220 | Strip the CRC from received packets before sending up the network stack. If | ||
| 221 | you have a machine with a BMC enabled but cannot receive IPMI traffic after | ||
| 222 | loading or enabling the driver, try disabling this feature. | ||
| 223 | |||
| 224 | WriteProtectNVM | ||
| 225 | --------------- | ||
| 226 | Valid Range: 0-1 | ||
| 227 | Default Value: 1 (enabled) | ||
| 228 | |||
| 229 | Set the hardware to ignore all write/erase cycles to the GbE region in the | ||
| 230 | ICHx NVM (non-volatile memory). This feature can be disabled by the | ||
| 231 | WriteProtectNVM module parameter (enabled by default) only after a hardware | ||
| 232 | reset, but the machine must be power cycled before trying to enable writes. | ||
| 233 | |||
| 234 | Note: the kernel boot option iomem=relaxed may need to be set if the kernel | ||
| 235 | config option CONFIG_STRICT_DEVMEM=y, if the root user wants to write the | ||
| 236 | NVM from user space via ethtool. | ||
| 237 | |||
| 238 | Additional Configurations | ||
| 239 | ========================= | ||
| 240 | |||
| 241 | Jumbo Frames | ||
| 242 | ------------ | ||
| 243 | Jumbo Frames support is enabled by changing the MTU to a value larger than | ||
| 244 | the default of 1500. Use the ifconfig command to increase the MTU size. | ||
| 245 | For example: | ||
| 246 | |||
| 247 | ifconfig eth<x> mtu 9000 up | ||
| 248 | |||
| 249 | This setting is not saved across reboots. | ||
| 250 | |||
| 251 | Notes: | ||
| 252 | |||
| 253 | - The maximum MTU setting for Jumbo Frames is 9216. This value coincides | ||
| 254 | with the maximum Jumbo Frames size of 9234 bytes. | ||
| 255 | |||
| 256 | - Using Jumbo Frames at 10 or 100 Mbps is not supported and may result in | ||
| 257 | poor performance or loss of link. | ||
| 258 | |||
| 259 | - Some adapters limit Jumbo Frames sized packets to a maximum of | ||
| 260 | 4096 bytes and some adapters do not support Jumbo Frames. | ||
| 261 | |||
| 262 | |||
| 263 | Ethtool | ||
| 264 | ------- | ||
| 265 | The driver utilizes the ethtool interface for driver configuration and | ||
| 266 | diagnostics, as well as displaying statistical information. We | ||
| 267 | strongly recommend downloading the latest version of Ethtool at: | ||
| 268 | |||
| 269 | http://sourceforge.net/projects/gkernel. | ||
| 270 | |||
| 271 | Speed and Duplex | ||
| 272 | ---------------- | ||
| 273 | Speed and Duplex are configured through the Ethtool* utility. For | ||
| 274 | instructions, refer to the Ethtool man page. | ||
| 275 | |||
| 276 | Enabling Wake on LAN* (WoL) | ||
| 277 | --------------------------- | ||
| 278 | WoL is configured through the Ethtool* utility. For instructions on | ||
| 279 | enabling WoL with Ethtool, refer to the Ethtool man page. | ||
| 280 | |||
| 281 | WoL will be enabled on the system during the next shut down or reboot. | ||
| 282 | For this driver version, in order to enable WoL, the e1000e driver must be | ||
| 283 | loaded when shutting down or rebooting the system. | ||
| 284 | |||
| 285 | In most cases Wake On LAN is only supported on port A for multiple port | ||
| 286 | adapters. To verify if a port supports Wake on LAN run ethtool eth<X>. | ||
| 287 | |||
| 288 | |||
| 289 | Support | ||
| 290 | ======= | ||
| 291 | |||
| 292 | For general information, go to the Intel support website at: | ||
| 293 | |||
| 294 | www.intel.com/support/ | ||
| 295 | |||
| 296 | or the Intel Wired Networking project hosted by Sourceforge at: | ||
| 297 | |||
| 298 | http://sourceforge.net/projects/e1000 | ||
| 299 | |||
| 300 | If an issue is identified with the released source code on the supported | ||
| 301 | kernel with a supported adapter, email the specific information related | ||
| 302 | to the issue to e1000-devel@lists.sf.net | ||
diff --git a/Documentation/networking/ixgbevf.txt b/Documentation/networking/ixgbevf.txt index 19015de6725f..21dd5d15b6b4 100755..100644 --- a/Documentation/networking/ixgbevf.txt +++ b/Documentation/networking/ixgbevf.txt | |||
| @@ -1,19 +1,16 @@ | |||
| 1 | Linux* Base Driver for Intel(R) Network Connection | 1 | Linux* Base Driver for Intel(R) Network Connection |
| 2 | ================================================== | 2 | ================================================== |
| 3 | 3 | ||
| 4 | November 24, 2009 | 4 | Intel Gigabit Linux driver. |
| 5 | Copyright(c) 1999 - 2010 Intel Corporation. | ||
| 5 | 6 | ||
| 6 | Contents | 7 | Contents |
| 7 | ======== | 8 | ======== |
| 8 | 9 | ||
| 9 | - In This Release | ||
| 10 | - Identifying Your Adapter | 10 | - Identifying Your Adapter |
| 11 | - Known Issues/Troubleshooting | 11 | - Known Issues/Troubleshooting |
| 12 | - Support | 12 | - Support |
| 13 | 13 | ||
| 14 | In This Release | ||
| 15 | =============== | ||
| 16 | |||
| 17 | This file describes the ixgbevf Linux* Base Driver for Intel Network | 14 | This file describes the ixgbevf Linux* Base Driver for Intel Network |
| 18 | Connection. | 15 | Connection. |
| 19 | 16 | ||
| @@ -33,7 +30,7 @@ Identifying Your Adapter | |||
| 33 | For more information on how to identify your adapter, go to the Adapter & | 30 | For more information on how to identify your adapter, go to the Adapter & |
| 34 | Driver ID Guide at: | 31 | Driver ID Guide at: |
| 35 | 32 | ||
| 36 | http://support.intel.com/support/network/sb/CS-008441.htm | 33 | http://support.intel.com/support/go/network/adapter/idguide.htm |
| 37 | 34 | ||
| 38 | Known Issues/Troubleshooting | 35 | Known Issues/Troubleshooting |
| 39 | ============================ | 36 | ============================ |
| @@ -57,34 +54,3 @@ or the Intel Wired Networking project hosted by Sourceforge at: | |||
| 57 | If an issue is identified with the released source code on the supported | 54 | If an issue is identified with the released source code on the supported |
| 58 | kernel with a supported adapter, email the specific information related | 55 | kernel with a supported adapter, email the specific information related |
| 59 | to the issue to e1000-devel@lists.sf.net | 56 | to the issue to e1000-devel@lists.sf.net |
| 60 | |||
| 61 | License | ||
| 62 | ======= | ||
| 63 | |||
| 64 | Intel 10 Gigabit Linux driver. | ||
| 65 | Copyright(c) 1999 - 2009 Intel Corporation. | ||
| 66 | |||
| 67 | This program is free software; you can redistribute it and/or modify it | ||
| 68 | under the terms and conditions of the GNU General Public License, | ||
| 69 | version 2, as published by the Free Software Foundation. | ||
| 70 | |||
| 71 | This program is distributed in the hope it will be useful, but WITHOUT | ||
| 72 | ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||
| 73 | FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for | ||
| 74 | more details. | ||
| 75 | |||
| 76 | You should have received a copy of the GNU General Public License along with | ||
| 77 | this program; if not, write to the Free Software Foundation, Inc., | ||
| 78 | 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. | ||
| 79 | |||
| 80 | The full GNU General Public License is included in this distribution in | ||
| 81 | the file called "COPYING". | ||
| 82 | |||
| 83 | Trademarks | ||
| 84 | ========== | ||
| 85 | |||
| 86 | Intel, Itanium, and Pentium are trademarks or registered trademarks of | ||
| 87 | Intel Corporation or its subsidiaries in the United States and other | ||
| 88 | countries. | ||
| 89 | |||
| 90 | * Other names and brands may be claimed as the property of others. | ||
diff --git a/MAINTAINERS b/MAINTAINERS index d79fd7aae983..d45828145e3a 100644 --- a/MAINTAINERS +++ b/MAINTAINERS | |||
| @@ -3073,16 +3073,27 @@ L: netdev@vger.kernel.org | |||
| 3073 | S: Maintained | 3073 | S: Maintained |
| 3074 | F: drivers/net/ixp2000/ | 3074 | F: drivers/net/ixp2000/ |
| 3075 | 3075 | ||
| 3076 | INTEL ETHERNET DRIVERS (e100/e1000/e1000e/igb/igbvf/ixgb/ixgbe) | 3076 | INTEL ETHERNET DRIVERS (e100/e1000/e1000e/igb/igbvf/ixgb/ixgbe/ixgbevf) |
| 3077 | M: Jeff Kirsher <jeffrey.t.kirsher@intel.com> | 3077 | M: Jeff Kirsher <jeffrey.t.kirsher@intel.com> |
| 3078 | M: Jesse Brandeburg <jesse.brandeburg@intel.com> | 3078 | M: Jesse Brandeburg <jesse.brandeburg@intel.com> |
| 3079 | M: Bruce Allan <bruce.w.allan@intel.com> | 3079 | M: Bruce Allan <bruce.w.allan@intel.com> |
| 3080 | M: Alex Duyck <alexander.h.duyck@intel.com> | 3080 | M: Carolyn Wyborny <carolyn.wyborny@intel.com> |
| 3081 | M: Don Skidmore <donald.c.skidmore@intel.com> | ||
| 3082 | M: Greg Rose <gregory.v.rose@intel.com> | ||
| 3081 | M: PJ Waskiewicz <peter.p.waskiewicz.jr@intel.com> | 3083 | M: PJ Waskiewicz <peter.p.waskiewicz.jr@intel.com> |
| 3084 | M: Alex Duyck <alexander.h.duyck@intel.com> | ||
| 3082 | M: John Ronciak <john.ronciak@intel.com> | 3085 | M: John Ronciak <john.ronciak@intel.com> |
| 3083 | L: e1000-devel@lists.sourceforge.net | 3086 | L: e1000-devel@lists.sourceforge.net |
| 3084 | W: http://e1000.sourceforge.net/ | 3087 | W: http://e1000.sourceforge.net/ |
| 3085 | S: Supported | 3088 | S: Supported |
| 3089 | F: Documentation/networking/e100.txt | ||
| 3090 | F: Documentation/networking/e1000.txt | ||
| 3091 | F: Documentation/networking/e1000e.txt | ||
| 3092 | F: Documentation/networking/igb.txt | ||
| 3093 | F: Documentation/networking/igbvf.txt | ||
| 3094 | F: Documentation/networking/ixgb.txt | ||
| 3095 | F: Documentation/networking/ixgbe.txt | ||
| 3096 | F: Documentation/networking/ixgbevf.txt | ||
| 3086 | F: drivers/net/e100.c | 3097 | F: drivers/net/e100.c |
| 3087 | F: drivers/net/e1000/ | 3098 | F: drivers/net/e1000/ |
| 3088 | F: drivers/net/e1000e/ | 3099 | F: drivers/net/e1000e/ |
| @@ -3090,6 +3101,7 @@ F: drivers/net/igb/ | |||
| 3090 | F: drivers/net/igbvf/ | 3101 | F: drivers/net/igbvf/ |
| 3091 | F: drivers/net/ixgb/ | 3102 | F: drivers/net/ixgb/ |
| 3092 | F: drivers/net/ixgbe/ | 3103 | F: drivers/net/ixgbe/ |
| 3104 | F: drivers/net/ixgbevf/ | ||
| 3093 | 3105 | ||
| 3094 | INTEL PRO/WIRELESS 2100 NETWORK CONNECTION SUPPORT | 3106 | INTEL PRO/WIRELESS 2100 NETWORK CONNECTION SUPPORT |
| 3095 | L: linux-wireless@vger.kernel.org | 3107 | L: linux-wireless@vger.kernel.org |
diff --git a/drivers/isdn/sc/interrupt.c b/drivers/isdn/sc/interrupt.c index 485be8b1e1b3..f0225bc0f267 100644 --- a/drivers/isdn/sc/interrupt.c +++ b/drivers/isdn/sc/interrupt.c | |||
| @@ -112,11 +112,19 @@ irqreturn_t interrupt_handler(int dummy, void *card_inst) | |||
| 112 | } | 112 | } |
| 113 | else if(callid>=0x0000 && callid<=0x7FFF) | 113 | else if(callid>=0x0000 && callid<=0x7FFF) |
| 114 | { | 114 | { |
| 115 | int len; | ||
| 116 | |||
| 115 | pr_debug("%s: Got Incoming Call\n", | 117 | pr_debug("%s: Got Incoming Call\n", |
| 116 | sc_adapter[card]->devicename); | 118 | sc_adapter[card]->devicename); |
| 117 | strcpy(setup.phone,&(rcvmsg.msg_data.byte_array[4])); | 119 | len = strlcpy(setup.phone, &(rcvmsg.msg_data.byte_array[4]), |
| 118 | strcpy(setup.eazmsn, | 120 | sizeof(setup.phone)); |
| 119 | sc_adapter[card]->channel[rcvmsg.phy_link_no-1].dn); | 121 | if (len >= sizeof(setup.phone)) |
| 122 | continue; | ||
| 123 | len = strlcpy(setup.eazmsn, | ||
| 124 | sc_adapter[card]->channel[rcvmsg.phy_link_no - 1].dn, | ||
| 125 | sizeof(setup.eazmsn)); | ||
| 126 | if (len >= sizeof(setup.eazmsn)) | ||
| 127 | continue; | ||
| 120 | setup.si1 = 7; | 128 | setup.si1 = 7; |
| 121 | setup.si2 = 0; | 129 | setup.si2 = 0; |
| 122 | setup.plan = 0; | 130 | setup.plan = 0; |
| @@ -176,7 +184,9 @@ irqreturn_t interrupt_handler(int dummy, void *card_inst) | |||
| 176 | * Handle a GetMyNumber Rsp | 184 | * Handle a GetMyNumber Rsp |
| 177 | */ | 185 | */ |
| 178 | if (IS_CE_MESSAGE(rcvmsg,Call,0,GetMyNumber)){ | 186 | if (IS_CE_MESSAGE(rcvmsg,Call,0,GetMyNumber)){ |
| 179 | strcpy(sc_adapter[card]->channel[rcvmsg.phy_link_no-1].dn,rcvmsg.msg_data.byte_array); | 187 | strlcpy(sc_adapter[card]->channel[rcvmsg.phy_link_no - 1].dn, |
| 188 | rcvmsg.msg_data.byte_array, | ||
| 189 | sizeof(rcvmsg.msg_data.byte_array)); | ||
| 180 | continue; | 190 | continue; |
| 181 | } | 191 | } |
| 182 | 192 | ||
diff --git a/drivers/net/Kconfig b/drivers/net/Kconfig index 2cc81a54cbf3..5db667c0b371 100644 --- a/drivers/net/Kconfig +++ b/drivers/net/Kconfig | |||
| @@ -2428,7 +2428,7 @@ config UGETH_TX_ON_DEMAND | |||
| 2428 | 2428 | ||
| 2429 | config MV643XX_ETH | 2429 | config MV643XX_ETH |
| 2430 | tristate "Marvell Discovery (643XX) and Orion ethernet support" | 2430 | tristate "Marvell Discovery (643XX) and Orion ethernet support" |
| 2431 | depends on MV64X60 || PPC32 || PLAT_ORION | 2431 | depends on (MV64X60 || PPC32 || PLAT_ORION) && INET |
| 2432 | select INET_LRO | 2432 | select INET_LRO |
| 2433 | select PHYLIB | 2433 | select PHYLIB |
| 2434 | help | 2434 | help |
| @@ -2803,7 +2803,7 @@ config NIU | |||
| 2803 | 2803 | ||
| 2804 | config PASEMI_MAC | 2804 | config PASEMI_MAC |
| 2805 | tristate "PA Semi 1/10Gbit MAC" | 2805 | tristate "PA Semi 1/10Gbit MAC" |
| 2806 | depends on PPC_PASEMI && PCI | 2806 | depends on PPC_PASEMI && PCI && INET |
| 2807 | select PHYLIB | 2807 | select PHYLIB |
| 2808 | select INET_LRO | 2808 | select INET_LRO |
| 2809 | help | 2809 | help |
diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c index 3b16f62d5606..e953c6ad6e6d 100644 --- a/drivers/net/bonding/bond_main.c +++ b/drivers/net/bonding/bond_main.c | |||
| @@ -5164,6 +5164,15 @@ int bond_create(struct net *net, const char *name) | |||
| 5164 | res = dev_alloc_name(bond_dev, "bond%d"); | 5164 | res = dev_alloc_name(bond_dev, "bond%d"); |
| 5165 | if (res < 0) | 5165 | if (res < 0) |
| 5166 | goto out; | 5166 | goto out; |
| 5167 | } else { | ||
| 5168 | /* | ||
| 5169 | * If we're given a name to register | ||
| 5170 | * we need to ensure that its not already | ||
| 5171 | * registered | ||
| 5172 | */ | ||
| 5173 | res = -EEXIST; | ||
| 5174 | if (__dev_get_by_name(net, name) != NULL) | ||
| 5175 | goto out; | ||
| 5167 | } | 5176 | } |
| 5168 | 5177 | ||
| 5169 | res = register_netdevice(bond_dev); | 5178 | res = register_netdevice(bond_dev); |
diff --git a/drivers/net/skge.c b/drivers/net/skge.c index 40e5c46e7571..465ae7e84507 100644 --- a/drivers/net/skge.c +++ b/drivers/net/skge.c | |||
| @@ -43,6 +43,7 @@ | |||
| 43 | #include <linux/seq_file.h> | 43 | #include <linux/seq_file.h> |
| 44 | #include <linux/mii.h> | 44 | #include <linux/mii.h> |
| 45 | #include <linux/slab.h> | 45 | #include <linux/slab.h> |
| 46 | #include <linux/dmi.h> | ||
| 46 | #include <asm/irq.h> | 47 | #include <asm/irq.h> |
| 47 | 48 | ||
| 48 | #include "skge.h" | 49 | #include "skge.h" |
| @@ -3868,6 +3869,8 @@ static void __devinit skge_show_addr(struct net_device *dev) | |||
| 3868 | netif_info(skge, probe, skge->netdev, "addr %pM\n", dev->dev_addr); | 3869 | netif_info(skge, probe, skge->netdev, "addr %pM\n", dev->dev_addr); |
| 3869 | } | 3870 | } |
| 3870 | 3871 | ||
| 3872 | static int only_32bit_dma; | ||
| 3873 | |||
| 3871 | static int __devinit skge_probe(struct pci_dev *pdev, | 3874 | static int __devinit skge_probe(struct pci_dev *pdev, |
| 3872 | const struct pci_device_id *ent) | 3875 | const struct pci_device_id *ent) |
| 3873 | { | 3876 | { |
| @@ -3889,7 +3892,7 @@ static int __devinit skge_probe(struct pci_dev *pdev, | |||
| 3889 | 3892 | ||
| 3890 | pci_set_master(pdev); | 3893 | pci_set_master(pdev); |
| 3891 | 3894 | ||
| 3892 | if (!pci_set_dma_mask(pdev, DMA_BIT_MASK(64))) { | 3895 | if (!only_32bit_dma && !pci_set_dma_mask(pdev, DMA_BIT_MASK(64))) { |
| 3893 | using_dac = 1; | 3896 | using_dac = 1; |
| 3894 | err = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(64)); | 3897 | err = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(64)); |
| 3895 | } else if (!(err = pci_set_dma_mask(pdev, DMA_BIT_MASK(32)))) { | 3898 | } else if (!(err = pci_set_dma_mask(pdev, DMA_BIT_MASK(32)))) { |
| @@ -4147,8 +4150,21 @@ static struct pci_driver skge_driver = { | |||
| 4147 | .shutdown = skge_shutdown, | 4150 | .shutdown = skge_shutdown, |
| 4148 | }; | 4151 | }; |
| 4149 | 4152 | ||
| 4153 | static struct dmi_system_id skge_32bit_dma_boards[] = { | ||
| 4154 | { | ||
| 4155 | .ident = "Gigabyte nForce boards", | ||
| 4156 | .matches = { | ||
| 4157 | DMI_MATCH(DMI_BOARD_VENDOR, "Gigabyte Technology Co"), | ||
| 4158 | DMI_MATCH(DMI_BOARD_NAME, "nForce"), | ||
| 4159 | }, | ||
| 4160 | }, | ||
| 4161 | {} | ||
| 4162 | }; | ||
| 4163 | |||
| 4150 | static int __init skge_init_module(void) | 4164 | static int __init skge_init_module(void) |
| 4151 | { | 4165 | { |
| 4166 | if (dmi_check_system(skge_32bit_dma_boards)) | ||
| 4167 | only_32bit_dma = 1; | ||
| 4152 | skge_debug_init(); | 4168 | skge_debug_init(); |
| 4153 | return pci_register_driver(&skge_driver); | 4169 | return pci_register_driver(&skge_driver); |
| 4154 | } | 4170 | } |
diff --git a/drivers/net/wireless/ath/ath9k/ani.c b/drivers/net/wireless/ath/ath9k/ani.c index cc648b6ae31c..a3d95cca8f0c 100644 --- a/drivers/net/wireless/ath/ath9k/ani.c +++ b/drivers/net/wireless/ath/ath9k/ani.c | |||
| @@ -543,7 +543,7 @@ static u8 ath9k_hw_chan_2_clockrate_mhz(struct ath_hw *ah) | |||
| 543 | if (conf_is_ht40(conf)) | 543 | if (conf_is_ht40(conf)) |
| 544 | return clockrate * 2; | 544 | return clockrate * 2; |
| 545 | 545 | ||
| 546 | return clockrate * 2; | 546 | return clockrate; |
| 547 | } | 547 | } |
| 548 | 548 | ||
| 549 | static int32_t ath9k_hw_ani_get_listen_time(struct ath_hw *ah) | 549 | static int32_t ath9k_hw_ani_get_listen_time(struct ath_hw *ah) |
diff --git a/include/net/bluetooth/bluetooth.h b/include/net/bluetooth/bluetooth.h index 27a902d9b3a9..30fce0128dd7 100644 --- a/include/net/bluetooth/bluetooth.h +++ b/include/net/bluetooth/bluetooth.h | |||
| @@ -161,12 +161,30 @@ static inline struct sk_buff *bt_skb_send_alloc(struct sock *sk, unsigned long l | |||
| 161 | { | 161 | { |
| 162 | struct sk_buff *skb; | 162 | struct sk_buff *skb; |
| 163 | 163 | ||
| 164 | release_sock(sk); | ||
| 164 | if ((skb = sock_alloc_send_skb(sk, len + BT_SKB_RESERVE, nb, err))) { | 165 | if ((skb = sock_alloc_send_skb(sk, len + BT_SKB_RESERVE, nb, err))) { |
| 165 | skb_reserve(skb, BT_SKB_RESERVE); | 166 | skb_reserve(skb, BT_SKB_RESERVE); |
| 166 | bt_cb(skb)->incoming = 0; | 167 | bt_cb(skb)->incoming = 0; |
| 167 | } | 168 | } |
| 169 | lock_sock(sk); | ||
| 170 | |||
| 171 | if (!skb && *err) | ||
| 172 | return NULL; | ||
| 173 | |||
| 174 | *err = sock_error(sk); | ||
| 175 | if (*err) | ||
| 176 | goto out; | ||
| 177 | |||
| 178 | if (sk->sk_shutdown) { | ||
| 179 | *err = -ECONNRESET; | ||
| 180 | goto out; | ||
| 181 | } | ||
| 168 | 182 | ||
| 169 | return skb; | 183 | return skb; |
| 184 | |||
| 185 | out: | ||
| 186 | kfree_skb(skb); | ||
| 187 | return NULL; | ||
| 170 | } | 188 | } |
| 171 | 189 | ||
| 172 | int bt_err(__u16 code); | 190 | int bt_err(__u16 code); |
diff --git a/net/bluetooth/l2cap.c b/net/bluetooth/l2cap.c index fadf26b4ed7c..0b54b7dd8401 100644 --- a/net/bluetooth/l2cap.c +++ b/net/bluetooth/l2cap.c | |||
| @@ -1441,33 +1441,23 @@ static inline void l2cap_do_send(struct sock *sk, struct sk_buff *skb) | |||
| 1441 | 1441 | ||
| 1442 | static void l2cap_streaming_send(struct sock *sk) | 1442 | static void l2cap_streaming_send(struct sock *sk) |
| 1443 | { | 1443 | { |
| 1444 | struct sk_buff *skb, *tx_skb; | 1444 | struct sk_buff *skb; |
| 1445 | struct l2cap_pinfo *pi = l2cap_pi(sk); | 1445 | struct l2cap_pinfo *pi = l2cap_pi(sk); |
| 1446 | u16 control, fcs; | 1446 | u16 control, fcs; |
| 1447 | 1447 | ||
| 1448 | while ((skb = sk->sk_send_head)) { | 1448 | while ((skb = skb_dequeue(TX_QUEUE(sk)))) { |
| 1449 | tx_skb = skb_clone(skb, GFP_ATOMIC); | 1449 | control = get_unaligned_le16(skb->data + L2CAP_HDR_SIZE); |
| 1450 | |||
| 1451 | control = get_unaligned_le16(tx_skb->data + L2CAP_HDR_SIZE); | ||
| 1452 | control |= pi->next_tx_seq << L2CAP_CTRL_TXSEQ_SHIFT; | 1450 | control |= pi->next_tx_seq << L2CAP_CTRL_TXSEQ_SHIFT; |
| 1453 | put_unaligned_le16(control, tx_skb->data + L2CAP_HDR_SIZE); | 1451 | put_unaligned_le16(control, skb->data + L2CAP_HDR_SIZE); |
| 1454 | 1452 | ||
| 1455 | if (pi->fcs == L2CAP_FCS_CRC16) { | 1453 | if (pi->fcs == L2CAP_FCS_CRC16) { |
| 1456 | fcs = crc16(0, (u8 *)tx_skb->data, tx_skb->len - 2); | 1454 | fcs = crc16(0, (u8 *)skb->data, skb->len - 2); |
| 1457 | put_unaligned_le16(fcs, tx_skb->data + tx_skb->len - 2); | 1455 | put_unaligned_le16(fcs, skb->data + skb->len - 2); |
| 1458 | } | 1456 | } |
| 1459 | 1457 | ||
| 1460 | l2cap_do_send(sk, tx_skb); | 1458 | l2cap_do_send(sk, skb); |
| 1461 | 1459 | ||
| 1462 | pi->next_tx_seq = (pi->next_tx_seq + 1) % 64; | 1460 | pi->next_tx_seq = (pi->next_tx_seq + 1) % 64; |
| 1463 | |||
| 1464 | if (skb_queue_is_last(TX_QUEUE(sk), skb)) | ||
| 1465 | sk->sk_send_head = NULL; | ||
| 1466 | else | ||
| 1467 | sk->sk_send_head = skb_queue_next(TX_QUEUE(sk), skb); | ||
| 1468 | |||
| 1469 | skb = skb_dequeue(TX_QUEUE(sk)); | ||
| 1470 | kfree_skb(skb); | ||
| 1471 | } | 1461 | } |
| 1472 | } | 1462 | } |
| 1473 | 1463 | ||
| @@ -1960,6 +1950,11 @@ static int l2cap_sock_setsockopt_old(struct socket *sock, int optname, char __us | |||
| 1960 | 1950 | ||
| 1961 | switch (optname) { | 1951 | switch (optname) { |
| 1962 | case L2CAP_OPTIONS: | 1952 | case L2CAP_OPTIONS: |
| 1953 | if (sk->sk_state == BT_CONNECTED) { | ||
| 1954 | err = -EINVAL; | ||
| 1955 | break; | ||
| 1956 | } | ||
| 1957 | |||
| 1963 | opts.imtu = l2cap_pi(sk)->imtu; | 1958 | opts.imtu = l2cap_pi(sk)->imtu; |
| 1964 | opts.omtu = l2cap_pi(sk)->omtu; | 1959 | opts.omtu = l2cap_pi(sk)->omtu; |
| 1965 | opts.flush_to = l2cap_pi(sk)->flush_to; | 1960 | opts.flush_to = l2cap_pi(sk)->flush_to; |
| @@ -2771,10 +2766,10 @@ static int l2cap_parse_conf_rsp(struct sock *sk, void *rsp, int len, void *data, | |||
| 2771 | case L2CAP_CONF_MTU: | 2766 | case L2CAP_CONF_MTU: |
| 2772 | if (val < L2CAP_DEFAULT_MIN_MTU) { | 2767 | if (val < L2CAP_DEFAULT_MIN_MTU) { |
| 2773 | *result = L2CAP_CONF_UNACCEPT; | 2768 | *result = L2CAP_CONF_UNACCEPT; |
| 2774 | pi->omtu = L2CAP_DEFAULT_MIN_MTU; | 2769 | pi->imtu = L2CAP_DEFAULT_MIN_MTU; |
| 2775 | } else | 2770 | } else |
| 2776 | pi->omtu = val; | 2771 | pi->imtu = val; |
| 2777 | l2cap_add_conf_opt(&ptr, L2CAP_CONF_MTU, 2, pi->omtu); | 2772 | l2cap_add_conf_opt(&ptr, L2CAP_CONF_MTU, 2, pi->imtu); |
| 2778 | break; | 2773 | break; |
| 2779 | 2774 | ||
| 2780 | case L2CAP_CONF_FLUSH_TO: | 2775 | case L2CAP_CONF_FLUSH_TO: |
| @@ -3071,6 +3066,17 @@ static inline int l2cap_connect_rsp(struct l2cap_conn *conn, struct l2cap_cmd_hd | |||
| 3071 | return 0; | 3066 | return 0; |
| 3072 | } | 3067 | } |
| 3073 | 3068 | ||
| 3069 | static inline void set_default_fcs(struct l2cap_pinfo *pi) | ||
| 3070 | { | ||
| 3071 | /* FCS is enabled only in ERTM or streaming mode, if one or both | ||
| 3072 | * sides request it. | ||
| 3073 | */ | ||
| 3074 | if (pi->mode != L2CAP_MODE_ERTM && pi->mode != L2CAP_MODE_STREAMING) | ||
| 3075 | pi->fcs = L2CAP_FCS_NONE; | ||
| 3076 | else if (!(pi->conf_state & L2CAP_CONF_NO_FCS_RECV)) | ||
| 3077 | pi->fcs = L2CAP_FCS_CRC16; | ||
| 3078 | } | ||
| 3079 | |||
| 3074 | static inline int l2cap_config_req(struct l2cap_conn *conn, struct l2cap_cmd_hdr *cmd, u16 cmd_len, u8 *data) | 3080 | static inline int l2cap_config_req(struct l2cap_conn *conn, struct l2cap_cmd_hdr *cmd, u16 cmd_len, u8 *data) |
| 3075 | { | 3081 | { |
| 3076 | struct l2cap_conf_req *req = (struct l2cap_conf_req *) data; | 3082 | struct l2cap_conf_req *req = (struct l2cap_conf_req *) data; |
| @@ -3088,14 +3094,8 @@ static inline int l2cap_config_req(struct l2cap_conn *conn, struct l2cap_cmd_hdr | |||
| 3088 | if (!sk) | 3094 | if (!sk) |
| 3089 | return -ENOENT; | 3095 | return -ENOENT; |
| 3090 | 3096 | ||
| 3091 | if (sk->sk_state != BT_CONFIG) { | 3097 | if (sk->sk_state == BT_DISCONN) |
| 3092 | struct l2cap_cmd_rej rej; | ||
| 3093 | |||
| 3094 | rej.reason = cpu_to_le16(0x0002); | ||
| 3095 | l2cap_send_cmd(conn, cmd->ident, L2CAP_COMMAND_REJ, | ||
| 3096 | sizeof(rej), &rej); | ||
| 3097 | goto unlock; | 3098 | goto unlock; |
| 3098 | } | ||
| 3099 | 3099 | ||
| 3100 | /* Reject if config buffer is too small. */ | 3100 | /* Reject if config buffer is too small. */ |
| 3101 | len = cmd_len - sizeof(*req); | 3101 | len = cmd_len - sizeof(*req); |
| @@ -3135,9 +3135,7 @@ static inline int l2cap_config_req(struct l2cap_conn *conn, struct l2cap_cmd_hdr | |||
| 3135 | goto unlock; | 3135 | goto unlock; |
| 3136 | 3136 | ||
| 3137 | if (l2cap_pi(sk)->conf_state & L2CAP_CONF_INPUT_DONE) { | 3137 | if (l2cap_pi(sk)->conf_state & L2CAP_CONF_INPUT_DONE) { |
| 3138 | if (!(l2cap_pi(sk)->conf_state & L2CAP_CONF_NO_FCS_RECV) || | 3138 | set_default_fcs(l2cap_pi(sk)); |
| 3139 | l2cap_pi(sk)->fcs != L2CAP_FCS_NONE) | ||
| 3140 | l2cap_pi(sk)->fcs = L2CAP_FCS_CRC16; | ||
| 3141 | 3139 | ||
| 3142 | sk->sk_state = BT_CONNECTED; | 3140 | sk->sk_state = BT_CONNECTED; |
| 3143 | 3141 | ||
| @@ -3225,9 +3223,7 @@ static inline int l2cap_config_rsp(struct l2cap_conn *conn, struct l2cap_cmd_hdr | |||
| 3225 | l2cap_pi(sk)->conf_state |= L2CAP_CONF_INPUT_DONE; | 3223 | l2cap_pi(sk)->conf_state |= L2CAP_CONF_INPUT_DONE; |
| 3226 | 3224 | ||
| 3227 | if (l2cap_pi(sk)->conf_state & L2CAP_CONF_OUTPUT_DONE) { | 3225 | if (l2cap_pi(sk)->conf_state & L2CAP_CONF_OUTPUT_DONE) { |
| 3228 | if (!(l2cap_pi(sk)->conf_state & L2CAP_CONF_NO_FCS_RECV) || | 3226 | set_default_fcs(l2cap_pi(sk)); |
| 3229 | l2cap_pi(sk)->fcs != L2CAP_FCS_NONE) | ||
| 3230 | l2cap_pi(sk)->fcs = L2CAP_FCS_CRC16; | ||
| 3231 | 3227 | ||
| 3232 | sk->sk_state = BT_CONNECTED; | 3228 | sk->sk_state = BT_CONNECTED; |
| 3233 | l2cap_pi(sk)->next_tx_seq = 0; | 3229 | l2cap_pi(sk)->next_tx_seq = 0; |
diff --git a/net/bluetooth/rfcomm/sock.c b/net/bluetooth/rfcomm/sock.c index 44a623275951..194b3a04cfd3 100644 --- a/net/bluetooth/rfcomm/sock.c +++ b/net/bluetooth/rfcomm/sock.c | |||
| @@ -82,11 +82,14 @@ static void rfcomm_sk_data_ready(struct rfcomm_dlc *d, struct sk_buff *skb) | |||
| 82 | static void rfcomm_sk_state_change(struct rfcomm_dlc *d, int err) | 82 | static void rfcomm_sk_state_change(struct rfcomm_dlc *d, int err) |
| 83 | { | 83 | { |
| 84 | struct sock *sk = d->owner, *parent; | 84 | struct sock *sk = d->owner, *parent; |
| 85 | unsigned long flags; | ||
| 86 | |||
| 85 | if (!sk) | 87 | if (!sk) |
| 86 | return; | 88 | return; |
| 87 | 89 | ||
| 88 | BT_DBG("dlc %p state %ld err %d", d, d->state, err); | 90 | BT_DBG("dlc %p state %ld err %d", d, d->state, err); |
| 89 | 91 | ||
| 92 | local_irq_save(flags); | ||
| 90 | bh_lock_sock(sk); | 93 | bh_lock_sock(sk); |
| 91 | 94 | ||
| 92 | if (err) | 95 | if (err) |
| @@ -108,6 +111,7 @@ static void rfcomm_sk_state_change(struct rfcomm_dlc *d, int err) | |||
| 108 | } | 111 | } |
| 109 | 112 | ||
| 110 | bh_unlock_sock(sk); | 113 | bh_unlock_sock(sk); |
| 114 | local_irq_restore(flags); | ||
| 111 | 115 | ||
| 112 | if (parent && sock_flag(sk, SOCK_ZAPPED)) { | 116 | if (parent && sock_flag(sk, SOCK_ZAPPED)) { |
| 113 | /* We have to drop DLC lock here, otherwise | 117 | /* We have to drop DLC lock here, otherwise |
diff --git a/net/caif/caif_socket.c b/net/caif/caif_socket.c index 8ce904786116..4bf28f25f368 100644 --- a/net/caif/caif_socket.c +++ b/net/caif/caif_socket.c | |||
| @@ -827,6 +827,7 @@ static int caif_connect(struct socket *sock, struct sockaddr *uaddr, | |||
| 827 | long timeo; | 827 | long timeo; |
| 828 | int err; | 828 | int err; |
| 829 | int ifindex, headroom, tailroom; | 829 | int ifindex, headroom, tailroom; |
| 830 | unsigned int mtu; | ||
| 830 | struct net_device *dev; | 831 | struct net_device *dev; |
| 831 | 832 | ||
| 832 | lock_sock(sk); | 833 | lock_sock(sk); |
| @@ -896,15 +897,23 @@ static int caif_connect(struct socket *sock, struct sockaddr *uaddr, | |||
| 896 | cf_sk->sk.sk_state = CAIF_DISCONNECTED; | 897 | cf_sk->sk.sk_state = CAIF_DISCONNECTED; |
| 897 | goto out; | 898 | goto out; |
| 898 | } | 899 | } |
| 899 | dev = dev_get_by_index(sock_net(sk), ifindex); | 900 | |
| 901 | err = -ENODEV; | ||
| 902 | rcu_read_lock(); | ||
| 903 | dev = dev_get_by_index_rcu(sock_net(sk), ifindex); | ||
| 904 | if (!dev) { | ||
| 905 | rcu_read_unlock(); | ||
| 906 | goto out; | ||
| 907 | } | ||
| 900 | cf_sk->headroom = LL_RESERVED_SPACE_EXTRA(dev, headroom); | 908 | cf_sk->headroom = LL_RESERVED_SPACE_EXTRA(dev, headroom); |
| 909 | mtu = dev->mtu; | ||
| 910 | rcu_read_unlock(); | ||
| 911 | |||
| 901 | cf_sk->tailroom = tailroom; | 912 | cf_sk->tailroom = tailroom; |
| 902 | cf_sk->maxframe = dev->mtu - (headroom + tailroom); | 913 | cf_sk->maxframe = mtu - (headroom + tailroom); |
| 903 | dev_put(dev); | ||
| 904 | if (cf_sk->maxframe < 1) { | 914 | if (cf_sk->maxframe < 1) { |
| 905 | pr_warning("CAIF: %s(): CAIF Interface MTU too small (%d)\n", | 915 | pr_warning("CAIF: %s(): CAIF Interface MTU too small (%u)\n", |
| 906 | __func__, dev->mtu); | 916 | __func__, mtu); |
| 907 | err = -ENODEV; | ||
| 908 | goto out; | 917 | goto out; |
| 909 | } | 918 | } |
| 910 | 919 | ||
diff --git a/net/core/ethtool.c b/net/core/ethtool.c index 7a85367b3c2f..4016ac6bdd5e 100644 --- a/net/core/ethtool.c +++ b/net/core/ethtool.c | |||
| @@ -348,7 +348,7 @@ static noinline_for_stack int ethtool_get_rxnfc(struct net_device *dev, | |||
| 348 | if (info.cmd == ETHTOOL_GRXCLSRLALL) { | 348 | if (info.cmd == ETHTOOL_GRXCLSRLALL) { |
| 349 | if (info.rule_cnt > 0) { | 349 | if (info.rule_cnt > 0) { |
| 350 | if (info.rule_cnt <= KMALLOC_MAX_SIZE / sizeof(u32)) | 350 | if (info.rule_cnt <= KMALLOC_MAX_SIZE / sizeof(u32)) |
| 351 | rule_buf = kmalloc(info.rule_cnt * sizeof(u32), | 351 | rule_buf = kzalloc(info.rule_cnt * sizeof(u32), |
| 352 | GFP_USER); | 352 | GFP_USER); |
| 353 | if (!rule_buf) | 353 | if (!rule_buf) |
| 354 | return -ENOMEM; | 354 | return -ENOMEM; |
diff --git a/net/core/stream.c b/net/core/stream.c index d959e0f41528..f5df85dcd20b 100644 --- a/net/core/stream.c +++ b/net/core/stream.c | |||
| @@ -141,10 +141,10 @@ int sk_stream_wait_memory(struct sock *sk, long *timeo_p) | |||
| 141 | 141 | ||
| 142 | set_bit(SOCK_NOSPACE, &sk->sk_socket->flags); | 142 | set_bit(SOCK_NOSPACE, &sk->sk_socket->flags); |
| 143 | sk->sk_write_pending++; | 143 | sk->sk_write_pending++; |
| 144 | sk_wait_event(sk, ¤t_timeo, !sk->sk_err && | 144 | sk_wait_event(sk, ¤t_timeo, sk->sk_err || |
| 145 | !(sk->sk_shutdown & SEND_SHUTDOWN) && | 145 | (sk->sk_shutdown & SEND_SHUTDOWN) || |
| 146 | sk_stream_memory_free(sk) && | 146 | (sk_stream_memory_free(sk) && |
| 147 | vm_wait); | 147 | !vm_wait)); |
| 148 | sk->sk_write_pending--; | 148 | sk->sk_write_pending--; |
| 149 | 149 | ||
| 150 | if (vm_wait) { | 150 | if (vm_wait) { |
diff --git a/net/ipv4/Kconfig b/net/ipv4/Kconfig index 72380a30d1c8..7cd7760144f7 100644 --- a/net/ipv4/Kconfig +++ b/net/ipv4/Kconfig | |||
| @@ -413,7 +413,7 @@ config INET_XFRM_MODE_BEET | |||
| 413 | If unsure, say Y. | 413 | If unsure, say Y. |
| 414 | 414 | ||
| 415 | config INET_LRO | 415 | config INET_LRO |
| 416 | bool "Large Receive Offload (ipv4/tcp)" | 416 | tristate "Large Receive Offload (ipv4/tcp)" |
| 417 | default y | 417 | default y |
| 418 | ---help--- | 418 | ---help--- |
| 419 | Support for Large Receive Offload (ipv4/tcp). | 419 | Support for Large Receive Offload (ipv4/tcp). |
diff --git a/net/ipv4/igmp.c b/net/ipv4/igmp.c index 1fdcacd36ce7..2a4bb76f2132 100644 --- a/net/ipv4/igmp.c +++ b/net/ipv4/igmp.c | |||
| @@ -834,7 +834,7 @@ static void igmp_heard_query(struct in_device *in_dev, struct sk_buff *skb, | |||
| 834 | int mark = 0; | 834 | int mark = 0; |
| 835 | 835 | ||
| 836 | 836 | ||
| 837 | if (len == 8 || IGMP_V2_SEEN(in_dev)) { | 837 | if (len == 8) { |
| 838 | if (ih->code == 0) { | 838 | if (ih->code == 0) { |
| 839 | /* Alas, old v1 router presents here. */ | 839 | /* Alas, old v1 router presents here. */ |
| 840 | 840 | ||
| @@ -856,6 +856,18 @@ static void igmp_heard_query(struct in_device *in_dev, struct sk_buff *skb, | |||
| 856 | igmpv3_clear_delrec(in_dev); | 856 | igmpv3_clear_delrec(in_dev); |
| 857 | } else if (len < 12) { | 857 | } else if (len < 12) { |
| 858 | return; /* ignore bogus packet; freed by caller */ | 858 | return; /* ignore bogus packet; freed by caller */ |
| 859 | } else if (IGMP_V1_SEEN(in_dev)) { | ||
| 860 | /* This is a v3 query with v1 queriers present */ | ||
| 861 | max_delay = IGMP_Query_Response_Interval; | ||
| 862 | group = 0; | ||
| 863 | } else if (IGMP_V2_SEEN(in_dev)) { | ||
| 864 | /* this is a v3 query with v2 queriers present; | ||
| 865 | * Interpretation of the max_delay code is problematic here. | ||
| 866 | * A real v2 host would use ih_code directly, while v3 has a | ||
| 867 | * different encoding. We use the v3 encoding as more likely | ||
| 868 | * to be intended in a v3 query. | ||
| 869 | */ | ||
| 870 | max_delay = IGMPV3_MRC(ih3->code)*(HZ/IGMP_TIMER_SCALE); | ||
| 859 | } else { /* v3 */ | 871 | } else { /* v3 */ |
| 860 | if (!pskb_may_pull(skb, sizeof(struct igmpv3_query))) | 872 | if (!pskb_may_pull(skb, sizeof(struct igmpv3_query))) |
| 861 | return; | 873 | return; |
diff --git a/net/ipv6/route.c b/net/ipv6/route.c index 8323136bdc54..a275c6e1e25c 100644 --- a/net/ipv6/route.c +++ b/net/ipv6/route.c | |||
| @@ -1556,14 +1556,13 @@ out: | |||
| 1556 | * i.e. Path MTU discovery | 1556 | * i.e. Path MTU discovery |
| 1557 | */ | 1557 | */ |
| 1558 | 1558 | ||
| 1559 | void rt6_pmtu_discovery(struct in6_addr *daddr, struct in6_addr *saddr, | 1559 | static void rt6_do_pmtu_disc(struct in6_addr *daddr, struct in6_addr *saddr, |
| 1560 | struct net_device *dev, u32 pmtu) | 1560 | struct net *net, u32 pmtu, int ifindex) |
| 1561 | { | 1561 | { |
| 1562 | struct rt6_info *rt, *nrt; | 1562 | struct rt6_info *rt, *nrt; |
| 1563 | struct net *net = dev_net(dev); | ||
| 1564 | int allfrag = 0; | 1563 | int allfrag = 0; |
| 1565 | 1564 | ||
| 1566 | rt = rt6_lookup(net, daddr, saddr, dev->ifindex, 0); | 1565 | rt = rt6_lookup(net, daddr, saddr, ifindex, 0); |
| 1567 | if (rt == NULL) | 1566 | if (rt == NULL) |
| 1568 | return; | 1567 | return; |
| 1569 | 1568 | ||
| @@ -1631,6 +1630,27 @@ out: | |||
| 1631 | dst_release(&rt->dst); | 1630 | dst_release(&rt->dst); |
| 1632 | } | 1631 | } |
| 1633 | 1632 | ||
| 1633 | void rt6_pmtu_discovery(struct in6_addr *daddr, struct in6_addr *saddr, | ||
| 1634 | struct net_device *dev, u32 pmtu) | ||
| 1635 | { | ||
| 1636 | struct net *net = dev_net(dev); | ||
| 1637 | |||
| 1638 | /* | ||
| 1639 | * RFC 1981 states that a node "MUST reduce the size of the packets it | ||
| 1640 | * is sending along the path" that caused the Packet Too Big message. | ||
| 1641 | * Since it's not possible in the general case to determine which | ||
| 1642 | * interface was used to send the original packet, we update the MTU | ||
| 1643 | * on the interface that will be used to send future packets. We also | ||
| 1644 | * update the MTU on the interface that received the Packet Too Big in | ||
| 1645 | * case the original packet was forced out that interface with | ||
| 1646 | * SO_BINDTODEVICE or similar. This is the next best thing to the | ||
| 1647 | * correct behaviour, which would be to update the MTU on all | ||
| 1648 | * interfaces. | ||
| 1649 | */ | ||
| 1650 | rt6_do_pmtu_disc(daddr, saddr, net, pmtu, 0); | ||
| 1651 | rt6_do_pmtu_disc(daddr, saddr, net, pmtu, dev->ifindex); | ||
| 1652 | } | ||
| 1653 | |||
| 1634 | /* | 1654 | /* |
| 1635 | * Misc support functions | 1655 | * Misc support functions |
| 1636 | */ | 1656 | */ |
diff --git a/net/mac80211/agg-tx.c b/net/mac80211/agg-tx.c index c893f236acea..8f23401832b7 100644 --- a/net/mac80211/agg-tx.c +++ b/net/mac80211/agg-tx.c | |||
| @@ -175,6 +175,8 @@ int ___ieee80211_stop_tx_ba_session(struct sta_info *sta, u16 tid, | |||
| 175 | 175 | ||
| 176 | set_bit(HT_AGG_STATE_STOPPING, &tid_tx->state); | 176 | set_bit(HT_AGG_STATE_STOPPING, &tid_tx->state); |
| 177 | 177 | ||
| 178 | del_timer_sync(&tid_tx->addba_resp_timer); | ||
| 179 | |||
| 178 | /* | 180 | /* |
| 179 | * After this packets are no longer handed right through | 181 | * After this packets are no longer handed right through |
| 180 | * to the driver but are put onto tid_tx->pending instead, | 182 | * to the driver but are put onto tid_tx->pending instead, |
diff --git a/net/mac80211/status.c b/net/mac80211/status.c index 10caec5ea8fa..34da67995d94 100644 --- a/net/mac80211/status.c +++ b/net/mac80211/status.c | |||
| @@ -377,7 +377,7 @@ void ieee80211_tx_status(struct ieee80211_hw *hw, struct sk_buff *skb) | |||
| 377 | skb2 = skb_clone(skb, GFP_ATOMIC); | 377 | skb2 = skb_clone(skb, GFP_ATOMIC); |
| 378 | if (skb2) { | 378 | if (skb2) { |
| 379 | skb2->dev = prev_dev; | 379 | skb2->dev = prev_dev; |
| 380 | netif_receive_skb(skb2); | 380 | netif_rx(skb2); |
| 381 | } | 381 | } |
| 382 | } | 382 | } |
| 383 | 383 | ||
| @@ -386,7 +386,7 @@ void ieee80211_tx_status(struct ieee80211_hw *hw, struct sk_buff *skb) | |||
| 386 | } | 386 | } |
| 387 | if (prev_dev) { | 387 | if (prev_dev) { |
| 388 | skb->dev = prev_dev; | 388 | skb->dev = prev_dev; |
| 389 | netif_receive_skb(skb); | 389 | netif_rx(skb); |
| 390 | skb = NULL; | 390 | skb = NULL; |
| 391 | } | 391 | } |
| 392 | rcu_read_unlock(); | 392 | rcu_read_unlock(); |
diff --git a/net/sched/cls_u32.c b/net/sched/cls_u32.c index 7416a5c73b2a..b0c2a82178af 100644 --- a/net/sched/cls_u32.c +++ b/net/sched/cls_u32.c | |||
| @@ -137,7 +137,7 @@ next_knode: | |||
| 137 | int toff = off + key->off + (off2 & key->offmask); | 137 | int toff = off + key->off + (off2 & key->offmask); |
| 138 | __be32 *data, _data; | 138 | __be32 *data, _data; |
| 139 | 139 | ||
| 140 | if (skb_headroom(skb) + toff < 0) | 140 | if (skb_headroom(skb) + toff > INT_MAX) |
| 141 | goto out; | 141 | goto out; |
| 142 | 142 | ||
| 143 | data = skb_header_pointer(skb, toff, 4, &_data); | 143 | data = skb_header_pointer(skb, toff, 4, &_data); |
diff --git a/net/sctp/auth.c b/net/sctp/auth.c index 86366390038a..ddbbf7c81fa1 100644 --- a/net/sctp/auth.c +++ b/net/sctp/auth.c | |||
| @@ -543,16 +543,20 @@ struct sctp_hmac *sctp_auth_asoc_get_hmac(const struct sctp_association *asoc) | |||
| 543 | id = ntohs(hmacs->hmac_ids[i]); | 543 | id = ntohs(hmacs->hmac_ids[i]); |
| 544 | 544 | ||
| 545 | /* Check the id is in the supported range */ | 545 | /* Check the id is in the supported range */ |
| 546 | if (id > SCTP_AUTH_HMAC_ID_MAX) | 546 | if (id > SCTP_AUTH_HMAC_ID_MAX) { |
| 547 | id = 0; | ||
| 547 | continue; | 548 | continue; |
| 549 | } | ||
| 548 | 550 | ||
| 549 | /* See is we support the id. Supported IDs have name and | 551 | /* See is we support the id. Supported IDs have name and |
| 550 | * length fields set, so that we can allocated and use | 552 | * length fields set, so that we can allocated and use |
| 551 | * them. We can safely just check for name, for without the | 553 | * them. We can safely just check for name, for without the |
| 552 | * name, we can't allocate the TFM. | 554 | * name, we can't allocate the TFM. |
| 553 | */ | 555 | */ |
| 554 | if (!sctp_hmac_list[id].hmac_name) | 556 | if (!sctp_hmac_list[id].hmac_name) { |
| 557 | id = 0; | ||
| 555 | continue; | 558 | continue; |
| 559 | } | ||
| 556 | 560 | ||
| 557 | break; | 561 | break; |
| 558 | } | 562 | } |
diff --git a/net/sctp/socket.c b/net/sctp/socket.c index ca44917872d2..fbb70770ad05 100644 --- a/net/sctp/socket.c +++ b/net/sctp/socket.c | |||
| @@ -916,6 +916,11 @@ SCTP_STATIC int sctp_setsockopt_bindx(struct sock* sk, | |||
| 916 | /* Walk through the addrs buffer and count the number of addresses. */ | 916 | /* Walk through the addrs buffer and count the number of addresses. */ |
| 917 | addr_buf = kaddrs; | 917 | addr_buf = kaddrs; |
| 918 | while (walk_size < addrs_size) { | 918 | while (walk_size < addrs_size) { |
| 919 | if (walk_size + sizeof(sa_family_t) > addrs_size) { | ||
| 920 | kfree(kaddrs); | ||
| 921 | return -EINVAL; | ||
| 922 | } | ||
| 923 | |||
| 919 | sa_addr = (struct sockaddr *)addr_buf; | 924 | sa_addr = (struct sockaddr *)addr_buf; |
| 920 | af = sctp_get_af_specific(sa_addr->sa_family); | 925 | af = sctp_get_af_specific(sa_addr->sa_family); |
| 921 | 926 | ||
| @@ -1002,9 +1007,13 @@ static int __sctp_connect(struct sock* sk, | |||
| 1002 | /* Walk through the addrs buffer and count the number of addresses. */ | 1007 | /* Walk through the addrs buffer and count the number of addresses. */ |
| 1003 | addr_buf = kaddrs; | 1008 | addr_buf = kaddrs; |
| 1004 | while (walk_size < addrs_size) { | 1009 | while (walk_size < addrs_size) { |
| 1010 | if (walk_size + sizeof(sa_family_t) > addrs_size) { | ||
| 1011 | err = -EINVAL; | ||
| 1012 | goto out_free; | ||
| 1013 | } | ||
| 1014 | |||
| 1005 | sa_addr = (union sctp_addr *)addr_buf; | 1015 | sa_addr = (union sctp_addr *)addr_buf; |
| 1006 | af = sctp_get_af_specific(sa_addr->sa.sa_family); | 1016 | af = sctp_get_af_specific(sa_addr->sa.sa_family); |
| 1007 | port = ntohs(sa_addr->v4.sin_port); | ||
| 1008 | 1017 | ||
| 1009 | /* If the address family is not supported or if this address | 1018 | /* If the address family is not supported or if this address |
| 1010 | * causes the address buffer to overflow return EINVAL. | 1019 | * causes the address buffer to overflow return EINVAL. |
| @@ -1014,6 +1023,8 @@ static int __sctp_connect(struct sock* sk, | |||
| 1014 | goto out_free; | 1023 | goto out_free; |
| 1015 | } | 1024 | } |
| 1016 | 1025 | ||
| 1026 | port = ntohs(sa_addr->v4.sin_port); | ||
| 1027 | |||
| 1017 | /* Save current address so we can work with it */ | 1028 | /* Save current address so we can work with it */ |
| 1018 | memcpy(&to, sa_addr, af->sockaddr_len); | 1029 | memcpy(&to, sa_addr, af->sockaddr_len); |
| 1019 | 1030 | ||
