From 9b8424523a09cf7137f9d54f75ebafc063e1916d Mon Sep 17 00:00:00 2001 From: Dominique Martinet Date: Tue, 7 Aug 2018 09:46:53 +0900 Subject: [PATCH] mcctrl: remove rus page cache Change-Id: Ieed7a2a0077ffde3fec8a64d2051e56a53924a42 --- executer/kernel/mcctrl/driver.c | 9 --- executer/kernel/mcctrl/syscall.c | 129 ------------------------------- 2 files changed, 138 deletions(-) diff --git a/executer/kernel/mcctrl/driver.c b/executer/kernel/mcctrl/driver.c index 8e5eab22..61b66e6a 100644 --- a/executer/kernel/mcctrl/driver.c +++ b/executer/kernel/mcctrl/driver.c @@ -44,8 +44,6 @@ extern void mcctrl_syscall_init(void); extern void procfs_init(int); extern void procfs_exit(int); -extern void rus_page_hash_init(void); -extern void rus_page_hash_put_pages(void); extern void uti_attr_finalize(void); extern void binfmt_mcexec_init(void); extern void binfmt_mcexec_exit(void); @@ -186,9 +184,6 @@ int mcctrl_os_shutdown_notifier(int os_index) destroy_ikc_channels(os[os_index]); procfs_exit(os_index); } -#ifdef POSTK_DEBUG_TEMP_FIX_35 /* in shutdown phase, rus_page_hash_put_pages() call added. */ - rus_page_hash_put_pages(); -#endif /* POSTK_DEBUG_TEMP_FIX_35 */ os[os_index] = NULL; @@ -282,8 +277,6 @@ static int __init mcctrl_init(void) os[i] = NULL; } - rus_page_hash_init(); - binfmt_mcexec_init(); if ((ret = symbols_init())) @@ -299,7 +292,6 @@ static int __init mcctrl_init(void) error: binfmt_mcexec_exit(); - rus_page_hash_put_pages(); return ret; } @@ -311,7 +303,6 @@ static void __exit mcctrl_exit(void) } binfmt_mcexec_exit(); - rus_page_hash_put_pages(); uti_attr_finalize(); printk("mcctrl: unregistered.\n"); diff --git a/executer/kernel/mcctrl/syscall.c b/executer/kernel/mcctrl/syscall.c index 95d5f583..cfba8386 100644 --- a/executer/kernel/mcctrl/syscall.c +++ b/executer/kernel/mcctrl/syscall.c @@ -633,111 +633,6 @@ out_put_ppd: return error; } -#define RUS_PAGE_HASH_SHIFT 8 -#define RUS_PAGE_HASH_SIZE (1UL << RUS_PAGE_HASH_SHIFT) -#define RUS_PAGE_HASH_MASK (RUS_PAGE_HASH_SIZE - 1) - -struct list_head rus_page_hash[RUS_PAGE_HASH_SIZE]; -spinlock_t rus_page_hash_lock; - -struct rus_page { - struct list_head hash; - struct page *page; - int refcount; - int put_page; -}; - -void rus_page_hash_init(void) -{ - int i; - - spin_lock_init(&rus_page_hash_lock); - for (i = 0; i < RUS_PAGE_HASH_SIZE; ++i) { - INIT_LIST_HEAD(&rus_page_hash[i]); - } -} - -/* rus_page_hash_lock must be held */ -struct rus_page *_rus_page_hash_lookup(struct page *page) -{ - struct rus_page *rp = NULL; - struct rus_page *rp_iter; - - list_for_each_entry(rp_iter, - &rus_page_hash[page_to_pfn(page) & RUS_PAGE_HASH_MASK], hash) { - - if (rp_iter->page != page) - continue; - - rp = rp_iter; - break; - } - - return rp; -} - - -static int rus_page_hash_insert(struct page *page) -{ - int ret = 0; - struct rus_page *rp; - unsigned long flags; - - spin_lock_irqsave(&rus_page_hash_lock, flags); - - rp = _rus_page_hash_lookup(page); - if (!rp) { - rp = kmalloc(sizeof(*rp), GFP_ATOMIC); - - if (!rp) { - printk("rus_page_add_hash(): error allocating rp\n"); - ret = -ENOMEM; - goto out; - } - - rp->page = page; - rp->put_page = 0; - - get_page(page); - - rp->refcount = 0; /* Will be increased below */ - - list_add_tail(&rp->hash, - &rus_page_hash[page_to_pfn(page) & RUS_PAGE_HASH_MASK]); - } - - ++rp->refcount; - - -out: - spin_unlock_irqrestore(&rus_page_hash_lock, flags); - return ret; -} - -void rus_page_hash_put_pages(void) -{ - int i; - struct rus_page *rp_iter; - struct rus_page *rp_iter_next; - unsigned long flags; - - spin_lock_irqsave(&rus_page_hash_lock, flags); - - for (i = 0; i < RUS_PAGE_HASH_SIZE; ++i) { - - list_for_each_entry_safe(rp_iter, rp_iter_next, - &rus_page_hash[i], hash) { - list_del(&rp_iter->hash); - - put_page(rp_iter->page); - kfree(rp_iter); - } - } - - spin_unlock_irqrestore(&rus_page_hash_lock, flags); -} - - /* * By remap_pfn_range(), VM_PFN_AT_MMAP may be raised. * VM_PFN_AT_MMAP cause the following problems. @@ -917,27 +812,6 @@ static int rus_vm_fault(struct vm_area_struct *vma, struct vm_fault *vmf) if (pfn_valid(pfn+pix)) { page = pfn_to_page(pfn+pix); - if ((error = rus_page_hash_insert(page)) < 0) { -#ifdef POSTK_DEBUG_ARCH_DEP_41 /* HOST-Linux version switch add */ -#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0) - printk("%s: error adding page to RUS hash for 0x%#lx " - "(req: TID: %d, syscall: %lu)\n", - __FUNCTION__, vmf->address, - packet->req.rtid, packet->req.number); -#else /* LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0) */ - printk("%s: error adding page to RUS hash for 0x%p " - "(req: TID: %d, syscall: %lu)\n", - __FUNCTION__, vmf->virtual_address, - packet->req.rtid, packet->req.number); -#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0) */ -#else /* POSTK_DEBUG_ARCH_DEP_41 */ - printk("%s: error adding page to RUS hash for 0x%p " - "(req: TID: %d, syscall: %lu)\n", - __FUNCTION__, vmf->virtual_address, - packet->req.rtid, packet->req.number); -#endif /* POSTK_DEBUG_ARCH_DEP_41 */ - } - error = vm_insert_page(vma, rva+(pix*PAGE_SIZE), page); if (error) { #ifdef POSTK_DEBUG_ARCH_DEP_41 /* HOST-Linux version switch add */ @@ -1166,9 +1040,6 @@ void pager_remove_process(struct mcctrl_per_proc_data *ppd) kfree(pager); } - /* Flush page hash as well */ - rus_page_hash_put_pages(); - out: up(&pager_sem); }