[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [RFC PATCH v4 13/23] cpus: only take BQL for sleeping t
From: |
Pavel Dovgalyuk |
Subject: |
Re: [Qemu-devel] [RFC PATCH v4 13/23] cpus: only take BQL for sleeping threads |
Date: |
Fri, 19 Jan 2018 15:25:10 +0300 |
> -----Original Message-----
> From: Paolo Bonzini [mailto:address@hidden
> Sent: Friday, January 19, 2018 3:20 PM
> To: Pavel Dovgalyuk; 'Pavel Dovgalyuk'; address@hidden
> Cc: address@hidden; address@hidden; address@hidden; address@hidden;
> address@hidden; address@hidden; address@hidden; address@hidden;
> address@hidden; address@hidden
> Subject: Re: [RFC PATCH v4 13/23] cpus: only take BQL for sleeping threads
>
> On 19/01/2018 13:05, Pavel Dovgalyuk wrote:
> >> From: Paolo Bonzini [mailto:address@hidden
> >> On 19/01/2018 09:44, Pavel Dovgalyuk wrote:
> >>> while (all_cpu_threads_idle()) {
> >>> + qemu_mutex_lock_iothread();
> >>> stop_tcg_kick_timer();
> >>> qemu_cond_wait(cpu->halt_cond, &qemu_global_mutex);
> >>> + qemu_mutex_unlock_iothread();
> >>> }
> >>
> >> cpu_has_work cannot be called outside BQL yet. You first need to access
> >> cpu->interrupt_request with atomics.
> >>
> >> In general, testing the condition outside the mutex is a very dangerous
> >> pattern (and I'm usually the one who enjoys dangerous patterns).
> >
> > It means, that I'll have to fix all the has_work function to avoid races,
> > because x86_cpu_has_work may have them?
>
> Why only x86_cpu_has_work?
>
> Even reading cs->interrupt_request outside the mutex is unsafe.
All the vcpu function that access interrupt controller or peripheral state may
be unsafe?
How can it work safely then?
Pavel Dovgalyuk
- [Qemu-devel] [RFC PATCH v4 10/23] replay: save prior value of the host clock, (continued)
- [Qemu-devel] [RFC PATCH v4 10/23] replay: save prior value of the host clock, Pavel Dovgalyuk, 2018/01/19
- [Qemu-devel] [RFC PATCH v4 11/23] target/arm/arm-powertctl: drop BQL assertions, Pavel Dovgalyuk, 2018/01/19
- [Qemu-devel] [RFC PATCH v4 12/23] cpus: push BQL lock to qemu_*_wait_io_event, Pavel Dovgalyuk, 2018/01/19
- [Qemu-devel] [RFC PATCH v4 14/23] replay/replay.c: bump REPLAY_VERSION again, Pavel Dovgalyuk, 2018/01/19
- [Qemu-devel] [RFC PATCH v4 13/23] cpus: only take BQL for sleeping threads, Pavel Dovgalyuk, 2018/01/19
- Re: [Qemu-devel] [RFC PATCH v4 13/23] cpus: only take BQL for sleeping threads, Paolo Bonzini, 2018/01/19
- Re: [Qemu-devel] [RFC PATCH v4 13/23] cpus: only take BQL for sleeping threads, Pavel Dovgalyuk, 2018/01/19
- Re: [Qemu-devel] [RFC PATCH v4 13/23] cpus: only take BQL for sleeping threads, Paolo Bonzini, 2018/01/19
- Re: [Qemu-devel] [RFC PATCH v4 13/23] cpus: only take BQL for sleeping threads,
Pavel Dovgalyuk <=
- Re: [Qemu-devel] [RFC PATCH v4 13/23] cpus: only take BQL for sleeping threads, Paolo Bonzini, 2018/01/19
- Re: [Qemu-devel] [RFC PATCH v4 13/23] cpus: only take BQL for sleeping threads, Pavel Dovgalyuk, 2018/01/19
- Re: [Qemu-devel] [RFC PATCH v4 13/23] cpus: only take BQL for sleeping threads, Pavel Dovgalyuk, 2018/01/19
- Re: [Qemu-devel] [RFC PATCH v4 13/23] cpus: only take BQL for sleeping threads, Paolo Bonzini, 2018/01/19
- Re: [Qemu-devel] [RFC PATCH v4 13/23] cpus: only take BQL for sleeping threads, Pavel Dovgalyuk, 2018/01/22
[Qemu-devel] [RFC PATCH v4 15/23] replay/replay-internal.c: track holding of replay_lock, Pavel Dovgalyuk, 2018/01/19
[Qemu-devel] [RFC PATCH v4 16/23] replay: make locking visible outside replay code, Pavel Dovgalyuk, 2018/01/19
[Qemu-devel] [RFC PATCH v4 17/23] replay: push replay_mutex_lock up the call tree, Pavel Dovgalyuk, 2018/01/19
[Qemu-devel] [RFC PATCH v4 18/23] replay: don't destroy mutex at exit, Pavel Dovgalyuk, 2018/01/19
[Qemu-devel] [RFC PATCH v4 20/23] replay: avoid recursive call of checkpoints, Pavel Dovgalyuk, 2018/01/19