* [PATCH 0/2] Quality improvement of MtrrLib
@ 2018-01-10 5:40 Ruiyu Ni
2018-01-10 5:40 ` [PATCH 1/2] UefiCpuPkg/MtrrLib: Fix a MTRR calculation bug Ruiyu Ni
` (2 more replies)
0 siblings, 3 replies; 4+ messages in thread
From: Ruiyu Ni @ 2018-01-10 5:40 UTC (permalink / raw)
To: edk2-devel
The patch set fixes two bugs in MtrrLib.
With the two fixes, randomly generated 10000000 memory settings
can be set correctly.
Ruiyu Ni (2):
UefiCpuPkg/MtrrLib: Fix a MTRR calculation bug
UefiCpuPkg/MtrrLib: Fix an assertion bug
UefiCpuPkg/Library/MtrrLib/MtrrLib.c | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
--
2.15.1.windows.2
^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH 1/2] UefiCpuPkg/MtrrLib: Fix a MTRR calculation bug
2018-01-10 5:40 [PATCH 0/2] Quality improvement of MtrrLib Ruiyu Ni
@ 2018-01-10 5:40 ` Ruiyu Ni
2018-01-10 5:40 ` [PATCH 2/2] UefiCpuPkg/MtrrLib: Fix an assertion bug Ruiyu Ni
2018-01-10 12:33 ` [PATCH 0/2] Quality improvement of MtrrLib Dong, Eric
2 siblings, 0 replies; 4+ messages in thread
From: Ruiyu Ni @ 2018-01-10 5:40 UTC (permalink / raw)
To: edk2-devel; +Cc: Star Zeng
80 A8 B0 B8 C0
+----------WB--------+-UC-+-WT-+-WB-+
For above memory settings, current code caused the final MTRR
settings miss [A8, B0, UC] when default memory type is UC.
The root cause is the code only checks the mandatory weight
between A8 to B0, but skips to check the optional weight.
The patch fixes this issue.
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Ruiyu Ni <ruiyu.ni@intel.com>
Cc: Star Zeng <star.zeng@intel.com>
---
UefiCpuPkg/Library/MtrrLib/MtrrLib.c | 9 +++++----
1 file changed, 5 insertions(+), 4 deletions(-)
diff --git a/UefiCpuPkg/Library/MtrrLib/MtrrLib.c b/UefiCpuPkg/Library/MtrrLib/MtrrLib.c
index fafa15fd63..768d4d5cff 100644
--- a/UefiCpuPkg/Library/MtrrLib/MtrrLib.c
+++ b/UefiCpuPkg/Library/MtrrLib/MtrrLib.c
@@ -47,7 +47,7 @@ typedef struct {
UINT64 Address;
UINT64 Alignment;
UINT64 Length;
- UINT8 Type : 7;
+ MTRR_MEMORY_CACHE_TYPE Type : 7;
//
// Temprary use for calculating the best MTRR settings.
@@ -1429,7 +1429,7 @@ MtrrLibCalculateSubtractivePath (
while (SubStart != SubStop) {
Status = MtrrLibAppendVariableMtrr (
Mtrrs, MtrrCapacity, MtrrCount,
- Vertices[SubStart].Address, Vertices[SubStart].Length, (MTRR_MEMORY_CACHE_TYPE) Vertices[SubStart].Type
+ Vertices[SubStart].Address, Vertices[SubStart].Length, Vertices[SubStart].Type
);
if (RETURN_ERROR (Status)) {
return Status;
@@ -1450,10 +1450,11 @@ MtrrLibCalculateSubtractivePath (
Pre = Vertices[Cur].Previous;
SubStop = Pre;
- if (Weight[M (Pre, Cur)] != 0) {
+ if (Weight[M (Pre, Cur)] + Weight[O (Pre, Cur)] != 0) {
Status = MtrrLibAppendVariableMtrr (
Mtrrs, MtrrCapacity, MtrrCount,
- Vertices[Pre].Address, Vertices[Cur].Address - Vertices[Pre].Address, LowestPrecedentType
+ Vertices[Pre].Address, Vertices[Cur].Address - Vertices[Pre].Address,
+ (Pre != Cur - 1) ? LowestPrecedentType : Vertices[Pre].Type
);
if (RETURN_ERROR (Status)) {
return Status;
--
2.15.1.windows.2
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH 2/2] UefiCpuPkg/MtrrLib: Fix an assertion bug
2018-01-10 5:40 [PATCH 0/2] Quality improvement of MtrrLib Ruiyu Ni
2018-01-10 5:40 ` [PATCH 1/2] UefiCpuPkg/MtrrLib: Fix a MTRR calculation bug Ruiyu Ni
@ 2018-01-10 5:40 ` Ruiyu Ni
2018-01-10 12:33 ` [PATCH 0/2] Quality improvement of MtrrLib Dong, Eric
2 siblings, 0 replies; 4+ messages in thread
From: Ruiyu Ni @ 2018-01-10 5:40 UTC (permalink / raw)
To: edk2-devel; +Cc: Star Zeng, Eric Dong
0 40 f0 100
+---WT--+--UC--+--WT--+-----WB----+----UC----+
When calculating the shortest path from 0 to 100, the
MtrrLibCalculateLeastMtrrs() is called to update the
Vertices.Previous.
When calculating the shortest path from 0 to 40,
MtrrLibCalculateLeastMtrrs() is called recursively to update the
Vertices.Previous.
The second call corrupt the Previous value that will be used
later.
The patch removes the code that corrupts Previous.
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Ruiyu Ni <ruiyu.ni@intel.com>
Cc: Star Zeng <star.zeng@intel.com>
Cc: Eric Dong <eric.dong@intel.com>
---
UefiCpuPkg/Library/MtrrLib/MtrrLib.c | 1 -
1 file changed, 1 deletion(-)
diff --git a/UefiCpuPkg/Library/MtrrLib/MtrrLib.c b/UefiCpuPkg/Library/MtrrLib/MtrrLib.c
index 768d4d5cff..30b0df030b 100644
--- a/UefiCpuPkg/Library/MtrrLib/MtrrLib.c
+++ b/UefiCpuPkg/Library/MtrrLib/MtrrLib.c
@@ -1171,7 +1171,6 @@ MtrrLibCalculateLeastMtrrs (
for (Index = Start; Index <= Stop; Index++) {
Vertices[Index].Visited = FALSE;
- Vertices[Index].Previous = VertexCount;
Mandatory = Weight[M(Start,Index)];
Vertices[Index].Weight = Mandatory;
if (Mandatory != MAX_WEIGHT) {
--
2.15.1.windows.2
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH 0/2] Quality improvement of MtrrLib
2018-01-10 5:40 [PATCH 0/2] Quality improvement of MtrrLib Ruiyu Ni
2018-01-10 5:40 ` [PATCH 1/2] UefiCpuPkg/MtrrLib: Fix a MTRR calculation bug Ruiyu Ni
2018-01-10 5:40 ` [PATCH 2/2] UefiCpuPkg/MtrrLib: Fix an assertion bug Ruiyu Ni
@ 2018-01-10 12:33 ` Dong, Eric
2 siblings, 0 replies; 4+ messages in thread
From: Dong, Eric @ 2018-01-10 12:33 UTC (permalink / raw)
To: Ni, Ruiyu, edk2-devel@lists.01.org
Reviewed-by: Eric Dong <eric.dong@intel.com>
-----Original Message-----
From: edk2-devel [mailto:edk2-devel-bounces@lists.01.org] On Behalf Of Ruiyu Ni
Sent: Wednesday, January 10, 2018 1:40 PM
To: edk2-devel@lists.01.org
Subject: [edk2] [PATCH 0/2] Quality improvement of MtrrLib
The patch set fixes two bugs in MtrrLib.
With the two fixes, randomly generated 10000000 memory settings can be set correctly.
Ruiyu Ni (2):
UefiCpuPkg/MtrrLib: Fix a MTRR calculation bug
UefiCpuPkg/MtrrLib: Fix an assertion bug
UefiCpuPkg/Library/MtrrLib/MtrrLib.c | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
--
2.15.1.windows.2
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2018-01-10 12:28 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-01-10 5:40 [PATCH 0/2] Quality improvement of MtrrLib Ruiyu Ni
2018-01-10 5:40 ` [PATCH 1/2] UefiCpuPkg/MtrrLib: Fix a MTRR calculation bug Ruiyu Ni
2018-01-10 5:40 ` [PATCH 2/2] UefiCpuPkg/MtrrLib: Fix an assertion bug Ruiyu Ni
2018-01-10 12:33 ` [PATCH 0/2] Quality improvement of MtrrLib Dong, Eric
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox