From 8d53e9f3c6001dcb2865f6e894da5b54e1418f88 Mon Sep 17 00:00:00 2001 From: Christian Ehrhardt Date: Thu, 4 Jul 2019 10:40:06 +0200 Subject: New upstream version 18.11.2 Change-Id: I23eb4f9179abf1f9c659891f8fddb27ee68ad26b Signed-off-by: Christian Ehrhardt --- drivers/bus/vmbus/vmbus_common_uio.c | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) (limited to 'drivers/bus/vmbus/vmbus_common_uio.c') diff --git a/drivers/bus/vmbus/vmbus_common_uio.c b/drivers/bus/vmbus/vmbus_common_uio.c index 5ddd36ab..9947f82a 100644 --- a/drivers/bus/vmbus/vmbus_common_uio.c +++ b/drivers/bus/vmbus/vmbus_common_uio.c @@ -27,6 +27,7 @@ static int vmbus_uio_map_secondary(struct rte_vmbus_device *dev) { int fd, i; + struct vmbus_channel *chan; struct mapped_vmbus_resource *uio_res; struct mapped_vmbus_res_list *uio_res_list = RTE_TAILQ_CAST(vmbus_tailq.head, mapped_vmbus_res_list); @@ -47,9 +48,10 @@ vmbus_uio_map_secondary(struct rte_vmbus_device *dev) for (i = 0; i != uio_res->nb_maps; i++) { void *mapaddr; + off_t offset = i * PAGE_SIZE; mapaddr = vmbus_map_resource(uio_res->maps[i].addr, - fd, 0, + fd, offset, uio_res->maps[i].size, 0); if (mapaddr == uio_res->maps[i].addr) @@ -75,6 +77,20 @@ vmbus_uio_map_secondary(struct rte_vmbus_device *dev) /* fd is not needed in slave process, close it */ close(fd); + + dev->primary = uio_res->primary; + if (!dev->primary) { + VMBUS_LOG(ERR, "missing primary channel"); + return -1; + } + + STAILQ_FOREACH(chan, &dev->primary->subchannel_list, next) { + if (vmbus_uio_map_secondary_subchan(dev, chan) != 0) { + VMBUS_LOG(ERR, "cannot map secondary subchan"); + return -1; + } + } + return 0; } @@ -97,9 +113,9 @@ vmbus_uio_map_primary(struct rte_vmbus_device *dev) /* Map the resources */ for (i = 0; i < VMBUS_MAX_RESOURCE; i++) { - /* skip empty BAR */ + /* stop at empty BAR */ if (dev->resource[i].len == 0) - continue; + break; ret = vmbus_uio_map_resource_by_index(dev, i, uio_res, 0); if (ret) -- cgit 1.2.3-korg