Re: [ANNOUNCE] mdb-2.6.27-rc2-ia32-08-07-08.patch

From: Jeremy Fitzhardinge
Date: Sat Aug 09 2008 - 01:07:42 EST


Stefan Richter wrote:
jmerkey@xxxxxxxxxxxxxxxxxxxxx wrote:
The mdb-rc2 patch was posted this morning with the changes for a modular
kernel debugger using kprobes.

ftp://ftp.wolfmountaingroup.org/pub/mdb/mdb-2.6.27-rc2-ia32-08-07-08.patch

Jeffrey Vernon Merkey


Quoting from this patch:

+typedef struct _RLOCK +{
+#if defined(CONFIG_SMP)
+ spinlock_t lock;
+#endif
+ unsigned long flags;
+ unsigned long processor;
+ unsigned long count; +} rlock_t;

Is this something along the lines of a counting semaphore? As far as I
understand its accessor functions, an rlock
- can be taken by one CPU multiple times,
- will block the other CPUs as long as the first CPU hasn't unlocked
the rlock as many times as it locked it.

The accessors rspin_lock() and rspin_try_lock() peek into spinlock_t and
may therefore not be fully portable. Also, they and rspin_unlock()
don't look SMP safe:

+//
+// returns 0 - atomic lock occurred, processor assigned
+// 1 - recusive count increased
+//
+
+unsigned long rspin_lock(volatile rlock_t *rlock)
+{
+#if defined(CONFIG_SMP)
+ register unsigned long proc = get_processor_id();
+ register unsigned long retCode;
+
+ if (rlock->lock.raw_lock.slock && rlock->processor == proc)

Ticket locks will almost always have a non-zero slock. It doesn't indicate anything about the locked/unlocked state. But this looks like it's effectively doing a trylock:

if (!spin_trylock(rlock) && rlock->processor == proc) {
rlock->count++;
...
} else {
rlock->processor = proc;
...
}


J


--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/