All of lore.kernel.org
 help / color / mirror / Atom feed
From: Paolo Bonzini <pbonzini@redhat.com>
To: Peter Maydell <peter.maydell@linaro.org>
Cc: mttcg@greensocs.com, QEMU Developers <qemu-devel@nongnu.org>,
	Pavel Dovgaluk <Pavel.Dovgaluk@ispras.ru>,
	Richard Henderson <rth@twiddle.net>
Subject: Re: [Qemu-devel] when does a target frontend need to use gen_io_start()/gen_io_end() ?
Date: Wed, 13 May 2015 10:42:18 +0200	[thread overview]
Message-ID: <55530E6A.6060202@redhat.com> (raw)
In-Reply-To: <CAFEAcA-OnNXt9O1AX6ht4k11VhDcgRT96+x38P6rWannp-tzAQ@mail.gmail.com>



On 12/05/2015 21:41, Peter Maydell wrote:
>> > It's any instruction that can cause an icount read, typically through
>> > QEMU_CLOCK_VIRTUAL or cpu_get_ticks().
> Also anything that can cause a CPU interrupt, since tcg_handle_interrupt()
> will call cpu_abort() if the CPU gets an interrupt while it's not
> in a 'can do IO' state.
> 
> Anything else?
> 
> [How are -icount and multi-threaded TCG going to interact? Do we
> just say "you get one or the other but not both" ?]

For -icount and SMP, yes.  I even posted a patch to that end once.

You can get -icount and multi-threaded TCG (which for UP is simply TCG
with execution out of the BQL) together I think.  For example you could
handle cpu->icount_decr.u16.low == 0 like cpu->halted, hanging the CPU
thread until QEMU_CLOCK_VIRTUAL timers have been processed.  The I/O
thread would have to kick the CPU after processing QEMU_CLOCK_VIRTUAL
timers---not hard to do.

In fact, I suspect cpu->halted should become a kind of bitmap, and "wait
for interrupt" should be just one bit in there.  Any operation that
requires synchronization with other VCPUs should use cpu->halted so that
VCPUs can still run foreign code with run_on_vcpu.  This was the plan I
outlined to Frederic and Mark for flushing TLB remotely, at least.

Paolo

  reply	other threads:[~2015-05-13  8:42 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-05-12 15:32 [Qemu-devel] when does a target frontend need to use gen_io_start()/gen_io_end() ? Peter Maydell
2015-05-12 15:43 ` Richard Henderson
2015-05-12 15:54   ` Peter Maydell
2015-05-12 18:17 ` Paolo Bonzini
2015-05-12 19:41   ` Peter Maydell
2015-05-13  8:42     ` Paolo Bonzini [this message]
2015-05-13  9:41       ` Peter Maydell
2015-05-13 10:03         ` Paolo Bonzini
2015-05-13 12:30           ` Frederic Konrad
2015-05-13  6:57   ` Pavel Dovgaluk
     [not found]   ` <16201.3286528692$1431500273@news.gmane.org>
2015-05-13  8:32     ` 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=55530E6A.6060202@redhat.com \
    --to=pbonzini@redhat.com \
    --cc=Pavel.Dovgaluk@ispras.ru \
    --cc=mttcg@greensocs.com \
    --cc=peter.maydell@linaro.org \
    --cc=qemu-devel@nongnu.org \
    --cc=rth@twiddle.net \
    /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.