summaryrefslogtreecommitdiffstats
path: root/src/kernel/basesegment.C
diff options
context:
space:
mode:
authorMatthew Barth <msbarth@us.ibm.com>2011-08-29 15:48:57 -0500
committerMATTHEW S. BARTH <msbarth@us.ibm.com>2011-09-12 16:29:03 -0500
commitdcfca1f02b1a549ba57ca8e28372cef3e84268d0 (patch)
tree12e56cae37248b6ee62f75ba049f6a38d0348c24 /src/kernel/basesegment.C
parent0c57368b19b2c47d8c3d6495d4fa166663c9c2ea (diff)
downloadtalos-hostboot-dcfca1f02b1a549ba57ca8e28372cef3e84268d0.tar.gz
talos-hostboot-dcfca1f02b1a549ba57ca8e28372cef3e84268d0.zip
Additional good/error path checks for creating block
Change-Id: If3bd74e0ee5ca4177d4bac506a4433ac3e1e778d Reviewed-on: http://gfw160.austin.ibm.com:8080/gerrit/289 Tested-by: Jenkins Server Reviewed-by: MATTHEW S. BARTH <msbarth@us.ibm.com>
Diffstat (limited to 'src/kernel/basesegment.C')
-rw-r--r--src/kernel/basesegment.C11
1 files changed, 5 insertions, 6 deletions
diff --git a/src/kernel/basesegment.C b/src/kernel/basesegment.C
index 72ace03c8..94aafec40 100644
--- a/src/kernel/basesegment.C
+++ b/src/kernel/basesegment.C
@@ -23,13 +23,13 @@
#include <limits.h>
#include <errno.h>
#include <util/singleton.H>
+#include <util/align.H>
#include <kernel/basesegment.H>
#include <kernel/segmentmgr.H>
#include <kernel/block.H>
#include <kernel/vmmmgr.H>
#include <kernel/cpuid.H>
-//#include <kernel/console.H>
#define SLBE_s 40
@@ -117,14 +117,13 @@ int BaseSegment::_mmAllocBlock(MessageQueue* i_mq,void* i_va,uint64_t i_size)
uint64_t l_blockSizeTotal = 0;
iv_block->totalBlocksAlloc(l_blockSizeTotal);
//Verify input address and size falls within this segment's address range
- if ((l_vaddr < this->getBaseAddress() ||
- l_vaddr >= (this->getBaseAddress() + (1ull << SLBE_s))) &&
- (l_blockSizeTotal+i_size <= (1ull << SLBE_s)))
+ if (l_vaddr < this->getBaseAddress() ||
+ l_vaddr >= (this->getBaseAddress() + (1ull << SLBE_s)) ||
+ (l_blockSizeTotal + ALIGN_PAGE(i_size)) >= (1ull << SLBE_s))
{
return -1;
}
- //TODO - Align i_size to page size
- Block* l_block = new Block(l_vaddr, i_size, i_mq);
+ Block* l_block = new Block(l_vaddr, ALIGN_PAGE(i_size), i_mq);
l_block->setParent(this);
iv_block->appendBlock(l_block);
return 0;
OpenPOWER on IntegriCloud