Re: kernel analyser to detect sleep under spinlock

From: Peter T. Breuer
Date: Fri Nov 12 2004 - 20:02:35 EST

Peter T. Breuer <ptb (at)> writes:

> I've added some extra support for gcc 3.4.0 [...]

And now kernel 2.6 files seem to be being parsed OK too.

% ./c -nostdinc -iwithprefix include -D__KERNEL__ -I/usr/local/src/linux-2.6.3/include -D__KERNEL__ -Wall -Wstrict-prototypes -Wno-trigraphs -I/usr/local/src/linux-2.6.3/include/asm-i386/mach-default -O2 -DMODULE -DKBUILD_BASENAME=nbd -DKBUILD_MODNAME=nbd /usr/local/src/linux-2.6.3/drivers/block/nbd.c
*************** sleep calls ************************************
* function line calls (locks)
* - /usr/local/src/linux-2.6.3/include/linux/fs.h
* lock_super 741 down (0)
* - /usr/local/src/linux-2.6.3/include/net/sock.h
* sk_filter_release 710 kfree (0)
* - /usr/local/src/linux-2.6.3/drivers/block/nbd.c
* nbd_send_req 264 down (0)
* do_nbd_request 510 nbd_send_req (-1)
* nbd_ioctl 569 nbd_send_req (-1)
* nbd_ioctl 574 down (0)
* *** found 0 instances of sleep under spinlock ***

Archive at:

GPL, LGPL, etc.

This is also useful for locating functions which can sleep, though of
course that can be done in other ways.

This utility works by applying a programming logic to the code semantics.
That bit's fine. What it's not so great at is resolving C references back
to the correct declaration, which results in under-reporting. I'll improve
that (mumbles, register actions to be carried out whenever anything
changes in the fact database instead of coding the inferences by hand).

I'll undertake a survey of the current kernel.

Peter (ptb (at)

To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at
Please read the FAQ at