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. _______________________________________________ Linuxppc-dev mailing list Linuxppc-dev@ozlabs.org https://ozlabs.org/mailman/listinfo/linuxppc-dev