diff -r 538db54a451d -r 5d2844f35677 kerneltest/e32test/mmu/t_pin.cpp --- a/kerneltest/e32test/mmu/t_pin.cpp Mon Jan 18 21:31:10 2010 +0200 +++ b/kerneltest/e32test/mmu/t_pin.cpp Tue Jan 26 13:13:38 2010 +0200 @@ -115,7 +115,7 @@ test.Printf(_L("Allocate user chunk\n")); TChunkCreateInfo createInfo; - createInfo.SetDisconnected(0,UCPageCount*PageSize,UCPageCount*PageSize); + createInfo.SetDisconnected(0,KUCPageCount*PageSize,KUCPageCount*PageSize); createInfo.SetPaging(TChunkCreateInfo::EPaged); test_KErrNone(chunk.Create(createInfo)); UCBase = (TInt8*)chunk.Base(); @@ -130,12 +130,12 @@ test_KErrNone(Ldd.UnpinPhysicalMemory()); test.Printf(_L("Perform Physical pin operation on the chunk\n")); - test_KErrNone(Ldd.PinPhysicalMemory((TLinAddr)UCBase, UCPageCount*PageSize)); + test_KErrNone(Ldd.PinPhysicalMemory((TLinAddr)UCBase, KUCPageCount*PageSize)); test.Printf(_L("Test that pinned physical memory preserves its mapping when recommited\n")); - test_KErrNone(chunk.Decommit(0,UCPageCount*PageSize)); //Decommit all - for (i=UCPageCount-1;i>=0;i--) test_KErrNone(chunk.Commit(i*PageSize,PageSize)); //Commit in reverse order - for (i=0;i=0;i--) test_KErrNone(chunk.Commit(i*PageSize,PageSize)); //Commit in reverse order + for (i=0;i=0;i--) test_KErrNone(chunk.Commit(i*PageSize,PageSize)); //Commit in reverse order + for (i=0;i>1; + // This test step relies on mapping objet being smaller than the user chunk + // and as mapping object will always be >=2 pages, user chunk must be at least 4. + __ASSERT_COMPILE(KUCPageCount >= 4); + test_KErrNone(Ldd.CreateKernelMapObject(mappingSize)); + TChunkCreateInfo chunkInfo; + chunkInfo.SetNormal(KUCBytes, KUCBytes); + chunkInfo.SetPaging(TChunkCreateInfo::EUnpaged); + test_KErrNone(chunk.Create(chunkInfo)); + + test.Printf(_L("Map and pin an unpaged chunk with pre-reserved resources\n")); + __KHEAP_FAILNEXT(1); // Ensure any attempted kernel heap allocations fail. + test_KErrNone(Ldd.KernelMapMemory((TLinAddr)chunk.Base(), mappingSize)); + test_KErrNone(Ldd.KernelUnmapMemory()); + + test.Printf(_L("Map more memory than we have pre-reserved resources for\n")); + test_Equal(KErrArgument, Ldd.KernelMapMemory((TLinAddr)chunk.Base(), mappingSize*2)); + + test.Printf(_L("Destroy the kernel map object with pre-reserved resources\n")); + test_KErrNone(Ldd.DestroyKernelMapObject()); // This will also unpin the memory. + // Clear the kernel heap fail next. + __KHEAP_RESET; + chunk.Close(); + } + TInt E32Main() { test.Title(); @@ -717,7 +874,10 @@ test.Next(_L("Physical pinning OOM")); TestPhysicalPinOutOfMemory(); - + + test.Next(_L("Kernel pin mapping")); + TestMapAndPinMemory(); + test.Next(_L("Pin OOM Tests")); TestPinOutOfMemory();