projects/linux·commit f6cec0ae

Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6

f6cec0ae · Linus Torvalds <[email protected]> · 2010-08-09 21:05:52 -07:00

* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6: (59 commits)
  igbvf.txt: Add igbvf Documentation
  igb.txt: Add igb documentation
  e100/e1000*/igb*/ixgb*: Add missing read memory barrier
  ixgbe: fix build error with FCOE_CONFIG without DCB_CONFIG
  netxen: protect tx timeout recovery by rtnl lock
  isdn: gigaset: use after free
  isdn: gigaset: add missing unlock
  solos-pci: Fix race condition in tasklet RX handling
  pkt_sched: Fix sch_sfq vs tcf_bind_filter oops
  net: disable preemption before call smp_processor_id()
  tcp: no md5sig option size check bug
  iwlwifi: fix locking assertions
  iwlwifi: fix TX tracer
  isdn: fix information leak
  net: Fix napi_gro_frags vs netpoll path
  usbnet: remove noisy and hardly useful printk
  rtl8180: avoid potential NULL deref in rtl8180_beacon_work
  ath9k: Remove myself from the MAINTAINERS list
  libertas: scan before assocation if no BSSID was given
  libertas: fix association with some APs by using extended rates
  ...
Commit
f6cec0ae58c17522a7bc4e2f39dae19f199ab534
Parents
0fcf12d5 · c4e9b56e

Merge commit. Changes below are compared with the first parent: 0fcf12d5.

Changes

80 files changed · +1311 −450

FileStatusAddDelContent
Documentation/networking/igb.txtadded+132−0View file
Documentation/networking/igbvf.txtadded+78−0View file
MAINTAINERSmodified+0−1View file
drivers/atm/solos-pci.cmodified+6−1View file
drivers/char/pcmcia/ipwireless/network.cmodified+1−1View file
drivers/isdn/gigaset/bas-gigaset.cmodified+4−2View file
drivers/isdn/gigaset/capi.cmodified+1−0View file
drivers/isdn/sc/ioctl.cmodified+5−5View file
drivers/net/cxgb3/cxgb3_main.cmodified+13−12View file
drivers/net/cxgb4vf/cxgb4vf_main.cmodified+16−15View file
drivers/net/davinci_emac.cmodified+1−1View file
drivers/net/e100.cmodified+2−0View file
drivers/net/e1000/e1000_main.cmodified+3−0View file
drivers/net/e1000e/netdev.cmodified+4−0View file
drivers/net/enic/enic_main.cmodified+2−15View file
drivers/net/igb/igb_main.cmodified+2−0View file
drivers/net/igbvf/netdev.cmodified+2−0View file
drivers/net/ixgb/ixgb_main.cmodified+2−0View file
drivers/net/ixgbe/ixgbe_main.cmodified+11−4View file
drivers/net/ixgbevf/ixgbevf_main.cmodified+2−0View file
drivers/net/netxen/netxen_nic_main.cmodified+7−8View file
drivers/net/ppp_async.cmodified+3−3View file
drivers/net/ppp_synctty.cmodified+3−3View file
drivers/net/pppoe.cmodified+2−2View file
drivers/net/usb/usbnet.cmodified+0−1View file
drivers/net/via-velocity.cmodified+2−2View file
drivers/net/virtio_net.cmodified+14−0View file
drivers/net/wireless/ath/ath9k/ar9002_calib.cmodified+27−16View file
drivers/net/wireless/ath/ath9k/ar9003_calib.cmodified+14−4View file
drivers/net/wireless/ath/ath9k/ar9003_eeprom.cmodified+381−7View file
drivers/net/wireless/ath/ath9k/ar9003_paprd.cmodified+9−8View file
drivers/net/wireless/ath/ath9k/ar9003_phy.cmodified+5−1View file
drivers/net/wireless/ath/ath9k/ath9k.hmodified+2−1View file
drivers/net/wireless/ath/ath9k/calib.cmodified+64−54View file
drivers/net/wireless/ath/ath9k/calib.hmodified+4−4View file
drivers/net/wireless/ath/ath9k/htc.hmodified+2−0View file
drivers/net/wireless/ath/ath9k/htc_drv_main.cmodified+6−4View file
drivers/net/wireless/ath/ath9k/hw.cmodified+14−11View file
drivers/net/wireless/ath/ath9k/hw.hmodified+16−9View file
drivers/net/wireless/ath/ath9k/main.cmodified+60−44View file
drivers/net/wireless/ath/ath9k/recv.cmodified+5−5View file
drivers/net/wireless/ath/ath9k/xmit.cmodified+9−27View file
drivers/net/wireless/ipw2x00/ipw2100.cmodified+4−0View file
drivers/net/wireless/iwlwifi/iwl-agn-debugfs.cmodified+1−1View file
drivers/net/wireless/iwlwifi/iwl-agn-lib.cmodified+1−1View file
drivers/net/wireless/iwlwifi/iwl-agn-rs.cmodified+7−4View file
drivers/net/wireless/iwlwifi/iwl-agn-tx.cmodified+9−2View file
drivers/net/wireless/iwlwifi/iwl-core.cmodified+5−1View file
drivers/net/wireless/iwlwifi/iwl-debug.hmodified+1−1View file
drivers/net/wireless/iwlwifi/iwl-devtrace.hmodified+1−1View file
drivers/net/wireless/iwlwifi/iwl-scan.cmodified+1−1View file
drivers/net/wireless/iwlwifi/iwl-sta.cmodified+3−3View file
drivers/net/wireless/libertas/cfg.cmodified+164−50View file
drivers/net/wireless/libertas/dev.hmodified+5−0View file
drivers/net/wireless/libertas/main.cmodified+1−0View file
drivers/net/wireless/p54/p54pci.cmodified+2−0View file
drivers/net/wireless/rt2x00/rt2x00pci.cmodified+10−11View file
drivers/net/wireless/rtl818x/rtl8180_dev.cmodified+2−0View file
drivers/net/wireless/wl12xx/wl1271_spi.cmodified+1−2View file
include/linux/ppp_channel.hmodified+1−1View file
include/linux/skbuff.hmodified+5−0View file
include/net/bluetooth/hci_core.hmodified+1−1View file
net/atm/pppoatm.cmodified+1−1View file
net/bluetooth/hci_core.cmodified+1−1View file
net/bluetooth/hci_sock.cmodified+3−5View file
net/bluetooth/hci_sysfs.cmodified+1−2View file
net/bluetooth/l2cap.cmodified+21−3View file
net/bluetooth/rfcomm/tty.cmodified+1−1View file
net/core/dev.cmodified+3−4View file
net/ipv4/tcp_input.cmodified+1−1View file
net/irda/irnet/irnet_ppp.cmodified+1−1View file
net/l2tp/l2tp_ppp.cmodified+4−1View file
net/mac80211/main.cmodified+2−0View file
net/mac80211/scan.cmodified+0−14View file
net/rxrpc/ar-ack.cmodified+3−0View file
net/rxrpc/ar-call.cmodified+2−4View file
net/sched/act_nat.cmodified+13−10View file
net/sched/cls_flow.cmodified+56−40View file
net/sched/cls_rsvp.hmodified+10−2View file
net/sched/sch_sfq.cmodified+27−9View file

Only the first 600 diff lines are shown. Download the complete patch.

Documentation/networking/igb.txt

View file
diff --git a/Documentation/networking/igb.txt b/Documentation/networking/igb.txt
new file mode 100644
index 0000000..ab2d718
--- /dev/null
+++ b/Documentation/networking/igb.txt
@@ -0,0 +1,132 @@
+Linux* Base Driver for Intel(R) Network Connection
+==================================================
+
+Intel Gigabit Linux driver.
+Copyright(c) 1999 - 2010 Intel Corporation.
+
+Contents
+========
+
+- Identifying Your Adapter
+- Additional Configurations
+- Support
+
+Identifying Your Adapter
+========================
+
+This driver supports all 82575, 82576 and 82580-based Intel (R) gigabit network
+connections.
+
+For specific information on how to identify your adapter, go to the Adapter &
+Driver ID Guide at:
+
+ http://support.intel.com/support/go/network/adapter/idguide.htm
+
+Command Line Parameters
+=======================
+
+The default value for each parameter is generally the recommended setting,
+unless otherwise noted.
+
+max_vfs
+-------
+Valid Range: 0-7
+Default Value: 0
+
+This parameter adds support for SR-IOV. It causes the driver to spawn up to
+max_vfs worth of virtual function.
+
+Additional Configurations
+=========================
+
+ Jumbo Frames
+ ------------
+ Jumbo Frames support is enabled by changing the MTU to a value larger than
+ the default of 1500. Use the ifconfig command to increase the MTU size.
+ For example:
+
+ ifconfig eth<x> mtu 9000 up
+
+ This setting is not saved across reboots.
+
+ Notes:
+
+ - The maximum MTU setting for Jumbo Frames is 9216. This value coincides
+ with the maximum Jumbo Frames size of 9234 bytes.
+
+ - Using Jumbo Frames at 10 or 100 Mbps may result in poor performance or
+ loss of link.
+
+ Ethtool
+ -------
+ The driver utilizes the ethtool interface for driver configuration and
+ diagnostics, as well as displaying statistical information.
+
+ http://sourceforge.net/projects/gkernel.
+
+ Enabling Wake on LAN* (WoL)
+ ---------------------------
+ WoL is configured through the Ethtool* utility.
+
+ For instructions on enabling WoL with Ethtool, refer to the Ethtool man page.
+
+ WoL will be enabled on the system during the next shut down or reboot.
+ For this driver version, in order to enable WoL, the igb driver must be
+ loaded when shutting down or rebooting the system.
+
+ Wake On LAN is only supported on port A of multi-port adapters.
+
+ Wake On LAN is not supported for the Intel(R) Gigabit VT Quad Port Server
+ Adapter.
+
+ Multiqueue
+ ----------
+ In this mode, a separate MSI-X vector is allocated for each queue and one
+ for "other" interrupts such as link status change and errors. All
+ interrupts are throttled via interrupt moderation. Interrupt moderation
+ must be used to avoid interrupt storms while the driver is processing one
+ interrupt. The moderation value should be at least as large as the expected
+ time for the driver to process an interrupt. Multiqueue is off by default.
+
+ REQUIREMENTS: MSI-X support is required for Multiqueue. If MSI-X is not
+ found, the system will fallback to MSI or to Legacy interrupts.
+
+ LRO
+ ---
+ Large Receive Offload (LRO) is a technique for increasing inbound throughput
+ of high-bandwidth network connections by reducing CPU overhead. It works by
+ aggregating multiple incoming packets from a single stream into a larger
+ buffer before they are passed higher up the networking stack, thus reducing
+ the number of packets that have to be processed. LRO combines multiple
+ Ethernet frames into a single receive in the stack, thereby potentially
+ decreasing CPU utilization for receives.
+
+ NOTE: You need to have inet_lro enabled via either the CONFIG_INET_LRO or
+ CONFIG_INET_LRO_MODULE kernel config option. Additionally, if
+ CONFIG_INET_LRO_MODULE is used, the inet_lro module needs to be loaded
+ before the igb driver.
+
+ You can verify that the driver is using LRO by looking at these counters in
+ Ethtool:
+
+ lro_aggregated - count of total packets that were combined
+ lro_flushed - counts the number of packets flushed out of LRO
+ lro_no_desc - counts the number of times an LRO descriptor was not available
+ for the LRO packet
+
+ NOTE: IPv6 and UDP are not supported by LRO.
+
+Support
+=======
+
+For general information, go to the Intel support website at:
+
+ www.intel.com/support/
+
+or the Intel Wired Networking project hosted by Sourceforge at:
+
+ http://sourceforge.net/projects/e1000
+
+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 [email protected]

Documentation/networking/igbvf.txt

View file
diff --git a/Documentation/networking/igbvf.txt b/Documentation/networking/igbvf.txt
new file mode 100644
index 0000000..0560281
--- /dev/null
+++ b/Documentation/networking/igbvf.txt
@@ -0,0 +1,78 @@
+Linux* Base Driver for Intel(R) Network Connection
+==================================================
+
+Intel Gigabit Linux driver.
+Copyright(c) 1999 - 2010 Intel Corporation.
+
+Contents
+========
+
+- Identifying Your Adapter
+- Additional Configurations
+- Support
+
+This file describes the igbvf Linux* Base Driver for Intel Network Connection.
+
+The igbvf driver supports 82576-based virtual function devices that can only
+be activated on kernels that support SR-IOV. SR-IOV requires the correct
+platform and OS support.
+
+The igbvf driver requires the igb driver, version 2.0 or later. The igbvf
+driver supports virtual functions generated by the igb driver with a max_vfs
+value of 1 or greater. For more information on the max_vfs parameter refer
+to the README included with the igb driver.
+
+The guest OS loading the igbvf driver must support MSI-X interrupts.
+
+This driver is only supported as a loadable module at this time. Intel is
+not supplying patches against the kernel source to allow for static linking
+of the driver. For questions related to hardware requirements, refer to the
+documentation supplied with your Intel Gigabit adapter. All hardware
+requirements listed apply to use with Linux.
+
+Instructions on updating ethtool can be found in the section "Additional
+Configurations" later in this document.
+
+VLANs: There is a limit of a total of 32 shared VLANs to 1 or more VFs.
+
+Identifying Your Adapter
+========================
+
+The igbvf driver supports 82576-based virtual function devices that can only
+be activated on kernels that support SR-IOV.
+
+For more information on how to identify your adapter, go to the Adapter &
+Driver ID Guide at:
+
+ http://support.intel.com/support/go/network/adapter/idguide.htm
+
+For the latest Intel network drivers for Linux, refer to the following
+website. In the search field, enter your adapter name or type, or use the
+networking link on the left to search for your adapter:
+
+ http://downloadcenter.intel.com/scripts-df-external/Support_Intel.aspx
+
+Additional Configurations
+=========================
+
+ Ethtool
+ -------
+ The driver utilizes the ethtool interface for driver configuration and
+ diagnostics, as well as displaying statistical information.
+
+ http://sourceforge.net/projects/gkernel.
+
+Support
+=======
+
+For general information, go to the Intel support website at:
+
+ http://support.intel.com
+
+or the Intel Wired Networking project hosted by Sourceforge at:
+
+ http://sourceforge.net/projects/e1000
+
+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 [email protected]

MAINTAINERS

View file
diff --git a/MAINTAINERS b/MAINTAINERS
index c8a0a39..832f904 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -1085,7 +1085,6 @@ F: drivers/net/wireless/ath/ath5k/
ATHEROS ATH9K WIRELESS DRIVER
M: "Luis R. Rodriguez" <[email protected]>
M: Jouni Malinen <[email protected]>
-M: Sujith Manoharan <[email protected]>
M: Vasanthakumar Thiagarajan <[email protected]>
M: Senthil Balasubramanian <[email protected]>

drivers/atm/solos-pci.c

View file
diff --git a/drivers/atm/solos-pci.c b/drivers/atm/solos-pci.c
index 6174965..f916ddf 100644
--- a/drivers/atm/solos-pci.c
+++ b/drivers/atm/solos-pci.c
@@ -781,7 +781,8 @@ static struct atm_vcc *find_vcc(struct atm_dev *dev, short vpi, int vci)
sk_for_each(s, node, head) {
vcc = atm_sk(s);
if (vcc->dev == dev && vcc->vci == vci &&
- vcc->vpi == vpi && vcc->qos.rxtp.traffic_class != ATM_NONE)
+ vcc->vpi == vpi && vcc->qos.rxtp.traffic_class != ATM_NONE &&
+ test_bit(ATM_VF_READY, &vcc->flags))
goto out;
}
vcc = NULL;
@@ -907,6 +908,10 @@ static void pclose(struct atm_vcc *vcc)
clear_bit(ATM_VF_ADDR, &vcc->flags);
clear_bit(ATM_VF_READY, &vcc->flags);
+ /* Hold up vcc_destroy_socket() (our caller) until solos_bh() in the
+ tasklet has finished processing any incoming packets (and, more to
+ the point, using the vcc pointer). */
+ tasklet_unlock_wait(&card->tlet);
return;
}

drivers/char/pcmcia/ipwireless/network.c

View file
diff --git a/drivers/char/pcmcia/ipwireless/network.c b/drivers/char/pcmcia/ipwireless/network.c
index 6592016..9fe5383 100644
--- a/drivers/char/pcmcia/ipwireless/network.c
+++ b/drivers/char/pcmcia/ipwireless/network.c
@@ -239,7 +239,7 @@ static int ipwireless_ppp_ioctl(struct ppp_channel *ppp_channel,
return err;
}
-static struct ppp_channel_ops ipwireless_ppp_channel_ops = {
+static const struct ppp_channel_ops ipwireless_ppp_channel_ops = {
.start_xmit = ipwireless_ppp_start_xmit,
.ioctl = ipwireless_ppp_ioctl
};

drivers/isdn/gigaset/bas-gigaset.c

View file
diff --git a/drivers/isdn/gigaset/bas-gigaset.c b/drivers/isdn/gigaset/bas-gigaset.c
index 0ded364..707d9c9 100644
--- a/drivers/isdn/gigaset/bas-gigaset.c
+++ b/drivers/isdn/gigaset/bas-gigaset.c
@@ -1914,11 +1914,13 @@ static int gigaset_write_cmd(struct cardstate *cs, struct cmdbuf_t *cb)
* The next command will reopen the AT channel automatically.
*/
if (cb->len == 3 && !memcmp(cb->buf, "+++", 3)) {
- kfree(cb);
rc = req_submit(cs->bcs, HD_CLOSE_ATCHANNEL, 0, BAS_TIMEOUT);
if (cb->wake_tasklet)
tasklet_schedule(cb->wake_tasklet);
- return rc < 0 ? rc : cb->len;
+ if (!rc)
+ rc = cb->len;
+ kfree(cb);
+ return rc;
}
spin_lock_irqsave(&cs->cmdlock, flags);

drivers/isdn/gigaset/capi.c

View file
diff --git a/drivers/isdn/gigaset/capi.c b/drivers/isdn/gigaset/capi.c
index e5ea344..bcc174e 100644
--- a/drivers/isdn/gigaset/capi.c
+++ b/drivers/isdn/gigaset/capi.c
@@ -1052,6 +1052,7 @@ static inline void remove_appl_from_channel(struct bc_state *bcs,
do {
if (bcap->bcnext == ap) {
bcap->bcnext = bcap->bcnext->bcnext;
+ spin_unlock_irqrestore(&bcs->aplock, flags);
return;
}
bcap = bcap->bcnext;

drivers/isdn/sc/ioctl.c

View file
diff --git a/drivers/isdn/sc/ioctl.c b/drivers/isdn/sc/ioctl.c
index 43c5dc3..4cfdbe0 100644
--- a/drivers/isdn/sc/ioctl.c
+++ b/drivers/isdn/sc/ioctl.c
@@ -174,7 +174,7 @@ int sc_ioctl(int card, scs_ioctl *data)
pr_debug("%s: SCIOGETSPID: ioctl received\n",
sc_adapter[card]->devicename);
- spid = kmalloc(SCIOC_SPIDSIZE, GFP_KERNEL);
+ spid = kzalloc(SCIOC_SPIDSIZE, GFP_KERNEL);
if (!spid) {
kfree(rcvmsg);
return -ENOMEM;
@@ -194,7 +194,7 @@ int sc_ioctl(int card, scs_ioctl *data)
kfree(rcvmsg);
return status;
}
- strcpy(spid, rcvmsg->msg_data.byte_array);
+ strlcpy(spid, rcvmsg->msg_data.byte_array, SCIOC_SPIDSIZE);
/*
* Package the switch type and send to user space
@@ -266,12 +266,12 @@ int sc_ioctl(int card, scs_ioctl *data)
return status;
}
- dn = kmalloc(SCIOC_DNSIZE, GFP_KERNEL);
+ dn = kzalloc(SCIOC_DNSIZE, GFP_KERNEL);
if (!dn) {
kfree(rcvmsg);
return -ENOMEM;
}
- strcpy(dn, rcvmsg->msg_data.byte_array);
+ strlcpy(dn, rcvmsg->msg_data.byte_array, SCIOC_DNSIZE);
kfree(rcvmsg);
/*
@@ -337,7 +337,7 @@ int sc_ioctl(int card, scs_ioctl *data)
pr_debug("%s: SCIOSTAT: ioctl received\n",
sc_adapter[card]->devicename);
- bi = kmalloc (sizeof(boardInfo), GFP_KERNEL);
+ bi = kzalloc(sizeof(boardInfo), GFP_KERNEL);
if (!bi) {
kfree(rcvmsg);
return -ENOMEM;

drivers/net/cxgb3/cxgb3_main.c

View file
diff --git a/drivers/net/cxgb3/cxgb3_main.c b/drivers/net/cxgb3/cxgb3_main.c
index 066fd5b..ad19585 100644
--- a/drivers/net/cxgb3/cxgb3_main.c
+++ b/drivers/net/cxgb3/cxgb3_main.c
@@ -3198,17 +3198,17 @@ static int __devinit init_one(struct pci_dev *pdev,
}
}
- err = pci_request_regions(pdev, DRV_NAME);
+ err = pci_enable_device(pdev);
if (err) {
- /* Just info, some other driver may have claimed the device. */
- dev_info(&pdev->dev, "cannot obtain PCI resources\n");
- return err;
+ dev_err(&pdev->dev, "cannot enable PCI device\n");
+ goto out;
}
- err = pci_enable_device(pdev);
+ err = pci_request_regions(pdev, DRV_NAME);
if (err) {
- dev_err(&pdev->dev, "cannot enable PCI device\n");
- goto out_release_regions;
+ /* Just info, some other driver may have claimed the device. */
+ dev_info(&pdev->dev, "cannot obtain PCI resources\n");
+ goto out_disable_device;
}
if (!pci_set_dma_mask(pdev, DMA_BIT_MASK(64))) {
@@ -3217,11 +3217,11 @@ static int __devinit init_one(struct pci_dev *pdev,
if (err) {
dev_err(&pdev->dev, "unable to obtain 64-bit DMA for "
"coherent allocations\n");
- goto out_disable_device;
+ goto out_release_regions;
}
} else if ((err = pci_set_dma_mask(pdev, DMA_BIT_MASK(32))) != 0) {
dev_err(&pdev->dev, "no usable DMA configuration\n");
- goto out_disable_device;
+ goto out_release_regions;
}
pci_set_master(pdev);
@@ -3234,7 +3234,7 @@ static int __devinit init_one(struct pci_dev *pdev,
adapter = kzalloc(sizeof(*adapter), GFP_KERNEL);
if (!adapter) {
err = -ENOMEM;
- goto out_disable_device;
+ goto out_release_regions;
}
adapter->nofail_skb =
@@ -3370,11 +3370,12 @@ out_free_dev:
out_free_adapter:
kfree(adapter);
-out_disable_device:
- pci_disable_device(pdev);
out_release_regions:
pci_release_regions(pdev);
+out_disable_device:
+ pci_disable_device(pdev);
pci_set_drvdata(pdev, NULL);
+out:
return err;
}

drivers/net/cxgb4vf/cxgb4vf_main.c

View file
diff --git a/drivers/net/cxgb4vf/cxgb4vf_main.c b/drivers/net/cxgb4vf/cxgb4vf_main.c
index a165632..7b6d07f 100644
--- a/drivers/net/cxgb4vf/cxgb4vf_main.c
+++ b/drivers/net/cxgb4vf/cxgb4vf_main.c
@@ -2462,23 +2462,24 @@ static int __devinit cxgb4vf_pci_probe(struct pci_dev *pdev,
version_printed = 1;
}
+
/*
- * Reserve PCI resources for the device. If we can't get them some
- * other driver may have already claimed the device ...
+ * Initialize generic PCI device state.
*/
- err = pci_request_regions(pdev, KBUILD_MODNAME);
+ err = pci_enable_device(pdev);
if (err) {
- dev_err(&pdev->dev, "cannot obtain PCI resources\n");
+ dev_err(&pdev->dev, "cannot enable PCI device\n");
return err;
}
/*
- * Initialize generic PCI device state.
+ * Reserve PCI resources for the device. If we can't get them some
+ * other driver may have already claimed the device ...
*/
- err = pci_enable_device(pdev);
+ err = pci_request_regions(pdev, KBUILD_MODNAME);
if (err) {
- dev_err(&pdev->dev, "cannot enable PCI device\n");
- goto err_release_regions;
+ dev_err(&pdev->dev, "cannot obtain PCI resources\n");
+ goto err_disable_device;
}
/*
@@ -2491,14 +2492,14 @@ static int __devinit cxgb4vf_pci_probe(struct pci_dev *pdev,
if (err) {
dev_err(&pdev->dev, "unable to obtain 64-bit DMA for"
" coherent allocations\n");
- goto err_disable_device;
+ goto err_release_regions;
}
pci_using_dac = 1;
} else {
err = pci_set_dma_mask(pdev, DMA_BIT_MASK(32));
if (err != 0) {
dev_err(&pdev->dev, "no usable DMA configuration\n");
- goto err_disable_device;
+ goto err_release_regions;
}
pci_using_dac = 0;
}
@@ -2514,7 +2515,7 @@ static int __devinit cxgb4vf_pci_probe(struct pci_dev *pdev,
adapter = kzalloc(sizeof(*adapter), GFP_KERNEL);
if (!adapter) {
err = -ENOMEM;
- goto err_disable_device;
+ goto err_release_regions;
}
pci_set_drvdata(pdev, adapter);
adapter->pdev = pdev;
@@ -2750,13 +2751,13 @@ err_free_adapter:
kfree(adapter);
pci_set_drvdata(pdev, NULL);
-err_disable_device:
- pci_disable_device(pdev);
- pci_clear_master(pdev);
-
err_release_regions:
pci_release_regions(pdev);
pci_set_drvdata(pdev, NULL);
+ pci_clear_master(pdev);
+
+err_disable_device:
+ pci_disable_device(pdev);
err_out:
return err;

drivers/net/davinci_emac.c

View file
diff --git a/drivers/net/davinci_emac.c b/drivers/net/davinci_emac.c
index d0824e3..7fbd052 100644
--- a/drivers/net/davinci_emac.c
+++ b/drivers/net/davinci_emac.c
@@ -2944,8 +2944,8 @@ static int __devexit davinci_emac_remove(struct platform_device *pdev)
release_mem_region(res->start, res->end - res->start + 1);
unregister_netdev(ndev);
- free_netdev(ndev);
iounmap(priv->remap_addr);
+ free_netdev(ndev);
clk_disable(emac_clk);
clk_put(emac_clk);

drivers/net/e100.c

View file
diff --git a/drivers/net/e100.c b/drivers/net/e100.c
index b194bad..8e2eab4 100644
--- a/drivers/net/e100.c
+++ b/drivers/net/e100.c
@@ -1779,6 +1779,7 @@ static int e100_tx_clean(struct nic *nic)
for (cb = nic->cb_to_clean;
cb->status & cpu_to_le16(cb_complete);
cb = nic->cb_to_clean = cb->next) {
+ rmb(); /* read skb after status */
netif_printk(nic, tx_done, KERN_DEBUG, nic->netdev,
"cb[%d]->status = 0x%04X\n",
(int)(((void*)cb - (void*)nic->cbs)/sizeof(struct cb)),
@@ -1927,6 +1928,7 @@ static int e100_rx_indicate(struct nic *nic, struct rx *rx,
netif_printk(nic, rx_status, KERN_DEBUG, nic->netdev,
"status=0x%04X\n", rfd_status);
+ rmb(); /* read size after status bit */
/* If data isn't ready, nothing to indicate */
if (unlikely(!(rfd_status & cb_complete))) {

drivers/net/e1000/e1000_main.c

View file
diff --git a/drivers/net/e1000/e1000_main.c b/drivers/net/e1000/e1000_main.c
index 02833af..5cc39ed 100644
--- a/drivers/net/e1000/e1000_main.c
+++ b/drivers/net/e1000/e1000_main.c
@@ -3454,6 +3454,7 @@ static bool e1000_clean_tx_irq(struct e1000_adapter *adapter,
while ((eop_desc->upper.data & cpu_to_le32(E1000_TXD_STAT_DD)) &&
(count < tx_ring->count)) {
bool cleaned = false;
+ rmb(); /* read buffer_info after eop_desc */
for ( ; !cleaned; count++) {
tx_desc = E1000_TX_DESC(*tx_ring, i);
buffer_info = &tx_ring->buffer_info[i];
@@ -3643,6 +3644,7 @@ static bool e1000_clean_jumbo_rx_irq(struct e1000_adapter *adapter,
if (*work_done >= work_to_do)
break;
(*work_done)++;
+ rmb(); /* read descriptor and rx_buffer_info after status DD */
status = rx_desc->status;
skb = buffer_info->skb;
@@ -3849,6 +3851,7 @@ static bool e1000_clean_rx_irq(struct e1000_adapter *adapter,
if (*work_done >= work_to_do)
break;
(*work_done)++;
+ rmb(); /* read descriptor and rx_buffer_info after status DD */
status = rx_desc->status;
skb = buffer_info->skb;

drivers/net/e1000e/netdev.c

View file
diff --git a/drivers/net/e1000e/netdev.c b/drivers/net/e1000e/netdev.c
index 521c6ee..2b8ef44 100644
--- a/drivers/net/e1000e/netdev.c
+++ b/drivers/net/e1000e/netdev.c
@@ -781,6 +781,7 @@ static bool e1000_clean_rx_irq(struct e1000_adapter *adapter,
if (*work_done >= work_to_do)
break;
(*work_done)++;
+ rmb(); /* read descriptor and rx_buffer_info after status DD */
status = rx_desc->status;
skb = buffer_info->skb;
@@ -991,6 +992,7 @@ static bool e1000_clean_tx_irq(struct e1000_adapter *adapter)
while ((eop_desc->upper.data & cpu_to_le32(E1000_TXD_STAT_DD)) &&
(count < tx_ring->count)) {
bool cleaned = false;
+ rmb(); /* read buffer_info after eop_desc */
for (; !cleaned; count++) {
tx_desc = E1000_TX_DESC(*tx_ring, i);
buffer_info = &tx_ring->buffer_info[i];
@@ -1087,6 +1089,7 @@ static bool e1000_clean_rx_irq_ps(struct e1000_adapter *adapter,
break;
(*work_done)++;
skb = buffer_info->skb;
+ rmb(); /* read descriptor and rx_buffer_info after status DD */
/* in the packet split case this is header only */
prefetch(skb->data - NET_IP_ALIGN);
@@ -1286,6 +1289,7 @@ static bool e1000_clean_jumbo_rx_irq(struct e1000_adapter *adapter,
if (*work_done >= work_to_do)
break;
(*work_done)++;
+ rmb(); /* read descriptor and rx_buffer_info after status DD */
status = rx_desc->status;
skb = buffer_info->skb;

drivers/net/enic/enic_main.c

View file
diff --git a/drivers/net/enic/enic_main.c b/drivers/net/enic/enic_main.c
index 77a7f87..9aab853 100644
--- a/drivers/net/enic/enic_main.c
+++ b/drivers/net/enic/enic_main.c

This diff is incomplete. Download the complete patch.

drivers/net/igb/igb_main.c

View file

This diff is incomplete. Download the complete patch.

drivers/net/igbvf/netdev.c

View file

This diff is incomplete. Download the complete patch.

drivers/net/ixgb/ixgb_main.c

View file

This diff is incomplete. Download the complete patch.

drivers/net/ixgbe/ixgbe_main.c

View file

This diff is incomplete. Download the complete patch.

drivers/net/ixgbevf/ixgbevf_main.c

View file

This diff is incomplete. Download the complete patch.

drivers/net/netxen/netxen_nic_main.c

View file

This diff is incomplete. Download the complete patch.

drivers/net/ppp_async.c

View file

This diff is incomplete. Download the complete patch.

drivers/net/ppp_synctty.c

View file

This diff is incomplete. Download the complete patch.

drivers/net/pppoe.c

View file

This diff is incomplete. Download the complete patch.

drivers/net/usb/usbnet.c

View file

This diff is incomplete. Download the complete patch.

drivers/net/via-velocity.c

View file

This diff is incomplete. Download the complete patch.

drivers/net/virtio_net.c

View file

This diff is incomplete. Download the complete patch.

drivers/net/wireless/ath/ath9k/ar9002_calib.c

View file

This diff is incomplete. Download the complete patch.

drivers/net/wireless/ath/ath9k/ar9003_calib.c

View file

This diff is incomplete. Download the complete patch.

drivers/net/wireless/ath/ath9k/ar9003_eeprom.c

View file

This diff is incomplete. Download the complete patch.

drivers/net/wireless/ath/ath9k/ar9003_paprd.c

View file

This diff is incomplete. Download the complete patch.

drivers/net/wireless/ath/ath9k/ar9003_phy.c

View file

This diff is incomplete. Download the complete patch.

drivers/net/wireless/ath/ath9k/ath9k.h

View file

This diff is incomplete. Download the complete patch.

drivers/net/wireless/ath/ath9k/calib.c

View file

This diff is incomplete. Download the complete patch.

drivers/net/wireless/ath/ath9k/calib.h

View file

This diff is incomplete. Download the complete patch.

drivers/net/wireless/ath/ath9k/htc.h

View file

This diff is incomplete. Download the complete patch.

drivers/net/wireless/ath/ath9k/htc_drv_main.c

View file

This diff is incomplete. Download the complete patch.

drivers/net/wireless/ath/ath9k/hw.c

View file

This diff is incomplete. Download the complete patch.

drivers/net/wireless/ath/ath9k/hw.h

View file

This diff is incomplete. Download the complete patch.

drivers/net/wireless/ath/ath9k/main.c

View file

This diff is incomplete. Download the complete patch.

drivers/net/wireless/ath/ath9k/recv.c

View file

This diff is incomplete. Download the complete patch.

drivers/net/wireless/ath/ath9k/xmit.c

View file

This diff is incomplete. Download the complete patch.

drivers/net/wireless/ipw2x00/ipw2100.c

View file

This diff is incomplete. Download the complete patch.

drivers/net/wireless/iwlwifi/iwl-agn-debugfs.c

View file

This diff is incomplete. Download the complete patch.

drivers/net/wireless/iwlwifi/iwl-agn-lib.c

View file

This diff is incomplete. Download the complete patch.

drivers/net/wireless/iwlwifi/iwl-agn-rs.c

View file

This diff is incomplete. Download the complete patch.

drivers/net/wireless/iwlwifi/iwl-agn-tx.c

View file

This diff is incomplete. Download the complete patch.

drivers/net/wireless/iwlwifi/iwl-core.c

View file

This diff is incomplete. Download the complete patch.

drivers/net/wireless/iwlwifi/iwl-debug.h

View file

This diff is incomplete. Download the complete patch.

drivers/net/wireless/iwlwifi/iwl-devtrace.h

View file

This diff is incomplete. Download the complete patch.

drivers/net/wireless/iwlwifi/iwl-scan.c

View file

This diff is incomplete. Download the complete patch.

drivers/net/wireless/iwlwifi/iwl-sta.c

View file

This diff is incomplete. Download the complete patch.

drivers/net/wireless/libertas/cfg.c

View file

This diff is incomplete. Download the complete patch.

drivers/net/wireless/libertas/dev.h

View file

This diff is incomplete. Download the complete patch.

drivers/net/wireless/libertas/main.c

View file

This diff is incomplete. Download the complete patch.

drivers/net/wireless/p54/p54pci.c

View file

This diff is incomplete. Download the complete patch.

drivers/net/wireless/rt2x00/rt2x00pci.c

View file

This diff is incomplete. Download the complete patch.

drivers/net/wireless/rtl818x/rtl8180_dev.c

View file

This diff is incomplete. Download the complete patch.

drivers/net/wireless/wl12xx/wl1271_spi.c

View file

This diff is incomplete. Download the complete patch.

include/linux/ppp_channel.h

View file

This diff is incomplete. Download the complete patch.

include/linux/skbuff.h

View file

This diff is incomplete. Download the complete patch.

include/net/bluetooth/hci_core.h

View file

This diff is incomplete. Download the complete patch.

net/atm/pppoatm.c

View file

This diff is incomplete. Download the complete patch.

net/bluetooth/hci_core.c

View file

This diff is incomplete. Download the complete patch.

net/bluetooth/hci_sock.c

View file

This diff is incomplete. Download the complete patch.

net/bluetooth/hci_sysfs.c

View file

This diff is incomplete. Download the complete patch.

net/bluetooth/l2cap.c

View file

This diff is incomplete. Download the complete patch.

net/bluetooth/rfcomm/tty.c

View file

This diff is incomplete. Download the complete patch.

net/core/dev.c

View file

This diff is incomplete. Download the complete patch.

net/ipv4/tcp_input.c

View file

This diff is incomplete. Download the complete patch.

net/irda/irnet/irnet_ppp.c

View file

This diff is incomplete. Download the complete patch.

net/l2tp/l2tp_ppp.c

View file

This diff is incomplete. Download the complete patch.

net/mac80211/main.c

View file

This diff is incomplete. Download the complete patch.

net/mac80211/scan.c

View file

This diff is incomplete. Download the complete patch.

net/rxrpc/ar-ack.c

View file

This diff is incomplete. Download the complete patch.

net/rxrpc/ar-call.c

View file

This diff is incomplete. Download the complete patch.

net/sched/act_nat.c

View file

This diff is incomplete. Download the complete patch.

net/sched/cls_flow.c

View file

This diff is incomplete. Download the complete patch.

net/sched/cls_rsvp.h

View file

This diff is incomplete. Download the complete patch.

net/sched/sch_sfq.c

View file

This diff is incomplete. Download the complete patch.