Sent from my iPhone
> On Nov 13, 2014, at 11:14 AM, Jordan Justen <jordan.l.jus...@intel.com> wrote: > >> On 2014-11-13 09:46:29, Laszlo Ersek wrote: >>> On 11/13/14 18:40, Gabriel Somlo wrote: >>>> On Thu, 13 Nov 2014 09:27:09 -0600, Scott Duplichan wrote: >>>> Gabriel Somlo [mailto:gso...@gmail.com] wrote: >>>> ]On Sun, Nov 09, 2014 at 05:00:38PM -0800, Jordan Justen wrote: >>>> ]> On 2014-11-08 14:01:56, Gabriel L. Somlo wrote: >>>> ]> > @@ -228,6 +229,11 @@ MiscInitialization ( >>>> ]> > VOID >>>> ]> > ) >>>> ]> > { >>>> ]> > + UINT16 HostBridgeDevId; >>>> ]> > + UINTN PmCmd; >>>> ]> > + UINTN Pmba; >>>> ]> > + UINTN PmRegMisc; >>>> ]> > + >>>> ]> > // >>>> ]> > // Disable A20 Mask >>>> ]> > // >>>> ]> > @@ -239,33 +245,47 @@ MiscInitialization ( >>>> ]> > BuildCpuHob (36, 16); >>>> ]> > >>>> ]> > // >>>> ]> > + // Query Host Bridge DID to determine platform type >>>> ]> > + // >>>> ]> > + 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: >>>> 0x%04x\n", >>>> ]> > + __FUNCTION__, HostBridgeDevId)); >>>> ]> > + ASSERT (FALSE); >>>> ]> >>>> ]> 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 :) >>>> >>>> Because GCC49 IA32 is an optimized build (-Os) and GCC49 X64 is not. >>> >>> OK, thanks, that makes sense :) >>> >>>> ]Assuming we're still on the same page, the question becomes how to >>>> ]shut up gcc. >>>> >>>> Using a phrase like 'shut up gcc' sort of implies the warning is in >>>> the bogus category, like so many from the Microsoft compilers. But >>>> this warning is valid, right? For example, if I run Ovmf in some >>>> environment where PIIX4 is not present, then the code will fail >>>> to find the ACPI timer I/O address. Why not return an error if >>>> no supported device ID is found. That will eliminate the warning, >>>> and prevent the code from running on the unsupported chipset. >>> >>> I'm using this type of switch statement from several places, some >>> of which return VOID. Right now, that's >>> >>> OvmfPkg/PlatformPei/Platform.c MiscInitialization () >>> OvmfPkg/Csm/CsmSupportLib/LegacyInterrupt.c LegacyInterruptInstall () >>> OvmfPkg/Library/AcpiTimerLib/*AcpiTimerLib.c AcpiTimerLibConstructor () >>> OvmfPkg/Library/PlatformBdsLib/BdsPlatform.c PciAcpiInitialization () >>> >>> I could add a "return EFI_UNSUPPORTED" for those of them which return >>> a status code, or simply a "return" for those of type VOID, however: >>> >>> I'd still basically be just "shutting up gcc", because I'd place these >>> return statements after the ASSERT (FALSE). >>> >>> Once neither host bridge type we expect has been detected, the world >>> ends and returning "for real" makes no sense, as we're in an >>> unexpected/undefined state. Hence the ASSERT. >>> >>> Jordan, what do you think ? Adding a "return [EFI_UNSUPPORTED]" after >>> the ASSERT (FALSE), is that stylistically preferable over zeroing >>> out the values before the switch() ? >> >> (chiming in:) both have been employed in edk2. I *slightly* prefer the >> return statement after the ASSERT(), because that one makes the purpose >> obvious even without comments. > > Setting the defaults to zero is going to mean 'bad things happen' if > another devid is seen in a release build. So, I don't think it matters > too much. > > I already mentioned my (slight) preference would be to fallback to > assuming PIIX4, since qemu and related projects have used that for a > long time. But, with Anthony's Xen info, it seems like this is not > likely to be an issue. > > Regarding the assert, one thing I've seen (in other code bases) as an > alternative to > ASSERT (FALSE); > is something like > ASSERT (!"Unsupported host bridge"); > Most edk2 code has a comment before the ASSERT explaining it, or a DEBUG print. > I'm assuming EDK II's strict warnings would make this infeasible. :) > > -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 ------------------------------------------------------------------------------ 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