All of lore.kernel.org
 help / color / mirror / Atom feed
From: Paolo Bonzini <pbonzini@redhat.com>
To: Sergey Fedorov <serge.fdrv@gmail.com>
Cc: mttcg@greensocs.com, "peter maydell" <peter.maydell@linaro.org>,
	"claudio fontana" <claudio.fontana@huawei.com>,
	"Sergey Fedorov" <sergey.fedorov@linaro.org>,
	patches@linaro.org, "jan kiszka" <jan.kiszka@siemens.com>,
	"Peter Crosthwaite" <crosthwaite.peter@gmail.com>,
	"mark burton" <mark.burton@greensocs.com>,
	qemu-devel@nongnu.org, "a rigo" <a.rigo@virtualopensystems.com>,
	cota@braap.org, "bobby prani" <bobby.prani@gmail.com>,
	rth@twiddle.net, "Alex Bennée" <alex.bennee@linaro.org>,
	"fred konrad" <fred.konrad@greensocs.com>
Subject: Re: [Qemu-devel] [PATCH 3/3] tcg: Avoid bouncing tb_lock between tb_gen_code() and tb_add_jump()
Date: Mon, 11 Jul 2016 16:03:42 +0200	[thread overview]
Message-ID: <c93d3aa8-8309-b8bc-f206-ec1abdde9a58@redhat.com> (raw)
In-Reply-To: <578399C1.6090108@gmail.com>



On 11/07/2016 15:06, Sergey Fedorov wrote:
> On 08/07/16 23:52, Paolo Bonzini wrote:
>>
>> On 08/07/2016 22:24, Sergey Fedorov wrote:
>>> I remember, I've just found that we discussed it in this thread:
>>>
>>> http://thread.gmane.org/gmane.comp.emulators.qemu/401723/focus=406852
>>>
>>> I was thinking of just doing 'tb_jmp_cache' lookup out of the lock, not
>>> tb_find_physical(). Now thanks to QHT, we could do tb_find_physical()
>>> out of the lock, too. This changes things.
>> But in my patch ("tcg: move tb_find_fast outside the tb_lock critical
>> section", which originally was written by Fred---most of my contribution
>> was getting the invalidation right, not the lock-free lookup)
>> tb_find_physical was also done out of the lock.  It was then retried
>> inside the lock, if it failed.
>>
>> This is why I needed to fail all concurrent lookups as the first step in
>> the invalidation.
>>
>> Emilio's QHT resulted in a rewrite of tb_find_physical, but the basic
>> concepts are the same.
> 
> That could work, I think, if we re-check under tb_lock whether the TB is
> still valid before adding a direct jump to it.

Right, this can still happen:

	tb_find_fast			tb_phys_invalidate
					 tb_lock
	 jmp_cache miss
	 -> tb_find_slow
	  -> tb_find_physical
	   QHT hit
	 tb_lock
					 invalidate tb->pc
					 remove from lists
					 tb_unlock
	 tb_add_jump
	 tb_unlock

I seem to recall that Emilio added a seqlock for this purpose, but
adding a tb_check_invalidated(TranslationBlock *tb) inline function will
also do.

Paolo

  reply	other threads:[~2016-07-11 14:04 UTC|newest]

Thread overview: 41+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-07-05 16:18 [Qemu-devel] [PATCH v2 0/6] Reduce lock contention on TCG hot-path Alex Bennée
2016-07-05 16:18 ` [Qemu-devel] [PATCH v2 1/6] tcg: Ensure safe tb_jmp_cache lookup out of 'tb_lock' Alex Bennée
2016-07-07 13:52   ` Sergey Fedorov
2016-07-08 14:51   ` Sergey Fedorov
2016-07-05 16:18 ` [Qemu-devel] [PATCH v2 2/6] tcg: set up tb->page_addr before insertion Alex Bennée
2016-07-07 14:08   ` Sergey Fedorov
2016-07-08  9:40     ` Sergey Fedorov
2016-07-05 16:18 ` [Qemu-devel] [PATCH v2 3/6] tcg: cpu-exec: remove tb_lock from the hot-path Alex Bennée
2016-07-07 14:18   ` Sergey Fedorov
2016-07-08 15:50     ` Sergey Fedorov
2016-07-08 17:34     ` Sergey Fedorov
2016-07-08 18:03       ` Alex Bennée
2016-07-08 18:20         ` Sergey Fedorov
2016-07-08 20:09   ` Sergey Fedorov
2016-07-05 16:18 ` [Qemu-devel] [PATCH v2 4/6] tcg: cpu-exec: factor out TB patching code Alex Bennée
2016-07-05 16:18 ` [Qemu-devel] [PATCH v2 5/6] tcg: introduce tb_lock_recursive() Alex Bennée
2016-07-05 16:18 ` [Qemu-devel] [PATCH v2 6/6] tcg: cpu-exec: roll-up tb_find_fast/slow Alex Bennée
2016-07-07 16:44   ` Sergey Fedorov
2016-07-07 16:44     ` [Qemu-devel] [PATCH 1/3] tcg: Introduce mmap_lock_reset() Sergey Fedorov
2016-07-07 16:44     ` [Qemu-devel] [PATCH 2/3] tcg: Introduce tb_lock_locked() Sergey Fedorov
2016-07-07 16:44     ` [Qemu-devel] [PATCH 3/3] tcg: Avoid bouncing tb_lock between tb_gen_code() and tb_add_jump() Sergey Fedorov
2016-07-07 19:36       ` Alex Bennée
2016-07-07 19:46         ` Sergey Fedorov
2016-07-07 20:36           ` Sergey Fedorov
2016-07-07 21:40             ` Alex Bennée
2016-07-08  8:40       ` Paolo Bonzini
2016-07-08 10:25         ` Sergey Fedorov
2016-07-08 11:02           ` Paolo Bonzini
2016-07-08 12:32             ` Sergey Fedorov
2016-07-08 14:07               ` Paolo Bonzini
2016-07-08 19:55                 ` Sergey Fedorov
2016-07-08 20:18                   ` Paolo Bonzini
2016-07-08 20:24                     ` Sergey Fedorov
2016-07-08 20:52                       ` Paolo Bonzini
2016-07-11 13:06                         ` Sergey Fedorov
2016-07-11 14:03                           ` Paolo Bonzini [this message]
2016-07-11 14:27                             ` Sergey Fedorov
2016-07-07 16:04 ` [Qemu-devel] [PATCH v2 0/6] Reduce lock contention on TCG hot-path Emilio G. Cota
2016-07-07 16:13   ` Paolo Bonzini
2016-07-07 19:33     ` Alex Bennée
2016-07-07 19:38   ` Alex Bennée

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=c93d3aa8-8309-b8bc-f206-ec1abdde9a58@redhat.com \
    --to=pbonzini@redhat.com \
    --cc=a.rigo@virtualopensystems.com \
    --cc=alex.bennee@linaro.org \
    --cc=bobby.prani@gmail.com \
    --cc=claudio.fontana@huawei.com \
    --cc=cota@braap.org \
    --cc=crosthwaite.peter@gmail.com \
    --cc=fred.konrad@greensocs.com \
    --cc=jan.kiszka@siemens.com \
    --cc=mark.burton@greensocs.com \
    --cc=mttcg@greensocs.com \
    --cc=patches@linaro.org \
    --cc=peter.maydell@linaro.org \
    --cc=qemu-devel@nongnu.org \
    --cc=rth@twiddle.net \
    --cc=serge.fdrv@gmail.com \
    --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.