Messages in this thread | | | Date | Thu, 21 May 2009 18:42:33 -0400 | From | Chuck Ebbert <> | Subject | Re: Performance overhead of paravirt_ops on native identified |
| |
On Wed, 13 May 2009 17:16:55 -0700 Jeremy Fitzhardinge <jeremy@goop.org> wrote:
> Paravirt patching turns all the pvops calls into direct calls, so > _spin_lock etc do end up having direct calls. For example, the compiler > generated code for paravirtualized _spin_lock is: > > <_spin_lock+0>: mov %gs:0xb4c8,%rax > <_spin_lock+9>: incl 0xffffffffffffe044(%rax) > <_spin_lock+15>: callq *0xffffffff805a5b30 > <_spin_lock+22>: retq > > The indirect call will get patched to: > <_spin_lock+0>: mov %gs:0xb4c8,%rax > <_spin_lock+9>: incl 0xffffffffffffe044(%rax) > <_spin_lock+15>: callq <__ticket_spin_lock> > <_spin_lock+20>: nop; nop /* or whatever 2-byte nop */ > <_spin_lock+22>: retq >
Can't those calls be changed to jumps?
| |