From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by spool.mail.gandi.net (Postfix) with ESMTPS id 32D637803CD for ; Thu, 22 Feb 2024 02:03:57 +0000 (UTC) DKIM-Signature: a=rsa-sha256; bh=pBC/uLRBEdAR7kKrwtiAXwljw8ykVlaY9+vBemfu35M=; c=relaxed/simple; d=groups.io; h=Message-ID:Date:MIME-Version:Subject:To:Cc:References:From:In-Reply-To:Precedence:List-Subscribe:List-Help:Sender:List-Id:Mailing-List:Delivered-To:Reply-To:List-Unsubscribe-Post:List-Unsubscribe:Content-Language:Content-Type:Content-Transfer-Encoding; s=20140610; t=1708567435; v=1; b=eMRkBmsJF42pyLgeWudCS6FAv33q1QPGyYFbq7h1IfnfWsbj4iAlasxW5+vS4mdzFFhFET5n KUiK+jzLBlxCaYyjpDJiXSACGXffJ8jCEpycW224bXcRGiWnKW3kkI2uY1LA21h3KyNnHgVAjmx SbHelirmOOB5HF1FjGXMFRcA= X-Received: by 127.0.0.2 with SMTP id ZBFFYY7687511x3ywUMiS7ky; Wed, 21 Feb 2024 18:03:55 -0800 X-Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by mx.groups.io with SMTP id smtpd.web10.4075.1708567435148361358 for ; Wed, 21 Feb 2024 18:03:55 -0800 X-Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-554-FccAy_zUOMK9AQUWVjlLog-1; Wed, 21 Feb 2024 21:03:52 -0500 X-MC-Unique: FccAy_zUOMK9AQUWVjlLog-1 X-Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.rdu2.redhat.com [10.11.54.6]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 03360811E79; Thu, 22 Feb 2024 02:03:52 +0000 (UTC) X-Received: from [10.39.192.46] (unknown [10.39.192.46]) by smtp.corp.redhat.com (Postfix) with ESMTPS id D22D92166B32; Thu, 22 Feb 2024 02:03:50 +0000 (UTC) Message-ID: <6ebafaae-25c6-e5c1-1c40-779cff5bfc24@redhat.com> Date: Thu, 22 Feb 2024 03:03:49 +0100 MIME-Version: 1.0 Subject: Re: [edk2-devel] [PATCH v2 5/5] UefiCpuPkg/MpInitLib: Add support for multiple HOBs to SaveCpuMpData() To: devel@edk2.groups.io, kraxel@redhat.com Cc: Oliver Steffen , Rahul Kumar , Ray Ni References: <20240220174939.1288689-1-kraxel@redhat.com> <20240220174939.1288689-6-kraxel@redhat.com> From: "Laszlo Ersek" In-Reply-To: <20240220174939.1288689-6-kraxel@redhat.com> X-Scanned-By: MIMEDefang 3.4.1 on 10.11.54.6 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.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 Reply-To: devel@edk2.groups.io,lersek@redhat.com List-Unsubscribe-Post: List-Unsubscribe=One-Click List-Unsubscribe: X-Gm-Message-State: kx0uDUZxQJP7q33BHLvcnWBgx7686176AA= Content-Language: en-US Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable X-GND-Status: LEGIT Authentication-Results: spool.mail.gandi.net; dkim=pass header.d=groups.io header.s=20140610 header.b=eMRkBmsJ; dmarc=fail reason="SPF not aligned (relaxed), DKIM not aligned (relaxed)" header.from=redhat.com (policy=none); spf=pass (spool.mail.gandi.net: domain of bounce@groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce@groups.io On 2/20/24 18:49, Gerd Hoffmann wrote: > Add support for splitting Hand-Off data into multiple HOBs. This is > required for VMs with thousands of CPUs. The actual CPU count per HOB > is much smaller (128) for better test coverage. (1) The mention of the count 128 now seems stale for the code. >=20 > Signed-off-by: Gerd Hoffmann > --- > UefiCpuPkg/Library/MpInitLib/PeiMpLib.c | 44 +++++++++++++++---------- > 1 file changed, 27 insertions(+), 17 deletions(-) >=20 > diff --git a/UefiCpuPkg/Library/MpInitLib/PeiMpLib.c b/UefiCpuPkg/Library= /MpInitLib/PeiMpLib.c > index f80e00edcff3..8a916a218016 100644 > --- a/UefiCpuPkg/Library/MpInitLib/PeiMpLib.c > +++ b/UefiCpuPkg/Library/MpInitLib/PeiMpLib.c > @@ -126,35 +126,45 @@ SaveCpuMpData ( > IN CPU_MP_DATA *CpuMpData > ) > { > + UINT32 MaxCpusPerHob, CpusInHob; > UINT64 Data64; > - UINTN Index; > + UINT32 Index, HobBase; > CPU_INFO_IN_HOB *CpuInfoInHob; > MP_HAND_OFF *MpHandOff; > UINTN MpHandOffSize; > =20 > + MaxCpusPerHob =3D (MAX_UINT16 - sizeof (EFI_HOB_GUID_TYPE) - sizeof (M= P_HAND_OFF)) / sizeof (PROCESSOR_HAND_OFF); (2) MAX_UINT16 should be 0xFFF8 instead; see subthread. > + > // > // When APs are in a state that can be waken up by a store operation t= o a memory address, > // report the MP_HAND_OFF data for DXE to use. > // > - CpuInfoInHob =3D (CPU_INFO_IN_HOB *)(UINTN)CpuMpData->CpuInfoInHob; > - MpHandOffSize =3D sizeof (MP_HAND_OFF) + sizeof (PROCESSOR_HAND_OFF) *= CpuMpData->CpuCount; > - MpHandOff =3D (MP_HAND_OFF *)BuildGuidHob (&mMpHandOffGuid, MpHand= OffSize); > - ASSERT (MpHandOff !=3D NULL); > - ZeroMem (MpHandOff, MpHandOffSize); > - MpHandOff->ProcessorIndex =3D 0; > + CpuInfoInHob =3D (CPU_INFO_IN_HOB *)(UINTN)CpuMpData->CpuInfoInHob; > =20 > - MpHandOff->CpuCount =3D CpuMpData->CpuCount; > - if (CpuMpData->ApLoopMode !=3D ApInHltLoop) { > - MpHandOff->StartupSignalValue =3D MP_HAND_OFF_SIGNAL; > - MpHandOff->WaitLoopExecutionMode =3D sizeof (VOID *); > - } > + for (Index =3D 0; Index < CpuMpData->CpuCount; Index++) { > + if (Index % MaxCpusPerHob =3D=3D 0) { > + HobBase =3D Index; > + CpusInHob =3D MIN (CpuMpData->CpuCount - HobBase, MaxCpusPerHob); > =20 > - for (Index =3D 0; Index < MpHandOff->CpuCount; Index++) { > - MpHandOff->Info[Index].ApicId =3D CpuInfoInHob[Index].ApicId; > - MpHandOff->Info[Index].Health =3D CpuInfoInHob[Index].Health; > + MpHandOffSize =3D sizeof (MP_HAND_OFF) + sizeof (PROCESSOR_HAND_OF= F) * CpusInHob; > + MpHandOff =3D (MP_HAND_OFF *)BuildGuidHob (&mMpHandOffGuid, Mp= HandOffSize); > + ASSERT (MpHandOff !=3D NULL); > + ZeroMem (MpHandOff, MpHandOffSize); > + > + MpHandOff->ProcessorIndex =3D HobBase; > + MpHandOff->CpuCount =3D CpusInHob; > + > + if (CpuMpData->ApLoopMode !=3D ApInHltLoop) { > + MpHandOff->StartupSignalValue =3D MP_HAND_OFF_SIGNAL; > + MpHandOff->WaitLoopExecutionMode =3D sizeof (VOID *); > + } > + } > + > + MpHandOff->Info[Index-HobBase].ApicId =3D CpuInfoInHob[Index].ApicId= ; > + MpHandOff->Info[Index-HobBase].Health =3D CpuInfoInHob[Index].Health= ; > if (CpuMpData->ApLoopMode !=3D ApInHltLoop) { > - MpHandOff->Info[Index].StartupSignalAddress =3D (UINT64)(UINTN)= CpuMpData->CpuData[Index].StartupApSignal; > - MpHandOff->Info[Index].StartupProcedureAddress =3D (UINT64)(UINTN)= &CpuMpData->CpuData[Index].ApFunction; > + MpHandOff->Info[Index-HobBase].StartupSignalAddress =3D (UINT64= )(UINTN)CpuMpData->CpuData[Index].StartupApSignal; > + MpHandOff->Info[Index-HobBase].StartupProcedureAddress =3D (UINT64= )(UINTN)&CpuMpData->CpuData[Index].ApFunction; > } > } > =20 (3) The conversion looks good otherwise, but I dislike that StartupSignalValue and WaitLoopExecutionMode get uselessly replicated over all HOBs. Again, it *increases* technical debt. It's fine to ignore existent debt (if you can), but adding to it is not right. Can you file a new TianoCore BZ, for moving these fields to separate dynamic PCDs, or to a new singleton GUID HOB (containing both fields)? If you assign that BZ to yourself, and reference it in patches #4 and #5, I'll be happy to R-b version 3 of the series. (Which is something I'd like to do.) Version 3 may be mergeable regardless, of course, if Ray accepts it. Thanks, Laszlo -=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 (#115770): https://edk2.groups.io/g/devel/message/115770 Mute This Topic: https://groups.io/mt/104472313/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-