diff options
author | Geetha sowjanya <gakula@marvell.com> | 2021-09-28 11:25:26 +0530 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2021-09-28 14:10:24 +0100 |
commit | af3826db74d184bc9c2c9d3ff34548e5f317a6f3 (patch) | |
tree | 836de45caa99a753010ba58e732f6d1969f731e5 /include | |
parent | 13d45964c1b4cc8cc5b3693a4b2ba4992eea4370 (diff) | |
download | linux-stable-af3826db74d184bc9c2c9d3ff34548e5f317a6f3.tar.gz linux-stable-af3826db74d184bc9c2c9d3ff34548e5f317a6f3.tar.bz2 linux-stable-af3826db74d184bc9c2c9d3ff34548e5f317a6f3.zip |
octeontx2-pf: Use hardware register for CQE count
Current driver uses software CQ head pointer to poll on CQE
header in memory to determine if CQE is valid. Software needs
to make sure, that the reads of the CQE do not get re-ordered
so much that it ends up with an inconsistent view of the CQE.
To ensure that DMB barrier after read to first CQE cacheline
and before reading of the rest of the CQE is needed.
But having barrier for every CQE read will impact the performance,
instead use hardware CQ head and tail pointers to find the
valid number of CQEs.
Signed-off-by: Geetha sowjanya <gakula@marvell.com>
Signed-off-by: Sunil Kovvuri Goutham <sgoutham@marvell.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include')
-rw-r--r-- | include/linux/soc/marvell/octeontx2/asm.h | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/include/linux/soc/marvell/octeontx2/asm.h b/include/linux/soc/marvell/octeontx2/asm.h index fa1d6af0164e..0f79fd7f81a1 100644 --- a/include/linux/soc/marvell/octeontx2/asm.h +++ b/include/linux/soc/marvell/octeontx2/asm.h @@ -34,9 +34,23 @@ : [rf] "+r"(val) \ : [rs] "r"(addr)); \ }) + +static inline u64 otx2_atomic64_fetch_add(u64 incr, u64 *ptr) +{ + u64 result; + + asm volatile (".cpu generic+lse\n" + "ldadda %x[i], %x[r], [%[b]]" + : [r] "=r" (result), "+m" (*ptr) + : [i] "r" (incr), [b] "r" (ptr) + : "memory"); + return result; +} + #else #define otx2_lmt_flush(ioaddr) ({ 0; }) #define cn10k_lmt_flush(val, addr) ({ addr = val; }) +#define otx2_atomic64_fetch_add(incr, ptr) ({ incr; }) #endif #endif /* __SOC_OTX2_ASM_H */ |