[SeaBIOS] [PATCH 1/3] Halt if number of started cpus are more then expected

Igor Mammedov imammedo at redhat.com
Tue Mar 13 10:11:25 CET 2012


On 03/13/2012 12:51 AM, Kevin O'Connor wrote:
> On Sat, Mar 10, 2012 at 12:47:26PM +0100, Igor Mammedov wrote:
>> Reduce amount of consumed cpu time (i.e. don't spin forever) if
>> number of started cpus are more then expected. And print a bug
>> message into debug port.
>>
>> Signed-off-by: Igor Mammedov<imammedo at redhat.com>
>> ---
>>   src/smp.c |    8 +++++++-
>>   1 files changed, 7 insertions(+), 1 deletions(-)
>>
>> diff --git a/src/smp.c b/src/smp.c
>> index 8c077a1..9933ac6 100644
>> --- a/src/smp.c
>> +++ b/src/smp.c
>> @@ -115,8 +115,14 @@ smp_probe(void)
>>           msleep(10);
>>       } else {
>>           u8 cmos_smp_count = inb_cmos(CMOS_BIOS_SMP_COUNT);
>> -        while (cmos_smp_count + 1 != readl(&CountCPUs))
>> +        while (cmos_smp_count + 1 != readl(&CountCPUs)) {
>> +            if (cmos_smp_count + 1<  readl(&CountCPUs)) {
>> +                dprintf(1, "BUG: Expected %d cpu(s) but %d cpus started\n",
>> +                        cmos_smp_count + 1, readl(&CountCPUs));
>> +                hlt();
>> +            }
>>               yield();
>> +        }
>
> I suggest just changing the "while !=" to a "while<".  The chance of
> detecting the error is pretty slim anyway.  (Under normal
> circumstances, the processor is spinning on the count - the chance of
> two other processors getting in to increment before the first
> processor sees a change is pretty small.)

Then with buggy emulators (i.e. actual started number of cpus > cmos_smp_count + 1),
it is possible that we could continue to boot while CountCPUs is still increasing.
And as result we could build mp/acpi/smbios tables with different count.
It's safer to stop then deal with consequences later.

This patch is only for purpose of increasing stability of host, i.e. do not
consume needlessly cpu and affect other VMs if bug creeps in used emulator.

>
> -Kevin

-- 
-----
  Igor



More information about the SeaBIOS mailing list