# Re: \[PATCH 0/24\] make atomic\_read() behave consistently across all architectures

- From: Chris Snook \<hidden\>
- Date: 2007-08-16 19:58:46 
- List: netdev
- Page: https://ratatoskr.run/netdev/2007/08/995248
- Thread: https://ratatoskr.run/linux-arch/2007/08/991524/t/2.md

```text
Ilpo Järvinen wrote:
> On Thu, 16 Aug 2007, Herbert Xu wrote:
>
>> We've been through that already.  If it's a busy-wait it
>> should use cpu_relax.
>
> I looked around a bit by using some command lines and ended up wondering if these are equal to busy-wait case (and should be fixed) or not:
>
> ./drivers/telephony/ixj.c
> 6674:   while (atomic_read(&j->DSPWrite) > 0)
> 6675-           atomic_dec(&j->DSPWrite);
>
> ...besides that, there are couple of more similar cases in the same file (with braces)...

atomic_dec() already has volatile behavior everywhere, so this is semantically okay, but this code (and any like it) should be calling cpu_relax() each iteration through the loop, unless there's a compelling reason not to.  I'll allow that for some hardware drivers (possibly this one) such a compelling reason may exist, but hardware-independent core subsystems probably have no excuse.

If the maintainer of this code doesn't see a compelling reason to add cpu_relax() in this loop, then it should be patched.

	-- Chris
```
