From: "Emilio G. Cota" <cota@braap.org>
To: Richard Henderson <rth@twiddle.net>
Cc: Richard Henderson <richard.henderson@linaro.org>,
qemu-devel@nongnu.org, Paolo Bonzini <pbonzini@redhat.com>,
Peter Crosthwaite <crosthwaite.peter@gmail.com>
Subject: Re: [Qemu-devel] [RFC v3 46/56] accel/tcg: convert to cpu_interrupt_request
Date: Tue, 23 Oct 2018 16:21:15 -0400 [thread overview]
Message-ID: <20181023202115.GA20137@flamenco> (raw)
In-Reply-To: <33d570f5-5837-09ff-a599-c50c9f3ea331@twiddle.net>
On Tue, Oct 23, 2018 at 03:17:11 +0100, Richard Henderson wrote:
> On 10/23/18 12:50 AM, Emilio G. Cota wrote:
> > On Sun, Oct 21, 2018 at 14:34:25 +0100, Richard Henderson wrote:
> >> On 10/19/18 2:06 AM, Emilio G. Cota wrote:
> >>> @@ -540,16 +540,16 @@ static inline bool cpu_handle_interrupt(CPUState *cpu,
> >>> */
> >>> atomic_mb_set(&cpu->icount_decr.u16.high, 0);
> >>>
> >>> - if (unlikely(atomic_read(&cpu->interrupt_request))) {
> >>> + if (unlikely(cpu_interrupt_request(cpu))) {
> >>> int interrupt_request;
> >>> qemu_mutex_lock_iothread();
> >>> - interrupt_request = cpu->interrupt_request;
> >>> + interrupt_request = cpu_interrupt_request(cpu);
> >>> if (unlikely(cpu->singlestep_enabled & SSTEP_NOIRQ)) {
> >>> /* Mask out external interrupts for this step. */
> >>> interrupt_request &= ~CPU_INTERRUPT_SSTEP_MASK;
> >>> }
> >>> if (interrupt_request & CPU_INTERRUPT_DEBUG) {
> >>> - cpu->interrupt_request &= ~CPU_INTERRUPT_DEBUG;
> >>> + cpu_reset_interrupt(cpu, CPU_INTERRUPT_DEBUG);
> >>> cpu->exception_index = EXCP_DEBUG;
> >>> qemu_mutex_unlock_iothread();
> >>> return true;
> >>
> >> Multiple calls.
> >
> > I'd rather keep it as is.
> >
> > The first read takes the lock, and that has to stay unless
> > we want to use atomic_set on interrupt_request everywhere.
>
> Why not? That's even cheaper.
>
> > Given that the CPU lock is uncontended (so it's cheap to
> > acquire) ...
>
> It still requires at minimum a "lock xchg" (or equivalent on non-x86), which
> isn't free -- think 50-ish cycles minimum just for that one insn, plus call
> overhead.
OK, I changed the first read to atomic_read (changing all the other
writers to atomic_set, but thanks to the helpers it's just very
few of them), and then I'm holding both the BQL + cpu->lock throughout.
Thanks,
Emilio
next prev parent reply other threads:[~2018-10-23 20:21 UTC|newest]
Thread overview: 118+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-10-19 1:05 [Qemu-devel] [RFC v3 0/56] per-CPU locks Emilio G. Cota
2018-10-19 1:05 ` [Qemu-devel] [RFC v3 01/56] cpu: convert queued work to a QSIMPLEQ Emilio G. Cota
2018-10-19 6:26 ` Richard Henderson
2018-10-19 1:05 ` [Qemu-devel] [RFC v3 02/56] cpu: rename cpu->work_mutex to cpu->lock Emilio G. Cota
2018-10-19 6:26 ` Richard Henderson
2018-10-19 1:05 ` [Qemu-devel] [RFC v3 03/56] cpu: introduce cpu_mutex_lock/unlock Emilio G. Cota
2018-10-19 1:05 ` [Qemu-devel] [RFC v3 04/56] cpu: make qemu_work_cond per-cpu Emilio G. Cota
2018-10-19 1:05 ` [Qemu-devel] [RFC v3 05/56] cpu: move run_on_cpu to cpus-common Emilio G. Cota
2018-10-19 6:39 ` Richard Henderson
2018-10-19 1:05 ` [Qemu-devel] [RFC v3 06/56] cpu: introduce process_queued_cpu_work_locked Emilio G. Cota
2018-10-19 6:41 ` Richard Henderson
2018-10-19 1:05 ` [Qemu-devel] [RFC v3 07/56] target/m68k: rename cpu_halted to cpu_halt Emilio G. Cota
2018-10-21 12:53 ` Richard Henderson
2018-10-21 13:38 ` Richard Henderson
2018-10-22 22:58 ` Emilio G. Cota
2018-10-19 1:05 ` [Qemu-devel] [RFC v3 08/56] cpu: define cpu_halted helpers Emilio G. Cota
2018-10-21 12:54 ` Richard Henderson
2018-10-19 1:05 ` [Qemu-devel] [RFC v3 09/56] arm: convert to cpu_halted Emilio G. Cota
2018-10-21 12:55 ` Richard Henderson
2018-10-19 1:05 ` [Qemu-devel] [RFC v3 10/56] ppc: " Emilio G. Cota
2018-10-21 12:56 ` Richard Henderson
2018-10-22 21:12 ` Emilio G. Cota
2018-10-19 1:05 ` [Qemu-devel] [RFC v3 11/56] sh4: " Emilio G. Cota
2018-10-21 12:57 ` Richard Henderson
2018-10-19 1:05 ` [Qemu-devel] [RFC v3 12/56] i386: " Emilio G. Cota
2018-10-21 12:59 ` Richard Henderson
2018-10-19 1:05 ` [Qemu-devel] [RFC v3 13/56] lm32: " Emilio G. Cota
2018-10-21 13:00 ` Richard Henderson
2018-10-19 1:05 ` [Qemu-devel] [RFC v3 14/56] m68k: " Emilio G. Cota
2018-10-21 13:01 ` Richard Henderson
2018-10-19 1:05 ` [Qemu-devel] [RFC v3 15/56] mips: " Emilio G. Cota
2018-10-21 13:02 ` Richard Henderson
2018-10-19 1:05 ` [Qemu-devel] [RFC v3 16/56] riscv: " Emilio G. Cota
2018-10-19 17:24 ` Palmer Dabbelt
2018-10-19 1:05 ` [Qemu-devel] [RFC v3 17/56] s390x: " Emilio G. Cota
2018-10-21 13:04 ` Richard Henderson
2018-10-19 1:05 ` [Qemu-devel] [RFC v3 18/56] sparc: " Emilio G. Cota
2018-10-21 13:04 ` Richard Henderson
2018-10-19 1:05 ` [Qemu-devel] [RFC v3 19/56] xtensa: " Emilio G. Cota
2018-10-21 13:10 ` Richard Henderson
2018-10-19 1:05 ` [Qemu-devel] [RFC v3 20/56] gdbstub: " Emilio G. Cota
2018-10-21 13:10 ` Richard Henderson
2018-10-19 1:05 ` [Qemu-devel] [RFC v3 21/56] openrisc: " Emilio G. Cota
2018-10-21 13:11 ` Richard Henderson
2018-10-19 1:05 ` [Qemu-devel] [RFC v3 22/56] cpu-exec: " Emilio G. Cota
2018-10-19 1:05 ` [Qemu-devel] [RFC v3 23/56] cpu: define cpu_interrupt_request helpers Emilio G. Cota
2018-10-21 13:15 ` Richard Henderson
2018-10-19 1:05 ` [Qemu-devel] [RFC v3 24/56] ppc: use cpu_reset_interrupt Emilio G. Cota
2018-10-21 13:15 ` Richard Henderson
2018-10-19 1:05 ` [Qemu-devel] [RFC v3 25/56] exec: " Emilio G. Cota
2018-10-21 13:17 ` Richard Henderson
2018-10-22 23:28 ` Emilio G. Cota
2018-10-19 1:05 ` [Qemu-devel] [RFC v3 26/56] i386: " Emilio G. Cota
2018-10-21 13:18 ` Richard Henderson
2018-10-19 1:05 ` [Qemu-devel] [RFC v3 27/56] s390x: " Emilio G. Cota
2018-10-21 13:18 ` Richard Henderson
2018-10-19 1:05 ` [Qemu-devel] [RFC v3 28/56] openrisc: " Emilio G. Cota
2018-10-21 13:18 ` Richard Henderson
2018-10-19 1:05 ` [Qemu-devel] [RFC v3 29/56] arm: convert to cpu_interrupt_request Emilio G. Cota
2018-10-21 13:21 ` Richard Henderson
2018-10-19 1:05 ` [Qemu-devel] [RFC v3 30/56] i386: " Emilio G. Cota
2018-10-21 13:27 ` Richard Henderson
2018-10-23 20:28 ` Emilio G. Cota
2018-10-19 1:06 ` [Qemu-devel] [RFC v3 31/56] ppc: " Emilio G. Cota
2018-10-19 1:06 ` [Qemu-devel] [RFC v3 32/56] sh4: " Emilio G. Cota
2018-10-21 13:28 ` Richard Henderson
2018-10-19 1:06 ` [Qemu-devel] [RFC v3 33/56] cris: " Emilio G. Cota
2018-10-21 13:29 ` Richard Henderson
2018-10-19 1:06 ` [Qemu-devel] [RFC v3 34/56] hppa: " Emilio G. Cota
2018-10-21 13:29 ` Richard Henderson
2018-10-19 1:06 ` [Qemu-devel] [RFC v3 35/56] lm32: " Emilio G. Cota
2018-10-21 13:29 ` Richard Henderson
2018-10-19 1:06 ` [Qemu-devel] [RFC v3 36/56] m68k: " Emilio G. Cota
2018-10-21 13:29 ` Richard Henderson
2018-10-19 1:06 ` [Qemu-devel] [RFC v3 37/56] mips: " Emilio G. Cota
2018-10-21 13:30 ` Richard Henderson
2018-10-22 23:38 ` Emilio G. Cota
2018-10-19 1:06 ` [Qemu-devel] [RFC v3 38/56] nios: " Emilio G. Cota
2018-10-21 13:30 ` Richard Henderson
2018-10-19 1:06 ` [Qemu-devel] [RFC v3 39/56] s390x: " Emilio G. Cota
2018-10-21 13:30 ` Richard Henderson
2018-10-19 1:06 ` [Qemu-devel] [RFC v3 40/56] alpha: " Emilio G. Cota
2018-10-21 13:31 ` Richard Henderson
2018-10-19 1:06 ` [Qemu-devel] [RFC v3 41/56] moxie: " Emilio G. Cota
2018-10-21 13:31 ` Richard Henderson
2018-10-19 1:06 ` [Qemu-devel] [RFC v3 42/56] sparc: " Emilio G. Cota
2018-10-21 13:32 ` Richard Henderson
2018-10-19 1:06 ` [Qemu-devel] [RFC v3 43/56] openrisc: " Emilio G. Cota
2018-10-21 13:32 ` Richard Henderson
2018-10-19 1:06 ` [Qemu-devel] [RFC v3 44/56] unicore32: " Emilio G. Cota
2018-10-21 13:33 ` Richard Henderson
2018-10-19 1:06 ` [Qemu-devel] [RFC v3 45/56] microblaze: " Emilio G. Cota
2018-10-21 13:33 ` Richard Henderson
2018-10-19 1:06 ` [Qemu-devel] [RFC v3 46/56] accel/tcg: " Emilio G. Cota
2018-10-21 13:34 ` Richard Henderson
2018-10-22 23:50 ` Emilio G. Cota
2018-10-23 2:17 ` Richard Henderson
2018-10-23 20:21 ` Emilio G. Cota [this message]
2018-10-19 1:06 ` [Qemu-devel] [RFC v3 47/56] cpu: call .cpu_has_work with the CPU lock held Emilio G. Cota
2018-10-19 1:06 ` [Qemu-devel] [RFC v3 48/56] ppc: acquire the BQL in cpu_has_work Emilio G. Cota
2018-10-19 6:58 ` Paolo Bonzini
2018-10-20 16:31 ` Emilio G. Cota
2018-10-21 13:42 ` Richard Henderson
2018-10-19 1:06 ` [Qemu-devel] [RFC v3 49/56] mips: " Emilio G. Cota
2018-10-19 1:06 ` [Qemu-devel] [RFC v3 50/56] s390: " Emilio G. Cota
2018-10-19 1:06 ` [Qemu-devel] [RFC v3 51/56] riscv: " Emilio G. Cota
2018-10-19 17:24 ` Palmer Dabbelt
2018-10-19 1:06 ` [Qemu-devel] [RFC v3 52/56] sparc: " Emilio G. Cota
2018-10-19 1:06 ` [Qemu-devel] [RFC v3 53/56] xtensa: " Emilio G. Cota
2018-10-19 1:06 ` [Qemu-devel] [RFC v3 54/56] cpu: protect most CPU state with cpu->lock Emilio G. Cota
2018-10-19 1:06 ` [Qemu-devel] [RFC v3 55/56] cpu: add async_run_on_cpu_no_bql Emilio G. Cota
2018-10-19 1:06 ` [Qemu-devel] [RFC v3 56/56] cputlb: queue async flush jobs without the BQL Emilio G. Cota
2018-10-19 6:59 ` [Qemu-devel] [RFC v3 0/56] per-CPU locks Paolo Bonzini
2018-10-19 14:50 ` Emilio G. Cota
2018-10-19 16:01 ` Paolo Bonzini
2018-10-19 19:29 ` Emilio G. Cota
2018-10-19 23:46 ` Emilio G. Cota
2018-10-22 15:30 ` 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=20181023202115.GA20137@flamenco \
--to=cota@braap.org \
--cc=crosthwaite.peter@gmail.com \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=richard.henderson@linaro.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 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).