qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] [PATCH 2/2] cpu-exec: remove tb_lock from the hot-path


From: Alex Bennée
Subject: Re: [Qemu-devel] [PATCH 2/2] cpu-exec: remove tb_lock from the hot-path
Date: Tue, 05 Jul 2016 14:11:05 +0100
User-agent: mu4e 0.9.17; emacs 25.0.95.7

Paolo Bonzini <address@hidden> writes:

> On 05/07/2016 13:14, Alex Bennée wrote:
>> /*
>>  * Patch the last TB with a jump to the current TB.
>>  *
>>  * Modification of the TB has to be protected with tb_lock which can
>>  * either be already held or taken here.
>>  */
>> static inline void maybe_patch_last_tb(CPUState *cpu,
>>                                        TranslationBlock *tb,
>>                                        TranslationBlock **last_tb,
>>                                        int tb_exit,
>>                                        bool locked)
>> {
>>     if (cpu->tb_flushed) {
>>         /* Ensure that no TB jump will be modified as the
>>          * translation buffer has been flushed.
>>          */
>>         *last_tb = NULL;
>>         cpu->tb_flushed = false;
>>     }
>> #ifndef CONFIG_USER_ONLY
>>     /* We don't take care of direct jumps when address mapping changes in
>>      * system emulation. So it's not safe to make a direct jump to a TB
>>      * spanning two pages because the mapping for the second page can change.
>>      */
>>     if (tb->page_addr[1] != -1) {
>>         *last_tb = NULL;
>>     }
>> #endif
>>     /* See if we can patch the calling TB. */
>>     if (*last_tb && !qemu_loglevel_mask(CPU_LOG_TB_NOCHAIN)) {
>>         if (!locked) {
>>             tb_lock();
>>         }
>>         tb_add_jump(*last_tb, tb_exit, tb);
>>         if (!locked) {
>>             tb_unlock();
>>         }
>>     }
>> }
>
> Why not add tb_lock_recursive() and tb_lock_reset()?

I thought we didn't like having recursive locking? I agree it would make
things a little neater though.

--
Alex Bennée



reply via email to

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