diff options
author | David S. Miller <davem@davemloft.net> | 2015-02-09 17:35:57 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2015-02-09 17:35:57 -0500 |
commit | 2573beec56aa28a0e6d4430fb6796d0c76308bcf (patch) | |
tree | 15c902551b78a954d5138304b97a16a4d9968202 /drivers | |
parent | fd3137cd33ae5590c45c81e9a46fe53b6ab5f66e (diff) | |
parent | 531c94a9681b8c253fd0490a4ca8bbe01a38c78b (diff) |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/net/arcnet/com20020-pci.c | 3 | ||||
-rw-r--r-- | drivers/net/dsa/mv88e6131.c | 3 | ||||
-rw-r--r-- | drivers/net/ethernet/amd/xgbe/xgbe-drv.c | 11 | ||||
-rw-r--r-- | drivers/net/ethernet/samsung/sxgbe/sxgbe_main.c | 57 | ||||
-rw-r--r-- | drivers/net/vxlan.c | 2 |
5 files changed, 55 insertions, 21 deletions
diff --git a/drivers/net/arcnet/com20020-pci.c b/drivers/net/arcnet/com20020-pci.c index 6c99ff0b0bdd..945f532078e9 100644 --- a/drivers/net/arcnet/com20020-pci.c +++ b/drivers/net/arcnet/com20020-pci.c | |||
@@ -78,6 +78,9 @@ static int com20020pci_probe(struct pci_dev *pdev, const struct pci_device_id *i | |||
78 | 78 | ||
79 | priv = devm_kzalloc(&pdev->dev, sizeof(struct com20020_priv), | 79 | priv = devm_kzalloc(&pdev->dev, sizeof(struct com20020_priv), |
80 | GFP_KERNEL); | 80 | GFP_KERNEL); |
81 | if (!priv) | ||
82 | return -ENOMEM; | ||
83 | |||
81 | ci = (struct com20020_pci_card_info *)id->driver_data; | 84 | ci = (struct com20020_pci_card_info *)id->driver_data; |
82 | priv->ci = ci; | 85 | priv->ci = ci; |
83 | 86 | ||
diff --git a/drivers/net/dsa/mv88e6131.c b/drivers/net/dsa/mv88e6131.c index 1230f52aa70e..2540ef0142af 100644 --- a/drivers/net/dsa/mv88e6131.c +++ b/drivers/net/dsa/mv88e6131.c | |||
@@ -139,7 +139,8 @@ static int mv88e6131_setup_global(struct dsa_switch *ds) | |||
139 | int nexthop; | 139 | int nexthop; |
140 | 140 | ||
141 | nexthop = 0x1f; | 141 | nexthop = 0x1f; |
142 | if (i != ds->index && i < ds->dst->pd->nr_chips) | 142 | if (ds->pd->rtable && |
143 | i != ds->index && i < ds->dst->pd->nr_chips) | ||
143 | nexthop = ds->pd->rtable[i] & 0x1f; | 144 | nexthop = ds->pd->rtable[i] & 0x1f; |
144 | 145 | ||
145 | REG_WRITE(REG_GLOBAL2, 0x06, 0x8000 | (i << 8) | nexthop); | 146 | REG_WRITE(REG_GLOBAL2, 0x06, 0x8000 | (i << 8) | nexthop); |
diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-drv.c b/drivers/net/ethernet/amd/xgbe/xgbe-drv.c index d41f9f468688..b93d4404d975 100644 --- a/drivers/net/ethernet/amd/xgbe/xgbe-drv.c +++ b/drivers/net/ethernet/amd/xgbe/xgbe-drv.c | |||
@@ -342,12 +342,13 @@ static irqreturn_t xgbe_isr(int irq, void *data) | |||
342 | dma_ch_isr = XGMAC_DMA_IOREAD(channel, DMA_CH_SR); | 342 | dma_ch_isr = XGMAC_DMA_IOREAD(channel, DMA_CH_SR); |
343 | DBGPR(" DMA_CH%u_ISR = %08x\n", i, dma_ch_isr); | 343 | DBGPR(" DMA_CH%u_ISR = %08x\n", i, dma_ch_isr); |
344 | 344 | ||
345 | /* If we get a TI or RI interrupt that means per channel DMA | 345 | /* The TI or RI interrupt bits may still be set even if using |
346 | * interrupts are not enabled, so we use the private data napi | 346 | * per channel DMA interrupts. Check to be sure those are not |
347 | * structure, not the per channel napi structure | 347 | * enabled before using the private data napi structure. |
348 | */ | 348 | */ |
349 | if (XGMAC_GET_BITS(dma_ch_isr, DMA_CH_SR, TI) || | 349 | if (!pdata->per_channel_irq && |
350 | XGMAC_GET_BITS(dma_ch_isr, DMA_CH_SR, RI)) { | 350 | (XGMAC_GET_BITS(dma_ch_isr, DMA_CH_SR, TI) || |
351 | XGMAC_GET_BITS(dma_ch_isr, DMA_CH_SR, RI))) { | ||
351 | if (napi_schedule_prep(&pdata->napi)) { | 352 | if (napi_schedule_prep(&pdata->napi)) { |
352 | /* Disable Tx and Rx interrupts */ | 353 | /* Disable Tx and Rx interrupts */ |
353 | xgbe_disable_rx_tx_ints(pdata); | 354 | xgbe_disable_rx_tx_ints(pdata); |
diff --git a/drivers/net/ethernet/samsung/sxgbe/sxgbe_main.c b/drivers/net/ethernet/samsung/sxgbe/sxgbe_main.c index 11288d4fc85f..c8a01ee4d25e 100644 --- a/drivers/net/ethernet/samsung/sxgbe/sxgbe_main.c +++ b/drivers/net/ethernet/samsung/sxgbe/sxgbe_main.c | |||
@@ -364,6 +364,26 @@ static int sxgbe_init_rx_buffers(struct net_device *dev, | |||
364 | 364 | ||
365 | return 0; | 365 | return 0; |
366 | } | 366 | } |
367 | |||
368 | /** | ||
369 | * sxgbe_free_rx_buffers - free what sxgbe_init_rx_buffers() allocated | ||
370 | * @dev: net device structure | ||
371 | * @rx_ring: ring to be freed | ||
372 | * @rx_rsize: ring size | ||
373 | * Description: this function initializes the DMA RX descriptor | ||
374 | */ | ||
375 | static void sxgbe_free_rx_buffers(struct net_device *dev, | ||
376 | struct sxgbe_rx_norm_desc *p, int i, | ||
377 | unsigned int dma_buf_sz, | ||
378 | struct sxgbe_rx_queue *rx_ring) | ||
379 | { | ||
380 | struct sxgbe_priv_data *priv = netdev_priv(dev); | ||
381 | |||
382 | kfree_skb(rx_ring->rx_skbuff[i]); | ||
383 | dma_unmap_single(priv->device, rx_ring->rx_skbuff_dma[i], | ||
384 | dma_buf_sz, DMA_FROM_DEVICE); | ||
385 | } | ||
386 | |||
367 | /** | 387 | /** |
368 | * init_tx_ring - init the TX descriptor ring | 388 | * init_tx_ring - init the TX descriptor ring |
369 | * @dev: net device structure | 389 | * @dev: net device structure |
@@ -456,7 +476,7 @@ static int init_rx_ring(struct net_device *dev, u8 queue_no, | |||
456 | /* RX ring is not allcoated */ | 476 | /* RX ring is not allcoated */ |
457 | if (rx_ring == NULL) { | 477 | if (rx_ring == NULL) { |
458 | netdev_err(dev, "No memory for RX queue\n"); | 478 | netdev_err(dev, "No memory for RX queue\n"); |
459 | goto error; | 479 | return -ENOMEM; |
460 | } | 480 | } |
461 | 481 | ||
462 | /* assign queue number */ | 482 | /* assign queue number */ |
@@ -468,23 +488,21 @@ static int init_rx_ring(struct net_device *dev, u8 queue_no, | |||
468 | &rx_ring->dma_rx_phy, GFP_KERNEL); | 488 | &rx_ring->dma_rx_phy, GFP_KERNEL); |
469 | 489 | ||
470 | if (rx_ring->dma_rx == NULL) | 490 | if (rx_ring->dma_rx == NULL) |
471 | goto error; | 491 | return -ENOMEM; |
472 | 492 | ||
473 | /* allocate memory for RX skbuff array */ | 493 | /* allocate memory for RX skbuff array */ |
474 | rx_ring->rx_skbuff_dma = kmalloc_array(rx_rsize, | 494 | rx_ring->rx_skbuff_dma = kmalloc_array(rx_rsize, |
475 | sizeof(dma_addr_t), GFP_KERNEL); | 495 | sizeof(dma_addr_t), GFP_KERNEL); |
476 | if (!rx_ring->rx_skbuff_dma) { | 496 | if (!rx_ring->rx_skbuff_dma) { |
477 | dma_free_coherent(priv->device, | 497 | ret = -ENOMEM; |
478 | rx_rsize * sizeof(struct sxgbe_rx_norm_desc), | 498 | goto err_free_dma_rx; |
479 | rx_ring->dma_rx, rx_ring->dma_rx_phy); | ||
480 | goto error; | ||
481 | } | 499 | } |
482 | 500 | ||
483 | rx_ring->rx_skbuff = kmalloc_array(rx_rsize, | 501 | rx_ring->rx_skbuff = kmalloc_array(rx_rsize, |
484 | sizeof(struct sk_buff *), GFP_KERNEL); | 502 | sizeof(struct sk_buff *), GFP_KERNEL); |
485 | if (!rx_ring->rx_skbuff) { | 503 | if (!rx_ring->rx_skbuff) { |
486 | kfree(rx_ring->rx_skbuff_dma); | 504 | ret = -ENOMEM; |
487 | goto error; | 505 | goto err_free_skbuff_dma; |
488 | } | 506 | } |
489 | 507 | ||
490 | /* initialise the buffers */ | 508 | /* initialise the buffers */ |
@@ -494,7 +512,7 @@ static int init_rx_ring(struct net_device *dev, u8 queue_no, | |||
494 | ret = sxgbe_init_rx_buffers(dev, p, desc_index, | 512 | ret = sxgbe_init_rx_buffers(dev, p, desc_index, |
495 | bfsize, rx_ring); | 513 | bfsize, rx_ring); |
496 | if (ret) | 514 | if (ret) |
497 | goto err_init_rx_buffers; | 515 | goto err_free_rx_buffers; |
498 | } | 516 | } |
499 | 517 | ||
500 | /* initalise counters */ | 518 | /* initalise counters */ |
@@ -504,11 +522,22 @@ static int init_rx_ring(struct net_device *dev, u8 queue_no, | |||
504 | 522 | ||
505 | return 0; | 523 | return 0; |
506 | 524 | ||
507 | err_init_rx_buffers: | 525 | err_free_rx_buffers: |
508 | while (--desc_index >= 0) | 526 | while (--desc_index >= 0) { |
509 | free_rx_ring(priv->device, rx_ring, desc_index); | 527 | struct sxgbe_rx_norm_desc *p; |
510 | error: | 528 | |
511 | return -ENOMEM; | 529 | p = rx_ring->dma_rx + desc_index; |
530 | sxgbe_free_rx_buffers(dev, p, desc_index, bfsize, rx_ring); | ||
531 | } | ||
532 | kfree(rx_ring->rx_skbuff); | ||
533 | err_free_skbuff_dma: | ||
534 | kfree(rx_ring->rx_skbuff_dma); | ||
535 | err_free_dma_rx: | ||
536 | dma_free_coherent(priv->device, | ||
537 | rx_rsize * sizeof(struct sxgbe_rx_norm_desc), | ||
538 | rx_ring->dma_rx, rx_ring->dma_rx_phy); | ||
539 | |||
540 | return ret; | ||
512 | } | 541 | } |
513 | /** | 542 | /** |
514 | * free_tx_ring - free the TX descriptor ring | 543 | * free_tx_ring - free the TX descriptor ring |
diff --git a/drivers/net/vxlan.c b/drivers/net/vxlan.c index e6ed3e66964d..0e57e862c399 100644 --- a/drivers/net/vxlan.c +++ b/drivers/net/vxlan.c | |||
@@ -1009,7 +1009,7 @@ static bool vxlan_snoop(struct net_device *dev, | |||
1009 | if (net_ratelimit()) | 1009 | if (net_ratelimit()) |
1010 | netdev_info(dev, | 1010 | netdev_info(dev, |
1011 | "%pM migrated from %pIS to %pIS\n", | 1011 | "%pM migrated from %pIS to %pIS\n", |
1012 | src_mac, &rdst->remote_ip, &src_ip); | 1012 | src_mac, &rdst->remote_ip.sa, &src_ip->sa); |
1013 | 1013 | ||
1014 | rdst->remote_ip = *src_ip; | 1014 | rdst->remote_ip = *src_ip; |
1015 | f->updated = jiffies; | 1015 | f->updated = jiffies; |