--- zzzz-none-000/linux-2.6.39.4/mm/page_alloc.c 2011-08-03 19:43:28.000000000 +0000 +++ puma6-atom-6490-729/linux-2.6.39.4/mm/page_alloc.c 2021-11-10 13:38:18.000000000 +0000 @@ -1217,6 +1217,9 @@ void split_page(struct page *page, unsigned int order) { int i; +#if defined(CONFIG_AVM_PAGE_TRACE) + unsigned long current_pc = avm_get_page_current_pc(page); +#endif/*--- #if defined(CONFIG_AVM_PAGE_TRACE) ---*/ VM_BUG_ON(PageCompound(page)); VM_BUG_ON(!page_count(page)); @@ -1230,8 +1233,12 @@ split_page(virt_to_page(page[0].shadow), order); #endif - for (i = 1; i < (1 << order); i++) + for (i = 1; i < (1 << order); i++) { set_page_refcounted(page + i); +#if defined(CONFIG_AVM_PAGE_TRACE) + avm_set_page_current_pc(page + i, current_pc); +#endif/*--- #if defined(CONFIG_AVM_PAGE_TRACE) ---*/ + } } /* @@ -2210,7 +2217,11 @@ */ struct page * __alloc_pages_nodemask(gfp_t gfp_mask, unsigned int order, - struct zonelist *zonelist, nodemask_t *nodemask) + struct zonelist *zonelist, nodemask_t *nodemask +#if defined(CONFIG_AVM_PAGE_TRACE) + , unsigned long pc +#endif/*--- #if defined(CONFIG_AVM_PAGE_TRACE) ---*/ + ) { enum zone_type high_zoneidx = gfp_zone(gfp_mask); struct zone *preferred_zone; @@ -2255,6 +2266,11 @@ put_mems_allowed(); trace_mm_page_alloc(page, order, gfp_mask, migratetype); +#if defined(CONFIG_AVM_PAGE_TRACE) + if(likely(page)) { + avm_set_page_current_pc(page, pc); + } +#endif/*--- #if defined(CONFIG_AVM_PAGE_TRACE) ---*/ return page; } EXPORT_SYMBOL(__alloc_pages_nodemask); @@ -2492,6 +2508,9 @@ #define K(x) ((x) << (PAGE_SHIFT-10)) +#if defined(CONFIG_AVM_ENHANCED) +extern unsigned int get_used_vmalloc_mem(void); +#endif/*--- #if defined(CONFIG_AVM_ENHANCED) ---*/ /* * Show free area list (used inside shift_scroll-lock stuff) * We also calculate the percentage fragmentation. We do this by counting the @@ -2520,6 +2539,31 @@ pageset->pcp.batch, pageset->pcp.count); } } +#if defined(CONFIG_AVM_ENHANCED) + { + unsigned int sum_pages, vm_used; + sum_pages = global_page_state(NR_ACTIVE_ANON)+ + global_page_state(NR_INACTIVE_ANON)+ + global_page_state(NR_ISOLATED_ANON)+ + global_page_state(NR_ACTIVE_FILE)+ + global_page_state(NR_INACTIVE_FILE)+ + global_page_state(NR_ISOLATED_FILE)+ + global_page_state(NR_UNEVICTABLE)+ + global_page_state(NR_FILE_DIRTY)+ + global_page_state(NR_WRITEBACK)+ + global_page_state(NR_UNSTABLE_NFS)+ + global_page_state(NR_FREE_PAGES)+ + global_page_state(NR_SLAB_RECLAIMABLE)+ + global_page_state(NR_SLAB_UNRECLAIMABLE)+ + global_page_state(NR_FILE_MAPPED)+ + global_page_state(NR_SHMEM)+ + global_page_state(NR_PAGETABLE)+ + global_page_state(NR_BOUNCE); + vm_used = get_used_vmalloc_mem(); + printk("global_page_sum %ukB(%u pages) + vmalloc-used = %uKiB (%u pages)\n", sum_pages * 4, sum_pages, + vm_used >> 10, vm_used >> PAGE_SHIFT); + } +#endif/*--- #if defined(CONFIG_AVM_ENHANCED) ---*/ printk("active_anon:%lu inactive_anon:%lu isolated_anon:%lu\n" " active_file:%lu inactive_file:%lu isolated_file:%lu\n" @@ -5507,10 +5551,10 @@ struct memory_isolate_notify arg; int notifier_ret; int ret = -EBUSY; - int zone_idx; +/*--- int zone_idx; ---*/ zone = page_zone(page); - zone_idx = zone_idx(zone); +/*--- zone_idx = zone_idx(zone); ---*/ spin_lock_irqsave(&zone->lock, flags);