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

Kevin O'Connor kevin at koconnor.net
Tue Mar 13 00:51:42 CET 2012


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.)

-Kevin



More information about the SeaBIOS mailing list