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 B1A22740049 for ; Mon, 26 Feb 2024 13:55:10 +0000 (UTC) DKIM-Signature: a=rsa-sha256; bh=vTyRnN3kK4GvHw2uH1xgj4KCSlxZdXLf2C3LbckFaCs=; 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=1708955709; v=1; b=vXGRNi0J45DMHYj70+swsEzb7ArESBF+QIZUQWfyLBvFKa860oHua2wNgXcgGyWeZJgRA25R sytTykVqKnrrPV1Ci8cBHd2EwSOiakiwPEI63T95sBNpUf6ol2lCsHvK/pgDj8OJ2VUkVKl26nv zq9fN9uWtXweKgOpSbg8jpE4= X-Received: by 127.0.0.2 with SMTP id gBueYY7687511x5f8Y3LMeP2; Mon, 26 Feb 2024 05:55:09 -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.web11.20509.1708955708711924777 for ; Mon, 26 Feb 2024 05:55:08 -0800 X-Received: from mimecast-mx02.redhat.com (mx-ext.redhat.com [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-332-SSLSoc5qNdqxHLe1_JZ9_Q-1; Mon, 26 Feb 2024 08:55:06 -0500 X-MC-Unique: SSLSoc5qNdqxHLe1_JZ9_Q-1 X-Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.rdu2.redhat.com [10.11.54.5]) (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 206CB3814E8C; Mon, 26 Feb 2024 13:55:06 +0000 (UTC) X-Received: from [10.39.194.99] (unknown [10.39.194.99]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 8ED728CEC; Mon, 26 Feb 2024 13:55:04 +0000 (UTC) Message-ID: Date: Mon, 26 Feb 2024 14:55:03 +0100 MIME-Version: 1.0 Subject: Re: [edk2-devel] [PATCH v3 5/6] UefiCpuPkg/MpInitLib: Add support for multiple HOBs to SaveCpuMpData() To: devel@edk2.groups.io, kraxel@redhat.com Cc: Ray Ni , Rahul Kumar , Oliver Steffen References: <20240222160106.686484-1-kraxel@redhat.com> <20240222160106.686484-6-kraxel@redhat.com> From: "Laszlo Ersek" In-Reply-To: <20240222160106.686484-6-kraxel@redhat.com> X-Scanned-By: MIMEDefang 3.4.1 on 10.11.54.5 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: q1f2MFlI2q462Ls6zNYps6WXx7686176AA= 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=vXGRNi0J; 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/22/24 17:01, Gerd Hoffmann wrote: > Add support for splitting Hand-Off data into multiple HOBs. > This is required for VMs with thousands of CPUs. >=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..00d48c2ab531 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 (0xFFF8 - sizeof (EFI_HOB_GUID_TYPE) - sizeof (MP_HA= ND_OFF)) / sizeof (PROCESSOR_HAND_OFF); > + > // > // 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 Reviewed-by: Laszlo Ersek -=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 (#115962): https://edk2.groups.io/g/devel/message/115962 Mute This Topic: https://groups.io/mt/104510911/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-