Hi Andrzej,
Thanks for your series!
On Thu, Dec 22, 2022 at 12:49 PM Andrzej Hajda <andrzej.hajda@xxxxxxxxx> wrote:
I hope there will be place for such tiny helper in kernel.Upon closer look, shouldn't that be
Quick cocci analyze shows there is probably few thousands places
where it could be useful.
I am not sure who is good person to review/ack such patches,
so I've used my intuition to construct to/cc lists, sorry for mistakes.
This is the 2nd approach of the same idea, with comments addressed[0].
The helper is tiny and there are advices we can leave without it, so
I want to present few arguments why it would be good to have it:
1. Code readability/simplification/number of lines:
Real example from drivers/net/ethernet/mellanox/mlx5/core/esw/qos.c:
- previous_min_rate = evport->qos.min_rate;
- evport->qos.min_rate = min_rate;
+ previous_min_rate = __xchg(evport->qos.min_rate, min_rate);
previous_min_rate = __xchg(&evport->qos.min_rate, min_rate);
?
For sure the code is more compact, and IMHO more readable.Before I realized the missing "&", I wondered how this is different
2. Presence of similar helpers in other somehow related languages/libs:
a) Rust[1]: 'replace' from std::mem module, there is also 'take'
helper (__xchg(&x, 0)), which is the same as private helper in
i915 - fetch_and_zero, see latest patch.
b) C++ [2]: 'exchange' from utility header.
If the idea is OK there are still 2 qestions to answer:
1. Name of the helper, __xchg follows kernel conventions,
but for me Rust names are also OK.
from swap(), so naming is important.
https://elixir.bootlin.com/linux/latest/source/include/linux/minmax.h#L139
Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@xxxxxxxxxxxxxx
In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds