[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [RFC v3 46/56] accel/tcg: convert to cpu_interrupt_requ
From: |
Richard Henderson |
Subject: |
Re: [Qemu-devel] [RFC v3 46/56] accel/tcg: convert to cpu_interrupt_request |
Date: |
Tue, 23 Oct 2018 03:17:11 +0100 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.2.1 |
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.
r~
- Re: [Qemu-devel] [RFC v3 33/56] cris: convert to cpu_interrupt_request, (continued)
[Qemu-devel] [RFC v3 34/56] hppa: convert to cpu_interrupt_request, Emilio G. Cota, 2018/10/18
[Qemu-devel] [RFC v3 40/56] alpha: convert to cpu_interrupt_request, Emilio G. Cota, 2018/10/18
[Qemu-devel] [RFC v3 44/56] unicore32: convert to cpu_interrupt_request, Emilio G. Cota, 2018/10/18
[Qemu-devel] [RFC v3 17/56] s390x: convert to cpu_halted, Emilio G. Cota, 2018/10/18
[Qemu-devel] [RFC v3 35/56] lm32: convert to cpu_interrupt_request, Emilio G. Cota, 2018/10/18