If vdso initialisation failed, vdso_ready is not set. Otherwise, vdso_pages is only 0 when it is a 32 bits task and CONFIG_VDSO32 is not selected.
As arch_setup_additional_pages() now bails out directly in that case, we don't need to set vdso_pages to 0. Signed-off-by: Christophe Leroy <christophe.le...@csgroup.eu> --- arch/powerpc/kernel/vdso.c | 23 ++++++----------------- 1 file changed, 6 insertions(+), 17 deletions(-) diff --git a/arch/powerpc/kernel/vdso.c b/arch/powerpc/kernel/vdso.c index 465150253c31..c173c70ca7d2 100644 --- a/arch/powerpc/kernel/vdso.c +++ b/arch/powerpc/kernel/vdso.c @@ -178,11 +178,6 @@ int arch_setup_additional_pages(struct linux_binprm *bprm, int uses_interp) current->mm->context.vdso_base = 0; - /* vDSO has a problem and was disabled, just don't "enable" it for the - * process - */ - if (vdso_pages == 0) - return 0; /* Add a page to the vdso size for the data page */ vdso_pages ++; @@ -712,14 +707,16 @@ static int __init vdso_init(void) * Initialize the vDSO images in memory, that is do necessary * fixups of vDSO symbols, locate trampolines, etc... */ - if (vdso_setup()) - goto setup_failed; + if (vdso_setup()) { + pr_err("vDSO setup failure, not enabled !\n"); + return 0; + } if (IS_ENABLED(CONFIG_VDSO32)) { /* Make sure pages are in the correct state */ pagelist = kcalloc(vdso32_pages + 1, sizeof(struct page *), GFP_KERNEL); if (!pagelist) - goto alloc_failed; + return 0; pagelist[0] = virt_to_page(vdso_data); @@ -732,7 +729,7 @@ static int __init vdso_init(void) if (IS_ENABLED(CONFIG_PPC64)) { pagelist = kcalloc(vdso64_pages + 1, sizeof(struct page *), GFP_KERNEL); if (!pagelist) - goto alloc_failed; + return 0; pagelist[0] = virt_to_page(vdso_data); @@ -745,14 +742,6 @@ static int __init vdso_init(void) smp_wmb(); vdso_ready = 1; - return 0; - -setup_failed: - pr_err("vDSO setup failure, not enabled !\n"); -alloc_failed: - vdso32_pages = 0; - vdso64_pages = 0; - return 0; } arch_initcall(vdso_init); -- 2.25.0