kernel/eka/kernel/sexec.cpp
branchRCL_3
changeset 44 3e88ff8f41d5
parent 43 c1f20ce4abcf
child 45 9e2d4f7f5028
--- 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);