On 09/06/2016 20:08, Andy Lutomirski wrote: > > __pvclock_read_cycles is pretty much the same as the code that is being > > inlined. Thus the only change is that __pvclock_read_cycles is called > > inside the loop rather than outside, but the loop really is expected to > > never roll so why make a copy in the first place? > > I feel like I had a reason, but I don't remember what it was. I cannot see any substantial difference in the generated code with this patch. On the other hand, if I add this: diff --git a/arch/x86/include/asm/pvclock.h b/arch/x86/include/asm/pvclock.h index 0ee92db1e9f3..d019f0cc80ec 100644 --- a/arch/x86/include/asm/pvclock.h +++ b/arch/x86/include/asm/pvclock.h @@ -40,7 +40,7 @@ bool pvclock_read_retry(const struct pvclock_vcpu_time_info *src, { /* Make sure that the version is re-read after the data. */ virt_rmb(); - return version != src->version; + return unlikely(version != src->version); } /* then vread_pvclock is inlined everywhere, which bloats the code somewhat (+80 code bytes). Do you want me to mark vread_pvclock as noinline too? Paolo -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html