Posted By: Quasimodo (Quasimodo) on 'CZprogram'
Title: spinlock
Date: Mon Sep 6 17:33:29 2004
Zdar,
napsal jsem driver a nechce se mu fungovat. Takze hned jako prvni pokus jsem
si dal preklad s prepinacem -pedantic. Kompilator mi hned vzapeti nasel jednu
"zajimavost":
#define DEBUG_SPINLOCKS 0 /* 0 == no debugging, 1 == maintain lock
state,
2 == full debug */
#if (DEBUG_SPINLOCKS < 1)
#define atomic_dec_and_lock(atomic,lock) atomic_dec_and_test(atomic)
#define ATOMIC_DEC_AND_LOCK
/*
* Your basic spinlocks, allowing only a single CPU anywhere
*/
typedef struct { } spinlock_t;
#define SPIN_LOCK_UNLOCKED (spinlock_t) { }
#define spin_lock_init(lock) do { } while(0)
#define spin_lock(lock) (void)(lock) /* Not "unused variable". */
#define spin_is_locked(lock) (0)
#define spin_trylock(lock) ({1; })
#define spin_unlock_wait(lock) do { } while(0)
#define spin_unlock(lock) do { } while(0)
#elif (DEBUG_SPINLOCKS < 2)
atd.
To jako ze kdyz nedebuguju, tak nepotrebuju zamykat? Chape tu nekdo a mohl by
mi vysvetlit, jak tohle muze neco delat? Zda se mi, ze to je vsechno naprosto
prazdnej kod...
Nalezeno v hlavickah kernelu linuxu 2.4.19 v distribuci SuSE 8.1
Drze je to jeste pomenovan 2.4.19-64GB-SMP a opravdu to bezi na dual pentaku.
Nechapu, jaktoze ostatni moduly funguji. Nebo ten kod fakt neco dela a ja
jsem tak tupej, ze to nechapu?
-
Clovek je nejpomalejsi zname zarizeni typu I/O.
Quasimodo