Определено ти трябва нова версия на ядрото.
mm- пачовете е добре също , макар че те са по екстериментални , неща който се тестват преди да влязат
официално.
Това съобщение ,според мен е в неправилна конфигурация
 на ядрото: Нещо двата процесора не могат да се разберат
за прекъсванията ...
Би било добре ,поне да разгледаш какво е конфигурирано , или да компилираш друго. Аз никога не ползвам готовото ядро , /поне не за пентиум процесорите /, защото ти сигурно си с ядро ,конфигурирано за 386 , /то има ли такива някъде/
 То твоя процесор май подържа хардуерна виртуализация "kvm" ?
Не бих се колебал и секунда на твое място!
Изтегляш на  linux-2.6.20 / в  „/usr/src“ /  от:
<a href="" target="_blank">
ftp://ftp.kernel.org/pub/linux/kernel/v2.6</a>
Изтегляне на patch-2.6.21-rc6.bz2  / в „/usr/src“ /  от:
http://kernel.org/patch-2.6.21-rc6  е препач към  linux-2.6.20 , ако има и мм пач ,той би бил
2.6.21-rc6-mmХ.bz2 ,сега точно няма.
tar xvf linux-2.6.20.tar.bz2
ln -s   linux-2.6.20 linux  // ако я има вече махаме старата
cd linux
bzip2 -dc ../patch-2.6.21-rc6.bz2 | patch -p1  // Пачваме
Ако имаш други пачове:
patch -p1 < път до файла / име на пача
Конфигурираш с:
make xconfig
Ако даде грешка ,това значи не инсталирани „dev“ пакети.
libc6-dev , gcc , qt3-dev-tools , X-dev ...
Опциите ,които не са ти ясни , не ги променяй. Конфигуратора е  взел конфигурацията на ядрото с което си / от /boot/config-xxx или другаде /
Конфигурацията се записва в „ .config “ файла , в директорията на сорса.
 / Конфигуратора ще промени някои неща ,заради зависимости ,липси и т.н./.
PP.
Съобщението  IO-APIC ...
е в:linux/arch/i386/kernel/io_apic.c
 * Sanity check, is the ID really free? Every APIC in a
       * system must have a unique ID or we get lots of nice
       * 'stuck on smp_invalidate_needed IPI wait' messages.
       */
      if (check_apicid_used(phys_id_present_map,
               mp_ioapics[apic].mpc_apicid)) {
         printk(KERN_ERR "BIOS bug, IO-APIC#%d ID %d is already used!...\n",
            apic, mp_ioapics[apic].mpc_apicid);
         for (i = 0; i < get_physical_broadcast(); i++)
            if (!physid_isset(i, phys_id_present_map))
               break;
         if (i >= get_physical_broadcast())
            panic("Max APIC ID exceeded!\n");
         printk(KERN_ERR "... fixing up to %d. (tell your hw vendor)\n",
            i);
         physid_set(i, phys_id_present_map);
         mp_ioapics[apic].mpc_apicid = i;
      } else {
         physid_mask_t tmp;
         tmp = apicid_to_cpu_present(mp_ioapics[apic].mpc_apicid);
         apic_printk(APIC_VERBOSE, "Setting %d in the "
               "phys_id_present_map\n",
               mp_ioapics[apic].mpc_apicid);
         physids_or(phys_id_present_map, phys_id_present_map, tmp);
      }
Ама къде е дефинирана 
check_apicid_used , един господ знае.