[net-next] net: ethernet: ti: cpdma: rate is not changed - correct case

Message ID 1512571278-13196-1-git-send-email-ivan.khoronzhuk@linaro.org
State New
Headers show
Series
  • [net-next] net: ethernet: ti: cpdma: rate is not changed - correct case
Related show

Commit Message

Ivan Khoronzhuk Dec. 6, 2017, 2:41 p.m.
If rate is the same as set it's correct case.

Signed-off-by: Ivan Khoronzhuk <ivan.khoronzhuk@linaro.org>

---
Based on net-next/master

 drivers/net/ethernet/ti/davinci_cpdma.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

-- 
2.7.4

Comments

Ivan Khoronzhuk Dec. 7, 2017, 7:48 p.m. | #1
On Wed, Dec 06, 2017 at 04:35:45PM -0500, David Miller wrote:
> From: Ivan Khoronzhuk <ivan.khoronzhuk@linaro.org>

> Date: Wed,  6 Dec 2017 16:41:18 +0200

> 

> > If rate is the same as set it's correct case.

> > 

> > Signed-off-by: Ivan Khoronzhuk <ivan.khoronzhuk@linaro.org>

> > ---

> > Based on net-next/master

> > 

> >  drivers/net/ethernet/ti/davinci_cpdma.c | 2 +-

> >  1 file changed, 1 insertion(+), 1 deletion(-)

> > 

> > diff --git a/drivers/net/ethernet/ti/davinci_cpdma.c b/drivers/net/ethernet/ti/davinci_cpdma.c

> > index e4d6edf..dbe9167 100644

> > --- a/drivers/net/ethernet/ti/davinci_cpdma.c

> > +++ b/drivers/net/ethernet/ti/davinci_cpdma.c

> > @@ -841,7 +841,7 @@ int cpdma_chan_set_rate(struct cpdma_chan *ch, u32 rate)

> >  		return -EINVAL;

> >  

> >  	if (ch->rate == rate)

> > -		return rate;

> > +		return 0;

> 

> Looking at the one and only caller of this function, cpsw_ndo_set_tx_maxrate, it

> makes sure this can never, ever, happen.

In current circumstances yes, it will never happen.
But I caught it while adding related code and better return 0 if upper caller
doesn't have such check. Suppose that cpdma module is responsible for itself
and if it's critical I can send this patch along with whole related series.

> 

> So I would instead remove this check completely since it can never trigger.


-- 
Regards,
Ivan Khoronzhuk
Ivan Khoronzhuk Dec. 7, 2017, 8:10 p.m. | #2
On Thu, Dec 07, 2017 at 02:50:24PM -0500, David Miller wrote:
> From: Ivan Khoronzhuk <ivan.khoronzhuk@linaro.org>

> Date: Thu, 7 Dec 2017 21:48:56 +0200

> 

> > On Wed, Dec 06, 2017 at 04:35:45PM -0500, David Miller wrote:

> >> From: Ivan Khoronzhuk <ivan.khoronzhuk@linaro.org>

> >> Date: Wed,  6 Dec 2017 16:41:18 +0200

> >> 

> >> > If rate is the same as set it's correct case.

> >> > 

> >> > Signed-off-by: Ivan Khoronzhuk <ivan.khoronzhuk@linaro.org>

> >> > ---

> >> > Based on net-next/master

> >> > 

> >> >  drivers/net/ethernet/ti/davinci_cpdma.c | 2 +-

> >> >  1 file changed, 1 insertion(+), 1 deletion(-)

> >> > 

> >> > diff --git a/drivers/net/ethernet/ti/davinci_cpdma.c b/drivers/net/ethernet/ti/davinci_cpdma.c

> >> > index e4d6edf..dbe9167 100644

> >> > --- a/drivers/net/ethernet/ti/davinci_cpdma.c

> >> > +++ b/drivers/net/ethernet/ti/davinci_cpdma.c

> >> > @@ -841,7 +841,7 @@ int cpdma_chan_set_rate(struct cpdma_chan *ch, u32 rate)

> >> >  		return -EINVAL;

> >> >  

> >> >  	if (ch->rate == rate)

> >> > -		return rate;

> >> > +		return 0;

> >> 

> >> Looking at the one and only caller of this function, cpsw_ndo_set_tx_maxrate, it

> >> makes sure this can never, ever, happen.

> > In current circumstances yes, it will never happen.

> > But I caught it while adding related code and better return 0 if upper caller

> > doesn't have such check. Suppose that cpdma module is responsible for itself

> > and if it's critical I can send this patch along with whole related series.

> 

> You have to decide one way or the other, who is responsible.

> 

> I think checking higher up is better because it's cheaper at that point to

> look at the per-netdev queue rate setting before moving down deeper into the

> driver specific data-structures.


No objection, but upper caller not always knows current rate and for doing like
this it needs read it first, and this is also some redundancy.

-- 
Regards,
Ivan Khoronzhuk

Patch

diff --git a/drivers/net/ethernet/ti/davinci_cpdma.c b/drivers/net/ethernet/ti/davinci_cpdma.c
index e4d6edf..dbe9167 100644
--- a/drivers/net/ethernet/ti/davinci_cpdma.c
+++ b/drivers/net/ethernet/ti/davinci_cpdma.c
@@ -841,7 +841,7 @@  int cpdma_chan_set_rate(struct cpdma_chan *ch, u32 rate)
 		return -EINVAL;
 
 	if (ch->rate == rate)
-		return rate;
+		return 0;
 
 	ctlr = ch->ctlr;
 	spin_lock_irqsave(&ctlr->lock, flags);