Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6

+106 -40
+4 -4
Documentation/networking/ip-sysctl.txt
··· 1126 1126 Default: 5 1127 1127 1128 1128 max_addresses - INTEGER 1129 - Number of maximum addresses per interface. 0 disables limitation. 1130 - It is recommended not set too large value (or 0) because it would 1131 - be too easy way to crash kernel to allow to create too much of 1132 - autoconfigured addresses. 1129 + Maximum number of autoconfigured addresses per interface. Setting 1130 + to zero disables the limitation. It is not recommended to set this 1131 + value too large (or to zero) because it would be an easy way to 1132 + crash the kernel by allowing too many addresses to be created. 1133 1133 Default: 16 1134 1134 1135 1135 disable_ipv6 - BOOLEAN
+2 -2
MAINTAINERS
··· 3495 3495 F: drivers/net/wireless/libertas/ 3496 3496 3497 3497 MARVELL MV643XX ETHERNET DRIVER 3498 - M: Lennert Buytenhek <buytenh@marvell.com> 3498 + M: Lennert Buytenhek <buytenh@wantstofly.org> 3499 3499 L: netdev@vger.kernel.org 3500 - S: Supported 3500 + S: Maintained 3501 3501 F: drivers/net/mv643xx_eth.* 3502 3502 F: include/linux/mv643xx.h 3503 3503
+18 -1
drivers/net/e1000/e1000_main.c
··· 4005 4005 } 4006 4006 } 4007 4007 4008 - if (!buffer_info->dma) 4008 + if (!buffer_info->dma) { 4009 4009 buffer_info->dma = pci_map_page(pdev, 4010 4010 buffer_info->page, 0, 4011 4011 buffer_info->length, 4012 4012 PCI_DMA_FROMDEVICE); 4013 + if (pci_dma_mapping_error(pdev, buffer_info->dma)) { 4014 + put_page(buffer_info->page); 4015 + dev_kfree_skb(skb); 4016 + buffer_info->page = NULL; 4017 + buffer_info->skb = NULL; 4018 + buffer_info->dma = 0; 4019 + adapter->alloc_rx_buff_failed++; 4020 + break; /* while !buffer_info->skb */ 4021 + } 4022 + } 4013 4023 4014 4024 rx_desc = E1000_RX_DESC(*rx_ring, i); 4015 4025 rx_desc->buffer_addr = cpu_to_le64(buffer_info->dma); ··· 4110 4100 skb->data, 4111 4101 buffer_info->length, 4112 4102 PCI_DMA_FROMDEVICE); 4103 + if (pci_dma_mapping_error(pdev, buffer_info->dma)) { 4104 + dev_kfree_skb(skb); 4105 + buffer_info->skb = NULL; 4106 + buffer_info->dma = 0; 4107 + adapter->alloc_rx_buff_failed++; 4108 + break; /* while !buffer_info->skb */ 4109 + } 4113 4110 4114 4111 /* 4115 4112 * XXX if it was allocated cleanly it will never map to a
+27 -18
drivers/net/sfc/falcon_boards.c
··· 29 29 #define FALCON_BOARD_SFN4111T 0x51 30 30 #define FALCON_BOARD_SFN4112F 0x52 31 31 32 + /* Board temperature is about 15°C above ambient when air flow is 33 + * limited. */ 34 + #define FALCON_BOARD_TEMP_BIAS 15 35 + 36 + /* SFC4000 datasheet says: 'The maximum permitted junction temperature 37 + * is 125°C; the thermal design of the environment for the SFC4000 38 + * should aim to keep this well below 100°C.' */ 39 + #define FALCON_JUNC_TEMP_MAX 90 40 + 32 41 /***************************************************************************** 33 42 * Support for LM87 sensor chip used on several boards 34 43 */ ··· 557 548 static u8 sfe4002_lm87_channel = 0x03; /* use AIN not FAN inputs */ 558 549 559 550 static const u8 sfe4002_lm87_regs[] = { 560 - LM87_IN_LIMITS(0, 0x83, 0x91), /* 2.5V: 1.8V +/- 5% */ 561 - LM87_IN_LIMITS(1, 0x51, 0x5a), /* Vccp1: 1.2V +/- 5% */ 562 - LM87_IN_LIMITS(2, 0xb6, 0xca), /* 3.3V: 3.3V +/- 5% */ 563 - LM87_IN_LIMITS(3, 0xb0, 0xc9), /* 5V: 4.6-5.2V */ 564 - LM87_IN_LIMITS(4, 0xb0, 0xe0), /* 12V: 11-14V */ 565 - LM87_IN_LIMITS(5, 0x44, 0x4b), /* Vccp2: 1.0V +/- 5% */ 566 - LM87_AIN_LIMITS(0, 0xa0, 0xb2), /* AIN1: 1.66V +/- 5% */ 567 - LM87_AIN_LIMITS(1, 0x91, 0xa1), /* AIN2: 1.5V +/- 5% */ 568 - LM87_TEMP_INT_LIMITS(10, 60), /* board */ 569 - LM87_TEMP_EXT1_LIMITS(10, 70), /* Falcon */ 551 + LM87_IN_LIMITS(0, 0x7c, 0x99), /* 2.5V: 1.8V +/- 10% */ 552 + LM87_IN_LIMITS(1, 0x4c, 0x5e), /* Vccp1: 1.2V +/- 10% */ 553 + LM87_IN_LIMITS(2, 0xac, 0xd4), /* 3.3V: 3.3V +/- 10% */ 554 + LM87_IN_LIMITS(3, 0xac, 0xd4), /* 5V: 5.0V +/- 10% */ 555 + LM87_IN_LIMITS(4, 0xac, 0xe0), /* 12V: 10.8-14V */ 556 + LM87_IN_LIMITS(5, 0x3f, 0x4f), /* Vccp2: 1.0V +/- 10% */ 557 + LM87_AIN_LIMITS(0, 0x98, 0xbb), /* AIN1: 1.66V +/- 10% */ 558 + LM87_AIN_LIMITS(1, 0x8a, 0xa9), /* AIN2: 1.5V +/- 10% */ 559 + LM87_TEMP_INT_LIMITS(0, 80 + FALCON_BOARD_TEMP_BIAS), 560 + LM87_TEMP_EXT1_LIMITS(0, FALCON_JUNC_TEMP_MAX), 570 561 0 571 562 }; 572 563 ··· 628 619 static u8 sfn4112f_lm87_channel = 0x03; /* use AIN not FAN inputs */ 629 620 630 621 static const u8 sfn4112f_lm87_regs[] = { 631 - LM87_IN_LIMITS(0, 0x83, 0x91), /* 2.5V: 1.8V +/- 5% */ 632 - LM87_IN_LIMITS(1, 0x51, 0x5a), /* Vccp1: 1.2V +/- 5% */ 633 - LM87_IN_LIMITS(2, 0xb6, 0xca), /* 3.3V: 3.3V +/- 5% */ 634 - LM87_IN_LIMITS(4, 0xb0, 0xe0), /* 12V: 11-14V */ 635 - LM87_IN_LIMITS(5, 0x44, 0x4b), /* Vccp2: 1.0V +/- 5% */ 636 - LM87_AIN_LIMITS(1, 0x91, 0xa1), /* AIN2: 1.5V +/- 5% */ 637 - LM87_TEMP_INT_LIMITS(10, 60), /* board */ 638 - LM87_TEMP_EXT1_LIMITS(10, 70), /* Falcon */ 622 + LM87_IN_LIMITS(0, 0x7c, 0x99), /* 2.5V: 1.8V +/- 10% */ 623 + LM87_IN_LIMITS(1, 0x4c, 0x5e), /* Vccp1: 1.2V +/- 10% */ 624 + LM87_IN_LIMITS(2, 0xac, 0xd4), /* 3.3V: 3.3V +/- 10% */ 625 + LM87_IN_LIMITS(4, 0xac, 0xe0), /* 12V: 10.8-14V */ 626 + LM87_IN_LIMITS(5, 0x3f, 0x4f), /* Vccp2: 1.0V +/- 10% */ 627 + LM87_AIN_LIMITS(1, 0x8a, 0xa9), /* AIN2: 1.5V +/- 10% */ 628 + LM87_TEMP_INT_LIMITS(0, 60 + FALCON_BOARD_TEMP_BIAS), 629 + LM87_TEMP_EXT1_LIMITS(0, FALCON_JUNC_TEMP_MAX), 639 630 0 640 631 }; 641 632
+1 -1
drivers/net/sfc/mcdi.c
··· 127 127 efx_dword_t reg; 128 128 129 129 /* Check for a reboot atomically with respect to efx_mcdi_copyout() */ 130 - rc = efx_mcdi_poll_reboot(efx); 130 + rc = -efx_mcdi_poll_reboot(efx); 131 131 if (rc) 132 132 goto out; 133 133
-1
drivers/net/tc35815.c
··· 1437 1437 /* Transmit complete. */ 1438 1438 lp->lstats.tx_ints++; 1439 1439 tc35815_txdone(dev); 1440 - netif_wake_queue(dev); 1441 1440 if (ret < 0) 1442 1441 ret = 0; 1443 1442 }
+5
drivers/net/usb/cdc_ether.c
··· 582 582 USB_CDC_SUBCLASS_MDLM, USB_CDC_PROTO_NONE), 583 583 .driver_info = (unsigned long) &mbm_info, 584 584 }, { 585 + /* Ericsson C3607w ver 2 */ 586 + USB_DEVICE_AND_INTERFACE_INFO(0x0bdb, 0x190b, USB_CLASS_COMM, 587 + USB_CDC_SUBCLASS_MDLM, USB_CDC_PROTO_NONE), 588 + .driver_info = (unsigned long) &mbm_info, 589 + }, { 585 590 /* Toshiba F3507g */ 586 591 USB_DEVICE_AND_INTERFACE_INFO(0x0930, 0x130b, USB_CLASS_COMM, 587 592 USB_CDC_SUBCLASS_MDLM, USB_CDC_PROTO_NONE),
+1 -1
drivers/net/wireless/iwlwifi/iwl-4965.c
··· 2008 2008 IWL_DEBUG_TX_REPLY(priv, "Retry scheduler reclaim scd_ssn " 2009 2009 "%d index %d\n", scd_ssn , index); 2010 2010 freed = iwl_tx_queue_reclaim(priv, txq_id, index); 2011 - priv->stations[sta_id].tid[tid].tfds_in_queue -= freed; 2011 + iwl_free_tfds_in_queue(priv, sta_id, tid, freed); 2012 2012 2013 2013 if (priv->mac80211_registered && 2014 2014 (iwl_queue_space(&txq->q) > txq->q.low_mark) &&
+3 -5
drivers/net/wireless/iwlwifi/iwl-5000.c
··· 1116 1116 scd_ssn , index, txq_id, txq->swq_id); 1117 1117 1118 1118 freed = iwl_tx_queue_reclaim(priv, txq_id, index); 1119 - priv->stations[sta_id].tid[tid].tfds_in_queue -= freed; 1119 + iwl_free_tfds_in_queue(priv, sta_id, tid, freed); 1120 1120 1121 1121 if (priv->mac80211_registered && 1122 1122 (iwl_queue_space(&txq->q) > txq->q.low_mark) && ··· 1144 1144 tx_resp->failure_frame); 1145 1145 1146 1146 freed = iwl_tx_queue_reclaim(priv, txq_id, index); 1147 - if (ieee80211_is_data_qos(tx_resp->frame_ctrl)) 1148 - priv->stations[sta_id].tid[tid].tfds_in_queue -= freed; 1147 + iwl_free_tfds_in_queue(priv, sta_id, tid, freed); 1149 1148 1150 1149 if (priv->mac80211_registered && 1151 1150 (iwl_queue_space(&txq->q) > txq->q.low_mark)) 1152 1151 iwl_wake_queue(priv, txq_id); 1153 1152 } 1154 1153 1155 - if (ieee80211_is_data_qos(tx_resp->frame_ctrl)) 1156 - iwl_txq_check_empty(priv, sta_id, tid, txq_id); 1154 + iwl_txq_check_empty(priv, sta_id, tid, txq_id); 1157 1155 1158 1156 if (iwl_check_bits(status, TX_ABORT_REQUIRED_MSK)) 1159 1157 IWL_ERR(priv, "TODO: Implement Tx ABORT REQUIRED!!!\n");
+1 -1
drivers/net/wireless/iwlwifi/iwl-core.c
··· 2787 2787 if ((le16_to_cpu(priv->staging_rxon.channel) != ch)) 2788 2788 priv->staging_rxon.flags = 0; 2789 2789 2790 - iwl_set_rxon_ht(priv, ht_conf); 2791 2790 iwl_set_rxon_channel(priv, conf->channel); 2791 + iwl_set_rxon_ht(priv, ht_conf); 2792 2792 2793 2793 iwl_set_flags_for_band(priv, conf->channel->band); 2794 2794 spin_unlock_irqrestore(&priv->lock, flags);
+2
drivers/net/wireless/iwlwifi/iwl-core.h
··· 451 451 int iwl_hw_tx_queue_init(struct iwl_priv *priv, 452 452 struct iwl_tx_queue *txq); 453 453 int iwl_txq_update_write_ptr(struct iwl_priv *priv, struct iwl_tx_queue *txq); 454 + void iwl_free_tfds_in_queue(struct iwl_priv *priv, 455 + int sta_id, int tid, int freed); 454 456 int iwl_tx_queue_init(struct iwl_priv *priv, struct iwl_tx_queue *txq, 455 457 int slots_num, u32 txq_id); 456 458 void iwl_tx_queue_free(struct iwl_priv *priv, int txq_id);
+20 -2
drivers/net/wireless/iwlwifi/iwl-tx.c
··· 120 120 EXPORT_SYMBOL(iwl_txq_update_write_ptr); 121 121 122 122 123 + void iwl_free_tfds_in_queue(struct iwl_priv *priv, 124 + int sta_id, int tid, int freed) 125 + { 126 + if (priv->stations[sta_id].tid[tid].tfds_in_queue >= freed) 127 + priv->stations[sta_id].tid[tid].tfds_in_queue -= freed; 128 + else { 129 + IWL_ERR(priv, "free more than tfds_in_queue (%u:%d)\n", 130 + priv->stations[sta_id].tid[tid].tfds_in_queue, 131 + freed); 132 + priv->stations[sta_id].tid[tid].tfds_in_queue = 0; 133 + } 134 + } 135 + EXPORT_SYMBOL(iwl_free_tfds_in_queue); 136 + 123 137 /** 124 138 * iwl_tx_queue_free - Deallocate DMA queue. 125 139 * @txq: Transmit queue to deallocate. ··· 1145 1131 struct iwl_queue *q = &txq->q; 1146 1132 struct iwl_tx_info *tx_info; 1147 1133 int nfreed = 0; 1134 + struct ieee80211_hdr *hdr; 1148 1135 1149 1136 if ((index >= q->n_bd) || (iwl_queue_used(q, index) == 0)) { 1150 1137 IWL_ERR(priv, "Read index for DMA queue txq id (%d), index %d, " ··· 1160 1145 1161 1146 tx_info = &txq->txb[txq->q.read_ptr]; 1162 1147 iwl_tx_status(priv, tx_info->skb[0]); 1148 + 1149 + hdr = (struct ieee80211_hdr *)tx_info->skb[0]->data; 1150 + if (hdr && ieee80211_is_data_qos(hdr->frame_control)) 1151 + nfreed++; 1163 1152 tx_info->skb[0] = NULL; 1164 1153 1165 1154 if (priv->cfg->ops->lib->txq_inval_byte_cnt_tbl) 1166 1155 priv->cfg->ops->lib->txq_inval_byte_cnt_tbl(priv, txq); 1167 1156 1168 1157 priv->cfg->ops->lib->txq_free_tfd(priv, txq); 1169 - nfreed++; 1170 1158 } 1171 1159 return nfreed; 1172 1160 } ··· 1577 1559 if (txq->q.read_ptr != (ba_resp_scd_ssn & 0xff)) { 1578 1560 /* calculate mac80211 ampdu sw queue to wake */ 1579 1561 int freed = iwl_tx_queue_reclaim(priv, scd_flow, index); 1580 - priv->stations[sta_id].tid[tid].tfds_in_queue -= freed; 1562 + iwl_free_tfds_in_queue(priv, sta_id, tid, freed); 1581 1563 1582 1564 if ((iwl_queue_space(&txq->q) > txq->q.low_mark) && 1583 1565 priv->mac80211_registered &&
+2 -1
net/core/net-sysfs.c
··· 410 410 const struct iw_statistics *iw; 411 411 ssize_t ret = -EINVAL; 412 412 413 - rtnl_lock(); 413 + if (!rtnl_trylock()) 414 + return restart_syscall(); 414 415 if (dev_isalive(dev)) { 415 416 iw = get_wireless_stats(dev); 416 417 if (iw)
+6 -1
net/ipv4/devinet.c
··· 1317 1317 { 1318 1318 int *valp = ctl->data; 1319 1319 int val = *valp; 1320 + loff_t pos = *ppos; 1320 1321 int ret = proc_dointvec(ctl, write, buffer, lenp, ppos); 1321 1322 1322 1323 if (write && *valp != val) { 1323 1324 struct net *net = ctl->extra2; 1324 1325 1325 1326 if (valp != &IPV4_DEVCONF_DFLT(net, FORWARDING)) { 1326 - if (!rtnl_trylock()) 1327 + if (!rtnl_trylock()) { 1328 + /* Restore the original values before restarting */ 1329 + *valp = val; 1330 + *ppos = pos; 1327 1331 return restart_syscall(); 1332 + } 1328 1333 if (valp == &IPV4_DEVCONF_ALL(net, FORWARDING)) { 1329 1334 inet_forward_change(net); 1330 1335 } else if (*valp) {
+14 -2
net/ipv6/addrconf.c
··· 502 502 if (p == &net->ipv6.devconf_dflt->forwarding) 503 503 return 0; 504 504 505 - if (!rtnl_trylock()) 505 + if (!rtnl_trylock()) { 506 + /* Restore the original values before restarting */ 507 + *p = old; 506 508 return restart_syscall(); 509 + } 507 510 508 511 if (p == &net->ipv6.devconf_all->forwarding) { 509 512 __s32 newf = net->ipv6.devconf_all->forwarding; ··· 4045 4042 { 4046 4043 int *valp = ctl->data; 4047 4044 int val = *valp; 4045 + loff_t pos = *ppos; 4048 4046 int ret; 4049 4047 4050 4048 ret = proc_dointvec(ctl, write, buffer, lenp, ppos); 4051 4049 4052 4050 if (write) 4053 4051 ret = addrconf_fixup_forwarding(ctl, valp, val); 4052 + if (ret) 4053 + *ppos = pos; 4054 4054 return ret; 4055 4055 } 4056 4056 ··· 4095 4089 if (p == &net->ipv6.devconf_dflt->disable_ipv6) 4096 4090 return 0; 4097 4091 4098 - if (!rtnl_trylock()) 4092 + if (!rtnl_trylock()) { 4093 + /* Restore the original values before restarting */ 4094 + *p = old; 4099 4095 return restart_syscall(); 4096 + } 4100 4097 4101 4098 if (p == &net->ipv6.devconf_all->disable_ipv6) { 4102 4099 __s32 newf = net->ipv6.devconf_all->disable_ipv6; ··· 4118 4109 { 4119 4110 int *valp = ctl->data; 4120 4111 int val = *valp; 4112 + loff_t pos = *ppos; 4121 4113 int ret; 4122 4114 4123 4115 ret = proc_dointvec(ctl, write, buffer, lenp, ppos); 4124 4116 4125 4117 if (write) 4126 4118 ret = addrconf_disable_ipv6(ctl, valp, val); 4119 + if (ret) 4120 + *ppos = pos; 4127 4121 return ret; 4128 4122 } 4129 4123