diff -r 4122176ea935 -r 56f325a607ea kerneltest/e32test/defrag/t_pagemove.cpp --- a/kerneltest/e32test/defrag/t_pagemove.cpp Mon Dec 21 16:14:42 2009 +0000 +++ b/kerneltest/e32test/defrag/t_pagemove.cpp Wed Dec 23 11:43:31 2009 +0000 @@ -371,7 +371,7 @@ _T_PRINTF(_L("Move first array page repeatedly\n")); TBool success=EFalse; TUint inuse = 0; - array[0] = array[0]; // Ensure the page of the first entry is paged in for the first move. + *(volatile TUint8*)array = *array; // Ensure the page of the first entry is paged in for the first move. for (TInt i=0; i < Repitions*2; i++) { TInt r = pagemove.TryMovingUserPage(firstpage, ETrue); @@ -403,7 +403,7 @@ // pinned non-paged memory as virtual pinning is a nop for unpaged memory. test.Printf(_L("inuse test removed; inuse %d\n"),inuse); //test(inuse || aPagedData || state == EVirtualPinning); - test(success || state == EPhysicalPinning || aPagedData); + test(success || state == EPhysicalPinning); ThreadDie = ETrue; EndThreads(numThreads, userDataThread, s); @@ -457,6 +457,7 @@ StartThreads(numThreads, codeRunThread, s, threadFunc, threadArgs); _T_PRINTF(_L("Move first code page repeatedly\n")); + test_Equal(KArbitraryNumber, aFunc()); TBool inuse=EFalse, success=EFalse; for (TInt i=0; i < Repitions; i++) { @@ -584,8 +585,15 @@ _T_PRINTF(_L("Move page repeatedly\n")); TBool success=EFalse, pagedOut=EFalse; TUint inuse=0; - if (!aCode) - aArray[0] = aArray[0]; // Ensure the page of the first entry is paged in for the first move. + if (aCode) + { + test_Equal(KArbitraryNumber, aFunc()); + } + else + { + *(volatile TUint8*)aArray = *aArray; + } + for (TInt i=0; i < Repitions; i++) { TInt r = aPagemove.TryMovingUserPage(firstpage, ETrue); @@ -616,12 +624,12 @@ switch (state) { case ENoPinning : - test(success || aPaged); - if (aPaged && realtimeState == User::ERealtimeStateOn) + test(success); + if (EExitPanic == accessThread.ExitType()) { - test_Equal(EExitPanic, accessThread.ExitType()); test(accessThread.ExitCategory()==_L("KERN-EXEC")); test_Equal(EIllegalFunctionForRealtimeThread, accessThread.ExitReason()); + test(aPaged && realtimeState == User::ERealtimeStateOn); } else { @@ -634,7 +642,9 @@ test_Equal(KArbitraryNumber, aFunc()); } else - *aArray = *aArray; + { + *(volatile TUint8*)aArray = *aArray; + } break; case EVirtualPinning : test(!aCode || !inuse); @@ -916,7 +926,7 @@ _T_PRINTF(_L("Move code chunk page repeatedly\n")); TBool success=EFalse; - p[0] = p[0]; // Ensure the page of the first entry is paged in for the first move. + *(volatile TUint8*)p = *p; // Ensure the page of the first entry is paged in for the first move. for (TInt i=0; i < Repitions; i++) { TInt r = pagemove.TryMovingUserPage(firstpage, ETrue); @@ -940,7 +950,7 @@ break; } } - test(success || aPagedData); + test(success); ThreadDie = ETrue; User::WaitForRequest(s);