From patchwork Wed Nov 15 12:00:30 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Kirill A. Shutemov" X-Patchwork-Id: 16602 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b909:0:b0:403:3b70:6f57 with SMTP id t9csp2485588vqg; Wed, 15 Nov 2023 04:01:55 -0800 (PST) X-Google-Smtp-Source: AGHT+IHt6nqymQGqFEX0CF0h/YipfZCIcNy9eAl/pB+b690bemMqGgtW6lAkySB3mpGBSr9CRmUF X-Received: by 2002:a17:903:22c2:b0:1cc:478c:2f32 with SMTP id y2-20020a17090322c200b001cc478c2f32mr6675628plg.0.1700049715439; Wed, 15 Nov 2023 04:01:55 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1700049715; cv=none; d=google.com; s=arc-20160816; b=m2/5O9orvj008so1/khB4zdP1INtpN7PLScKbjAl2mmjjOlTMhyDTqwOWLOWXvJ6MA +9mRerCJIO2is27tMph1hwkAXXsYwpSpNX7uCeSzVIrwmmEG+Xj1avuHVtRSP3LyDCmv fo1fisAwr5v1JnG9MnQcG/cI8mQPjkXt7FjzNTqX3b4OEOKdmZo4/JNiSpMouI63qWGu xeXbO2MIkD2Cd+jH7aHNUh58Gvz9C9ggYlQOpUJYta0WenLDdLBXeZQ5k5eomLjyDMoC ezVlwiV2X8BD3UPxMjE7uYl03ytTZQWoT8ZKmaMzLnn7qFMrJTFvEGl43GPo7iT48IwD P/mg== 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 23.128.96.33 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 lipwig.vger.email (lipwig.vger.email. [23.128.96.33]) by mx.google.com with ESMTPS id j3-20020a170903028300b001cc54fb60fbsi10604252plr.396.2023.11.15.04.01.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 15 Nov 2023 04:01:55 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.33 as permitted sender) client-ip=23.128.96.33; 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 23.128.96.33 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 3782780254E2; Wed, 15 Nov 2023 04:01:42 -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 S1343675AbjKOMBW (ORCPT + 28 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 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 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]); Wed, 15 Nov 2023 04:01:42 -0800 (PST) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1782631330507012582 X-GMAIL-MSGID: 1782631330507012582 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