Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions src/arch/host/include/arch/atomic.h
Original file line number Diff line number Diff line change
Expand Up @@ -56,14 +56,14 @@ static inline void arch_atomic_init(atomic_t *a, int32_t value)
}

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

static inline void arch_atomic_sub(atomic_t *a, int32_t value)
static inline int32_t arch_atomic_sub(atomic_t *a, int32_t value)
{
__sync_fetch_and_sub(&a->value, value);
return __sync_fetch_and_sub(&a->value, value);
}

#endif
8 changes: 6 additions & 2 deletions src/arch/xtensa/include/arch/atomic.h
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ static inline void arch_atomic_init(atomic_t *a, int32_t value)
arch_atomic_set(a, value);
}

static inline void arch_atomic_add(atomic_t *a, int32_t value)
static inline int32_t arch_atomic_add(atomic_t *a, int32_t value)
{
int32_t result, current;

Expand All @@ -67,9 +67,11 @@ static inline void arch_atomic_add(atomic_t *a, int32_t value)
: "=&a" (result), "=&a" (current)
: "a" (&a->value), "a" (value)
: "memory");

return (*(volatile int32_t *)&a->value);
}

static inline void arch_atomic_sub(atomic_t *a, int32_t value)
static inline int32_t arch_atomic_sub(atomic_t *a, int32_t value)
{
int32_t result, current;

Expand All @@ -82,6 +84,8 @@ static inline void arch_atomic_sub(atomic_t *a, int32_t value)
: "=&a" (result), "=&a" (current)
: "a" (&a->value), "a" (value)
: "memory");

return (*(volatile int32_t *)&a->value);
}

#endif
8 changes: 4 additions & 4 deletions src/include/sof/atomic.h
Original file line number Diff line number Diff line change
Expand Up @@ -50,14 +50,14 @@ static inline void atomic_set(atomic_t *a, int32_t value)
arch_atomic_set(a, value);
}

static inline void atomic_add(atomic_t *a, int32_t value)
static inline int32_t atomic_add(atomic_t *a, int32_t value)
{
arch_atomic_add(a, value);
return arch_atomic_add(a, value);
}

static inline void atomic_sub(atomic_t *a, int32_t value)
static inline int32_t atomic_sub(atomic_t *a, int32_t value)
{
arch_atomic_sub(a, value);
return arch_atomic_sub(a, value);
}

#endif