From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.2 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED,USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id D485DECE58D for ; Wed, 9 Oct 2019 14:05:19 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id AF31521848 for ; Wed, 9 Oct 2019 14:05:19 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731178AbfJIOFR (ORCPT ); Wed, 9 Oct 2019 10:05:17 -0400 Received: from mx1.redhat.com ([209.132.183.28]:35680 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729491AbfJIOFR (ORCPT ); Wed, 9 Oct 2019 10:05:17 -0400 Received: from mail-wr1-f72.google.com (mail-wr1-f72.google.com [209.85.221.72]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 827CB51EE8 for ; Wed, 9 Oct 2019 13:59:13 +0000 (UTC) Received: by mail-wr1-f72.google.com with SMTP id l12so1163223wrm.6 for ; Wed, 09 Oct 2019 06:59:13 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=IlNxxlW30AXk2pCJR6QVkj5c2p86veqQztlocOKMAv0=; b=HY9SA8HlJrYCOYFt9+5ipx6e0k2UDy4WEQ8tcDvK3gtegmNU+ZtiC9elhhvhPcPVJI VvFmCvMevR/cIK4wtktfmsV0SEAVVnuJsDrlWfWuNhf8R7dCDfyJDu+XK/y7ZrWEs2vr cUlb1FDdRe/P0mkIpETOvBqI/1H4AiGKaZD6iLVF146LCfje+5u+WEPWD7KKeypHnDMR wB+guu7A8CqM6NKxf2An64MAeEqH6S/MPnPMSp+gPurELSPevrvUWMYPm7IUFDY2k2v1 OXKQ7+d9N3YxSku3nzfLu0beBgDl1vuHuB+UipbN4PG65x/e2u4BB1WavGj9hcNt+OOK zHOg== X-Gm-Message-State: APjAAAVu5XNIwH4YnBx+6iZuXxjWJZFL7jjGbTQNo8Hg/NVJlpVMKAtj boaK9x6X1KLkdlicZXsjjGhMYKZmdNTgkU6QyoRvyyLohy8ZnwtOcJGfkbEqDrV4XoD8WjcRiqV VIJLcYDkzURCA3RC/qhiXm/bj X-Received: by 2002:a5d:6250:: with SMTP id m16mr3047891wrv.322.1570629552226; Wed, 09 Oct 2019 06:59:12 -0700 (PDT) X-Google-Smtp-Source: APXvYqxK6exxvy56MGfd32RiDNMWAT27CUblCzLWExqhg7dIsvGAXRbTbZ4PDSeCcTu8k/dGE3uV7Q== X-Received: by 2002:a5d:6250:: with SMTP id m16mr3047868wrv.322.1570629552001; Wed, 09 Oct 2019 06:59:12 -0700 (PDT) Received: from shalem.localdomain (2001-1c00-0c14-2800-ec23-a060-24d5-2453.cable.dynamic.v6.ziggo.nl. [2001:1c00:c14:2800:ec23:a060:24d5:2453]) by smtp.gmail.com with ESMTPSA id h125sm3227806wmf.31.2019.10.09.06.59.10 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 09 Oct 2019 06:59:11 -0700 (PDT) Subject: Re: [PATCH v7 1/8] efi: Export boot-services code and data as debugfs-blobs To: Ard Biesheuvel Cc: Darren Hart , Andy Shevchenko , Luis Chamberlain , Greg Kroah-Hartman , "Rafael J . Wysocki" , Thomas Gleixner , Ingo Molnar , Borislav Petkov , "H . Peter Anvin" , Jonathan Corbet , Dmitry Torokhov , Peter Jones , Dave Olsthoorn , the arch/x86 maintainers , platform-driver-x86@vger.kernel.org, linux-efi , Linux Kernel Mailing List , Linux Doc Mailing List , linux-input@vger.kernel.org References: <20191004145056.43267-1-hdegoede@redhat.com> <20191004145056.43267-2-hdegoede@redhat.com> From: Hans de Goede Message-ID: <81c648d6-428e-d978-246b-9a87d43c5d21@redhat.com> Date: Wed, 9 Oct 2019 15:59:10 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.1.1 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi, On 09-10-2019 15:35, Ard Biesheuvel wrote: > On Wed, 9 Oct 2019 at 15:18, Hans de Goede wrote: >> >> Hi, >> >> On 09-10-2019 15:07, Ard Biesheuvel wrote: >>> On Fri, 4 Oct 2019 at 16:51, Hans de Goede wrote: >>>> >>>> Sometimes it is useful to be able to dump the efi boot-services code and >>>> data. This commit adds these as debugfs-blobs to /sys/kernel/debug/efi, >>>> but only if efi=debug is passed on the kernel-commandline as this requires >>>> not freeing those memory-regions, which costs 20+ MB of RAM. >>>> >>>> Reviewed-by: Greg Kroah-Hartman >>>> Acked-by: Ard Biesheuvel >>>> Signed-off-by: Hans de Goede >>>> --- >>>> Changes in v5: >>>> -Rename the EFI_BOOT_SERVICES flag to EFI_PRESERVE_BS_REGIONS >>>> >>>> Changes in v4: >>>> -Add new EFI_BOOT_SERVICES flag and use it to determine if the boot-services >>>> memory segments are available (and thus if it makes sense to register the >>>> debugfs bits for them) >>>> >>>> Changes in v2: >>>> -Do not call pr_err on debugfs call failures >>>> --- >>>> arch/x86/platform/efi/efi.c | 1 + >>>> arch/x86/platform/efi/quirks.c | 4 +++ >>>> drivers/firmware/efi/efi.c | 53 ++++++++++++++++++++++++++++++++++ >>>> include/linux/efi.h | 1 + >>>> 4 files changed, 59 insertions(+) >>>> >>>> diff --git a/arch/x86/platform/efi/efi.c b/arch/x86/platform/efi/efi.c >>>> index c202e1b07e29..847730f7e74b 100644 >>>> --- a/arch/x86/platform/efi/efi.c >>>> +++ b/arch/x86/platform/efi/efi.c >>>> @@ -232,6 +232,7 @@ int __init efi_memblock_x86_reserve_range(void) >>>> efi.memmap.desc_version); >>>> >>>> memblock_reserve(pmap, efi.memmap.nr_map * efi.memmap.desc_size); >>>> + set_bit(EFI_PRESERVE_BS_REGIONS, &efi.flags); >>> >>> Should we add a Kconfig symbol to opt into this behavior [set by the >>> driver in question], instead of always preserving all boot services >>> regions on all x86 systems? >> >> This bit does not control anything, it merely signals that the arch early >> boot EFI code keeps the boot-services code around, which is something >> which the x86 code already does. Where as e.g. on arm / aarch64 this is >> freed early on, this ties in with the other bits: >> >>> >>>> >>>> return 0; >>>> } >>>> diff --git a/arch/x86/platform/efi/quirks.c b/arch/x86/platform/efi/quirks.c >>>> index 3b9fd679cea9..fab12ebf0ada 100644 >>>> --- a/arch/x86/platform/efi/quirks.c >>>> +++ b/arch/x86/platform/efi/quirks.c >>>> @@ -411,6 +411,10 @@ void __init efi_free_boot_services(void) >>>> int num_entries = 0; >>>> void *new, *new_md; >>>> >>>> + /* Keep all regions for /sys/kernel/debug/efi */ >>>> + if (efi_enabled(EFI_DBG)) >>>> + return; >>>> + >> >> This is the point where normally on x86 we do actually free the boot-services >> code which is a lot later then on other arches. And this new code actually >> does change things to keep the boot-services code *forever* but only >> if EFI debugging is enabled on the kernel commandline. >> > > I get this part. But at some point, your driver is going to expect > this memory to be preserved even if EFI_DBG is not set, right? My > question was whether we should only opt into that if such a driver is > enabled in the first place. Ah, I see. No even with CONFIG_EFI_EMBEDDED_FIRMWARE selected, the boot-services code still gets free-ed. The efi_get_embedded_fw() function from drivers/firmware/efi/embedded-firmware.c runs before efi_free_boot_services() and it memdup-s any found firmwares, so it does not cause the EFI boot-services code to stick around longer then usual. The only thing which does cause it to stick around is enabling EFI debugging with efi=debug, so that the various efi segments (not only the code-services ones) can be inspected as debugfs blobs. Basically this first patch of the series is independent of the rest. It is part of the series, because adding new efi_embedded_fw_desc structs to the table of firmwares to check for becomes a lot easier when we can easily inspect the efi segments and see if they contain the firmware we want. As for Kconfig options, the compiling of drivers/firmware/efi/embedded-firmware.c is controlled by CONFIG_EFI_EMBEDDED_FIRMWARE which is a hidden option, which can be selected by code which needs this. currently this is only selected by CONFIG_TOUCHSCREEN_DMI which is defined in drivers/platform/x86/Kconfig. Regards, Hans