Messages in this thread | | | Subject | Re: [PATCH 3/3 V2] pvclock: Get rid of __pvclock_read_cycles in function pvclock_read_flags | From | Paolo Bonzini <> | Date | Thu, 9 Jun 2016 14:26:59 +0200 |
| |
On 09/06/2016 14:16, Peter Zijlstra wrote: > On Sat, May 28, 2016 at 08:27:43PM +0800, Minfei Huang wrote: >> +++ b/arch/x86/kernel/pvclock.c >> @@ -61,11 +61,14 @@ void pvclock_resume(void) >> u8 pvclock_read_flags(struct pvclock_vcpu_time_info *src) >> { >> unsigned version; >> - cycle_t ret; >> u8 flags; >> >> do { >> - version = __pvclock_read_cycles(src, &ret, &flags); >> + version = src->version; >> + /* Make the latest version visible */ >> + smp_rmb(); >> + >> + flags = src->flags; > > Using a seqcount to load a single byte is insane ;-)
Only if you know that the writer will not write that byte twice within a critical section...
Which I guess we do know in this case because the write side is just a memcpy, but it's still a bit safer when it's not specified by the pvclock API. It's not a fast path anyway, it runs literally twice at startup.
Paolo
| |