ContiguousPTE[12/12] modify sys_shmget/sys_mmap
Change-Id: Icfbe9fbfa6216735ec20c55da95e5b62a25fdfea
This commit is contained in:
committed by
Masamichi Takagi
parent
410bf13367
commit
4ba4bbd711
@ -23,10 +23,14 @@
|
||||
#define MAP_HUGE_SHIFT 26
|
||||
#if FIRST_LEVEL_BLOCK_SUPPORT
|
||||
# define MAP_HUGE_FIRST_BLOCK (__PTL3_SHIFT << MAP_HUGE_SHIFT)
|
||||
# define MAP_HUGE_FIRST_CONT_BLOCK (__PTL3_CONT_SHIFT << MAP_HUGE_SHIFT)
|
||||
#else
|
||||
# define MAP_HUGE_FIRST_BLOCK -1 /* not supported */
|
||||
# define MAP_HUGE_FIRST_CONT_BLOCK -1 /* not supported */
|
||||
#endif
|
||||
#define MAP_HUGE_SECOND_BLOCK (__PTL2_SHIFT << MAP_HUGE_SHIFT)
|
||||
#define MAP_HUGE_SECOND_CONT_BLOCK (__PTL2_CONT_SHIFT << MAP_HUGE_SHIFT)
|
||||
#define MAP_HUGE_THIRD_CONT_BLOCK (__PTL1_CONT_SHIFT << MAP_HUGE_SHIFT)
|
||||
|
||||
/*
|
||||
* for mlockall()
|
||||
|
||||
@ -8,10 +8,14 @@
|
||||
#define SHM_HUGE_SHIFT 26
|
||||
#if FIRST_LEVEL_BLOCK_SUPPORT
|
||||
# define SHM_HUGE_FIRST_BLOCK (__PTL3_SHIFT << SHM_HUGE_SHIFT)
|
||||
# define SHM_HUGE_FIRST_CONT_BLOCK (__PTL3_CONT_SHIFT << SHM_HUGE_SHIFT)
|
||||
#else
|
||||
# define SHM_HUGE_FIRST_BLOCK -1 /* not supported */
|
||||
# define SHM_HUGE_FIRST_CONT_BLOCK -1 /* not supported */
|
||||
#endif
|
||||
#define SHM_HUGE_SECOND_BLOCK (__PTL2_SHIFT << SHM_HUGE_SHIFT)
|
||||
#define SHM_HUGE_SECOND_CONT_BLOCK (__PTL2_CONT_SHIFT << SHM_HUGE_SHIFT)
|
||||
#define SHM_HUGE_THIRD_CONT_BLOCK (__PTL1_CONT_SHIFT << SHM_HUGE_SHIFT)
|
||||
|
||||
struct ipc_perm {
|
||||
key_t key;
|
||||
|
||||
@ -1745,23 +1745,24 @@ SYSCALL_DECLARE(mmap)
|
||||
/* check arguments */
|
||||
pgsize = PAGE_SIZE;
|
||||
if (flags & MAP_HUGETLB) {
|
||||
switch (flags & (0x3F << MAP_HUGE_SHIFT)) {
|
||||
case 0:
|
||||
flags |= MAP_HUGE_SECOND_BLOCK; /* default hugepage size */
|
||||
break;
|
||||
int hugeshift = flags & (0x3F << MAP_HUGE_SHIFT);
|
||||
|
||||
case MAP_HUGE_SECOND_BLOCK:
|
||||
case MAP_HUGE_FIRST_BLOCK:
|
||||
break;
|
||||
|
||||
default:
|
||||
if (hugeshift == 0) {
|
||||
/* default hugepage size */
|
||||
flags |= MAP_HUGE_SECOND_BLOCK;
|
||||
} else if (hugeshift == MAP_HUGE_SECOND_BLOCK ||
|
||||
hugeshift == MAP_HUGE_FIRST_BLOCK ||
|
||||
hugeshift == MAP_HUGE_SECOND_CONT_BLOCK ||
|
||||
hugeshift == MAP_HUGE_FIRST_CONT_BLOCK ||
|
||||
hugeshift == MAP_HUGE_THIRD_CONT_BLOCK) {
|
||||
/*nop*/
|
||||
} else {
|
||||
ekprintf("sys_mmap(%lx,%lx,%x,%x,%x,%lx):"
|
||||
"not supported page size.\n",
|
||||
addr0, len0, prot, flags0, fd, off0);
|
||||
error = -EINVAL;
|
||||
goto out;
|
||||
}
|
||||
|
||||
pgsize = (size_t)1 << ((flags >> MAP_HUGE_SHIFT) & 0x3F);
|
||||
}
|
||||
|
||||
@ -1819,16 +1820,18 @@ SYSCALL_DECLARE(shmget)
|
||||
dkprintf("shmget(%#lx,%#lx,%#x)\n", key, size, shmflg0);
|
||||
|
||||
if (shmflg & SHM_HUGETLB) {
|
||||
switch (shmflg & (0x3F << SHM_HUGE_SHIFT)) {
|
||||
case 0:
|
||||
shmflg |= SHM_HUGE_SECOND_BLOCK; /* default hugepage size */
|
||||
break;
|
||||
int hugeshift = shmflg & (0x3F << SHM_HUGE_SHIFT);
|
||||
|
||||
case SHM_HUGE_SECOND_BLOCK:
|
||||
case SHM_HUGE_FIRST_BLOCK:
|
||||
break;
|
||||
|
||||
default:
|
||||
if (hugeshift == 0) {
|
||||
/* default hugepage size */
|
||||
shmflg |= SHM_HUGE_SECOND_BLOCK;
|
||||
} else if (hugeshift == SHM_HUGE_SECOND_BLOCK ||
|
||||
hugeshift == SHM_HUGE_FIRST_BLOCK ||
|
||||
hugeshift == SHM_HUGE_SECOND_CONT_BLOCK ||
|
||||
hugeshift == SHM_HUGE_FIRST_CONT_BLOCK ||
|
||||
hugeshift == SHM_HUGE_THIRD_CONT_BLOCK) {
|
||||
/*nop*/
|
||||
} else {
|
||||
error = -EINVAL;
|
||||
goto out;
|
||||
}
|
||||
|
||||
@ -1725,16 +1725,14 @@ SYSCALL_DECLARE(shmget)
|
||||
dkprintf("shmget(%#lx,%#lx,%#x)\n", key, size, shmflg0);
|
||||
|
||||
if (shmflg & SHM_HUGETLB) {
|
||||
switch (shmflg & (0x3F << SHM_HUGE_SHIFT)) {
|
||||
case 0:
|
||||
int hugeshift = shmflg & (0x3F << SHM_HUGE_SHIFT);
|
||||
|
||||
if (hugeshift == 0) {
|
||||
shmflg |= SHM_HUGE_2MB; /* default hugepage size */
|
||||
break;
|
||||
|
||||
case SHM_HUGE_2MB:
|
||||
case SHM_HUGE_1GB:
|
||||
break;
|
||||
|
||||
default:
|
||||
} else if (hugeshift == SHM_HUGE_2MB ||
|
||||
hugeshift == SHM_HUGE_1GB) {
|
||||
/*nop*/
|
||||
} else {
|
||||
error = -EINVAL;
|
||||
goto out;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user