All of lore.kernel.org
 help / color / mirror / Atom feed
From: Sergey Fedorov <serge.fdrv@gmail.com>
To: "Alex Bennée" <alex.bennee@linaro.org>,
	"Sergey Fedorov" <sergey.fedorov@linaro.org>
Cc: qemu-devel@nongnu.org, "Paolo Bonzini" <pbonzini@redhat.com>,
	"Peter Crosthwaite" <crosthwaite.peter@gmail.com>,
	"Richard Henderson" <rth@twiddle.net>,
	"Andreas Färber" <afaerber@suse.de>
Subject: Re: [Qemu-devel] [PATCH v3 4/4] tcg: rework tb_invalidated_flag
Date: Mon, 18 Apr 2016 18:05:40 +0300	[thread overview]
Message-ID: <5714F7C4.6040306@gmail.com> (raw)
In-Reply-To: <87inzfvwiq.fsf@linaro.org>

[-- Attachment #1: Type: text/plain, Size: 2643 bytes --]

On 18/04/16 17:09, Alex Bennée wrote:
> Sergey Fedorov <sergey.fedorov@linaro.org> writes:
>> From: Sergey Fedorov <serge.fdrv@gmail.com>
>>
>> 'tb_invalidated_flag' was meant to catch two events:
>>  * some TB has been invalidated by tb_phys_invalidate();
>>  * the whole translation buffer has been flushed by tb_flush().
>>
>> Then it was checked:
>>  * in cpu_exec() to ensure that the last executed TB can be safely
>>    linked to directly call the next one;
>>  * in cpu_exec_nocache() to decide if the original TB should be provided
>>    for further possible invalidation along with the temporarily
>>    generated TB.
>>
>> It is always safe to patch an invalidated TB since it is not going to be
>> used anyway.
> Wouldn't that have implications for code searching through the linked
> list of jump patched TBs?

The only implication I can see is that the jump in that already
invalidated TB could just get reset back later on in
tb_phys_invalidate(). We could keep track of invalidated TB's and skip
patching those but it's also some overhead in the main CPU execution
loop wich I'm not sure is worth to be introduced.

(snip)
>> diff --git a/cpu-exec.c b/cpu-exec.c
(snip)
>> @@ -507,14 +510,12 @@ int cpu_exec(CPUState *cpu)
>>                  }
>>                  tb_lock();
>>                  tb = tb_find_fast(cpu);
>> -                /* Note: we do it here to avoid a gcc bug on Mac OS X when
>> -                   doing it in tb_find_slow */
> Is this still true? Would it make more sense to push the patching down
> to the gen_code?

This comment comes up to the commit:

    commit 1538800276aa7228d74f9d00bf275f54dc9e9b43              
    Author: bellard <bellard@c046a42c-6fe2-441c-8c8c-71466251a162>
    Date:   Mon Dec 19 01:42:32 2005 +0000                       

        workaround for gcc bug on PowerPC


It was added more than ten years ago. Anyway, now this code is here not
because of the bug: we need to reset 'next_tb' which is a local variable
in cpu_exec(). Personally, I don't think it would be neater to hide it
into gen_code(). Do you have some thoughts on how we could benefit from
doing so? BTW, I had a feeling that it may be useful to reorganize
cpu_exec() a bit, although I don't have a solid idea of how to do this
so far.

>
> I got slightly confused as to what next_tb ends up meaning at what point
> in the run loop.

Yes, it seems to be a misleading name for this variable. As it was
discussed on IRC, I'd like to break it into two variables, say 'last_tb'
and 'tb_exit_idx', as soon as cpu_tb_exec() returns. Probably this
series could also include such a patch.

Kind regards,
Sergey

[-- Attachment #2: Type: text/html, Size: 3914 bytes --]

  reply	other threads:[~2016-04-18 15:05 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-04-14 20:45 [Qemu-devel] [PATCH v3 0/4] tcg: Misc clean-up patches Sergey Fedorov
2016-04-14 20:45 ` [Qemu-devel] [PATCH v3 1/4] tcg: code_bitmap is not used by user-mode emulation Sergey Fedorov
2016-04-14 20:45 ` [Qemu-devel] [PATCH v3 2/4] tcg: reorganize tb_find_physical loop Sergey Fedorov
2016-04-14 20:45 ` [Qemu-devel] [PATCH v3 3/4] cpu-exec: elide more icount code if CONFIG_USER_ONLY Sergey Fedorov
2016-04-14 20:45 ` [Qemu-devel] [PATCH v3 4/4] tcg: rework tb_invalidated_flag Sergey Fedorov
2016-04-18 14:09   ` Alex Bennée
2016-04-18 15:05     ` Sergey Fedorov [this message]
2016-04-18 15:34       ` Peter Maydell
2016-04-18 17:17       ` Alex Bennée
2016-04-18 17:51         ` Sergey Fedorov
2016-04-21 14:35           ` Sergey Fedorov
2016-04-21 15:55             ` Alex Bennée
2016-04-21 16:16               ` Sergey Fedorov
2016-04-21 17:18                 ` Sergey Fedorov
2016-04-21 21:54                   ` Alex Bennée
2016-04-22  9:49                     ` Sergey Fedorov

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=5714F7C4.6040306@gmail.com \
    --to=serge.fdrv@gmail.com \
    --cc=afaerber@suse.de \
    --cc=alex.bennee@linaro.org \
    --cc=crosthwaite.peter@gmail.com \
    --cc=pbonzini@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=rth@twiddle.net \
    --cc=sergey.fedorov@linaro.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.