From nobody Mon Dec 23 19:04:04 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; spf=none (zoho.com: 198.145.21.10 is neither permitted nor denied by domain of lists.01.org) smtp.mailfrom=edk2-devel-bounces@lists.01.org Return-Path: Received: from ml01.01.org (ml01.01.org [198.145.21.10]) by mx.zohomail.com with SMTPS id 1515036748019705.841880260483; Wed, 3 Jan 2018 19:32:28 -0800 (PST) Received: from [127.0.0.1] (localhost [IPv6:::1]) by ml01.01.org (Postfix) with ESMTP id 969C5222D153C; Wed, 3 Jan 2018 19:27:22 -0800 (PST) Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 389D7222A54FF for ; Wed, 3 Jan 2018 19:27:21 -0800 (PST) Received: from fmsmga004.fm.intel.com ([10.253.24.48]) by orsmga101.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 03 Jan 2018 19:32:22 -0800 Received: from shwdeopenpsi068.ccr.corp.intel.com ([10.239.158.46]) by fmsmga004.fm.intel.com with ESMTP; 03 Jan 2018 19:32:21 -0800 X-Original-To: edk2-devel@lists.01.org Received-SPF: none (zoho.com: 198.145.21.10 is neither permitted nor denied by domain of lists.01.org) client-ip=198.145.21.10; envelope-from=edk2-devel-bounces@lists.01.org; helo=ml01.01.org; Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=134.134.136.20; helo=mga02.intel.com; envelope-from=star.zeng@intel.com; receiver=edk2-devel@lists.01.org X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.45,505,1508828400"; d="scan'208";a="18011952" From: Star Zeng To: edk2-devel@lists.01.org Date: Thu, 4 Jan 2018 11:32:20 +0800 Message-Id: <1515036740-16812-1-git-send-email-star.zeng@intel.com> X-Mailer: git-send-email 2.7.0.windows.1 Subject: [edk2] [PATCH] IntelSiliconPkg IntelVTdDxe: Use TPL to protect list/engine operation X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jiewen Yao , Star Zeng MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Errors-To: edk2-devel-bounces@lists.01.org Sender: "edk2-devel" X-ZohoMail: RSF_4 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Cc: Jiewen Yao Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Star Zeng --- IntelSiliconPkg/Feature/VTd/IntelVTdDxe/BmDma.c | 19 ++++++------- .../Feature/VTd/IntelVTdDxe/DmaProtection.c | 8 +++--- .../Feature/VTd/IntelVTdDxe/DmaProtection.h | 2 ++ .../Feature/VTd/IntelVTdDxe/IntelVTdDxe.c | 32 +++++++++---------= ---- 4 files changed, 28 insertions(+), 33 deletions(-) diff --git a/IntelSiliconPkg/Feature/VTd/IntelVTdDxe/BmDma.c b/IntelSilicon= Pkg/Feature/VTd/IntelVTdDxe/BmDma.c index e8685666e79a..57e086a64dbc 100644 --- a/IntelSiliconPkg/Feature/VTd/IntelVTdDxe/BmDma.c +++ b/IntelSiliconPkg/Feature/VTd/IntelVTdDxe/BmDma.c @@ -1,7 +1,7 @@ /** @file BmDma related function =20 - Copyright (c) 2017, Intel Corporation. All rights reserved.
+ Copyright (c) 2017 - 2018, Intel Corporation. All rights reserved.
This program and the accompanying materials are licensed and made available under the terms and conditions of the BS= D License which accompanies this distribution. The full text of the license may b= e found at @@ -12,15 +12,7 @@ =20 **/ =20 -#include - -#include - -#include -#include -#include -#include -#include +#include "DmaProtection.h" =20 // TBD: May make it a policy #define DMA_MEMORY_TOP MAX_UINTN @@ -76,6 +68,7 @@ IoMmuMap ( MAP_INFO *MapInfo; EFI_PHYSICAL_ADDRESS DmaMemoryTop; BOOLEAN NeedRemap; + EFI_TPL OriginalTpl; =20 if (NumberOfBytes =3D=3D NULL || DeviceAddress =3D=3D NULL || Mapping =3D=3D NULL) { @@ -198,7 +191,9 @@ IoMmuMap ( MapInfo->DeviceAddress =3D MapInfo->HostAddress; } =20 + OriginalTpl =3D gBS->RaiseTPL (VTD_TPL_LEVEL); InsertTailList (&gMaps, &MapInfo->Link); + gBS->RestoreTPL (OriginalTpl); =20 // // The DeviceAddress is the address of the maped buffer below 4GB @@ -233,6 +228,7 @@ IoMmuUnmap ( { MAP_INFO *MapInfo; LIST_ENTRY *Link; + EFI_TPL OriginalTpl; =20 DEBUG ((DEBUG_VERBOSE, "IoMmuUnmap: 0x%08x\n", Mapping)); =20 @@ -241,6 +237,7 @@ IoMmuUnmap ( return EFI_INVALID_PARAMETER; } =20 + OriginalTpl =3D gBS->RaiseTPL (VTD_TPL_LEVEL); MapInfo =3D NULL; for (Link =3D GetFirstNode (&gMaps) ; !IsNull (&gMaps, Link) @@ -255,10 +252,12 @@ IoMmuUnmap ( // Mapping is not a valid value returned by Map() // if (MapInfo !=3D Mapping) { + gBS->RestoreTPL (OriginalTpl); DEBUG ((DEBUG_ERROR, "IoMmuUnmap: %r\n", EFI_INVALID_PARAMETER)); return EFI_INVALID_PARAMETER; } RemoveEntryList (&MapInfo->Link); + gBS->RestoreTPL (OriginalTpl); =20 if (MapInfo->DeviceAddress !=3D MapInfo->HostAddress) { // diff --git a/IntelSiliconPkg/Feature/VTd/IntelVTdDxe/DmaProtection.c b/Inte= lSiliconPkg/Feature/VTd/IntelVTdDxe/DmaProtection.c index 648f64c20b77..013823cc161f 100644 --- a/IntelSiliconPkg/Feature/VTd/IntelVTdDxe/DmaProtection.c +++ b/IntelSiliconPkg/Feature/VTd/IntelVTdDxe/DmaProtection.c @@ -478,7 +478,7 @@ InitializeDmaProtection ( =20 Status =3D gBS->CreateEventEx ( EVT_NOTIFY_SIGNAL, - TPL_CALLBACK, + VTD_TPL_LEVEL, AcpiNotificationFunc, NULL, &gEfiAcpi10TableGuid, @@ -488,7 +488,7 @@ InitializeDmaProtection ( =20 Status =3D gBS->CreateEventEx ( EVT_NOTIFY_SIGNAL, - TPL_CALLBACK, + VTD_TPL_LEVEL, AcpiNotificationFunc, NULL, &gEfiAcpi20TableGuid, @@ -505,7 +505,7 @@ InitializeDmaProtection ( =20 Status =3D gBS->CreateEventEx ( EVT_NOTIFY_SIGNAL, - TPL_CALLBACK, + VTD_TPL_LEVEL, OnExitBootServices, NULL, &gEfiEventExitBootServicesGuid, @@ -514,7 +514,7 @@ InitializeDmaProtection ( ASSERT_EFI_ERROR (Status); =20 Status =3D EfiCreateEventLegacyBootEx ( - TPL_CALLBACK, + VTD_TPL_LEVEL, OnLegacyBoot, NULL, &LegacyBootEvent diff --git a/IntelSiliconPkg/Feature/VTd/IntelVTdDxe/DmaProtection.h b/Inte= lSiliconPkg/Feature/VTd/IntelVTdDxe/DmaProtection.h index 519a5ab00450..bc14ff9a6631 100644 --- a/IntelSiliconPkg/Feature/VTd/IntelVTdDxe/DmaProtection.h +++ b/IntelSiliconPkg/Feature/VTd/IntelVTdDxe/DmaProtection.h @@ -48,6 +48,8 @@ #define ALIGN_VALUE_UP(Value, Alignment) (((Value) + (Alignment) - 1) & (= ~((Alignment) - 1))) #define ALIGN_VALUE_LOW(Value, Alignment) ((Value) & (~((Alignment) - 1))) =20 +#define VTD_TPL_LEVEL TPL_NOTIFY + // // This is the initial max PCI DATA number. // The number may be enlarged later. diff --git a/IntelSiliconPkg/Feature/VTd/IntelVTdDxe/IntelVTdDxe.c b/IntelS= iliconPkg/Feature/VTd/IntelVTdDxe/IntelVTdDxe.c index 89d9bea3fc0f..570b47cf7364 100644 --- a/IntelSiliconPkg/Feature/VTd/IntelVTdDxe/IntelVTdDxe.c +++ b/IntelSiliconPkg/Feature/VTd/IntelVTdDxe/IntelVTdDxe.c @@ -12,16 +12,6 @@ =20 **/ =20 -#include - -#include -#include - -#include -#include -#include -#include - #include "DmaProtection.h" =20 /** @@ -306,18 +296,22 @@ IoMmuSetAttribute ( EFI_STATUS Status; EFI_PHYSICAL_ADDRESS DeviceAddress; UINTN NumberOfPages; + EFI_TPL OriginalTpl; + + OriginalTpl =3D gBS->RaiseTPL (VTD_TPL_LEVEL); =20 Status =3D GetDeviceInfoFromMapping (Mapping, &DeviceAddress, &NumberOfP= ages); - if (EFI_ERROR(Status)) { - return Status; + if (!EFI_ERROR(Status)) { + Status =3D VTdSetAttribute ( + This, + DeviceHandle, + DeviceAddress, + EFI_PAGES_TO_SIZE(NumberOfPages), + IoMmuAccess + ); } - Status =3D VTdSetAttribute ( - This, - DeviceHandle, - DeviceAddress, - EFI_PAGES_TO_SIZE(NumberOfPages), - IoMmuAccess - ); + + gBS->RestoreTPL (OriginalTpl); =20 return Status; } --=20 2.7.0.windows.1 _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel