Skip to content

Commit ca70432

Browse files
authored
Merge pull request #308 from tlauda/topic/atomic-return-val
atomic: atomic_add and atomic_sub return value
2 parents bde4baf + da6e02e commit ca70432

3 files changed

Lines changed: 14 additions & 10 deletions

File tree

src/arch/host/include/arch/atomic.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -56,14 +56,14 @@ static inline void arch_atomic_init(atomic_t *a, int32_t value)
5656
}
5757

5858
/* use gcc atomic built-ins for host library */
59-
static inline void arch_atomic_add(atomic_t *a, int32_t value)
59+
static inline int32_t arch_atomic_add(atomic_t *a, int32_t value)
6060
{
61-
__sync_fetch_and_add(&a->value, value);
61+
return __sync_fetch_and_add(&a->value, value);
6262
}
6363

64-
static inline void arch_atomic_sub(atomic_t *a, int32_t value)
64+
static inline int32_t arch_atomic_sub(atomic_t *a, int32_t value)
6565
{
66-
__sync_fetch_and_sub(&a->value, value);
66+
return __sync_fetch_and_sub(&a->value, value);
6767
}
6868

6969
#endif

src/arch/xtensa/include/arch/atomic.h

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ static inline void arch_atomic_init(atomic_t *a, int32_t value)
5454
arch_atomic_set(a, value);
5555
}
5656

57-
static inline void arch_atomic_add(atomic_t *a, int32_t value)
57+
static inline int32_t arch_atomic_add(atomic_t *a, int32_t value)
5858
{
5959
int32_t result, current;
6060

@@ -67,9 +67,11 @@ static inline void arch_atomic_add(atomic_t *a, int32_t value)
6767
: "=&a" (result), "=&a" (current)
6868
: "a" (&a->value), "a" (value)
6969
: "memory");
70+
71+
return (*(volatile int32_t *)&a->value);
7072
}
7173

72-
static inline void arch_atomic_sub(atomic_t *a, int32_t value)
74+
static inline int32_t arch_atomic_sub(atomic_t *a, int32_t value)
7375
{
7476
int32_t result, current;
7577

@@ -82,6 +84,8 @@ static inline void arch_atomic_sub(atomic_t *a, int32_t value)
8284
: "=&a" (result), "=&a" (current)
8385
: "a" (&a->value), "a" (value)
8486
: "memory");
87+
88+
return (*(volatile int32_t *)&a->value);
8589
}
8690

8791
#endif

src/include/sof/atomic.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -50,14 +50,14 @@ static inline void atomic_set(atomic_t *a, int32_t value)
5050
arch_atomic_set(a, value);
5151
}
5252

53-
static inline void atomic_add(atomic_t *a, int32_t value)
53+
static inline int32_t atomic_add(atomic_t *a, int32_t value)
5454
{
55-
arch_atomic_add(a, value);
55+
return arch_atomic_add(a, value);
5656
}
5757

58-
static inline void atomic_sub(atomic_t *a, int32_t value)
58+
static inline int32_t atomic_sub(atomic_t *a, int32_t value)
5959
{
60-
arch_atomic_sub(a, value);
60+
return arch_atomic_sub(a, value);
6161
}
6262

6363
#endif

0 commit comments

Comments
 (0)