On 04/01/2015 07:50 AM, Oliver Hartkopp wrote: > The CAN_RAW socket can set multiple CAN identifier specific filters that lead > to multiple filters in the af_can.c filter processing. These filters are > indenpendent from each other which leads to logical OR'ed filters when applied. > > This patch makes sure that every CAN frame which is filtered for a specific > socket is only delivered once to the user space. This is independent from the > number of matching CAN filters of this socket. > > As the raw_rcv() function is executed from NET_RX softirq the introduced > variables are implemented as per-CPU variables to avoid extensive locking at > CAN frame reception time. > > Signed-off-by: Oliver Hartkopp > --- > net/can/raw.c | 21 +++++++++++++++++++++ > 1 file changed, 21 insertions(+) > > diff --git a/net/can/raw.c b/net/can/raw.c > index 00c13ef..8c75446 100644 > --- a/net/can/raw.c > +++ b/net/can/raw.c > @@ -74,6 +74,11 @@ MODULE_ALIAS("can-proto-1"); > * storing the single filter in dfilter, to avoid using dynamic memory. > */ > > +struct uniqframe { > + const struct sk_buff *skb; > + ktime_t tstamp; > +}; Nitpick: as ktime_t is always a 64 bit value, I think putting it first might provide better alignment. No need to repost, I'll change this while applying, if you're okay with this. 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 |