[PATCH] m32r: update include/asm-m32r/semaphore.h
This patch updates include/asm-m32r/semaphore.h for good readability and maintainability. Signed-off-by: Hirokazu Takata <takata@linux-m32r.org> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
8e8ff02c0b
commit
fa372810e5
|
@ -9,7 +9,7 @@
|
||||||
* SMP- and interrupt-safe semaphores..
|
* SMP- and interrupt-safe semaphores..
|
||||||
*
|
*
|
||||||
* Copyright (C) 1996 Linus Torvalds
|
* Copyright (C) 1996 Linus Torvalds
|
||||||
* Copyright (C) 2004 Hirokazu Takata <takata at linux-m32r.org>
|
* Copyright (C) 2004, 2006 Hirokazu Takata <takata at linux-m32r.org>
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <linux/config.h>
|
#include <linux/config.h>
|
||||||
|
@ -77,27 +77,8 @@ asmlinkage void __up(struct semaphore * sem);
|
||||||
*/
|
*/
|
||||||
static inline void down(struct semaphore * sem)
|
static inline void down(struct semaphore * sem)
|
||||||
{
|
{
|
||||||
unsigned long flags;
|
|
||||||
long count;
|
|
||||||
|
|
||||||
might_sleep();
|
might_sleep();
|
||||||
local_irq_save(flags);
|
if (unlikely(atomic_dec_return(&sem->count) < 0))
|
||||||
__asm__ __volatile__ (
|
|
||||||
"# down \n\t"
|
|
||||||
DCACHE_CLEAR("%0", "r4", "%1")
|
|
||||||
M32R_LOCK" %0, @%1; \n\t"
|
|
||||||
"addi %0, #-1; \n\t"
|
|
||||||
M32R_UNLOCK" %0, @%1; \n\t"
|
|
||||||
: "=&r" (count)
|
|
||||||
: "r" (&sem->count)
|
|
||||||
: "memory"
|
|
||||||
#ifdef CONFIG_CHIP_M32700_TS1
|
|
||||||
, "r4"
|
|
||||||
#endif /* CONFIG_CHIP_M32700_TS1 */
|
|
||||||
);
|
|
||||||
local_irq_restore(flags);
|
|
||||||
|
|
||||||
if (unlikely(count < 0))
|
|
||||||
__down(sem);
|
__down(sem);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -107,28 +88,10 @@ static inline void down(struct semaphore * sem)
|
||||||
*/
|
*/
|
||||||
static inline int down_interruptible(struct semaphore * sem)
|
static inline int down_interruptible(struct semaphore * sem)
|
||||||
{
|
{
|
||||||
unsigned long flags;
|
|
||||||
long count;
|
|
||||||
int result = 0;
|
int result = 0;
|
||||||
|
|
||||||
might_sleep();
|
might_sleep();
|
||||||
local_irq_save(flags);
|
if (unlikely(atomic_dec_return(&sem->count) < 0))
|
||||||
__asm__ __volatile__ (
|
|
||||||
"# down_interruptible \n\t"
|
|
||||||
DCACHE_CLEAR("%0", "r4", "%1")
|
|
||||||
M32R_LOCK" %0, @%1; \n\t"
|
|
||||||
"addi %0, #-1; \n\t"
|
|
||||||
M32R_UNLOCK" %0, @%1; \n\t"
|
|
||||||
: "=&r" (count)
|
|
||||||
: "r" (&sem->count)
|
|
||||||
: "memory"
|
|
||||||
#ifdef CONFIG_CHIP_M32700_TS1
|
|
||||||
, "r4"
|
|
||||||
#endif /* CONFIG_CHIP_M32700_TS1 */
|
|
||||||
);
|
|
||||||
local_irq_restore(flags);
|
|
||||||
|
|
||||||
if (unlikely(count < 0))
|
|
||||||
result = __down_interruptible(sem);
|
result = __down_interruptible(sem);
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
|
@ -174,26 +137,7 @@ static inline int down_trylock(struct semaphore * sem)
|
||||||
*/
|
*/
|
||||||
static inline void up(struct semaphore * sem)
|
static inline void up(struct semaphore * sem)
|
||||||
{
|
{
|
||||||
unsigned long flags;
|
if (unlikely(atomic_inc_return(&sem->count) <= 0))
|
||||||
long count;
|
|
||||||
|
|
||||||
local_irq_save(flags);
|
|
||||||
__asm__ __volatile__ (
|
|
||||||
"# up \n\t"
|
|
||||||
DCACHE_CLEAR("%0", "r4", "%1")
|
|
||||||
M32R_LOCK" %0, @%1; \n\t"
|
|
||||||
"addi %0, #1; \n\t"
|
|
||||||
M32R_UNLOCK" %0, @%1; \n\t"
|
|
||||||
: "=&r" (count)
|
|
||||||
: "r" (&sem->count)
|
|
||||||
: "memory"
|
|
||||||
#ifdef CONFIG_CHIP_M32700_TS1
|
|
||||||
, "r4"
|
|
||||||
#endif /* CONFIG_CHIP_M32700_TS1 */
|
|
||||||
);
|
|
||||||
local_irq_restore(flags);
|
|
||||||
|
|
||||||
if (unlikely(count <= 0))
|
|
||||||
__up(sem);
|
__up(sem);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue