Reviewed-by : Jayaprakash N

-----Original Message-----
From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of Jayaprakash, N
Sent: Thursday, April 4, 2024 3:14 PM
To: devel@edk2.groups.io
Cc: Jayaprakash, N <n.jayaprak...@intel.com>; Rebecca Cran <rebe...@bsdio.com>; 
Kinney, Michael D <michael.d.kin...@intel.com>
Subject: [edk2-devel] [edk2-libc Patch 1/1] edk2-libc: wrmsr function available 
in edk2module is not working as expected

REF: https://bugzilla.tianocore.org/show_bug.cgi?id=4745

This commit fixes the issue reported in the BZ4745.
The wrmsr function was always writing 0 to the higher 32 bits of the msr 
register. This was due to a logical flaw in the code, where the input variable 
of type unsigned int was left shitted by 32 bits without explicitly converting 
to a 64 bit value.

Problematic statement in the function edk2_wrmsr code:
data = vedx << 32 | veax;
Where the vedx an unsigned int, after left shifting by 32 bits its value will 
be set to 0. Because of this the higher 32 bits of the MSR are always set to 0. 
This statement has been modified as below:
  data = (((UINT64)vedx) << 32) | veax;
Verified the function by making this change and could see that the wrmsr is 
working as expected.

Cc: Rebecca Cran <rebe...@bsdio.com>
Cc: Michael D Kinney <michael.d.kin...@intel.com>
Cc: Jayaprakash N <n.jayaprak...@intel.com>
Signed-off-by: Jayaprakash N <n.jayaprak...@intel.com>
---
 .../Python/Python-3.6.8/PyMod-3.6.8/Modules/edk2module.c        | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git 
a/AppPkg/Applications/Python/Python-3.6.8/PyMod-3.6.8/Modules/edk2module.c 
b/AppPkg/Applications/Python/Python-3.6.8/PyMod-3.6.8/Modules/edk2module.c
index d6af8da..cec4332 100644
--- a/AppPkg/Applications/Python/Python-3.6.8/PyMod-3.6.8/Modules/edk2module.c
+++ b/AppPkg/Applications/Python/Python-3.6.8/PyMod-3.6.8/Modules/edk2mo
+++ dule.c
@@ -3886,7 +3886,7 @@ edk2_wrmsr(PyObject *self, PyObject *args)
   UINT64       data = 0;
   if (!PyArg_ParseTuple(args, "III", &vecx, &veax, &vedx))
     return NULL;
-  data = vedx << 32 | veax;
+  data = (((UINT64)vedx) << 32) | veax;
   Py_BEGIN_ALLOW_THREADS
   AsmWriteMsr64(vecx, data);
   Py_END_ALLOW_THREADS
--
2.40.0.windows.1








-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#117568): https://edk2.groups.io/g/devel/message/117568
Mute This Topic: https://groups.io/mt/105437258/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-


Reply via email to