1c2e8280a4f1bf8a586946b7ee4f63ae817f8c74dmbligh/* 2c2e8280a4f1bf8a586946b7ee4f63ae817f8c74dmbligh * Copyright 2008 Google Inc. All Rights Reserved. 3c2e8280a4f1bf8a586946b7ee4f63ae817f8c74dmbligh * Author: md@google.com (Michael Davidson) 4c2e8280a4f1bf8a586946b7ee4f63ae817f8c74dmbligh * 5c2e8280a4f1bf8a586946b7ee4f63ae817f8c74dmbligh * Based on time-warp-test.c, which is: 6c2e8280a4f1bf8a586946b7ee4f63ae817f8c74dmbligh * Copyright (C) 2005, Ingo Molnar 7c2e8280a4f1bf8a586946b7ee4f63ae817f8c74dmbligh */ 8c2e8280a4f1bf8a586946b7ee4f63ae817f8c74dmbligh 9c2e8280a4f1bf8a586946b7ee4f63ae817f8c74dmbligh#ifndef SPINLOCK_H_ 10c2e8280a4f1bf8a586946b7ee4f63ae817f8c74dmbligh#define SPINLOCK_H_ 11c2e8280a4f1bf8a586946b7ee4f63ae817f8c74dmbligh 12c2e8280a4f1bf8a586946b7ee4f63ae817f8c74dmblightypedef unsigned long spinlock_t; 13c2e8280a4f1bf8a586946b7ee4f63ae817f8c74dmbligh 14c2e8280a4f1bf8a586946b7ee4f63ae817f8c74dmblighstatic inline void spin_lock(spinlock_t *lock) 15c2e8280a4f1bf8a586946b7ee4f63ae817f8c74dmbligh{ 16c2e8280a4f1bf8a586946b7ee4f63ae817f8c74dmbligh __asm__ __volatile__( 17c2e8280a4f1bf8a586946b7ee4f63ae817f8c74dmbligh "1: rep; nop\n" 18c2e8280a4f1bf8a586946b7ee4f63ae817f8c74dmbligh " lock; btsl $0,%0\n" 19c2e8280a4f1bf8a586946b7ee4f63ae817f8c74dmbligh "jc 1b\n" 20c2e8280a4f1bf8a586946b7ee4f63ae817f8c74dmbligh : "=g"(*lock) : : "memory"); 21c2e8280a4f1bf8a586946b7ee4f63ae817f8c74dmbligh} 22c2e8280a4f1bf8a586946b7ee4f63ae817f8c74dmbligh 23c2e8280a4f1bf8a586946b7ee4f63ae817f8c74dmblighstatic inline void spin_unlock(spinlock_t *lock) 24c2e8280a4f1bf8a586946b7ee4f63ae817f8c74dmbligh{ 25c2e8280a4f1bf8a586946b7ee4f63ae817f8c74dmbligh __asm__ __volatile__("movl $0,%0; rep; nop" : "=g"(*lock) :: "memory"); 26c2e8280a4f1bf8a586946b7ee4f63ae817f8c74dmbligh} 27c2e8280a4f1bf8a586946b7ee4f63ae817f8c74dmbligh 28c2e8280a4f1bf8a586946b7ee4f63ae817f8c74dmbligh#endif /* SPINLOCK_H_ */ 29