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.

_______________________________________________
Virtualization mailing list
[email protected]
https://lists.linux-foundation.org/mailman/listinfo/virtualization

Reply via email to