* [PATCH 0/9] can: don't copy data to rx'ed RTR frames
@ 2010-12-25 14:40 Marc Kleine-Budde
2010-12-25 14:40 ` [PATCH 2/9] can: bfin_can: " Marc Kleine-Budde
` (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
@ 2010-12-25 14:40 ` Marc Kleine-Budde
[not found] ` <1293288034-22428-1-git-send-email-mkl-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org>
` (5 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(®->chl[obj].id1) & RTR)
- cf->can_id |= CAN_RTR_FLAG;
/* get data length code */
cf->can_dlc = get_can_dlc(bfin_read16(®->chl[obj].dlc) & 0xF);
- /* get payload */
- for (i = 0; i < 8; i += 2) {
- val = bfin_read16(®->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(®->chl[obj].id1) & RTR)
+ cf->can_id |= CAN_RTR_FLAG;
+ else /* get payload */
+ for (i = 0; i < 8; i += 2) {
+ val = bfin_read16(®->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, ®s->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
2010-12-25 14:40 ` [PATCH 2/9] can: bfin_can: " 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 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
2010-12-25 14:40 ` [PATCH 2/9] can: bfin_can: " 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 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).