netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/9] can: don't copy data to rx'ed RTR frames
@ 2010-12-25 14:40 Marc Kleine-Budde
       [not found] ` <1293288034-22428-1-git-send-email-mkl-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org>
                   ` (6 more replies)
  0 siblings, 7 replies; 13+ messages in thread
From: Marc Kleine-Budde @ 2010-12-25 14:40 UTC (permalink / raw)
  To: netdev-u79uwXL29TY76Z2rM5mHXA; +Cc: socketcan-core-0fE9KPoRgkgATYTw5x5z8w

Hello,

this series of patches changes the can driver's RX path. If a RTR frame is
received no data is copied.

As discussed on socketcan-core:
https://lists.berlios.de/pipermail/socketcan-core/2010-October/004836.html

cheers,
Marc

---

The following changes since commit e1928c86c4829703b800c81cc9edc939b5634e6f:

  cnic: Add FCoE support on 57712 (2010-12-23 11:44:34 -0800)

are available in the git repository at:
  git://git.pengutronix.de/git/mkl/linux-2.6.git public/can/rtr-for-net-next

Marc Kleine-Budde (9):
      can: at91_can: don't copy data to rx'ed RTR frames
      can: bfin_can: don't copy data to rx'ed RTR frames
      can: flexcan: don't copy data to rx'ed RTR frames
      can: sja1000: don't copy data to rx'ed RTR frames
      can: mcp251x: don't copy data to rx'ed RTR frames
      can: ti_hecc: don't copy data to rx'ed RTR frames
      can: janz-ican3: cleanup of ican3_to_can_frame and can_frame_to_ican3
      can: janz-ican3: don't copy data to rx'ed RTR frames
      can: pch_can: don't copy data to rx'ed RTR frames

 drivers/net/can/at91_can.c        |   10 ++++++----
 drivers/net/can/bfin_can.c        |   17 +++++++++--------
 drivers/net/can/flexcan.c         |   10 ++++++----
 drivers/net/can/janz-ican3.c      |   26 +++++++++++++++-----------
 drivers/net/can/mcp251x.c         |    3 ++-
 drivers/net/can/pch_can.c         |   15 ++++++++-------
 drivers/net/can/sja1000/sja1000.c |    7 +++----
 drivers/net/can/ti_hecc.c         |   18 ++++++++++--------
 8 files changed, 59 insertions(+), 47 deletions(-)

^ permalink raw reply	[flat|nested] 13+ messages in thread

* [PATCH 1/9] can: at91_can: don't copy data to rx'ed RTR frames
       [not found] ` <1293288034-22428-1-git-send-email-mkl-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org>
@ 2010-12-25 14:40   ` Marc Kleine-Budde
  2010-12-25 14:40   ` [PATCH 3/9] can: flexcan: " Marc Kleine-Budde
  2010-12-25 14:40   ` [PATCH 6/9] can: ti_hecc: " Marc Kleine-Budde
  2 siblings, 0 replies; 13+ messages in thread
From: Marc Kleine-Budde @ 2010-12-25 14:40 UTC (permalink / raw)
  To: netdev-u79uwXL29TY76Z2rM5mHXA
  Cc: socketcan-core-0fE9KPoRgkgATYTw5x5z8w, Marc Kleine-Budde

Signed-off-by: Marc Kleine-Budde <mkl-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org>
Acked-by: Wolfgang Grandegger <wg-5Yr1BZd7O62+XT7JhA+gdA@public.gmane.org>
---
 drivers/net/can/at91_can.c |   10 ++++++----
 1 files changed, 6 insertions(+), 4 deletions(-)

diff --git a/drivers/net/can/at91_can.c b/drivers/net/can/at91_can.c
index 7ef83d0..53c6598 100644
--- a/drivers/net/can/at91_can.c
+++ b/drivers/net/can/at91_can.c
@@ -491,12 +491,14 @@ static void at91_read_mb(struct net_device *dev, unsigned int mb,
 		cf->can_id = (reg_mid >> 18) & CAN_SFF_MASK;
 
 	reg_msr = at91_read(priv, AT91_MSR(mb));
-	if (reg_msr & AT91_MSR_MRTR)
-		cf->can_id |= CAN_RTR_FLAG;
 	cf->can_dlc = get_can_dlc((reg_msr >> 16) & 0xf);
 
-	*(u32 *)(cf->data + 0) = at91_read(priv, AT91_MDL(mb));
-	*(u32 *)(cf->data + 4) = at91_read(priv, AT91_MDH(mb));
+	if (reg_msr & AT91_MSR_MRTR)
+		cf->can_id |= CAN_RTR_FLAG;
+	else {
+		*(u32 *)(cf->data + 0) = at91_read(priv, AT91_MDL(mb));
+		*(u32 *)(cf->data + 4) = at91_read(priv, AT91_MDH(mb));
+	}
 
 	/* allow RX of extended frames */
 	at91_write(priv, AT91_MID(mb), AT91_MID_MIDE);
-- 
1.7.2.3

^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [PATCH 2/9] can: bfin_can: don't copy data to rx'ed RTR frames
  2010-12-25 14:40 [PATCH 0/9] can: don't copy data to rx'ed RTR frames Marc Kleine-Budde
       [not found] ` <1293288034-22428-1-git-send-email-mkl-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org>
@ 2010-12-25 14:40 ` Marc Kleine-Budde
  2010-12-25 14:40 ` [PATCH 4/9] can: sja1000: " Marc Kleine-Budde
                   ` (4 subsequent siblings)
  6 siblings, 0 replies; 13+ messages in thread
From: Marc Kleine-Budde @ 2010-12-25 14:40 UTC (permalink / raw)
  To: netdev; +Cc: socketcan-core, Marc Kleine-Budde, Barry Song

Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
Cc: Barry Song <21cnbao@gmail.com>
Acked-by: Wolfgang Grandegger <wg@grandegger.com>
---
 drivers/net/can/bfin_can.c |   17 +++++++++--------
 1 files changed, 9 insertions(+), 8 deletions(-)

diff --git a/drivers/net/can/bfin_can.c b/drivers/net/can/bfin_can.c
index b6e890d..07222ca 100644
--- a/drivers/net/can/bfin_can.c
+++ b/drivers/net/can/bfin_can.c
@@ -306,18 +306,19 @@ static void bfin_can_rx(struct net_device *dev, u16 isrc)
 			     & 0x1ffc) >> 2;
 		obj = RECEIVE_STD_CHL;
 	}
-	if (bfin_read16(&reg->chl[obj].id1) & RTR)
-		cf->can_id |= CAN_RTR_FLAG;
 
 	/* get data length code */
 	cf->can_dlc = get_can_dlc(bfin_read16(&reg->chl[obj].dlc) & 0xF);
 
-	/* get payload */
-	for (i = 0; i < 8; i += 2) {
-		val = bfin_read16(&reg->chl[obj].data[i]);
-		cf->data[7 - i] = (7 - i) < cf->can_dlc ? val : 0;
-		cf->data[6 - i] = (6 - i) < cf->can_dlc ? (val >> 8) : 0;
-	}
+	if (bfin_read16(&reg->chl[obj].id1) & RTR)
+		cf->can_id |= CAN_RTR_FLAG;
+	else	/* get payload */
+		for (i = 0; i < 8; i += 2) {
+			val = bfin_read16(&reg->chl[obj].data[i]);
+			cf->data[7 - i] = (7 - i) < cf->can_dlc ? val : 0;
+			cf->data[6 - i] = (6 - i) < cf->can_dlc ?
+				(val >> 8) : 0;
+		}
 
 	netif_rx(skb);
 
-- 
1.7.2.3


^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [PATCH 3/9] can: flexcan: don't copy data to rx'ed RTR frames
       [not found] ` <1293288034-22428-1-git-send-email-mkl-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org>
  2010-12-25 14:40   ` [PATCH 1/9] can: at91_can: " Marc Kleine-Budde
@ 2010-12-25 14:40   ` Marc Kleine-Budde
  2010-12-25 14:40   ` [PATCH 6/9] can: ti_hecc: " Marc Kleine-Budde
  2 siblings, 0 replies; 13+ messages in thread
From: Marc Kleine-Budde @ 2010-12-25 14:40 UTC (permalink / raw)
  To: netdev-u79uwXL29TY76Z2rM5mHXA
  Cc: socketcan-core-0fE9KPoRgkgATYTw5x5z8w, Marc Kleine-Budde

Signed-off-by: Marc Kleine-Budde <mkl-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org>
Acked-by: Wolfgang Grandegger <wg-5Yr1BZd7O62+XT7JhA+gdA@public.gmane.org>
---
 drivers/net/can/flexcan.c |   10 ++++++----
 1 files changed, 6 insertions(+), 4 deletions(-)

diff --git a/drivers/net/can/flexcan.c b/drivers/net/can/flexcan.c
index d499056..b0e16f5 100644
--- a/drivers/net/can/flexcan.c
+++ b/drivers/net/can/flexcan.c
@@ -471,12 +471,14 @@ static void flexcan_read_fifo(const struct net_device *dev,
 	else
 		cf->can_id = (reg_id >> 18) & CAN_SFF_MASK;
 
-	if (reg_ctrl & FLEXCAN_MB_CNT_RTR)
-		cf->can_id |= CAN_RTR_FLAG;
 	cf->can_dlc = get_can_dlc((reg_ctrl >> 16) & 0xf);
 
-	*(__be32 *)(cf->data + 0) = cpu_to_be32(readl(&mb->data[0]));
-	*(__be32 *)(cf->data + 4) = cpu_to_be32(readl(&mb->data[1]));
+	if (reg_ctrl & FLEXCAN_MB_CNT_RTR)
+		cf->can_id |= CAN_RTR_FLAG;
+	else {
+		*(__be32 *)(cf->data + 0) = cpu_to_be32(readl(&mb->data[0]));
+		*(__be32 *)(cf->data + 4) = cpu_to_be32(readl(&mb->data[1]));
+	}
 
 	/* mark as read */
 	writel(FLEXCAN_IFLAG_RX_FIFO_AVAILABLE, &regs->iflag1);
-- 
1.7.2.3

^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [PATCH 4/9] can: sja1000: don't copy data to rx'ed RTR frames
  2010-12-25 14:40 [PATCH 0/9] can: don't copy data to rx'ed RTR frames Marc Kleine-Budde
       [not found] ` <1293288034-22428-1-git-send-email-mkl-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org>
  2010-12-25 14:40 ` [PATCH 2/9] can: bfin_can: " Marc Kleine-Budde
@ 2010-12-25 14:40 ` Marc Kleine-Budde
  2010-12-25 14:40 ` [PATCH 5/9] can: mcp251x: " Marc Kleine-Budde
                   ` (3 subsequent siblings)
  6 siblings, 0 replies; 13+ messages in thread
From: Marc Kleine-Budde @ 2010-12-25 14:40 UTC (permalink / raw)
  To: netdev; +Cc: socketcan-core, Marc Kleine-Budde, Wolfgang Grandegger

Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
Cc: Wolfgang Grandegger <wg@grandegger.com>
Acked-by: Wolfgang Grandegger <wg@grandegger.com>
---
 drivers/net/can/sja1000/sja1000.c |    7 +++----
 1 files changed, 3 insertions(+), 4 deletions(-)

diff --git a/drivers/net/can/sja1000/sja1000.c b/drivers/net/can/sja1000/sja1000.c
index 0a8de01..bb4bfe3 100644
--- a/drivers/net/can/sja1000/sja1000.c
+++ b/drivers/net/can/sja1000/sja1000.c
@@ -346,13 +346,12 @@ static void sja1000_rx(struct net_device *dev)
 		    | (priv->read_reg(priv, REG_ID2) >> 5);
 	}
 
-	if (fi & FI_RTR) {
+	cf->can_dlc = get_can_dlc(fi & 0x0F);
+	if (fi & FI_RTR)
 		id |= CAN_RTR_FLAG;
-	} else {
-		cf->can_dlc = get_can_dlc(fi & 0x0F);
+	else
 		for (i = 0; i < cf->can_dlc; i++)
 			cf->data[i] = priv->read_reg(priv, dreg++);
-	}
 
 	cf->can_id = id;
 
-- 
1.7.2.3


^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [PATCH 5/9] can: mcp251x: don't copy data to rx'ed RTR frames
  2010-12-25 14:40 [PATCH 0/9] can: don't copy data to rx'ed RTR frames Marc Kleine-Budde
                   ` (2 preceding siblings ...)
  2010-12-25 14:40 ` [PATCH 4/9] can: sja1000: " Marc Kleine-Budde
@ 2010-12-25 14:40 ` Marc Kleine-Budde
  2010-12-25 14:40 ` [PATCH 7/9] can: janz-ican3: cleanup of ican3_to_can_frame and can_frame_to_ican3 Marc Kleine-Budde
                   ` (2 subsequent siblings)
  6 siblings, 0 replies; 13+ messages in thread
From: Marc Kleine-Budde @ 2010-12-25 14:40 UTC (permalink / raw)
  To: netdev; +Cc: socketcan-core, Marc Kleine-Budde, Christian Pellegrin

Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
Cc: Christian Pellegrin <chripell@fsfe.org>
Acked-by: Wolfgang Grandegger <wg@grandegger.com>
---
 drivers/net/can/mcp251x.c |    3 ++-
 1 files changed, 2 insertions(+), 1 deletions(-)

diff --git a/drivers/net/can/mcp251x.c b/drivers/net/can/mcp251x.c
index 7ab534a..9e08acc 100644
--- a/drivers/net/can/mcp251x.c
+++ b/drivers/net/can/mcp251x.c
@@ -481,7 +481,8 @@ static void mcp251x_hw_rx(struct spi_device *spi, int buf_idx)
 	}
 	/* Data length */
 	frame->can_dlc = get_can_dlc(buf[RXBDLC_OFF] & RXBDLC_LEN_MASK);
-	memcpy(frame->data, buf + RXBDAT_OFF, frame->can_dlc);
+	if (!(frame->can_id & CAN_RTR_FLAG))
+		memcpy(frame->data, buf + RXBDAT_OFF, frame->can_dlc);
 
 	priv->net->stats.rx_packets++;
 	priv->net->stats.rx_bytes += frame->can_dlc;
-- 
1.7.2.3


^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [PATCH 6/9] can: ti_hecc: don't copy data to rx'ed RTR frames
       [not found] ` <1293288034-22428-1-git-send-email-mkl-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org>
  2010-12-25 14:40   ` [PATCH 1/9] can: at91_can: " Marc Kleine-Budde
  2010-12-25 14:40   ` [PATCH 3/9] can: flexcan: " Marc Kleine-Budde
@ 2010-12-25 14:40   ` Marc Kleine-Budde
  2 siblings, 0 replies; 13+ messages in thread
From: Marc Kleine-Budde @ 2010-12-25 14:40 UTC (permalink / raw)
  To: netdev-u79uwXL29TY76Z2rM5mHXA
  Cc: socketcan-core-0fE9KPoRgkgATYTw5x5z8w, Marc Kleine-Budde

While there, remove clearing of data if the dlc isn't longer as 4.
can frames have data initializes to zero.

Signed-off-by: Marc Kleine-Budde <mkl-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org>
Cc:Anant Gole <anantgole-l0cyMroinI0@public.gmane.org>
Acked-by: Wolfgang Grandegger <wg-5Yr1BZd7O62+XT7JhA+gdA@public.gmane.org>
---
 drivers/net/can/ti_hecc.c |   18 ++++++++++--------
 1 files changed, 10 insertions(+), 8 deletions(-)

diff --git a/drivers/net/can/ti_hecc.c b/drivers/net/can/ti_hecc.c
index 4d07f1e..b33581b 100644
--- a/drivers/net/can/ti_hecc.c
+++ b/drivers/net/can/ti_hecc.c
@@ -560,18 +560,20 @@ static int ti_hecc_rx_pkt(struct ti_hecc_priv *priv, int mbxno)
 		cf->can_id = (data & CAN_EFF_MASK) | CAN_EFF_FLAG;
 	else
 		cf->can_id = (data >> 18) & CAN_SFF_MASK;
+
 	data = hecc_read_mbx(priv, mbxno, HECC_CANMCF);
+	cf->can_dlc = get_can_dlc(data & 0xF);
 	if (data & HECC_CANMCF_RTR)
 		cf->can_id |= CAN_RTR_FLAG;
-	cf->can_dlc = get_can_dlc(data & 0xF);
-	data = hecc_read_mbx(priv, mbxno, HECC_CANMDL);
-	*(u32 *)(cf->data) = cpu_to_be32(data);
-	if (cf->can_dlc > 4) {
-		data = hecc_read_mbx(priv, mbxno, HECC_CANMDH);
-		*(u32 *)(cf->data + 4) = cpu_to_be32(data);
-	} else {
-		*(u32 *)(cf->data + 4) = 0;
+	else {
+		data = hecc_read_mbx(priv, mbxno, HECC_CANMDL);
+		*(u32 *)(cf->data) = cpu_to_be32(data);
+		if (cf->can_dlc > 4) {
+			data = hecc_read_mbx(priv, mbxno, HECC_CANMDH);
+			*(u32 *)(cf->data + 4) = cpu_to_be32(data);
+		}
 	}
+
 	spin_lock_irqsave(&priv->mbx_lock, flags);
 	hecc_clear_bit(priv, HECC_CANME, mbx_mask);
 	hecc_write(priv, HECC_CANRMP, mbx_mask);
-- 
1.7.2.3

^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [PATCH 7/9] can: janz-ican3: cleanup of ican3_to_can_frame and can_frame_to_ican3
  2010-12-25 14:40 [PATCH 0/9] can: don't copy data to rx'ed RTR frames Marc Kleine-Budde
                   ` (3 preceding siblings ...)
  2010-12-25 14:40 ` [PATCH 5/9] can: mcp251x: " Marc Kleine-Budde
@ 2010-12-25 14:40 ` Marc Kleine-Budde
       [not found]   ` <1293288034-22428-8-git-send-email-mkl-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org>
  2010-12-25 14:40 ` [PATCH 8/9] can: janz-ican3: don't copy data to rx'ed RTR frames Marc Kleine-Budde
  2010-12-25 14:40 ` [PATCH 9/9] can: pch_can: " Marc Kleine-Budde
  6 siblings, 1 reply; 13+ messages in thread
From: Marc Kleine-Budde @ 2010-12-25 14:40 UTC (permalink / raw)
  To: netdev; +Cc: socketcan-core, Marc Kleine-Budde, Ira W. Snyder

This patch cleans up the ICAN3 to Linux CAN frame and vice versa
conversion functions:

- RX: Use get_can_dlc() to limit the dlc value.
- TX: Drop invalid skbs wiht can_dropped_invalid_skb
- both: Don't copy the whole frame, only copy the amount of bytes specified
  in cf->can_dlc.

Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
Signed-off-by: Ira W. Snyder <iws@ovro.caltech.edu>
Acked-by: Wolfgang Grandegger <wg@grandegger.com>
---
 drivers/net/can/janz-ican3.c |   13 ++++++++-----
 1 files changed, 8 insertions(+), 5 deletions(-)

diff --git a/drivers/net/can/janz-ican3.c b/drivers/net/can/janz-ican3.c
index b9a6d7a..810345f 100644
--- a/drivers/net/can/janz-ican3.c
+++ b/drivers/net/can/janz-ican3.c
@@ -812,10 +812,10 @@ static void ican3_to_can_frame(struct ican3_dev *mod,
 
 		cf->can_id |= desc->data[0] << 3;
 		cf->can_id |= (desc->data[1] & 0xe0) >> 5;
-		cf->can_dlc = desc->data[1] & ICAN3_CAN_DLC_MASK;
-		memcpy(cf->data, &desc->data[2], sizeof(cf->data));
+		cf->can_dlc = get_can_dlc(desc->data[1] & ICAN3_CAN_DLC_MASK);
+		memcpy(cf->data, &desc->data[2], cf->can_dlc);
 	} else {
-		cf->can_dlc = desc->data[0] & ICAN3_CAN_DLC_MASK;
+		cf->can_dlc = get_can_dlc(desc->data[0] & ICAN3_CAN_DLC_MASK);
 		if (desc->data[0] & ICAN3_EFF_RTR)
 			cf->can_id |= CAN_RTR_FLAG;
 
@@ -830,7 +830,7 @@ static void ican3_to_can_frame(struct ican3_dev *mod,
 			cf->can_id |= desc->data[3] >> 5;  /* 2-0   */
 		}
 
-		memcpy(cf->data, &desc->data[6], sizeof(cf->data));
+		memcpy(cf->data, &desc->data[6], cf->can_dlc);
 	}
 }
 
@@ -862,7 +862,7 @@ static void can_frame_to_ican3(struct ican3_dev *mod,
 	}
 
 	/* copy the data bits into the descriptor */
-	memcpy(&desc->data[6], cf->data, sizeof(cf->data));
+	memcpy(&desc->data[6], cf->data, cf->can_dlc);
 }
 
 /*
@@ -1421,6 +1421,9 @@ static int ican3_xmit(struct sk_buff *skb, struct net_device *ndev)
 	void __iomem *desc_addr;
 	unsigned long flags;
 
+	if (can_dropped_invalid_skb(dev, skb))
+		return NETDEV_TX_OK;
+
 	spin_lock_irqsave(&mod->lock, flags);
 
 	/* check that we can actually transmit */
-- 
1.7.2.3


^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [PATCH 8/9] can: janz-ican3: don't copy data to rx'ed RTR frames
  2010-12-25 14:40 [PATCH 0/9] can: don't copy data to rx'ed RTR frames Marc Kleine-Budde
                   ` (4 preceding siblings ...)
  2010-12-25 14:40 ` [PATCH 7/9] can: janz-ican3: cleanup of ican3_to_can_frame and can_frame_to_ican3 Marc Kleine-Budde
@ 2010-12-25 14:40 ` Marc Kleine-Budde
  2010-12-25 14:40 ` [PATCH 9/9] can: pch_can: " Marc Kleine-Budde
  6 siblings, 0 replies; 13+ messages in thread
From: Marc Kleine-Budde @ 2010-12-25 14:40 UTC (permalink / raw)
  To: netdev; +Cc: socketcan-core, Marc Kleine-Budde

Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
Acked-by: Ira W. Snyder <iws@ovro.caltech.edu>
Acked-by: Wolfgang Grandegger <wg@grandegger.com>
---
 drivers/net/can/janz-ican3.c |   19 ++++++++++---------
 1 files changed, 10 insertions(+), 9 deletions(-)

diff --git a/drivers/net/can/janz-ican3.c b/drivers/net/can/janz-ican3.c
index 810345f..77c8413 100644
--- a/drivers/net/can/janz-ican3.c
+++ b/drivers/net/can/janz-ican3.c
@@ -807,18 +807,15 @@ static void ican3_to_can_frame(struct ican3_dev *mod,
 			       struct can_frame *cf)
 {
 	if ((desc->command & ICAN3_CAN_TYPE_MASK) == ICAN3_CAN_TYPE_SFF) {
-		if (desc->data[1] & ICAN3_SFF_RTR)
-			cf->can_id |= CAN_RTR_FLAG;
-
 		cf->can_id |= desc->data[0] << 3;
 		cf->can_id |= (desc->data[1] & 0xe0) >> 5;
+
 		cf->can_dlc = get_can_dlc(desc->data[1] & ICAN3_CAN_DLC_MASK);
-		memcpy(cf->data, &desc->data[2], cf->can_dlc);
-	} else {
-		cf->can_dlc = get_can_dlc(desc->data[0] & ICAN3_CAN_DLC_MASK);
-		if (desc->data[0] & ICAN3_EFF_RTR)
+		if (desc->data[1] & ICAN3_SFF_RTR)
 			cf->can_id |= CAN_RTR_FLAG;
-
+		else
+			memcpy(cf->data, &desc->data[2], cf->can_dlc);
+	} else {
 		if (desc->data[0] & ICAN3_EFF) {
 			cf->can_id |= CAN_EFF_FLAG;
 			cf->can_id |= desc->data[2] << 21; /* 28-21 */
@@ -830,7 +827,11 @@ static void ican3_to_can_frame(struct ican3_dev *mod,
 			cf->can_id |= desc->data[3] >> 5;  /* 2-0   */
 		}
 
-		memcpy(cf->data, &desc->data[6], cf->can_dlc);
+		cf->can_dlc = get_can_dlc(desc->data[0] & ICAN3_CAN_DLC_MASK);
+		if (desc->data[0] & ICAN3_EFF_RTR)
+			cf->can_id |= CAN_RTR_FLAG;
+		else
+			memcpy(cf->data, &desc->data[6], cf->can_dlc);
 	}
 }
 
-- 
1.7.2.3


^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [PATCH 9/9] can: pch_can: don't copy data to rx'ed RTR frames
  2010-12-25 14:40 [PATCH 0/9] can: don't copy data to rx'ed RTR frames Marc Kleine-Budde
                   ` (5 preceding siblings ...)
  2010-12-25 14:40 ` [PATCH 8/9] can: janz-ican3: don't copy data to rx'ed RTR frames Marc Kleine-Budde
@ 2010-12-25 14:40 ` Marc Kleine-Budde
       [not found]   ` <1293288034-22428-10-git-send-email-mkl-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org>
  6 siblings, 1 reply; 13+ messages in thread
From: Marc Kleine-Budde @ 2010-12-25 14:40 UTC (permalink / raw)
  To: netdev; +Cc: socketcan-core, Marc Kleine-Budde, Tomoya

Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
Cc: Tomoya <tomoya-linux@dsn.okisemi.com>
---
 drivers/net/can/pch_can.c |   15 ++++++++-------
 1 files changed, 8 insertions(+), 7 deletions(-)

diff --git a/drivers/net/can/pch_can.c b/drivers/net/can/pch_can.c
index c42e972..ee488ac 100644
--- a/drivers/net/can/pch_can.c
+++ b/drivers/net/can/pch_can.c
@@ -692,16 +692,17 @@ static int pch_can_rx_normal(struct net_device *ndev, u32 obj_num, int quota)
 			cf->can_id = id;
 		}
 
-		if (id2 & PCH_ID2_DIR)
-			cf->can_id |= CAN_RTR_FLAG;
-
 		cf->can_dlc = get_can_dlc((ioread32(&priv->regs->
 						    ifregs[0].mcont)) & 0xF);
 
-		for (i = 0; i < cf->can_dlc; i += 2) {
-			data_reg = ioread16(&priv->regs->ifregs[0].data[i / 2]);
-			cf->data[i] = data_reg;
-			cf->data[i + 1] = data_reg >> 8;
+		if (id2 & PCH_ID2_DIR) {
+			cf->can_id |= CAN_RTR_FLAG;
+
+			for (i = 0; i < cf->can_dlc; i += 2) {
+				data_reg = ioread16(&priv->regs->ifregs[0].data[i / 2]);
+				cf->data[i] = data_reg;
+				cf->data[i + 1] = data_reg >> 8;
+			}
 		}
 
 		netif_receive_skb(skb);
-- 
1.7.2.3


^ permalink raw reply related	[flat|nested] 13+ messages in thread

* Re: [PATCH 9/9] can: pch_can: don't copy data to rx'ed RTR frames
       [not found]   ` <1293288034-22428-10-git-send-email-mkl-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org>
@ 2010-12-25 15:52     ` Oliver Hartkopp
       [not found]       ` <4D161334.3090100-fJ+pQTUTwRTk1uMJSBkQmQ@public.gmane.org>
  0 siblings, 1 reply; 13+ messages in thread
From: Oliver Hartkopp @ 2010-12-25 15:52 UTC (permalink / raw)
  To: Marc Kleine-Budde
  Cc: socketcan-core-0fE9KPoRgkgATYTw5x5z8w,
	netdev-u79uwXL29TY76Z2rM5mHXA

On 25.12.2010 15:40, Marc Kleine-Budde wrote:
> Signed-off-by: Marc Kleine-Budde <mkl-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org>
> Cc: Tomoya <tomoya-linux-ECg8zkTtlr0C6LszWs/t0g@public.gmane.org>
> ---
>  drivers/net/can/pch_can.c |   15 ++++++++-------
>  1 files changed, 8 insertions(+), 7 deletions(-)
> 
> diff --git a/drivers/net/can/pch_can.c b/drivers/net/can/pch_can.c
> index c42e972..ee488ac 100644
> --- a/drivers/net/can/pch_can.c
> +++ b/drivers/net/can/pch_can.c
> @@ -692,16 +692,17 @@ static int pch_can_rx_normal(struct net_device *ndev, u32 obj_num, int quota)
>  			cf->can_id = id;
>  		}
>  
> -		if (id2 & PCH_ID2_DIR)
> -			cf->can_id |= CAN_RTR_FLAG;
> -
>  		cf->can_dlc = get_can_dlc((ioread32(&priv->regs->
>  						    ifregs[0].mcont)) & 0xF);
>  
> -		for (i = 0; i < cf->can_dlc; i += 2) {
> -			data_reg = ioread16(&priv->regs->ifregs[0].data[i / 2]);
> -			cf->data[i] = data_reg;
> -			cf->data[i + 1] = data_reg >> 8;
> +		if (id2 & PCH_ID2_DIR) {
> +			cf->can_id |= CAN_RTR_FLAG;
> +

} else {

???

> +			for (i = 0; i < cf->can_dlc; i += 2) {
> +				data_reg = ioread16(&priv->regs->ifregs[0].data[i / 2]);
> +				cf->data[i] = data_reg;
> +				cf->data[i + 1] = data_reg >> 8;
> +			}
>  		}
>  
>  		netif_receive_skb(skb);

Regards,
Oliver

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH 9/9] can: pch_can: don't copy data to rx'ed RTR frames
       [not found]       ` <4D161334.3090100-fJ+pQTUTwRTk1uMJSBkQmQ@public.gmane.org>
@ 2010-12-25 16:25         ` Marc Kleine-Budde
  0 siblings, 0 replies; 13+ messages in thread
From: Marc Kleine-Budde @ 2010-12-25 16:25 UTC (permalink / raw)
  To: Oliver Hartkopp
  Cc: socketcan-core-0fE9KPoRgkgATYTw5x5z8w,
	netdev-u79uwXL29TY76Z2rM5mHXA


[-- Attachment #1.1: Type: text/plain, Size: 1764 bytes --]

On 12/25/2010 04:52 PM, Oliver Hartkopp wrote:
> On 25.12.2010 15:40, Marc Kleine-Budde wrote:
>> Signed-off-by: Marc Kleine-Budde <mkl-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org>
>> Cc: Tomoya <tomoya-linux-ECg8zkTtlr0C6LszWs/t0g@public.gmane.org>
>> ---
>>  drivers/net/can/pch_can.c |   15 ++++++++-------
>>  1 files changed, 8 insertions(+), 7 deletions(-)
>>
>> diff --git a/drivers/net/can/pch_can.c b/drivers/net/can/pch_can.c
>> index c42e972..ee488ac 100644
>> --- a/drivers/net/can/pch_can.c
>> +++ b/drivers/net/can/pch_can.c
>> @@ -692,16 +692,17 @@ static int pch_can_rx_normal(struct net_device *ndev, u32 obj_num, int quota)
>>  			cf->can_id = id;
>>  		}
>>  
>> -		if (id2 & PCH_ID2_DIR)
>> -			cf->can_id |= CAN_RTR_FLAG;
>> -
>>  		cf->can_dlc = get_can_dlc((ioread32(&priv->regs->
>>  						    ifregs[0].mcont)) & 0xF);
>>  
>> -		for (i = 0; i < cf->can_dlc; i += 2) {
>> -			data_reg = ioread16(&priv->regs->ifregs[0].data[i / 2]);
>> -			cf->data[i] = data_reg;
>> -			cf->data[i + 1] = data_reg >> 8;
>> +		if (id2 & PCH_ID2_DIR) {
>> +			cf->can_id |= CAN_RTR_FLAG;
>> +
> 
> } else {

doh! Should not write patches after big xmas lunch.
> 
> ???
> 
>> +			for (i = 0; i < cf->can_dlc; i += 2) {
>> +				data_reg = ioread16(&priv->regs->ifregs[0].data[i / 2]);
>> +				cf->data[i] = data_reg;
>> +				cf->data[i + 1] = data_reg >> 8;
>> +			}
>>  		}
>>  
>>  		netif_receive_skb(skb);
> 
> Regards,
> Oliver

Marc
-- 
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] 13+ messages in thread

* Re: [PATCH 7/9] can: janz-ican3: cleanup of ican3_to_can_frame and can_frame_to_ican3
       [not found]   ` <1293288034-22428-8-git-send-email-mkl-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org>
@ 2010-12-26  3:32     ` David Miller
  0 siblings, 0 replies; 13+ messages in thread
From: David Miller @ 2010-12-26  3:32 UTC (permalink / raw)
  To: mkl-bIcnvbaLZ9MEGnE8C9+IrQ
  Cc: socketcan-core-0fE9KPoRgkgATYTw5x5z8w,
	netdev-u79uwXL29TY76Z2rM5mHXA, iws-lulEs6mt1IksTUYHLfqkUA

From: Marc Kleine-Budde <mkl-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org>
Date: Sat, 25 Dec 2010 15:40:32 +0100

> @@ -1421,6 +1421,9 @@ static int ican3_xmit(struct sk_buff *skb, struct net_device *ndev)
>  	void __iomem *desc_addr;
>  	unsigned long flags;
>  
> +	if (can_dropped_invalid_skb(dev, skb))
> +		return NETDEV_TX_OK;
> +

You never compile tested this.

Merry Christmas.

^ permalink raw reply	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2010-12-26  3:32 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-12-25 14:40 [PATCH 0/9] can: don't copy data to rx'ed RTR frames Marc Kleine-Budde
     [not found] ` <1293288034-22428-1-git-send-email-mkl-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org>
2010-12-25 14:40   ` [PATCH 1/9] can: at91_can: " Marc Kleine-Budde
2010-12-25 14:40   ` [PATCH 3/9] can: flexcan: " Marc Kleine-Budde
2010-12-25 14:40   ` [PATCH 6/9] can: ti_hecc: " Marc Kleine-Budde
2010-12-25 14:40 ` [PATCH 2/9] can: bfin_can: " Marc Kleine-Budde
2010-12-25 14:40 ` [PATCH 4/9] can: sja1000: " Marc Kleine-Budde
2010-12-25 14:40 ` [PATCH 5/9] can: mcp251x: " Marc Kleine-Budde
2010-12-25 14:40 ` [PATCH 7/9] can: janz-ican3: cleanup of ican3_to_can_frame and can_frame_to_ican3 Marc Kleine-Budde
     [not found]   ` <1293288034-22428-8-git-send-email-mkl-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org>
2010-12-26  3:32     ` David Miller
2010-12-25 14:40 ` [PATCH 8/9] can: janz-ican3: don't copy data to rx'ed RTR frames Marc Kleine-Budde
2010-12-25 14:40 ` [PATCH 9/9] can: pch_can: " Marc Kleine-Budde
     [not found]   ` <1293288034-22428-10-git-send-email-mkl-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org>
2010-12-25 15:52     ` Oliver Hartkopp
     [not found]       ` <4D161334.3090100-fJ+pQTUTwRTk1uMJSBkQmQ@public.gmane.org>
2010-12-25 16:25         ` Marc Kleine-Budde

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).