Thread (1 message) 1 message, 1 author, 2014-03-13

Re: [PATCH RFC] net: davinci_emac: Fix rollback of emac_dev_open()

From: Prabhakar Lad <prabhakar.csengg@gmail.com>
Date: 2014-03-13 18:18:11

Hi Mugunthan,

On Mon, Mar 10, 2014 at 12:46 PM, Christian Riesch
[off-list ref] wrote:

--On March 07, 2014 20:15 +0530 Mugunthan V N [off-list ref] wrote:
quoted
On Friday 07 March 2014 07:37 PM, Christian Riesch wrote:
quoted
Signed-off-by: Christian Riesch <redacted>
Cc: Prabhakar Lad <prabhakar.csengg@gmail.com>
Cc: Mugunthan V N <redacted>
Cc: Florian Fainelli <f.fainelli@gmail.com>
---

Hi again,

How about this solution for fixing the rollback of emac_dev_open()?
Especially the change in davinci_cpdma.c, would this break anything?

The patch applies on top of
[PATCH] net: davinci_emac: Replace devm_request_irq with request_irq

Regards,
Christian

 drivers/net/ethernet/ti/davinci_cpdma.c |    4 +--
 drivers/net/ethernet/ti/davinci_emac.c  |   44
 ++++++++++++++++++++----------- 2 files changed, 31 insertions(+), 17
 deletions(-)
diff --git a/drivers/net/ethernet/ti/davinci_cpdma.c
b/drivers/net/ethernet/ti/davinci_cpdma.c index 364d0c7..88ef270 100644
--- a/drivers/net/ethernet/ti/davinci_cpdma.c
+++ b/drivers/net/ethernet/ti/davinci_cpdma.c
@@ -355,7 +355,7 @@ int cpdma_ctlr_stop(struct cpdma_ctlr *ctlr)
        int i;

        spin_lock_irqsave(&ctlr->lock, flags);
-       if (ctlr->state != CPDMA_STATE_ACTIVE) {
+       if (ctlr->state == CPDMA_STATE_TEARDOWN) {
                spin_unlock_irqrestore(&ctlr->lock, flags);
                return -EINVAL;
        }
@@ -891,7 +891,7 @@ int cpdma_chan_stop(struct cpdma_chan *chan)
        unsigned                timeout;

        spin_lock_irqsave(&chan->lock, flags);
-       if (chan->state != CPDMA_STATE_ACTIVE) {
+       if (chan->state == CPDMA_STATE_TEARDOWN) {
                spin_unlock_irqrestore(&chan->lock, flags);
                return -EINVAL;
        }

Even when in idle mode chan stop should return error.

Can you please explain? I do not see why.

I must be able to call cpdma_ctlr_stop in idle mode to free the rx
descriptors in case ndo_open in davinci_emac.c fails. Any other ideas how to
solve the problem addressed in the rest of the patch?
Do you have any comments on this patch ? I have tested it on OMAP-L138 evm
and works fine. If you have none comments may be Christian can consolidate this
patch with earlier and repost it.

Thanks,
--Prabhakar Lad
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help