[dpdk-dev] [PATCH v4 6/8] virtio-user: add new virtual pci driver for virtio
Yuanhan Liu
yuanhan.liu at linux.intel.com
Thu May 12 04:12:08 CEST 2016
On Fri, Apr 29, 2016 at 01:18:34AM +0000, Jianfeng Tan wrote:
> +static void
> +vdev_read_dev_config(struct virtio_hw *hw, uint64_t offset,
> + void *dst, int length)
> +{
> + int i;
> + struct virtio_user_hw *uhw = (struct virtio_user_hw *)hw->vdev_private;
Unnecessary cast.
> +static int
> +vdev_setup_queue(struct virtio_hw *hw __rte_unused, struct virtqueue *vq)
> +{
> + /* Changed to use virtual addr */
> + vq->vq_ring_mem = (phys_addr_t)vq->mz->addr;
> + if (vq->virtio_net_hdr_mz) {
> + vq->virtio_net_hdr_mem =
> + (phys_addr_t)vq->virtio_net_hdr_mz->addr;
> + /* Do it one more time after we reset virtio_net_hdr_mem */
> + vring_hdr_desc_init(vq);
> + }
> + vq->offset = offsetof(struct rte_mbuf, buf_addr);
> + return 0;
Here as last email said, you should not mix vq stuff. What's more,
why do you invoke vring_hdr_desc_init() here? If it needs a special
handling, do it in driver.
The "setup_queue" method is actually for telling the device where desc,
avail and used vring are located. Hence, the implementation could be simple:
just log them.
> +
> +const struct virtio_pci_ops vdev_ops = {
Note that this is the interface for the driver to talk to the device,
we should put this file into upper layer then, in the driver.
And let me make a summary, trying to make it clear:
- We should not use any structures/functions from the virtio driver
here, unless it's really a must.
- It's allowed for driver to make *few* special handling for the virtio
user device. And that's what the driver supposed to do: to handle
different device variants.
So, I think it's okay to export the virtio_user_device struct to
driver and do all those kind of "fake pci" configration there.
--yliu
> + .read_dev_cfg = vdev_read_dev_config,
> + .write_dev_cfg = vdev_write_dev_config,
> + .reset = vdev_reset,
> + .get_status = vdev_get_status,
> + .set_status = vdev_set_status,
> + .get_features = vdev_get_features,
> + .set_features = vdev_set_features,
> + .get_isr = vdev_get_isr,
> + .set_config_irq = vdev_set_config_irq,
> + .get_queue_num = vdev_get_queue_num,
> + .setup_queue = vdev_setup_queue,
> + .del_queue = vdev_del_queue,
> + .notify_queue = vdev_notify_queue,
> +};
> --
> 2.1.4
More information about the dev
mailing list