diff -r c1f20ce4abcf -r 3e88ff8f41d5 kernel/eka/kernel/sexec.cpp --- a/kernel/eka/kernel/sexec.cpp Tue Aug 31 16:34:26 2010 +0300 +++ b/kernel/eka/kernel/sexec.cpp Wed Sep 01 12:34:56 2010 +0100 @@ -36,7 +36,7 @@ TFindHandle h; Kern::KUDesGet(match,aName); kumemget32(&h,&aFindHandle,sizeof(h)); - __KTRACE_OPT(KEXEC,Kern::Printf("ObjN: %S %08x", &match, h.Handle())); + __KTRACE_OPT(KEXEC,Kern::Printf("ObjN: %lS %08x", &match, h.Handle())); NKern::ThreadEnterCS(); TInt r=pC->FindByFullName(h, match, fn); NKern::ThreadLeaveCS(); @@ -96,26 +96,14 @@ return aChunk->Top(); } -TInt ExecHandler::MutexWait(DMutex* aMutex, TInt aTimeout) +void ExecHandler::MutexWait(DMutex* aMutex) // // Wait for the mutex. // { - if (aTimeout) // 0 means wait forever, -1 means poll - { - if (aTimeout<-1) - { - return KErrArgument; - } - if (aTimeout>0) - { - // Convert microseconds to NTimer ticks, rounding up - TInt ntp = NKern::TickPeriod(); - aTimeout += ntp-1; - aTimeout /= ntp; - } - } - return aMutex->Wait(aTimeout); + +// __KTRACE_OPT(KEXEC,Kern::Printf("Exec::MutexWait")); + aMutex->Wait(); } void ExecHandler::MutexSignal(DMutex* aMutex) @@ -567,21 +555,20 @@ // Wait for a signal. // { + __KTRACE_OPT(KEXEC,Kern::Printf("Exec::SemaphoreWait")); - if (aTimeout) // 0 means wait forever, -1 means poll + if (aTimeout) { - if (aTimeout<-1) + if (aTimeout<0) { NKern::UnlockSystem(); return KErrArgument; } - if (aTimeout>0) - { - // Convert microseconds to NTimer ticks, rounding up - TInt ntp = NKern::TickPeriod(); - aTimeout += ntp-1; - aTimeout /= ntp; - } + + // Convert microseconds to NTimer ticks, rounding up + TInt ntp = NKern::TickPeriod(); + aTimeout += ntp-1; + aTimeout /= ntp; } return aSemaphore->Wait(aTimeout); } @@ -825,7 +812,7 @@ TKName n; if (aName) Kern::KUDesGet(n,*aName); - __KTRACE_OPT(KEXEC,Kern::Printf("Exec::ChunkCreate %S",&n)); + __KTRACE_OPT(KEXEC,Kern::Printf("Exec::ChunkCreate %lS",&n)); TChunkCreate uinfo; SChunkCreateInfo info; kumemget32(&uinfo,&anInfo,sizeof(uinfo)); @@ -951,9 +938,9 @@ TInt ExecHandler::OpenObject(TObjectType aObjType, const TDesC8& aName, TOwnerType aType) { + __KTRACE_OPT(KTHREAD,Kern::Printf("Exec::OpenObject %lS",&aName)); TFullName n; Kern::KUDesGet(n,aName); - __KTRACE_OPT(KTHREAD,Kern::Printf("Exec::OpenObject %S",&n)); if (Kern::ValidateFullName(n)!=KErrNone) K::PanicKernExec(EBadName); if ((TUint)aObjType>=(TUint)ENumObjectTypes) @@ -1025,12 +1012,12 @@ { Kern::KUDesGet(n,*aName); pN=&n; - __KTRACE_OPT(KSEMAPHORE,Kern::Printf("Exec::MutexCreate %S",pN)); } else if (aType==EOwnerThread) pO=TheCurrentThread; else pO=TheCurrentThread->iOwningProcess; + __KTRACE_OPT(KSEMAPHORE,Kern::Printf("Exec::MutexCreate %lS",aName)); NKern::ThreadEnterCS(); DMutex* pM; TInt r=K::MutexCreate(pM, *pN, pO, ETrue, KMutexOrdUser); @@ -1049,6 +1036,7 @@ TInt ExecHandler::SemaphoreCreate(const TDesC8* aName, TInt aCount, TOwnerType aType) { + __KTRACE_OPT(KSEMAPHORE,Kern::Printf("Exec::SemaphoreCreate %lS",aName)); TKName n; DObject* pO=NULL; const TDesC* pN=NULL; @@ -1056,7 +1044,6 @@ { Kern::KUDesGet(n,*aName); pN=&n; - __KTRACE_OPT(KSEMAPHORE,Kern::Printf("Exec::SemaphoreCreate %S",pN)); } else if (aType==EOwnerThread) pO=TheCurrentThread; @@ -1243,7 +1230,7 @@ { TKName n; Kern::KUDesGet(n,aName); - __KTRACE_OPT(KEXEC,Kern::Printf("Exec::ThreadRename %S",&n)); + __KTRACE_OPT(KEXEC,Kern::Printf("Exec::ThreadRename %lS",&n)); NKern::LockSystem(); DThread* pT=(DThread*)K::ThreadEnterCS(aHandle,EThread); if (pT!=TheCurrentThread && @@ -1268,7 +1255,7 @@ { TKName n; Kern::KUDesGet(n,aName); - __KTRACE_OPT(KEXEC,Kern::Printf("Exec::ProcessRename %S",&n)); + __KTRACE_OPT(KEXEC,Kern::Printf("Exec::ProcessRename %lS",&n)); NKern::LockSystem(); DProcess* pP=(DProcess*)K::ThreadEnterCS(aHandle,EProcess); if (pP->iSecurityZone!=TheCurrentThread->iOwningProcess->iSecurityZone) @@ -1628,15 +1615,6 @@ break; } - case EDbgGetAllocFail: - { - NKern::ThreadEnterCS(); - TInt allocFail = K::Allocator->__DbgGetAllocFail(); - NKern::ThreadLeaveCS(); - kumemput32(a2, (TAny*)&allocFail, sizeof(TInt)); - break; - } - default: panic=EBadKernelHeapDebugFunction; break; @@ -1920,7 +1898,7 @@ { TKName n; Kern::KUDesGet(n,aName); - __KTRACE_OPT(KEXEC,Kern::Printf("Exec::ThreadCreate %S",&n)); + __KTRACE_OPT(KEXEC,Kern::Printf("Exec::ThreadCreate %lS",&n)); TUint32 infoBuf[KMaxThreadCreateInfo/sizeof(TUint32)]; SThreadCreateInfo& info = *(SThreadCreateInfo*)infoBuf; kumemget32(&info, &aInfo, sizeof(SThreadCreateInfo)); @@ -1955,7 +1933,7 @@ TInt K::MutexCreate(DMutex*& aMutex, const TDesC& aName, DObject* anOwner, TBool aVisible, TUint aOrder) { - __KTRACE_OPT(KSEMAPHORE,Kern::Printf("K::MutexCreate %S owner %O visible=%d order=%02x",&aName,anOwner,aVisible,aOrder)); + __KTRACE_OPT(KSEMAPHORE,Kern::Printf("K::MutexCreate %lS owner %O visible=%d order=%02x",&aName,anOwner,aVisible,aOrder)); DMutex* pM=new DMutex; TInt r=KErrNoMemory; if (pM) @@ -2022,7 +2000,7 @@ EXPORT_C TInt Kern::ThreadCreate(SThreadCreateInfo& aInfo) { CHECK_PRECONDITIONS(MASK_THREAD_CRITICAL,"Kern::ThreadCreate"); - __KTRACE_OPT(KEXEC,Kern::Printf("Kern::ThreadCreate %S",&aInfo.iName)); + __KTRACE_OPT(KEXEC,Kern::Printf("Kern::ThreadCreate %lS",&aInfo.iName)); aInfo.iHandle=NULL; DThread* pT=NULL; TBool svc = aInfo.iType!=EThreadUser; @@ -2168,23 +2146,18 @@ } #ifdef MONITOR_THREAD_CPU_TIME -TInt ExecHandler::ThreadGetCpuTime(TInt aThreadHandle, Int64& aTime) +TInt ExecHandler::ThreadGetCpuTime(DThread* aThread, Int64& aTime) { - TUint64 t = 0; - if (aThreadHandle == KCurrentThreadHandle) - { - t = NKern::ThreadCpuTime(NKern::CurrentThread()); - } - else - { - NKern::LockSystem(); - DThread* pT = (DThread*)K::ObjectFromHandle(aThreadHandle, EThread); - t = NKern::ThreadCpuTime(&pT->iNThread); - NKern::UnlockSystem(); - } +#ifndef __SMP__ + TInt64 time = (1000000 * aThread->iNThread.iTotalCpuTime) / NKern::FastCounterFrequency(); + NKern::UnlockSystem(); + kumemput32(&aTime, &time, sizeof(TInt64)); +#else + TUint64 t = NKern::ThreadCpuTime(&aThread->iNThread); + NKern::UnlockSystem(); TUint32 f = NKern::CpuTimeMeasFreq(); TUint64 t2 = t>>32; - t = (t & KMaxTUint32)*1000000; + t = ((t<<32)>>32)*1000000; t2 *= 1000000; t2 += (t>>32); t &= TUint64(KMaxTUint32); @@ -2194,11 +2167,13 @@ TUint64 q = t/f; q += (q2<<32); kumemput32(&aTime, &q, sizeof(TInt64)); +#endif return KErrNone; } -#else -TInt ExecHandler::ThreadGetCpuTime(TInt /*aThreadHandle*/, Int64& /*aTime*/) +#else +TInt ExecHandler::ThreadGetCpuTime(DThread* /*aThread*/, Int64& /*aTime*/) { + NKern::UnlockSystem(); return KErrNotSupported; } #endif @@ -2223,10 +2198,10 @@ __KTRACE_OPT(KBOOT,Kern::Printf("File server thread registered")); DThread* pT = TheCurrentThread; DProcess* pP = pT->iOwningProcess; + pP->iFlags |= (KThreadFlagProcessCritical | KProcessFlagSystemPermanent); + pT->iFlags |= KThreadFlagSystemPermanent; if (K::TheFileServerProcess && K::TheFileServerProcess!=pP) K::PanicCurrentThread(EAccessDenied); - pP->iFlags |= (KThreadFlagProcessCritical | KProcessFlagSystemPermanent); - pT->iFlags |= KThreadFlagSystemPermanent; K::TheFileServerProcess=pP; K::ThreadEnterCS(); pP->SetPriority(EPriorityFileServer);