On Wed, 16 Jan 2008, Mathieu Desnoyers wrote: > Hrm, I will reply to the rest of this email in a separate mail, but > there is another concern, simpler than memory ordering, that just hit > me : > > If we have CPU A calling clocksource_accumulate while CPU B is calling > get_monotonic_cycles, but events happens in the following order (because > of preemption or interrupts). Here, to make things worse, we would be on > x86 where cycle_t is not an atomic write (64 bits) : > > > CPU A CPU B > > clocksource read > update cycle_mono (1st 32 bits) > read cycle_mono > read cycle_last > clocksource read > read cycle_mono > read cycle_last > update cycle_mono (2nd 32 bits) > update cycle_last > update cycle_acc > > Therefore, we have : > - an inconsistant cycle_monotonic value > - inconsistant cycle_monotonic and cycle_last values. > > Or is there something I have missed ?
No, there's probably issues there too, but no need to worry about it, since I already showed that allowing for clocksource_accumulate to happen inside the get_monotonic_cycles loop is already flawed. > > If you really want an seqlock free algorithm (I _do_ want this for > tracing!) :) maybe going in the RCU direction could help (I refer to my > RCU-based 32-to-64 bits lockless timestamp counter extension, which > could be turned into the clocksource updater). I know you pointed me the code, but lets assume that I'm still ignorant ;-) do you actually use the RCU internals? or do you just reimplement an RCU algorithm? -- Steve -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/