[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] When do we need to do TB unchaining?

From: Blue Swirl
Subject: Re: [Qemu-devel] When do we need to do TB unchaining?
Date: Thu, 29 Sep 2011 20:02:38 +0000

On Thu, Sep 29, 2011 at 7:55 AM, 陳韋任 <address@hidden> wrote:
> Hi, all
>  I am looking for when TB unchaining is needed. Currently, I
> can only see there are three spots (take i386-softmmu as an
> example):
> 1. cpu_interrupt:
>  When virtual devices raise interrupts, eventually apic_local_deliver
> (apic.c) will call cpu_interrupt. cpu_interrupt will set up
> env->interrupt_request, then call cpu_unlink_tb to unlink env's
> TBs.
>  Here I have a question. I though cpu_interrupt is only used
> in system mode to deliever virtual devices' interrupt. But it
> seems process mode also has cpu_interrupt.
>  I have ran some small programs in process mode under GDB, but
> I never see cpu_interrupt is called. Do I have to run something
> bigger to see when cpu_interrupt is called in process mode? Or
> cpu_interrupt in process mode is only used in some rare cases?

I don't think it is possible. The only non-device cases for x86 are
tb_invalidate_phys_page_range(), cpu_x86_set_a20() and
do_inject_x86_mce(), none of which should be reachable from user

Maybe these should be #ifdeffed out from user emulator builds.

> 2. cpu_exit:
>  QEMU will register a host SIGALRM handler, host_alarm_handler
> (qemu-timer.c),  when initialize the enviroment in system mode.
> Then when host OS delivers SIGALRM to QEMU, host_alarm_handler
> calls qemu_notify_event -> cpu_exit. cpu_exit raise env->exit_request
> , then call cpu_unlink_tb to unlink env's TBs.
>  There are other places where cpu_exit is called, like
>  - cpu_signal: I think this is used when IOTHREAD is enabled.
>  - DMA_init: I guess cpu_exit is called when DMA is done so
>              that control is gave back to QEMU from the code
>              cache.

Yes, this is a questionable hack to improve performance. Maybe it's
also not needed anymore since I/O thread was enabled.

>  - gdb_do_syscall: Don't know when it get called.
>  - vm_stop -> cpu_stop_current: Don't know when it get called.

grep -r is your friend.

> 3. tb_phys_invalidate:
>  QEMU will invalidate TBs related to a guest page which is
> done by tb_invalidate_phys_page_range (exec.c), then
> tb_invalidate_phys_page_range calls tb_phys_invalidate to
> invalidate a TB and unlink links to the TB.
>  Please correct me if I am wrong or something miss. 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

reply via email to

[Prev in Thread] Current Thread [Next in Thread]