summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorDan Crowell <dcrowell@us.ibm.com>2012-08-10 14:48:06 -0500
committerA. Patrick Williams III <iawillia@us.ibm.com>2012-09-16 15:09:40 -0500
commit2f50c376a718ea6542b42e029a6735f719a8f407 (patch)
treef54c4c46d71f1a3226a3e12e69664614ce4db138 /src
parenta0206bc94f427a1a4e3913fa9122b5530c5500ad (diff)
downloadtalos-hostboot-2f50c376a718ea6542b42e029a6735f719a8f407.tar.gz
talos-hostboot-2f50c376a718ea6542b42e029a6735f719a8f407.zip
Support for Non-zero HRMOR
Changes to kernel code to support detection and use of HRMOR offset in memory Changes to tooling to handle the real memory offset New interface to retrieve the physical address that corresponds to a virtual address To test, run these commands before starting up Hostboot: system_cmp0.cpu0_0_05_0.write-reg HRMOR 0x8000000 proc_venicechip_cmp0.phys_mem.del-map p8Proc0.l3_cache_ram 0 0 RTC: 46032 Change-Id: I50ab248f941218a3a14a8f0fc12a551b56dc7cf3 Reviewed-on: http://gfw160.austin.ibm.com:8080/gerrit/1553 Tested-by: Jenkins Server Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
Diffstat (limited to 'src')
-rw-r--r--src/build/debug/Hostboot/VirtToPhys.pm28
-rwxr-xr-xsrc/build/debug/Hostboot/_DebugFrameworkVMM.pm46
-rwxr-xr-xsrc/build/debug/simics-debug-framework.pl58
-rwxr-xr-xsrc/build/debug/simics-debug-framework.py24
-rw-r--r--src/include/kernel/devicesegment.H53
-rw-r--r--src/include/kernel/ptmgr.H52
-rw-r--r--src/include/kernel/syscalls.H48
-rw-r--r--src/include/kernel/vmmmgr.H69
-rw-r--r--src/include/sys/mm.h56
-rw-r--r--src/kernel/basesegment.C2
-rw-r--r--src/kernel/block.C47
-rw-r--r--src/kernel/devicesegment.C74
-rw-r--r--src/kernel/exception.C2
-rw-r--r--src/kernel/ptmgr.C68
-rw-r--r--src/kernel/syscall.C66
-rw-r--r--src/kernel/vmmmgr.C64
-rw-r--r--src/lib/syscall_mm.C53
-rw-r--r--src/usr/hwpf/hwp/thread_activate/thread_activate.C3
-rw-r--r--src/usr/testcore/kernel/misctest.H54
-rw-r--r--src/usr/testcore/kernel/ptmgrtest.H51
20 files changed, 572 insertions, 346 deletions
diff --git a/src/build/debug/Hostboot/VirtToPhys.pm b/src/build/debug/Hostboot/VirtToPhys.pm
index 8a55c53d5..9a0dbdb39 100644
--- a/src/build/debug/Hostboot/VirtToPhys.pm
+++ b/src/build/debug/Hostboot/VirtToPhys.pm
@@ -47,7 +47,7 @@ sub main
}
- if (defined $args->{"showSPTE"})
+ if( (defined $args->{"SPTE"}) || (defined $args->{"spte"}) )
{
$displaySPTE = 1;
}
@@ -55,20 +55,30 @@ sub main
# Parse 'vaddr' argument.
if (not defined $args->{"vaddr"})
{
- ::userDisplay "ERROR.. Did not pass in Virtual Address.\n";
- die;
+ ::userDisplay "ERROR.. Did not pass in Virtual Address.\n";
+ die;
}
my $vaddr = hex($args->{"vaddr"});
if ($debug)
{
- ::userDisplay (sprintf "\n Virtual Address = %X\n" , $vaddr);
+ ::userDisplay (sprintf "\n Virtual Address = %X\n" , $vaddr);
}
-
- $phyAddr = Hostboot::_DebugFrameworkVMM::getPhysicalAddr($vaddr, $debug, $displaySPTE);
-
- return $phyAddr;
+
+ $phyAddr = Hostboot::_DebugFrameworkVMM::getPhysicalAddr($vaddr, $debug, $displaySPTE);
+
+ if (($phyAddr eq Hostboot::_DebugFrameworkVMM::NotFound) ||
+ ($phyAddr eq Hostboot::_DebugFrameworkVMM::NotPresent))
+ {
+ ::userDisplay ("The Physical Address = $phyAddr\n");
+ }
+ else
+ {
+ ::userDisplay (sprintf "The Physical Address = 0x%X\n" , $phyAddr);
+ }
+
+ return $phyAddr;
}
@@ -80,7 +90,7 @@ sub helpInfo
options => {
"vaddr=<number>" => ["Virtual Address "],
"debug" => ["More debug output."],
- "displaySPTE" => ["Display the SPTE for the VA passed in"],
+ "SPTE" => ["Display the SPTE for the VA passed in"],
},
);
diff --git a/src/build/debug/Hostboot/_DebugFrameworkVMM.pm b/src/build/debug/Hostboot/_DebugFrameworkVMM.pm
index a4e5bef03..dc5cbfa59 100755
--- a/src/build/debug/Hostboot/_DebugFrameworkVMM.pm
+++ b/src/build/debug/Hostboot/_DebugFrameworkVMM.pm
@@ -1,26 +1,26 @@
#!/usr/bin/perl
-# IBM_PROLOG_BEGIN_TAG
-# This is an automatically generated prolog.
-#
-# $Source: src/build/debug/Hostboot/_DebugFrameworkVMM.pm $
-#
-# IBM CONFIDENTIAL
-#
-# COPYRIGHT International Business Machines Corp. 2011-2012
-#
-# p1
-#
-# Object Code Only (OCO) source materials
-# Licensed Internal Code Source Materials
-# IBM HostBoot Licensed Internal Code
-#
-# The source code for this program is not published or other-
-# wise divested of its trade secrets, irrespective of what has
-# been deposited with the U.S. Copyright Office.
-#
-# Origin: 30
-#
-# IBM_PROLOG_END_TAG
+# IBM_PROLOG_BEGIN_TAG
+# This is an automatically generated prolog.
+#
+# $Source: src/build/debug/Hostboot/_DebugFrameworkVMM.pm $
+#
+# IBM CONFIDENTIAL
+#
+# COPYRIGHT International Business Machines Corp. 2011,2012
+#
+# p1
+#
+# Object Code Only (OCO) source materials
+# Licensed Internal Code Source Materials
+# IBM HostBoot Licensed Internal Code
+#
+# The source code for this program is not published or otherwise
+# divested of its trade secrets, irrespective of what has been
+# deposited with the U.S. Copyright Office.
+#
+# Origin: 30
+#
+# IBM_PROLOG_END_TAG
# _DebugFrameworkVMM.pm
#
# This module is a set of utility functions for the debug framework, which
@@ -336,6 +336,8 @@ sub getPhyAddrfromSPTE
$paddr = $SPTEaddr + $addrOffset;
+ # add the HRMOR value to get the actual physical address
+ $paddr += ::getHRMOR();
}
else
{
diff --git a/src/build/debug/simics-debug-framework.pl b/src/build/debug/simics-debug-framework.pl
index f78f34284..c83ed905f 100755
--- a/src/build/debug/simics-debug-framework.pl
+++ b/src/build/debug/simics-debug-framework.pl
@@ -1,26 +1,26 @@
#!/usr/bin/perl
-# IBM_PROLOG_BEGIN_TAG
-# This is an automatically generated prolog.
-#
-# $Source: src/build/debug/simics-debug-framework.pl $
-#
-# IBM CONFIDENTIAL
-#
-# COPYRIGHT International Business Machines Corp. 2011-2012
-#
-# p1
-#
-# Object Code Only (OCO) source materials
-# Licensed Internal Code Source Materials
-# IBM HostBoot Licensed Internal Code
-#
-# The source code for this program is not published or other-
-# wise divested of its trade secrets, irrespective of what has
-# been deposited with the U.S. Copyright Office.
-#
-# Origin: 30
-#
-# IBM_PROLOG_END_TAG
+# IBM_PROLOG_BEGIN_TAG
+# This is an automatically generated prolog.
+#
+# $Source: src/build/debug/simics-debug-framework.pl $
+#
+# IBM CONFIDENTIAL
+#
+# COPYRIGHT International Business Machines Corp. 2011,2012
+#
+# p1
+#
+# Object Code Only (OCO) source materials
+# Licensed Internal Code Source Materials
+# IBM HostBoot Licensed Internal Code
+#
+# The source code for this program is not published or otherwise
+# divested of its trade secrets, irrespective of what has been
+# deposited with the U.S. Copyright Office.
+#
+# Origin: 30
+#
+# IBM_PROLOG_END_TAG
# @file simics-debug-framework.pl
# @brief Implementation of the common debug framework for running in simics.
#
@@ -94,6 +94,8 @@ sub readData
my $addr = shift;
my $size = shift;
+ $addr += getHRMOR();
+
sendIPCMsg("read-data", "$addr,$size");
my ($type, $data) = recvIPCMsg();
@@ -114,6 +116,8 @@ sub writeData
my $size = shift;
my $value = shift;
+ $addr += getHRMOR();
+
my $value = unpack("H*", $value);
sendIPCMsg("write-data", "$addr,$size,$value");
@@ -288,6 +292,16 @@ sub checkContTrace()
}
+##
+## Retrieve the HRMOR value
+##
+sub getHRMOR()
+{
+ sendIPCMsg("get-hrmor","");
+ my ($unused, $hrmor) = recvIPCMsg();
+ return $hrmor;
+}
+
# Get tool name.
sendIPCMsg("get-tool","");
my ($unused, $tool) = recvIPCMsg();
diff --git a/src/build/debug/simics-debug-framework.py b/src/build/debug/simics-debug-framework.py
index 3f54263a6..0824839e0 100755
--- a/src/build/debug/simics-debug-framework.py
+++ b/src/build/debug/simics-debug-framework.py
@@ -233,6 +233,13 @@ class DebugFrameworkProcess:
if ( result ):
print "simics ERROR running %s: %d "%( syscmd, result )
+ # Read HRMOR from processors.
+ # This message has no input data
+ def get_hrmor(self,data):
+ hrmor = getHRMOR()
+ self.sendMsg("data-response", "%d"%(hrmor) )
+
+
# @fn run_hb_debug_framework
# @brief Wrapper function to execute a tool module.
#
@@ -260,6 +267,7 @@ def run_hb_debug_framework(tool = "Printk", toolOpts = "",
"get-img-path" : DebugFrameworkProcess.get_img_path,
"write-scom" : DebugFrameworkProcess.write_xscom,
"read-scom" : DebugFrameworkProcess.read_xscom,
+ "get-hrmor" : DebugFrameworkProcess.get_hrmor,
"exit" : DebugFrameworkProcess.endProcess,
}
operations[msg[0]](fp,msg[1])
@@ -329,10 +337,18 @@ def hexDumpToNumber(hexlist):
return int(strNumber,16)
+# Fetch the current HRMOR value.
+def getHRMOR():
+ runStr = "(system_cmp0.cpu0_0_05_0).read-reg HRMOR"
+ ( result, out ) = quiet_run_command( runStr, output_modes.regular )
+ return result
+
+
# Read simics memory and return a list of strings such as ['0x0','0x2b','0x8']
# representing the data read from simics. The list returned may be handed
# to hexDumpToNumber() to turn the list into a number.
def dumpSimicsMemory(address,bytecount):
+ address = address + getHRMOR()
hexlist = map(hex,
conf.system_cmp0.phys_mem.memory[[address,address+bytecount-1]])
return hexlist
@@ -348,6 +364,7 @@ def readLong(address):
return hexDumpToNumber(hexlist)
def writeLong(address,datvalue):
+ address = address + getHRMOR()
conf.system_cmp0.phys_mem.memory[[address,address+3]] = [0,0,0,datvalue]
return
@@ -356,6 +373,7 @@ def writeLong(address,datvalue):
# Write simics memory. address is an integer.
# data is a list of byte-sized integers.
def writeSimicsMemory(address,data):
+ address = address + getHRMOR()
size = len(data)
conf.system_cmp0.phys_mem.memory[[address, address+size-1]] = data;
@@ -489,6 +507,12 @@ def magic_instruction_callback(user_arg, cpu, arg):
# the byte at offset 0 of the buffer which contains a 0x02 in
# fsp-trace style.
writeLongLong(tracBinaryInfoAddr+8,1)
+ # Figure out if we are running out of the cache or mainstore
+ runStr = "(system_cmp0.phys_mem)->map[0][1]"
+ ( result, out ) = quiet_run_command( runStr, output_modes.regular )
+ # Add the HRMOR if we're running from memory
+ if 'cache' not in result:
+ pTracBinaryBuffer = pTracBinaryBuffer + getHRMOR()
# Save the tracBinary buffer to a file named tracBINARY in current dir
saveCommand = "(system_cmp0.phys_mem)->map[0][1]->image.save tracBINARY 0x%x %d"%(pTracBinaryBuffer,cbUsed)
SIM_run_alone(run_command, saveCommand )
diff --git a/src/include/kernel/devicesegment.H b/src/include/kernel/devicesegment.H
index 2b87c9161..c010ffba8 100644
--- a/src/include/kernel/devicesegment.H
+++ b/src/include/kernel/devicesegment.H
@@ -1,26 +1,25 @@
-/* IBM_PROLOG_BEGIN_TAG
- * This is an automatically generated prolog.
- *
- * $Source: src/include/kernel/devicesegment.H $
- *
- * IBM CONFIDENTIAL
- *
- * COPYRIGHT International Business Machines Corp. 2011-2012
- *
- * p1
- *
- * Object Code Only (OCO) source materials
- * Licensed Internal Code Source Materials
- * IBM HostBoot Licensed Internal Code
- *
- * The source code for this program is not published or other-
- * wise divested of its trade secrets, irrespective of what has
- * been deposited with the U.S. Copyright Office.
- *
- * Origin: 30
- *
- * IBM_PROLOG_END_TAG
- */
+/* IBM_PROLOG_BEGIN_TAG */
+/* This is an automatically generated prolog. */
+/* */
+/* $Source: src/include/kernel/devicesegment.H $ */
+/* */
+/* IBM CONFIDENTIAL */
+/* */
+/* COPYRIGHT International Business Machines Corp. 2011,2012 */
+/* */
+/* p1 */
+/* */
+/* Object Code Only (OCO) source materials */
+/* Licensed Internal Code Source Materials */
+/* IBM HostBoot Licensed Internal Code */
+/* */
+/* The source code for this program is not published or otherwise */
+/* divested of its trade secrets, irrespective of what has been */
+/* deposited with the U.S. Copyright Office. */
+/* */
+/* Origin: 30 */
+/* */
+/* IBM_PROLOG_END_TAG */
#ifndef __KERNEL_DEVICESEGMENT_H
#define __KERNEL_DEVICESEGMENT_H
@@ -81,6 +80,14 @@ class DeviceSegment : public Segment
*/
int devUnmap(void* ea);
+ /**
+ * @brief Locate the physical address of the given virtual address
+ * @param[in] i_vaddr virtual address
+ * @return the physical address bound to the virtual address, or
+ * -EFAULT if i_vaddr not found. @see errno.h
+ */
+ uint64_t findPhysicalAddress(uint64_t i_vaddr) const;
+
private:
/**
* Attributes to represent a mapped device within a segment block
diff --git a/src/include/kernel/ptmgr.H b/src/include/kernel/ptmgr.H
index b570e0d14..ba86bf965 100644
--- a/src/include/kernel/ptmgr.H
+++ b/src/include/kernel/ptmgr.H
@@ -1,25 +1,25 @@
-// IBM_PROLOG_BEGIN_TAG
-// This is an automatically generated prolog.
-//
-// $Source: src/include/kernel/ptmgr.H $
-//
-// IBM CONFIDENTIAL
-//
-// COPYRIGHT International Business Machines Corp. 2011
-//
-// p1
-//
-// Object Code Only (OCO) source materials
-// Licensed Internal Code Source Materials
-// IBM HostBoot Licensed Internal Code
-//
-// The source code for this program is not published or other-
-// wise divested of its trade secrets, irrespective of what has
-// been deposited with the U.S. Copyright Office.
-//
-// Origin: 30
-//
-// IBM_PROLOG_END
+/* IBM_PROLOG_BEGIN_TAG */
+/* This is an automatically generated prolog. */
+/* */
+/* $Source: src/include/kernel/ptmgr.H $ */
+/* */
+/* IBM CONFIDENTIAL */
+/* */
+/* COPYRIGHT International Business Machines Corp. 2011,2012 */
+/* */
+/* p1 */
+/* */
+/* Object Code Only (OCO) source materials */
+/* Licensed Internal Code Source Materials */
+/* IBM HostBoot Licensed Internal Code */
+/* */
+/* The source code for this program is not published or otherwise */
+/* divested of its trade secrets, irrespective of what has been */
+/* deposited with the U.S. Copyright Office. */
+/* */
+/* Origin: 30 */
+/* */
+/* IBM_PROLOG_END_TAG */
#ifndef __KERNEL_PTMGR_H
#define __KERNEL_PTMGR_H
@@ -121,15 +121,19 @@ class PageTableManager
*
* @param[in] i_pnStart First Physical Page to remove (page number)
* @param[in] i_pnFinish Last Physical Page to remove (page number)
+ * @param[in] i_applyHRMOR If true then the HRMOR is applied to the
+ * page numbers, MMIOs should set to false
*/
static void delRangePN( uint64_t i_pnStart,
- uint64_t i_pnFinish );
+ uint64_t i_pnFinish,
+ bool i_applyHRMOR = true );
/**
* @brief Return status information about an entry in the hardware page table
*
* @param[in] i_vAddr Virtual Address within the page to be queried (full address)
- * @param[out] o_pn Real physical page number to map to, INVALID_PN if PTE is invalid
+ * @param[out] o_pn Real physical page number va is mapped to,
+ * INVALID_PN if PTE is invalid
*
* @return uint64_t ORed combination of status flags
*/
diff --git a/src/include/kernel/syscalls.H b/src/include/kernel/syscalls.H
index b02fd2216..f31526868 100644
--- a/src/include/kernel/syscalls.H
+++ b/src/include/kernel/syscalls.H
@@ -1,26 +1,25 @@
-/* IBM_PROLOG_BEGIN_TAG
- * This is an automatically generated prolog.
- *
- * $Source: src/include/kernel/syscalls.H $
- *
- * IBM CONFIDENTIAL
- *
- * COPYRIGHT International Business Machines Corp. 2010-2012
- *
- * p1
- *
- * Object Code Only (OCO) source materials
- * Licensed Internal Code Source Materials
- * IBM HostBoot Licensed Internal Code
- *
- * The source code for this program is not published or other-
- * wise divested of its trade secrets, irrespective of what has
- * been deposited with the U.S. Copyright Office.
- *
- * Origin: 30
- *
- * IBM_PROLOG_END_TAG
- */
+/* IBM_PROLOG_BEGIN_TAG */
+/* This is an automatically generated prolog. */
+/* */
+/* $Source: src/include/kernel/syscalls.H $ */
+/* */
+/* IBM CONFIDENTIAL */
+/* */
+/* COPYRIGHT International Business Machines Corp. 2010,2012 */
+/* */
+/* p1 */
+/* */
+/* Object Code Only (OCO) source materials */
+/* Licensed Internal Code Source Materials */
+/* IBM HostBoot Licensed Internal Code */
+/* */
+/* The source code for this program is not published or otherwise */
+/* divested of its trade secrets, irrespective of what has been */
+/* deposited with the U.S. Copyright Office. */
+/* */
+/* Origin: 30 */
+/* */
+/* IBM_PROLOG_END_TAG */
/** @file syscalls.H
* @brief Defines all the system call IDs to be shared between the kernel and
* the system libc.
@@ -108,6 +107,9 @@ namespace Systemcalls
/** mm_alloc_pages() */
MM_ALLOC_PAGES,
+ /** mm_virt_to_phys() */
+ MM_VIRT_TO_PHYS,
+
SYSCALL_MAX
};
diff --git a/src/include/kernel/vmmmgr.H b/src/include/kernel/vmmmgr.H
index 8a8fb6103..0c11ffeb8 100644
--- a/src/include/kernel/vmmmgr.H
+++ b/src/include/kernel/vmmmgr.H
@@ -1,25 +1,25 @@
-// IBM_PROLOG_BEGIN_TAG
-// This is an automatically generated prolog.
-//
-// $Source: src/include/kernel/vmmmgr.H $
-//
-// IBM CONFIDENTIAL
-//
-// COPYRIGHT International Business Machines Corp. 2010 - 2011
-//
-// p1
-//
-// Object Code Only (OCO) source materials
-// Licensed Internal Code Source Materials
-// IBM HostBoot Licensed Internal Code
-//
-// The source code for this program is not published or other-
-// wise divested of its trade secrets, irrespective of what has
-// been deposited with the U.S. Copyright Office.
-//
-// Origin: 30
-//
-// IBM_PROLOG_END
+/* IBM_PROLOG_BEGIN_TAG */
+/* This is an automatically generated prolog. */
+/* */
+/* $Source: src/include/kernel/vmmmgr.H $ */
+/* */
+/* IBM CONFIDENTIAL */
+/* */
+/* COPYRIGHT International Business Machines Corp. 2010,2012 */
+/* */
+/* p1 */
+/* */
+/* Object Code Only (OCO) source materials */
+/* Licensed Internal Code Source Materials */
+/* IBM HostBoot Licensed Internal Code */
+/* */
+/* The source code for this program is not published or otherwise */
+/* divested of its trade secrets, irrespective of what has been */
+/* deposited with the U.S. Copyright Office. */
+/* */
+/* Origin: 30 */
+/* */
+/* IBM_PROLOG_END_TAG */
#ifndef __KERNEL_VMMMGR_H
#define __KERNEL_VMMMGR_H
@@ -29,6 +29,7 @@
#include <kernel/types.h>
#include <kernel/spinlock.H>
+
class MessageQueue;
class VmmManager
@@ -43,12 +44,16 @@ class VmmManager
// put the Page Table at the end of our memory space
PTSIZE = (1 << 18),
- HTABORG = (FULL_MEM_SIZE - PTSIZE),
+ HTABORG_OFFSET = (FULL_MEM_SIZE - PTSIZE),
// Put the DMA Pages just under the Page Table
MBOX_DMA_PAGES = 64, // must be <= 64
MBOX_DMA_PAGESIZE = (1 * KILOBYTE),
- MBOX_DMA_ADDR = (HTABORG - (MBOX_DMA_PAGES * MBOX_DMA_PAGESIZE))
+ MBOX_DMA_ADDR = (HTABORG_OFFSET
+ - (MBOX_DMA_PAGES * MBOX_DMA_PAGESIZE)),
+
+ // Tells processor to ignore HRMOR
+ FORCE_PHYS_ADDR = 0x8000000000000000,
};
enum castout_t
@@ -117,7 +122,7 @@ class VmmManager
static int mmAllocBlock(MessageQueue* i_mq,void* i_va,uint64_t i_size);
/**
- * @brief Find the phyiscal address bound to the given address
+ * @brief Find the physical address bound to the given address
* @param[in] i_vaddr The address
* @return the physical address or -EFAULT @see errno.h
*/
@@ -166,6 +171,20 @@ class VmmManager
*/
static int mmSetPermission(void* i_va,uint64_t i_size, uint64_t i_access_type);
+ /**
+ * @brief Retrieve the current HTABORG value
+ * @return uint64_t - value of HTABORG
+ */
+ static uint64_t HTABORG();
+
+ /**
+ * @brief Find the kernel addressable address bound to the
+ * given virtual address
+ * @param[in] i_vaddr The address
+ * @return the kernel address or -EFAULT @see errno.h
+ */
+ static uint64_t findKernelAddress(uint64_t i_vaddr);
+
protected:
VmmManager();
~VmmManager() {};
diff --git a/src/include/sys/mm.h b/src/include/sys/mm.h
index d9b5536a1..82e32bf46 100644
--- a/src/include/sys/mm.h
+++ b/src/include/sys/mm.h
@@ -1,26 +1,25 @@
-/* IBM_PROLOG_BEGIN_TAG
- * This is an automatically generated prolog.
- *
- * $Source: src/include/sys/mm.h $
- *
- * IBM CONFIDENTIAL
- *
- * COPYRIGHT International Business Machines Corp. 2011-2012
- *
- * p1
- *
- * Object Code Only (OCO) source materials
- * Licensed Internal Code Source Materials
- * IBM HostBoot Licensed Internal Code
- *
- * The source code for this program is not published or other-
- * wise divested of its trade secrets, irrespective of what has
- * been deposited with the U.S. Copyright Office.
- *
- * Origin: 30
- *
- * IBM_PROLOG_END_TAG
- */
+/* IBM_PROLOG_BEGIN_TAG */
+/* This is an automatically generated prolog. */
+/* */
+/* $Source: src/include/sys/mm.h $ */
+/* */
+/* IBM CONFIDENTIAL */
+/* */
+/* COPYRIGHT International Business Machines Corp. 2011,2012 */
+/* */
+/* p1 */
+/* */
+/* Object Code Only (OCO) source materials */
+/* Licensed Internal Code Source Materials */
+/* IBM HostBoot Licensed Internal Code */
+/* */
+/* The source code for this program is not published or otherwise */
+/* divested of its trade secrets, irrespective of what has been */
+/* deposited with the U.S. Copyright Office. */
+/* */
+/* Origin: 30 */
+/* */
+/* IBM_PROLOG_END_TAG */
#ifndef __SYS_MM_H
#define __SYS_MM_H
@@ -109,5 +108,16 @@ int mm_set_permission(void* va, uint64_t size, uint64_t access_type);
*/
void mm_icache_invalidate(void * i_addr, size_t i_cpu_word_count);
+/** @fn mm_virt_to_phys()
+ * @brief System call to return the physical address backing a
+ * virtual address
+ *
+ * @param[in] i_vaddr - Virtual address to translate
+ *
+ * @return uint64_t - 0 if there is no associated address,
+ * physical address otherwise
+ */
+uint64_t mm_virt_to_phys( void* i_vaddr );
+
#endif
diff --git a/src/kernel/basesegment.C b/src/kernel/basesegment.C
index 56f7b6229..c9a826f8e 100644
--- a/src/kernel/basesegment.C
+++ b/src/kernel/basesegment.C
@@ -131,7 +131,7 @@ uint64_t BaseSegment::findPhysicalAddress(uint64_t i_vaddr) const
// Anything in the physical address size is valid (and linear mapped)
// except NULL.
if (i_vaddr >= PAGE_SIZE)
- return i_vaddr;
+ return (i_vaddr | getHRMOR());
else return -EFAULT;
}
return (iv_block ? iv_block->findPhysicalAddress(i_vaddr) : -EFAULT);
diff --git a/src/kernel/block.C b/src/kernel/block.C
index 8afc39ae7..1ea12d2c0 100644
--- a/src/kernel/block.C
+++ b/src/kernel/block.C
@@ -1,26 +1,25 @@
-// IBM_PROLOG_BEGIN_TAG
-// This is an automatically generated prolog.
-//
-// $Source: src/kernel/block.C $
-//
-// IBM CONFIDENTIAL
-//
-// COPYRIGHT International Business Machines Corp. 2011
-//
-// p1
-//
-// Object Code Only (OCO) source materials
-// Licensed Internal Code Source Materials
-// IBM HostBoot Licensed Internal Code
-//
-// The source code for this program is not published or other-
-// wise divested of its trade secrets, irrespective of what has
-// been deposited with the U.S. Copyright Office.
-//
-// Origin: 30
-//
-// IBM_PROLOG_END
-
+/* IBM_PROLOG_BEGIN_TAG */
+/* This is an automatically generated prolog. */
+/* */
+/* $Source: src/kernel/block.C $ */
+/* */
+/* IBM CONFIDENTIAL */
+/* */
+/* COPYRIGHT International Business Machines Corp. 2011,2012 */
+/* */
+/* p1 */
+/* */
+/* Object Code Only (OCO) source materials */
+/* Licensed Internal Code Source Materials */
+/* IBM HostBoot Licensed Internal Code */
+/* */
+/* The source code for this program is not published or otherwise */
+/* divested of its trade secrets, irrespective of what has been */
+/* deposited with the U.S. Copyright Office. */
+/* */
+/* Origin: 30 */
+/* */
+/* IBM_PROLOG_END_TAG */
#include <limits.h>
#include <assert.h>
#include <string.h>
@@ -38,6 +37,7 @@
#include <kernel/console.H>
#include <util/align.H>
#include <kernel/basesegment.H>
+#include <arch/ppc.H>
// Track eviction requests due to aging pages
uint32_t Block::cv_ro_evict_req = 0;
@@ -265,6 +265,7 @@ uint64_t Block::findPhysicalAddress(uint64_t i_vaddr) const
{
paddr = pte->getPageAddr();
paddr += i_vaddr % PAGESIZE;
+ paddr |= getHRMOR();
}
return paddr;
diff --git a/src/kernel/devicesegment.C b/src/kernel/devicesegment.C
index 04e41b7be..4236417e8 100644
--- a/src/kernel/devicesegment.C
+++ b/src/kernel/devicesegment.C
@@ -1,25 +1,25 @@
-// IBM_PROLOG_BEGIN_TAG
-// This is an automatically generated prolog.
-//
-// $Source: src/kernel/devicesegment.C $
-//
-// IBM CONFIDENTIAL
-//
-// COPYRIGHT International Business Machines Corp. 2011
-//
-// p1
-//
-// Object Code Only (OCO) source materials
-// Licensed Internal Code Source Materials
-// IBM HostBoot Licensed Internal Code
-//
-// The source code for this program is not published or other-
-// wise divested of its trade secrets, irrespective of what has
-// been deposited with the U.S. Copyright Office.
-//
-// Origin: 30
-//
-// IBM_PROLOG_END
+/* IBM_PROLOG_BEGIN_TAG */
+/* This is an automatically generated prolog. */
+/* */
+/* $Source: src/kernel/devicesegment.C $ */
+/* */
+/* IBM CONFIDENTIAL */
+/* */
+/* COPYRIGHT International Business Machines Corp. 2011,2012 */
+/* */
+/* p1 */
+/* */
+/* Object Code Only (OCO) source materials */
+/* Licensed Internal Code Source Materials */
+/* IBM HostBoot Licensed Internal Code */
+/* */
+/* The source code for this program is not published or otherwise */
+/* divested of its trade secrets, irrespective of what has been */
+/* deposited with the U.S. Copyright Office. */
+/* */
+/* Origin: 30 */
+/* */
+/* IBM_PROLOG_END_TAG */
#include <util/singleton.H>
#include <limits.h>
#include <assert.h>
@@ -130,10 +130,38 @@ int DeviceSegment::devUnmap(void *ea)
{
//Remove all of the defined block's size (<= 32GB)
PageTableManager::delRangePN(iv_mmioMap[idx].addr / PAGESIZE,
- (iv_mmioMap[idx].addr + iv_mmioMap[idx].size) / PAGESIZE);
+ (iv_mmioMap[idx].addr + iv_mmioMap[idx].size) / PAGESIZE,
+ false);
iv_mmioMap[idx].addr = 0;
rc = 0;
}
return rc;
}
+
+/**
+ * Locate the physical address of the given virtual address
+ */
+uint64_t DeviceSegment::findPhysicalAddress(uint64_t i_vaddr) const
+{
+ uint64_t rc = -EFAULT;
+ uint64_t segment_ea = i_vaddr;
+ //Verify input address falls within this segment's address range
+ if (segment_ea < this->getBaseAddress() ||
+ segment_ea >= (this->getBaseAddress() + (1ull << SLBE_s)))
+ {
+ return rc;
+ }
+ segment_ea = segment_ea - this->getBaseAddress();
+ //TODO - Calculate idx by segment block size if/when new device size needed
+ size_t idx = segment_ea / ((1ull << SLBE_s) / MMIO_MAP_DEVICES);
+ if (0 != iv_mmioMap[idx].addr)
+ {
+ //memory offset within this device's window
+ uint64_t offset = segment_ea - idx*((1ull << SLBE_s) / MMIO_MAP_DEVICES);
+ return (iv_mmioMap[idx].addr + offset);
+ }
+
+ return rc;
+}
+
diff --git a/src/kernel/exception.C b/src/kernel/exception.C
index 836a57a57..d1b365535 100644
--- a/src/kernel/exception.C
+++ b/src/kernel/exception.C
@@ -161,7 +161,7 @@ namespace ExceptionHandles
{
bool PrivInstr(task_t* t)
{
- uint64_t phys_addr = VmmManager::findPhysicalAddress(
+ uint64_t phys_addr = VmmManager::findKernelAddress(
reinterpret_cast<uint64_t>(t->context.nip));
if (-EFAULT != static_cast<int64_t>(phys_addr))
diff --git a/src/kernel/ptmgr.C b/src/kernel/ptmgr.C
index bf8937b78..573712994 100644
--- a/src/kernel/ptmgr.C
+++ b/src/kernel/ptmgr.C
@@ -1,26 +1,25 @@
-/* IBM_PROLOG_BEGIN_TAG
- * This is an automatically generated prolog.
- *
- * $Source: src/kernel/ptmgr.C $
- *
- * IBM CONFIDENTIAL
- *
- * COPYRIGHT International Business Machines Corp. 2011-2012
- *
- * p1
- *
- * Object Code Only (OCO) source materials
- * Licensed Internal Code Source Materials
- * IBM HostBoot Licensed Internal Code
- *
- * The source code for this program is not published or other-
- * wise divested of its trade secrets, irrespective of what has
- * been deposited with the U.S. Copyright Office.
- *
- * Origin: 30
- *
- * IBM_PROLOG_END_TAG
- */
+/* IBM_PROLOG_BEGIN_TAG */
+/* This is an automatically generated prolog. */
+/* */
+/* $Source: src/kernel/ptmgr.C $ */
+/* */
+/* IBM CONFIDENTIAL */
+/* */
+/* COPYRIGHT International Business Machines Corp. 2011,2012 */
+/* */
+/* p1 */
+/* */
+/* Object Code Only (OCO) source materials */
+/* Licensed Internal Code Source Materials */
+/* IBM HostBoot Licensed Internal Code */
+/* */
+/* The source code for this program is not published or otherwise */
+/* divested of its trade secrets, irrespective of what has been */
+/* deposited with the U.S. Copyright Office. */
+/* */
+/* Origin: 30 */
+/* */
+/* IBM_PROLOG_END_TAG */
#include <kernel/ptmgr.H>
#include <kernel/vmmmgr.H>
#include <util/singleton.H>
@@ -35,6 +34,7 @@
#define Tprintk(args...)
#define Eprintk(args...) printk(args)
+
// Utilities to do some bit manipulation
/**
@@ -208,7 +208,15 @@ void PageTableManager::addEntry( uint64_t i_vAddr,
uint64_t i_page,
uint64_t i_accessType )
{
- return Singleton<PageTableManager>::instance()._addEntry( i_vAddr, i_page, i_accessType );
+ // adjust physical address for the HRMOR unless this is a mmio
+ if( SegmentManager::CI_ACCESS != i_accessType )
+ {
+ i_page |= (getHRMOR() / PAGESIZE);
+ }
+
+ return Singleton<PageTableManager>::instance()._addEntry( i_vAddr,
+ i_page,
+ i_accessType );
}
/**
@@ -235,8 +243,16 @@ void PageTableManager::delRangeVA( uint64_t i_vAddrStart,
* @brief Remove a range of entries from the hardware page table
*/
void PageTableManager::delRangePN( uint64_t i_pnStart,
- uint64_t i_pnFinish )
+ uint64_t i_pnFinish,
+ bool i_applyHRMOR )
{
+ // adjust physical address for the HRMOR unless this is a mmio
+ if( i_applyHRMOR )
+ {
+ i_pnStart |= (getHRMOR() / PAGESIZE);
+ i_pnFinish |= (getHRMOR() / PAGESIZE);
+ }
+
return Singleton<PageTableManager>::instance()._delRangePN(i_pnStart,i_pnFinish);
}
@@ -857,7 +873,7 @@ uint64_t PageTableManager::getAddress( void )
if(unlikely(ivTABLE != NULL)) {
return (uint64_t)ivTABLE;
} else {
- return VmmManager::HTABORG;
+ return VmmManager::HTABORG();
}
}
diff --git a/src/kernel/syscall.C b/src/kernel/syscall.C
index 94c6a5860..a38f08b78 100644
--- a/src/kernel/syscall.C
+++ b/src/kernel/syscall.C
@@ -1,26 +1,25 @@
-/* IBM_PROLOG_BEGIN_TAG
- * This is an automatically generated prolog.
- *
- * $Source: src/kernel/syscall.C $
- *
- * IBM CONFIDENTIAL
- *
- * COPYRIGHT International Business Machines Corp. 2010-2012
- *
- * p1
- *
- * Object Code Only (OCO) source materials
- * Licensed Internal Code Source Materials
- * IBM HostBoot Licensed Internal Code
- *
- * The source code for this program is not published or other-
- * wise divested of its trade secrets, irrespective of what has
- * been deposited with the U.S. Copyright Office.
- *
- * Origin: 30
- *
- * IBM_PROLOG_END_TAG
- */
+/* IBM_PROLOG_BEGIN_TAG */
+/* This is an automatically generated prolog. */
+/* */
+/* $Source: src/kernel/syscall.C $ */
+/* */
+/* IBM CONFIDENTIAL */
+/* */
+/* COPYRIGHT International Business Machines Corp. 2010,2012 */
+/* */
+/* p1 */
+/* */
+/* Object Code Only (OCO) source materials */
+/* Licensed Internal Code Source Materials */
+/* IBM HostBoot Licensed Internal Code */
+/* */
+/* The source code for this program is not published or otherwise */
+/* divested of its trade secrets, irrespective of what has been */
+/* deposited with the U.S. Copyright Office. */
+/* */
+/* Origin: 30 */
+/* */
+/* IBM_PROLOG_END_TAG */
#include <assert.h>
#include <errno.h>
#include <kernel/cpu.H>
@@ -92,6 +91,7 @@ namespace Systemcalls
void MmRemovePages(task_t *t);
void MmSetPermission(task_t *t);
void MmAllocPages(task_t *t);
+ void MmVirtToPhys(task_t *t);
syscall syscalls[] =
@@ -130,6 +130,7 @@ namespace Systemcalls
&MmRemovePages, // MM_REMOVE_PAGES
&MmSetPermission, // MM_SET_PERMISSION
&MmAllocPages, // MM_ALLOC_PAGES
+ &MmVirtToPhys, // MM_VIRT_TO_PHYS
};
};
@@ -207,7 +208,7 @@ namespace Systemcalls
if (status != NULL)
{
uint64_t addr =
- VmmManager::findPhysicalAddress(
+ VmmManager::findKernelAddress(
reinterpret_cast<uint64_t>(status));
if (addr == (static_cast<uint64_t>(-EFAULT)))
@@ -222,7 +223,7 @@ namespace Systemcalls
if (retval != NULL)
{
uint64_t addr =
- VmmManager::findPhysicalAddress(
+ VmmManager::findKernelAddress(
reinterpret_cast<uint64_t>(retval));
if (addr == (static_cast<uint64_t>(-EFAULT)))
@@ -543,7 +544,7 @@ namespace Systemcalls
// Set RC to success initially.
TASK_SETRTN(t,0);
- futex = VmmManager::findPhysicalAddress(futex);
+ futex = VmmManager::findKernelAddress(futex);
if(futex == (static_cast<uint64_t>(-EFAULT)))
{
printk("Task %d terminated. No physical address found for address 0x%p",
@@ -579,7 +580,7 @@ namespace Systemcalls
case FUTEX_REQUEUE:
// Wake (val) task(s) on futex && requeue remaining tasks on futex2
- futex2 = VmmManager::findPhysicalAddress(futex2);
+ futex2 = VmmManager::findKernelAddress(futex2);
if(futex2 == (static_cast<uint64_t>(-EFAULT)))
{
printk("Task %d terminated. No physical address found for address 0x%p",
@@ -779,5 +780,16 @@ namespace Systemcalls
}
}
+
+ /**
+ * Return the physical address backing a virtual address
+ * @param[in] t: The task used
+ */
+ void MmVirtToPhys(task_t* t)
+ {
+ uint64_t i_vaddr = (uint64_t)TASK_GETARG0(t);
+ uint64_t phys = VmmManager::findPhysicalAddress(i_vaddr);
+ TASK_SETRTN(t, phys);
+ }
};
diff --git a/src/kernel/vmmmgr.C b/src/kernel/vmmmgr.C
index ed88a4879..b7c98a0c5 100644
--- a/src/kernel/vmmmgr.C
+++ b/src/kernel/vmmmgr.C
@@ -1,25 +1,25 @@
-// IBM_PROLOG_BEGIN_TAG
-// This is an automatically generated prolog.
-//
-// $Source: src/kernel/vmmmgr.C $
-//
-// IBM CONFIDENTIAL
-//
-// COPYRIGHT International Business Machines Corp. 2010 - 2011
-//
-// p1
-//
-// Object Code Only (OCO) source materials
-// Licensed Internal Code Source Materials
-// IBM HostBoot Licensed Internal Code
-//
-// The source code for this program is not published or other-
-// wise divested of its trade secrets, irrespective of what has
-// been deposited with the U.S. Copyright Office.
-//
-// Origin: 30
-//
-// IBM_PROLOG_END
+/* IBM_PROLOG_BEGIN_TAG */
+/* This is an automatically generated prolog. */
+/* */
+/* $Source: src/kernel/vmmmgr.C $ */
+/* */
+/* IBM CONFIDENTIAL */
+/* */
+/* COPYRIGHT International Business Machines Corp. 2010,2012 */
+/* */
+/* p1 */
+/* */
+/* Object Code Only (OCO) source materials */
+/* Licensed Internal Code Source Materials */
+/* IBM HostBoot Licensed Internal Code */
+/* */
+/* The source code for this program is not published or otherwise */
+/* divested of its trade secrets, irrespective of what has been */
+/* deposited with the U.S. Copyright Office. */
+/* */
+/* Origin: 30 */
+/* */
+/* IBM_PROLOG_END_TAG */
#include <limits.h>
#include <util/singleton.H>
#include <kernel/vmmmgr.H>
@@ -31,10 +31,12 @@
#include <kernel/stacksegment.H>
#include <kernel/devicesegment.H>
+
extern void* data_load_address;
VmmManager::VmmManager() : lock()
{
+ printk("HRMOR = %lX\n", getHRMOR());
}
void VmmManager::init()
@@ -108,7 +110,7 @@ void VmmManager::initPTEs()
void VmmManager::initSDR1()
{
// HTABORG, HTABSIZE = 0 (11 bits, 256k table)
- register uint64_t sdr1 = (uint64_t)HTABORG;
+ register uint64_t sdr1 = HTABORG();
asm volatile("mtsdr1 %0" :: "r"(sdr1) : "memory");
}
@@ -229,3 +231,19 @@ int VmmManager::_devUnmap(void* ea)
return rc;
}
+uint64_t VmmManager::HTABORG()
+{
+ return ((uint32_t)HTABORG_OFFSET + getHRMOR());
+}
+
+uint64_t VmmManager::findKernelAddress(uint64_t i_vaddr)
+{
+ //in hypervisor mode the HRMOR is automatically ORed onto
+ // the address so we need to tell the hardware to ignore it
+ uint64_t phys = VmmManager::findPhysicalAddress(i_vaddr);
+ if( static_cast<uint64_t>(-EFAULT) != phys )
+ {
+ phys |= FORCE_PHYS_ADDR;
+ }
+ return phys;
+}
diff --git a/src/lib/syscall_mm.C b/src/lib/syscall_mm.C
index b539cf05a..72c520db6 100644
--- a/src/lib/syscall_mm.C
+++ b/src/lib/syscall_mm.C
@@ -1,26 +1,25 @@
-/* IBM_PROLOG_BEGIN_TAG
- * This is an automatically generated prolog.
- *
- * $Source: src/lib/syscall_mm.C $
- *
- * IBM CONFIDENTIAL
- *
- * COPYRIGHT International Business Machines Corp. 2011-2012
- *
- * p1
- *
- * Object Code Only (OCO) source materials
- * Licensed Internal Code Source Materials
- * IBM HostBoot Licensed Internal Code
- *
- * The source code for this program is not published or other-
- * wise divested of its trade secrets, irrespective of what has
- * been deposited with the U.S. Copyright Office.
- *
- * Origin: 30
- *
- * IBM_PROLOG_END_TAG
- */
+/* IBM_PROLOG_BEGIN_TAG */
+/* This is an automatically generated prolog. */
+/* */
+/* $Source: src/lib/syscall_mm.C $ */
+/* */
+/* IBM CONFIDENTIAL */
+/* */
+/* COPYRIGHT International Business Machines Corp. 2011,2012 */
+/* */
+/* p1 */
+/* */
+/* Object Code Only (OCO) source materials */
+/* Licensed Internal Code Source Materials */
+/* IBM HostBoot Licensed Internal Code */
+/* */
+/* The source code for this program is not published or otherwise */
+/* divested of its trade secrets, irrespective of what has been */
+/* deposited with the U.S. Copyright Office. */
+/* */
+/* Origin: 30 */
+/* */
+/* IBM_PROLOG_END_TAG */
#include <sys/syscall.h>
#include <sys/mm.h>
#include <arch/ppc.H>
@@ -81,3 +80,11 @@ int mm_set_permission(void* va, uint64_t size, uint64_t access_type)
{
return (int64_t)_syscall3(MM_SET_PERMISSION, va, (void*)size, (void*)access_type);
}
+
+/**
+ * System call to return the physical address backing a virtual address
+ */
+uint64_t mm_virt_to_phys( void* i_vaddr )
+{
+ return (uint64_t) _syscall1(MM_VIRT_TO_PHYS,i_vaddr);
+}
diff --git a/src/usr/hwpf/hwp/thread_activate/thread_activate.C b/src/usr/hwpf/hwp/thread_activate/thread_activate.C
index c8f418f35..bbefc6112 100644
--- a/src/usr/hwpf/hwp/thread_activate/thread_activate.C
+++ b/src/usr/hwpf/hwp/thread_activate/thread_activate.C
@@ -50,9 +50,6 @@
#include <hwpf/plat/fapiPlatTrace.H>
-//@fixme - Patrick is adding this constant under 37009
-#define MAGIC_SIMICS_CORESTATESAVE 10
-
namespace THREAD_ACTIVATE
{
diff --git a/src/usr/testcore/kernel/misctest.H b/src/usr/testcore/kernel/misctest.H
index 9a7cbb2ba..e31b3cc9c 100644
--- a/src/usr/testcore/kernel/misctest.H
+++ b/src/usr/testcore/kernel/misctest.H
@@ -26,6 +26,7 @@
#include <sys/misc.h>
#include <kernel/cpumgr.H>
+#include <targeting/common/targetservice.H>
/** @file misctest.H
*
@@ -49,6 +50,59 @@ class MiscTest : public CxxTest::TestSuite
TS_FAIL("LPCR value is not as expected.");
}
}
+
+ /** Tests for mm_virt_to_phys() */
+ void testVirtToPhys()
+ {
+ uint64_t phys = 0;
+ uint64_t hrmor = cpu_spr_value(CPU_SPR_HRMOR);
+
+ // Verify a regular heap address
+ uint8_t* heap = (uint8_t*)malloc(1);
+ *heap = 0xAB; //to make sure it gets paged in
+ phys = mm_virt_to_phys( heap );
+ if( phys != (reinterpret_cast<uint64_t>(heap)|hrmor) )
+ {
+ TS_FAIL("Unexpected Physical Address for Heap.");
+ TS_TRACE( "heap> virt=%p, phys=%lX", (void*)heap, phys );
+ }
+ free(heap);
+
+ // Verify a regular stack address
+ phys = mm_virt_to_phys( (void*)&phys );
+ if( phys < hrmor )
+ {
+ TS_FAIL("Unexpected Physical Address for Stack.");
+ TS_TRACE( "stack> virt=%p, phys=%lX", &phys, phys );
+ }
+
+ // Verify a MMIO (XSCOM)
+ TARGETING::EntityPath epath(TARGETING::EntityPath::PATH_PHYSICAL);
+ epath.addLast(TARGETING::TYPE_SYS,0);
+ epath.addLast(TARGETING::TYPE_NODE,0);
+ epath.addLast(TARGETING::TYPE_PROC,1);
+ TARGETING::Target* l_targ =
+ TARGETING::targetService().toTarget(epath);
+ if(l_targ != NULL)
+ {
+ uint64_t xscom =
+ l_targ->getAttr<TARGETING::ATTR_XSCOM_VIRTUAL_ADDR>();
+ phys = mm_virt_to_phys( (void*)xscom );
+ if( (phys != (1020*TERABYTE+32*GIGABYTE))
+ && (xscom != 0) ) //never got set
+ {
+ TS_FAIL("Unexpected Physical Address for MMIO.");
+ TS_TRACE( "mmio1> virt=%lX, phys=%lX\n", xscom, phys );
+ }
+ }
+
+
+ /* Hardcoded interrupt presenter address for testing on 1-proc model
+ uint64_t intr = 0x20800000000;
+ phys = mm_virt_to_phys( (void*)intr );
+ TS_TRACE( "mmio2> virt=%lX, phys=%lX\n", intr, phys );
+ */
+ }
};
#endif
diff --git a/src/usr/testcore/kernel/ptmgrtest.H b/src/usr/testcore/kernel/ptmgrtest.H
index e97457513..635901318 100644
--- a/src/usr/testcore/kernel/ptmgrtest.H
+++ b/src/usr/testcore/kernel/ptmgrtest.H
@@ -1,25 +1,25 @@
-// IBM_PROLOG_BEGIN_TAG
-// This is an automatically generated prolog.
-//
-// $Source: src/usr/testcore/kernel/ptmgrtest.H $
-//
-// IBM CONFIDENTIAL
-//
-// COPYRIGHT International Business Machines Corp. 2011
-//
-// p1
-//
-// Object Code Only (OCO) source materials
-// Licensed Internal Code Source Materials
-// IBM HostBoot Licensed Internal Code
-//
-// The source code for this program is not published or other-
-// wise divested of its trade secrets, irrespective of what has
-// been deposited with the U.S. Copyright Office.
-//
-// Origin: 30
-//
-// IBM_PROLOG_END
+/* IBM_PROLOG_BEGIN_TAG */
+/* This is an automatically generated prolog. */
+/* */
+/* $Source: src/usr/testcore/kernel/ptmgrtest.H $ */
+/* */
+/* IBM CONFIDENTIAL */
+/* */
+/* COPYRIGHT International Business Machines Corp. 2011,2012 */
+/* */
+/* p1 */
+/* */
+/* Object Code Only (OCO) source materials */
+/* Licensed Internal Code Source Materials */
+/* IBM HostBoot Licensed Internal Code */
+/* */
+/* The source code for this program is not published or otherwise */
+/* divested of its trade secrets, irrespective of what has been */
+/* deposited with the U.S. Copyright Office. */
+/* */
+/* Origin: 30 */
+/* */
+/* IBM_PROLOG_END_TAG */
#ifndef __PTMGRTEST_H
#define __PTMGRTEST_H
/**
@@ -154,7 +154,8 @@ class ptmgrtest : public CxxTest::TestSuite
TS_TRACE( "Addr=%.16lX, Status=%.16lX", TEST_DATA[x].va, status );
fails++;
}
- else if( (status & PageTableManager::PTE_VALID) && (pn == TEST_DATA[x].page) )
+ else if( (status & PageTableManager::PTE_VALID)
+ && (pn == TEST_DATA[x].page) )
{
PASS_TRACE( "ptmgrtest::test_addEntry> PASS1 : 0x%.16lX", TEST_DATA[x].va );
@@ -162,8 +163,8 @@ class ptmgrtest : public CxxTest::TestSuite
uint64_t va = ptmgr->getVirtAddrFromPTE(pte);
if( va != (TEST_DATA[x].va - TEST_DATA[x].va%4096) )
{
- printk( "ptmgrtest::test_addEntry> ERROR6 : VA doesn't match expected" );
- printk( "Exp=%.16lX, Act=%.16lX", TEST_DATA[x].va, va );
+ TS_FAIL( "ptmgrtest::test_addEntry> ERROR6 : VA doesn't match expected" );
+ TS_TRACE( "Exp=%.16lX, Act=%.16lX", TEST_DATA[x].va, va );
fails++;
}
total++;
OpenPOWER on IntegriCloud