From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail05.groups.io (mail05.groups.io [45.79.224.7]) by spool.mail.gandi.net (Postfix) with ESMTPS id 4B4AA941830 for ; Fri, 17 May 2024 14:02:49 +0000 (UTC) DKIM-Signature: a=rsa-sha256; bh=sLEFoSYBPFC+MOoMZfJYamDlt400AtbDOVpF57VtMJE=; c=relaxed/simple; d=groups.io; h=From:To:CC:Subject:Thread-Topic:Thread-Index:Date:Message-ID:References:In-Reply-To:Accept-Language:MIME-Version:Precedence:List-Subscribe:List-Help:Sender:List-Id:Mailing-List:Delivered-To:Resent-Date:Resent-From:Reply-To:List-Unsubscribe-Post:List-Unsubscribe:Content-Language:Content-Type:Content-Transfer-Encoding; s=20240206; t=1715954567; v=1; b=sSkImO7comtF05RYl1R25DAwa3S2wCDT8fIoR+1dxPKMUto1E8H3Ar8ZEd/DvDoHcn+gZRTb JP7+E5uVkVukfSO5rboq8JQ914aP2q7arD8ePQ3URaEC3+0u4tCeDmY8acISg4o2+n0UrZrr6JW bqT1Q2m4BJNXV/vK+bTdZdUom7udS1RAe5dzFRk+SkHnkAMoAyqaTFBAwUDSmgbeLZ8gp3a3hmu xrBlF2R5MCMCdgIwTzH5/ldL2hspkXIlSLGNWkU4xICagLcdMaDGx+GcthnBv7vvlDNPsNIIH6w mjdBipvT8kqNlBKW7sf6+p4XAduhHZtEFbDuOHnnqtuWg== X-Received: by 127.0.0.2 with SMTP id u2HbYY7687511xRxMO7Cp8QE; Fri, 17 May 2024 07:02:47 -0700 X-Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.9]) by mx.groups.io with SMTP id smtpd.web10.40889.1715954567071191073 for ; Fri, 17 May 2024 07:02:47 -0700 X-CSE-ConnectionGUID: cC3U8jebQuW2EBSvSIw1zA== X-CSE-MsgGUID: yrHIuBfZQR2JQSSQwjOOxw== X-IronPort-AV: E=McAfee;i="6600,9927,11075"; a="22805989" X-IronPort-AV: E=Sophos;i="6.08,167,1712646000"; d="scan'208";a="22805989" X-Received: from orviesa009.jf.intel.com ([10.64.159.149]) by fmvoesa103.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 17 May 2024 07:02:46 -0700 X-CSE-ConnectionGUID: WWhzsvvmQGCrsTLKdRMK2g== X-CSE-MsgGUID: Rg/662WJT6CPS1o++v6xMQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.08,167,1712646000"; d="scan'208";a="31939471" X-Received: from fmsmsx601.amr.corp.intel.com ([10.18.126.81]) by orviesa009.jf.intel.com with ESMTP/TLS/AES256-GCM-SHA384; 17 May 2024 07:02:46 -0700 X-Received: from fmsmsx610.amr.corp.intel.com (10.18.126.90) by fmsmsx601.amr.corp.intel.com (10.18.126.81) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39; Fri, 17 May 2024 07:02:44 -0700 X-Received: from fmsmsx610.amr.corp.intel.com (10.18.126.90) by fmsmsx610.amr.corp.intel.com (10.18.126.90) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39; Fri, 17 May 2024 07:02:44 -0700 X-Received: from fmsedg602.ED.cps.intel.com (10.1.192.136) by fmsmsx610.amr.corp.intel.com (10.18.126.90) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39 via Frontend Transport; Fri, 17 May 2024 07:02:44 -0700 X-Received: from NAM11-DM6-obe.outbound.protection.outlook.com (104.47.57.169) by edgegateway.intel.com (192.55.55.71) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.35; Fri, 17 May 2024 07:02:44 -0700 X-Received: from PH7PR11MB5943.namprd11.prod.outlook.com (2603:10b6:510:13f::19) by SA2PR11MB4860.namprd11.prod.outlook.com (2603:10b6:806:11b::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7544.55; Fri, 17 May 2024 14:02:42 +0000 X-Received: from PH7PR11MB5943.namprd11.prod.outlook.com ([fe80::15cc:b461:7bb8:b69f]) by PH7PR11MB5943.namprd11.prod.outlook.com ([fe80::15cc:b461:7bb8:b69f%4]) with mapi id 15.20.7587.028; Fri, 17 May 2024 14:02:42 +0000 From: "Jayaprakash, N" To: "R, Vishal" , "devel@edk2.groups.io" CC: Rebecca Cran , "Kinney, Michael D" Subject: Re: [edk2-devel] [edk2-libc Patch 1/1] edk2-libc: Add cpuid_ex API to execute CPUID instructions on specific CPU Thread-Topic: [edk2-libc Patch 1/1] edk2-libc: Add cpuid_ex API to execute CPUID instructions on specific CPU Thread-Index: AQHaqCTp/c4vDw8YlkaDK3taegkpdLGbdTjw Date: Fri, 17 May 2024 14:02:41 +0000 Message-ID: References: <20240517063826.987-1-vishal.r@intel.com> <20240517063826.987-2-vishal.r@intel.com> In-Reply-To: <20240517063826.987-2-vishal.r@intel.com> Accept-Language: en-IN, en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ms-publictraffictype: Email x-ms-traffictypediagnostic: PH7PR11MB5943:EE_|SA2PR11MB4860:EE_ x-ms-office365-filtering-correlation-id: 6db6daab-154e-4fd6-903b-08dc767a04d4 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam-message-info: =?us-ascii?Q?B1DRwlEY2rp7lwTxaT5MFHI6if8783tOjDbN/dAzEBsfREXd2QYw6dC1nSC5?= =?us-ascii?Q?gUdxk1NYjIN9hwfBi0r7650nB/h8U3uQlOd5LaM3J5CqNmsHqsSyUtw+DCCV?= =?us-ascii?Q?g2NMYELCT8e9CNszn09jr+yGbT6LGCS4lhe9xIIP9cc/0bA7dcnNLeBuXxiN?= =?us-ascii?Q?TcVylGgKW+VpBlfyGXzd8d2Xi3sjXjmC7n8PBDqrhG+QwEM1/Tl8aqo6MZzK?= =?us-ascii?Q?e4fwaawoGSB+GL+Ew3NH1omnx3p2j//X4P6n+fzcaFaj4uW503P8WjIoBfhS?= =?us-ascii?Q?+btg9sgKN0J3bAOCD1CKbPHVWiUTbn1GH+X+4jZEzpXgnP4mVwXKILS8Ri0k?= =?us-ascii?Q?8FzlMBzBcowZUNUREeKSU9Ev3ePOUhp2BqxgyNLWAOSOmb+XYTYzH60uySjB?= =?us-ascii?Q?MQOKazTHZVInUNAhwsH4vMGyeQCSDbRf2D+2AXX5BocuNGEnDFjye1IpTWsb?= =?us-ascii?Q?C/67oGp4UcwfS/6/IVl4oAHDyD1mq0EpQJD6DJgwHB+Wm/Mb/AJos/cyPKe8?= =?us-ascii?Q?i9e2G4/zOrWJYBxFKJmD9UevOtUsdTQLu2SfXn0egd1UoAfV8yGbb8dyIk3z?= =?us-ascii?Q?v4acbhXxy4WmQbS/fIzDo2ynRhzm2rhazpgk252d7pO71NWfSw7NNzlR/xeh?= =?us-ascii?Q?esn4mWHjeaHbtS70yfFWM8FEiTZTCmTFogbL8jjgrm6SBQyoettU2CMKflX2?= =?us-ascii?Q?Yr6wqLNS8+APZn3T9RsHpYpTOTfXP+yNr2zhC+CBGYsHxFvAQa9CYtWmdsp7?= =?us-ascii?Q?3vJTS4nUmUMFX2Hs+i+fapjo5Zossm2tT2gojt+6mjx2BeuZ+0jkuKehD8R6?= =?us-ascii?Q?aWPn0Ajp3P/z08wZLWReQiSh36y4YkcLdBtc3aMuN5cCKsSh5hgGsiKnLziI?= =?us-ascii?Q?4pg3UOgwvjLj/QrEIObwvvWqdVBLZZrW6pZZMNDZrBg2VzY/GiU5ox9F+J6k?= =?us-ascii?Q?RGao5KX3qyBVBlGh88DP2g1REnNZFg8EVwU9eJQn32SNQO6Bn1oiO9xNVlGL?= =?us-ascii?Q?zWRZlZP5Uq/0UuhR0WPnouSiq8clUkuHJgRV4gLS6h34y7aomdygPw6jLfZB?= =?us-ascii?Q?2SVDHEK3fyd75TTzopQCdEGPkk6Pn0GYpyx6+9x3nv+8gFCvOoIAVY/zxnPs?= =?us-ascii?Q?ZtyF+bRX8QXcVvUuMOQfrRSq/W4ileqsF1ntsBiokn2UG7EyEeHsrp4ujVOp?= =?us-ascii?Q?O9tWxBgxkQh7A3gxoVnHK3gXdsr/RWaXrJ3Hd3z74F+/pYfDVDyZ96cwhBOU?= =?us-ascii?Q?BfGA9kvg7vDnz2/bLn2Td6a5oE4ACnqq6AFQ3SGe/Q=3D=3D?= x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?pRMwbj/PfBQ1NP5UFlHhvxmBPewtAfwKx0CMMOe3gg0R0pfqcp5X0dSqo6mX?= =?us-ascii?Q?/bq107Xa3HWV8C1imuQpmCmBgwwa94Idd1E8D8j8PVXmqheh7w7CZJFYks4z?= =?us-ascii?Q?8st1Og5D+4TfiM+/SExboOllhBlafjN+3d8LUuh9dCXv3DJLd+Cou5y1FJVG?= =?us-ascii?Q?wqTKHeoA9SlslodwK0xKG6Rf6S4iibZo7wVBjaRVL9NQ5J23egW1wrTVapaU?= =?us-ascii?Q?zBs7GlqHqd5OCALLx7XqW9to9EMPuMR5QLsxwNm6gZlu53DIZsgZ7v5w1Uj6?= =?us-ascii?Q?X50H1G8VWr2UxtAKaIHBIK2jTI2CqqwFmVlVgxolzJGa53F3dUgxqKMzhLmc?= =?us-ascii?Q?6YBglGOkITqBqZbpGawrJgqaIDz1xH8+nleSBu166tn95xIljDJkzJZ7Xw1+?= =?us-ascii?Q?xWqyuIreD20YyUeYOhyHCNtIE2cnI11qQipW/hAwwJVtd3Lw2ldLTiLLZpNX?= =?us-ascii?Q?CxplaHsNqbysClT0wuf9Dzvpl3xnsM7WY1kI5AmRRi/F1p5zl+N6UI8jRmmF?= =?us-ascii?Q?VInfkxcaOLdFnqEta/FuF3tuAiWdXfqhH7xJD4AHFbSkBN//plb7k2gh82dv?= =?us-ascii?Q?YkkPaM1m1fi4t1Bu4/AAffMPs+UhFXl+QAIGhSCkPZTBHqaI7Id/bTieEvZU?= =?us-ascii?Q?Em1t3MYz48+q0eO+H6CQzt2vksznpb/zNMkkIIc/y2WjHClYj8+gUk2SeVZr?= =?us-ascii?Q?gUd4xd10VJ8GEJ2L6MLXtu5MMU61jcw/kirXMNYsuDo/ipfHEptQTbD4iZg9?= =?us-ascii?Q?ZGgPvaX24r5vvyWnlY1Td545Ij7ioGImJVYaObjBXbljVjuzOEm3sEO88IJh?= =?us-ascii?Q?LPoqmKbmaJ3ZdjnG/AR5E+MvISQMIr31xprajJMocWC6+LrNmzngl3I2+YjU?= =?us-ascii?Q?k7eEH7I6mQMOQ1oPGjOzXf3utT2/eIygD0CgfZUjGjDqoOB8/XFimKDCjHo4?= =?us-ascii?Q?hRDkx3ASK5sHhxGLB1xWD5KMaDM/dHQ2MuhQFYZGhlmuE46VSjLKwwaj+Jwv?= =?us-ascii?Q?YVWV2qe/0b9o3fZ/g/II7TUKprSmRWJL+MsjrNrcBg4/Y7K5Eg+MOjaWzbLE?= =?us-ascii?Q?Pol6fkEQE8QHwzzL546pCHB6sqkBszO4czgVz3bX8Lkv4n09dhv2LEbeuQ8G?= =?us-ascii?Q?yPHlCMDuZjJyIk63YQFWkyt/P7f1PfAcZe4MTBf3vz+Wp397nfonxz3wJ2uh?= =?us-ascii?Q?ooEYQb++Eadgu4+cwQmnScq9qcMjWFdmRBxzFZL1CogwIS2EEGiTMy+2cubw?= =?us-ascii?Q?wsJrfagJcGtFNCRom7sbY+gBnjxDPSuWS9Q0ZyefvcixwK8KasfnZMIQldpd?= =?us-ascii?Q?NOH3iCf0OFco6Jr+QJyPvbgLgjBaqCxQFs4/Dg2N1fJ7O4dYkKkcOkZgJkca?= =?us-ascii?Q?A2aAOJvhOGBJZbhczbXKiRkcv6xroha7ycPFoAyHbnIIUjiOHsKgUrnSgFf/?= =?us-ascii?Q?dBtGbJ0HxZ6/VFDARIOvCLNZsiCW/O2jYP+ViW8UNHlPN3UOZ4wA47g5T9tv?= =?us-ascii?Q?iK0B0ZlFW/SO5NPqcuboVDwE2eeoXc8thDwBAdzMmZgA0dAgU4tg4n0Ximk9?= =?us-ascii?Q?HZXkPSJ60irPe60YLe5BsGVTQ9f2WM4Hl7u1b70s?= MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: PH7PR11MB5943.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6db6daab-154e-4fd6-903b-08dc767a04d4 X-MS-Exchange-CrossTenant-originalarrivaltime: 17 May 2024 14:02:41.8850 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: UhFuQe7AD6v5QSr04OF+QXwHNqK54fPqKy5WrP162lkm4rz5xB8IsNHfzZ69wfgsmQuqLmnN/1m2HOWIGYkybA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA2PR11MB4860 X-OriginatorOrg: intel.com Precedence: Bulk List-Subscribe: List-Help: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Resent-Date: Fri, 17 May 2024 07:02:47 -0700 Resent-From: n.jayaprakash@intel.com Reply-To: devel@edk2.groups.io,n.jayaprakash@intel.com List-Unsubscribe-Post: List-Unsubscribe=One-Click List-Unsubscribe: X-Gm-Message-State: UoHNrt81QMo2z4bcqrnEQSypx7686176AA= Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable X-GND-Status: LEGIT Authentication-Results: spool.mail.gandi.net; dkim=pass header.d=groups.io header.s=20240206 header.b=sSkImO7c; dmarc=fail reason="SPF not aligned (relaxed), DKIM not aligned (relaxed)" header.from=intel.com (policy=none); spf=pass (spool.mail.gandi.net: domain of bounce@groups.io designates 45.79.224.7 as permitted sender) smtp.mailfrom=bounce@groups.io Changes looks good. Reviewed-by: Jayaprakash N Regards, JP -----Original Message----- From: R, Vishal =20 Sent: Friday, May 17, 2024 12:08 PM To: devel@edk2.groups.io Cc: R, Vishal ; Rebecca Cran ; Kinne= y, Michael D ; Jayaprakash, N Subject: [edk2-libc Patch 1/1] edk2-libc: Add cpuid_ex API to execute CPUID= instructions on specific CPU REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3D4749 This commit adds cpuid_ex function to edk2module to provide capability to e= xecute cpuid instruction on specific cpu. This feature was requested via BZ 4749 Cc: Rebecca Cran Cc: Michael D Kinney Cc: Jayaprakash N Signed-off-by: Vishal R --- .../PyMod-3.6.8/Modules/edk2module.c | 93 +++++++++++++++++++ 1 file changed, 93 insertions(+) diff --git a/AppPkg/Applications/Python/Python-3.6.8/PyMod-3.6.8/Modules/ed= k2module.c b/AppPkg/Applications/Python/Python-3.6.8/PyMod-3.6.8/Modules/ed= k2module.c index 163fc7f..d419428 100644 --- a/AppPkg/Applications/Python/Python-3.6.8/PyMod-3.6.8/Modules/edk2modul= e.c +++ b/AppPkg/Applications/Python/Python-3.6.8/PyMod-3.6.8/Modules/edk2mo +++ dule.c @@ -45,6 +45,15 @@ typedef struct { UINT64 data; // data, to be filled by the AP function } AP_FUNCTION_M= SR_ARGS; =20 +typedef struct { + UINT32 eax; // eax value + UINT32 ecx; // ecx value + UINT32 rax_value; // retrun value for eax + UINT32 rbx_value; // return value for ebx + UINT32 rcx_value; // retrun value for ecx + UINT32 rdx_value; // return value for edx +} AP_FUNCTION_CPUID_ARGS; + #define AP_FUNCTION_EXECUTION_TIMEOUT 5000000 // setting the max time o= ut value to be 5 seconds =20 extern void _swsmi( unsigned int smi_code_data, unsigned int rax_value, un= signed int rbx_value, unsigned int rcx_value, unsigned int rdx_value, unsig= ned int rsi_value, unsigned int rdi_value ); @@ -223,6 +232,13 @@ VOID EFIA= PI MSRWriteToRunOnAP(IN VOID *context) AsmWriteMsr64(msr, data); } =20 +// CPUID execution function to run on specific cpu core using=20 +MPServices Protocol VOID EFIAPI CPUIDToRunOnAP(IN VOID *context) { + AP_FUNCTION_CPUID_ARGS *args =3D (AP_FUNCTION_CPUID_ARGS *)context; + AsmCpuidEx( args->eax, args->ecx, &args->rax_value,=20 +&args->rbx_value, &args->rcx_value, &args->rdx_value); } + #ifndef UEFI_C_SOURCE /* Return a dictionary corresponding to the POSIX environment table */ ex= tern char **environ; @@ -4153,6 +4169,82 @@ edk2_cpuid(PyObject *self, PyOb= ject *args) return Py_BuildValue("(IIII))", (unsigned long)rax_value, (unsigned = long)rbx_value, (unsigned long)rcx_value, (unsigned long)rdx_value); } =20 +PyDoc_STRVAR(efi_cpuid_ex__doc__, +"cpuid_ex(cpu, eax, ecx) -> (eax:ebx:ecx:edx)\n\ Read the CPUID from a=20 +specific cpu.";); + +static PyObject * +edk2_cpuid_ex(PyObject *self, PyObject *args) { + UINT32 cpu, eax, ecx, rax_value, rbx_value, rcx_value, rdx_value; + BOOLEAN is_function_finished =3D FALSE; + EFI_STATUS status =3D 0; + AP_FUNCTION_CPUID_ARGS cpuid_args =3D {0}; + + if (!PyArg_ParseTuple(args, "III", &cpu, &eax, &ecx)) + return NULL; + Py_BEGIN_ALLOW_THREADS + + cpuid_args.eax =3D eax; + cpuid_args.ecx =3D ecx; + + if (cpu =3D=3D gCurrentBSPProcessorNumber) + { + // cpu provided as input is same as the current BSP processor + // then directly call the CPUIDToRunOnAP function to execute + // cpuid instruction on current BSP processor itself. + CPUIDToRunOnAP(&cpuid_args); + } + else if (cpu < gNumberOfProcessors) + { + // if cpu provided as input is different from the current + // BSP processor and is less than the number of processors + // on this system, then make use of the MPService protocols + // StartupThisAP function to run the CPUIDToRunOnAP function on + // specific AP indicated by cpu parameter. + // Start the AP with the arguments structure + + status =3D gpMpService->StartupThisAP( + gpMpService, + CPUIDToRunOnAP, // Function to run + cpu, // AP number + NULL, // WaitEvent (optional) + AP_FUNCTION_EXECUTION_TIMEOUT, // Timeout in microseconds + &cpuid_args, // Buffer to pass to the funct= ion + &is_function_finished // Finished (optional) + ); + if (EFI_ERROR(status)) + { + PyErr_SetString(PyExc_OSError, "Could not start the requested = cpu"); + Py_INCREF(Py_None); + return Py_None; + } + + if (!is_function_finished) + { + PyErr_SetString(PyExc_OSError, + "Timeout while running the cpuid instruction o= n given cpu"); + Py_INCREF(Py_None); + return Py_None; + } + } + else + { + // if cpu provided exeeds the number of processors + // then set the ValueError exception and return Py_None + PyErr_SetString(PyExc_ValueError, + "Invalid cpu number provided"); + Py_INCREF(Py_None); + return Py_None; + } + + Py_END_ALLOW_THREADS + return Py_BuildValue("(IIII))", (unsigned long)cpuid_args.rax_value, + (unsigned long)cpuid_args.rbx_value, + (unsigned long)cpuid_args.rcx_value, + (unsigned=20 +long)cpuid_args.rdx_value); } + PyDoc_STRVAR(efi_allocphysmem__doc__, "allocphysmem(length, max_pa) -> (va)\n\ Use malloc to allocate space in = memory.";); @@ -4816,6 +4908,7 @@ static PyMethodDef edk2_methods[] =3D { {"swsmi", posix_swsmi, METH_VARARGS, efi= _swsmi__doc__}, {"allocphysmem", posix_allocphysmem, METH_VARARGS, efi= _allocphysmem__doc__}, {"cpuid", edk2_cpuid, METH_VARARGS, efi_= cpuid__doc__}, + {"cpuid_ex", edk2_cpuid_ex, METH_VARARGS, efi_= cpuid_ex__doc__}, {"GetVariable", MiscRT_GetVariable, METH_VARARGS, Mis= cRT_GetVariable__doc__}, {"GetNextVariableName", MiscRT_GetNextVariableName, METH_VARARGS, Mis= cRT_GetNextVariableName__doc__}, {"SetVariable", MiscRT_SetVariable, METH_VARARGS, Mis= cRT_SetVariable__doc__}, -- 2.44.0.windows.1 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#119049): https://edk2.groups.io/g/devel/message/119049 Mute This Topic: https://groups.io/mt/106149329/7686176 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-