mirror of
https://github.com/acidanthera/audk.git
synced 2025-04-08 17:05:09 +02:00
Always return an aligned block when mapping memory.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@2185 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
a53078b634
commit
6bb60d710b
@ -313,18 +313,28 @@ MapMemory (
|
||||
INTN prot,
|
||||
INTN flags)
|
||||
{
|
||||
static UINTN base = 0x40000000;
|
||||
const UINTN align = (1 << 24);
|
||||
void *res;
|
||||
|
||||
res = mmap ((void *)base, length, prot, flags, fd, 0);
|
||||
if (res == MAP_FAILED)
|
||||
return NULL;
|
||||
|
||||
// Guard page.
|
||||
base += length + 4096;
|
||||
base = (base + align - 1) & ~(align - 1);
|
||||
STATIC UINTN base = 0x40000000;
|
||||
CONST UINTN align = (1 << 24);
|
||||
VOID *res;
|
||||
BOOLEAN isAligned = 0;
|
||||
|
||||
//
|
||||
// Try to get an aligned block somewhere in the address space of this
|
||||
// process.
|
||||
//
|
||||
while((!isAligned) && (base != 0)) {
|
||||
res = mmap ((void *)base, length, prot, flags, fd, 0);
|
||||
if (res == MAP_FAILED) {
|
||||
return NULL;
|
||||
}
|
||||
if ((((UINTN)res) & ~(align-1)) == (UINTN)res) {
|
||||
isAligned=1;
|
||||
}
|
||||
else {
|
||||
munmap(res, length);
|
||||
base += align;
|
||||
}
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user