]> git.proxmox.com Git - qemu.git/commitdiff
fummy DM_LOWPRI handling
authorbellard <bellard@c046a42c-6fe2-441c-8c8c-71466251a162>
Wed, 23 Nov 2005 20:59:44 +0000 (20:59 +0000)
committerbellard <bellard@c046a42c-6fe2-441c-8c8c-71466251a162>
Wed, 23 Nov 2005 20:59:44 +0000 (20:59 +0000)
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@1648 c046a42c-6fe2-441c-8c8c-71466251a162

hw/apic.c

index 276dd456f8d2b6420c37babb64b9026246b5674e..64caadb812491c68b4e4f7af12b4e2fd9f2ab294 100644 (file)
--- a/hw/apic.c
+++ b/hw/apic.c
@@ -109,8 +109,16 @@ static void apic_bus_deliver(uint32_t deliver_bitmask, uint8_t delivery_mode,
 
     switch (delivery_mode) {
         case APIC_DM_LOWPRI:
+            /* XXX: search for focus processor, arbitration */
+            if (deliver_bitmask) {
+                uint32_t m = 1;
+                while ((deliver_bitmask & m) == 0)
+                    m <<= 1;
+                deliver_bitmask = m;
+            }
+            break;
+
         case APIC_DM_FIXED:
-            /* XXX: arbitration */
             break;
 
         case APIC_DM_SMI:
@@ -336,12 +344,12 @@ static void apic_init_ipi(APICState *s)
 static void apic_startup(APICState *s, int vector_num)
 {
     CPUState *env = s->cpu_env;
-    if (!env->cpu_halted)
+    if (!(env->hflags & HF_HALTED_MASK))
         return;
     env->eip = 0;
     cpu_x86_load_seg_cache(env, R_CS, vector_num << 8, vector_num << 12, 
                            0xffff, 0);
-    env->cpu_halted = 0;
+    env->hflags &= ~HF_HALTED_MASK;
 }
 
 static void apic_deliver(APICState *s, uint8_t dest, uint8_t dest_mode,
@@ -368,11 +376,6 @@ static void apic_deliver(APICState *s, uint8_t dest, uint8_t dest_mode,
     }
 
     switch (delivery_mode) {
-        case APIC_DM_LOWPRI:
-            /* XXX: search for focus processor, arbitration */
-            dest = s->id;
-            break;
-
         case APIC_DM_INIT:
             {
                 int trig_mode = (s->icr[0] >> 15) & 1;