Received: by 2002:ac0:bc90:0:0:0:0:0 with SMTP id a16csp4844786img; Tue, 26 Mar 2019 18:50:35 -0700 (PDT) X-Google-Smtp-Source: APXvYqz8wfZ4Xq1NRcTR40Ckd9OrtYY1PW/MJ72k5RSEVZztA+vGgx2bvZyYJBcS+TJOOgK36Qi7 X-Received: by 2002:a63:4e10:: with SMTP id c16mr32578649pgb.302.1553651435020; Tue, 26 Mar 2019 18:50:35 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1553651435; cv=none; d=google.com; s=arc-20160816; b=odBh+3AY1Xe7T7DMOXJQ7sRkI0aPfF753BcDys62NydFGadz6bWBRvswn6CUfkV5SC OKSZkw4pJHifKtn1lKNxVDzPYVLey1e0w5qP6mqiZoYAufjPl+34kzPjafTf24H0z6wm 4/6kNKN3Vn4k+PNIhgvONW2HLb9IFSHLS/d7/7jolK/ssFCMr9AbH1NdiduU/vVehBAY 4BNro7sYSGgFvar/3e1Sx0OD8jQgNEkIcpV6fSoOFS3YtBSGHe6dF6rmpkL+2J2jECn4 /AONbE9sm0UjYIfal8B5gzr4PJjsovSTnmE7Yo5YAIKHav3oIgrMFASXwSZbfX/tobvB 4FIQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:user-agent:in-reply-to :content-disposition:mime-version:references:message-id:subject:cc :to:from:date; bh=F37Nd+gLCYj5jy2PyPZcbvJrwPg8neIBvkAqVgnyGvs=; b=EyB8XPSmHOiZxfZ/rZLFtvx6pjnNcNS7pljzbhOZtuhBRoQfSFwUm829oZpU6IHxZ2 uNz9EvbozB5DvjFcWoSD2MOdSYCFL3IPnl5v7SHwSGQx1tMLQtBawgo9dTCjRUG3hmJN tQ0Vk1z87pRJNP7FTtrMx0uYPhjt+ehoS8s3dcFUuZRxY2VaeFdRrNuVzsOn0NS0Fx9I MNEzhQT0qQfxsLazjhgPAqXNlZb71f3BKnBLv9DHHgZ6XdBTZLJiLhesb5mollZCr7sq kXvjs14uCLBFoW6k7wMeaA2/v4pn5VluosGP19pTY02oGEW/xqQdcngcIzmS/r+hERae +HFg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=redhat.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id y3si17582370plt.68.2019.03.26.18.50.19; Tue, 26 Mar 2019 18:50:35 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1732863AbfC0Bs4 (ORCPT + 99 others); Tue, 26 Mar 2019 21:48:56 -0400 Received: from mx1.redhat.com ([209.132.183.28]:42110 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1732026AbfC0Bs4 (ORCPT ); Tue, 26 Mar 2019 21:48:56 -0400 Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 433B959445; Wed, 27 Mar 2019 01:48:56 +0000 (UTC) Received: from localhost (ovpn-12-27.pek2.redhat.com [10.72.12.27]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 9B3DF6085B; Wed, 27 Mar 2019 01:48:55 +0000 (UTC) Date: Wed, 27 Mar 2019 09:48:52 +0800 From: "bhe@redhat.com" To: Junichi Nomura , Borislav Petkov Cc: Dave Young , "fanc.fnst@cn.fujitsu.com" , "kasong@redhat.com" , "x86@kernel.org" , "kexec@lists.infradead.org" , "linux-kernel@vger.kernel.org" Subject: Re: [PATCH v2] x86/boot: Use EFI setup data if provided Message-ID: <20190327014852.GA3659@MiWiFi-R3L-srv> References: <20190325065921.GA11096@dhcp-128-65.nay.redhat.com> <20190325082720.GA20771@jeru.linux.bs1.fc.nec.co.jp> <51D9A7D1-49BF-4679-B102-0FC5AC300C9F@alien8.de> <20190325101509.GA13160@dhcp-128-65.nay.redhat.com> <701c8e69-e1d4-c653-1d87-1c41789d3d54@ce.jp.nec.com> <20190325120149.GI12016@zn.tnic> <20190325122302.GC13160@dhcp-128-65.nay.redhat.com> <20190325123229.GL12016@zn.tnic> <20190325231000.GA9184@jeru.linux.bs1.fc.nec.co.jp> <20190326135714.GG1867@zn.tnic> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20190326135714.GG1867@zn.tnic> User-Agent: Mutt/1.10.1 (2018-07-13) X-Scanned-By: MIMEDefang 2.79 on 10.5.11.13 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.39]); Wed, 27 Mar 2019 01:48:56 +0000 (UTC) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Junichi, On 03/26/19 at 02:57pm, Borislav Petkov wrote: > On Mon, Mar 25, 2019 at 11:10:01PM +0000, Junichi Nomura wrote: > > efi_get_rsdp_addr() and kexec_get_rsdp_addr() could be implemented > > like this (sorry about the pseudo code): > > This doesn't look like what I suggested: > > > So efi_get_rsdp_addr() needs to be refactored in such a way so that at > > least the loop towards the end gets carved out into a separate function > > - __efi_get_rsdp_addr() or so - which gets config_tables, nr_tables and > > size as arguments and finds the RSDP address in the kexec-ed kernel. > > You need to carve out the loop at the end and make it into a separate > __efi_get_rsdp_addr() function which gets the physical or the virtual > address. I guess Boris is suggesting code like below. Please correct me if I am wrong. static acpi_physical_address _efi_get_rsdp_addr(efi_config_table tbl, ...) { /* Get EFI tables from systab. */ for (i = 0; i < nr_tables; i++) { ... } return rsdp_addr; } static acpi_physical_address efi_get_rsdp_addr(void) { ... /* Get systab from boot params. */ ... /* Handle EFI bitness properly */ ... return _efi_get_rsdp_addr(); } static acpi_physical_address kexec_get_rsdp_addr(void) { if (!is_kexec_booted) return 0; efi_get_setup_data_addr(); ... /* Handle EFI bitness properly */ ... return _efi_get_rsdp_addr(); } acpi_physical_address get_rsdp_addr(void) { acpi_physical_address pa; pa = get_acpi_rsdp(); if (!pa) pa = boot_params->acpi_rsdp_addr; /** /*I think here we should check if it's kexec booted firstly. * Skip it if not kexec. this can avoid the wrong kexec virt * addr parsing./ if (!pa) pa = kexec_get_rdsp_addr(); <--- new function if (!pa) pa = efi_get_rsdp_addr(); if (!pa) pa = bios_get_rsdp_addr(); return pa; }