[PATCH] powerpc: Fix race in the pasemi timebase calibration
Paul Mackerras
paulus at samba.org
Wed Aug 22 11:27:33 EST 2007
Olof Johansson writes:
> Make sure the new timebase value is available by the time take_timebase
> completes. Otherwise take_timebase might race with give_timebase,
> causing severe badness when the value later is modified (think looong
> hang trying to catch up with a very large number of lost ticks).
OK.
> @@ -61,6 +62,7 @@ static void __devinit pas_give_timebase(
> mtspr(SPRN_TBCTL, TBCTL_UPDATE_LOWER | (tb & 0xffffffff));
> mtspr(SPRN_TBCTL, TBCTL_UPDATE_UPPER | (tb >> 32));
> mtspr(SPRN_TBCTL, TBCTL_RESTART);
> + timebase_avail = 1;
No memory barrier before setting timebase_avail? Shouldn't there be
one?
Actually I don't understand that code at all. Your give_timebase
seems to freeze the timebase, read it, set it to the same value and
restart, all without synchronizing with the other cpu, and your
take_timebase does nothing except print the timebase. How does that
work?
Regards,
Paul.
More information about the Linuxppc-dev
mailing list