Skip to content

Commit

Permalink
Fix the TPL issue to not raise TPL to TPL_NOTIFY in disk cache module.
Browse files Browse the repository at this point in the history
git-svn-id: https://fat-driver2.tianocore.org/svn/fat-driver2/trunk@17 65ba2f78-6c18-0410-a7b4-885970cf29fa
  • Loading branch information
qhuang8 committed Mar 15, 2007
1 parent dff77de commit 0fe5831
Show file tree
Hide file tree
Showing 2 changed files with 58 additions and 40 deletions.
34 changes: 2 additions & 32 deletions EnhancedFat/Dxe/DiskCache.c
Expand Up @@ -65,17 +65,12 @@ Routine Description:
DISK_CACHE *DiskCache;
CACHE_TAG *CacheTag;
UINT8 *BaseAddress;
EFI_TPL EntryTpl;

DiskCache = &Volume->DiskCache[CACHE_DATA];
BaseAddress = DiskCache->CacheBase;
GroupMask = DiskCache->GroupMask;
PageAlignment = DiskCache->PageAlignment;
PageSize = 1 << PageAlignment;
//
// Make Cache Update a critical section
//
EntryTpl = gBS->RaiseTPL (EFI_TPL_NOTIFY);

for (PageNo = StartPageNo; PageNo < EndPageNo; PageNo++) {
GroupNo = PageNo & GroupMask;
Expand All @@ -102,10 +97,6 @@ Routine Description:
}
}
}
//
// Exit Cache Update critical section
//
gBS->RestoreTPL (EntryTpl);
}

STATIC
Expand Down Expand Up @@ -215,7 +206,6 @@ Routine Description:
{
EFI_STATUS Status;
UINTN OldPageNo;
EFI_TPL EntryTpl;

OldPageNo = CacheTag->PageNo;
if (CacheTag->RealSize > 0 && OldPageNo == PageNo) {
Expand All @@ -224,18 +214,14 @@ Routine Description:
//
return EFI_SUCCESS;
}
//
// Make Cache Update a critical section
//
EntryTpl = gBS->RaiseTPL (EFI_TPL_NOTIFY);

//
// Write dirty cache page back to disk
//
if (CacheTag->RealSize > 0 && CacheTag->Dirty) {
Status = FatExchangeCachePage (Volume, CacheDataType, WRITE_DISK, CacheTag);
if (EFI_ERROR (Status)) {
goto Done;
return Status;
}
}
//
Expand All @@ -244,11 +230,6 @@ Routine Description:
CacheTag->PageNo = PageNo;
Status = FatExchangeCachePage (Volume, CacheDataType, READ_DISK, CacheTag);

Done:
//
// Exit Cache Update critical section
//
gBS->RestoreTPL (EntryTpl);
return Status;
}

Expand Down Expand Up @@ -461,13 +442,8 @@ Routine Description:
UINTN GroupMask;
DISK_CACHE *DiskCache;
CACHE_TAG *CacheTag;
EFI_TPL EntryTpl;

Status = EFI_SUCCESS;
//
// Make Cache Update a critical section
//
EntryTpl = gBS->RaiseTPL (EFI_TPL_NOTIFY);

for (CacheDataType = 0; CacheDataType < CACHE_MAX_TYPE; CacheDataType++) {
DiskCache = &Volume->DiskCache[CacheDataType];
Expand All @@ -484,7 +460,7 @@ Routine Description:
//
Status = FatExchangeCachePage (Volume, CacheDataType, WRITE_DISK, CacheTag);
if (EFI_ERROR (Status)) {
goto Done;
return Status;
}
}
}
Expand All @@ -493,12 +469,6 @@ Routine Description:
}
}

Done:
//
// Exit Cache Update critical section
//
gBS->RestoreTPL (EntryTpl);

return Status;
}

Expand Down
64 changes: 56 additions & 8 deletions EnhancedFat/EnhancedFat.fpd
Expand Up @@ -120,7 +120,7 @@ met:
<TokenSpaceGuidCName>gEfiMdePkgTokenSpaceGuid</TokenSpaceGuidCName>
<DatumType>UINT8</DatumType>
<MaxDatumSize>1</MaxDatumSize>
<Value>0x0f</Value>
<Value>0x0</Value>
</PcdData>
<PcdData ItemType="FIXED_AT_BUILD">
<C_Name>PcdDebugClearMemoryValue</C_Name>
Expand Down Expand Up @@ -160,9 +160,21 @@ met:
<TokenSpaceGuidCName>gEfiMdePkgTokenSpaceGuid</TokenSpaceGuidCName>
<DatumType>UINT8</DatumType>
<MaxDatumSize>1</MaxDatumSize>
<Value>0x06</Value>
<Value>0x0</Value>
</PcdData>
<PcdData ItemType="FIXED_AT_BUILD">
<C_Name>PcdUefiLibMaxPrintBufferSize</C_Name>
<Token>0x101</Token>
<TokenSpaceGuidCName>gEfiMdePkgTokenSpaceGuid</TokenSpaceGuidCName>
<DatumType>UINT32</DatumType>
<MaxDatumSize>4</MaxDatumSize>
<Value>320</Value>
</PcdData>
</PcdBuildDefinition>
<ModuleSaBuildOptions>
<FvBinding>NULL</FvBinding>
<FfsFormatKey>BS_DRIVER</FfsFormatKey>
</ModuleSaBuildOptions>
</ModuleSA>
<!--Mod: Enhanced Fat Source Module Type: UEFI_DRIVER Path: EnhancedFat\Dxe\Fat.msa-->
<ModuleSA ModuleGuid="961578FE-B6B7-44c3-AF35-6BC705CD2B1F" ModuleVersion="1.0" PackageGuid="8EA68A2C-99CB-4332-85C6-DD5864EAA674" PackageVersion="1.0" SupArchList="X64">
Expand Down Expand Up @@ -245,7 +257,7 @@ met:
<TokenSpaceGuidCName>gEfiMdePkgTokenSpaceGuid</TokenSpaceGuidCName>
<DatumType>UINT8</DatumType>
<MaxDatumSize>1</MaxDatumSize>
<Value>0x0f</Value>
<Value>0x0</Value>
</PcdData>
<PcdData ItemType="FIXED_AT_BUILD">
<C_Name>PcdDebugClearMemoryValue</C_Name>
Expand All @@ -269,9 +281,21 @@ met:
<TokenSpaceGuidCName>gEfiMdePkgTokenSpaceGuid</TokenSpaceGuidCName>
<DatumType>UINT8</DatumType>
<MaxDatumSize>1</MaxDatumSize>
<Value>0x06</Value>
<Value>0x0</Value>
</PcdData>
<PcdData ItemType="FIXED_AT_BUILD">
<C_Name>PcdUefiLibMaxPrintBufferSize</C_Name>
<Token>0x101</Token>
<TokenSpaceGuidCName>gEfiMdePkgTokenSpaceGuid</TokenSpaceGuidCName>
<DatumType>UINT32</DatumType>
<MaxDatumSize>4</MaxDatumSize>
<Value>320</Value>
</PcdData>
</PcdBuildDefinition>
<ModuleSaBuildOptions>
<FvBinding>NULL</FvBinding>
<FfsFormatKey>BS_DRIVER</FfsFormatKey>
</ModuleSaBuildOptions>
</ModuleSA>
<!--Mod: Enhanced Fat Source Module Type: UEFI_DRIVER Path: EnhancedFat\Dxe\Fat.msa-->
<ModuleSA ModuleGuid="961578FE-B6B7-44c3-AF35-6BC705CD2B1F" ModuleVersion="1.0" PackageGuid="8EA68A2C-99CB-4332-85C6-DD5864EAA674" PackageVersion="1.0" SupArchList="IPF">
Expand Down Expand Up @@ -338,7 +362,7 @@ met:
<TokenSpaceGuidCName>gEfiMdePkgTokenSpaceGuid</TokenSpaceGuidCName>
<DatumType>UINT8</DatumType>
<MaxDatumSize>1</MaxDatumSize>
<Value>0x0f</Value>
<Value>0x0</Value>
</PcdData>
<PcdData ItemType="FIXED_AT_BUILD">
<C_Name>PcdDebugClearMemoryValue</C_Name>
Expand All @@ -362,7 +386,7 @@ met:
<TokenSpaceGuidCName>gEfiMdePkgTokenSpaceGuid</TokenSpaceGuidCName>
<DatumType>UINT8</DatumType>
<MaxDatumSize>1</MaxDatumSize>
<Value>0x06</Value>
<Value>0x0</Value>
</PcdData>
<PcdData ItemType="FEATURE_FLAG">
<C_Name>PcdComponentNameDisable</C_Name>
Expand All @@ -380,7 +404,19 @@ met:
<MaxDatumSize>1</MaxDatumSize>
<Value>FALSE</Value>
</PcdData>
<PcdData ItemType="FIXED_AT_BUILD">
<C_Name>PcdUefiLibMaxPrintBufferSize</C_Name>
<Token>0x101</Token>
<TokenSpaceGuidCName>gEfiMdePkgTokenSpaceGuid</TokenSpaceGuidCName>
<DatumType>UINT32</DatumType>
<MaxDatumSize>4</MaxDatumSize>
<Value>320</Value>
</PcdData>
</PcdBuildDefinition>
<ModuleSaBuildOptions>
<FvBinding>NULL</FvBinding>
<FfsFormatKey>BS_DRIVER</FfsFormatKey>
</ModuleSaBuildOptions>
</ModuleSA>
<!--Mod: Enhanced Fat Source Module Type: UEFI_DRIVER Path: EnhancedFat\Dxe\Fat.msa-->
<ModuleSA ModuleGuid="961578FE-B6B7-44c3-AF35-6BC705CD2B1F" ModuleVersion="1.0" PackageGuid="8EA68A2C-99CB-4332-85C6-DD5864EAA674" PackageVersion="1.0" SupArchList="EBC">
Expand Down Expand Up @@ -431,7 +467,7 @@ met:
<TokenSpaceGuidCName>gEfiMdePkgTokenSpaceGuid</TokenSpaceGuidCName>
<DatumType>UINT8</DatumType>
<MaxDatumSize>1</MaxDatumSize>
<Value>0x0f</Value>
<Value>0x0</Value>
</PcdData>
<PcdData ItemType="FIXED_AT_BUILD">
<C_Name>PcdDebugClearMemoryValue</C_Name>
Expand Down Expand Up @@ -487,9 +523,21 @@ met:
<TokenSpaceGuidCName>gEfiMdePkgTokenSpaceGuid</TokenSpaceGuidCName>
<DatumType>UINT8</DatumType>
<MaxDatumSize>1</MaxDatumSize>
<Value>0x06</Value>
<Value>0x0</Value>
</PcdData>
<PcdData ItemType="FIXED_AT_BUILD">
<C_Name>PcdUefiLibMaxPrintBufferSize</C_Name>
<Token>0x101</Token>
<TokenSpaceGuidCName>gEfiMdePkgTokenSpaceGuid</TokenSpaceGuidCName>
<DatumType>UINT32</DatumType>
<MaxDatumSize>4</MaxDatumSize>
<Value>320</Value>
</PcdData>
</PcdBuildDefinition>
<ModuleSaBuildOptions>
<FvBinding>NULL</FvBinding>
<FfsFormatKey>BS_DRIVER</FfsFormatKey>
</ModuleSaBuildOptions>
</ModuleSA>
</FrameworkModules>
<BuildOptions>
Expand Down

0 comments on commit 0fe5831

Please sign in to comment.