Messages in this thread | | | Date | Mon, 17 Oct 2011 09:33:26 -0700 | From | "H. Peter Anvin" <> | Subject | Re: [PATCH RFC V5 00/11] Paravirtualized ticketlocks |
| |
On 10/13/2011 09:44 AM, Jeremy Fitzhardinge wrote: > > Yeah, that's a good question. There are three mechanisms with somewhat > overlapping concerns: > > * alternative() > * pvops patching > * jump_labels > > Alternative() is for low-level instruction substitution, and really only > makes sense at the assembler level with one or two instructions. > > pvops is basically a collection of ordinary _ops structures full of > function pointers, but it has a layer of patching to help optimise it. > In the common case, this just replaces an indirect call with a direct > one, but in some special cases it can inline code. This is used for > small, extremely performance-critical things like cli/sti, but it > awkward to use in general because you have to specify the inlined code > as a parameterless asm. > > Jump_labels is basically an efficient way of doing conditionals > predicated on rarely-changed booleans - so it's similar to pvops in that > it is effectively a very ordinary C construct optimised by dynamic code > patching.
Then there is static_cpu_has(), which is basically jump labels implemented using the alternatives mechanism.
If nothing else it would be good to:
1. Make more general use of ops patching; 2. Merge mechanisms where practical.
-hpa
-- H. Peter Anvin, Intel Open Source Technology Center I work for Intel. I don't speak on their behalf.
| |