* Re: [PATCH net-next-2.6 16/17] can: EG20T PCH: Fix incorrect return processing
[not found] ` <4CE6104C.3090401-ECg8zkTtlr0C6LszWs/t0g@public.gmane.org>
@ 2010-11-19 21:44 ` Marc Kleine-Budde
0 siblings, 0 replies; 2+ messages in thread
From: Marc Kleine-Budde @ 2010-11-19 21:44 UTC (permalink / raw)
To: Tomoya MORINAGA
Cc: andrew.chih.howe.khor-ral2JQCrhuEAvxtiuMwx3w, Samuel Ortiz,
margie.foster-ral2JQCrhuEAvxtiuMwx3w,
netdev-u79uwXL29TY76Z2rM5mHXA,
linux-kernel-u79uwXL29TY76Z2rM5mHXA,
socketcan-core-0fE9KPoRgkgATYTw5x5z8w,
yong.y.wang-ral2JQCrhuEAvxtiuMwx3w,
kok.howg.ewe-ral2JQCrhuEAvxtiuMwx3w, Wolfgang Grandegger,
joel.clark-ral2JQCrhuEAvxtiuMwx3w, David S. Miller,
Christian Pellegrin, qi.wang-ral2JQCrhuEAvxtiuMwx3w
[-- Attachment #1.1: Type: text/plain, Size: 2811 bytes --]
On 11/19/2010 06:51 AM, Tomoya MORINAGA wrote:
> Fix incorrect return processing
The description is correct. But you change several things that have
nothing to do. The frist hunk fixes shared irq handlers, the others the
quota calculation in the napi handler.
Marc
>
> Signed-off-by: Tomoya MORINAGA <tomoya-linux-ECg8zkTtlr0C6LszWs/t0g@public.gmane.org>
> ---
> drivers/net/can/pch_can.c | 20 ++++++++++++--------
> 1 files changed, 12 insertions(+), 8 deletions(-)
>
> diff --git a/drivers/net/can/pch_can.c b/drivers/net/can/pch_can.c
> index c612a99..48f4a2e 100644
> --- a/drivers/net/can/pch_can.c
> +++ b/drivers/net/can/pch_can.c
> @@ -589,10 +589,12 @@ static irqreturn_t pch_can_interrupt(int irq, void *dev_id)
> struct net_device *ndev = (struct net_device *)dev_id;
> struct pch_can_priv *priv = netdev_priv(ndev);
>
> - pch_can_set_int_enables(priv, PCH_CAN_NONE);
> - napi_schedule(&priv->napi);
> -
> - return IRQ_HANDLED;
> + if ((pch_can_int_pending(priv) > 0) && (dev_id != NULL)) {
dev_id is always != NULL, because you registered your IRQ handler with
it. (BTW: dev_id has already been dereferenced in netdev_priv(), so if
this code is executed, dev_if is != NULL)
Just write:
if (!pch_can_int_pending(priv))
return IRQ_NONE;
> + pch_can_set_int_enables(priv, PCH_CAN_NONE);
> + napi_schedule(&priv->napi);
> + return IRQ_HANDLED;
> + }
> + return IRQ_NONE;
> }
>
> static void pch_fifo_thresh(struct pch_can_priv *priv, int obj_id)
> @@ -674,7 +676,7 @@ static int pch_can_rx_normal(struct net_device *ndev, u32 obj_num, int quota)
> if (reg & PCH_IF_MCONT_MSGLOST) {
> rtn = pch_can_rx_msg_lost(ndev, obj_num);
> if (!rtn)
> - return rtn;
> + return rcv_pkts;
> rcv_pkts++;
> quota--;
> obj_num++;
> @@ -777,10 +779,12 @@ static int pch_can_poll(struct napi_struct *napi, int quota)
> goto end;
>
> if ((int_stat >= PCH_RX_OBJ_START) && (int_stat <= PCH_RX_OBJ_END)) {
> - rcv_pkts += pch_can_rx_normal(ndev, int_stat, quota);
> - quota -= rcv_pkts;
> - if (quota < 0)
> + rcv_pkts = pch_can_rx_normal(ndev, int_stat, quota);
maybe it's better to rx as much packages in rx_normal as possible and
not return if you failed to alloc a can_frame.
> + if (rcv_pkts < 0) {
> + rcv_pkts = 0;
> goto end;
> + }
> + quota -= rcv_pkts;
> } else if ((int_stat >= PCH_TX_OBJ_START) &&
> (int_stat <= PCH_TX_OBJ_END)) {
> /* Handle transmission interrupt */
--
Pengutronix e.K. | Marc Kleine-Budde |
Industrial Linux Solutions | Phone: +49-231-2826-924 |
Vertretung West/Dortmund | Fax: +49-5121-206917-5555 |
Amtsgericht Hildesheim, HRA 2686 | http://www.pengutronix.de |
[-- Attachment #1.2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 262 bytes --]
[-- Attachment #2: Type: text/plain, Size: 188 bytes --]
_______________________________________________
Socketcan-core mailing list
Socketcan-core-0fE9KPoRgkgATYTw5x5z8w@public.gmane.org
https://lists.berlios.de/mailman/listinfo/socketcan-core
^ permalink raw reply [flat|nested] 2+ messages in thread
* [PATCH net-next-2.6 16/17] can: EG20T PCH: Fix incorrect return processing
@ 2010-11-19 5:51 Tomoya MORINAGA
0 siblings, 0 replies; 2+ messages in thread
From: Tomoya MORINAGA @ 2010-11-19 5:51 UTC (permalink / raw)
To: Wolfgang Grandegger, Wolfram Sang, Christian Pellegrin,
Barry Song, Samuel Ortiz
Cc: qi.wang, yong.y.wang, andrew.chih.howe.khor, joel.clark,
kok.howg.ewe, margie.foster
Fix incorrect return processing
Signed-off-by: Tomoya MORINAGA <tomoya-linux@dsn.okisemi.com>
---
drivers/net/can/pch_can.c | 20 ++++++++++++--------
1 files changed, 12 insertions(+), 8 deletions(-)
diff --git a/drivers/net/can/pch_can.c b/drivers/net/can/pch_can.c
index c612a99..48f4a2e 100644
--- a/drivers/net/can/pch_can.c
+++ b/drivers/net/can/pch_can.c
@@ -589,10 +589,12 @@ static irqreturn_t pch_can_interrupt(int irq, void *dev_id)
struct net_device *ndev = (struct net_device *)dev_id;
struct pch_can_priv *priv = netdev_priv(ndev);
- pch_can_set_int_enables(priv, PCH_CAN_NONE);
- napi_schedule(&priv->napi);
-
- return IRQ_HANDLED;
+ if ((pch_can_int_pending(priv) > 0) && (dev_id != NULL)) {
+ pch_can_set_int_enables(priv, PCH_CAN_NONE);
+ napi_schedule(&priv->napi);
+ return IRQ_HANDLED;
+ }
+ return IRQ_NONE;
}
static void pch_fifo_thresh(struct pch_can_priv *priv, int obj_id)
@@ -674,7 +676,7 @@ static int pch_can_rx_normal(struct net_device *ndev, u32 obj_num, int quota)
if (reg & PCH_IF_MCONT_MSGLOST) {
rtn = pch_can_rx_msg_lost(ndev, obj_num);
if (!rtn)
- return rtn;
+ return rcv_pkts;
rcv_pkts++;
quota--;
obj_num++;
@@ -777,10 +779,12 @@ static int pch_can_poll(struct napi_struct *napi, int quota)
goto end;
if ((int_stat >= PCH_RX_OBJ_START) && (int_stat <= PCH_RX_OBJ_END)) {
- rcv_pkts += pch_can_rx_normal(ndev, int_stat, quota);
- quota -= rcv_pkts;
- if (quota < 0)
+ rcv_pkts = pch_can_rx_normal(ndev, int_stat, quota);
+ if (rcv_pkts < 0) {
+ rcv_pkts = 0;
goto end;
+ }
+ quota -= rcv_pkts;
} else if ((int_stat >= PCH_TX_OBJ_START) &&
(int_stat <= PCH_TX_OBJ_END)) {
/* Handle transmission interrupt */
--
1.6.0.6
^ permalink raw reply related [flat|nested] 2+ messages in thread
end of thread, other threads:[~2010-11-19 21:44 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <4CE6104C.3090401@dsn.okisemi.com>
[not found] ` <4CE6104C.3090401-ECg8zkTtlr0C6LszWs/t0g@public.gmane.org>
2010-11-19 21:44 ` [PATCH net-next-2.6 16/17] can: EG20T PCH: Fix incorrect return processing Marc Kleine-Budde
2010-11-19 5:51 Tomoya MORINAGA
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).