Received: by 2002:a05:7412:b101:b0:e2:908c:2ebd with SMTP id az1csp2541163rdb; Wed, 15 Nov 2023 04:02:27 -0800 (PST) X-Google-Smtp-Source: AGHT+IGn71ncb1J15PBy8ptJAclX4R5jWaYgwXvWl5IWTwH2Mzjqn/+Qumd9j/tuQd3iJtPwCI19 X-Received: by 2002:a05:6808:de0:b0:3ad:f5b3:844c with SMTP id g32-20020a0568080de000b003adf5b3844cmr13043332oic.18.1700049746913; Wed, 15 Nov 2023 04:02:26 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1700049746; cv=none; d=google.com; s=arc-20160816; b=CFniUaLwHcxMY347soCjz6xz8D4c5VlYvJXkXzqpaIEUCcCDFHHzQ5kWW2svD72GMq TGCckhZotH7sFU4Vf5luhz/wzrvKOjGg3e5kRUj5W7uRvZWAyXTZHmtD7seWsZ0HEEx6 Mbt44ZvWP+c3OHIv8TJUYn7uR5uBblN7er3fcM+WabrfvV/VN3rxNjdb/EhKhjQyLnr9 gT/DKAcPGaMw+flnP49rd9JbJ8xh0FZNWMf4EHZEgQHZCnOPhwnGUekjl5EbDt3gbkSJ C7SRhGsx1a5t/p6dtQjOuoyAyCVAjXOxjCy2yyoqJtPsh31IaOTbMsneE3iW5WbAME1G +1RQ== 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=wvMVaj5nqKC636vYJ4vnauGT3t53BRyz8Nse33WVkSE=; fh=OvJRnOqsMTm9XoNmEwebcqh9Ud7yh1CTeKAP84ols98=; b=Uqq6tbyLn7f3p0HR0s1vcjuUsEdSqKcxA7kAuEakJF2PTLbB12ZSnmseKMChWbQTFQ oYX7l2hLkTXRfhLUPx/3IPmHZyrso3v4EaZa5nAFOLfV3LsAtbxx8iCgnE+MnpZ0aofw xcZhhjouC/ogPD9K5BZReUDy8kT+ciiFlLZhmHjeF3IjAXMkNnnpuo3KCRBpFL8m1HJS 5k6b30nh1jjVNky/btxtuOEGNnXCcPa/ZvQcb7ZnDAKSpOILZztiPakM8xs7cGu6r6Yz fbkXL+mjLFtK+uy5xsQ+N29YUSgimE5RPBnGF7l5H0ek2n6dsES1OF8Gn1hvSdUSoiYg 5lfg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=f9DxIPqj; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:5 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 groat.vger.email (groat.vger.email. [2620:137:e000::3:5]) by mx.google.com with ESMTPS id g8-20020a63fa48000000b005b3b889619asi9612631pgk.606.2023.11.15.04.02.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 15 Nov 2023 04:02:26 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:5 as permitted sender) client-ip=2620:137:e000::3:5; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=f9DxIPqj; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:5 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 groat.vger.email (Postfix) with ESMTP id C8D6180C255A; Wed, 15 Nov 2023 04:01:53 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at groat.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1343662AbjKOMBW (ORCPT + 99 others); Wed, 15 Nov 2023 07:01:22 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:56660 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1343607AbjKOMBV (ORCPT ); Wed, 15 Nov 2023 07:01:21 -0500 Received: from mgamail.intel.com (mgamail.intel.com [134.134.136.65]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 0F18611D for ; Wed, 15 Nov 2023 04:01:18 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1700049678; x=1731585678; h=from:to:cc:subject:date:message-id:mime-version: content-transfer-encoding; bh=2EtIF3ixgiNlt80godwBv9gDxaOhRsjIZTUxXE2EFZA=; b=f9DxIPqj8qqJT/rJ1UA3F9mBw4YFuL1hCWSuHEWD0Pxyq0XBiQwHZYak rVa5WXJ2Oh83BjOBDkjOBblGP6q+ne7FxMSVb+9ODVaaMXflUVvG5cpRH WVNVQtIFKevrqH+VNzwH9PpQa/7N14b7kPiKId8diRww5tAO3xoxWkaDE AwsMC9Znvcx7huHVPHGeeQ/c9DSuhvqGqsD1vWU+BDvOoALTb5S49yiNM Yb+bXFcYsos2ZXApmby4KIiDnH3o84JUv2GfWoDhCIEAMfjsQg1wNqCeI HK6QU85eZ2Z5griIhjq5mpYg6TguXqlt5apnNJNe99Q1K7qyE96q3F5VW g==; X-IronPort-AV: E=McAfee;i="6600,9927,10894"; a="394780367" X-IronPort-AV: E=Sophos;i="6.03,304,1694761200"; d="scan'208";a="394780367" Received: from fmviesa001.fm.intel.com ([10.60.135.141]) by orsmga103.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 15 Nov 2023 04:01:17 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.03,304,1694761200"; d="scan'208";a="13160205" Received: from mituomis-mobl.ger.corp.intel.com (HELO box.shutemov.name) ([10.249.44.135]) by smtpauth.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 15 Nov 2023 04:01:12 -0800 Received: by box.shutemov.name (Postfix, from userid 1000) id 8E4C2109F3E; Wed, 15 Nov 2023 15:01:09 +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: [PATCHv3 00/14] x86/tdx: Add kexec support Date: Wed, 15 Nov 2023 15:00:30 +0300 Message-ID: <20231115120044.8034-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.9 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 groat.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 (groat.vger.email [0.0.0.0]); Wed, 15 Nov 2023 04:01:54 -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. 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/x86_init.h | 5 +- arch/x86/kernel/acpi/Makefile | 11 +- arch/x86/kernel/acpi/boot.c | 88 +----- arch/x86/kernel/acpi/madt_playdead.S | 21 ++ arch/x86/kernel/acpi/madt_wakeup.c | 400 +++++++++++++++++++++++++++ arch/x86/kernel/crash.c | 4 + arch/x86/kernel/e820.c | 9 +- arch/x86/kernel/kvmclock.c | 12 +- arch/x86/kernel/reboot.c | 5 + arch/x86/kernel/relocate_kernel_64.S | 5 + 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 +- 24 files changed, 716 insertions(+), 144 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