* One question about API cpumask_setall()
@ 2026-07-28 8:16 Bibo Mao
2026-07-29 1:55 ` Yury Norov
0 siblings, 1 reply; 5+ messages in thread
From: Bibo Mao @ 2026-07-28 8:16 UTC (permalink / raw)
To: Yury Norov; +Cc: Rasmus Villemoes, linux-kernel
Hi,
I am preparing to use API cpumask_setall() for TLB flush on LoongArch
KVM side. There are cpumask_test_and_clear_cpu/cpumask_setall() APIs, it
seems that API cpumask_setall() does not support atomic operation.
Do you think it is reasonable to add new API similar with
cpumask_setall() which supports atomic operation?
Regards
Bibo Mao
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: One question about API cpumask_setall()
2026-07-28 8:16 One question about API cpumask_setall() Bibo Mao
@ 2026-07-29 1:55 ` Yury Norov
2026-07-29 2:13 ` Bibo Mao
0 siblings, 1 reply; 5+ messages in thread
From: Yury Norov @ 2026-07-29 1:55 UTC (permalink / raw)
To: Bibo Mao; +Cc: Yury Norov, Rasmus Villemoes, linux-kernel
On Tue, Jul 28, 2026 at 04:16:27PM +0800, Bibo Mao wrote:
> Hi,
>
> I am preparing to use API cpumask_setall() for TLB flush on LoongArch KVM
> side. There are cpumask_test_and_clear_cpu/cpumask_setall() APIs, it seems
> that API cpumask_setall() does not support atomic operation.
>
> Do you think it is reasonable to add new API similar with cpumask_setall()
> which supports atomic operation?
Maybe reasonable, but it's impossible. cpumask is a bitmap, which in
turn is an array of unsigned longs. There's no atomic operations on
arrays.
Thanks,
Yury
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: One question about API cpumask_setall()
2026-07-29 1:55 ` Yury Norov
@ 2026-07-29 2:13 ` Bibo Mao
2026-07-29 17:57 ` Yury Norov
0 siblings, 1 reply; 5+ messages in thread
From: Bibo Mao @ 2026-07-29 2:13 UTC (permalink / raw)
To: Yury Norov; +Cc: Yury Norov, Rasmus Villemoes, linux-kernel
On 2026/7/29 上午9:55, Yury Norov wrote:
> On Tue, Jul 28, 2026 at 04:16:27PM +0800, Bibo Mao wrote:
>> Hi,
>>
>> I am preparing to use API cpumask_setall() for TLB flush on LoongArch KVM
>> side. There are cpumask_test_and_clear_cpu/cpumask_setall() APIs, it seems
>> that API cpumask_setall() does not support atomic operation.
>>
>> Do you think it is reasonable to add new API similar with cpumask_setall()
>> which supports atomic operation?
>
> Maybe reasonable, but it's impossible. cpumask is a bitmap, which in
> turn is an array of unsigned longs. There's no atomic operations on
> arrays.
It should be workable with atomic operation on unsigned long, rather
than the array of unsigned longs, the API cpumask_test_and_clear_cpu is
atomic operation on unsigned long also.
Is it ok to use smp_store_mb() to fill the bitmap with the similar API
cpumask_setall()? where xchg() is used in smp_store_mb() wrapper instead.
Regards
Bibo Mao
>
> Thanks,
> Yury
>
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: One question about API cpumask_setall()
2026-07-29 2:13 ` Bibo Mao
@ 2026-07-29 17:57 ` Yury Norov
2026-07-30 6:41 ` Bibo Mao
0 siblings, 1 reply; 5+ messages in thread
From: Yury Norov @ 2026-07-29 17:57 UTC (permalink / raw)
To: Bibo Mao; +Cc: Yury Norov, Rasmus Villemoes, linux-kernel
On Wed, Jul 29, 2026 at 10:13:56AM +0800, Bibo Mao wrote:
>
>
> On 2026/7/29 上午9:55, Yury Norov wrote:
> > On Tue, Jul 28, 2026 at 04:16:27PM +0800, Bibo Mao wrote:
> > > Hi,
> > >
> > > I am preparing to use API cpumask_setall() for TLB flush on LoongArch KVM
> > > side. There are cpumask_test_and_clear_cpu/cpumask_setall() APIs, it seems
> > > that API cpumask_setall() does not support atomic operation.
> > >
> > > Do you think it is reasonable to add new API similar with cpumask_setall()
> > > which supports atomic operation?
> >
> > Maybe reasonable, but it's impossible. cpumask is a bitmap, which in
> > turn is an array of unsigned longs. There's no atomic operations on
> > arrays.
> It should be workable with atomic operation on unsigned long, rather than
> the array of unsigned longs, the API cpumask_test_and_clear_cpu is atomic
> operation on unsigned long also.
No, cpumask_test_and_clear_cpu is atomic() operates on cpumask_t*,
which is a pointer to unsigned long.
> Is it ok to use smp_store_mb() to fill the bitmap with the similar API
> cpumask_setall()? where xchg() is used in smp_store_mb() wrapper instead.
If your bitmap is longer than 1 word, you'll have to issue 2 or more
smp_store_mb()'s. Then, a series of atomic operations is not atomic
itself.
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: One question about API cpumask_setall()
2026-07-29 17:57 ` Yury Norov
@ 2026-07-30 6:41 ` Bibo Mao
0 siblings, 0 replies; 5+ messages in thread
From: Bibo Mao @ 2026-07-30 6:41 UTC (permalink / raw)
To: Yury Norov; +Cc: Yury Norov, Rasmus Villemoes, linux-kernel
On 2026/7/30 上午1:57, Yury Norov wrote:
> On Wed, Jul 29, 2026 at 10:13:56AM +0800, Bibo Mao wrote:
>>
>>
>> On 2026/7/29 上午9:55, Yury Norov wrote:
>>> On Tue, Jul 28, 2026 at 04:16:27PM +0800, Bibo Mao wrote:
>>>> Hi,
>>>>
>>>> I am preparing to use API cpumask_setall() for TLB flush on LoongArch KVM
>>>> side. There are cpumask_test_and_clear_cpu/cpumask_setall() APIs, it seems
>>>> that API cpumask_setall() does not support atomic operation.
>>>>
>>>> Do you think it is reasonable to add new API similar with cpumask_setall()
>>>> which supports atomic operation?
>>>
>>> Maybe reasonable, but it's impossible. cpumask is a bitmap, which in
>>> turn is an array of unsigned longs. There's no atomic operations on
>>> arrays.
>> It should be workable with atomic operation on unsigned long, rather than
>> the array of unsigned longs, the API cpumask_test_and_clear_cpu is atomic
>> operation on unsigned long also.
>
> No, cpumask_test_and_clear_cpu is atomic() operates on cpumask_t*,
> which is a pointer to unsigned long.
>
>> Is it ok to use smp_store_mb() to fill the bitmap with the similar API
>> cpumask_setall()? where xchg() is used in smp_store_mb() wrapper instead.
>
> If your bitmap is longer than 1 word, you'll have to issue 2 or more
> smp_store_mb()'s. Then, a series of atomic operations is not atomic
> itself.
I understand what you say, the whole series of atomic operations is not
atomic.
My concern is whether cpumask_test_and_clear_cpu() operation on
cpumask_t* will invalidate non-atomic write operation on another CPU.
From MESI/MOSI protocol, this will not happen, only that order of write
and atomic test_and_clear operation may be different.
Regards
Bibo Mao
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2026-07-30 6:42 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-07-28 8:16 One question about API cpumask_setall() Bibo Mao
2026-07-29 1:55 ` Yury Norov
2026-07-29 2:13 ` Bibo Mao
2026-07-29 17:57 ` Yury Norov
2026-07-30 6:41 ` Bibo Mao
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.