From: Oliver Hartkopp <socketcan@hartkopp.net>
To: Alexander Stein <alexander.stein@systec-electronic.com>,
Thomas Gleixner <tglx@linutronix.de>
Cc: Marc Kleine-Budde <mkl@pengutronix.de>,
Wolfgang Grandegger <wg@grandegger.com>,
"linux-can@vger.kernel.org" <linux-can@vger.kernel.org>
Subject: Re: [PATCH] c_can: Add support for eg20t (pch_can)
Date: Thu, 03 Apr 2014 21:28:35 +0200 [thread overview]
Message-ID: <533DB663.3030408@hartkopp.net> (raw)
In-Reply-To: <1497730.QLQMESBtqQ@ws-stein>
Hello Alexander,
one of the differences of the SMP patch from Thomas
http://marc.info/?l=linux-can&m=139638860032202&w=2
and your patch
http://marc.info/?l=linux-can&m=139403248814172&w=2
is that you introduced a
spin_lock_irqsave(&priv->lock, flags);
additionally to the usage of the two different message interfaces.
Could this probably help to fix the concurrent access?
Regards,
Oliver
On 03.04.2014 17:47, Alexander Stein wrote:
> On Thursday 03 April 2014 17:11:18, Thomas Gleixner wrote:
>>>> based on tag 'linux-can-fixes-for-3.15-20140401' on repository git://gitorious.org/linux-can/linux-can I have noticed message losts(only one message each time). Interestingly 'candump any,0~0,#FFFFFFFF' didn't show yn error frames.
>>>> From 500000 CAN frames I lost 72 frames.
>>
>> The split RX buffer handling is causing the hardware to drop frames
>> without giving any notice. We debugged that in the last days and can
>> prove that it is an hardware issue. Fun, isn't it ?
>>
>> The package drop happens always at the point where the 8th message
>> buffer is read out and all the lower buffers are reenabled. So
>> something confuses the state machine of the message handler here.
>>
>> If we disable the split buffer handling, then the drop out stops. That
>> might cause packet reordering though. Find below a test patch.
>
> I had to modify your patch slightly, but It didn't show any reordering though. Just the lost messages as before.
> Regarding http://marc.info/?l=linux-can&m=139403207713987&w=2 it seems there is a race, when reenabling the lower buffers, bewteen reading current state and hardware inserting new message.
>
> Alexander
>
> Here is my used patch:
> diff --git a/drivers/net/can/c_can/Kconfig b/drivers/net/can/c_can/Kconfig
> index 61ffc12..fdca6a9 100644
> --- a/drivers/net/can/c_can/Kconfig
> +++ b/drivers/net/can/c_can/Kconfig
> @@ -14,6 +14,12 @@ config CAN_C_CAN_PLATFORM
> SPEAr1310 and SPEAr320 evaluation boards & TI (www.ti.com)
> boards like am335x, dm814x, dm813x and dm811x.
>
> +config CAN_C_CAN_NO_RX_SPLIT
> + bool "Disable RX Split buffer"
> + ---help---
> + RX Split buffer prevents packet reordering but can cause packet
> + loss. Select the lesser of the two evils.
> +
> config CAN_C_CAN_PCI
> tristate "Generic PCI Bus based C_CAN/D_CAN driver"
> depends on PCI
> diff --git a/drivers/net/can/c_can/c_can.c b/drivers/net/can/c_can/c_can.c
> index 01dc494..d9dbac4 100644
> --- a/drivers/net/can/c_can/c_can.c
> +++ b/drivers/net/can/c_can/c_can.c
> @@ -808,8 +808,12 @@ static int c_can_read_objects(struct net_device *dev, struct c_can_priv *priv,
> while ((obj = ffs(pend)) && quota > 0) {
> pend &= ~BIT(obj - 1);
>
> +#ifndef CONFIG_CAN_C_CAN_NO_RX_SPLIT
> mcmd = obj < C_CAN_MSG_RX_LOW_LAST ?
> IF_COMM_RCV_LOW : IF_COMM_RCV_HIGH;
> +#else
> + mcmd = IF_COMM_RCV_HIGH;
> +#endif
>
> c_can_object_get(dev, IF_RX, obj, mcmd);
> ctrl = priv->read_reg(priv, C_CAN_IFACE(MSGCTRL_REG, IF_RX));
> @@ -833,10 +837,11 @@ static int c_can_read_objects(struct net_device *dev, struct c_can_priv *priv,
> /* read the data from the message object */
> c_can_read_msg_object(dev, IF_RX, ctrl);
>
> +#ifndef CONFIG_CAN_C_CAN_NO_RX_SPLIT
> if (obj == C_CAN_MSG_RX_LOW_LAST)
> /* activate all lower message objects */
> c_can_activate_all_lower_rx_msg_obj(dev, IF_RX, ctrl);
> -
> +#endif
> pkts++;
> quota--;
> }
>
next prev parent reply other threads:[~2014-04-03 19:28 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-04-03 14:14 [PATCH] c_can: Add support for eg20t (pch_can) Alexander Stein
2014-04-03 14:55 ` Alexander Stein
2014-04-03 14:59 ` Marc Kleine-Budde
2014-04-03 15:11 ` Thomas Gleixner
2014-04-03 15:47 ` Alexander Stein
2014-04-03 19:28 ` Oliver Hartkopp [this message]
2014-04-03 20:59 ` Thomas Gleixner
2014-04-03 20:28 ` Thomas Gleixner
2014-04-03 18:41 ` Wolfgang Grandegger
2014-04-07 9:47 ` Alexander Stein
2014-04-07 10:19 ` Wolfgang Grandegger
2014-04-07 12:06 ` Thomas Gleixner
2014-04-07 12:07 ` Marc Kleine-Budde
2014-04-07 12:24 ` Alexander Stein
2014-04-07 12:34 ` Thomas Gleixner
2014-04-07 12:48 ` Alexander Stein
2014-04-07 12:56 ` Thomas Gleixner
2014-04-07 12:58 ` Alexander Stein
2014-04-07 13:31 ` Thomas Gleixner
2014-04-07 14:27 ` Alexander Stein
2014-04-07 15:24 ` Thomas Gleixner
2014-04-07 15:36 ` Alexander Stein
2014-04-07 15:53 ` Thomas Gleixner
2014-04-07 16:06 ` Alexander Stein
2014-04-07 16:27 ` Thomas Gleixner
2014-04-08 7:07 ` Alexander Stein
2014-04-08 8:26 ` Thomas Gleixner
2014-04-08 8:36 ` Alexander Stein
2014-04-08 7:18 ` Alexander Stein
2014-04-08 7:35 ` Thomas Gleixner
2014-04-07 16:27 ` Wolfgang Grandegger
2014-04-07 20:03 ` Thomas Gleixner
2014-04-08 6:17 ` Alexander Stein
2014-04-08 8:04 ` Thomas Gleixner
2014-04-07 18:11 ` Marc Kleine-Budde
2014-04-07 18:15 ` Thomas Gleixner
2014-04-17 19:53 ` Marc Kleine-Budde
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=533DB663.3030408@hartkopp.net \
--to=socketcan@hartkopp.net \
--cc=alexander.stein@systec-electronic.com \
--cc=linux-can@vger.kernel.org \
--cc=mkl@pengutronix.de \
--cc=tglx@linutronix.de \
--cc=wg@grandegger.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).