Messages in this thread | | | Date | Fri, 20 Feb 2015 16:03:57 -0800 | Subject | Re: [GIT PULL] locking fixes | From | Linus Torvalds <> |
| |
How does this work for you at all?
On Fri, Feb 20, 2015 at 5:37 AM, Ingo Molnar <mingo@kernel.org> wrote: > diff --git a/arch/x86/kernel/kvm.c b/arch/x86/kernel/kvm.c > index 94f643484300..e354cc6446ab 100644 > --- a/arch/x86/kernel/kvm.c > +++ b/arch/x86/kernel/kvm.c > @@ -803,8 +808,8 @@ static void kvm_unlock_kick(struct arch_spinlock *lock, __ticket_t ticket) > add_stats(RELEASED_SLOW, 1); > for_each_cpu(cpu, &waiting_cpus) { > const struct kvm_lock_waiting *w = &per_cpu(klock_waiting, cpu); > - if (ACCESS_ONCE(w->lock) == lock && > - ACCESS_ONCE(w->want) == ticket) { > + if (READ_ONCE(w->lock) == lock && > + READ_ONCE(w->want) == ticket) { > add_stats(RELEASED_SLOW_KICKED, 1); > kvm_kick_cpu(cpu); > break;
I get horrible compile warnings from this, because of how 'w' is a pointer to a 'const' structure, which then causes things like
include/linux/compiler.h:262:39: warning: passing argument 1 of ‘__read_once_size’ discards ‘const’ qualifier from pointer target type ({ typeof(x) __val; __read_once_size(&x, &__val, sizeof(__val)); __val; })
which is fairly hard to avoid (looks like it might need a union)
Linus
| |