diff options
| author | Your Name <[email protected]> | 2023-07-13 02:12:32 +0000 |
|---|---|---|
| committer | Your Name <[email protected]> | 2023-07-13 02:12:32 +0000 |
| commit | e6400e4dc449a8948f366bf605fef1fa6053fe12 (patch) | |
| tree | eee355b31f9cce52352464625d011304865e9ad6 | |
| parent | b56a5bf3eb85865791875e1d5eb2be7772710fad (diff) | |
屏蔽 TNT 位
更多的打印输出
| -rw-r--r-- | target/i386/tcg/misc_helper.c | 14 | ||||
| -rw-r--r-- | target/i386/tcg/seg_helper.c | 10 |
2 files changed, 22 insertions, 2 deletions
diff --git a/target/i386/tcg/misc_helper.c b/target/i386/tcg/misc_helper.c index 2e35d6c24f..468ab9438c 100644 --- a/target/i386/tcg/misc_helper.c +++ b/target/i386/tcg/misc_helper.c @@ -108,11 +108,20 @@ void helper_senduipi(CPUX86State *env ,int reg_index){ cpu_physical_memory_rw(upid_phyaddress, &upid, 16, false); // tempUPID.PIR[tempUITTE.UV] := 1; upid.puir |= 1<<uitte.user_vec; - + + qemu_log("1puir is 0x%lx \n", upid.puir); + qemu_log("upid status: 0b"); + for(int i = 8; i >= 0; i--){ + qemu_log("%d", (upid.nc.status >> i) & 1); + } + qemu_log("\n"); bool sendNotify; //IF tempUPID.SN = tempUPID.ON = 0 - if((upid.nc.status&0x11) == 0){ + // 06 比较 SN 和 TNT + // 03 比较 ON 和 SN + if((upid.nc.status&0x03) == 0){ //THEN tempUPID.ON := 1; sendNotify := 1; + // upid.nc.status |= 5; // TNT 置位 upid.nc.status |= UPID_ON; sendNotify = true; }else{ // ELSE sendNotify := 0; @@ -125,6 +134,7 @@ void helper_senduipi(CPUX86State *env ,int reg_index){ qemu_log("senduipi core: %d uitte index:%d dist core: %d ifsend: %d, nv: %d\n", get_apic_id(cpu_get_current_apic()), uitte_index, upid.nc.ndst >> 8, sendNotify,upid.nc.nv); if(sendNotify){ + qemu_log("senduipi for real \n"); uint8_t realdst = upid.nc.ndst >> 8; send_ipi(realdst, upid.nc.nv); } diff --git a/target/i386/tcg/seg_helper.c b/target/i386/tcg/seg_helper.c index e09ffed46c..dc360b2582 100644 --- a/target/i386/tcg/seg_helper.c +++ b/target/i386/tcg/seg_helper.c @@ -999,6 +999,7 @@ static void do_interrupt64(CPUX86State *env, int intno, int is_int, uintr_upid upid; cpu_physical_memory_rw(upid_phyaddress, &upid, 16, false); upid.nc.status &= (~1); // clear on + qemu_log("2 puir is 0x%lx \n", upid.puir); if(upid.puir != 0){ env->uintr_rr = upid.puir; upid.puir = 0; // clear puir @@ -1006,6 +1007,15 @@ static void do_interrupt64(CPUX86State *env, int intno, int is_int, } cpu_physical_memory_rw(upid_phyaddress, &upid, 16, true); // write back helper_clear_eoi(env); + + qemu_log("3 puir is 0x%lx \n", upid.puir); + + qemu_log("receive upid status: 0b"); + for(int i = 8; i >= 0; i--){ + qemu_log("%d", (upid.nc.status >> i) & 1); + } + qemu_log("\n"); + if(send)helper_rrnzero(env); else qemu_log("do not go to handler\n"); return; |
