These are blast examples based on the "scull" example linux driver from O'Reilly.

The scull.c source has been modified to pull in the necessary pieces of the kernel
header files, and model a few kernel functions called by the driver. Also, some
auxiliary variables and fields have been added to aid in expressing the properties.

Also note that the macros NUM and TYPE, for extracting the device number
and type have been modified, since they involve bit-level operations
that we can't currently handle.

To generate blast input code for a property $n, say

	/lib/cpp -DPROPERTY=$n scull.c > scull_pp$n.c

Generated files should already be present for the following properties.

To run property $, say:

pblast.opt -focisymm -cref -fociUF -hybrid -restart -pred scull_pp$n.pred scull_pp$n.c

Note that not all the properties have .pred files. If there isn't one, don't use it.

The properties are:

0) scull_init_module moves from MS_UNLOADED to MS_LOADED state.

1) for every scull device, scull_init_module sets the quantum field to scull_quantum.

2) after initializing and calling scull_follow(&scull_devices[j],1) to create a
second entry in the linked list, the second entry's prev pointer points to
the first entry.

3) after initializing and successfully calling scull_open with a file structure,
the next pointer of the device structure pointed to by the file's private_data
field is null (i.e., the length of the linekd list is one).

4) same as 2, except a more elaborate model of malloc is used. this model
contains a loop that reserves a seuqnces of consecutive locations at the
malloc return address (and aborts if some location in the sequence is already
reserved). 

5) same as 4, but we use scull_follow to create an arbitrarily long list.

6) same as 5, but now we check that every Scull_dev object dev has the
property that either dev->next is null, or dev->next->prev = dev.




