On 2014-11-12 05:38:28, Gabriel Somlo wrote:
> On Tue, Nov 11, 2014 at 07:54:30PM -0800, Jordan Justen wrote:
> > > > When I build IA32 (OvmfPkg/build.sh -a IA32) I get warnings about
> > > > possibly uninitialized variables.
> > > > 
> > > > It seems to happen basically everwhere that you switch on
> > > > HostBridgeDevId.
> > > 
> > > I wonder why it's only warning on IA32, not like its different on X64 :)
> > > 
> > > > We should default to setting variables to the PIIX4 values in this
> > > > case.
> > > > 
> > > > I'm not sure if we should just skip the assert and use the PIIX4
> > > > values.
> > >  
> > > With the understanding that I will obviously defer to your judgment
> > > regarding style, I actually *like* the switch statement, complete with
> > > ASSERT(FALSE) if something "surprising" happens that causes the world
> > > to end... :)
> > > 
> > > Assuming we're still on the same page, the question becomes how to
> > > shut up gcc. We could initialize PmCmd, Pmba, and PmRegMisc to 0 when
> > > we declare them:
> > > 
> > >   UINTN  PmCmd     = 0;
> > >   UINTN  Pmba      = 0;
> > >   UINTN  PmRegMisc = 0;
> > 
> > Unfortunately, it looks like the Coding Style document states:
> > "Initializing a variable as part of its declaration is illegal."
> > http://sourceforge.net/projects/edk2/files/General%20Documentation/EDK%20II%20C%20Coding%20Standards%20Specification.pdf/download
> > 
> > > or right before the switch statement, but that feels cheesy because
> > > it's gratuitous, so I don't like either alternative.
> > > 
> > > Right now, I'm very tempted to initialize them to 0 *after* the
> > > ASSERT(FALSE) with a comment:
> > > 
> > >   HostBridgeDevId = PciRead16 (OVMF_HOSTBRIDGE_DID);
> > >   switch (HostBridgeDevId) {
> > >     case INTEL_82441_DEVICE_ID:
> > >       PmCmd     = POWER_MGMT_REGISTER_PIIX4 (PCI_COMMAND_OFFSET);
> > >       Pmba      = POWER_MGMT_REGISTER_PIIX4 (0x40);
> > >       PmRegMisc = POWER_MGMT_REGISTER_PIIX4 (0x80);
> > >       break;
> > >     case INTEL_Q35_MCH_DEVICE_ID:
> > >       PmCmd     = POWER_MGMT_REGISTER_Q35 (PCI_COMMAND_OFFSET);
> > >       Pmba      = POWER_MGMT_REGISTER_Q35 (0x40);
> > >       PmRegMisc = POWER_MGMT_REGISTER_Q35 (0x80);
> > >       break;
> > >     default:
> > >       DEBUG ((EFI_D_ERROR, "%a: Unknown Host Bridge Device ID: x%04x\n",
> > >         __FUNCTION__, HostBridgeDevId));
> > >       ASSERT (FALSE);
> > > +     PmCmd = Pmba = PmRegMisc = 0; // suppress uninitialized use gcc 
> > > warning
> > 
> > But, in this case, I think I prefer to allow PIIX4 to be used as a
> > default. Well, only for release builds, but... how about this? :
> > 
> >   switch (HostBridgeDevId) {
> >     case INTEL_Q35_MCH_DEVICE_ID:
> >       PmCmd     = POWER_MGMT_REGISTER_Q35 (PCI_COMMAND_OFFSET);
> >       Pmba      = POWER_MGMT_REGISTER_Q35 (0x40);
> >       PmRegMisc = POWER_MGMT_REGISTER_Q35 (0x80);
> >       break;
> >     default:
> >       DEBUG ((EFI_D_ERROR, "%a: Unknown Host Bridge Device ID: x%04x\n",
> >         __FUNCTION__, HostBridgeDevId));
> >       ASSERT (FALSE);
> >       //
> >       // Fall through to use PIIX4 locations by default
> >       //
> >     case INTEL_82441_DEVICE_ID:
> >       PmCmd     = POWER_MGMT_REGISTER_PIIX4 (PCI_COMMAND_OFFSET);
> >       Pmba      = POWER_MGMT_REGISTER_PIIX4 (0x40);
> >       PmRegMisc = POWER_MGMT_REGISTER_PIIX4 (0x80);
> >       break;
> >   }
> >  
> 
> Hmmm, if I looked at this a few years down the road, I'll most likely
> end up wondering if there was a clever reason to word it like that,
> and simply shutting up compiler warnings would be low on my list of
> suspects :)
> 
> I think I'll just go for this instead:
> 
> >   UINTN  PmCmd;
> >   UINTN  Pmba;
> >   UINTN  PmRegMisc;
> > 
>     //
>     // suppress uninitialized use gcc warning
>     //
> >   PmCmd     = 0;
> >   Pmba      = 0;
> >   PmRegMisc = 0;
> > 
> 
> if it's still an option :)

Yeah, it is fine.

Personally I wanted to see the code fallback to PIIX4 mode, but I
don't feel that strongly about it.

At least in more modern chipsets there can be multiple device ids
mapping to the same basic chipset family. I'm not sure if that is the
case with 440FX, so I have a slight concern that perhaps Xen's 440FX
emulation might use a different id.

Thus, it might be valuable to 'fallback' to the older path of assuming
PIIX4 is present.

But, it would also be good to rout out all the used ids and cover them
in the switch.

-Jordan

------------------------------------------------------------------------------
Comprehensive Server Monitoring with Site24x7.
Monitor 10 servers for $9/Month.
Get alerted through email, SMS, voice calls or mobile push notifications.
Take corrective actions from your mobile device.
http://pubads.g.doubleclick.net/gampad/clk?id=154624111&iu=/4140/ostg.clktrk
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/edk2-devel

Reply via email to