public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: "Dong, Eric" <eric.dong@intel.com>
To: Laszlo Ersek <lersek@redhat.com>,
	"edk2-devel@lists.01.org" <edk2-devel@lists.01.org>
Cc: "Kinney, Michael D" <michael.d.kinney@intel.com>,
	"Ni, Ruiyu" <ruiyu.ni@intel.com>
Subject: Re: [Patch 00/14] Update MSR definitions.
Date: Fri, 21 Sep 2018 07:40:36 +0000	[thread overview]
Message-ID: <ED077930C258884BBCB450DB737E66224ACB7E79@SHSMSX101.ccr.corp.intel.com> (raw)
In-Reply-To: <2a7532fe-4fcf-ddb7-95d0-acfd9b4657cf@redhat.com>

Hi Laszlo,

> -----Original Message-----
> From: edk2-devel [mailto:edk2-devel-bounces@lists.01.org] On Behalf Of
> Laszlo Ersek
> Sent: Tuesday, September 18, 2018 5:02 PM
> To: Dong, Eric <eric.dong@intel.com>; edk2-devel@lists.01.org
> Cc: Kinney, Michael D <michael.d.kinney@intel.com>; Ni, Ruiyu
> <ruiyu.ni@intel.com>
> Subject: Re: [edk2] [Patch 00/14] Update MSR definitions.
> 
> On 09/18/18 03:43, Eric Dong wrote:
> > Current MSR definition are follow the SDM 2016-09 version. The latest
> > SDM is 2018-05. This patch serial update the MSR related definition to
> > follow the latest SDM 2018-05 version. MSR related defintion are saved
> > at UefiCpuPkg\Include\Register\.
> >
> > The changes for this serial includes:
> > 1. Add new MSR definition and file.
> > 2. Remove old MSR definition which not defined in new SDM.
> > 3. Change MSR name to follow new SDM, keep old one for compatibility.
> > 4. Change MSR data structure definition to follow new SDM.
> > 5. Update comments to follow the new SDM, mainly related to chapter
> > info.
> >
> > Below changes are incompatible changes:
> > 2. Remove old MSR definition which not defined in new SDM.
> > For this one, i search edk2 codebase, not found any code uses it. so
> > no impact for edk2 codebase. Detail changes see patch 9 ~ 11.
> 
> This sounds good. Macros and structure names are easy to grep.
> 
> > 4. Change MSR data structure definition to follow new SDM.
> > For this one, new data structure just change the original reserved
> > bits to valid bits, should have no impact for the current code. Detail
> > see patch 8 and patch 14
> 
> This looks more risky to me. Consider the MSR_IA32_RTIT_CTL_REGISTER
> type in "UefiCpuPkg/Include/Register/ArchitecturalMsr.h" (modified by
> patch 8). The patch removes (for example) the original Reserved1 field, but
> then reintroduces the field in place of the Reserved3 field.
> 
> IMO, this is risky: if code exists (possibly out-of-tree) that used to refer to
> the Reserved1 field (because it actually wanted to access PwrEvtEn and
> FUPonPTW, but the headers weren't up-to-date enough, so the code got
> written against the Reserved1 field), then after this change, the code will
> likely still *compile*, but it will not work.
> 
> Similarly for patch 14: the Reserved3 and Reserved4 fields are redefined with
> different sizes and locations. Risky move. The old field names should be
> retired, and entirely new field names (with larger counter values than ever
> before) should be introduced.
> 

Thanks for your suggestion. I think it's a good idea to use totally new ReservedX if the data structure is changed.  I will follow this rule to update the patches.

Thanks,
Eric

> IMO we should consider ReservedX field names similar to PPI and protocol
> GUIDs. If the change is not compatible, then the name ("GUID") must not
> stay the same.
> 
> Here are some examples where edk2 code assigns (potentially) nonzero
> values to Reserved fields, or it branches to different logic dependent on
> reserved fields being zero vs. nonzero:
> 
> - CbParseFbInfo()
> [CorebootModulePkg/Library/CbParseLib/CbParseLib.c]
> - FbGopCheckForVbe()          [CorebootPayloadPkg/FbGop/FbGop.c]
> - BiosVideoCheckForVbe()      [DuetPkg/BiosVideoThunkDxe/BiosVideo.c]
> - BiosVideoCheckForVbe()
> [IntelFrameworkModulePkg/Csm/BiosThunk/VideoDxe/BiosVideo.c]
> - LegacyBiosInt86()
> [IntelFrameworkModulePkg/Csm/LegacyBiosDxe/Thunk.c]
> - LegacyBiosFarCall86()
> [IntelFrameworkModulePkg/Csm/LegacyBiosDxe/Thunk.c]
> - DhcpSendMessage()
> [MdeModulePkg/Universal/Network/Dhcp4Dxe/Dhcp4Io.c]
> - PxeBcDiscvBootService()
> [MdeModulePkg/Universal/Network/UefiPxeBcDxe/PxeBcDhcp.c]
> - DevPathFromTextSAS()
> [MdePkg/Library/UefiDevicePathLib/DevicePathFromText.c]
> - GetDns4ServerFromDhcp4()    [NetworkPkg/DnsDxe/DnsDhcp.c]
> - Ip6ProcessRouterAdvertise() [NetworkPkg/Ip6Dxe/Ip6Nd.c]
> - PxeBcDhcp4Discover()        [NetworkPkg/UefiPxeBcDxe/PxeBcDhcp4.c]
> - OhciSetTDField()
> [QuarkSocPkg/QuarkSouthCluster/Usb/Ohci/Dxe/OhciUrb.c]
> - OhciSetTDField()
> [QuarkSocPkg/QuarkSouthCluster/Usb/Ohci/Pei/OhciUrb.c]
> - "MiscBiosVendor"
> [Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscBiosVendorData.c]
> 
> It's obvious that C code frequently takes advantage of new spec releases /
> bit definitions *before* the corresponding Reserved fields are updated in
> the header files. That's an extremely bad practice, but it is still fact. If we
> keep those field names, but change the fields' meanings, code will silently
> break. We should make the breakage explicit, by *not* recycling names. Just
> delete the old names, and introduce brand new ones.
> 
> To be clear, this refers to patches #8 and #14; I'm ready to ack the rest of the
> patches.
> 
> Thanks
> Laszlo
> 
> >
> > Cc: Michael D Kinney <michael.d.kinney@intel.com>
> > Cc: Ruiyu Ni <ruiyu.ni@intel.com>
> > Cc: Laszlo Ersek <lersek@redhat.com>
> > Contributed-under: TianoCore Contribution Agreement 1.1
> > Signed-off-by: Eric Dong <eric.dong@intel.com>
> >
> >
> > Eric Dong (14):
> >   UefiCpuPkg/Include/Register/Msr: Update reference spec info.
> >   UefiCpuPkg/Include/Register/Msr/GoldmontPlusMsr.h: Add new MSR file
> >     for goldmont plus microarchitecture.
> >   UefiCpuPkg/Include/Register/Msr/SilvermontMsr.h: Add new MSR.
> >   UefiCpuPkg/Include/Register/Msr/*.h: Add new MSR.
> >   UefiCpuPkg/Include/Register/Msr/XeonPhiMsr.h: Add new MSR.
> >   UefiCpuPkg/Include/Register/Msr/SkylakeMsr.h: Add new MSRs.
> >   UefiCpuPkg/Include/Register/ArchitecturalMsr.h: Add new MSR.
> >   UefiCpuPkg/Include/Register/ArchitecturalMsr.h: Change structure
> >     definition.
> >   UefiCpuPkg/Include/Register/Msr/Core2Msr.h: Remove old MSR.
> >   UefiCpuPkg/Include/Register/Msr/P6Msr.h: Remove old MSR.
> >   UefiCpuPkg/Include/Register/Msr/CoreMsr.h: Remove old MSR.
> >   UefiCpuPkg/Include/Register/Msr/SkylakeMsr.h: Add new MSR name
> and
> >     keep old one.
> >   UefiCpuPkg/Include/Register/Msr/GoldmontMsr.h: Add new MSR name
> and
> >     keep old one.
> >   UefiCpuPkg/Include/Register/Msr/XeonPhiMsr.h: Change structure
> >     definition.
> >
> >  UefiCpuPkg/Include/Register/ArchitecturalMsr.h    |  130 +-
> >  UefiCpuPkg/Include/Register/Msr.h                 |    7 +-
> >  UefiCpuPkg/Include/Register/Msr/AtomMsr.h         |   28 +-
> >  UefiCpuPkg/Include/Register/Msr/BroadwellMsr.h    |   62 +-
> >  UefiCpuPkg/Include/Register/Msr/Core2Msr.h        |  102 +-
> >  UefiCpuPkg/Include/Register/Msr/CoreMsr.h         |   74 +-
> >  UefiCpuPkg/Include/Register/Msr/GoldmontMsr.h     |   88 +-
> >  UefiCpuPkg/Include/Register/Msr/GoldmontPlusMsr.h |  272 ++++
> >  UefiCpuPkg/Include/Register/Msr/HaswellEMsr.h     |   62 +-
> >  UefiCpuPkg/Include/Register/Msr/HaswellMsr.h      |   34 +-
> >  UefiCpuPkg/Include/Register/Msr/IvyBridgeMsr.h    |    8 +-
> >  UefiCpuPkg/Include/Register/Msr/NehalemMsr.h      |   52 +-
> >  UefiCpuPkg/Include/Register/Msr/P6Msr.h           |   60 +-
> >  UefiCpuPkg/Include/Register/Msr/Pentium4Msr.h     |  202 +--
> >  UefiCpuPkg/Include/Register/Msr/PentiumMMsr.h     |   22 +-
> >  UefiCpuPkg/Include/Register/Msr/PentiumMsr.h      |   12 +-
> >  UefiCpuPkg/Include/Register/Msr/SandyBridgeMsr.h  |   49 +-
> >  UefiCpuPkg/Include/Register/Msr/SilvermontMsr.h   |  100 +-
> >  UefiCpuPkg/Include/Register/Msr/SkylakeMsr.h      | 1602
> ++++++++++++++++++++-
> >  UefiCpuPkg/Include/Register/Msr/Xeon5600Msr.h     |    8 +-
> >  UefiCpuPkg/Include/Register/Msr/XeonDMsr.h        |   84 +-
> >  UefiCpuPkg/Include/Register/Msr/XeonE7Msr.h       |    6 +-
> >  UefiCpuPkg/Include/Register/Msr/XeonPhiMsr.h      |  326 ++++-
> >  23 files changed, 2813 insertions(+), 577 deletions(-)  create mode
> > 100644 UefiCpuPkg/Include/Register/Msr/GoldmontPlusMsr.h
> >
> 
> _______________________________________________
> edk2-devel mailing list
> edk2-devel@lists.01.org
> https://lists.01.org/mailman/listinfo/edk2-devel


      reply	other threads:[~2018-09-21  7:40 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-09-18  1:43 [Patch 00/14] Update MSR definitions Eric Dong
2018-09-18  1:43 ` [Patch 01/14] UefiCpuPkg/Include/Register/Msr: Update reference spec info Eric Dong
2018-09-18  1:43 ` [Patch 02/14] UefiCpuPkg/Include/Register/Msr/GoldmontPlusMsr.h: Add new MSR file for goldmont plus microarchitecture Eric Dong
2018-09-18  1:43 ` [Patch 03/14] UefiCpuPkg/Include/Register/Msr/SilvermontMsr.h: Add new MSR Eric Dong
2018-09-18  1:43 ` [Patch 04/14] UefiCpuPkg/Include/Register/Msr/*.h: " Eric Dong
2018-09-18  1:43 ` [Patch 05/14] UefiCpuPkg/Include/Register/Msr/XeonPhiMsr.h: " Eric Dong
2018-09-18  1:43 ` [Patch 06/14] UefiCpuPkg/Include/Register/Msr/SkylakeMsr.h: Add new MSRs Eric Dong
2018-09-18  1:43 ` [Patch 07/14] UefiCpuPkg/Include/Register/ArchitecturalMsr.h: Add new MSR Eric Dong
2018-09-18  1:43 ` [Patch 08/14] UefiCpuPkg/Include/Register/ArchitecturalMsr.h: Change structure definition Eric Dong
2018-09-18  1:43 ` [Patch 09/14] UefiCpuPkg/Include/Register/Msr/Core2Msr.h: Remove old MSR Eric Dong
2018-09-18  1:43 ` [Patch 10/14] UefiCpuPkg/Include/Register/Msr/P6Msr.h: " Eric Dong
2018-09-18  1:43 ` [Patch 11/14] UefiCpuPkg/Include/Register/Msr/CoreMsr.h: " Eric Dong
2018-09-18  1:43 ` [Patch 12/14] UefiCpuPkg/Include/Register/Msr/SkylakeMsr.h: Add new MSR name and keep old one Eric Dong
2018-09-18  1:43 ` [Patch 13/14] UefiCpuPkg/Include/Register/Msr/GoldmontMsr.h: " Eric Dong
2018-09-18  1:43 ` [Patch 14/14] UefiCpuPkg/Include/Register/Msr/XeonPhiMsr.h: Change structure definition Eric Dong
2018-09-18  1:59 ` [Patch 00/14] Update MSR definitions Ni, Ruiyu
2018-09-18  9:01 ` Laszlo Ersek
2018-09-21  7:40   ` Dong, Eric [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-list from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=ED077930C258884BBCB450DB737E66224ACB7E79@SHSMSX101.ccr.corp.intel.com \
    --to=devel@edk2.groups.io \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox