From patchwork Tue Aug 12 06:10:21 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dave Young X-Patchwork-Id: 379196 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from mail-ig0-x237.google.com (mail-ig0-x237.google.com [IPv6:2607:f8b0:4001:c05::237]) (using TLSv1 with cipher ECDHE-RSA-RC4-SHA (128/128 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 446C5140088 for ; Tue, 12 Aug 2014 16:11:11 +1000 (EST) Received: by mail-ig0-f183.google.com with SMTP id l13sf1042706iga.20 for ; Mon, 11 Aug 2014 23:11:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=googlegroups.com; s=20120806; h=mime-version:from:to:cc:subject:date:message-id:in-reply-to :references:x-original-sender:x-original-authentication-results :reply-to:precedence:mailing-list:list-id:list-post:list-help :list-archive:sender:list-subscribe:list-unsubscribe:content-type; bh=3mmafCTny+xOghp9kiTY3ly+cO/t5tdLu5+8YLAXCyo=; b=K5O/EbwlbxWya467CTLOtu6NgEaRy5IUZS28GOxqOkXX72SvAZhF+XocDsB0xCBa9U CNcKt/DJur9Q7MWTpFVbR4KbwtnsStqIpu1q7dCPYKA30rXNwkJlIT7bnLn/GuB4bsBe asidiIDAT68TRRLvwDSgwVGWyd0Egb/oxlEqiAiq6uLD4uJkI4SNO9mX5HnVdBYFqLj0 DtG1VXyBJfWN9zkLJnkx2SlpY7ObiC7WLiytgFyuEEFrV0FMDsFW1+yzuG4YdTVJf279 UIFMGeNbgqmyGW+bnBnmQ8UkamQVq6SNEqCXMaIgt2H9caRYwj0NlPQt8sYdPsLLAn34 8HSg== X-Received: by 10.50.39.113 with SMTP id o17mr623125igk.14.1407823869218; Mon, 11 Aug 2014 23:11:09 -0700 (PDT) MIME-Version: 1.0 X-BeenThere: rtc-linux@googlegroups.com Received: by 10.50.13.4 with SMTP id d4ls2398000igc.19.canary; Mon, 11 Aug 2014 23:11:08 -0700 (PDT) X-Received: by 10.70.87.202 with SMTP id ba10mr1479774pdb.1.1407823868947; Mon, 11 Aug 2014 23:11:08 -0700 (PDT) Received: from mx1.redhat.com (mx1.redhat.com. [209.132.183.28]) by gmr-mx.google.com with ESMTPS id cj6si2060844qcb.1.2014.08.11.23.11.08 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 11 Aug 2014 23:11:08 -0700 (PDT) Received-SPF: pass (google.com: domain of dyoung@redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; Received: from int-mx14.intmail.prod.int.phx2.redhat.com (int-mx14.intmail.prod.int.phx2.redhat.com [10.5.11.27]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s7C6B34l002688 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 12 Aug 2014 02:11:03 -0400 Received: from dhcp-16-198.nay.redhat.com (dhcp-16-104.nay.redhat.com [10.66.16.104]) by int-mx14.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s7C6AO6b002703; Tue, 12 Aug 2014 02:10:55 -0400 From: Dave Young To: Matt Fleming Cc: Catalin Marinas , Will Deacon , Thomas Gleixner , Ingo Molnar , hpa@zytor.com, Alessandro Zummo , Leif Lindholm , Ard Biesheuvel , Mark Salter , Randy Dunlap , linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-efi@vger.kernel.org, rtc-linux@googlegroups.com Subject: [rtc-linux] [PATCH 4/5] efi x86: clear EFI_RUNTIME_SERVICES bit in case failures other than SetVirtualAddressMap Date: Tue, 12 Aug 2014 14:10:21 +0800 Message-Id: <1407823822-23829-4-git-send-email-dyoung@redhat.com> In-Reply-To: <1407823822-23829-1-git-send-email-dyoung@redhat.com> References: <1407823822-23829-1-git-send-email-dyoung@redhat.com> X-Scanned-By: MIMEDefang 2.68 on 10.5.11.27 X-Original-Sender: dyoung@redhat.com X-Original-Authentication-Results: gmr-mx.google.com; spf=pass (google.com: domain of dyoung@redhat.com designates 209.132.183.28 as permitted sender) smtp.mail=dyoung@redhat.com Reply-To: rtc-linux@googlegroups.com Precedence: list Mailing-list: list rtc-linux@googlegroups.com; contact rtc-linux+owners@googlegroups.com List-ID: X-Google-Group-Id: 712029733259 List-Post: , List-Help: , List-Archive: , List-Unsubscribe: , If enter virtual mode failed due to some reason other than the efi call the EFI_RUNTIME_SERVICES bit in efi.flags should be cleared thus users of efi runtime services can check the bit and handle the case instead of assume efi runtime is ok. Per Matt, if efi call SetVirtualAddressMap fails we will be not sure it's safe to make any assumptions about the state of the system. so kernel panics instead of clears EFI_RUNTIME_SERVICES bit. Signed-off-by: Dave Young --- arch/x86/platform/efi/efi.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/arch/x86/platform/efi/efi.c b/arch/x86/platform/efi/efi.c index eae91be..c42f49b 100644 --- a/arch/x86/platform/efi/efi.c +++ b/arch/x86/platform/efi/efi.c @@ -724,6 +724,7 @@ static void __init kexec_enter_virtual_mode(void) */ if (!efi_is_native()) { efi_unmap_memmap(); + clear_bit(EFI_RUNTIME_SERVICES, &efi.flags); return; } @@ -797,6 +798,7 @@ static void __init __efi_enter_virtual_mode(void) new_memmap = efi_map_regions(&count, &pg_shift); if (!new_memmap) { pr_err("Error reallocating memory, EFI runtime non-functional!\n"); + clear_bit(EFI_RUNTIME_SERVICES, &efi.flags); return; } @@ -804,8 +806,10 @@ static void __init __efi_enter_virtual_mode(void) BUG_ON(!efi.systab); - if (efi_setup_page_tables(__pa(new_memmap), 1 << pg_shift)) + if (efi_setup_page_tables(__pa(new_memmap), 1 << pg_shift)) { + clear_bit(EFI_RUNTIME_SERVICES, &efi.flags); return; + } efi_sync_low_kernel_mappings(); efi_dump_pagetable(); @@ -882,8 +886,10 @@ static void __init __efi_enter_virtual_mode(void) void __init efi_enter_virtual_mode(void) { - if (efi_enabled(EFI_PARAVIRT)) + if (efi_enabled(EFI_PARAVIRT)) { + clear_bit(EFI_RUNTIME_SERVICES, &efi.flags); return; + } if (efi_setup) kexec_enter_virtual_mode();