[gsoc] Virtio block device driver

Tim Bisson bissont at mac.com
Wed Jun 1 21:30:29 PDT 2011

On 5/31/11 1:05 PM, Stéphanie Ouillon wrote:

I modified some parts of the code of the virtio block device driver 
that has been already ported from NetBSD.
The code is available here : github.com/arroway/virtio_DragonFlyBSD

The initially ported block device driver is available in the block/ 
direectory : it was working on its own.
What I did is that I modified it so that it could work with a more 
general interface, virtio.c
Can you clarify what you mean by make it "work with a more general 
interface, virtio.c"? The block driver as it was, would use virtio.c. 
For example, virtio_negotiate_features() is in virtio.c and is called 
from virtio-blk.c

I'm referring to the last code written for the virtio-block:
First the virtio module is called, and it detects or not a virtio 
device. Then, according to the type of the virtio device ( here, a 
block device ), it calls the virtio_blk module.

I've got some problems to attach my virtio device with virtio_blk.

Here is what I did, as I told my mentor Pratyush  Kshirsagar :

Some functions were defined twice : in virtio_blk.c and in virtio.c. 
In virtio.c, their prototypes accepted a virtio_softc * structure, but 
in virtio_blk.c, they wanted a virtio_blk_softc * structure.
Now, I only use the functions in virtio.c ( I deleted the 
corresponding functions in virtio_blk.c to keep ony the functions that 
were specific to the block device ).

 So I changed the definition of virtio_blk_softc * structure in 
virtio_blk.c. Now it looks like this :
(like in the netbsd code)

*struct virtio_blk_softc {*

    device_t sc_dev;

*struct virtio_softc *sc_virtio;*
    struct virtqueue sc_vq[1];
    struct virtio_blk_req    *sc_reqs;
    int sc_readonly;
    uint32_t    sc_features;
    int     maxxfersize;
/    //added : what for ?/
    bus_dma_segment_t    sc_reqs_segs[1];
/    //I don't use it at the moment ( virtio_blk_attach() )/
/    kmutex_t    sc_lock;/
/// Block stuff : for testing/ /with /devstat
    cdev_t cdev;
    struct devstat stats;
    struct disk disk;
I think you might be using an older version of the virtio block code? In 
the gitorious tree I pointed to earlier, there is a pointer to 
virtio_softc in virtio_blk_softc.


More information about the Kernel mailing list