qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Frederic Konrad <fred.konrad@greensocs.com>
To: "Alex Bennée" <alex.bennee@linaro.org>
Cc: mttcg@listserver.greensocs.com, mark.burton@greensocs.com,
	qemu-devel@nongnu.org, a.rigo@virtualopensystems.com,
	guillaume.delbergue@greensocs.com, pbonzini@redhat.com
Subject: Re: [Qemu-devel] [RFC PATCH V7 07/19] protect TBContext with tb_lock.
Date: Fri, 14 Aug 2015 10:38:56 +0200	[thread overview]
Message-ID: <55CDA920.7060204@greensocs.com> (raw)
In-Reply-To: <87zj1wfjx0.fsf@linaro.org>

On 12/08/2015 20:20, Alex Bennée wrote:
> Frederic Konrad <fred.konrad@greensocs.com> writes:
>
>> On 10/08/2015 17:27, fred.konrad@greensocs.com wrote:
>>> From: KONRAD Frederic <fred.konrad@greensocs.com>
>>>
>>> This protects TBContext with tb_lock to make tb_* thread safe.
>>>
>>> We can still have issue with tb_flush in case of multithread TCG:
>>>     An other CPU can be executing code during a flush.
>>>
>>> This can be fixed later by making all other TCG thread exiting before calling
>>> tb_flush().
>>>
>>> tb_find_slow is separated into tb_find_slow and tb_find_physical as the whole
>>> tb_find_slow doesn't require to lock the tb.
>>>
>>> Signed-off-by: KONRAD Frederic <fred.konrad@greensocs.com>
>>>
>>> Changes:
>> [...]
>>>    
>>> @@ -675,6 +710,7 @@ static inline void code_gen_alloc(size_t tb_size)
>>>                CODE_GEN_AVG_BLOCK_SIZE;
>>>        tcg_ctx.tb_ctx.tbs =
>>>                g_malloc(tcg_ctx.code_gen_max_blocks * sizeof(TranslationBlock));
>>> +    qemu_mutex_init(&tcg_ctx.tb_ctx.tb_lock);
>>>    }
>>>    
>>>    /* Must be called before using the QEMU cpus. 'tb_size' is the size
>>> @@ -699,16 +735,22 @@ bool tcg_enabled(void)
>>>        return tcg_ctx.code_gen_buffer != NULL;
>>>    }
>>>    
>>> -/* Allocate a new translation block. Flush the translation buffer if
>>> -   too many translation blocks or too much generated code. */
>>> +/*
>>> + * Allocate a new translation block. Flush the translation buffer if
>>> + * too many translation blocks or too much generated code.
>>> + * tb_alloc is not thread safe but tb_gen_code is protected by a mutex so this
>>> + * function is called only by one thread.
>>> + */
>>>    static TranslationBlock *tb_alloc(target_ulong pc)
>>>    {
>>> -    TranslationBlock *tb;
>>> +    TranslationBlock *tb = NULL;
>>>    
>>>        if (tcg_ctx.tb_ctx.nb_tbs >= tcg_ctx.code_gen_max_blocks ||
>>>            (tcg_ctx.code_gen_ptr - tcg_ctx.code_gen_buffer) >=
>>>             tcg_ctx.code_gen_buffer_max_size) {
>>> -        return NULL;
>>> +        tb = &tcg_ctx.tb_ctx.tbs[tcg_ctx.tb_ctx.nb_tbs++];
>>> +        tb->pc = pc;
>>> +        tb->cflags = 0;
>> Missed this wrong unreverted part which in the end doesn't do a tb_flush
>> when required and crashes!
>> Fixing that allows me to boot with jessie and virt.
> \o/
>
> Do you see crashes while it is running?
>
> It's interesting that I've not had a problem booting jessie with virt
> though - just crashes while hanging.
>
> Are you likely to push a v8 this week (or a temp branch?) with this and
> any other obvious fixes? I appreciate Paolo has given you a not-so-small
> pile of review comments as well so I wasn't looking for a complete new
> patch set!
here is something I did yesterday:
multi_tcg_v7_bugfixed

The patch-set is a mess and not re-based on the patch-set sent by Paolo.

Fred

>
>> Fred

  parent reply	other threads:[~2015-08-14  8:39 UTC|newest]

Thread overview: 81+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-08-10 15:26 [Qemu-devel] [RFC PATCH V7 00/19] Multithread TCG fred.konrad
2015-08-10 15:26 ` [Qemu-devel] [RFC PATCH V7 01/19] cpus: protect queued_work_* with work_mutex fred.konrad
2015-08-10 15:59   ` Paolo Bonzini
2015-08-10 16:04     ` Frederic Konrad
2015-08-10 16:06       ` Paolo Bonzini
2015-08-10 15:27 ` [Qemu-devel] [RFC PATCH V7 02/19] cpus: add tcg_exec_flag fred.konrad
2015-08-11 10:53   ` Paolo Bonzini
2015-08-11 11:11     ` Frederic Konrad
2015-08-11 12:57       ` Paolo Bonzini
2015-08-10 15:27 ` [Qemu-devel] [RFC PATCH V7 03/19] cpus: introduce async_run_safe_work_on_cpu fred.konrad
2015-08-10 15:27 ` [Qemu-devel] [RFC PATCH V7 04/19] replace spinlock by QemuMutex fred.konrad
2015-08-10 16:09   ` Paolo Bonzini
2015-08-10 15:27 ` [Qemu-devel] [RFC PATCH V7 05/19] remove unused spinlock fred.konrad
2015-08-10 15:27 ` [Qemu-devel] [RFC PATCH V7 06/19] add support for spin lock on POSIX systems exclusively fred.konrad
2015-08-10 16:10   ` Paolo Bonzini
2015-08-10 15:27 ` [Qemu-devel] [RFC PATCH V7 07/19] protect TBContext with tb_lock fred.konrad
2015-08-10 16:36   ` Paolo Bonzini
2015-08-10 16:50     ` Paolo Bonzini
2015-08-10 18:39       ` Alex Bennée
2015-08-11  8:31         ` Paolo Bonzini
2015-08-11  6:46     ` Frederic Konrad
2015-08-11  8:34       ` Paolo Bonzini
2015-08-11  9:21         ` Peter Maydell
2015-08-11  9:59           ` Paolo Bonzini
2015-08-12 17:45   ` Frederic Konrad
2015-08-12 18:20     ` Alex Bennée
2015-08-12 18:22       ` Paolo Bonzini
2015-08-14  8:38       ` Frederic Konrad [this message]
2015-08-15  0:04         ` Paolo Bonzini
2015-08-10 15:27 ` [Qemu-devel] [RFC PATCH V7 08/19] tcg: remove tcg_halt_cond global variable fred.konrad
2015-08-10 16:12   ` Paolo Bonzini
2015-08-10 15:27 ` [Qemu-devel] [RFC PATCH V7 09/19] Drop global lock during TCG code execution fred.konrad
2015-08-10 16:15   ` Paolo Bonzini
2015-08-11  6:55     ` Frederic Konrad
2015-08-11 20:12     ` Alex Bennée
2015-08-11 21:34       ` Frederic Konrad
2015-08-12  9:58         ` Paolo Bonzini
2015-08-12 12:32           ` Frederic Konrad
2015-08-10 15:27 ` [Qemu-devel] [RFC PATCH V7 10/19] cpu: remove exit_request global fred.konrad
2015-08-10 15:51   ` Paolo Bonzini
2015-08-10 15:27 ` [Qemu-devel] [RFC PATCH V7 11/19] tcg: switch on multithread fred.konrad
2015-08-13 11:17   ` Paolo Bonzini
2015-08-13 14:41     ` Frederic Konrad
2015-08-13 14:58       ` Paolo Bonzini
2015-08-13 15:18         ` Frederic Konrad
2015-08-10 15:27 ` [Qemu-devel] [RFC PATCH V7 12/19] Use atomic cmpxchg to atomically check the exclusive value in a STREX fred.konrad
2015-08-10 15:27 ` [Qemu-devel] [RFC PATCH V7 13/19] add a callback when tb_invalidate is called fred.konrad
2015-08-10 16:52   ` Paolo Bonzini
2015-08-10 18:41     ` Alex Bennée
2015-08-10 15:27 ` [Qemu-devel] [RFC PATCH V7 14/19] cpu: introduce tlb_flush*_all fred.konrad
2015-08-10 15:54   ` Paolo Bonzini
2015-08-10 16:00     ` Peter Maydell
2015-08-10 15:27 ` [Qemu-devel] [RFC PATCH V7 15/19] arm: use tlb_flush*_all fred.konrad
2015-08-10 15:27 ` [Qemu-devel] [RFC PATCH V7 16/19] translate-all: introduces tb_flush_safe fred.konrad
2015-08-10 16:26   ` Paolo Bonzini
2015-08-12 14:09   ` Paolo Bonzini
2015-08-12 14:11     ` Frederic Konrad
2015-08-12 14:14       ` Paolo Bonzini
2015-08-10 15:27 ` [Qemu-devel] [RFC PATCH V7 17/19] translate-all: (wip) use tb_flush_safe when we can't alloc more tb fred.konrad
2015-08-10 15:27 ` [Qemu-devel] [RFC PATCH V7 18/19] mttcg: signal the associated cpu anyway fred.konrad
2015-08-10 15:51   ` Paolo Bonzini
2015-08-10 15:27 ` [Qemu-devel] [RFC PATCH V7 19/19] target-arm/psci.c: wake up sleeping CPUs (MTTCG) fred.konrad
2015-08-10 16:41   ` Paolo Bonzini
2015-08-10 18:38     ` Alex Bennée
2015-08-10 18:34 ` [Qemu-devel] [RFC PATCH V7 00/19] Multithread TCG Alex Bennée
2015-08-10 23:02   ` Frederic Konrad
2015-08-11  6:15 ` Benjamin Herrenschmidt
2015-08-11  6:27   ` Frederic Konrad
2015-10-07 12:46     ` Claudio Fontana
2015-10-07 14:52       ` Frederic Konrad
2015-10-21 15:09         ` Claudio Fontana
2015-08-11  7:54   ` Alex Bennée
2015-08-11  9:22     ` Benjamin Herrenschmidt
2015-08-11  9:29       ` Peter Maydell
2015-08-11 10:09         ` Benjamin Herrenschmidt
2015-08-11 19:22       ` Alex Bennée
2015-08-11 12:45 ` Paolo Bonzini
2015-08-11 13:59   ` Frederic Konrad
2015-08-11 14:10     ` Paolo Bonzini
2015-08-12 15:19     ` Frederic Konrad
2015-08-12 15:39       ` Paolo Bonzini

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=55CDA920.7060204@greensocs.com \
    --to=fred.konrad@greensocs.com \
    --cc=a.rigo@virtualopensystems.com \
    --cc=alex.bennee@linaro.org \
    --cc=guillaume.delbergue@greensocs.com \
    --cc=mark.burton@greensocs.com \
    --cc=mttcg@listserver.greensocs.com \
    --cc=pbonzini@redhat.com \
    --cc=qemu-devel@nongnu.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).