Revert "shmobj: Support large page"

This reverts commit 9a60997ea0.

Change-Id: Id60959b4e03451987239faa0bbc2e780b72fafaa
This commit is contained in:
Masamichi Takagi
2020-07-18 17:48:26 +09:00
committed by Masamichi Takagi
parent 40f8091fab
commit d7cf39883f
32 changed files with 75 additions and 2212 deletions

View File

@ -778,8 +778,32 @@ static inline pte_t *get_contiguous_tail(pte_t *__ptep, size_t __pgsize)
return (pte_t *)__page_align_up(__ptep + 1, align) - 1;
}
int split_contiguous_pages(pte_t *ptep, size_t pgsize,
uint32_t memobj_flags);
static inline int split_contiguous_pages(pte_t *ptep, size_t pgsize)
{
int ret;
pte_t *head = get_contiguous_head(ptep, pgsize);
pte_t *tail = get_contiguous_tail(ptep, pgsize);
pte_t *ptr;
uintptr_t phys;
struct page *page;
phys = pte_get_phys(head);
page = phys_to_page(phys);
if (page && (page_is_in_memobj(page)
|| page_is_multi_mapped(page))) {
ret = -EINVAL;
goto out;
}
for (ptr = head; ptr <= tail; ptr++) {
*ptr &= ~PTE_CONT;
}
ret = 0;
out:
return ret;
}
static inline int page_is_contiguous_head(pte_t *ptep, size_t pgsize)
{

View File

@ -2352,8 +2352,7 @@ static int clear_range(struct page_table *pt, struct process_vm *vm,
if (ptep && pte_is_contiguous(ptep)) {
if (!page_is_contiguous_head(ptep, pgsize)) {
// start pte is not contiguous head
error = split_contiguous_pages(ptep, pgsize,
memobj ? memobj->flags : 0);
error = split_contiguous_pages(ptep, pgsize);
if (error) {
return error;
}
@ -2365,8 +2364,7 @@ static int clear_range(struct page_table *pt, struct process_vm *vm,
if (ptep && pte_is_contiguous(ptep)) {
if (!page_is_contiguous_tail(ptep, pgsize)) {
// end pte is not contiguous tail
error = split_contiguous_pages(ptep, pgsize,
memobj ? memobj->flags : 0);
error = split_contiguous_pages(ptep, pgsize);
if (error) {
return error;
}
@ -2987,8 +2985,7 @@ out:
return error;
}
int ihk_mc_pt_split(page_table_t pt, struct process_vm *vm,
struct vm_range *range, void *addr)
int ihk_mc_pt_split(page_table_t pt, struct process_vm *vm, void *addr)
{
int error;
pte_t *ptep;
@ -3010,9 +3007,7 @@ retry:
if (ptep && !ptl_null(ptep, level) && (pgaddr != addr)) {
page = NULL;
if (ptl_is_contiguous(ptep, level)) {
error = split_contiguous_pages(ptep, pgsize,
range->memobj ?
range->memobj->flags : 0);
error = split_contiguous_pages(ptep, pgsize);
if (error) {
goto out;
}
@ -3023,8 +3018,8 @@ retry:
phys = ptl_phys(ptep, level);
page = phys_to_page(phys);
}
if (!is_splitable(page, range->memobj ?
range->memobj->flags : 0)) {
if (page && (page_is_in_memobj(page)
|| page_is_multi_mapped(page))) {
error = -EINVAL;
kprintf("ihk_mc_pt_split:NYI:page break down\n");
goto out;
@ -3197,9 +3192,7 @@ int move_pte_range(page_table_t pt, struct process_vm *vm,
if (ptep && pte_is_contiguous(ptep)) {
if (!page_is_contiguous_head(ptep, pgsize)) {
// start pte is not contiguous head
error = split_contiguous_pages(ptep, pgsize,
range->memobj ?
range->memobj->flags : 0);
error = split_contiguous_pages(ptep, pgsize);
if (error) {
goto out;
}
@ -3210,9 +3203,7 @@ int move_pte_range(page_table_t pt, struct process_vm *vm,
if (ptep && pte_is_contiguous(ptep)) {
if (!page_is_contiguous_tail(ptep, pgsize)) {
// end pte is not contiguous tail
error = split_contiguous_pages(ptep, pgsize,
range->memobj ?
range->memobj->flags : 0);
error = split_contiguous_pages(ptep, pgsize);
if (error) {
goto out;
}
@ -3817,30 +3808,3 @@ void arch_adjust_allocate_page_size(struct page_table *pt,
}
}
}
int split_contiguous_pages(pte_t *ptep, size_t pgsize,
uint32_t memobj_flags)
{
int ret;
pte_t *head = get_contiguous_head(ptep, pgsize);
pte_t *tail = get_contiguous_tail(ptep, pgsize);
pte_t *ptr;
uintptr_t phys;
struct page *page;
phys = pte_get_phys(head);
page = phys_to_page(phys);
if (!is_splitable(page, memobj_flags)) {
ret = -EINVAL;
goto out;
}
for (ptr = head; ptr <= tail; ptr++) {
*ptr &= ~PTE_CONT;
}
ret = 0;
out:
return ret;
}

View File

@ -19,7 +19,6 @@
#include <ihk/types.h>
#include <errno.h>
struct memobj;
#define KERNEL_CS_ENTRY 4
#define KERNEL_DS_ENTRY 5
#define USER_CS_ENTRY 6
@ -413,8 +412,10 @@ static inline pte_t *get_contiguous_tail(pte_t *__ptep, size_t __pgsize)
return __ptep;
}
int split_contiguous_pages(pte_t *ptep, size_t pgsize,
uint32_t memobj_flags);
static inline int split_contiguous_pages(pte_t *ptep, size_t pgsize)
{
return 0;
}
static inline int page_is_contiguous_head(pte_t *ptep, size_t pgsize)
{

View File

@ -884,7 +884,7 @@ static int split_large_page(pte_t *ptep, size_t pgsize)
}
for (i = 0; i < PT_ENTRIES; ++i) {
if (phys_base != NOPHYS && pgsize != PTL2_SIZE) {
if (phys_base != NOPHYS) {
phys = phys_base + (i * pgsize / PT_ENTRIES);
page = phys_to_page(phys);
if (page) {
@ -2219,8 +2219,7 @@ out:
return error;
}
int ihk_mc_pt_split(page_table_t pt, struct process_vm *vm,
struct vm_range *range, void *addr)
int ihk_mc_pt_split(page_table_t pt, struct process_vm *vm, void *addr)
{
int error;
pte_t *ptep;
@ -2229,6 +2228,7 @@ int ihk_mc_pt_split(page_table_t pt, struct process_vm *vm,
intptr_t phys;
struct page *page;
retry:
ptep = ihk_mc_pt_lookup_pte(pt, addr, 0, &pgaddr, &pgsize, NULL);
if (ptep && !pte_is_null(ptep) && (pgaddr != addr)) {
@ -2237,8 +2237,8 @@ retry:
phys = pte_get_phys(ptep);
page = phys_to_page(phys);
}
if (!is_splitable(page, range->memobj ?
range->memobj->flags : 0)) {
if (page && (page_is_in_memobj(page)
|| page_is_multi_mapped(page))) {
error = -EINVAL;
kprintf("ihk_mc_pt_split:NYI:page break down\n");
goto out;
@ -3001,10 +3001,3 @@ int patch_process_vm(struct process_vm *vm, void *udst, const void *ksrc, size_t
dkprintf("patch_process_vm(%p,%p,%p,%lx):%d\n", vm, udst, ksrc, siz, 0);
return 0;
} /* patch_process_vm() */
int split_contiguous_pages(pte_t *ptep, size_t pgsize,
uint32_t memobj_flags)
{
return 0;
}