From nobody Mon Feb 9 19:08:13 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+56287+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+56287+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1585136338; cv=none; d=zohomail.com; s=zohoarc; b=W2OJ+G8N5GTpoi5eKJC2W1uczARytslipUU1xTTB0ovhmrdlZrJkDvLR3+qOBY0W182FdaIUTy9ibkfE0VkR9aZW4aGFk4WvDm0oQp1SPSAGBB1noyoCs6LvO2sce9mWcEWYHOWYmCTgv5Wvjo+JNeKoLC6oRfU9L4bdnB1FGrs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1585136338; h=Cc:Date:From:In-Reply-To:List-Id:List-Unsubscribe:Message-ID:Reply-To:References:Sender:Subject:To; bh=OEYIxbHeh5yiAdtf++jovPhTbxJTSOwTfAA0qIA/dJ8=; b=DiBQgl3UDjviNHdunJsgCiHVhmxvLTZjYh8vZEL20CvLtN86jW/HPqW5b4WpFH1HW0wasJeWFaZ8SZpdM1o6U/IQFpdm9bXL2ZhCkmAzqkaiLqzk594sg3it1YNPnmbYahhezt6g6QFvfICUzW/PZm6KdnNpni8WQFaICMIauG4= 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+56287+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 1585136338243743.0217579407632; Wed, 25 Mar 2020 04:38:58 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id x75MYY1788612xrdQXmwgCyz; Wed, 25 Mar 2020 04:38:57 -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.9276.1585136337261198615 for ; Wed, 25 Mar 2020 04:38:57 -0700 X-Received: by mail-wm1-f68.google.com with SMTP id c187so2096317wme.1 for ; Wed, 25 Mar 2020 04:38:57 -0700 (PDT) X-Gm-Message-State: q3fFC6sM2OsusPDZf7HCoLGox1787277AA= X-Google-Smtp-Source: ADFU+vtoaJDC1ymLD7SXUnjE+HJLjuHvWCZrkX7pudgeDQa9OI+0IruTSrVntAd/ppTuCbZ/a/yIEw== X-Received: by 2002:a1c:2e10:: with SMTP id u16mr2848648wmu.143.1585136335508; Wed, 25 Mar 2020 04:38:55 -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 v26sm33259682wra.7.2020.03.25.04.38.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 25 Mar 2020 04:38:54 -0700 (PDT) From: "Ard Biesheuvel" To: devel@edk2.groups.io Cc: Ard Biesheuvel , Laszlo Ersek , Leif Lindholm , Ashish Singhal Subject: [edk2-devel] [PATCH v2 1/2] ArmPkg/ArmMmuLib AARCH64: use helpers to determine table entry types Date: Wed, 25 Mar 2020 12:38:45 +0100 Message-Id: <20200325113846.21700-2-ard.biesheuvel@linaro.org> In-Reply-To: <20200325113846.21700-1-ard.biesheuvel@linaro.org> References: <20200325113846.21700-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=1585136337; bh=/9Y0cRYx1RZUtL9prHvuc+1+p1rj+lqaTfnVnFcZV0s=; h=Cc:Date:From:Reply-To:Subject:To; b=kAElnFqSK8h3L8B4msDQhwTXHzGt4plX4wLKSwk050++eDO2ohl5REZ/p9nJ/no/vw+ WaVHuUSW28jfou3Sxf1//Zn2HfK+8CVg5oZ3QN2nX0EAyGpnmUSkhwDcAkNftm/LLYDhy ND8N/+jb7585YDp8O4j96wpISkGPFCE/UBg= 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 --- 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 a43d468b73ca..6f6ef5b05fbc 100644 --- a/ArmPkg/Library/ArmMmuLib/AArch64/ArmMmuLibCore.c +++ b/ArmPkg/Library/ArmMmuLib/AArch64/ArmMmuLibCore.c @@ -156,6 +156,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 ( @@ -197,7 +227,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. @@ -215,7 +245,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. @@ -246,7 +276,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 @@ -259,10 +289,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 (#56287): https://edk2.groups.io/g/devel/message/56287 Mute This Topic: https://groups.io/mt/72538522/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-