On Thu, 26 May 2011, Dave Martin wrote:

> > The core logic spans 5 instructions.  Only 3 of them are actually the 
> > same in both cases i.e. those with no references to 1b or 2b, and 
> > they're perfectly interlaced in between the others.  Trying to make this 
> > into common runtime code would result in even bigger code I'm afraid.  
> > This could be made into common source code via a macro though.
> 
> Fair enough -- a macro might be worth a try _if_ it simplifies things
> in the source, but I think you're right that merging the actual code
> probably isn't worth it just to save a few words in the vectors page
> (which eats up 4K regardless of what we put in it) and a few cycles per
> fault (which already costs many, many cycles).

In the normal cases, there is no additional cycles per fault as the 
inline check remains unchanged, and it goes like this:

        @ Make sure our user space atomic helper is restarted
        @ if it was interrupted in a critical region.  Here we
        @ perform a quick test inline since it should be false
        @ 99.9999% of the time.  The rest is done out of line.
        cmp     r2, #TASK_SIZE
        blhs    kuser_cmpxchg_fixup

In most cases the branch is not taken.


Nicolas

_______________________________________________
linaro-dev mailing list
linaro-dev@lists.linaro.org
http://lists.linaro.org/mailman/listinfo/linaro-dev

Reply via email to