Michael S. Tsirkin wrote:
On Wed, May 13, 2009 at 10:47:08AM +0930, Rusty Russell wrote:
On Wed, 13 May 2009 01:03:30 am Michael S. Tsirkin wrote:
On Wed, May 13, 2009 at 12:00:02AM +0930, Rusty Russell wrote
and perhaps consider
varargs for the callbacks (or would that be too horrible at the
implementation end?)

Thanks,
Rusty.
Ugh ... I think it will be. And AFAIK gcc generates a lot of code
for varargs - not something we want to do in each interrupt handler.
Err, no I mean for find_vqs:  eg.
        (block device)
        err = vdev->config->find_vqs(vdev, 1, &vblk->vq, blk_done);

        (net device)
        err = vdev->config->find_vqs(vdev, 3, vqs, skb_recv_done, 
skb_xmit_done, NULL);

A bit neater for for the single-queue case.

Cheers,
Rusty.

Oh. I see. But it becomes messy now that we also need to pass in the
names, and we lose type safety.
Let's just add a helper function for the single vq case?

static inline struct virtqueue *virtio_find_vq(struct virtio_devide *vdev,
                                               vq_callback_t *c, const char *n)
{
        vq_callback_t *callbacks[] = { c };
        const char *names[] = { n };
        struct virtqueue *vq;
        int err = vdev->config->find_vqs(vdev, 1, &vq, callbacks, names);
        if (err < 0)
                return ERR_PTR(err);
        return vq;
}

Much saner.

--
Do not meddle in the internals of kernels, for they are subtle and quick to 
panic.

--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to