From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from userp2130.oracle.com (userp2130.oracle.com [156.151.31.86]) by mx.groups.io with SMTP id smtpd.web08.1345.1614032565263207450 for ; Mon, 22 Feb 2021 14:22:45 -0800 Authentication-Results: mx.groups.io; dkim=pass header.i=@oracle.com header.s=corp-2020-01-29 header.b=Aif1fVvX; spf=pass (domain: oracle.com, ip: 156.151.31.86, mailfrom: ankur.a.arora@oracle.com) Received: from pps.filterd (userp2130.oracle.com [127.0.0.1]) by userp2130.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 11MMFFbI130280; Mon, 22 Feb 2021 22:22:41 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=subject : to : cc : references : from : message-id : date : in-reply-to : content-type : content-transfer-encoding : mime-version; s=corp-2020-01-29; bh=CyeTtFVdRYBk76ZZMAcik67hinc0fvwOg427FaAwnf4=; b=Aif1fVvX284s1i1FjOJeC0vJZT21/BcQTETAyk1B6CI75jpHlhIvfxFMsw0kyPxprUj/ iDRate8PgUW7eOroFowSCaLzIlS16l+13CsKCPv+7o1GihMV+CSL5TSAfZIkRoPlg6bw /iUXPqF5fYogpGSZeow/s8BCHUCeW51jDYTTO2yXhKgzo4YQQM2K9JIlqzZW8zxW7z+D mky/ZQaybz+Ksori5j0Mcpy5YrvJNHTSoaZP70r1Y007noB8ZFCcswkwxFifXeBvXsNg aDdGN9FYCoYnD7aL713nE+oqaJL05ZeyzXREwabIal1+eXhHuZrIvtOrOeSg1mJ1NuM/ YQ== Received: from userp3020.oracle.com (userp3020.oracle.com [156.151.31.79]) by userp2130.oracle.com with ESMTP id 36tsuqwbux-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 22 Feb 2021 22:22:40 +0000 Received: from pps.filterd (userp3020.oracle.com [127.0.0.1]) by userp3020.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 11MMK3Mm194776; Mon, 22 Feb 2021 22:22:40 GMT Received: from nam11-bn8-obe.outbound.protection.outlook.com (mail-bn8nam11lp2174.outbound.protection.outlook.com [104.47.58.174]) by userp3020.oracle.com with ESMTP id 36uc6qxk8m-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 22 Feb 2021 22:22:40 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=iwGvVLt4U4sVJyOTs+JA3z8b/1elhSdX6RZ0gXa+cms4LtzhEbE1z5T1ZeZAYHEYIvmQy5qim89/DTWjGl40Hmz8sfIZGZJMTWkMonCpG3g0/VZHEmcCRoqdpg2Pll/ge7BTvmAW9NMHYT1VpB9ex3bBSpUCUX6+zCgitbcXSnhLfxSCH+PM9V+fcMshKV6rabaqdLyZi1ba9aIZmS5loKcdZBjRPJ9joYr/bW1k3fynBuMnshftfQTVnpHApZxVnDJDsx0ZVMyhNT9fbLNBKSRIEbL8gPnnAt6eZkiHhs8axshbyrTZQa+pZfJx+OqxUula3wP0zDgibhGOQ21iKA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=CyeTtFVdRYBk76ZZMAcik67hinc0fvwOg427FaAwnf4=; b=QAVfVL/wkc8QAJc0CgTgmk85AR0pcxG9oO9bG2fkaDjpXS0+FPU7Zw1cTRophuR58l+8vdEyh3HDX3kzIxSjrglHGvEXA/AJ0xBos06c0zdEGrhTUXKjWAnAPTaWHy2amtmlKUO8cI6hpvZpkn+JTkAnJiyOdxFmDTEvJYgUwsPgrl7mYQXfWJmENc3nYHADJVVhpMMSLh87SkCKLVJ96CJ1lTFPSHMs5yUBsGQ1k9oNBSDoas69Lo4Dvd7gxwFwRip1KPWOhNtJsKThQ879eutj+FyeETl5t3/AM2Ok1fv8ev3jGpu2EH6g7ThAbEOWvb2BOey3HEp/4vzE6kKCOQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com; dkim=pass header.d=oracle.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=CyeTtFVdRYBk76ZZMAcik67hinc0fvwOg427FaAwnf4=; b=g4OpycgiiQYCuSwvfRF2XiC0QCj+4r7R0wl8zYsU41SIqdi/tbi/ktIJOh1F34Bf1dkTyb75Jbj3QoVNA/wqxCet4gS8FYLQDUaPOXFqBMBWu4ICJokR84DyyBRbGXd3dxy1zN1odlxlJqsePKvPSzZMexljLho6+ZOzbVl4kx4= Received: from SJ0PR10MB4605.namprd10.prod.outlook.com (2603:10b6:a03:2d9::24) by BY5PR10MB3859.namprd10.prod.outlook.com (2603:10b6:a03:1b6::25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3868.31; Mon, 22 Feb 2021 22:22:38 +0000 Received: from SJ0PR10MB4605.namprd10.prod.outlook.com ([fe80::a021:790:7ce6:6f16]) by SJ0PR10MB4605.namprd10.prod.outlook.com ([fe80::a021:790:7ce6:6f16%6]) with mapi id 15.20.3868.033; Mon, 22 Feb 2021 22:22:38 +0000 Subject: Re: [edk2-devel] [PATCH v8 04/10] OvmfPkg/CpuHotplugSmm: introduce UnplugCpus() To: Laszlo Ersek , devel@edk2.groups.io Cc: imammedo@redhat.com, boris.ostrovsky@oracle.com, Jordan Justen , Ard Biesheuvel , Aaron Young References: <20210222071928.1401820-1-ankur.a.arora@oracle.com> <20210222071928.1401820-5-ankur.a.arora@oracle.com> <0cbe2d8d-573c-9c14-8edc-5763ba02f264@redhat.com> From: "Ankur Arora" Message-ID: <12f802f6-e165-4270-2ff8-37e52e1501e0@oracle.com> Date: Mon, 22 Feb 2021 14:22:34 -0800 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.6.0 In-Reply-To: <0cbe2d8d-573c-9c14-8edc-5763ba02f264@redhat.com> X-Originating-IP: [148.87.23.13] X-ClientProxiedBy: MW4PR03CA0099.namprd03.prod.outlook.com (2603:10b6:303:b7::14) To SJ0PR10MB4605.namprd10.prod.outlook.com (2603:10b6:a03:2d9::24) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from [192.168.0.108] (148.87.23.13) by MW4PR03CA0099.namprd03.prod.outlook.com (2603:10b6:303:b7::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3868.28 via Frontend Transport; Mon, 22 Feb 2021 22:22:37 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 2ec2905a-96dc-4a17-0df6-08d8d7805c88 X-MS-TrafficTypeDiagnostic: BY5PR10MB3859: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:10000; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: +EzImgi6lnNta+a49fLchOBF/8cp49sXW9Q5WIaD5JGtIHlJoaaJQrBES/2Fj7c/GGIwUKOxfnXtrmcRhOQT1sRFh6MpDoPo1u91ZXqdG1gdX0l2JhMx7RUNWrmbTBPh3IckCPRxDI8af/6CCJZJUYmi+pVSn1In9petcpszGLPb9SuA40hvLn6aRji64T4rfdbDhd555l4oKfdjDvMZyDyAhJFviVaOZvesRngr673w31xFQ8MkvaT/xxS3NPVTIy5EUxgwUGR9/ac+9pXNWAPsXA/nIl7zy7DMetgiHKRY6Cr+tO238XpJrrh4AVAL1ea2pwgPObncEzyUbuxRKHY2WeCiBbmUHwHI5J6rcB5kIYuUftUjXnJSvgGJ8DEtBLiPH6OtN7jzta4vUYvdTr8Tn2Tu0RVMqsZ5vGQ+p1VSMN4YD3VuIws1k1xQhzSxt+6TA/fCwWv0mtgCEgCICkCYbChvhOORde32yWq7Mp9KvU9LPz3jD2lNhKlXBEyBUiK5JUzLPGLVDBlVUsy6obeTCw3WFfhZ650AOQvOtECD2BO5A37yQxf3KfYGZttx52uSK/FTdRd6bvQfvXp0DWVHki+xujQrSP4ZezsS4MZXF7n8LYpdpPiNTCG9AlpH/j6VkNrwC9i84EXTIfaUrQrD+JLERtIzZM2Iduvtx8o0fnAWNDj9DpY1t9Ofx+xd X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SJ0PR10MB4605.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(366004)(39860400002)(346002)(136003)(396003)(376002)(4326008)(31686004)(6666004)(66476007)(316002)(186003)(16526019)(16576012)(66946007)(66556008)(6486002)(26005)(53546011)(86362001)(107886003)(8936002)(8676002)(31696002)(2906002)(36756003)(478600001)(5660300002)(966005)(54906003)(2616005)(956004)(83380400001)(45980500001)(43740500002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData: =?utf-8?B?N3BFUm5VM1p4ZUJFMHU3Mnc4ZHlRSWJ5NnVWV2huV3dPUTNSbVpKVDJ5V0xM?= =?utf-8?B?ZUVkTDgzUDhHS1FlTlFGWDhSQ05sWXJFcTNSM09WaFIrc1dleFd3UTUyQW44?= =?utf-8?B?azMxN2diL3JiNms2b2VQSEdJV3k4L1V4MkJYZXVoei9MZGh4STR3elZDM2Vp?= =?utf-8?B?aVN5QytCb2FuYTI4a2FzTHpCNksyaTdINlFjWUJTZTZSckIwbmxzRGlzNmlR?= =?utf-8?B?R1dtZ0VWOUV6M25nT2lKMHBGK0d5Y3VpRi83UUFPZGZ4MURhUnI0YnFRZU9v?= =?utf-8?B?K1JWTWdaTnZNOG5WVkxEN1RadFV1dDNpUWJmbjhoM2NoeTdrQWpNbGMvaUVU?= =?utf-8?B?NmlBMlRMWEtCWmZhT0pEVVhDMTh6VExmQ0dVZmV3NTU3M1FtZWxIV0tYU3J2?= =?utf-8?B?Y3dEWnJRZU1rVE16WlB6NFNPbTBhNFNTUVJIU0hnLytmalk0aU1xUE1UQjhp?= =?utf-8?B?WkRVSjZuZVdZT0FrZXR2eEpSSGlaa0MxOWNVVmxoVWhwY3k4dE9TOVlnYm1W?= =?utf-8?B?c1NRaGxTL3cvOFFwdVNna28yVzZCZjUwbDJPc3pkYjFJR2daa0xEN1pUQ3dn?= =?utf-8?B?WjV5M2FGWTBHN1RJdEVLT1B1OEtQSE5TNnRTUmNIM3FvZ2d3VlNkRUZaV3hT?= =?utf-8?B?VFo1dVp2WlVVbkpjTEUxbGxXYnlIMnk0cW9OL00vczM3UFVLNEw2N0NOKzFB?= =?utf-8?B?a2FNNjIveWE5a2Jvb0xkUzIvRnVwWVgrbW1ncmdSS2tLaUNvN2d1VnhhN3lF?= =?utf-8?B?N1JTQ2E3VWY5L1F4YzVnQi9LK3M1S0p6azNHeVQvVGppRThUY1Q2QWZCc1FC?= =?utf-8?B?NGJCVk1VNms0WGRRZTcyMFhMUzZ6QzcxTTRueFVaWUdtYWVKVkd3VjZVNUhY?= =?utf-8?B?d1BQUFd5cE9wWkVydU14OU9hS0xKeWt1eXRUT3R6cW5kMU00Mit4TzlzVkRm?= =?utf-8?B?QWFEWnhFaE13R2F0NEVnd0MvU056b1YyblU0WjFkV3JNRGdhY1RpazJxaW1z?= =?utf-8?B?akNCK1RYcGZ3dldKZk11QkpVcHVlNGZvWXFQV0dLM2lpM2JuUUlMTmxGZUdp?= =?utf-8?B?UTdJSkpyVFA1OHZ1b08xTnNDeXljdUdxTXJmZWl4N05WZ2xsWC9adjBSOWZp?= =?utf-8?B?TUErdGdCSTVpTmppUUpvZ1NuaGhXb0lLNVRONitCQWNzZE9NWDZ0ZDB2aXln?= =?utf-8?B?Q2F2T2o3UDBxOEM3L1dLSFoxYmtsM0xOY2RDYXJJOTBNYlBaSjRSYmcvazlO?= =?utf-8?B?RC9vanA1TzNPRVF5QkQzcVQ3VXQ2UnB2MFFLWHg5M2lidUNsWkVMbmVJZXp1?= =?utf-8?B?R0h4dVhQajM3Q1kzRUlqcVpIRko1T0tIUTFldjJqK01lc295c3lEOUI2UFdh?= =?utf-8?B?NzFYbTdnYktPZjZJNGh1SDV2SkE2ckVCS2loMnFPd20rYjkwcWwvd3hUMDhx?= =?utf-8?B?WXdYYTJBenYyS1lJcGRmZnZjZ0hHZStJMXhrTGdYZzZqSFJ3ek1qSzRHSkNr?= =?utf-8?B?RFdDaUpNc0N1dkdKbi9DSXlHUmtIdVpRRXc5UEJuRGJJNnlyUTJZbEJFclV0?= =?utf-8?B?RWpJT2R6d0kvKy93SStKenRIZWw5bjEyZ25kOUhUYzlBK1BuNHhHaERzQmJG?= =?utf-8?B?RXIxV2xOZGdTeUhBSDhGZkV5UWxlNWE1ZkFaOW03QUhxU2p5QnZodVluWjdt?= =?utf-8?B?L05yUmtoTGpmVCtCNVN6VkVrUDlQdUtmZ3B4M2tjNjNuazloN292alBBWEo0?= =?utf-8?Q?DtBplkoQ6OqdasfTZd9kBiRBAfLAXlGZEW2fbm+?= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 2ec2905a-96dc-4a17-0df6-08d8d7805c88 X-MS-Exchange-CrossTenant-AuthSource: SJ0PR10MB4605.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Feb 2021 22:22:38.2734 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: uWn4sl6bf1UJZBUbsLfNRLwpMwJFlrml08anUq5VfI+oz8+Q6SXrKYtRrk6zCUvMuRXYFlgTEX59r/cDoS+1VxTg/la3ggl3JUQIjEvh5AU= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY5PR10MB3859 X-Proofpoint-Virus-Version: vendor=nai engine=6200 definitions=9903 signatures=668683 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 suspectscore=0 mlxscore=0 spamscore=0 mlxlogscore=999 adultscore=0 bulkscore=0 malwarescore=0 phishscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2009150000 definitions=main-2102220192 X-Proofpoint-Virus-Version: vendor=nai engine=6200 definitions=9903 signatures=668683 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 suspectscore=0 spamscore=0 priorityscore=1501 impostorscore=0 bulkscore=0 mlxscore=0 malwarescore=0 clxscore=1015 phishscore=0 mlxlogscore=999 lowpriorityscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2009150000 definitions=main-2102220191 Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit On 2021-02-22 4:39 a.m., Laszlo Ersek wrote: > On 02/22/21 08:19, Ankur Arora wrote: >> Introduce UnplugCpus() which maps each APIC ID being unplugged >> onto the hardware ID of the processor and informs PiSmmCpuDxeSmm >> of removal by calling EFI_SMM_CPU_SERVICE_PROTOCOL.RemoveProcessor(). >> >> With this change we handle the first phase of unplug where we collect >> the CPUs that need to be unplugged and mark them for removal in SMM >> data structures. >> >> Cc: Laszlo Ersek >> Cc: Jordan Justen >> Cc: Ard Biesheuvel >> Cc: Igor Mammedov >> Cc: Boris Ostrovsky >> Cc: Aaron Young >> Ref: https://bugzilla.tianocore.org/show_bug.cgi?id=3132 >> Signed-off-by: Ankur Arora >> --- >> >> Notes: >> Addresses these review comments from v6: >> (1) Drop the empty line in the comment block around UnplugCpus(). >> (2) Make the "did not find APIC ID" DEBUG_VERBOSE instead of DEBUG_INFO. >> (3) Un-Indented ("Outdented") the line following the comment "Ignore the >> unplug if APIC ID. >> (4) Remove the empty line between Status assignment and check. >> (5) Drop the "goto Fatal" logic and just return Status directly. >> (6) Handle both Plugging and Unplugging of CPUs in one go. >> (7) Also nest the EFI_STATUS check. >> >> OvmfPkg/CpuHotplugSmm/CpuHotplug.c | 84 ++++++++++++++++++++++++++++++++++++++ >> 1 file changed, 84 insertions(+) >> >> diff --git a/OvmfPkg/CpuHotplugSmm/CpuHotplug.c b/OvmfPkg/CpuHotplugSmm/CpuHotplug.c >> index 3192bfea1f15..f07b5072749a 100644 >> --- a/OvmfPkg/CpuHotplugSmm/CpuHotplug.c >> +++ b/OvmfPkg/CpuHotplugSmm/CpuHotplug.c >> @@ -188,6 +188,83 @@ RevokeNewSlot: >> } >> >> /** >> + Process to be hot-unplugged CPUs, per QemuCpuhpCollectApicIds(). >> + >> + For each such CPU, report the CPU to PiSmmCpuDxeSmm via >> + EFI_SMM_CPU_SERVICE_PROTOCOL. If the to be hot-unplugged CPU is >> + unknown, skip it silently. >> + >> + @param[in] ToUnplugApicIds The APIC IDs of the CPUs that are about to be >> + hot-unplugged. >> + >> + @param[in] ToUnplugCount The number of filled-in APIC IDs in >> + ToUnplugApicIds. >> + >> + @retval EFI_SUCCESS Known APIC IDs have been removed from SMM data >> + structures. >> + >> + @return Error codes propagated from >> + mMmCpuService->RemoveProcessor(). >> +**/ >> +STATIC >> +EFI_STATUS >> +UnplugCpus ( >> + IN APIC_ID *ToUnplugApicIds, >> + IN UINT32 ToUnplugCount >> + ) >> +{ >> + EFI_STATUS Status; >> + UINT32 ToUnplugIdx; >> + UINTN ProcessorNum; >> + >> + ToUnplugIdx = 0; >> + while (ToUnplugIdx < ToUnplugCount) { >> + APIC_ID RemoveApicId; >> + >> + RemoveApicId = ToUnplugApicIds[ToUnplugIdx]; >> + >> + // >> + // mCpuHotPlugData->ApicId maps ProcessorNum -> ApicId. Use it to find >> + // the ProcessorNum for the APIC ID to be removed. >> + // >> + for (ProcessorNum = 0; >> + ProcessorNum < mCpuHotPlugData->ArrayLength; >> + ProcessorNum++) { >> + if (mCpuHotPlugData->ApicId[ProcessorNum] == RemoveApicId) { >> + break; >> + } >> + } >> + >> + // >> + // Ignore the unplug if APIC ID not found >> + // >> + if (ProcessorNum == mCpuHotPlugData->ArrayLength) { >> + DEBUG ((DEBUG_VERBOSE, "%a: did not find APIC ID " FMT_APIC_ID >> + " to unplug\n", __FUNCTION__, RemoveApicId)); >> + ToUnplugIdx++; >> + continue; >> + } >> + >> + // >> + // Mark ProcessorNum for removal from SMM data structures >> + // >> + Status = mMmCpuService->RemoveProcessor (mMmCpuService, ProcessorNum); >> + if (EFI_ERROR (Status)) { >> + DEBUG ((DEBUG_ERROR, "%a: RemoveProcessor(" FMT_APIC_ID "): %r\n", >> + __FUNCTION__, RemoveApicId, Status)); >> + return Status; >> + } >> + >> + ToUnplugIdx++; >> + } >> + >> + // >> + // We've removed this set of APIC IDs from SMM data structures. >> + // >> + return EFI_SUCCESS; >> +} >> + >> +/** >> CPU Hotplug MMI handler function. >> >> This is a root MMI handler. >> @@ -309,6 +386,13 @@ CpuHotplugMmi ( >> } >> } >> >> + if (ToUnplugCount > 0) { >> + Status = UnplugCpus (mToUnplugApicIds, ToUnplugCount); >> + if (EFI_ERROR (Status)) { >> + goto Fatal; >> + } >> + } >> + >> // >> // We've handled this MMI. >> // >> > > Reviewed-by: Laszlo Ersek Thanks for the review! Ankur