From nobody Mon Feb 9 19:30:03 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of groups.io designates 66.175.222.12 as permitted sender) client-ip=66.175.222.12; envelope-from=bounce+27952+56303+1787277+3901457@groups.io; helo=web01.groups.io; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+56303+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1585150192; cv=none; d=zohomail.com; s=zohoarc; b=a9Tqb0IK7hSerH8Nbam/ypatgXPj/1JTDV36TKek/+vaiUYKvDC0xVlnEbJhf+ZgoAJJkt2YBvRa4dPrNhakgT7DOgU8lBHu4awyrwZCo8BM0b67Jc7YzJws6afG0iSzUCDrIn9X2emUEwr07PpyH2VltL67ydoFd9vy7m5U+64= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1585150192; h=Cc:Date:From:In-Reply-To:List-Id:List-Unsubscribe:Message-ID:Reply-To:References:Sender:Subject:To; bh=QoisvECc34LXBH2AcpDVemPxSvPjZz6aOjyFKxKKMpQ=; b=BkRfWHbqKnVVYLU1RKz6yUxIPzp6VDd30g82fF9vZixRfuakqov9DF9X2pKKj1Z9yW/Or7gKgh2RkjaqHZZ0IV4Nr8z5/0vJuAX2pedO1lruLcplCblIeamiRiFlE0lYrzarYFnGtNqUO7in6X7pPXTIvpAndlzqUDziOV/tYX4= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+56303+1787277+3901457@groups.io; dmarc=fail header.from= (p=none dis=none) header.from= Received: from web01.groups.io (web01.groups.io [66.175.222.12]) by mx.zohomail.com with SMTPS id 1585150192874689.8146818280227; Wed, 25 Mar 2020 08:29:52 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id 8FVZYY1788612xooT8yGtIZX; Wed, 25 Mar 2020 08:29:52 -0700 X-Received: from mail-wm1-f68.google.com (mail-wm1-f68.google.com [209.85.128.68]) by mx.groups.io with SMTP id smtpd.web11.14236.1585150191733096102 for ; Wed, 25 Mar 2020 08:29:52 -0700 X-Received: by mail-wm1-f68.google.com with SMTP id a9so3175213wmj.4 for ; Wed, 25 Mar 2020 08:29:51 -0700 (PDT) X-Gm-Message-State: H2CEsN9186f4XJVXBvRFnqrex1787277AA= X-Google-Smtp-Source: ADFU+vsjjOQO+aV0f1VwBT1KjAKsLN6KIjBWs4r2xR/7QBxNdZl4IeRGP0Av1DlcO5boU8eJ0Qx7ww== X-Received: by 2002:a1c:2d8a:: with SMTP id t132mr4204301wmt.83.1585150187902; Wed, 25 Mar 2020 08:29:47 -0700 (PDT) X-Received: from e123331-lin.home (amontpellier-657-1-18-247.w109-210.abo.wanadoo.fr. [109.210.65.247]) by smtp.gmail.com with ESMTPSA id r15sm29249296wra.19.2020.03.25.08.29.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 25 Mar 2020 08:29:47 -0700 (PDT) From: "Ard Biesheuvel" To: devel@edk2.groups.io Cc: Ard Biesheuvel , Laszlo Ersek , Leif Lindholm , Ashish Singhal Subject: [edk2-devel] [PATCH v3 2/3] ArmPkg/ArmMmuLib AARCH64: use helpers to determine table entry types Date: Wed, 25 Mar 2020 16:29:39 +0100 Message-Id: <20200325152940.1492-3-ard.biesheuvel@linaro.org> In-Reply-To: <20200325152940.1492-1-ard.biesheuvel@linaro.org> References: <20200325152940.1492-1-ard.biesheuvel@linaro.org> Precedence: Bulk List-Unsubscribe: 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,ard.biesheuvel@linaro.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1585150192; bh=tcpMh5cGYGZjLN368Hs89kOM5miMBUVdoM37pFDvaZQ=; h=Cc:Date:From:Reply-To:Subject:To; b=FtbanJ0Dh4DsOXhhrgNXsZoUIFC7+sSn3r0kF1pwbNwPhq3+tm1IEVddYIdDPBYrQAL ixqeUrEbiaaUqGXb8EZbNX9Vn8E+KGoa8uL/spNbhqTXkT3pEgsXyu/CLP+NHDLh8WsYM labzWzMjGMhDXBcnEse2GkbajftYqeI1OnM= X-ZohoMail-DKIM: pass (identity @groups.io) Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Given how the meaning of the attribute bits for page table entry types is slightly awkward, and changes between levels, add some helpers to abstract from this. Signed-off-by: Ard Biesheuvel Reviewed-by: Leif Lindholm Reviewed-by: Ashish Singhal Tested-by: Ashish Singhal --- ArmPkg/Library/ArmMmuLib/AArch64/ArmMmuLibCore.c | 40 +++++++++++++++++--- 1 file changed, 35 insertions(+), 5 deletions(-) diff --git a/ArmPkg/Library/ArmMmuLib/AArch64/ArmMmuLibCore.c b/ArmPkg/Libr= ary/ArmMmuLib/AArch64/ArmMmuLibCore.c index d78918cf7ba8..0680ba36d907 100644 --- a/ArmPkg/Library/ArmMmuLib/AArch64/ArmMmuLibCore.c +++ b/ArmPkg/Library/ArmMmuLib/AArch64/ArmMmuLibCore.c @@ -162,6 +162,36 @@ FreePageTablesRecursive ( FreePages (TranslationTable, 1); } =20 +STATIC +BOOLEAN +IsBlockEntry ( + IN UINT64 Entry, + IN UINTN Level + ) +{ + if (Level =3D=3D 3) { + return (Entry & TT_TYPE_MASK) =3D=3D TT_TYPE_BLOCK_ENTRY_LEVEL3; + } + return (Entry & TT_TYPE_MASK) =3D=3D TT_TYPE_BLOCK_ENTRY; +} + +STATIC +BOOLEAN +IsTableEntry ( + IN UINT64 Entry, + IN UINTN Level + ) +{ + if (Level =3D=3D 3) { + // + // TT_TYPE_TABLE_ENTRY aliases TT_TYPE_BLOCK_ENTRY_LEVEL3 + // so we need to take the level into account as well. + // + return FALSE; + } + return (Entry & TT_TYPE_MASK) =3D=3D TT_TYPE_TABLE_ENTRY; +} + STATIC EFI_STATUS UpdateRegionMappingRecursive ( @@ -203,7 +233,7 @@ UpdateRegionMappingRecursive ( if (Level =3D=3D 0 || ((RegionStart | BlockEnd) & BlockMask) !=3D 0) { ASSERT (Level < 3); =20 - if ((*Entry & TT_TYPE_MASK) !=3D TT_TYPE_TABLE_ENTRY) { + if (!IsTableEntry (*Entry, Level)) { // // No table entry exists yet, so we need to allocate a page table // for the next level. @@ -221,7 +251,7 @@ UpdateRegionMappingRecursive ( InvalidateDataCacheRange (TranslationTable, EFI_PAGE_SIZE); } =20 - if ((*Entry & TT_TYPE_MASK) =3D=3D TT_TYPE_BLOCK_ENTRY) { + if (IsBlockEntry (*Entry, Level)) { // // We are splitting an existing block entry, so we have to popul= ate // the new table with the attributes of the block entry it repla= ces. @@ -252,7 +282,7 @@ UpdateRegionMappingRecursive ( AttributeSetMask, AttributeClearMask, TranslationTable, Level + 1); if (EFI_ERROR (Status)) { - if ((*Entry & TT_TYPE_MASK) !=3D TT_TYPE_TABLE_ENTRY) { + if (!IsTableEntry (*Entry, Level)) { // // We are creating a new table entry, so on failure, we can free= all // allocations we made recursively, given that the whole subhier= archy @@ -265,10 +295,10 @@ UpdateRegionMappingRecursive ( return Status; } =20 - if ((*Entry & TT_TYPE_MASK) !=3D TT_TYPE_TABLE_ENTRY) { + if (!IsTableEntry (*Entry, Level)) { EntryValue =3D (UINTN)TranslationTable | TT_TYPE_TABLE_ENTRY; ReplaceTableEntry (Entry, EntryValue, RegionStart, - (*Entry & TT_TYPE_MASK) =3D=3D TT_TYPE_BLOCK_EN= TRY); + IsBlockEntry (*Entry, Level)); } } else { EntryValue =3D (*Entry & AttributeClearMask) | AttributeSetMask; --=20 2.17.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 (#56303): https://edk2.groups.io/g/devel/message/56303 Mute This Topic: https://groups.io/mt/72543077/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-