diff --git a/hw/audio/hda-codec.c b/hw/audio/hda-codec.c index fc4945086b4e9342391afa44a271f5e5c88f844d..31c66d4255c642f73a7c2167cb372b2df1c5a6fe 100644 --- a/hw/audio/hda-codec.c +++ b/hw/audio/hda-codec.c @@ -18,7 +18,6 @@ */ #include "qemu/osdep.h" -#include "qemu/atomic.h" #include "hw/hw.h" #include "hw/pci/pci.h" #include "intel-hda.h" @@ -209,7 +208,7 @@ static inline void hda_timer_sync_adjust(HDAAudioStream *st, int64_t target_pos) } trace_hda_audio_adjust(st->node->name, target_pos); - atomic_fetch_add(&st->buft_start, corr); + st->buft_start += corr; } static void hda_audio_input_timer(void *opaque) @@ -218,9 +217,9 @@ static void hda_audio_input_timer(void *opaque) int64_t now = qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL); - int64_t buft_start = atomic_fetch_add(&st->buft_start, 0); - int64_t wpos = atomic_fetch_add(&st->wpos, 0); - int64_t rpos = atomic_fetch_add(&st->rpos, 0); + int64_t buft_start = st->buft_start; + int64_t wpos = st->wpos; + int64_t rpos = st->rpos; int64_t wanted_rpos = hda_bytes_per_second(st) * (now - buft_start) / NANOSECONDS_PER_SECOND; @@ -242,7 +241,7 @@ static void hda_audio_input_timer(void *opaque) } rpos += chunk; to_transfer -= chunk; - atomic_fetch_add(&st->rpos, chunk); + st->rpos += chunk; } out_timer: @@ -256,8 +255,8 @@ static void hda_audio_input_cb(void *opaque, int avail) { HDAAudioStream *st = opaque; - int64_t wpos = atomic_fetch_add(&st->wpos, 0); - int64_t rpos = atomic_fetch_add(&st->rpos, 0); + int64_t wpos = st->wpos; + int64_t rpos = st->rpos; int64_t to_transfer = audio_MIN(B_SIZE - (wpos - rpos), avail); @@ -269,7 +268,7 @@ static void hda_audio_input_cb(void *opaque, int avail) uint32_t read = AUD_read(st->voice.in, st->buf + start, chunk); wpos += read; to_transfer -= read; - atomic_fetch_add(&st->wpos, read); + st->wpos += read; if (chunk != read) { break; } @@ -282,9 +281,9 @@ static void hda_audio_output_timer(void *opaque) int64_t now = qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL); - int64_t buft_start = atomic_fetch_add(&st->buft_start, 0); - int64_t wpos = atomic_fetch_add(&st->wpos, 0); - int64_t rpos = atomic_fetch_add(&st->rpos, 0); + int64_t buft_start = st->buft_start; + int64_t wpos = st->wpos; + int64_t rpos = st->rpos; int64_t wanted_wpos = hda_bytes_per_second(st) * (now - buft_start) / NANOSECONDS_PER_SECOND; @@ -306,7 +305,7 @@ static void hda_audio_output_timer(void *opaque) } wpos += chunk; to_transfer -= chunk; - atomic_fetch_add(&st->wpos, chunk); + st->wpos += chunk; } out_timer: @@ -320,8 +319,8 @@ static void hda_audio_output_cb(void *opaque, int avail) { HDAAudioStream *st = opaque; - int64_t wpos = atomic_fetch_add(&st->wpos, 0); - int64_t rpos = atomic_fetch_add(&st->rpos, 0); + int64_t wpos = st->wpos; + int64_t rpos = st->rpos; int64_t to_transfer = audio_MIN(wpos - rpos, avail); @@ -342,7 +341,7 @@ static void hda_audio_output_cb(void *opaque, int avail) uint32_t written = AUD_write(st->voice.out, st->buf + start, chunk); rpos += written; to_transfer -= written; - atomic_fetch_add(&st->rpos, written); + st->rpos += written; if (chunk != written) { break; }