On 07.02.2013 23:07, Thierry Reding wrote:
On Wed, Feb 06, 2013 at 01:23:17PM -0800, Terje Bergström wrote:
That's the security firewall. It walks through each submit, and ensures that each register write that writes an address, goes through the host1x reloc mechanism. This way user space cannot ask 2D to write to arbitrary memory locations.
I see. Can this be made more generic? Perhaps adding a table of valid registers to the device and use a generic function to iterate over that instead of having to provide the same function for each client.
For which one does gcc generate more efficient code? I've thought a switch-case statement might get compiled into something more efficient than a table lookup. But the rest of the code is generic - just the one function which compares against known address registers is specific to 2D.
Table lookup should be pretty fast. I wouldn't worry too much about performance at this stage, though. Readability is more important in my opinion. A lookup table is a lot more readable and reusable I think. If it turns out that using a function is actually faster we can always optimize later.
You're right about performance. We already saw quite a bad performance hit with the current firewall, so we'll need to worry about performance later.
I'll take a look at converting the register list to a table. Instead of always doing a linear search of a table, a bitfield might be more appropriate.
Terje