What is the "DAQ Work" you're doing? Do you mean "Data Acquisition"? How time critical is it?
How fast is the CAN bus? Do you KNOW the interrupt load is a problem? It may not be worth worrying about.
For reference, with the MX53 FlexCAN drivers, the worst that can happen (apart from a really 100% full CAN bus which is unusual) is to have a DISCONNECTED CAN bus, and then have software try and send a message. The FlexCAN driver has all interrupts on, so it unnecessarily interrupts for every time it tries to resent the message, which is as fast as it can. That's about 30,900 interrupts/second on a 1MBit CAN bus.
That steals about 15% of our 800MHz i.MX53 CPU. Two buses doing the same thing take 33%.
If you never send a CAN message then this won't happen to you.
Automotive CAN buses are seldom 1MBit, and they're seldom full. They should run pretty conservatively. So the loading on your CPU may only be a few percent.
You shouldn't be pressing the CPU so hard that this matters, and the interrupts are all pretty short so it shouldn't delay you other code by much. Traffic on Ethernet is a far worse problem. These error interrupts do schedule NAPI processes though.
> I've look into the source code for some while
The chip is quite powerful and flexible, but none of this is made available by the driver. The only reference to the filter registers in our Linux 3.4 source is:
drivers/net/can/flexcan.c:
/* acceptance mask/acceptance code (accept everything) */
flexcan_write(0x0, ®s->rxgmask);
flexcan_write(0x0, ®s->rx14mask);
flexcan_write(0x0, ®s->rx15mask);
You would have a lot of trouble trying to make it any smarter, as I seem to remember that the "filter matching" is performed in a totally separate piece of code somewhere. The purpose of the "filters" is to control the distribution of the received CAN messages to the appropriate user socket. It is not there to filter at the hardware level.
Tom