CAS is compare and swap. CASL is compare and swap with release semantics. But on CNXK platform, the functionality of CAS* instructions is completely different when it is done to specific addresses. These APIs are meant for use for such special cases. These cannot be made ARM generic.
Ashwin Sekhar T K > -----Original Message----- > From: Ferruh Yigit <[email protected]> > Sent: Tuesday, January 11, 2022 5:42 PM > To: Ashwin Sekhar Thalakalath Kottilveetil <[email protected]>; > [email protected]; Honnappa Nagarahalli <[email protected]>; > Ruifeng Wang (Arm Technology China) <[email protected]> > Cc: Nithin Kumar Dabilpuram <[email protected]>; Jerin Jacob > Kollanukkaran <[email protected]>; Sunil Kumar Kori > <[email protected]>; Satha Koteswara Rao Kottidi > <[email protected]>; Pavan Nikhilesh Bhagavatula > <[email protected]>; Kiran Kumar Kokkilagadda > <[email protected]>; Satheesh Paul <[email protected]>; > Anoob Joseph <[email protected]>; Akhil Goyal <[email protected]> > Subject: [EXT] Re: [PATCH] common/cnxk: use cas with release semantics for > batch alloc > > External Email > > ---------------------------------------------------------------------- > On 1/11/2022 12:08 PM, Ferruh Yigit wrote: > > On 11/30/2021 5:45 AM, Ashwin Sekhar T K wrote: > >> Before issuing the batch alloc, we clear the first word of cache > >> lines so that NPA can update the status. Make sure that this line > >> clear is flushed before the batch alloc is issued. > >> > >> Signed-off-by: Ashwin Sekhar T K <[email protected]> > >> --- > >> drivers/common/cnxk/roc_io.h | 12 ++++++++++++ > >> drivers/common/cnxk/roc_io_generic.h | 9 +++++++++ > >> drivers/common/cnxk/roc_npa.h | 2 +- > >> 3 files changed, 22 insertions(+), 1 deletion(-) > >> > >> diff --git a/drivers/common/cnxk/roc_io.h > >> b/drivers/common/cnxk/roc_io.h index fe5f7f46d0..4f15503c29 100644 > >> --- a/drivers/common/cnxk/roc_io.h > >> +++ b/drivers/common/cnxk/roc_io.h > >> @@ -78,6 +78,18 @@ roc_atomic64_cas(uint64_t compare, uint64_t > swap, > >> int64_t *ptr) > >> return compare; > >> } > >> +static __plt_always_inline uint64_t > >> +roc_atomic64_casl(uint64_t compare, uint64_t swap, int64_t *ptr) { > >> + asm volatile(PLT_CPU_FEATURE_PREAMBLE > >> + "casl %[compare], %[swap], [%[ptr]]\n" > >> + : [compare] "+r"(compare) > >> + : [swap] "r"(swap), [ptr] "r"(ptr) > >> + : "memory"); > >> + > > > > out of curiosity, what is the "cas with release semantics"? > > briefly, what is the difference between 'cas' and 'casl'? > > + Honnappa & Ruifeng, > > Isn't this API Arm wide, instead of being cnxk specific? > Does it make sense to make this API for arm and cnxk use from there?

