aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2008-11-11 12:20:29 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2008-11-11 12:20:29 -0500
commit0a4cf2c8786219b4871c37240ab9787a61d843ee (patch)
treea126516733f3a757711754bbac189417c79d8bcb /drivers
parent4694516d1987303dd83bfd0efdd36fa5b65d701b (diff)
parentdf02c6ff2e3937379b31ea161b53229134fe92f7 (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: dsa: fix master interface allmulti/promisc handling dsa: fix skb->pkt_type when mac address of slave interface differs net: fix setting of skb->tail in skb_recycle_check() net: fix /proc/net/snmp as memory corruptor mac80211: fix a buffer overrun in station debug code netfilter: payload_len is be16, add size of struct rather than size of pointer ipv6: fix ip6_mr_init error path [4/4] dca: fixup initialization dependency [3/4] I/OAT: fix async_tx.callback checking [2/4] I/OAT: fix dma_pin_iovec_pages() error handling [1/4] I/OAT: fix channel resources free for not allocated channels ssb: Fix DMA-API compilation for non-PCI systems SSB: hide empty sub menu vlan: Fix typos in proc output string [netdrvr] usb/hso: Cleanup rfkill error handling sfc: Correct address of gPXE boot configuration in EEPROM el3_common_init() should be __devinit, not __init hso: rfkill type should be WWAN mlx4_en: Start port error flow bug fix af_key: mark policy as dead before destroying
Diffstat (limited to 'drivers')
-rw-r--r--drivers/dca/dca-core.c2
-rw-r--r--drivers/dma/ioat_dma.c11
-rw-r--r--drivers/dma/iovlock.c17
-rw-r--r--drivers/net/mlx4/en_netdev.c2
-rw-r--r--drivers/net/sfc/ethtool.c4
-rw-r--r--drivers/net/usb/hso.c12
-rw-r--r--drivers/ssb/Kconfig5
7 files changed, 29 insertions, 24 deletions
diff --git a/drivers/dca/dca-core.c b/drivers/dca/dca-core.c
index ec249d2db633..d883e1b8bb8c 100644
--- a/drivers/dca/dca-core.c
+++ b/drivers/dca/dca-core.c
@@ -270,6 +270,6 @@ static void __exit dca_exit(void)
270 dca_sysfs_exit(); 270 dca_sysfs_exit();
271} 271}
272 272
273module_init(dca_init); 273subsys_initcall(dca_init);
274module_exit(dca_exit); 274module_exit(dca_exit);
275 275
diff --git a/drivers/dma/ioat_dma.c b/drivers/dma/ioat_dma.c
index b0438c4f0c30..ecd743f7cc61 100644
--- a/drivers/dma/ioat_dma.c
+++ b/drivers/dma/ioat_dma.c
@@ -525,7 +525,7 @@ static dma_cookie_t ioat1_tx_submit(struct dma_async_tx_descriptor *tx)
525 } 525 }
526 526
527 hw->ctl = IOAT_DMA_DESCRIPTOR_CTL_CP_STS; 527 hw->ctl = IOAT_DMA_DESCRIPTOR_CTL_CP_STS;
528 if (new->async_tx.callback) { 528 if (first->async_tx.callback) {
529 hw->ctl |= IOAT_DMA_DESCRIPTOR_CTL_INT_GN; 529 hw->ctl |= IOAT_DMA_DESCRIPTOR_CTL_INT_GN;
530 if (first != new) { 530 if (first != new) {
531 /* move callback into to last desc */ 531 /* move callback into to last desc */
@@ -617,7 +617,7 @@ static dma_cookie_t ioat2_tx_submit(struct dma_async_tx_descriptor *tx)
617 } 617 }
618 618
619 hw->ctl |= IOAT_DMA_DESCRIPTOR_CTL_CP_STS; 619 hw->ctl |= IOAT_DMA_DESCRIPTOR_CTL_CP_STS;
620 if (new->async_tx.callback) { 620 if (first->async_tx.callback) {
621 hw->ctl |= IOAT_DMA_DESCRIPTOR_CTL_INT_GN; 621 hw->ctl |= IOAT_DMA_DESCRIPTOR_CTL_INT_GN;
622 if (first != new) { 622 if (first != new) {
623 /* move callback into to last desc */ 623 /* move callback into to last desc */
@@ -807,6 +807,12 @@ static void ioat_dma_free_chan_resources(struct dma_chan *chan)
807 struct ioat_desc_sw *desc, *_desc; 807 struct ioat_desc_sw *desc, *_desc;
808 int in_use_descs = 0; 808 int in_use_descs = 0;
809 809
810 /* Before freeing channel resources first check
811 * if they have been previously allocated for this channel.
812 */
813 if (ioat_chan->desccount == 0)
814 return;
815
810 tasklet_disable(&ioat_chan->cleanup_task); 816 tasklet_disable(&ioat_chan->cleanup_task);
811 ioat_dma_memcpy_cleanup(ioat_chan); 817 ioat_dma_memcpy_cleanup(ioat_chan);
812 818
@@ -869,6 +875,7 @@ static void ioat_dma_free_chan_resources(struct dma_chan *chan)
869 ioat_chan->last_completion = ioat_chan->completion_addr = 0; 875 ioat_chan->last_completion = ioat_chan->completion_addr = 0;
870 ioat_chan->pending = 0; 876 ioat_chan->pending = 0;
871 ioat_chan->dmacount = 0; 877 ioat_chan->dmacount = 0;
878 ioat_chan->desccount = 0;
872 ioat_chan->watchdog_completion = 0; 879 ioat_chan->watchdog_completion = 0;
873 ioat_chan->last_compl_desc_addr_hw = 0; 880 ioat_chan->last_compl_desc_addr_hw = 0;
874 ioat_chan->watchdog_tcp_cookie = 881 ioat_chan->watchdog_tcp_cookie =
diff --git a/drivers/dma/iovlock.c b/drivers/dma/iovlock.c
index e763d723e4cf..9f6fe46a9b87 100644
--- a/drivers/dma/iovlock.c
+++ b/drivers/dma/iovlock.c
@@ -55,7 +55,6 @@ struct dma_pinned_list *dma_pin_iovec_pages(struct iovec *iov, size_t len)
55 int nr_iovecs = 0; 55 int nr_iovecs = 0;
56 int iovec_len_used = 0; 56 int iovec_len_used = 0;
57 int iovec_pages_used = 0; 57 int iovec_pages_used = 0;
58 long err;
59 58
60 /* don't pin down non-user-based iovecs */ 59 /* don't pin down non-user-based iovecs */
61 if (segment_eq(get_fs(), KERNEL_DS)) 60 if (segment_eq(get_fs(), KERNEL_DS))
@@ -72,23 +71,21 @@ struct dma_pinned_list *dma_pin_iovec_pages(struct iovec *iov, size_t len)
72 local_list = kmalloc(sizeof(*local_list) 71 local_list = kmalloc(sizeof(*local_list)
73 + (nr_iovecs * sizeof (struct dma_page_list)) 72 + (nr_iovecs * sizeof (struct dma_page_list))
74 + (iovec_pages_used * sizeof (struct page*)), GFP_KERNEL); 73 + (iovec_pages_used * sizeof (struct page*)), GFP_KERNEL);
75 if (!local_list) { 74 if (!local_list)
76 err = -ENOMEM;
77 goto out; 75 goto out;
78 }
79 76
80 /* list of pages starts right after the page list array */ 77 /* list of pages starts right after the page list array */
81 pages = (struct page **) &local_list->page_list[nr_iovecs]; 78 pages = (struct page **) &local_list->page_list[nr_iovecs];
82 79
80 local_list->nr_iovecs = 0;
81
83 for (i = 0; i < nr_iovecs; i++) { 82 for (i = 0; i < nr_iovecs; i++) {
84 struct dma_page_list *page_list = &local_list->page_list[i]; 83 struct dma_page_list *page_list = &local_list->page_list[i];
85 84
86 len -= iov[i].iov_len; 85 len -= iov[i].iov_len;
87 86
88 if (!access_ok(VERIFY_WRITE, iov[i].iov_base, iov[i].iov_len)) { 87 if (!access_ok(VERIFY_WRITE, iov[i].iov_base, iov[i].iov_len))
89 err = -EFAULT;
90 goto unpin; 88 goto unpin;
91 }
92 89
93 page_list->nr_pages = num_pages_spanned(&iov[i]); 90 page_list->nr_pages = num_pages_spanned(&iov[i]);
94 page_list->base_address = iov[i].iov_base; 91 page_list->base_address = iov[i].iov_base;
@@ -109,10 +106,8 @@ struct dma_pinned_list *dma_pin_iovec_pages(struct iovec *iov, size_t len)
109 NULL); 106 NULL);
110 up_read(&current->mm->mmap_sem); 107 up_read(&current->mm->mmap_sem);
111 108
112 if (ret != page_list->nr_pages) { 109 if (ret != page_list->nr_pages)
113 err = -ENOMEM;
114 goto unpin; 110 goto unpin;
115 }
116 111
117 local_list->nr_iovecs = i + 1; 112 local_list->nr_iovecs = i + 1;
118 } 113 }
@@ -122,7 +117,7 @@ struct dma_pinned_list *dma_pin_iovec_pages(struct iovec *iov, size_t len)
122unpin: 117unpin:
123 dma_unpin_iovec_pages(local_list); 118 dma_unpin_iovec_pages(local_list);
124out: 119out:
125 return ERR_PTR(err); 120 return NULL;
126} 121}
127 122
128void dma_unpin_iovec_pages(struct dma_pinned_list *pinned_list) 123void dma_unpin_iovec_pages(struct dma_pinned_list *pinned_list)
diff --git a/drivers/net/mlx4/en_netdev.c b/drivers/net/mlx4/en_netdev.c
index a339afbeed38..a3f732418c49 100644
--- a/drivers/net/mlx4/en_netdev.c
+++ b/drivers/net/mlx4/en_netdev.c
@@ -706,7 +706,7 @@ tx_err:
706 mlx4_en_release_rss_steer(priv); 706 mlx4_en_release_rss_steer(priv);
707rx_err: 707rx_err:
708 for (i = 0; i < priv->rx_ring_num; i++) 708 for (i = 0; i < priv->rx_ring_num; i++)
709 mlx4_en_deactivate_rx_ring(priv, &priv->rx_ring[rx_index]); 709 mlx4_en_deactivate_rx_ring(priv, &priv->rx_ring[i]);
710cq_err: 710cq_err:
711 while (rx_index--) 711 while (rx_index--)
712 mlx4_en_deactivate_cq(priv, &priv->rx_cq[rx_index]); 712 mlx4_en_deactivate_cq(priv, &priv->rx_cq[rx_index]);
diff --git a/drivers/net/sfc/ethtool.c b/drivers/net/sfc/ethtool.c
index fa98af58223e..cd0d0873d978 100644
--- a/drivers/net/sfc/ethtool.c
+++ b/drivers/net/sfc/ethtool.c
@@ -174,8 +174,8 @@ static struct efx_ethtool_stat efx_ethtool_stats[] = {
174 174
175/* EEPROM range with gPXE configuration */ 175/* EEPROM range with gPXE configuration */
176#define EFX_ETHTOOL_EEPROM_MAGIC 0xEFAB 176#define EFX_ETHTOOL_EEPROM_MAGIC 0xEFAB
177#define EFX_ETHTOOL_EEPROM_MIN 0x100U 177#define EFX_ETHTOOL_EEPROM_MIN 0x800U
178#define EFX_ETHTOOL_EEPROM_MAX 0x400U 178#define EFX_ETHTOOL_EEPROM_MAX 0x1800U
179 179
180/************************************************************************** 180/**************************************************************************
181 * 181 *
diff --git a/drivers/net/usb/hso.c b/drivers/net/usb/hso.c
index 1164c52e2c0a..8e90891f0e42 100644
--- a/drivers/net/usb/hso.c
+++ b/drivers/net/usb/hso.c
@@ -2184,19 +2184,20 @@ static void hso_create_rfkill(struct hso_device *hso_dev,
2184 struct usb_interface *interface) 2184 struct usb_interface *interface)
2185{ 2185{
2186 struct hso_net *hso_net = dev2net(hso_dev); 2186 struct hso_net *hso_net = dev2net(hso_dev);
2187 struct device *dev = hso_dev->dev; 2187 struct device *dev = &hso_net->net->dev;
2188 char *rfkn; 2188 char *rfkn;
2189 2189
2190 hso_net->rfkill = rfkill_allocate(&interface_to_usbdev(interface)->dev, 2190 hso_net->rfkill = rfkill_allocate(&interface_to_usbdev(interface)->dev,
2191 RFKILL_TYPE_WLAN); 2191 RFKILL_TYPE_WWAN);
2192 if (!hso_net->rfkill) { 2192 if (!hso_net->rfkill) {
2193 dev_err(dev, "%s - Out of memory", __func__); 2193 dev_err(dev, "%s - Out of memory\n", __func__);
2194 return; 2194 return;
2195 } 2195 }
2196 rfkn = kzalloc(20, GFP_KERNEL); 2196 rfkn = kzalloc(20, GFP_KERNEL);
2197 if (!rfkn) { 2197 if (!rfkn) {
2198 rfkill_free(hso_net->rfkill); 2198 rfkill_free(hso_net->rfkill);
2199 dev_err(dev, "%s - Out of memory", __func__); 2199 hso_net->rfkill = NULL;
2200 dev_err(dev, "%s - Out of memory\n", __func__);
2200 return; 2201 return;
2201 } 2202 }
2202 snprintf(rfkn, 20, "hso-%d", 2203 snprintf(rfkn, 20, "hso-%d",
@@ -2209,7 +2210,8 @@ static void hso_create_rfkill(struct hso_device *hso_dev,
2209 kfree(rfkn); 2210 kfree(rfkn);
2210 hso_net->rfkill->name = NULL; 2211 hso_net->rfkill->name = NULL;
2211 rfkill_free(hso_net->rfkill); 2212 rfkill_free(hso_net->rfkill);
2212 dev_err(dev, "%s - Failed to register rfkill", __func__); 2213 hso_net->rfkill = NULL;
2214 dev_err(dev, "%s - Failed to register rfkill\n", __func__);
2213 return; 2215 return;
2214 } 2216 }
2215} 2217}
diff --git a/drivers/ssb/Kconfig b/drivers/ssb/Kconfig
index 307b1f62d949..b1b947edcf01 100644
--- a/drivers/ssb/Kconfig
+++ b/drivers/ssb/Kconfig
@@ -1,10 +1,11 @@
1menu "Sonics Silicon Backplane"
2
3config SSB_POSSIBLE 1config SSB_POSSIBLE
4 bool 2 bool
5 depends on HAS_IOMEM && HAS_DMA 3 depends on HAS_IOMEM && HAS_DMA
6 default y 4 default y
7 5
6menu "Sonics Silicon Backplane"
7 depends on SSB_POSSIBLE
8
8config SSB 9config SSB
9 tristate "Sonics Silicon Backplane support" 10 tristate "Sonics Silicon Backplane support"
10 depends on SSB_POSSIBLE 11 depends on SSB_POSSIBLE