--- 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);