kernel/eka/kernel/arm/cache_maintenance.cpp
branchRCL_3
changeset 44 3e88ff8f41d5
parent 43 c1f20ce4abcf
equal deleted inserted replaced
43:c1f20ce4abcf 44:3e88ff8f41d5
  1114 	}
  1114 	}
  1115 
  1115 
  1116 void TCacheBroadcast::DoThreadOp()
  1116 void TCacheBroadcast::DoThreadOp()
  1117 	{
  1117 	{
  1118 	CHECK_PRECONDITIONS(MASK_THREAD_STANDARD,"TCacheBroadcast::DoThreadOp");
  1118 	CHECK_PRECONDITIONS(MASK_THREAD_STANDARD,"TCacheBroadcast::DoThreadOp");
  1119 	TCoreCycler cycler;
  1119 	NKern::ThreadEnterCS();
  1120 	while (cycler.Next()==KErrNone)
  1120 	NThreadGroup* g = NKern::LeaveGroup();
  1121 		{
  1121 	TInt frz = NKern::FreezeCpu();
       
  1122 	if (frz)
       
  1123 		__crash();	// already frozen so won't be able to migrate :-(
       
  1124 	TInt orig_cpu = NKern::CurrentCpu();
       
  1125 	TInt ncpu = NKern::NumberOfCpus();
       
  1126 	TInt cpu = orig_cpu;
       
  1127 	TUint32 orig_affinity = 0;
       
  1128 	do	{
       
  1129 		TUint32 affinity = NKern::ThreadSetCpuAffinity(NKern::CurrentThread(), (TUint32)cpu);
       
  1130 		if (cpu == orig_cpu)
       
  1131 			{
       
  1132 			orig_affinity = affinity;
       
  1133 			NKern::EndFreezeCpu(frz);
       
  1134 			}
       
  1135 		TInt cpu_now = NKern::CurrentCpu();
       
  1136 		if (cpu_now != cpu)
       
  1137 			__crash();
  1122 		Isr(this);
  1138 		Isr(this);
  1123 		}
  1139 		if (++cpu == ncpu)
       
  1140 			cpu = 0;
       
  1141 		} while (cpu != orig_cpu);
       
  1142 	NKern::ThreadSetCpuAffinity(NKern::CurrentThread(), orig_affinity);
       
  1143 	if (g)
       
  1144 		NKern::JoinGroup(g);
       
  1145 	NKern::ThreadLeaveCS();
  1124 	}
  1146 	}
  1125 
  1147 
  1126 void InternalCache::Invalidate(TUint aMask, TLinAddr aBase, TUint aSize)
  1148 void InternalCache::Invalidate(TUint aMask, TLinAddr aBase, TUint aSize)
  1127 	{
  1149 	{
  1128 	__KTRACE_OPT(KMMU,Kern::Printf("Cache::Invalidate %x %08x+%08x",aMask,aBase,aSize));
  1150 	__KTRACE_OPT(KMMU,Kern::Printf("Cache::Invalidate %x %08x+%08x",aMask,aBase,aSize));