diff options
author | Adam Muhle <armuhle@us.ibm.com> | 2012-08-17 13:51:12 -0500 |
---|---|---|
committer | A. Patrick Williams III <iawillia@us.ibm.com> | 2012-09-07 10:28:52 -0500 |
commit | e859413ac33a2fb410c83cc8af4bf755181791e9 (patch) | |
tree | 85eeb14553a459f99bdaa3bfb61b8323d8de08da /src | |
parent | e11fc0f4d161de3c24452ec3de9f023d60742181 (diff) | |
download | talos-hostboot-e859413ac33a2fb410c83cc8af4bf755181791e9.tar.gz talos-hostboot-e859413ac33a2fb410c83cc8af4bf755181791e9.zip |
Re-enable PNORDD fake-pnor test cases
Setup fake-pnor related test cases to malloc memory and
treat as fake-pnor. This allows testing fake-pnor without
requiring a reserved chunk of L3 to use as fake-pnor space.
Change-Id: I24d7176b8ae7ff57839b1f5349be86d7d239ee58
RTC: 44938
Reviewed-on: http://gfw160.austin.ibm.com:8080/gerrit/1557
Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com>
Tested-by: Jenkins Server
Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
Diffstat (limited to 'src')
-rwxr-xr-x | src/build/mkrules/hbfw/img/makefile | 2 | ||||
-rw-r--r-- | src/usr/pnor/pnordd.C | 151 | ||||
-rw-r--r-- | src/usr/pnor/pnordd.H | 91 | ||||
-rw-r--r-- | src/usr/pnor/test/pnorddtest.H | 232 |
4 files changed, 325 insertions, 151 deletions
diff --git a/src/build/mkrules/hbfw/img/makefile b/src/build/mkrules/hbfw/img/makefile index 1fef2c866..4744085b6 100755 --- a/src/build/mkrules/hbfw/img/makefile +++ b/src/build/mkrules/hbfw/img/makefile @@ -100,7 +100,7 @@ BUILD_SPECIFIC_IMAGE: .SPECTARG ${IMAGE_TARGET} ${IMAGE_TARGET}: ${IMAGE_LAYOUT} ${IMAGE_BINS} ${PNOR_BUILD_SCRIPT} ${PNOR_BUILD_SCRIPT} --pnorOutBin ${IMAGE_TARGET} \ - --pnorLayout ${IMAGE_LAYOUT} \ + ${TARGET_TEST:b--test} --pnorLayout ${IMAGE_LAYOUT} \ ${IMAGE_BIN_OPTION} --ffsCmd "${FFSCMD}" .endif diff --git a/src/usr/pnor/pnordd.C b/src/usr/pnor/pnordd.C index cf9b12134..62982163a 100644 --- a/src/usr/pnor/pnordd.C +++ b/src/usr/pnor/pnordd.C @@ -1,26 +1,25 @@ -/* IBM_PROLOG_BEGIN_TAG - * This is an automatically generated prolog. - * - * $Source: src/usr/pnor/pnordd.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/usr/pnor/pnordd.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 */ /** * @file pnordd.C * @@ -47,11 +46,6 @@ // Uncomment this to enable smart writing //#define SMART_WRITE -// These are used to cheat and use a chunk of our cache as a PNOR -// iv_mode == MODEL_MEMCPY,MODEL_LPC_MEM -void write_fake_pnor( uint64_t i_pnorAddr, void* i_buffer, size_t i_size ); -void read_fake_pnor( uint64_t i_pnorAddr, void* o_buffer, size_t i_size ); -void erase_fake_pnor( uint64_t i_pnorAddr, size_t i_size ); extern trace_desc_t* g_trac_pnor; @@ -338,10 +332,22 @@ errlHndl_t PnorDD::writeFlash(void* i_buffer, ********************/ mutex_t PnorDD::cv_mutex = MUTEX_INITIALIZER; uint64_t PnorDD::iv_vpoMode = 0; + +// +// @note fake pnor is moved up and shrunk by 1/2 meg to make room for +// the SLW image, it must be at a 1 M boundary. +// See build_winkle_images for more info. +// +#define FAKE_PNOR_START 4*MEGABYTE+512*KILOBYTE +#define FAKE_PNOR_END 8*MEGABYTE +#define FAKE_PNOR_SIZE 3*MEGABYTE+512*KILOBYTE + /** * @brief Constructor */ -PnorDD::PnorDD( PnorMode_t i_mode ) +PnorDD::PnorDD( PnorMode_t i_mode, + uint64_t i_fakeStart, + uint64_t i_fakeSize ) : iv_mode(i_mode) { iv_erasesize_bytes = ERASESIZE_BYTES_DEFAULT; @@ -375,6 +381,14 @@ PnorDD::PnorDD( PnorMode_t i_mode ) } } + if( (MODEL_MEMCPY == iv_mode) || + (MODEL_LPC_MEM == iv_mode) ) + { + //Only use input fake values if they are != zero + iv_fakeStart = (i_fakeStart != 0) ? i_fakeStart : FAKE_PNOR_START; + iv_fakeSize = (i_fakeSize != 0) ? i_fakeSize : FAKE_PNOR_SIZE; + } + if( (MODEL_REAL_CMD == iv_mode) || (MODEL_REAL_MMIO == iv_mode) ) { @@ -1413,40 +1427,73 @@ errlHndl_t PnorDD::eraseFlash(uint32_t i_address) /* This code is used in the MODEL_MEMCPY and MODEL_LPC_MEM modes */ - -// -// @note fake pnor is moved up and shrunk by 1/2 meg to make room for -// the SLW image, it must be at a 1 M boundary. -// See build_winkle_images for more info. -// -#define FAKE_PNOR_START 4*MEGABYTE+512*KILOBYTE -#define FAKE_PNOR_END 8*MEGABYTE -#define FAKE_PNOR_SIZE 3*MEGABYTE+512*KILOBYTE - - -void write_fake_pnor( uint64_t i_pnorAddr, void* i_buffer, size_t i_size ) +/** + * @brief Write to fake PNOR + */ +void PnorDD::write_fake_pnor( uint64_t i_pnorAddr, + void* i_buffer, + size_t i_size ) { //create a pointer to the offset start. - char * destPtr = (char *)(FAKE_PNOR_START+i_pnorAddr); + char * destPtr = (char *)(iv_fakeStart+i_pnorAddr); - //copy data from memory into the buffer. - memcpy(destPtr, i_buffer, i_size); + if( (i_pnorAddr+i_size) > iv_fakeSize ) + { + TRACFCOMP(g_trac_pnor, + "PnorDD write_fake_pnor> Write goes past end of fake-PNOR, skipping write. i_pnorAddr=0x%X, i_size=0x%X", + i_pnorAddr, i_size ); + } + else + { + //copy data from memory into the buffer. + memcpy(destPtr, i_buffer, i_size); + } } -void read_fake_pnor( uint64_t i_pnorAddr, void* o_buffer, size_t i_size ) + +/** + * @brief Read from fake PNOR + */ +void PnorDD::read_fake_pnor( uint64_t i_pnorAddr, + void* o_buffer, + size_t i_size ) { //create a pointer to the offset start. - char * srcPtr = (char *)(FAKE_PNOR_START+i_pnorAddr); + char * srcPtr = (char *)(iv_fakeStart+i_pnorAddr); + + if( (i_pnorAddr+i_size) > iv_fakeSize ) + { + TRACFCOMP(g_trac_pnor, + "PnorDD read_fake_pnor> Read goes past end of fake-PNOR, skipping read. i_pnorAddr=0x%X, i_size=0x%X", + i_pnorAddr, i_size ); + } + else + { + //copy data from memory into the buffer. + memcpy(o_buffer, srcPtr, i_size); + } - //copy data from memory into the buffer. - memcpy(o_buffer, srcPtr, i_size); } -void erase_fake_pnor( uint64_t i_pnorAddr, size_t i_size ) + +/** + * @brief Erase chunk of fake PNOR + */ +void PnorDD::erase_fake_pnor( uint64_t i_pnorAddr, + size_t i_size ) { //create a pointer to the offset start. - char * srcPtr = (char *)(FAKE_PNOR_START+i_pnorAddr); + char * srcPtr = (char *)(iv_fakeStart+i_pnorAddr); - //copy data from memory into the buffer. - memset( srcPtr, 0, i_size ); + if( (i_pnorAddr+i_size) > iv_fakeSize ) + { + TRACFCOMP(g_trac_pnor, + "PnorDD erase_fake_pnor> Erase goes past end of fake-PNOR, skipping erase. i_pnorAddr=0x%X, i_size=0x%X", + i_pnorAddr, i_size ); + } + else + { + //Zero out memory + memset( srcPtr, 0, i_size ); + } } diff --git a/src/usr/pnor/pnordd.H b/src/usr/pnor/pnordd.H index 9e6ef64ea..c2f1589a1 100644 --- a/src/usr/pnor/pnordd.H +++ b/src/usr/pnor/pnordd.H @@ -1,26 +1,25 @@ -/* IBM_PROLOG_BEGIN_TAG - * This is an automatically generated prolog. - * - * $Source: src/usr/pnor/pnordd.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/usr/pnor/pnordd.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 __PNOR_PNORDD_H #define __PNOR_PNORDD_H @@ -84,7 +83,9 @@ class PnorDD /** * @brief Constructor */ - PnorDD( PnorMode_t i_mode = MODEL_UNKNOWN ); + PnorDD( PnorMode_t i_mode = MODEL_UNKNOWN, + uint64_t i_fakeStart = 0, + uint64_t i_fakeSize = 0); /** @@ -451,6 +452,37 @@ class PnorDD return blocks; }; + // These are used to cheat and use a chunk of our cache as a PNOR + // iv_mode == MODEL_MEMCPY,MODEL_LPC_MEM + /** + * @brief write to fake PNOR + * + * @parm i_pnorAddr Offset into fake PNOR + * @parm i_buffer Buffer of data to write + * @param i_size Amount to write. + */ + void write_fake_pnor( uint64_t i_pnorAddr, + void* i_buffer, size_t i_size ); + + /** + * @brief Read from fake PNOR + * + * @parm i_pnorAddr Offset into fake PNOR + * @parm i_buffer Buffer to return read data + * @param i_size Amount to read. + */ + void read_fake_pnor( uint64_t i_pnorAddr, + void* o_buffer, + size_t i_size ); + + /** + * @brief Erase fake PNOR + * + * @parm i_pnorAddr Offset to start erase + * @param i_size Amount to erase. + */ + void erase_fake_pnor( uint64_t i_pnorAddr, + size_t i_size ); /** * @brief ECCB Control Register Layout @@ -538,6 +570,17 @@ class PnorDD */ static bool cv_sfcInitDone; + /** + * @brief Start of Fake PNOR address range.. + * + */ + uint64_t iv_fakeStart; + + /** + * @brief Size of Fake PNOR address range.. + * + */ + uint64_t iv_fakeSize; // Needed for testcases friend class PnorDdTest; diff --git a/src/usr/pnor/test/pnorddtest.H b/src/usr/pnor/test/pnorddtest.H index f0775959a..eccb24dd4 100644 --- a/src/usr/pnor/test/pnorddtest.H +++ b/src/usr/pnor/test/pnorddtest.H @@ -1,26 +1,25 @@ -/* IBM_PROLOG_BEGIN_TAG - * This is an automatically generated prolog. - * - * $Source: src/usr/pnor/test/pnorddtest.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/usr/pnor/test/pnorddtest.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 __PNORDDTEST_H #define __PNORDDTEST_H @@ -454,26 +453,21 @@ class PnorDdTest : public CxxTest::TestSuite void test_readwrite_modes(void) { PnorDD* pnordd = NULL; + uint8_t* fake_space = NULL; size_t l_size = sizeof(uint64_t); errlHndl_t l_err = NULL; uint64_t fails = 0; uint64_t total = 0; + uint64_t scratch_space = 0; + uint64_t sect_size = 0; do{ TS_TRACE("PnorDdTest::test_readwrite_modes: starting"); - uint64_t base_address; - uint64_t sect_size; - if(!getTestSection(base_address, sect_size)) - { - TRACFCOMP(g_trac_pnor, "PnorDdTest::test_readwrite_modes> Skipped due to not finding test section in PNOR" ); - break; - } - // list of all modes to test std::list<PnorDD::PnorMode_t> supported_modes; - //supported_modes.push_back(PnorDD::MODEL_MEMCPY); (Enable with RTC: 44938) - //supported_modes.push_back(PnorDD::MODEL_LPC_MEM); (Enable with RTC: 44938) + supported_modes.push_back(PnorDD::MODEL_MEMCPY); + supported_modes.push_back(PnorDD::MODEL_LPC_MEM); if(!TARGETING::is_vpo()) { @@ -482,21 +476,49 @@ class PnorDdTest : public CxxTest::TestSuite supported_modes.push_back(PnorDD::MODEL_REAL_MMIO); } - uint64_t scratch_space = base_address; - // loop through all of the supported modes for( std::list<PnorDD::PnorMode_t>::iterator m = supported_modes.begin(); m != supported_modes.end(); ++m ) - { - scratch_space += 0x100; - + { if( pnordd ) { delete pnordd; } - pnordd = new PnorDD(*m); + + //Fake PNOR + if( (PnorDD::MODEL_MEMCPY == *m) || + (PnorDD::MODEL_LPC_MEM == *m) ) + { + //malloc some space to use as fake-PNOR + if( fake_space ) + { + delete fake_space; + } + fake_space = new uint8_t[4 * KILOBYTE]; + pnordd = new PnorDD(*m, + reinterpret_cast<uint64_t>(fake_space), + (4 * KILOBYTE)); + //Adjusting the address by an arbitrary multiplier to keep + //successive tests from always using the same memory space. + scratch_space = (*m)*0x20; + } + //Real PNOR + else + { + pnordd = new PnorDD(*m); + + if(!getTestSection(scratch_space, sect_size)) + { + TRACFCOMP(g_trac_pnor, + "PnorDdTest::test_readwrite_modes> Skipped due to not finding test section in PNOR" ); + continue; + } + //Adjusting the address by an arbitrary multiplier to keep + //successive tests from always using the same memory space. + scratch_space += (*m)*0x20; + } // Perform PnorDD Write 1 uint64_t l_address = scratch_space; @@ -613,6 +635,11 @@ class PnorDdTest : public CxxTest::TestSuite { delete pnordd; } + if( fake_space ) + { + delete fake_space; + } + } /** @@ -622,26 +649,21 @@ class PnorDdTest : public CxxTest::TestSuite void test_smartwrite_modes(void) { PnorDD* pnordd = NULL; + uint8_t* fake_space = NULL; size_t l_size = sizeof(uint64_t); errlHndl_t l_err = NULL; uint64_t fails = 0; uint64_t total = 0; + uint64_t scratch_space = 0; + uint64_t sect_size = 0; do{ TS_TRACE("PnorDdTest::test_smartwrite_modes: starting"); - uint64_t base_address; - uint64_t sect_size; - if(!getTestSection(base_address, sect_size)) - { - TRACFCOMP(g_trac_pnor, "PnorDdTest::test_smartwrite_modes> Skipped due to not finding test section in PNOR" ); - break; - } - // list of all modes to test std::list<PnorDD::PnorMode_t> supported_modes; - //supported_modes.push_back(PnorDD::MODEL_MEMCPY); (Enable with RTC: 44938) - //supported_modes.push_back(PnorDD::MODEL_LPC_MEM); (Enable with RTC: 44938) + supported_modes.push_back(PnorDD::MODEL_MEMCPY); + supported_modes.push_back(PnorDD::MODEL_LPC_MEM); if(!TARGETING::is_vpo()) { @@ -650,21 +672,51 @@ class PnorDdTest : public CxxTest::TestSuite supported_modes.push_back(PnorDD::MODEL_REAL_MMIO); } - uint64_t scratch_space = base_address; - // loop through all of the supported modes for( std::list<PnorDD::PnorMode_t>::iterator m = supported_modes.begin(); m != supported_modes.end(); ++m ) { - scratch_space += 0x100; - if( pnordd ) { delete pnordd; } - pnordd = new PnorDD(*m); + + //Fake PNOR + if( (PnorDD::MODEL_MEMCPY == *m) || + (PnorDD::MODEL_LPC_MEM == *m) ) + { + //malloc some space to use as fake-PNOR + if( fake_space ) + { + delete fake_space; + } + fake_space = new uint8_t[4 * KILOBYTE]; + pnordd = new PnorDD(*m, + reinterpret_cast<uint64_t>(fake_space), + (4 * KILOBYTE)); + + //Adjusting the address by an arbitrary multiplier to keep + //successive tests from always using the same memory space. + scratch_space = (*m)*0x30; + + } + //Real PNOR + else + { + pnordd = new PnorDD(*m); + + if(!getTestSection(scratch_space, sect_size)) + { + TRACFCOMP(g_trac_pnor, + "PnorDdTest::test_readwrite_modes> Skipped due to not finding test section in PNOR" ); + continue; + } + //Adjusting the address by an arbitrary multiplier to keep + //successive tests from always using the same memory space. + scratch_space += (*m)*0x30; + } // Perform PnorDD Write 1 uint64_t l_address = scratch_space+0x20; @@ -773,6 +825,10 @@ class PnorDdTest : public CxxTest::TestSuite { delete pnordd; } + if( fake_space ) + { + delete fake_space; + } TRACFCOMP(g_trac_pnor, "PnorDdTest::test_smartwrite> %d/%d fails", fails, total ); } @@ -784,26 +840,21 @@ class PnorDdTest : public CxxTest::TestSuite void test_crossblock_modes(void) { PnorDD* pnordd = NULL; + uint8_t* fake_space = NULL; size_t l_size = sizeof(uint64_t); errlHndl_t l_err = NULL; uint64_t fails = 0; uint64_t total = 0; + uint64_t scratch_space = 0; + uint64_t sect_size = 0; do{ TS_TRACE("PnorDdTest::test_crossblock_modes: starting"); - uint64_t base_address; - uint64_t sect_size; - if(!getTestSection(base_address, sect_size)) - { - TRACFCOMP(g_trac_pnor, "PnorDdTest::test_crossblock_modes> Skipped due to not finding test section in PNOR" ); - break; - } - // list of all modes to test std::list<PnorDD::PnorMode_t> supported_modes; - //supported_modes.push_back(PnorDD::MODEL_MEMCPY); (Enable with RTC: 44938) - //supported_modes.push_back(PnorDD::MODEL_LPC_MEM); (Enable with RTC: 44938) + supported_modes.push_back(PnorDD::MODEL_MEMCPY); + supported_modes.push_back(PnorDD::MODEL_LPC_MEM); if(!TARGETING::is_vpo()) { @@ -812,33 +863,62 @@ class PnorDdTest : public CxxTest::TestSuite supported_modes.push_back(PnorDD::MODEL_REAL_MMIO); } - uint64_t scratch_space = base_address; - // loop through all of the supported modes for( std::list<PnorDD::PnorMode_t>::iterator m = supported_modes.begin(); m != supported_modes.end(); ++m ) { - scratch_space += 4096; - if( pnordd ) { delete pnordd; } - pnordd = new PnorDD(*m); + + + //Fake PNOR + if( (PnorDD::MODEL_MEMCPY == *m) || + (PnorDD::MODEL_LPC_MEM == *m) ) + { + //malloc some space to use as fake-PNOR + if( fake_space ) + { + delete fake_space; + } + fake_space = new uint8_t[8 * KILOBYTE]; + pnordd = new PnorDD(*m, + reinterpret_cast<uint64_t>(fake_space), + (8 * KILOBYTE)); + scratch_space = 0; + sect_size = 8 * KILOBYTE; + } + //Real PNOR + else + { + pnordd = new PnorDD(*m); + + if(!getTestSection(scratch_space, sect_size)) + { + TRACFCOMP(g_trac_pnor, + "PnorDdTest::test_readwrite_modes> Skipped due to not finding test section in PNOR" ); + continue; + } + } // Find the nearest erase-block (4K) boundary - uint64_t l_boundary = (base_address+4096) - - (base_address%4096); + uint64_t l_boundary = (scratch_space+4096) + - (scratch_space%4096); uint64_t l_address = 0; //make sure we don't go past the end of the section - if(l_boundary+0x4 > base_address+sect_size) + if(l_boundary+0x4 > scratch_space+sect_size) { TS_FAIL("PnorDdTest::test_crossblock_modes: Test Case went beyond allocated space in test section."); - TRACFCOMP(g_trac_pnor, "PnorDdTest::test_crossblock_modes: Test Case went beyond allocated space in test section.l_boundary=0x%X, base_address=0x%X, sect_size=0x%X", l_boundary, base_address, sect_size); - TRACFCOMP(g_trac_pnor, "PnorDdTest::test_crossblock_modes: sect_size=0x%X", sect_size); + TRACFCOMP(g_trac_pnor, + "PnorDdTest::test_crossblock_modes: Test Case went beyond allocated space in test section.l_boundary=0x%X, scratch_space=0x%X, sect_size=0x%X", + l_boundary, scratch_space, sect_size); + TRACFCOMP(g_trac_pnor, + "PnorDdTest::test_crossblock_modes: sect_size=0x%X", + sect_size); break; } @@ -884,6 +964,10 @@ class PnorDdTest : public CxxTest::TestSuite { delete pnordd; } + if( fake_space ) + { + delete fake_space; + } TRACFCOMP(g_trac_pnor, "PnorDdTest::test_crossblock_modes> %d/%d fails", fails, total ); } |