diff options
| -rw-r--r-- | drivers/atm/iphase.c | 6 | ||||
| -rw-r--r-- | drivers/atm/iphase.h | 2 | ||||
| -rw-r--r-- | drivers/atm/solos-pci.c | 8 | ||||
| -rw-r--r-- | drivers/isdn/sc/interrupt.c | 18 | ||||
| -rw-r--r-- | drivers/net/fec.c | 3 | ||||
| -rw-r--r-- | drivers/net/r8169.c | 65 | ||||
| -rw-r--r-- | drivers/net/wimax/i2400m/rx.c | 26 | ||||
| -rw-r--r-- | include/net/bluetooth/bluetooth.h | 18 | ||||
| -rw-r--r-- | net/atm/mpc.c | 2 | ||||
| -rw-r--r-- | net/bluetooth/l2cap.c | 62 | ||||
| -rw-r--r-- | net/bluetooth/rfcomm/sock.c | 4 | ||||
| -rw-r--r-- | net/core/ethtool.c | 6 |
12 files changed, 126 insertions, 94 deletions
diff --git a/drivers/atm/iphase.c b/drivers/atm/iphase.c index 8b358d7d958f..9309d4724e13 100644 --- a/drivers/atm/iphase.c +++ b/drivers/atm/iphase.c | |||
| @@ -3156,7 +3156,6 @@ static int __devinit ia_init_one(struct pci_dev *pdev, | |||
| 3156 | { | 3156 | { |
| 3157 | struct atm_dev *dev; | 3157 | struct atm_dev *dev; |
| 3158 | IADEV *iadev; | 3158 | IADEV *iadev; |
| 3159 | unsigned long flags; | ||
| 3160 | int ret; | 3159 | int ret; |
| 3161 | 3160 | ||
| 3162 | iadev = kzalloc(sizeof(*iadev), GFP_KERNEL); | 3161 | iadev = kzalloc(sizeof(*iadev), GFP_KERNEL); |
| @@ -3188,19 +3187,14 @@ static int __devinit ia_init_one(struct pci_dev *pdev, | |||
| 3188 | ia_dev[iadev_count] = iadev; | 3187 | ia_dev[iadev_count] = iadev; |
| 3189 | _ia_dev[iadev_count] = dev; | 3188 | _ia_dev[iadev_count] = dev; |
| 3190 | iadev_count++; | 3189 | iadev_count++; |
| 3191 | spin_lock_init(&iadev->misc_lock); | ||
| 3192 | /* First fixes first. I don't want to think about this now. */ | ||
| 3193 | spin_lock_irqsave(&iadev->misc_lock, flags); | ||
| 3194 | if (ia_init(dev) || ia_start(dev)) { | 3190 | if (ia_init(dev) || ia_start(dev)) { |
| 3195 | IF_INIT(printk("IA register failed!\n");) | 3191 | IF_INIT(printk("IA register failed!\n");) |
| 3196 | iadev_count--; | 3192 | iadev_count--; |
| 3197 | ia_dev[iadev_count] = NULL; | 3193 | ia_dev[iadev_count] = NULL; |
| 3198 | _ia_dev[iadev_count] = NULL; | 3194 | _ia_dev[iadev_count] = NULL; |
| 3199 | spin_unlock_irqrestore(&iadev->misc_lock, flags); | ||
| 3200 | ret = -EINVAL; | 3195 | ret = -EINVAL; |
| 3201 | goto err_out_deregister_dev; | 3196 | goto err_out_deregister_dev; |
| 3202 | } | 3197 | } |
| 3203 | spin_unlock_irqrestore(&iadev->misc_lock, flags); | ||
| 3204 | IF_EVENT(printk("iadev_count = %d\n", iadev_count);) | 3198 | IF_EVENT(printk("iadev_count = %d\n", iadev_count);) |
| 3205 | 3199 | ||
| 3206 | iadev->next_board = ia_boards; | 3200 | iadev->next_board = ia_boards; |
diff --git a/drivers/atm/iphase.h b/drivers/atm/iphase.h index b2cd20f549cb..077735e0e04b 100644 --- a/drivers/atm/iphase.h +++ b/drivers/atm/iphase.h | |||
| @@ -1022,7 +1022,7 @@ typedef struct iadev_t { | |||
| 1022 | struct dle_q rx_dle_q; | 1022 | struct dle_q rx_dle_q; |
| 1023 | struct free_desc_q *rx_free_desc_qhead; | 1023 | struct free_desc_q *rx_free_desc_qhead; |
| 1024 | struct sk_buff_head rx_dma_q; | 1024 | struct sk_buff_head rx_dma_q; |
| 1025 | spinlock_t rx_lock, misc_lock; | 1025 | spinlock_t rx_lock; |
| 1026 | struct atm_vcc **rx_open; /* list of all open VCs */ | 1026 | struct atm_vcc **rx_open; /* list of all open VCs */ |
| 1027 | u16 num_rx_desc, rx_buf_sz, rxing; | 1027 | u16 num_rx_desc, rx_buf_sz, rxing; |
| 1028 | u32 rx_pkt_ram, rx_tmp_cnt; | 1028 | u32 rx_pkt_ram, rx_tmp_cnt; |
diff --git a/drivers/atm/solos-pci.c b/drivers/atm/solos-pci.c index f916ddf63938..f46138ab38b6 100644 --- a/drivers/atm/solos-pci.c +++ b/drivers/atm/solos-pci.c | |||
| @@ -444,6 +444,7 @@ static ssize_t console_show(struct device *dev, struct device_attribute *attr, | |||
| 444 | struct atm_dev *atmdev = container_of(dev, struct atm_dev, class_dev); | 444 | struct atm_dev *atmdev = container_of(dev, struct atm_dev, class_dev); |
| 445 | struct solos_card *card = atmdev->dev_data; | 445 | struct solos_card *card = atmdev->dev_data; |
| 446 | struct sk_buff *skb; | 446 | struct sk_buff *skb; |
| 447 | unsigned int len; | ||
| 447 | 448 | ||
| 448 | spin_lock(&card->cli_queue_lock); | 449 | spin_lock(&card->cli_queue_lock); |
| 449 | skb = skb_dequeue(&card->cli_queue[SOLOS_CHAN(atmdev)]); | 450 | skb = skb_dequeue(&card->cli_queue[SOLOS_CHAN(atmdev)]); |
| @@ -451,11 +452,12 @@ static ssize_t console_show(struct device *dev, struct device_attribute *attr, | |||
| 451 | if(skb == NULL) | 452 | if(skb == NULL) |
| 452 | return sprintf(buf, "No data.\n"); | 453 | return sprintf(buf, "No data.\n"); |
| 453 | 454 | ||
| 454 | memcpy(buf, skb->data, skb->len); | 455 | len = skb->len; |
| 455 | dev_dbg(&card->dev->dev, "len: %d\n", skb->len); | 456 | memcpy(buf, skb->data, len); |
| 457 | dev_dbg(&card->dev->dev, "len: %d\n", len); | ||
| 456 | 458 | ||
| 457 | kfree_skb(skb); | 459 | kfree_skb(skb); |
| 458 | return skb->len; | 460 | return len; |
| 459 | } | 461 | } |
| 460 | 462 | ||
| 461 | static int send_command(struct solos_card *card, int dev, const char *buf, size_t size) | 463 | static int send_command(struct solos_card *card, int dev, const char *buf, size_t size) |
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/fec.c b/drivers/net/fec.c index 768b840aeb6b..e83f67d22fe3 100644 --- a/drivers/net/fec.c +++ b/drivers/net/fec.c | |||
| @@ -1311,6 +1311,9 @@ fec_probe(struct platform_device *pdev) | |||
| 1311 | if (ret) | 1311 | if (ret) |
| 1312 | goto failed_mii_init; | 1312 | goto failed_mii_init; |
| 1313 | 1313 | ||
| 1314 | /* Carrier starts down, phylib will bring it up */ | ||
| 1315 | netif_carrier_off(ndev); | ||
| 1316 | |||
| 1314 | ret = register_netdev(ndev); | 1317 | ret = register_netdev(ndev); |
| 1315 | if (ret) | 1318 | if (ret) |
| 1316 | goto failed_register; | 1319 | goto failed_register; |
diff --git a/drivers/net/r8169.c b/drivers/net/r8169.c index fe3b7622fba0..bc669a40ae96 100644 --- a/drivers/net/r8169.c +++ b/drivers/net/r8169.c | |||
| @@ -1217,7 +1217,8 @@ static void rtl8169_update_counters(struct net_device *dev) | |||
| 1217 | if ((RTL_R8(ChipCmd) & CmdRxEnb) == 0) | 1217 | if ((RTL_R8(ChipCmd) & CmdRxEnb) == 0) |
| 1218 | return; | 1218 | return; |
| 1219 | 1219 | ||
| 1220 | counters = pci_alloc_consistent(tp->pci_dev, sizeof(*counters), &paddr); | 1220 | counters = dma_alloc_coherent(&tp->pci_dev->dev, sizeof(*counters), |
| 1221 | &paddr, GFP_KERNEL); | ||
| 1221 | if (!counters) | 1222 | if (!counters) |
| 1222 | return; | 1223 | return; |
| 1223 | 1224 | ||
| @@ -1238,7 +1239,8 @@ static void rtl8169_update_counters(struct net_device *dev) | |||
| 1238 | RTL_W32(CounterAddrLow, 0); | 1239 | RTL_W32(CounterAddrLow, 0); |
| 1239 | RTL_W32(CounterAddrHigh, 0); | 1240 | RTL_W32(CounterAddrHigh, 0); |
| 1240 | 1241 | ||
| 1241 | pci_free_consistent(tp->pci_dev, sizeof(*counters), counters, paddr); | 1242 | dma_free_coherent(&tp->pci_dev->dev, sizeof(*counters), counters, |
| 1243 | paddr); | ||
| 1242 | } | 1244 | } |
| 1243 | 1245 | ||
| 1244 | static void rtl8169_get_ethtool_stats(struct net_device *dev, | 1246 | static void rtl8169_get_ethtool_stats(struct net_device *dev, |
| @@ -3298,15 +3300,15 @@ static int rtl8169_open(struct net_device *dev) | |||
| 3298 | 3300 | ||
| 3299 | /* | 3301 | /* |
| 3300 | * Rx and Tx desscriptors needs 256 bytes alignment. | 3302 | * Rx and Tx desscriptors needs 256 bytes alignment. |
| 3301 | * pci_alloc_consistent provides more. | 3303 | * dma_alloc_coherent provides more. |
| 3302 | */ | 3304 | */ |
| 3303 | tp->TxDescArray = pci_alloc_consistent(pdev, R8169_TX_RING_BYTES, | 3305 | tp->TxDescArray = dma_alloc_coherent(&pdev->dev, R8169_TX_RING_BYTES, |
| 3304 | &tp->TxPhyAddr); | 3306 | &tp->TxPhyAddr, GFP_KERNEL); |
| 3305 | if (!tp->TxDescArray) | 3307 | if (!tp->TxDescArray) |
| 3306 | goto err_pm_runtime_put; | 3308 | goto err_pm_runtime_put; |
| 3307 | 3309 | ||
| 3308 | tp->RxDescArray = pci_alloc_consistent(pdev, R8169_RX_RING_BYTES, | 3310 | tp->RxDescArray = dma_alloc_coherent(&pdev->dev, R8169_RX_RING_BYTES, |
| 3309 | &tp->RxPhyAddr); | 3311 | &tp->RxPhyAddr, GFP_KERNEL); |
| 3310 | if (!tp->RxDescArray) | 3312 | if (!tp->RxDescArray) |
| 3311 | goto err_free_tx_0; | 3313 | goto err_free_tx_0; |
| 3312 | 3314 | ||
| @@ -3340,12 +3342,12 @@ out: | |||
| 3340 | err_release_ring_2: | 3342 | err_release_ring_2: |
| 3341 | rtl8169_rx_clear(tp); | 3343 | rtl8169_rx_clear(tp); |
| 3342 | err_free_rx_1: | 3344 | err_free_rx_1: |
| 3343 | pci_free_consistent(pdev, R8169_RX_RING_BYTES, tp->RxDescArray, | 3345 | dma_free_coherent(&pdev->dev, R8169_RX_RING_BYTES, tp->RxDescArray, |
| 3344 | tp->RxPhyAddr); | 3346 | tp->RxPhyAddr); |
| 3345 | tp->RxDescArray = NULL; | 3347 | tp->RxDescArray = NULL; |
| 3346 | err_free_tx_0: | 3348 | err_free_tx_0: |
| 3347 | pci_free_consistent(pdev, R8169_TX_RING_BYTES, tp->TxDescArray, | 3349 | dma_free_coherent(&pdev->dev, R8169_TX_RING_BYTES, tp->TxDescArray, |
| 3348 | tp->TxPhyAddr); | 3350 | tp->TxPhyAddr); |
| 3349 | tp->TxDescArray = NULL; | 3351 | tp->TxDescArray = NULL; |
| 3350 | err_pm_runtime_put: | 3352 | err_pm_runtime_put: |
| 3351 | pm_runtime_put_noidle(&pdev->dev); | 3353 | pm_runtime_put_noidle(&pdev->dev); |
| @@ -3981,7 +3983,7 @@ static void rtl8169_free_rx_skb(struct rtl8169_private *tp, | |||
| 3981 | { | 3983 | { |
| 3982 | struct pci_dev *pdev = tp->pci_dev; | 3984 | struct pci_dev *pdev = tp->pci_dev; |
| 3983 | 3985 | ||
| 3984 | pci_unmap_single(pdev, le64_to_cpu(desc->addr), tp->rx_buf_sz, | 3986 | dma_unmap_single(&pdev->dev, le64_to_cpu(desc->addr), tp->rx_buf_sz, |
| 3985 | PCI_DMA_FROMDEVICE); | 3987 | PCI_DMA_FROMDEVICE); |
| 3986 | dev_kfree_skb(*sk_buff); | 3988 | dev_kfree_skb(*sk_buff); |
| 3987 | *sk_buff = NULL; | 3989 | *sk_buff = NULL; |
| @@ -4006,7 +4008,7 @@ static inline void rtl8169_map_to_asic(struct RxDesc *desc, dma_addr_t mapping, | |||
| 4006 | static struct sk_buff *rtl8169_alloc_rx_skb(struct pci_dev *pdev, | 4008 | static struct sk_buff *rtl8169_alloc_rx_skb(struct pci_dev *pdev, |
| 4007 | struct net_device *dev, | 4009 | struct net_device *dev, |
| 4008 | struct RxDesc *desc, int rx_buf_sz, | 4010 | struct RxDesc *desc, int rx_buf_sz, |
| 4009 | unsigned int align) | 4011 | unsigned int align, gfp_t gfp) |
| 4010 | { | 4012 | { |
| 4011 | struct sk_buff *skb; | 4013 | struct sk_buff *skb; |
| 4012 | dma_addr_t mapping; | 4014 | dma_addr_t mapping; |
| @@ -4014,13 +4016,13 @@ static struct sk_buff *rtl8169_alloc_rx_skb(struct pci_dev *pdev, | |||
| 4014 | 4016 | ||
| 4015 | pad = align ? align : NET_IP_ALIGN; | 4017 | pad = align ? align : NET_IP_ALIGN; |
| 4016 | 4018 | ||
| 4017 | skb = netdev_alloc_skb(dev, rx_buf_sz + pad); | 4019 | skb = __netdev_alloc_skb(dev, rx_buf_sz + pad, gfp); |
| 4018 | if (!skb) | 4020 | if (!skb) |
| 4019 | goto err_out; | 4021 | goto err_out; |
| 4020 | 4022 | ||
| 4021 | skb_reserve(skb, align ? ((pad - 1) & (unsigned long)skb->data) : pad); | 4023 | skb_reserve(skb, align ? ((pad - 1) & (unsigned long)skb->data) : pad); |
| 4022 | 4024 | ||
| 4023 | mapping = pci_map_single(pdev, skb->data, rx_buf_sz, | 4025 | mapping = dma_map_single(&pdev->dev, skb->data, rx_buf_sz, |
| 4024 | PCI_DMA_FROMDEVICE); | 4026 | PCI_DMA_FROMDEVICE); |
| 4025 | 4027 | ||
| 4026 | rtl8169_map_to_asic(desc, mapping, rx_buf_sz); | 4028 | rtl8169_map_to_asic(desc, mapping, rx_buf_sz); |
| @@ -4045,7 +4047,7 @@ static void rtl8169_rx_clear(struct rtl8169_private *tp) | |||
| 4045 | } | 4047 | } |
| 4046 | 4048 | ||
| 4047 | static u32 rtl8169_rx_fill(struct rtl8169_private *tp, struct net_device *dev, | 4049 | static u32 rtl8169_rx_fill(struct rtl8169_private *tp, struct net_device *dev, |
| 4048 | u32 start, u32 end) | 4050 | u32 start, u32 end, gfp_t gfp) |
| 4049 | { | 4051 | { |
| 4050 | u32 cur; | 4052 | u32 cur; |
| 4051 | 4053 | ||
| @@ -4060,7 +4062,7 @@ static u32 rtl8169_rx_fill(struct rtl8169_private *tp, struct net_device *dev, | |||
| 4060 | 4062 | ||
| 4061 | skb = rtl8169_alloc_rx_skb(tp->pci_dev, dev, | 4063 | skb = rtl8169_alloc_rx_skb(tp->pci_dev, dev, |
| 4062 | tp->RxDescArray + i, | 4064 | tp->RxDescArray + i, |
| 4063 | tp->rx_buf_sz, tp->align); | 4065 | tp->rx_buf_sz, tp->align, gfp); |
| 4064 | if (!skb) | 4066 | if (!skb) |
| 4065 | break; | 4067 | break; |
| 4066 | 4068 | ||
| @@ -4088,7 +4090,7 @@ static int rtl8169_init_ring(struct net_device *dev) | |||
| 4088 | memset(tp->tx_skb, 0x0, NUM_TX_DESC * sizeof(struct ring_info)); | 4090 | memset(tp->tx_skb, 0x0, NUM_TX_DESC * sizeof(struct ring_info)); |
| 4089 | memset(tp->Rx_skbuff, 0x0, NUM_RX_DESC * sizeof(struct sk_buff *)); | 4091 | memset(tp->Rx_skbuff, 0x0, NUM_RX_DESC * sizeof(struct sk_buff *)); |
| 4090 | 4092 | ||
| 4091 | if (rtl8169_rx_fill(tp, dev, 0, NUM_RX_DESC) != NUM_RX_DESC) | 4093 | if (rtl8169_rx_fill(tp, dev, 0, NUM_RX_DESC, GFP_KERNEL) != NUM_RX_DESC) |
| 4092 | goto err_out; | 4094 | goto err_out; |
| 4093 | 4095 | ||
| 4094 | rtl8169_mark_as_last_descriptor(tp->RxDescArray + NUM_RX_DESC - 1); | 4096 | rtl8169_mark_as_last_descriptor(tp->RxDescArray + NUM_RX_DESC - 1); |
| @@ -4105,7 +4107,8 @@ static void rtl8169_unmap_tx_skb(struct pci_dev *pdev, struct ring_info *tx_skb, | |||
| 4105 | { | 4107 | { |
| 4106 | unsigned int len = tx_skb->len; | 4108 | unsigned int len = tx_skb->len; |
| 4107 | 4109 | ||
| 4108 | pci_unmap_single(pdev, le64_to_cpu(desc->addr), len, PCI_DMA_TODEVICE); | 4110 | dma_unmap_single(&pdev->dev, le64_to_cpu(desc->addr), len, |
| 4111 | PCI_DMA_TODEVICE); | ||
| 4109 | desc->opts1 = 0x00; | 4112 | desc->opts1 = 0x00; |
| 4110 | desc->opts2 = 0x00; | 4113 | desc->opts2 = 0x00; |
| 4111 | desc->addr = 0x00; | 4114 | desc->addr = 0x00; |
| @@ -4249,7 +4252,8 @@ static int rtl8169_xmit_frags(struct rtl8169_private *tp, struct sk_buff *skb, | |||
| 4249 | txd = tp->TxDescArray + entry; | 4252 | txd = tp->TxDescArray + entry; |
| 4250 | len = frag->size; | 4253 | len = frag->size; |
| 4251 | addr = ((void *) page_address(frag->page)) + frag->page_offset; | 4254 | addr = ((void *) page_address(frag->page)) + frag->page_offset; |
| 4252 | mapping = pci_map_single(tp->pci_dev, addr, len, PCI_DMA_TODEVICE); | 4255 | mapping = dma_map_single(&tp->pci_dev->dev, addr, len, |
| 4256 | PCI_DMA_TODEVICE); | ||
| 4253 | 4257 | ||
| 4254 | /* anti gcc 2.95.3 bugware (sic) */ | 4258 | /* anti gcc 2.95.3 bugware (sic) */ |
| 4255 | status = opts1 | len | (RingEnd * !((entry + 1) % NUM_TX_DESC)); | 4259 | status = opts1 | len | (RingEnd * !((entry + 1) % NUM_TX_DESC)); |
| @@ -4319,7 +4323,8 @@ static netdev_tx_t rtl8169_start_xmit(struct sk_buff *skb, | |||
| 4319 | tp->tx_skb[entry].skb = skb; | 4323 | tp->tx_skb[entry].skb = skb; |
| 4320 | } | 4324 | } |
| 4321 | 4325 | ||
| 4322 | mapping = pci_map_single(tp->pci_dev, skb->data, len, PCI_DMA_TODEVICE); | 4326 | mapping = dma_map_single(&tp->pci_dev->dev, skb->data, len, |
| 4327 | PCI_DMA_TODEVICE); | ||
| 4323 | 4328 | ||
| 4324 | tp->tx_skb[entry].len = len; | 4329 | tp->tx_skb[entry].len = len; |
| 4325 | txd->addr = cpu_to_le64(mapping); | 4330 | txd->addr = cpu_to_le64(mapping); |
| @@ -4482,8 +4487,8 @@ static inline bool rtl8169_try_rx_copy(struct sk_buff **sk_buff, | |||
| 4482 | if (!skb) | 4487 | if (!skb) |
| 4483 | goto out; | 4488 | goto out; |
| 4484 | 4489 | ||
| 4485 | pci_dma_sync_single_for_cpu(tp->pci_dev, addr, pkt_size, | 4490 | dma_sync_single_for_cpu(&tp->pci_dev->dev, addr, pkt_size, |
| 4486 | PCI_DMA_FROMDEVICE); | 4491 | PCI_DMA_FROMDEVICE); |
| 4487 | skb_copy_from_linear_data(*sk_buff, skb->data, pkt_size); | 4492 | skb_copy_from_linear_data(*sk_buff, skb->data, pkt_size); |
| 4488 | *sk_buff = skb; | 4493 | *sk_buff = skb; |
| 4489 | done = true; | 4494 | done = true; |
| @@ -4552,11 +4557,11 @@ static int rtl8169_rx_interrupt(struct net_device *dev, | |||
| 4552 | } | 4557 | } |
| 4553 | 4558 | ||
| 4554 | if (rtl8169_try_rx_copy(&skb, tp, pkt_size, addr)) { | 4559 | if (rtl8169_try_rx_copy(&skb, tp, pkt_size, addr)) { |
| 4555 | pci_dma_sync_single_for_device(pdev, addr, | 4560 | dma_sync_single_for_device(&pdev->dev, addr, |
| 4556 | pkt_size, PCI_DMA_FROMDEVICE); | 4561 | pkt_size, PCI_DMA_FROMDEVICE); |
| 4557 | rtl8169_mark_to_asic(desc, tp->rx_buf_sz); | 4562 | rtl8169_mark_to_asic(desc, tp->rx_buf_sz); |
| 4558 | } else { | 4563 | } else { |
| 4559 | pci_unmap_single(pdev, addr, tp->rx_buf_sz, | 4564 | dma_unmap_single(&pdev->dev, addr, tp->rx_buf_sz, |
| 4560 | PCI_DMA_FROMDEVICE); | 4565 | PCI_DMA_FROMDEVICE); |
| 4561 | tp->Rx_skbuff[entry] = NULL; | 4566 | tp->Rx_skbuff[entry] = NULL; |
| 4562 | } | 4567 | } |
| @@ -4587,7 +4592,7 @@ static int rtl8169_rx_interrupt(struct net_device *dev, | |||
| 4587 | count = cur_rx - tp->cur_rx; | 4592 | count = cur_rx - tp->cur_rx; |
| 4588 | tp->cur_rx = cur_rx; | 4593 | tp->cur_rx = cur_rx; |
| 4589 | 4594 | ||
| 4590 | delta = rtl8169_rx_fill(tp, dev, tp->dirty_rx, tp->cur_rx); | 4595 | delta = rtl8169_rx_fill(tp, dev, tp->dirty_rx, tp->cur_rx, GFP_ATOMIC); |
| 4591 | if (!delta && count) | 4596 | if (!delta && count) |
| 4592 | netif_info(tp, intr, dev, "no Rx buffer allocated\n"); | 4597 | netif_info(tp, intr, dev, "no Rx buffer allocated\n"); |
| 4593 | tp->dirty_rx += delta; | 4598 | tp->dirty_rx += delta; |
| @@ -4773,10 +4778,10 @@ static int rtl8169_close(struct net_device *dev) | |||
| 4773 | 4778 | ||
| 4774 | free_irq(dev->irq, dev); | 4779 | free_irq(dev->irq, dev); |
| 4775 | 4780 | ||
| 4776 | pci_free_consistent(pdev, R8169_RX_RING_BYTES, tp->RxDescArray, | 4781 | dma_free_coherent(&pdev->dev, R8169_RX_RING_BYTES, tp->RxDescArray, |
| 4777 | tp->RxPhyAddr); | 4782 | tp->RxPhyAddr); |
| 4778 | pci_free_consistent(pdev, R8169_TX_RING_BYTES, tp->TxDescArray, | 4783 | dma_free_coherent(&pdev->dev, R8169_TX_RING_BYTES, tp->TxDescArray, |
| 4779 | tp->TxPhyAddr); | 4784 | tp->TxPhyAddr); |
| 4780 | tp->TxDescArray = NULL; | 4785 | tp->TxDescArray = NULL; |
| 4781 | tp->RxDescArray = NULL; | 4786 | tp->RxDescArray = NULL; |
| 4782 | 4787 | ||
diff --git a/drivers/net/wimax/i2400m/rx.c b/drivers/net/wimax/i2400m/rx.c index c4876d029201..844133b44af0 100644 --- a/drivers/net/wimax/i2400m/rx.c +++ b/drivers/net/wimax/i2400m/rx.c | |||
| @@ -1244,16 +1244,16 @@ int i2400m_rx(struct i2400m *i2400m, struct sk_buff *skb) | |||
| 1244 | int i, result; | 1244 | int i, result; |
| 1245 | struct device *dev = i2400m_dev(i2400m); | 1245 | struct device *dev = i2400m_dev(i2400m); |
| 1246 | const struct i2400m_msg_hdr *msg_hdr; | 1246 | const struct i2400m_msg_hdr *msg_hdr; |
| 1247 | size_t pl_itr, pl_size, skb_len; | 1247 | size_t pl_itr, pl_size; |
| 1248 | unsigned long flags; | 1248 | unsigned long flags; |
| 1249 | unsigned num_pls, single_last; | 1249 | unsigned num_pls, single_last, skb_len; |
| 1250 | 1250 | ||
| 1251 | skb_len = skb->len; | 1251 | skb_len = skb->len; |
| 1252 | d_fnstart(4, dev, "(i2400m %p skb %p [size %zu])\n", | 1252 | d_fnstart(4, dev, "(i2400m %p skb %p [size %u])\n", |
| 1253 | i2400m, skb, skb_len); | 1253 | i2400m, skb, skb_len); |
| 1254 | result = -EIO; | 1254 | result = -EIO; |
| 1255 | msg_hdr = (void *) skb->data; | 1255 | msg_hdr = (void *) skb->data; |
| 1256 | result = i2400m_rx_msg_hdr_check(i2400m, msg_hdr, skb->len); | 1256 | result = i2400m_rx_msg_hdr_check(i2400m, msg_hdr, skb_len); |
| 1257 | if (result < 0) | 1257 | if (result < 0) |
| 1258 | goto error_msg_hdr_check; | 1258 | goto error_msg_hdr_check; |
| 1259 | result = -EIO; | 1259 | result = -EIO; |
| @@ -1261,10 +1261,10 @@ int i2400m_rx(struct i2400m *i2400m, struct sk_buff *skb) | |||
| 1261 | pl_itr = sizeof(*msg_hdr) + /* Check payload descriptor(s) */ | 1261 | pl_itr = sizeof(*msg_hdr) + /* Check payload descriptor(s) */ |
| 1262 | num_pls * sizeof(msg_hdr->pld[0]); | 1262 | num_pls * sizeof(msg_hdr->pld[0]); |
| 1263 | pl_itr = ALIGN(pl_itr, I2400M_PL_ALIGN); | 1263 | pl_itr = ALIGN(pl_itr, I2400M_PL_ALIGN); |
| 1264 | if (pl_itr > skb->len) { /* got all the payload descriptors? */ | 1264 | if (pl_itr > skb_len) { /* got all the payload descriptors? */ |
| 1265 | dev_err(dev, "RX: HW BUG? message too short (%u bytes) for " | 1265 | dev_err(dev, "RX: HW BUG? message too short (%u bytes) for " |
| 1266 | "%u payload descriptors (%zu each, total %zu)\n", | 1266 | "%u payload descriptors (%zu each, total %zu)\n", |
| 1267 | skb->len, num_pls, sizeof(msg_hdr->pld[0]), pl_itr); | 1267 | skb_len, num_pls, sizeof(msg_hdr->pld[0]), pl_itr); |
| 1268 | goto error_pl_descr_short; | 1268 | goto error_pl_descr_short; |
| 1269 | } | 1269 | } |
| 1270 | /* Walk each payload payload--check we really got it */ | 1270 | /* Walk each payload payload--check we really got it */ |
| @@ -1272,7 +1272,7 @@ int i2400m_rx(struct i2400m *i2400m, struct sk_buff *skb) | |||
| 1272 | /* work around old gcc warnings */ | 1272 | /* work around old gcc warnings */ |
| 1273 | pl_size = i2400m_pld_size(&msg_hdr->pld[i]); | 1273 | pl_size = i2400m_pld_size(&msg_hdr->pld[i]); |
| 1274 | result = i2400m_rx_pl_descr_check(i2400m, &msg_hdr->pld[i], | 1274 | result = i2400m_rx_pl_descr_check(i2400m, &msg_hdr->pld[i], |
| 1275 | pl_itr, skb->len); | 1275 | pl_itr, skb_len); |
| 1276 | if (result < 0) | 1276 | if (result < 0) |
| 1277 | goto error_pl_descr_check; | 1277 | goto error_pl_descr_check; |
| 1278 | single_last = num_pls == 1 || i == num_pls - 1; | 1278 | single_last = num_pls == 1 || i == num_pls - 1; |
| @@ -1290,16 +1290,16 @@ int i2400m_rx(struct i2400m *i2400m, struct sk_buff *skb) | |||
| 1290 | if (i < i2400m->rx_pl_min) | 1290 | if (i < i2400m->rx_pl_min) |
| 1291 | i2400m->rx_pl_min = i; | 1291 | i2400m->rx_pl_min = i; |
| 1292 | i2400m->rx_num++; | 1292 | i2400m->rx_num++; |
| 1293 | i2400m->rx_size_acc += skb->len; | 1293 | i2400m->rx_size_acc += skb_len; |
| 1294 | if (skb->len < i2400m->rx_size_min) | 1294 | if (skb_len < i2400m->rx_size_min) |
| 1295 | i2400m->rx_size_min = skb->len; | 1295 | i2400m->rx_size_min = skb_len; |
| 1296 | if (skb->len > i2400m->rx_size_max) | 1296 | if (skb_len > i2400m->rx_size_max) |
| 1297 | i2400m->rx_size_max = skb->len; | 1297 | i2400m->rx_size_max = skb_len; |
| 1298 | spin_unlock_irqrestore(&i2400m->rx_lock, flags); | 1298 | spin_unlock_irqrestore(&i2400m->rx_lock, flags); |
| 1299 | error_pl_descr_check: | 1299 | error_pl_descr_check: |
| 1300 | error_pl_descr_short: | 1300 | error_pl_descr_short: |
| 1301 | error_msg_hdr_check: | 1301 | error_msg_hdr_check: |
| 1302 | d_fnend(4, dev, "(i2400m %p skb %p [size %zu]) = %d\n", | 1302 | d_fnend(4, dev, "(i2400m %p skb %p [size %u]) = %d\n", |
| 1303 | i2400m, skb, skb_len, result); | 1303 | i2400m, skb, skb_len, result); |
| 1304 | return result; | 1304 | return result; |
| 1305 | } | 1305 | } |
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/atm/mpc.c b/net/atm/mpc.c index 622b471e14e0..74bcc662c3dd 100644 --- a/net/atm/mpc.c +++ b/net/atm/mpc.c | |||
| @@ -778,7 +778,7 @@ static void mpc_push(struct atm_vcc *vcc, struct sk_buff *skb) | |||
| 778 | eg->packets_rcvd++; | 778 | eg->packets_rcvd++; |
| 779 | mpc->eg_ops->put(eg); | 779 | mpc->eg_ops->put(eg); |
| 780 | 780 | ||
| 781 | memset(ATM_SKB(skb), 0, sizeof(struct atm_skb_data)); | 781 | memset(ATM_SKB(new_skb), 0, sizeof(struct atm_skb_data)); |
| 782 | netif_rx(new_skb); | 782 | netif_rx(new_skb); |
| 783 | } | 783 | } |
| 784 | 784 | ||
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/core/ethtool.c b/net/core/ethtool.c index 7d7e572cedc7..685c7005e87f 100644 --- a/net/core/ethtool.c +++ b/net/core/ethtool.c | |||
| @@ -355,7 +355,7 @@ static noinline_for_stack int ethtool_get_rxnfc(struct net_device *dev, | |||
| 355 | if (info.cmd == ETHTOOL_GRXCLSRLALL) { | 355 | if (info.cmd == ETHTOOL_GRXCLSRLALL) { |
| 356 | if (info.rule_cnt > 0) { | 356 | if (info.rule_cnt > 0) { |
| 357 | if (info.rule_cnt <= KMALLOC_MAX_SIZE / sizeof(u32)) | 357 | if (info.rule_cnt <= KMALLOC_MAX_SIZE / sizeof(u32)) |
| 358 | rule_buf = kmalloc(info.rule_cnt * sizeof(u32), | 358 | rule_buf = kzalloc(info.rule_cnt * sizeof(u32), |
| 359 | GFP_USER); | 359 | GFP_USER); |
| 360 | if (!rule_buf) | 360 | if (!rule_buf) |
| 361 | return -ENOMEM; | 361 | return -ENOMEM; |
| @@ -404,7 +404,7 @@ static noinline_for_stack int ethtool_get_rxfh_indir(struct net_device *dev, | |||
| 404 | (KMALLOC_MAX_SIZE - sizeof(*indir)) / sizeof(*indir->ring_index)) | 404 | (KMALLOC_MAX_SIZE - sizeof(*indir)) / sizeof(*indir->ring_index)) |
| 405 | return -ENOMEM; | 405 | return -ENOMEM; |
| 406 | full_size = sizeof(*indir) + sizeof(*indir->ring_index) * table_size; | 406 | full_size = sizeof(*indir) + sizeof(*indir->ring_index) * table_size; |
| 407 | indir = kmalloc(full_size, GFP_USER); | 407 | indir = kzalloc(full_size, GFP_USER); |
| 408 | if (!indir) | 408 | if (!indir) |
| 409 | return -ENOMEM; | 409 | return -ENOMEM; |
| 410 | 410 | ||
| @@ -579,7 +579,7 @@ static int ethtool_get_rx_ntuple(struct net_device *dev, void __user *useraddr) | |||
| 579 | 579 | ||
| 580 | gstrings.len = ret; | 580 | gstrings.len = ret; |
| 581 | 581 | ||
| 582 | data = kmalloc(gstrings.len * ETH_GSTRING_LEN, GFP_USER); | 582 | data = kzalloc(gstrings.len * ETH_GSTRING_LEN, GFP_USER); |
| 583 | if (!data) | 583 | if (!data) |
| 584 | return -ENOMEM; | 584 | return -ENOMEM; |
| 585 | 585 | ||
