Received: by 2002:a05:7412:b10a:b0:f3:1519:9f41 with SMTP id az10csp3080752rdb; Mon, 4 Dec 2023 16:46:02 -0800 (PST) X-Google-Smtp-Source: AGHT+IF1Nk+9bnekX4gd4LMvvjme+0E01IazVT82iAQgBmX+VPkDA3w6pEWeLySgXCMi/VMs6/vy X-Received: by 2002:a05:6a20:ae20:b0:18f:97c:ba0f with SMTP id dp32-20020a056a20ae2000b0018f097cba0fmr2437199pzb.105.1701737162340; Mon, 04 Dec 2023 16:46:02 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1701737162; cv=none; d=google.com; s=arc-20160816; b=ffU/SdOEh1VMNN1y3ItuM+XD/dWjhLZnTrFtpKK0ucvIX4IFPldJI58ncRrHVKl5Ir ok4EONGEzbfDVc48wPqQYf5+3DDyXQVDzEzURPwv/KHMJ86y5+eNgB7aNVpD6Nb4D8Jd /rUzeZTMVdv1QXax8yaj2d09NHDw2N+oJUWs+BIZ2bJHsF5JPB3c1zVoGa/ZSehjBfDv +ZXAi8mkuW+JaDvYyREp0CtwiJivAJduLZI9gKvdQUBhS0S/iAGXbuUmJZCnRhugMH+W xHPyq/HHoVsGNd6kn/Flz6AMA6jvoOkTt9owfJj+N4T5kAu/Keumz1/NuI496VP+A+yG sK8Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from:dkim-signature; bh=0+1G5foxgRGGC9Sglprujwuireyhct9QWGwB085kc3g=; fh=OvJRnOqsMTm9XoNmEwebcqh9Ud7yh1CTeKAP84ols98=; b=PdZVWEPiTJo4rlxpafHy78NAjS7Guf565odo2kczeZ1sX2vWOQdTriiJ/kckIR6D3J gLqJMZsu47VCoJQxr4oRjLO8c/UTZwCTGBRZwIB3PCjUpvjPMkDjtosOOY2uoMSFxMwp 4ECuGoA2kVhZOyOkOsT1pHnGLZA4BLA4GSL9fwy0cQ3DgUQF77VMOxxxwNgvEfluH5E1 h1YvDyforv3+sVpgZzjcXIzsEy8DbsoRmfDDyFpiUJTU2zrEKp/PnOX0DaOCFsRZNsVl WgfB8gCHCDwrQ7jALv21Vi4utjjPn6U7ghNwGMX1dJkqYhT+sixeq0qP1Uh/1hKgH8v9 5x1Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=VIoxRmim; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:3 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from lipwig.vger.email (lipwig.vger.email. [2620:137:e000::3:3]) by mx.google.com with ESMTPS id x6-20020a17090a970600b00286a25c57dbsi2909733pjo.83.2023.12.04.16.46.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 04 Dec 2023 16:46:02 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:3 as permitted sender) client-ip=2620:137:e000::3:3; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=VIoxRmim; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:3 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by lipwig.vger.email (Postfix) with ESMTP id 8EBD480ABB20; Mon, 4 Dec 2023 16:45:49 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at lipwig.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1343661AbjLEAp2 (ORCPT + 99 others); Mon, 4 Dec 2023 19:45:28 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40104 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229668AbjLEApY (ORCPT ); Mon, 4 Dec 2023 19:45:24 -0500 Received: from mgamail.intel.com (mgamail.intel.com [192.55.52.120]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 25516101 for ; Mon, 4 Dec 2023 16:45:29 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1701737129; x=1733273129; h=from:to:cc:subject:date:message-id:mime-version: content-transfer-encoding; bh=BXT87HuHx1IXeFYwiHOiVWUcms/fvvDi+Ha0MJa2ebw=; b=VIoxRmimhkjgzknh+08m3U3jjd09Tt0tcOVbgWYleykQKRmUw/lBCMmn rA7EpTDR7Uc1fg4KzB6oC7owNSVnUvlKmGBCQj52ly3I2iFrq++2WKWbr EANjjFSQGIFqw0ZCnOObVdwoL5i7efvRe+JeBE6MD6kshkISYxKDbPX4N CU06MtMQ7r7ns3bQ37prjYuCTZu74c+VpawunI5UzOSvtN64Nwx52Jq1e 4du0KA4IjIDQt+pB0K/xrQ9JWufGtWmQBnRK1CCxfDE3lFg7nrQqRThrG qU/n0y5QU0fInaFc6ca50yXX+RpTFuIGDO1lO7J3xzpTh0oeRJceqo37o w==; X-IronPort-AV: E=McAfee;i="6600,9927,10914"; a="392688615" X-IronPort-AV: E=Sophos;i="6.04,251,1695711600"; d="scan'208";a="392688615" Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by fmsmga104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 04 Dec 2023 16:45:27 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10914"; a="888704374" X-IronPort-AV: E=Sophos;i="6.04,251,1695711600"; d="scan'208";a="888704374" Received: from abijaz-mobl2.ger.corp.intel.com (HELO box.shutemov.name) ([10.252.61.240]) by fmsmga002-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 04 Dec 2023 16:45:22 -0800 Received: by box.shutemov.name (Postfix, from userid 1000) id 3177310A43D; Tue, 5 Dec 2023 03:45:20 +0300 (+03) From: "Kirill A. Shutemov" To: Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org Cc: "Rafael J. Wysocki" , Peter Zijlstra , Adrian Hunter , Kuppuswamy Sathyanarayanan , Elena Reshetova , Jun Nakajima , Rick Edgecombe , Tom Lendacky , "Kalra, Ashish" , Sean Christopherson , "Huang, Kai" , Baoquan He , kexec@lists.infradead.org, linux-coco@lists.linux.dev, linux-kernel@vger.kernel.org, "Kirill A. Shutemov" Subject: [PATCHv4 00/14] x86/tdx: Add kexec support Date: Tue, 5 Dec 2023 03:44:56 +0300 Message-ID: <20231205004510.27164-1-kirill.shutemov@linux.intel.com> X-Mailer: git-send-email 2.41.0 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-0.8 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lipwig.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (lipwig.vger.email [0.0.0.0]); Mon, 04 Dec 2023 16:45:49 -0800 (PST) The patchset adds bits and pieces to get kexec (and crashkernel) work on TDX guest. The last patch implements CPU offlining according to the approved ACPI spec change poposal[1]. It unlocks kexec with all CPUs visible in the target kernel. It requires BIOS-side enabling. If it missing we fallback to booting 2nd kernel with single CPU. Please review. I would be glad for any feedback. v4: - Fix build for !KEXEC_CORE; - Cleaner ATLERNATIVE use; - Update commit messages and comments; - Add Reviewed-bys; v3: - Rework acpi_mp_crash_stop_other_cpus() to avoid invoking hotplug state machine; - Free page tables if reset vector setup failed; - Change asm_acpi_mp_play_dead() to pass reset vector and PGD as arguments; - Mark acpi_mp_* variables as static and __ro_after_init; - Use u32 for apicid; - Disable CPU offlining if reset vector setup failed; - Rename madt.S -> madt_playdead.S; - Mark tdx_kexec_unshare_mem() as static; - Rebase onto up-to-date tip/master; - Whitespace fixes; - Reorder patches; - Add Reviewed-bys; - Update comments and commit messages; v2: - Rework how unsharing hook ups into kexec codepath; - Rework kvmclock_disable() fix based on Sean's; - s/cpu_hotplug_not_supported()/cpu_hotplug_disable_offlining()/; - use play_dead_common() to implement acpi_mp_play_dead(); - cond_resched() in tdx_shared_memory_show(); - s/target kernel/second kernel/; - Update commit messages and comments; [1] https://lore.kernel.org/all/13356251.uLZWGnKmhe@kreacher Kirill A. Shutemov (14): x86/acpi: Extract ACPI MADT wakeup code into a separate file x86/apic: Mark acpi_mp_wake_* variables as __ro_after_init cpu/hotplug: Add support for declaring CPU offlining not supported cpu/hotplug, x86/acpi: Disable CPU offlining for ACPI MADT wakeup x86/kvm: Do not try to disable kvmclock if it was not enabled x86/kexec: Keep CR4.MCE set during kexec for TDX guest x86/mm: Make x86_platform.guest.enc_status_change_*() return errno x86/mm: Return correct level from lookup_address() if pte is none x86/tdx: Account shared memory x86/tdx: Convert shared memory back to private on kexec x86/mm: Make e820_end_ram_pfn() cover E820_TYPE_ACPI ranges x86/acpi: Rename fields in acpi_madt_multiproc_wakeup structure x86/acpi: Do not attempt to bring up secondary CPUs in kexec case x86/acpi: Add support for CPU offlining for ACPI MADT wakeup method arch/x86/Kconfig | 7 + arch/x86/coco/core.c | 1 - arch/x86/coco/tdx/kexec.c | 0 arch/x86/coco/tdx/tdx.c | 205 ++++++++++++++- arch/x86/hyperv/ivm.c | 9 +- arch/x86/include/asm/acpi.h | 5 + arch/x86/include/asm/pgtable_types.h | 1 + arch/x86/include/asm/smp.h | 1 + arch/x86/include/asm/x86_init.h | 5 +- arch/x86/kernel/acpi/Makefile | 11 +- arch/x86/kernel/acpi/boot.c | 86 +------ arch/x86/kernel/acpi/madt_playdead.S | 21 ++ arch/x86/kernel/acpi/madt_wakeup.c | 363 +++++++++++++++++++++++++++ arch/x86/kernel/crash.c | 4 + arch/x86/kernel/e820.c | 9 +- arch/x86/kernel/kvmclock.c | 12 +- arch/x86/kernel/reboot.c | 22 +- arch/x86/kernel/relocate_kernel_64.S | 3 + arch/x86/kernel/x86_init.c | 4 +- arch/x86/mm/mem_encrypt_amd.c | 8 +- arch/x86/mm/pat/set_memory.c | 17 +- include/acpi/actbl2.h | 19 +- include/linux/cc_platform.h | 10 - include/linux/cpu.h | 2 + kernel/cpu.c | 12 +- 25 files changed, 689 insertions(+), 148 deletions(-) create mode 100644 arch/x86/coco/tdx/kexec.c create mode 100644 arch/x86/kernel/acpi/madt_playdead.S create mode 100644 arch/x86/kernel/acpi/madt_wakeup.c -- 2.41.0