From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 6AA5EA034F for ; Wed, 10 Nov 2021 07:46:14 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 6489C4068B; Wed, 10 Nov 2021 07:46:14 +0100 (CET) Received: from NAM12-BN8-obe.outbound.protection.outlook.com (mail-bn8nam12on2044.outbound.protection.outlook.com [40.107.237.44]) by mails.dpdk.org (Postfix) with ESMTP id 4B8B440142 for ; Wed, 10 Nov 2021 07:46:12 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=kFnFxhpdo96HXlie8/sEK+nz+S2dsC8Qbvglt0NdHMYLEUG0FrnSpBkNPigh8q6YsnDog5NWZb8HQF3rI3EeRMR0lv3DfugcLNplRSG+Kez/zzq5F8R9hkRnFQ5tNWQE4VhDKil9MIVgNrXd2/oZqMhvp/CNZwvSuIyrU/yfD76ckRN3B6cx2I+f5xpMbQC0V1Rwv+XtFFpNWh0y/NSBH+EW5lQR/hwio/et5Ht0U+BamVlvCE2BpzPGQC78pEm+1yCYxQiK/vncPTcFZvejTuGvJc1HSjrSfUHkjNMUJPQDrn/0cER9B27eEdu7aetULkD62E6GTgqL4xnE6oYuRA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=AOlG/jcQ7FgdlLxCwjC6UQT1ONn7DYWIcUj0kpE3hp4=; b=K/NLapisi64VbHh7ef7zYSDmt44veThselmlRqQYFdyn01b6d8Z+CnsmAtzro7S+9AEn9E64yRHpT9reUwChUsBzaTYhgCkuY3mdRisOFkeJV8Bg06FyCEbcThkgB/Em1U1vbLg/WP63AOd25htE75W8snGnVJGf6T5JBDlzdJbcD89CqWd+rE2OIzgV+uyG+lIS+q5RXCsi1IgyeEi3zSPwBbM6I1jzkLozz21jsTC23GV13I1eknca5TOWWgKFmV423tDxcLKHwnjiH24VUUM/7SXcy/kZ3J1lolkhIcLVI3KncjVP3B0gjDcTuC9bpVKlbHkLrbURjQvAp8MF/g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.112.34) smtp.rcpttodomain=microsoft.com smtp.mailfrom=nvidia.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=AOlG/jcQ7FgdlLxCwjC6UQT1ONn7DYWIcUj0kpE3hp4=; b=T7W9H6dnqERyQuqVVvUL4Bz6tK4nBEPxiy7XWE784K3r6gebl4JcH4E4DnclefA7/Cdc7+IxQx4hitIKMlo2ozOfPzflLr6aqrEiHJzS7UqqJ85ob5fTUpj1Z3QDDW4uRloic3SYEZXgzmpvikpFelWcudalxZAa3XlxCOvlo+FSjzcO4lZP8Ylonv+zx1/Q6V/rfoMPDb3fLjPw9XmsU3KEg2F/Mo7QkIL8mOxyPl6lOez363gCpG6DRMQ4BrFmSG5i0BpN/Sy/pfsUQ50b0KriX/dqDT28bgzRN+u9/ueT6+puE7fXsGKOZYW50lpwvegad8QhZR6+fQAfCcOzAw== Received: from BN9PR03CA0293.namprd03.prod.outlook.com (2603:10b6:408:f5::28) by BYAPR12MB3206.namprd12.prod.outlook.com (2603:10b6:a03:130::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4669.15; Wed, 10 Nov 2021 06:46:07 +0000 Received: from BN8NAM11FT020.eop-nam11.prod.protection.outlook.com (2603:10b6:408:f5:cafe::86) by BN9PR03CA0293.outlook.office365.com (2603:10b6:408:f5::28) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4669.13 via Frontend Transport; Wed, 10 Nov 2021 06:46:07 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.112.34) smtp.mailfrom=nvidia.com; microsoft.com; dkim=none (message not signed) header.d=none;microsoft.com; dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.112.34 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.112.34; helo=mail.nvidia.com; Received: from mail.nvidia.com (216.228.112.34) by BN8NAM11FT020.mail.protection.outlook.com (10.13.176.223) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.4669.10 via Frontend Transport; Wed, 10 Nov 2021 06:46:07 +0000 Received: from nvidia.com (172.20.187.6) by HQMAIL107.nvidia.com (172.20.187.13) with Microsoft SMTP Server (TLS) id 15.0.1497.18; Wed, 10 Nov 2021 06:46:01 +0000 From: Xueming Li To: Long Li CC: Luca Boccassi , Jonathan Erb , Stephen Hemminger , dpdk stable Date: Wed, 10 Nov 2021 14:30:05 +0800 Message-ID: <20211110063216.2744012-122-xuemingl@nvidia.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20211110063216.2744012-1-xuemingl@nvidia.com> References: <20211110063216.2744012-1-xuemingl@nvidia.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain X-Originating-IP: [172.20.187.6] X-ClientProxiedBy: HQMAIL101.nvidia.com (172.20.187.10) To HQMAIL107.nvidia.com (172.20.187.13) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 0c7facf4-30d9-4651-bd0d-08d9a415c600 X-MS-TrafficTypeDiagnostic: BYAPR12MB3206: X-LD-Processed: 43083d15-7273-40c1-b7db-39efd9ccc17a,ExtAddr X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:8273; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: +3VEr8rn/xXKYSSpkDxpRS0zPTswnU5C+lXxWLhlnsvLQ5gSeAqshXuLsvrVhcb3lgnXOEg1e/+O3CsaR2rMR8QvAnmsSTS0rnysIF89JN2dlNvUNEVkUaZT0lCugwkMRuUDJg++IgQp1W2WytWYU6m4m+G3BRCCP8hVP9flCg1zwRu+UTYdM715dB/KKwHM/OYkbjK9GKoSvTHHyBdJuSLLUYimluYAPy36Q6CqAlsOVDCfwjRmFmx4RYgxGlNu+/tfCS8DooqZfQArQaxXo1dg84NNpScWyWxsAGG71Uket2xhhz9skkVij8dUrT7W1Qd/LNdBfpEhDId9355jM+cqXVnckEvSSi9AMOaFBK/8yFgz0/aUGTmPK/jJ9NKx2WAZwZ/MuUwmJxqIdjQLn7/m2Pl49xEi/PkYl+8zlLpusMnzpveLkwl3Jx49YdUF8W5zTcqKGqtbmtDcP/tSXOXasQIWSfKa+Kq6JJrFCAmXpxBEA18MUmCdHRGs/n/dSgFMl656Lqn3gQl9UHNwhoi8FvQDxDAUU8vm3n/Kh2eENCDstT3CPIxCbg0Ed9taes6sR2ITcdH/k7e472Kugc2sTNTcO09JI2IGMcBXoksf+SpCRw9knpLkrHS39c8J631oICZvwtDGo6YsoHHw0J888ifn1wWCbp+f4Wyb14OsNSYqidGivy2rpPHkAjqzBZ06t9nySG/wP/qZViKu2rj5GZadL1ow0sa0NwrgBIEJSdRhPZH/7ArBOYBa/rOuNExIMMAqkoWKZKsUAbZs/96GB9jUhX6RhkpfOV3C2Uj/qKwdnYlZgCi+3XqRGep55iRG0v4XfxIgEzNT/0/q4g== X-Forefront-Antispam-Report: CIP:216.228.112.34; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:schybrid03.nvidia.com; CAT:NONE; SFS:(4636009)(36840700001)(46966006)(16526019)(82310400003)(186003)(47076005)(53546011)(7636003)(36756003)(1076003)(70586007)(83380400001)(5660300002)(6286002)(70206006)(508600001)(336012)(54906003)(45080400002)(55016002)(2906002)(8676002)(426003)(36860700001)(6916009)(36906005)(4326008)(316002)(30864003)(7696005)(4001150100001)(356005)(8936002)(86362001)(2616005)(966005)(26005); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Nov 2021 06:46:07.1192 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 0c7facf4-30d9-4651-bd0d-08d9a415c600 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.112.34]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: BN8NAM11FT020.eop-nam11.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BYAPR12MB3206 Subject: [dpdk-stable] patch 'bus/vmbus: fix ring buffer mapping in secondary process' has been queued to stable release 20.11.4 X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: patches for DPDK stable branches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: stable-bounces@dpdk.org Sender: "stable" Hi, FYI, your patch has been queued to stable release 20.11.4 Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet. It will be pushed if I get no objections before 11/12/21. So please shout if anyone has objections. Also note that after the patch there's a diff of the upstream commit vs the patch applied to the branch. This will indicate if there was any rebasing needed to apply to the stable branch. If there were code changes for rebasing (ie: not only metadata diffs), please double check that the rebase was correctly done. Queued patches are on a temporary branch at: https://github.com/steevenlee/dpdk This queued commit can be viewed at: https://github.com/steevenlee/dpdk/commit/be9717a4ccb476be8188ec94dd010aeb86d53a75 Thanks. Xueming Li --- >From be9717a4ccb476be8188ec94dd010aeb86d53a75 Mon Sep 17 00:00:00 2001 From: Long Li Date: Wed, 29 Sep 2021 13:46:10 -0700 Subject: [PATCH] bus/vmbus: fix ring buffer mapping in secondary process Cc: Xueming Li [ upstream commit 70cdd92e041acd7a0aad295f639f435fbe688190 ] The driver code had wrong assumption that all the addresses to ring buffers in the secondary process are the same as those in the primary process. This is not always correct as the channels could be mapped to different addresses in the secondary process. Fix this by keeping track of all the mapped addresses from the primary process in the shared uio_res, and have second process map to the same addresses. Fixes: 831dba47bd36 ("bus/vmbus: add Hyper-V virtual bus support") Reported-by: Jonathan Erb Signed-off-by: Long Li Acked-by: Stephen Hemminger --- drivers/bus/vmbus/linux/vmbus_uio.c | 99 +++++++++++++++------------- drivers/bus/vmbus/private.h | 15 ++++- drivers/bus/vmbus/vmbus_channel.c | 4 +- drivers/bus/vmbus/vmbus_common_uio.c | 52 +++++++++++---- 4 files changed, 107 insertions(+), 63 deletions(-) diff --git a/drivers/bus/vmbus/linux/vmbus_uio.c b/drivers/bus/vmbus/linux/vmbus_uio.c index 5dc0c47de6..fd64be93b0 100644 --- a/drivers/bus/vmbus/linux/vmbus_uio.c +++ b/drivers/bus/vmbus/linux/vmbus_uio.c @@ -11,6 +11,7 @@ #include #include +#include #include #include #include @@ -203,6 +204,37 @@ static int vmbus_uio_map_subchan(const struct rte_vmbus_device *dev, struct stat sb; void *mapaddr; int fd; + struct mapped_vmbus_resource *uio_res; + int channel_idx; + + uio_res = vmbus_uio_find_resource(dev); + if (!uio_res) { + VMBUS_LOG(ERR, "can not find resources for mapping subchan"); + return -ENOMEM; + } + + if (rte_eal_process_type() == RTE_PROC_PRIMARY) { + if (uio_res->nb_subchannels >= UIO_MAX_SUBCHANNEL) { + VMBUS_LOG(ERR, + "exceeding max subchannels UIO_MAX_SUBCHANNEL(%d)", + UIO_MAX_SUBCHANNEL); + VMBUS_LOG(ERR, "Change UIO_MAX_SUBCHANNEL and recompile"); + return -ENOMEM; + } + } else { + for (channel_idx = 0; channel_idx < uio_res->nb_subchannels; + channel_idx++) + if (uio_res->subchannel_maps[channel_idx].relid == + chan->relid) + break; + if (channel_idx == uio_res->nb_subchannels) { + VMBUS_LOG(ERR, + "couldn't find sub channel %d from shared mapping in primary", + chan->relid); + return -ENOMEM; + } + vmbus_map_addr = uio_res->subchannel_maps[channel_idx].addr; + } snprintf(ring_path, sizeof(ring_path), "%s/%s/channels/%u/ring", @@ -239,58 +271,33 @@ static int vmbus_uio_map_subchan(const struct rte_vmbus_device *dev, if (mapaddr == MAP_FAILED) return -EIO; + if (rte_eal_process_type() == RTE_PROC_PRIMARY) { + + /* Add this mapping to uio_res for use by secondary */ + uio_res->subchannel_maps[uio_res->nb_subchannels].relid = + chan->relid; + uio_res->subchannel_maps[uio_res->nb_subchannels].addr = + mapaddr; + uio_res->subchannel_maps[uio_res->nb_subchannels].size = + file_size; + uio_res->nb_subchannels++; + + vmbus_map_addr = RTE_PTR_ADD(mapaddr, file_size); + } else { + if (mapaddr != vmbus_map_addr) { + VMBUS_LOG(ERR, "failed to map channel %d to addr %p", + chan->relid, mapaddr); + vmbus_unmap_resource(mapaddr, file_size); + return -EIO; + } + } + *ring_size = file_size / 2; *ring_buf = mapaddr; - vmbus_map_addr = RTE_PTR_ADD(mapaddr, file_size); return 0; } -int -vmbus_uio_map_secondary_subchan(const struct rte_vmbus_device *dev, - const struct vmbus_channel *chan) -{ - const struct vmbus_br *br = &chan->txbr; - char ring_path[PATH_MAX]; - void *mapaddr, *ring_buf; - uint32_t ring_size; - int fd; - - snprintf(ring_path, sizeof(ring_path), - "%s/%s/channels/%u/ring", - SYSFS_VMBUS_DEVICES, dev->device.name, - chan->relid); - - ring_buf = br->vbr; - ring_size = br->dsize + sizeof(struct vmbus_bufring); - VMBUS_LOG(INFO, "secondary ring_buf %p size %u", - ring_buf, ring_size); - - fd = open(ring_path, O_RDWR); - if (fd < 0) { - VMBUS_LOG(ERR, "Cannot open %s: %s", - ring_path, strerror(errno)); - return -errno; - } - - mapaddr = vmbus_map_resource(ring_buf, fd, 0, 2 * ring_size, 0); - close(fd); - - if (mapaddr == ring_buf) - return 0; - - if (mapaddr == MAP_FAILED) - VMBUS_LOG(ERR, - "mmap subchan %u in secondary failed", chan->relid); - else { - VMBUS_LOG(ERR, - "mmap subchan %u in secondary address mismatch", - chan->relid); - vmbus_unmap_resource(mapaddr, 2 * ring_size); - } - return -1; -} - int vmbus_uio_map_rings(struct vmbus_channel *chan) { const struct rte_vmbus_device *dev = chan->device; diff --git a/drivers/bus/vmbus/private.h b/drivers/bus/vmbus/private.h index f19b14e4a6..74ef948282 100644 --- a/drivers/bus/vmbus/private.h +++ b/drivers/bus/vmbus/private.h @@ -36,6 +36,13 @@ struct vmbus_map { uint64_t size; /* length */ }; +#define UIO_MAX_SUBCHANNEL 128 +struct subchannel_map { + uint16_t relid; + void *addr; + uint64_t size; +}; + /* * For multi-process we need to reproduce all vmbus mappings in secondary * processes, so save them in a tailq. @@ -44,10 +51,14 @@ struct mapped_vmbus_resource { TAILQ_ENTRY(mapped_vmbus_resource) next; rte_uuid_t id; + int nb_maps; - struct vmbus_channel *primary; struct vmbus_map maps[VMBUS_MAX_RESOURCE]; + char path[PATH_MAX]; + + int nb_subchannels; + struct subchannel_map subchannel_maps[UIO_MAX_SUBCHANNEL]; }; TAILQ_HEAD(mapped_vmbus_res_list, mapped_vmbus_resource); @@ -108,8 +119,6 @@ bool vmbus_uio_subchannels_supported(const struct rte_vmbus_device *dev, int vmbus_uio_get_subchan(struct vmbus_channel *primary, struct vmbus_channel **subchan); int vmbus_uio_map_rings(struct vmbus_channel *chan); -int vmbus_uio_map_secondary_subchan(const struct rte_vmbus_device *dev, - const struct vmbus_channel *chan); void vmbus_br_setup(struct vmbus_br *br, void *buf, unsigned int blen); diff --git a/drivers/bus/vmbus/vmbus_channel.c b/drivers/bus/vmbus/vmbus_channel.c index f67f1c438a..119b9b367e 100644 --- a/drivers/bus/vmbus/vmbus_channel.c +++ b/drivers/bus/vmbus/vmbus_channel.c @@ -351,10 +351,8 @@ int rte_vmbus_chan_open(struct rte_vmbus_device *device, err = vmbus_chan_create(device, device->relid, 0, device->monitor_id, new_chan); - if (!err) { + if (!err) device->primary = *new_chan; - uio_res->primary = *new_chan; - } return err; } diff --git a/drivers/bus/vmbus/vmbus_common_uio.c b/drivers/bus/vmbus/vmbus_common_uio.c index a689bf11b3..158e05c889 100644 --- a/drivers/bus/vmbus/vmbus_common_uio.c +++ b/drivers/bus/vmbus/vmbus_common_uio.c @@ -69,8 +69,10 @@ vmbus_uio_map_secondary(struct rte_vmbus_device *dev) fd, offset, uio_res->maps[i].size, 0); - if (mapaddr == uio_res->maps[i].addr) + if (mapaddr == uio_res->maps[i].addr) { + dev->resource[i].addr = mapaddr; continue; /* successful map */ + } if (mapaddr == MAP_FAILED) VMBUS_LOG(ERR, @@ -88,19 +90,39 @@ vmbus_uio_map_secondary(struct rte_vmbus_device *dev) /* fd is not needed in secondary process, close it */ close(fd); - dev->primary = uio_res->primary; - if (!dev->primary) { - VMBUS_LOG(ERR, "missing primary channel"); - return -1; + /* Create and map primary channel */ + if (vmbus_chan_create(dev, dev->relid, 0, + dev->monitor_id, &dev->primary)) { + VMBUS_LOG(ERR, "cannot create primary channel"); + goto failed_primary; } - 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; + /* Create and map sub channels */ + for (i = 0; i < uio_res->nb_subchannels; i++) { + if (rte_vmbus_subchan_open(dev->primary, &chan)) { + VMBUS_LOG(ERR, + "failed to create subchannel at index %d", i); + goto failed_secondary; } } + return 0; + +failed_secondary: + while (!STAILQ_EMPTY(&dev->primary->subchannel_list)) { + chan = STAILQ_FIRST(&dev->primary->subchannel_list); + vmbus_unmap_resource(chan->txbr.vbr, chan->txbr.dsize * 2); + rte_vmbus_chan_close(chan); + } + rte_vmbus_chan_close(dev->primary); + +failed_primary: + for (i = 0; i != uio_res->nb_maps; i++) { + vmbus_unmap_resource( + uio_res->maps[i].addr, uio_res->maps[i].size); + } + + return -1; } static int @@ -188,6 +210,11 @@ vmbus_uio_unmap(struct mapped_vmbus_resource *uio_res) if (uio_res == NULL) return; + for (i = 0; i < uio_res->nb_subchannels; i++) { + vmbus_unmap_resource(uio_res->subchannel_maps[i].addr, + uio_res->subchannel_maps[i].size); + } + for (i = 0; i != uio_res->nb_maps; i++) { vmbus_unmap_resource(uio_res->maps[i].addr, (size_t)uio_res->maps[i].size); @@ -211,8 +238,11 @@ vmbus_uio_unmap_resource(struct rte_vmbus_device *dev) return; /* secondary processes - just free maps */ - if (rte_eal_process_type() != RTE_PROC_PRIMARY) - return vmbus_uio_unmap(uio_res); + if (rte_eal_process_type() != RTE_PROC_PRIMARY) { + vmbus_uio_unmap(uio_res); + rte_free(dev->primary); + return; + } TAILQ_REMOVE(uio_res_list, uio_res, next); -- 2.33.0 --- Diff of the applied patch vs upstream commit (please double-check if non-empty: --- --- - 2021-11-10 14:17:07.352933455 +0800 +++ 0121-bus-vmbus-fix-ring-buffer-mapping-in-secondary-proce.patch 2021-11-10 14:17:01.884079315 +0800 @@ -1 +1 @@ -From 70cdd92e041acd7a0aad295f639f435fbe688190 Mon Sep 17 00:00:00 2001 +From be9717a4ccb476be8188ec94dd010aeb86d53a75 Mon Sep 17 00:00:00 2001 @@ -4,0 +5,3 @@ +Cc: Xueming Li + +[ upstream commit 70cdd92e041acd7a0aad295f639f435fbe688190 ] @@ -16 +18,0 @@ -Cc: stable@dpdk.org @@ -29 +31 @@ -index b52ca5bf1d..70b0d098e0 100644 +index 5dc0c47de6..fd64be93b0 100644 @@ -159 +161 @@ -index 528d60a42f..1bca147e12 100644 +index f19b14e4a6..74ef948282 100644 @@ -162 +164 @@ -@@ -33,6 +33,13 @@ struct vmbus_map { +@@ -36,6 +36,13 @@ struct vmbus_map { @@ -176 +178 @@ -@@ -41,10 +48,14 @@ struct mapped_vmbus_resource { +@@ -44,10 +51,14 @@ struct mapped_vmbus_resource { @@ -192 +194 @@ -@@ -105,8 +116,6 @@ bool vmbus_uio_subchannels_supported(const struct rte_vmbus_device *dev, +@@ -108,8 +119,6 @@ bool vmbus_uio_subchannels_supported(const struct rte_vmbus_device *dev, @@ -218 +220 @@ -index 8582e32c1d..041712fe75 100644 +index a689bf11b3..158e05c889 100644