diff -r a179b74831c9 -r c1f20ce4abcf kernel/eka/nkernsmp/nk_timer.cpp --- a/kernel/eka/nkernsmp/nk_timer.cpp Thu Aug 19 11:14:22 2010 +0300 +++ b/kernel/eka/nkernsmp/nk_timer.cpp Tue Aug 31 16:34:26 2010 +0300 @@ -26,7 +26,7 @@ GLDEF_D NTimerQ TheTimerQ; -extern "C" void send_irq_ipi(TSubScheduler*); +extern "C" void send_irq_ipi(TSubScheduler*, TInt); #ifndef __MSTIM_MACHINE_CODED__ #ifdef _DEBUG @@ -345,7 +345,6 @@ // Wait aTime from last trigger time - used for periodic timers // { - __NK_ASSERT_DEBUG(aTime>0); TInt irq = TheTimerQ.iTimerSpinLock.LockIrqSave(); if (!IsValid()) { @@ -586,6 +585,8 @@ { __KTRACE_OPT(KBOOT,DEBUGPRINT("NTimerQ::Init3 DFCQ at %08x",aDfcQ)); TheTimerQ.iDfc.SetDfcQ(aDfcQ); + NThreadBase* t = aDfcQ->iThread; + t->iRebalanceAttr = 1; } #ifndef __MSTIM_MACHINE_CODED__ @@ -742,8 +743,7 @@ EXPORT_C void NTimerQ::Tick() { TInt irq = iTimerSpinLock.LockIrqSave(); - TInt i=iMsCount & ETimerQMask; - iMsCount++; + TInt i = TInt(__e32_atomic_add_rlx64(&iMsCount64, 1)) & ETimerQMask; STimerQ* pQ=iTickQ+i; iPresent &= ~(1<i_NTimer_iState = TUint8(NTimer::EEventQ + cpu); TSubScheduler* ss = TheSubSchedulers + cpu; - TBool kick = ss->QueueEvent(pC); + TInt kick = ss->QueueEvent(pC); iTimerSpinLock.UnlockIrqRestore(irq); if (kick) - send_irq_ipi(ss); + send_irq_ipi(ss, kick); continue; } } @@ -921,8 +921,8 @@ */ EXPORT_C void NTimerQ::Advance(TInt aTicks) { - CHECK_PRECONDITIONS(MASK_INTERRUPTS_DISABLED,"NTimerQ::Advance"); - TheTimerQ.iMsCount+=(TUint32)aTicks; + CHECK_PRECONDITIONS(MASK_INTERRUPTS_DISABLED,"NTimerQ::Advance"); + __e32_atomic_add_rlx64(&TheTimerQ.iMsCount64, TUint64(TUint32(aTicks))); }