[EXT] Re: [PATCH] common/cnxk: use cas with release semantics for batch alloc

Ashwin Sekhar Thalakalath Kottilveetil asekhar at marvell.com
Tue Jan 11 13:26:22 CET 2022


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 <ferruh.yigit at intel.com>
> Sent: Tuesday, January 11, 2022 5:42 PM
> To: Ashwin Sekhar Thalakalath Kottilveetil <asekhar at marvell.com>;
> dev at dpdk.org; Honnappa Nagarahalli <Honnappa.Nagarahalli at arm.com>;
> Ruifeng Wang (Arm Technology China) <Ruifeng.Wang at arm.com>
> Cc: Nithin Kumar Dabilpuram <ndabilpuram at marvell.com>; Jerin Jacob
> Kollanukkaran <jerinj at marvell.com>; Sunil Kumar Kori
> <skori at marvell.com>; Satha Koteswara Rao Kottidi
> <skoteshwar at marvell.com>; Pavan Nikhilesh Bhagavatula
> <pbhagavatula at marvell.com>; Kiran Kumar Kokkilagadda
> <kirankumark at marvell.com>; Satheesh Paul <psatheesh at marvell.com>;
> Anoob Joseph <anoobj at marvell.com>; Akhil Goyal <gakhil at marvell.com>
> 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 <asekhar at marvell.com>
> >> ---
> >>   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?


More information about the dev mailing list