> -----Original Message-----
> From: Linhaifeng [mailto:haifeng.lin at huawei.com]
> Sent: Thursday, December 11, 2014 2:04 PM
> To: Xie, Huawei; dev at dpdk.org
> Cc: haifeng.lin at intel.com
> Subject: Re: [dpdk-dev] [PATCH RFC v2 08/12] lib/librte_vhost: vhost-user
> support
>
>
>
> On 2014/12/11 5:37, Huawei Xie wrote:
> > vhost-user support
> >
> >
> > Signed-off-by: Huawei Xie <huawei.xie at intel.com>
> > ---
> > lib/librte_vhost/Makefile | 5 +-
> > lib/librte_vhost/vhost-net.h | 4 +
> > lib/librte_vhost/vhost_cuse/virtio-net-cdev.c | 9 +
> > lib/librte_vhost/vhost_user/vhost-net-user.c | 422
> ++++++++++++++++++++++++++
> > +
> > +static struct vhost_server *g_vhost_server;
>
> Only support one vhost-user port ?
The newer patch supports multiple vhost-user port.
Will send next week.
>
> > +
> > +static const char *vhost_message_str[VHOST_USER_MAX] = {
>
> why not use vserver_new_vq_conn(int fd, void* dat) ?
>
>
Since currently we only pass memory address and 32bit number, will change to
void *.
> > +{
> > + struct vhost_server *vserver = (void *)(uintptr_t)dat;
> regions[VHOST_MEMORY_MAX_NREGIONS];
> > + uint64_t mapped_address, base_address = 0;
> > +
> > + for (idx = 0; idx < memory.nregions; idx++) {
> > + if (memory.regions[idx].guest_phys_addr == 0)
> > + base_address = memory.regions[idx].userspace_addr;
> > + }
> > + if (base_address == 0) {
>
> when will base_address is 0? how to test to run this code?
base_address with 0 is the requirement for vhost-cuse implementation.
Normally it is the region [0, 0xA0000).
In this version, we would keep this and not fix this. In future, will remove
this.
>
> > + RTE_LOG(ERR, VHOST_CONFIG,
> > + "couldn't find the mem region whose GPA is 0.\n");
> > + return -1;
> > + }
> > +
> > + for (idx = 0; idx < memory.nregions; idx++) {
> > + regions[idx].guest_phys_address =
> > + memory.regions[idx].guest_phys_addr;
> > + regions[idx].guest_phys_address_end =
> > + memory.regions[idx].guest_phys_addr +
> > + memory.regions[idx].memory_size;
> > + regions[idx].memory_size = memory.regions[idx].memory_size;
> > + regions[idx].userspace_address =
> > + memory.regions[idx].userspace_addr;
> > +
> > + /* This is ugly */
> > + mapped_address = (uint64_t)(uintptr_t)mmap(NULL,
> > + regions[idx].memory_size +
> > + memory.regions[idx].mmap_offset,
> > + PROT_READ | PROT_WRITE, MAP_SHARED,
> > + pmsg->fds[idx],
> > + 0);
>
> Can you mmap the region if gpa is 0? When i run VM with two numa node (qemu
> will create two hugepage file) found that always failed to mmap with the
> region
> which gpa is 0.
>
> BTW can we ensure the memory regions cover with all the memory of hugepage
> for VM?
>
We had discussed this. Seemed a qemu bug.
Do you have update on this?
> > + RTE_LOG(INFO, VHOST_CONFIG,
> > + "mapped region %d to %p\n",
> > +struct virtio_net_device_ops const *notify_ops;
> > +struct virtio_net * get_device(struct vhost_device_ctx ctx);
> > +
> > +#endif
> >
>
> --
> Regards,
> Haifeng
Thanks Haifeng for your comments.
Next time, could you help cut the code not commented?
They are too long. It is really hard for me to find your comment.