Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 158756
b: refs/heads/master
c: 47bd10d
h: refs/heads/master
v: v3
  • Loading branch information
Guo-Fu Tseng authored and David S. Miller committed Jul 6, 2009
1 parent d8be233 commit ddbabbb
Show file tree
Hide file tree
Showing 3 changed files with 64 additions and 27 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 44d8d2e9f0dfa52bb1aebdbaa510669bff61c9dc
refs/heads/master: 47bd10d14b3341004266395014007c120a359c9d
86 changes: 62 additions & 24 deletions trunk/drivers/net/jme.c
Original file line number Diff line number Diff line change
Expand Up @@ -522,12 +522,8 @@ jme_setup_tx_resources(struct jme_adapter *jme)
&(txring->dmaalloc),
GFP_ATOMIC);

if (!txring->alloc) {
txring->desc = NULL;
txring->dmaalloc = 0;
txring->dma = 0;
return -ENOMEM;
}
if (!txring->alloc)
goto err_set_null;

/*
* 16 Bytes align
Expand All @@ -539,6 +535,11 @@ jme_setup_tx_resources(struct jme_adapter *jme)
atomic_set(&txring->next_to_clean, 0);
atomic_set(&txring->nr_free, jme->tx_ring_size);

txring->bufinf = kmalloc(sizeof(struct jme_buffer_info) *
jme->tx_ring_size, GFP_ATOMIC);
if (unlikely(!(txring->bufinf)))
goto err_free_txring;

/*
* Initialize Transmit Descriptors
*/
Expand All @@ -547,6 +548,20 @@ jme_setup_tx_resources(struct jme_adapter *jme)
sizeof(struct jme_buffer_info) * jme->tx_ring_size);

return 0;

err_free_txring:
dma_free_coherent(&(jme->pdev->dev),
TX_RING_ALLOC_SIZE(jme->tx_ring_size),
txring->alloc,
txring->dmaalloc);

err_set_null:
txring->desc = NULL;
txring->dmaalloc = 0;
txring->dma = 0;
txring->bufinf = NULL;

return -ENOMEM;
}

static void
Expand All @@ -557,16 +572,19 @@ jme_free_tx_resources(struct jme_adapter *jme)
struct jme_buffer_info *txbi;

if (txring->alloc) {
for (i = 0 ; i < jme->tx_ring_size ; ++i) {
txbi = txring->bufinf + i;
if (txbi->skb) {
dev_kfree_skb(txbi->skb);
txbi->skb = NULL;
if (txring->bufinf) {
for (i = 0 ; i < jme->tx_ring_size ; ++i) {
txbi = txring->bufinf + i;
if (txbi->skb) {
dev_kfree_skb(txbi->skb);
txbi->skb = NULL;
}
txbi->mapping = 0;
txbi->len = 0;
txbi->nr_desc = 0;
txbi->start_xmit = 0;
}
txbi->mapping = 0;
txbi->len = 0;
txbi->nr_desc = 0;
txbi->start_xmit = 0;
kfree(txring->bufinf);
}

dma_free_coherent(&(jme->pdev->dev),
Expand All @@ -578,11 +596,11 @@ jme_free_tx_resources(struct jme_adapter *jme)
txring->desc = NULL;
txring->dmaalloc = 0;
txring->dma = 0;
txring->bufinf = NULL;
}
txring->next_to_use = 0;
atomic_set(&txring->next_to_clean, 0);
atomic_set(&txring->nr_free, 0);

}

static inline void
Expand Down Expand Up @@ -720,8 +738,11 @@ jme_free_rx_resources(struct jme_adapter *jme)
struct jme_ring *rxring = &(jme->rxring[0]);

if (rxring->alloc) {
for (i = 0 ; i < jme->rx_ring_size ; ++i)
jme_free_rx_buf(jme, i);
if (rxring->bufinf) {
for (i = 0 ; i < jme->rx_ring_size ; ++i)
jme_free_rx_buf(jme, i);
kfree(rxring->bufinf);
}

dma_free_coherent(&(jme->pdev->dev),
RX_RING_ALLOC_SIZE(jme->rx_ring_size),
Expand All @@ -731,6 +752,7 @@ jme_free_rx_resources(struct jme_adapter *jme)
rxring->desc = NULL;
rxring->dmaalloc = 0;
rxring->dma = 0;
rxring->bufinf = NULL;
}
rxring->next_to_use = 0;
atomic_set(&rxring->next_to_clean, 0);
Expand All @@ -746,12 +768,8 @@ jme_setup_rx_resources(struct jme_adapter *jme)
RX_RING_ALLOC_SIZE(jme->rx_ring_size),
&(rxring->dmaalloc),
GFP_ATOMIC);
if (!rxring->alloc) {
rxring->desc = NULL;
rxring->dmaalloc = 0;
rxring->dma = 0;
return -ENOMEM;
}
if (!rxring->alloc)
goto err_set_null;

/*
* 16 Bytes align
Expand All @@ -762,9 +780,16 @@ jme_setup_rx_resources(struct jme_adapter *jme)
rxring->next_to_use = 0;
atomic_set(&rxring->next_to_clean, 0);

rxring->bufinf = kmalloc(sizeof(struct jme_buffer_info) *
jme->rx_ring_size, GFP_ATOMIC);
if (unlikely(!(rxring->bufinf)))
goto err_free_rxring;

/*
* Initiallize Receive Descriptors
*/
memset(rxring->bufinf, 0,
sizeof(struct jme_buffer_info) * jme->rx_ring_size);
for (i = 0 ; i < jme->rx_ring_size ; ++i) {
if (unlikely(jme_make_new_rx_buf(jme, i))) {
jme_free_rx_resources(jme);
Expand All @@ -775,6 +800,19 @@ jme_setup_rx_resources(struct jme_adapter *jme)
}

return 0;

err_free_rxring:
dma_free_coherent(&(jme->pdev->dev),
RX_RING_ALLOC_SIZE(jme->rx_ring_size),
rxring->alloc,
rxring->dmaalloc);
err_set_null:
rxring->desc = NULL;
rxring->dmaalloc = 0;
rxring->dma = 0;
rxring->bufinf = NULL;

return -ENOMEM;
}

static inline void
Expand Down
3 changes: 1 addition & 2 deletions trunk/drivers/net/jme.h
Original file line number Diff line number Diff line change
Expand Up @@ -372,15 +372,14 @@ struct jme_buffer_info {
/*
* The structure holding buffer information and ring descriptors all together.
*/
#define MAX_RING_DESC_NR 1024
struct jme_ring {
void *alloc; /* pointer to allocated memory */
void *desc; /* pointer to ring memory */
dma_addr_t dmaalloc; /* phys address of ring alloc */
dma_addr_t dma; /* phys address for ring dma */

/* Buffer information corresponding to each descriptor */
struct jme_buffer_info bufinf[MAX_RING_DESC_NR];
struct jme_buffer_info *bufinf;

int next_to_use;
atomic_t next_to_clean;
Expand Down

0 comments on commit ddbabbb

Please sign in to comment.