[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] The reason behind block linking constraint?
From: |
陳韋任 |
Subject: |
[Qemu-devel] The reason behind block linking constraint? |
Date: |
Thu, 18 Aug 2011 14:33:38 +0800 |
User-agent: |
Mutt/1.5.21 (2010-09-15) |
Hi, all
I am trying to figure out why QEMU put some constraints on block
linking (chaining). Take x86 as an example, there are two places
put constraints on block linking, gen_goto_tb and cpu_exec.
----------------- gen_goto_tb (target-i386/translate.c) ---------------
/* NOTE: we handle the case where the TB spans two pages here */
if ((pc & TARGET_PAGE_MASK) == (tb->pc & TARGET_PAGE_MASK) ||
(pc & TARGET_PAGE_MASK) == ((s->pc - 1) & TARGET_PAGE_MASK)) {
/* jump to same page: we can use a direct jump */
tcg_gen_goto_tb(tb_num);
gen_jmp_im(eip);
tcg_gen_exit_tb((tcg_target_long)tb + tb_num);
} else {
/* jump to another page: currently not optimized */
gen_jmp_im(eip);
gen_eob(s);
}
-----------------------------------------------------------------------
----------------------- cpu_exec (cpu-exec.c) -------------------------
/* see if we can patch the calling TB. When the TB
spans two pages, we cannot safely do a direct
jump. */
if (next_tb != 0 && tb->page_addr[1] == -1) {
tb_add_jump((TranslationBlock *)(next_tb & ~3), next_tb & 3, tb);
}
-----------------------------------------------------------------------
Is it just because we cannot optimize block linking which crosses page
boundary, or there are some correctness/safety issues should be considered?
I did some experiments myself. First, I removed the if-else condition
in gen_goto_tb (always go to if branch) and leave cpu_exec alone. In this
case, user mode works fine, but system mode crashes while booting linux.
Then, I removed the "tb->page_addr[1]" check and leave gen_goto_tb
alone. This time, both user mode and system mode works fine. I use the
disk image and user mode tests downloaded from the website as the test
case.
Could someone kindly explain why there are constraints on block
linking? Thanks!
Regards,
chenwj
--
Wei-Ren Chen (陳韋任)
Computer Systems Lab, Institute of Information Science,
Academia Sinica, Taiwan (R.O.C.)
Tel:886-2-2788-3799 #1667
- [Qemu-devel] The reason behind block linking constraint?,
陳韋任 <=