• malc's avatar
    Revert "mm/vmalloc: interchage the implementation of vmalloc_to_{pfn,page}" · add688fb
    malc authored
    Revert commit ece86e22
    
    , which was intended as a small performance
    improvement.
    
    Despite the claim that the patch doesn't introduce any functional
    changes in fact it does.
    
    The "no page" path behaves different now.  Originally, vmalloc_to_page
    might return NULL under some conditions, with new implementation it
    returns pfn_to_page(0) which is not the same as NULL.
    
    Simple test shows the difference.
    
    test.c
    
    #include <linux/kernel.h>
    #include <linux/module.h>
    #include <linux/vmalloc.h>
    #include <linux/mm.h>
    
    int __init myi(void)
    {
    	struct page *p;
    	void *v;
    
    	v = vmalloc(PAGE_SIZE);
    	/* trigger the "no page" path in vmalloc_to_page*/
    	vfree(v);
    
    	p = vmalloc_to_page(v);
    
    	pr_err("expected val = NULL, returned val = %p", p);
    
    	return -EBUSY;
    }
    
    void __exit mye(void)
    {
    
    }
    module_init(myi)
    module_exit(mye)
    
    Before interchange:
    expected val = NULL, returned val =   (null)
    
    After interchange:
    expected val = NULL, returned val = c7ebe000
    Signed-off-by: default avatarVladimir Murzin <murzin.v@gmail.com>
    Cc: Jianyu Zhan <nasa4836@gmail.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    add688fb
vmalloc.c 67.9 KB