remove ihk_mc_pt_alloc_range()
This commit is contained in:
@@ -1303,132 +1303,6 @@ int ihk_mc_pt_change_attr_range(page_table_t pt, void *start0, void *end0,
|
||||
return walk_pte_l4(pt, 0, start, end, &change_attr_range_l4, &args);
|
||||
}
|
||||
|
||||
static int alloc_range_l1(void *arg0, pte_t *ptep, uint64_t base,
|
||||
uint64_t start, uint64_t end)
|
||||
{
|
||||
enum ihk_mc_pt_attribute *attrp = arg0;
|
||||
void *vp;
|
||||
|
||||
if (*ptep == PTE_NULL) {
|
||||
/* not mapped */
|
||||
vp = ihk_mc_alloc_pages(1, IHK_MC_AP_NOWAIT);
|
||||
if (vp == NULL) {
|
||||
return -ENOMEM;
|
||||
}
|
||||
memset(vp, 0, PTL1_SIZE);
|
||||
|
||||
*ptep = virt_to_phys(vp) | attr_to_l1attr(*attrp);
|
||||
}
|
||||
else if (!(*ptep & PFL1_PRESENT)) {
|
||||
kprintf("alloc_range_l1(%p,%p,%lx,%lx,%lx):inactive %lx\n",
|
||||
arg0, ptep, base, start, end, *ptep);
|
||||
return -EBUSY;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int alloc_range_l2(void *arg0, pte_t *ptep, uint64_t base,
|
||||
uint64_t start, uint64_t end)
|
||||
{
|
||||
struct page_table *pt;
|
||||
#ifdef USE_LARGE_PAGES
|
||||
enum ihk_mc_pt_attribute *attrp = arg0;
|
||||
void *vp;
|
||||
#endif /* USE_LARGE_PAGES */
|
||||
|
||||
if (*ptep != PTE_NULL) {
|
||||
if (!(*ptep & PFL2_PRESENT)) {
|
||||
kprintf("alloc_range_l2(%p,%p,%lx,%lx,%lx):inactive %lx\n",
|
||||
arg0, ptep, base, start, end, *ptep);
|
||||
return -EBUSY;
|
||||
}
|
||||
else if (*ptep & PFL2_SIZE) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
pt = phys_to_virt(*ptep & PT_PHYSMASK);
|
||||
}
|
||||
else {
|
||||
#ifdef USE_LARGE_PAGES
|
||||
if ((start <= base) && ((base + PTL2_SIZE) <= end)) {
|
||||
vp = ihk_mc_alloc_aligned_pages(LARGE_PAGE_SIZE/PAGE_SIZE,
|
||||
LARGE_PAGE_P2ALIGN, IHK_MC_AP_NOWAIT);
|
||||
if (vp != NULL) {
|
||||
memset(vp, 0, PTL2_SIZE);
|
||||
|
||||
*ptep = virt_to_phys(vp)
|
||||
| attr_to_l2attr(*attrp | PTATTR_LARGEPAGE);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
#endif /* USE_LARGE_PAGES */
|
||||
pt = __alloc_new_pt(IHK_MC_AP_NOWAIT);
|
||||
if (pt == NULL) {
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
*ptep = virt_to_phys(pt) | PFL2_PDIR_ATTR;
|
||||
}
|
||||
|
||||
return walk_pte_l1(pt, base, start, end, &alloc_range_l1, arg0);
|
||||
}
|
||||
|
||||
static int alloc_range_l3(void *arg0, pte_t *ptep, uint64_t base,
|
||||
uint64_t start, uint64_t end)
|
||||
{
|
||||
struct page_table *pt;
|
||||
|
||||
if (*ptep != PTE_NULL) {
|
||||
if (!(*ptep & PFL3_PRESENT)) {
|
||||
kprintf("alloc_range_l3(%p,%p,%lx,%lx,%lx):inactive %lx\n",
|
||||
arg0, ptep, base, start, end, *ptep);
|
||||
panic("alloc_range_l3:inactive");
|
||||
}
|
||||
pt = phys_to_virt(*ptep & PT_PHYSMASK);
|
||||
}
|
||||
else {
|
||||
pt = __alloc_new_pt(IHK_MC_AP_NOWAIT);
|
||||
if (pt == NULL) {
|
||||
return -ENOMEM;
|
||||
}
|
||||
*ptep = virt_to_phys(pt) | PFL3_PDIR_ATTR;
|
||||
}
|
||||
|
||||
return walk_pte_l2(pt, base, start, end, &alloc_range_l2, arg0);
|
||||
}
|
||||
|
||||
static int alloc_range_l4(void *arg0, pte_t *ptep, uint64_t base,
|
||||
uint64_t start, uint64_t end)
|
||||
{
|
||||
struct page_table *pt;
|
||||
|
||||
if (*ptep != PTE_NULL) {
|
||||
if (!(*ptep & PFL4_PRESENT)) {
|
||||
kprintf("alloc_range_l4(%p,%p,%lx,%lx,%lx):inactive %lx\n",
|
||||
arg0, ptep, base, start, end, *ptep);
|
||||
panic("alloc_range_l4:inactive");
|
||||
}
|
||||
pt = phys_to_virt(*ptep & PT_PHYSMASK);
|
||||
}
|
||||
else {
|
||||
pt = __alloc_new_pt(IHK_MC_AP_NOWAIT);
|
||||
if (pt == NULL) {
|
||||
return -ENOMEM;
|
||||
}
|
||||
*ptep = virt_to_phys(pt) | PFL4_PDIR_ATTR;
|
||||
}
|
||||
|
||||
return walk_pte_l3(pt, base, start, end, &alloc_range_l3, arg0);
|
||||
}
|
||||
|
||||
int ihk_mc_pt_alloc_range(page_table_t pt, void *start, void *end,
|
||||
enum ihk_mc_pt_attribute attr)
|
||||
{
|
||||
return walk_pte_l4(pt, 0, (intptr_t)start, (intptr_t)end,
|
||||
&alloc_range_l4, &attr);
|
||||
}
|
||||
|
||||
static pte_t *lookup_pte(struct page_table *pt, uintptr_t virt,
|
||||
uintptr_t *basep, size_t *sizep, int *p2alignp)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user