From patchwork Sat Apr 23 04:28:36 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Srikanth Kaka X-Patchwork-Id: 110262 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 9F565A00C4; Tue, 26 Apr 2022 10:32:58 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 3ECF742802; Tue, 26 Apr 2022 10:32:39 +0200 (CEST) Received: from mail-pg1-f172.google.com (mail-pg1-f172.google.com [209.85.215.172]) by mails.dpdk.org (Postfix) with ESMTP id 1A4024003F for ; Sat, 23 Apr 2022 06:29:50 +0200 (CEST) Received: by mail-pg1-f172.google.com with SMTP id g3so8262656pgg.3 for ; Fri, 22 Apr 2022 21:29:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oneconvergence.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=DKUuGQ+4n8x8KbP9drX5VjWeLgdsf2iygtL2aLeINIc=; b=Rv5RCxIiEBkvW48EL4u7ujfWPAOPpUQ5uwm865I801KgGoR7XfisJMtj78ZSLYUcbu P89LmNjlnr4+OjqAGY9gYRO1IWte+Bg5FQVuSOrLfFr33DSeot/PhD3ojHuyHi5FZ00y rYD6wnUtfYESuP9NVKq7bAlYCBzSriODbjd6o= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=DKUuGQ+4n8x8KbP9drX5VjWeLgdsf2iygtL2aLeINIc=; b=ugIJ5NfzitJhiOCqk25HD6lCPAftUc03zee5VMgV85t3MYZx3k8bqwlkUsM60wjEYl tDiGRiuCwetrMA9PR0QGZlUCvMGk4tUqBqArbL+jZizknJzPZEC/9wl7+JemJbgSJcss cnqDbgmkDS0hfTxG6hYAYysIwD5L/n3RntU/goGZkMnYi//5pBa3j+A65eO8Hn3Bcpcl r/C+7bQw8dJ3EwOv0Fhmw8OCKO8OZ/GEfZbJiiNDtXI6EQh4A3hgOpqjpHlsFexD3kho jLDLuAI5xUjiipn5oGAlcLSUIxDiVIvezdDPbvLurj/12Z7WikAWCje8WjLxRo3t3XDF mTSw== X-Gm-Message-State: AOAM533IfU6fb/kbDepi1t5ynysxD7XHyVjbXCRd6NqMLADNy5vp0aw9 hh2Bipw9Z8CFEoeZbqCMU1rI1Q== X-Google-Smtp-Source: ABdhPJwi+kAVsE4/K8+QHLJBCft7DXzNVjdWaqFy6Qj43Ug8m/v9wRvYsbjPNb1Kt7RMbpKFoQTdXg== X-Received: by 2002:a05:6a00:1385:b0:50a:9768:9eca with SMTP id t5-20020a056a00138500b0050a97689ecamr8113334pfg.43.1650688189299; Fri, 22 Apr 2022 21:29:49 -0700 (PDT) Received: from home-desktop.localdomain ([49.37.158.191]) by smtp.gmail.com with ESMTPSA id g6-20020a17090a714600b001d7f3bb11d7sm4056438pjs.53.2022.04.22.21.29.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 22 Apr 2022 21:29:48 -0700 (PDT) From: Srikanth Kaka To: Stephen Hemminger , Long Li Cc: dev@dpdk.org, Vag Singh , Anand Thulasiram , Srikanth Kaka Subject: [PATCH v5 01/14] bus/vmbus: move independent code from Linux Date: Sat, 23 Apr 2022 09:58:36 +0530 Message-Id: <20220423042849.7718-2-srikanth.k@oneconvergence.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220423042849.7718-1-srikanth.k@oneconvergence.com> References: <20220418042915.5765-1-srikanth.k@oneconvergence.com> <20220423042849.7718-1-srikanth.k@oneconvergence.com> MIME-Version: 1.0 X-Mailman-Approved-At: Tue, 26 Apr 2022 10:32:34 +0200 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Move the OS independent code from Linux dir in-order to be used by FreeBSD Signed-off-by: Srikanth Kaka Signed-off-by: Vag Singh Signed-off-by: Anand Thulasiram --- drivers/bus/vmbus/linux/vmbus_bus.c | 13 +------------ drivers/bus/vmbus/meson.build | 5 +++++ drivers/bus/vmbus/unix/vmbus_unix.h | 11 +++++++++++ drivers/bus/vmbus/unix/vmbus_unix_bus.c | 20 ++++++++++++++++++++ 4 files changed, 37 insertions(+), 12 deletions(-) create mode 100644 drivers/bus/vmbus/unix/vmbus_unix.h create mode 100644 drivers/bus/vmbus/unix/vmbus_unix_bus.c diff --git a/drivers/bus/vmbus/linux/vmbus_bus.c b/drivers/bus/vmbus/linux/vmbus_bus.c index f502783..e649537 100644 --- a/drivers/bus/vmbus/linux/vmbus_bus.c +++ b/drivers/bus/vmbus/linux/vmbus_bus.c @@ -21,22 +21,11 @@ #include "eal_filesystem.h" #include "private.h" +#include "vmbus_unix.h" /** Pathname of VMBUS devices directory. */ #define SYSFS_VMBUS_DEVICES "/sys/bus/vmbus/devices" -/* - * GUID associated with network devices - * {f8615163-df3e-46c5-913f-f2d2f965ed0e} - */ -static const rte_uuid_t vmbus_nic_uuid = { - 0xf8, 0x61, 0x51, 0x63, - 0xdf, 0x3e, - 0x46, 0xc5, - 0x91, 0x3f, - 0xf2, 0xd2, 0xf9, 0x65, 0xed, 0xe -}; - extern struct rte_vmbus_bus rte_vmbus_bus; /* Read sysfs file to get UUID */ diff --git a/drivers/bus/vmbus/meson.build b/drivers/bus/vmbus/meson.build index 3892cbf..01ef01f 100644 --- a/drivers/bus/vmbus/meson.build +++ b/drivers/bus/vmbus/meson.build @@ -16,6 +16,11 @@ sources = files( 'vmbus_common_uio.c', ) +includes += include_directories('unix') +sources += files( + 'unix/vmbus_unix_bus.c' +) + if is_linux sources += files('linux/vmbus_bus.c', 'linux/vmbus_uio.c') diff --git a/drivers/bus/vmbus/unix/vmbus_unix.h b/drivers/bus/vmbus/unix/vmbus_unix.h new file mode 100644 index 0000000..2db9399 --- /dev/null +++ b/drivers/bus/vmbus/unix/vmbus_unix.h @@ -0,0 +1,11 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright (c) 2018, Microsoft Corporation. + * All Rights Reserved. + */ + +#ifndef _VMBUS_BUS_UNIX_H_ +#define _VMBUS_BUS_UNIX_H_ + +extern const rte_uuid_t vmbus_nic_uuid; + +#endif /* _VMBUS_BUS_UNIX_H_ */ diff --git a/drivers/bus/vmbus/unix/vmbus_unix_bus.c b/drivers/bus/vmbus/unix/vmbus_unix_bus.c new file mode 100644 index 0000000..f76a361 --- /dev/null +++ b/drivers/bus/vmbus/unix/vmbus_unix_bus.c @@ -0,0 +1,20 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright (c) 2018, Microsoft Corporation. + * All Rights Reserved. + */ + +#include + +#include "vmbus_unix.h" + +/* + * GUID associated with network devices + * {f8615163-df3e-46c5-913f-f2d2f965ed0e} + */ +const rte_uuid_t vmbus_nic_uuid = { + 0xf8, 0x61, 0x51, 0x63, + 0xdf, 0x3e, + 0x46, 0xc5, + 0x91, 0x3f, + 0xf2, 0xd2, 0xf9, 0x65, 0xed, 0xe +}; From patchwork Sat Apr 23 04:28:37 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Srikanth Kaka X-Patchwork-Id: 110263 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 27334A00C4; Tue, 26 Apr 2022 10:33:05 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id A752342806; Tue, 26 Apr 2022 10:32:40 +0200 (CEST) Received: from mail-pf1-f175.google.com (mail-pf1-f175.google.com [209.85.210.175]) by mails.dpdk.org (Postfix) with ESMTP id 27D9040042 for ; Sat, 23 Apr 2022 06:29:53 +0200 (CEST) Received: by mail-pf1-f175.google.com with SMTP id h1so9780919pfv.12 for ; Fri, 22 Apr 2022 21:29:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oneconvergence.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=p8txLBA49Wf9JjMLrg/QljVI7XyklphucZw6+M19n1g=; b=DvQR7eaSZlmFrnfJu4U55LHBES+VU1gWXM5Wwfm3rwMf7bN6MkHUvw8HQaVE9iEUuk 5SPFQ0tpqtLxK9S6Q1jsFKyZZ7nEvaSDOoDO1t/4fU8LTpt5E8gRk2BiVE1exOf1jSLm hB7wzDob9TIFkLGQgj9vZ32uM0YUjq+pylC7I= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=p8txLBA49Wf9JjMLrg/QljVI7XyklphucZw6+M19n1g=; b=q4r+nVugyqzBsdkDdY7BcGTcbwEd46nywR9EY1d0kZ8uqTkDmE7sxnlSmtUME0Sajo UGlG/8foGEF+hIqG7JVw6y/o35A+Loe9bPP1zvoBWFieOBrhLBVrbKbVIehW3VQz9h4V NKlMIJbG7/jPVUXFmswwA4O3kfnVBI/GVcgknu64OCCHyZsviUsFDselNou1XJW1KxbH MW9DKrcaj5LBFe7FzHcyeTya9asj87QAFpxtlo5Nest13ZK2giZJevf1Xig32tYcMMNK jDSxZat2mo64TDVZ5ENCYxn2E2kg9gtefAA9jZQYq+0DRorb+tToN/AQ94R5RXhPYFHj da9A== X-Gm-Message-State: AOAM530hUAtz950VAgYR6slJj+XsalR3IJR06FHpwhxLJ7qjqFT+g3k6 Dt99O1bIe1Xgo3Jycb9zLNpzCg== X-Google-Smtp-Source: ABdhPJw3IFdN5oiMMeh+8xE5CEcQ+k8p2hJ1njHaKyd5DxIQWJ3oCG8SXOzF6N2qKvErX6dmHhn2EQ== X-Received: by 2002:a63:844a:0:b0:3aa:be8e:877c with SMTP id k71-20020a63844a000000b003aabe8e877cmr5712871pgd.241.1650688192198; Fri, 22 Apr 2022 21:29:52 -0700 (PDT) Received: from home-desktop.localdomain ([49.37.158.191]) by smtp.gmail.com with ESMTPSA id g6-20020a17090a714600b001d7f3bb11d7sm4056438pjs.53.2022.04.22.21.29.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 22 Apr 2022 21:29:51 -0700 (PDT) From: Srikanth Kaka To: Stephen Hemminger , Long Li Cc: dev@dpdk.org, Vag Singh , Anand Thulasiram , Srikanth Kaka Subject: [PATCH v5 02/14] bus/vmbus: move independent bus functions Date: Sat, 23 Apr 2022 09:58:37 +0530 Message-Id: <20220423042849.7718-3-srikanth.k@oneconvergence.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220423042849.7718-1-srikanth.k@oneconvergence.com> References: <20220418042915.5765-1-srikanth.k@oneconvergence.com> <20220423042849.7718-1-srikanth.k@oneconvergence.com> MIME-Version: 1.0 X-Mailman-Approved-At: Tue, 26 Apr 2022 10:32:34 +0200 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org move independent Linux bus functions to OS independent file Signed-off-by: Srikanth Kaka Signed-off-by: Vag Singh Signed-off-by: Anand Thulasiram --- drivers/bus/vmbus/linux/vmbus_bus.c | 15 --------------- drivers/bus/vmbus/unix/vmbus_unix_bus.c | 17 +++++++++++++++++ 2 files changed, 17 insertions(+), 15 deletions(-) diff --git a/drivers/bus/vmbus/linux/vmbus_bus.c b/drivers/bus/vmbus/linux/vmbus_bus.c index e649537..18233a5 100644 --- a/drivers/bus/vmbus/linux/vmbus_bus.c +++ b/drivers/bus/vmbus/linux/vmbus_bus.c @@ -358,18 +358,3 @@ closedir(dir); return -1; } - -void rte_vmbus_irq_mask(struct rte_vmbus_device *device) -{ - vmbus_uio_irq_control(device, 1); -} - -void rte_vmbus_irq_unmask(struct rte_vmbus_device *device) -{ - vmbus_uio_irq_control(device, 0); -} - -int rte_vmbus_irq_read(struct rte_vmbus_device *device) -{ - return vmbus_uio_irq_read(device); -} diff --git a/drivers/bus/vmbus/unix/vmbus_unix_bus.c b/drivers/bus/vmbus/unix/vmbus_unix_bus.c index f76a361..96cb968 100644 --- a/drivers/bus/vmbus/unix/vmbus_unix_bus.c +++ b/drivers/bus/vmbus/unix/vmbus_unix_bus.c @@ -3,8 +3,10 @@ * All Rights Reserved. */ +#include #include +#include "private.h" #include "vmbus_unix.h" /* @@ -18,3 +20,18 @@ 0x91, 0x3f, 0xf2, 0xd2, 0xf9, 0x65, 0xed, 0xe }; + +void rte_vmbus_irq_mask(struct rte_vmbus_device *device) +{ + vmbus_uio_irq_control(device, 1); +} + +void rte_vmbus_irq_unmask(struct rte_vmbus_device *device) +{ + vmbus_uio_irq_control(device, 0); +} + +int rte_vmbus_irq_read(struct rte_vmbus_device *device) +{ + return vmbus_uio_irq_read(device); +} From patchwork Sat Apr 23 04:28:38 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Srikanth Kaka X-Patchwork-Id: 110264 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 9D606A00C4; Tue, 26 Apr 2022 10:33:11 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id BA53B4280B; Tue, 26 Apr 2022 10:32:41 +0200 (CEST) Received: from mail-pl1-f195.google.com (mail-pl1-f195.google.com [209.85.214.195]) by mails.dpdk.org (Postfix) with ESMTP id 3033440E09 for ; Sat, 23 Apr 2022 06:29:56 +0200 (CEST) Received: by mail-pl1-f195.google.com with SMTP id b12so245321plg.4 for ; Fri, 22 Apr 2022 21:29:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oneconvergence.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=vg4ke78CvnDAmcrkcGJTrqji0pMUMbiqwLF5mHDt9hg=; b=gfUwtINXOfPUPugveb0JrWXhoO1ewXtGqCtn6xJo30X4iTVuvRQfSPQIOzxud2FkAc dAnsXRmBls2ZSDX6EU6uYHMaiRJqnh8oq1MihU+yGFTElNUk7oJ010vi/Iu56AYC65Df 9qdekBtktD5eN1X3w8EmJWQdneVjUNpvFUAHU= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=vg4ke78CvnDAmcrkcGJTrqji0pMUMbiqwLF5mHDt9hg=; b=cIdZVUmnEDB+aQAijGUTmmip2V+UiIaoNWznp7mH9d02HqIxuS9ZSp8IOnSbbmyJ9v w4T2MGqdH8gmC5QSEDmAsMLHRkiXYdtbcOxF3fJJmVcsheeiWXBO5Vu/TbYlHRet1Hnr Ky9CQYHEWKAo8SlZpWIvgRdbF5G0j8xzioOhzFeODV3gs7SE11N59gXk0KbfOVmOTrba sWQrAzCbY+Z7SXhI2f70zfrBf77bYlf3tWEZT25ERU/ZbsZYHMgXC3R1xCkMAc5KBJ/S QqHnsE0jS4OHoaqAY0Jio6FyVZHyyq9+81Hoca823Ig6diXBtEMSOqNewas0O6eoI6Lk VRYw== X-Gm-Message-State: AOAM533PyzcOXLD2DQnQFCd6DrTx8TNKCI4Ac9QAykyTr7nNS4gcoJ+P dbuFxF0jOLfSMX09Fy2kYYgm4Tt4qQFroXcS X-Google-Smtp-Source: ABdhPJxercxMB7p5NbBFKdsrfFr+bEz2jWeChfUy+VrGPedi2OMuwOL0XhhOo2fD8k6V+WCrJpMuwQ== X-Received: by 2002:a17:902:eb84:b0:158:8a72:bbdd with SMTP id q4-20020a170902eb8400b001588a72bbddmr7751192plg.117.1650688195288; Fri, 22 Apr 2022 21:29:55 -0700 (PDT) Received: from home-desktop.localdomain ([49.37.158.191]) by smtp.gmail.com with ESMTPSA id g6-20020a17090a714600b001d7f3bb11d7sm4056438pjs.53.2022.04.22.21.29.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 22 Apr 2022 21:29:54 -0700 (PDT) From: Srikanth Kaka To: Stephen Hemminger , Long Li Cc: dev@dpdk.org, Vag Singh , Anand Thulasiram , Srikanth Kaka Subject: [PATCH v5 03/14] bus/vmbus: move OS independent UIO functions Date: Sat, 23 Apr 2022 09:58:38 +0530 Message-Id: <20220423042849.7718-4-srikanth.k@oneconvergence.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220423042849.7718-1-srikanth.k@oneconvergence.com> References: <20220418042915.5765-1-srikanth.k@oneconvergence.com> <20220423042849.7718-1-srikanth.k@oneconvergence.com> MIME-Version: 1.0 X-Mailman-Approved-At: Tue, 26 Apr 2022 10:32:34 +0200 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Moved all Linux independent UIO functions to unix dir. Split the vmbus_uio_map_subchan() by keeping OS dependent code in vmbus_uio_map_subchan_os() function Signed-off-by: Srikanth Kaka Signed-off-by: Vag Singh Signed-off-by: Anand Thulasiram --- drivers/bus/vmbus/linux/vmbus_uio.c | 292 ++---------------------------- drivers/bus/vmbus/meson.build | 3 +- drivers/bus/vmbus/unix/vmbus_unix.h | 12 ++ drivers/bus/vmbus/unix/vmbus_unix_uio.c | 306 ++++++++++++++++++++++++++++++++ 4 files changed, 330 insertions(+), 283 deletions(-) create mode 100644 drivers/bus/vmbus/unix/vmbus_unix_uio.c diff --git a/drivers/bus/vmbus/linux/vmbus_uio.c b/drivers/bus/vmbus/linux/vmbus_uio.c index 5db70f8..b5d15c9 100644 --- a/drivers/bus/vmbus/linux/vmbus_uio.c +++ b/drivers/bus/vmbus/linux/vmbus_uio.c @@ -21,233 +21,18 @@ #include #include "private.h" +#include "vmbus_unix.h" /** Pathname of VMBUS devices directory. */ #define SYSFS_VMBUS_DEVICES "/sys/bus/vmbus/devices" -static void *vmbus_map_addr; - -/* Control interrupts */ -void vmbus_uio_irq_control(struct rte_vmbus_device *dev, int32_t onoff) -{ - if ((rte_intr_fd_get(dev->intr_handle) < 0) || - write(rte_intr_fd_get(dev->intr_handle), &onoff, - sizeof(onoff)) < 0) { - VMBUS_LOG(ERR, "cannot write to %d:%s", - rte_intr_fd_get(dev->intr_handle), - strerror(errno)); - } -} - -int vmbus_uio_irq_read(struct rte_vmbus_device *dev) -{ - int32_t count; - int cc; - - if (rte_intr_fd_get(dev->intr_handle) < 0) - return -1; - - cc = read(rte_intr_fd_get(dev->intr_handle), &count, - sizeof(count)); - if (cc < (int)sizeof(count)) { - if (cc < 0) { - VMBUS_LOG(ERR, "IRQ read failed %s", - strerror(errno)); - return -errno; - } - VMBUS_LOG(ERR, "can't read IRQ count"); - return -EINVAL; - } - - return count; -} - -void -vmbus_uio_free_resource(struct rte_vmbus_device *dev, - struct mapped_vmbus_resource *uio_res) -{ - rte_free(uio_res); - - if (rte_intr_dev_fd_get(dev->intr_handle) >= 0) { - close(rte_intr_dev_fd_get(dev->intr_handle)); - rte_intr_dev_fd_set(dev->intr_handle, -1); - } - - if (rte_intr_fd_get(dev->intr_handle) >= 0) { - close(rte_intr_fd_get(dev->intr_handle)); - rte_intr_fd_set(dev->intr_handle, -1); - rte_intr_type_set(dev->intr_handle, RTE_INTR_HANDLE_UNKNOWN); - } -} - -int -vmbus_uio_alloc_resource(struct rte_vmbus_device *dev, - struct mapped_vmbus_resource **uio_res) -{ - char devname[PATH_MAX]; /* contains the /dev/uioX */ - int fd; - - /* save fd if in primary process */ - snprintf(devname, sizeof(devname), "/dev/uio%u", dev->uio_num); - fd = open(devname, O_RDWR); - if (fd < 0) { - VMBUS_LOG(ERR, "Cannot open %s: %s", - devname, strerror(errno)); - goto error; - } - - if (rte_intr_fd_set(dev->intr_handle, fd)) - goto error; - - if (rte_intr_type_set(dev->intr_handle, RTE_INTR_HANDLE_UIO_INTX)) - goto error; - - /* allocate the mapping details for secondary processes*/ - *uio_res = rte_zmalloc("UIO_RES", sizeof(**uio_res), 0); - if (*uio_res == NULL) { - VMBUS_LOG(ERR, "cannot store uio mmap details"); - goto error; - } - - strlcpy((*uio_res)->path, devname, PATH_MAX); - rte_uuid_copy((*uio_res)->id, dev->device_id); - - return 0; - -error: - vmbus_uio_free_resource(dev, *uio_res); - return -1; -} - -static int -find_max_end_va(const struct rte_memseg_list *msl, void *arg) -{ - size_t sz = msl->memseg_arr.len * msl->page_sz; - void *end_va = RTE_PTR_ADD(msl->base_va, sz); - void **max_va = arg; - - if (*max_va < end_va) - *max_va = end_va; - return 0; -} - -/* - * TODO: this should be part of memseg api. - * code is duplicated from PCI. - */ -static void * -vmbus_find_max_end_va(void) -{ - void *va = NULL; - - rte_memseg_list_walk(find_max_end_va, &va); - return va; -} - -int -vmbus_uio_map_resource_by_index(struct rte_vmbus_device *dev, int idx, - struct mapped_vmbus_resource *uio_res, - int flags) -{ - size_t size = dev->resource[idx].len; - struct vmbus_map *maps = uio_res->maps; - void *mapaddr; - off_t offset; - int fd; - - /* devname for mmap */ - fd = open(uio_res->path, O_RDWR); - if (fd < 0) { - VMBUS_LOG(ERR, "Cannot open %s: %s", - uio_res->path, strerror(errno)); - return -1; - } - - /* try mapping somewhere close to the end of hugepages */ - if (vmbus_map_addr == NULL) - vmbus_map_addr = vmbus_find_max_end_va(); - - /* offset is special in uio it indicates which resource */ - offset = idx * rte_mem_page_size(); - - mapaddr = vmbus_map_resource(vmbus_map_addr, fd, offset, size, flags); - close(fd); - - if (mapaddr == MAP_FAILED) - return -1; - - dev->resource[idx].addr = mapaddr; - vmbus_map_addr = RTE_PTR_ADD(mapaddr, size); - - /* Record result of successful mapping for use by secondary */ - maps[idx].addr = mapaddr; - maps[idx].size = size; - - return 0; -} - -static int vmbus_uio_map_primary(struct vmbus_channel *chan, - void **ring_buf, uint32_t *ring_size) -{ - struct mapped_vmbus_resource *uio_res; - - uio_res = vmbus_uio_find_resource(chan->device); - if (!uio_res) { - VMBUS_LOG(ERR, "can not find resources!"); - return -ENOMEM; - } - - if (uio_res->nb_maps < VMBUS_MAX_RESOURCE) { - VMBUS_LOG(ERR, "VMBUS: only %u resources found!", - uio_res->nb_maps); - return -EINVAL; - } - - *ring_size = uio_res->maps[HV_TXRX_RING_MAP].size / 2; - *ring_buf = uio_res->maps[HV_TXRX_RING_MAP].addr; - return 0; -} - -static int vmbus_uio_map_subchan(const struct rte_vmbus_device *dev, - const struct vmbus_channel *chan, - void **ring_buf, uint32_t *ring_size) +int vmbus_uio_map_subchan_os(const struct rte_vmbus_device *dev, + const struct vmbus_channel *chan, + void **mapaddr, size_t *file_size) { char ring_path[PATH_MAX]; - size_t file_size; 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", @@ -267,68 +52,23 @@ static int vmbus_uio_map_subchan(const struct rte_vmbus_device *dev, close(fd); return -errno; } - file_size = sb.st_size; + *file_size = sb.st_size; - if (file_size == 0 || (file_size & (rte_mem_page_size() - 1))) { + if (*file_size == 0 || (*file_size & (rte_mem_page_size() - 1))) { VMBUS_LOG(ERR, "incorrect size %s: %zu", - ring_path, file_size); + ring_path, *file_size); close(fd); return -EINVAL; } - mapaddr = vmbus_map_resource(vmbus_map_addr, fd, - 0, file_size, 0); + *mapaddr = vmbus_map_resource(vmbus_map_addr, fd, + 0, *file_size, 0); close(fd); - if (mapaddr == MAP_FAILED) + 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; - - return 0; -} - -int vmbus_uio_map_rings(struct vmbus_channel *chan) -{ - const struct rte_vmbus_device *dev = chan->device; - uint32_t ring_size; - void *ring_buf; - int ret; - - /* Primary channel */ - if (chan->subchannel_id == 0) - ret = vmbus_uio_map_primary(chan, &ring_buf, &ring_size); - else - ret = vmbus_uio_map_subchan(dev, chan, &ring_buf, &ring_size); - - if (ret) - return ret; - - vmbus_br_setup(&chan->txbr, ring_buf, ring_size); - vmbus_br_setup(&chan->rxbr, (char *)ring_buf + ring_size, ring_size); return 0; } @@ -377,18 +117,6 @@ bool vmbus_uio_subchannels_supported(const struct rte_vmbus_device *dev, return vmbus_uio_ring_present(dev, chan->relid); } -static bool vmbus_isnew_subchannel(struct vmbus_channel *primary, - unsigned long id) -{ - const struct vmbus_channel *c; - - STAILQ_FOREACH(c, &primary->subchannel_list, next) { - if (c->relid == id) - return false; - } - return true; -} - int vmbus_uio_get_subchan(struct vmbus_channel *primary, struct vmbus_channel **subchan) { diff --git a/drivers/bus/vmbus/meson.build b/drivers/bus/vmbus/meson.build index 01ef01f..60913d0 100644 --- a/drivers/bus/vmbus/meson.build +++ b/drivers/bus/vmbus/meson.build @@ -18,7 +18,8 @@ sources = files( includes += include_directories('unix') sources += files( - 'unix/vmbus_unix_bus.c' + 'unix/vmbus_unix_bus.c', + 'unix/vmbus_unix_uio.c' ) if is_linux diff --git a/drivers/bus/vmbus/unix/vmbus_unix.h b/drivers/bus/vmbus/unix/vmbus_unix.h index 2db9399..579c4bb 100644 --- a/drivers/bus/vmbus/unix/vmbus_unix.h +++ b/drivers/bus/vmbus/unix/vmbus_unix.h @@ -6,6 +6,18 @@ #ifndef _VMBUS_BUS_UNIX_H_ #define _VMBUS_BUS_UNIX_H_ +#include + +#include "private.h" + extern const rte_uuid_t vmbus_nic_uuid; +extern void *vmbus_map_addr; + +int vmbus_uio_map_subchan_os(const struct rte_vmbus_device *dev, + const struct vmbus_channel *chan, + void **mapaddr, size_t *file_size); + +bool vmbus_isnew_subchannel(struct vmbus_channel *primary, + unsigned long id); #endif /* _VMBUS_BUS_UNIX_H_ */ diff --git a/drivers/bus/vmbus/unix/vmbus_unix_uio.c b/drivers/bus/vmbus/unix/vmbus_unix_uio.c new file mode 100644 index 0000000..c5ce8ca --- /dev/null +++ b/drivers/bus/vmbus/unix/vmbus_unix_uio.c @@ -0,0 +1,306 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright (c) 2018, Microsoft Corporation. + * All Rights Reserved. + */ + +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "private.h" +#include "vmbus_unix.h" + +void *vmbus_map_addr; + +/* Control interrupts */ +void vmbus_uio_irq_control(struct rte_vmbus_device *dev, int32_t onoff) +{ + if ((rte_intr_fd_get(dev->intr_handle) < 0) || + write(rte_intr_fd_get(dev->intr_handle), &onoff, + sizeof(onoff)) < 0) { + VMBUS_LOG(ERR, "cannot write to %d:%s", + rte_intr_fd_get(dev->intr_handle), + strerror(errno)); + } +} + +int vmbus_uio_irq_read(struct rte_vmbus_device *dev) +{ + int32_t count; + int cc; + + if (rte_intr_fd_get(dev->intr_handle) < 0) + return -1; + + cc = read(rte_intr_fd_get(dev->intr_handle), &count, + sizeof(count)); + if (cc < (int)sizeof(count)) { + if (cc < 0) { + VMBUS_LOG(ERR, "IRQ read failed %s", + strerror(errno)); + return -errno; + } + VMBUS_LOG(ERR, "can't read IRQ count"); + return -EINVAL; + } + + return count; +} + +void +vmbus_uio_free_resource(struct rte_vmbus_device *dev, + struct mapped_vmbus_resource *uio_res) +{ + rte_free(uio_res); + + if (rte_intr_dev_fd_get(dev->intr_handle) >= 0) { + close(rte_intr_dev_fd_get(dev->intr_handle)); + rte_intr_dev_fd_set(dev->intr_handle, -1); + } + + if (rte_intr_fd_get(dev->intr_handle) >= 0) { + close(rte_intr_fd_get(dev->intr_handle)); + rte_intr_fd_set(dev->intr_handle, -1); + rte_intr_type_set(dev->intr_handle, RTE_INTR_HANDLE_UNKNOWN); + } +} + +int +vmbus_uio_alloc_resource(struct rte_vmbus_device *dev, + struct mapped_vmbus_resource **uio_res) +{ + char devname[PATH_MAX]; /* contains the /dev/uioX */ + int fd; + + /* save fd if in primary process */ + snprintf(devname, sizeof(devname), "/dev/uio%u", dev->uio_num); + fd = open(devname, O_RDWR); + if (fd < 0) { + VMBUS_LOG(ERR, "Cannot open %s: %s", + devname, strerror(errno)); + goto error; + } + + if (rte_intr_fd_set(dev->intr_handle, fd)) + goto error; + + if (rte_intr_type_set(dev->intr_handle, RTE_INTR_HANDLE_UIO_INTX)) + goto error; + + /* allocate the mapping details for secondary processes*/ + *uio_res = rte_zmalloc("UIO_RES", sizeof(**uio_res), 0); + if (*uio_res == NULL) { + VMBUS_LOG(ERR, "cannot store uio mmap details"); + goto error; + } + + strlcpy((*uio_res)->path, devname, PATH_MAX); + rte_uuid_copy((*uio_res)->id, dev->device_id); + + return 0; + +error: + vmbus_uio_free_resource(dev, *uio_res); + return -1; +} + +static int +find_max_end_va(const struct rte_memseg_list *msl, void *arg) +{ + size_t sz = msl->memseg_arr.len * msl->page_sz; + void *end_va = RTE_PTR_ADD(msl->base_va, sz); + void **max_va = arg; + + if (*max_va < end_va) + *max_va = end_va; + return 0; +} + +/* + * TODO: this should be part of memseg api. + * code is duplicated from PCI. + */ +static void * +vmbus_find_max_end_va(void) +{ + void *va = NULL; + + rte_memseg_list_walk(find_max_end_va, &va); + return va; +} + +int +vmbus_uio_map_resource_by_index(struct rte_vmbus_device *dev, int idx, + struct mapped_vmbus_resource *uio_res, + int flags) +{ + size_t size = dev->resource[idx].len; + struct vmbus_map *maps = uio_res->maps; + void *mapaddr; + off_t offset; + int fd; + + /* devname for mmap */ + fd = open(uio_res->path, O_RDWR); + if (fd < 0) { + VMBUS_LOG(ERR, "Cannot open %s: %s", + uio_res->path, strerror(errno)); + return -1; + } + + /* try mapping somewhere close to the end of hugepages */ + if (vmbus_map_addr == NULL) + vmbus_map_addr = vmbus_find_max_end_va(); + + /* offset is special in uio it indicates which resource */ + offset = idx * rte_mem_page_size(); + + mapaddr = vmbus_map_resource(vmbus_map_addr, fd, offset, size, flags); + close(fd); + + if (mapaddr == MAP_FAILED) + return -1; + + dev->resource[idx].addr = mapaddr; + vmbus_map_addr = RTE_PTR_ADD(mapaddr, size); + + /* Record result of successful mapping for use by secondary */ + maps[idx].addr = mapaddr; + maps[idx].size = size; + + return 0; +} + +static int vmbus_uio_map_primary(struct vmbus_channel *chan, + void **ring_buf, uint32_t *ring_size) +{ + struct mapped_vmbus_resource *uio_res; + + uio_res = vmbus_uio_find_resource(chan->device); + if (!uio_res) { + VMBUS_LOG(ERR, "can not find resources!"); + return -ENOMEM; + } + + if (uio_res->nb_maps < VMBUS_MAX_RESOURCE) { + VMBUS_LOG(ERR, "VMBUS: only %u resources found!", + uio_res->nb_maps); + return -EINVAL; + } + + *ring_size = uio_res->maps[HV_TXRX_RING_MAP].size / 2; + *ring_buf = uio_res->maps[HV_TXRX_RING_MAP].addr; + return 0; +} + +static int vmbus_uio_map_subchan(const struct rte_vmbus_device *dev, + const struct vmbus_channel *chan, + void **ring_buf, uint32_t *ring_size) +{ + size_t file_size = 0; + void *mapaddr = NULL; + struct mapped_vmbus_resource *uio_res; + int channel_idx; + int ret; + + 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; + } + + ret = vmbus_uio_map_subchan_os(dev, chan, &mapaddr, &file_size); + if (ret) + return ret; + + 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; + + return 0; +} + +int vmbus_uio_map_rings(struct vmbus_channel *chan) +{ + const struct rte_vmbus_device *dev = chan->device; + uint32_t ring_size = 0; + void *ring_buf = NULL; + int ret; + + /* Primary channel */ + if (chan->subchannel_id == 0) + ret = vmbus_uio_map_primary(chan, &ring_buf, &ring_size); + else + ret = vmbus_uio_map_subchan(dev, chan, &ring_buf, &ring_size); + + if (ret) + return ret; + + vmbus_br_setup(&chan->txbr, ring_buf, ring_size); + vmbus_br_setup(&chan->rxbr, (char *)ring_buf + ring_size, ring_size); + return 0; +} + +bool vmbus_isnew_subchannel(struct vmbus_channel *primary, + unsigned long id) +{ + const struct vmbus_channel *c; + + STAILQ_FOREACH(c, &primary->subchannel_list, next) { + if (c->relid == id) + return false; + } + return true; +} From patchwork Sat Apr 23 04:28:39 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Srikanth Kaka X-Patchwork-Id: 110265 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 7B055A00C4; Tue, 26 Apr 2022 10:33:19 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 32C3442810; Tue, 26 Apr 2022 10:32:43 +0200 (CEST) Received: from mail-pf1-f194.google.com (mail-pf1-f194.google.com [209.85.210.194]) by mails.dpdk.org (Postfix) with ESMTP id 8688540042 for ; Sat, 23 Apr 2022 06:29:59 +0200 (CEST) Received: by mail-pf1-f194.google.com with SMTP id y14so9029286pfe.10 for ; Fri, 22 Apr 2022 21:29:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oneconvergence.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=MXm7xPl3w9O8OAflDZPQpi169kzfUg0coum28GXJksM=; b=HDfZVkM5j+73YJgdj3Wv70hbRXoTV8uTcMNEkXnlwah9w9ZDucmyBlH8+0yQz+C6m5 7UB+tt5i9G0vxGY+2sKsLOiT1DgMK/NugPrvViDZBxZBde2O/C9qxacbVMENyr+nx79p PkKPUPHjSEIKggLu0odw1snC1TtJ7xc9apyv0= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=MXm7xPl3w9O8OAflDZPQpi169kzfUg0coum28GXJksM=; b=y5HFkPhk80w0PDOxKs6jnDERZK2cr5itnB1GxnCNCn5ex6Ag+uVP7NZe5dTkVx/Uae Qv5Pb8fSn07S9ZKioErgJ19YYCu18MkzFw3HOZbrgFNeMSsKBILbJE9curVwjEPF+/XX MMgKJUBEO9xout9X9YGn/rNznsDm46Q7+fRpLQ1bsnHWf03MJTfw1T01Ja4wJWktRuCt J1cfwQNySHN1JvHL0nEJ77W0HZS+YOFhC2W2pI3dVceqBCfx0ozVBdWhGfDtYdUVt+Lw 7AoJEMgR9XEBf7awZURaQz1+6UIVlH/fFmO4rRq/uxzVIR/uOCmzxxbYLyBE7iHfrPBp kr9w== X-Gm-Message-State: AOAM531HI8BDMPBYJkpcLWoIgj1cIGRF6uK9T77O7GOxow77o/3x98h1 8cV0Alo2MAFcq6pUYEWx/xK3ZQ== X-Google-Smtp-Source: ABdhPJyQdTmnB60bvN+EIYPXAD8sSZVqypGHBq59JP+g9ykWwRwXwzowZuSzDwquaXYhs0wuKV7Ocw== X-Received: by 2002:a63:6687:0:b0:3aa:193b:7a70 with SMTP id a129-20020a636687000000b003aa193b7a70mr6675724pgc.493.1650688198710; Fri, 22 Apr 2022 21:29:58 -0700 (PDT) Received: from home-desktop.localdomain ([49.37.158.191]) by smtp.gmail.com with ESMTPSA id g6-20020a17090a714600b001d7f3bb11d7sm4056438pjs.53.2022.04.22.21.29.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 22 Apr 2022 21:29:58 -0700 (PDT) From: Srikanth Kaka To: Stephen Hemminger , Long Li Cc: dev@dpdk.org, Vag Singh , Anand Thulasiram , Srikanth Kaka Subject: [PATCH v5 04/14] bus/vmbus: scan and get the network device on FreeBSD Date: Sat, 23 Apr 2022 09:58:39 +0530 Message-Id: <20220423042849.7718-5-srikanth.k@oneconvergence.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220423042849.7718-1-srikanth.k@oneconvergence.com> References: <20220418042915.5765-1-srikanth.k@oneconvergence.com> <20220423042849.7718-1-srikanth.k@oneconvergence.com> MIME-Version: 1.0 X-Mailman-Approved-At: Tue, 26 Apr 2022 10:32:34 +0200 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Using sysctl, all the devices on the VMBUS are identified by the PMD. On finding the Network device's device id, it is added to VMBUS dev list. Signed-off-by: Srikanth Kaka Signed-off-by: Vag Singh Signed-off-by: Anand Thulasiram --- drivers/bus/vmbus/freebsd/vmbus_bus.c | 268 ++++++++++++++++++++++++++++++++++ 1 file changed, 268 insertions(+) create mode 100644 drivers/bus/vmbus/freebsd/vmbus_bus.c diff --git a/drivers/bus/vmbus/freebsd/vmbus_bus.c b/drivers/bus/vmbus/freebsd/vmbus_bus.c new file mode 100644 index 0000000..c1a3a5f --- /dev/null +++ b/drivers/bus/vmbus/freebsd/vmbus_bus.c @@ -0,0 +1,268 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright (c) 2018, Microsoft Corporation. + * All Rights Reserved. + */ + +#include +#include + +#include "private.h" +#include "vmbus_unix.h" + +#include +#include +#include + +/* Parse UUID. Caller must pass NULL terminated string */ +static int +parse_sysfs_uuid(const char *filename, rte_uuid_t uu) +{ + char in[BUFSIZ]; + + memcpy(in, filename, BUFSIZ); + if (rte_uuid_parse(in, uu) < 0) { + VMBUS_LOG(ERR, "%s not a valid UUID", in); + return -1; + } + + return 0; +} + +/* Scan one vmbus entry, and fill the devices list from it. */ +static int +vmbus_scan_one(const char *name, unsigned int unit_num) +{ + struct rte_vmbus_device *dev, *dev2; + char sysctl_buf[PATH_MAX], sysctl_var[PATH_MAX]; + size_t guid_len = 36, len = PATH_MAX; + char classid[guid_len + 1], deviceid[guid_len + 1]; + + dev = calloc(1, sizeof(*dev)); + if (dev == NULL) + return -1; + + /* get class id and device id */ + snprintf(sysctl_var, len, "dev.%s.%u.%%pnpinfo", name, unit_num); + if (sysctlbyname(sysctl_var, &sysctl_buf, &len, NULL, 0) < 0) + goto error; + + /* pnpinfo: classid=f912ad6d-2b17-48ea-bd65-f927a61c7684 + * deviceid=d34b2567-b9b6-42b9-8778-0a4ec0b955bf + */ + if (sysctl_buf[0] == 'c' && sysctl_buf[1] == 'l' && + sysctl_buf[7] == '=') { + memcpy(classid, &sysctl_buf[8], guid_len); + classid[guid_len] = '\0'; + } + if (parse_sysfs_uuid(classid, dev->class_id) < 0) + goto error; + + /* skip non-network devices */ + if (rte_uuid_compare(dev->class_id, vmbus_nic_uuid) != 0) { + free(dev); + return 0; + } + + if (sysctl_buf[45] == 'd' && sysctl_buf[46] == 'e' && + sysctl_buf[47] == 'v' && sysctl_buf[53] == '=') { + memcpy(deviceid, &sysctl_buf[54], guid_len); + deviceid[guid_len] = '\0'; + } + if (parse_sysfs_uuid(deviceid, dev->device_id) < 0) + goto error; + + if (!strcmp(name, "hv_uio")) + dev->uio_num = unit_num; + else + dev->uio_num = -1; + dev->device.bus = &rte_vmbus_bus.bus; + dev->device.numa_node = 0; + dev->device.name = strdup(deviceid); + if (!dev->device.name) + goto error; + + dev->device.devargs = vmbus_devargs_lookup(dev); + + dev->intr_handle = rte_intr_instance_alloc(RTE_INTR_INSTANCE_F_PRIVATE); + if (dev->intr_handle == NULL) + goto error; + + /* device is valid, add in list (sorted) */ + VMBUS_LOG(DEBUG, "Adding vmbus device %s", name); + + TAILQ_FOREACH(dev2, &rte_vmbus_bus.device_list, next) { + int ret; + + ret = rte_uuid_compare(dev->device_id, dev2->device_id); + if (ret > 0) + continue; + + if (ret < 0) { + vmbus_insert_device(dev2, dev); + } else { /* already registered */ + VMBUS_LOG(NOTICE, + "%s already registered", name); + free(dev); + } + return 0; + } + + vmbus_add_device(dev); + return 0; +error: + VMBUS_LOG(DEBUG, "failed"); + + free(dev); + return -1; +} + +static int +vmbus_unpack(char *walker, char *ep, char **str) +{ + int ret = 0; + + *str = strdup(walker); + if (*str == NULL) { + ret = -ENOMEM; + goto exit; + } + + if (walker + strnlen(walker, ep - walker) >= ep) { + ret = -EINVAL; + goto exit; + } +exit: + return ret; +} + +/* + * Scan the content of the vmbus, and the devices in the devices list + */ +int +rte_vmbus_scan(void) +{ + struct u_device udev; + struct u_businfo ubus; + int dev_idx, dev_ptr, name2oid[2], oid[CTL_MAXNAME + 12], error; + size_t oidlen, rlen, ub_size; + uintptr_t vmbus_handle = 0; + char *walker, *ep; + char name[16] = "hw.bus.devices"; + char *dd_name, *dd_desc, *dd_drivername, *dd_pnpinfo, *dd_location; + + /* + * devinfo FreeBSD APP logic to fetch all the VMBus devices + * using SYSCTLs + */ + name2oid[0] = 0; + name2oid[1] = 3; + oidlen = sizeof(oid); + error = sysctl(name2oid, 2, oid, &oidlen, name, strlen(name)); + if (error < 0) { + VMBUS_LOG(DEBUG, "can't find hw.bus.devices sysctl node"); + return -ENOENT; + } + oidlen /= sizeof(int); + if (oidlen > CTL_MAXNAME) { + VMBUS_LOG(DEBUG, "hw.bus.devices oid is too large"); + return -EINVAL; + } + + ub_size = sizeof(ubus); + if (sysctlbyname("hw.bus.info", &ubus, &ub_size, NULL, 0) != 0) { + VMBUS_LOG(DEBUG, "sysctlbyname(\"hw.bus.info\", ...) failed"); + return -EINVAL; + } + if ((ub_size != sizeof(ubus)) || + (ubus.ub_version != BUS_USER_VERSION)) { + VMBUS_LOG(DEBUG, + "kernel bus interface version mismatch: kernel %d expected %d", + ubus.ub_version, BUS_USER_VERSION); + return -EINVAL; + } + + oid[oidlen++] = ubus.ub_generation; + dev_ptr = oidlen++; + + /* + * Scan devices. + * + * Stop after a fairly insane number to avoid death in the case + * of kernel corruption. + */ + + for (dev_idx = 0; dev_idx < 10000; dev_idx++) { + /* + * Get the device information. + */ + oid[dev_ptr] = dev_idx; + rlen = sizeof(udev); + error = sysctl(oid, oidlen, &udev, &rlen, NULL, 0); + if (error < 0) { + if (errno == ENOENT) /* end of list */ + break; + if (errno != EINVAL) /* gen count skip, restart */ + VMBUS_LOG(DEBUG, "sysctl hw.bus.devices.%d", + dev_idx); + return errno; + } + if (rlen != sizeof(udev)) { + VMBUS_LOG(DEBUG, + "sysctl returned wrong data %zd bytes instead of %zd", + rlen, sizeof(udev)); + return -EINVAL; + } + + walker = udev.dv_fields; + ep = walker + sizeof(udev.dv_fields); + dd_name = NULL; + dd_desc = NULL; + dd_drivername = NULL; + dd_pnpinfo = NULL; + dd_location = NULL; + + error = vmbus_unpack(walker, ep, &dd_name); + if (error < 0) + return error; + walker += strlen(walker) + 1; + + error = vmbus_unpack(walker, ep, &dd_desc); + if (error < 0) + return error; + walker += strlen(walker) + 1; + + error = vmbus_unpack(walker, ep, &dd_drivername); + if (error < 0) + return error; + walker += strlen(walker) + 1; + + error = vmbus_unpack(walker, ep, &dd_pnpinfo); + if (error < 0) + return error; + walker += strlen(walker) + 1; + + error = vmbus_unpack(walker, ep, &dd_location); + if (error < 0) + return error; + + if (*dd_drivername && !(strcmp(dd_drivername, "vmbus"))) + vmbus_handle = udev.dv_handle; + + if (vmbus_handle && (vmbus_handle == udev.dv_parent) + && *dd_pnpinfo && *dd_name) { + unsigned int driver_len = 0, unit_num = 0; + char *endptr; + + driver_len = strlen(dd_drivername); + unit_num = strtoull(&dd_name[driver_len], &endptr, 10); + VMBUS_LOG(DEBUG, "Device name:%s, pnpinfo:%s", + dd_name, dd_pnpinfo); + + if (vmbus_scan_one(dd_drivername, unit_num) < 0) + goto error; + } + } + return 0; +error: + return -1; +} From patchwork Sat Apr 23 04:28:40 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Srikanth Kaka X-Patchwork-Id: 110266 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 64B59A00C4; Tue, 26 Apr 2022 10:33:26 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 3438842813; Tue, 26 Apr 2022 10:32:44 +0200 (CEST) Received: from mail-pl1-f179.google.com (mail-pl1-f179.google.com [209.85.214.179]) by mails.dpdk.org (Postfix) with ESMTP id 5FD1440042 for ; Sat, 23 Apr 2022 06:30:02 +0200 (CEST) Received: by mail-pl1-f179.google.com with SMTP id d15so15057594pll.10 for ; Fri, 22 Apr 2022 21:30:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oneconvergence.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=vyVw1g6TkkFNBfNOTh+lg5U2wJgJNRf1u/eY8Kt+ANE=; b=F87ClA2ocF3EgKMmLm8kKw52JKwM8q95BNl9V/xG+w/TzTn22YmqQTSlA5HjNo786z vo9TCGwCTikD2+k0Gc7IFNno1Almto94dAtgcpKdPewRYv6PRCcMGZQN1kpInqyWhPTb ixbOmYC7GJRtlebfzx1DRZMgKG55n8PtWdNlw= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=vyVw1g6TkkFNBfNOTh+lg5U2wJgJNRf1u/eY8Kt+ANE=; b=YmyuZ7/M1tSwa0HvJwa5GsDV3Yq63S6Zql6DD1YrvvCnNyGVQ1N9+vrG1pZk/pMFQT M87nPlG9QZOKZaQ1VMHwaljT/TaYsm1sLMJ6VVA82YGYoVx+FusxsXFsMI+BPXIgYugI 7A9REaZucLEVlSpjn7ClKfDkDxQkOxw10iVB3VSZXh4NykagTmtaihI0dV64voQgcuSU n58V6ievEWENKW5ygWZO7Lqr4Em1pe4RIYqBycmdaZChm0zgEpx9Z66m0jGbD50Ehw7x aQf/QQk/XQTaCQ6jmxqu10Vod6GYx1b8C7vUX9eHWq0wBBn0HjED22/Ek9crb3ZEO8+p klgw== X-Gm-Message-State: AOAM533UQW7DnxJDpT3BsqR/qKy+/yjw+cG8rKzBJxB3FOeD0RIOYsBv r8GNfHH4wMIIU23BB1x1N1lUp9H4fGU79ZRY X-Google-Smtp-Source: ABdhPJxEGWtFdq9UmajBP/HVA1fdM18rITcFQTA8nk7mFz04oByTkagn0l+IrR6tPFA/Y2V3emje5A== X-Received: by 2002:a17:90a:410a:b0:1cb:a279:6679 with SMTP id u10-20020a17090a410a00b001cba2796679mr19755621pjf.211.1650688201638; Fri, 22 Apr 2022 21:30:01 -0700 (PDT) Received: from home-desktop.localdomain ([49.37.158.191]) by smtp.gmail.com with ESMTPSA id g6-20020a17090a714600b001d7f3bb11d7sm4056438pjs.53.2022.04.22.21.29.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 22 Apr 2022 21:30:01 -0700 (PDT) From: Srikanth Kaka To: Stephen Hemminger , Long Li Cc: dev@dpdk.org, Vag Singh , Anand Thulasiram , Srikanth Kaka Subject: [PATCH v5 05/14] bus/vmbus: handle mapping of device resources Date: Sat, 23 Apr 2022 09:58:40 +0530 Message-Id: <20220423042849.7718-6-srikanth.k@oneconvergence.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220423042849.7718-1-srikanth.k@oneconvergence.com> References: <20220418042915.5765-1-srikanth.k@oneconvergence.com> <20220423042849.7718-1-srikanth.k@oneconvergence.com> MIME-Version: 1.0 X-Mailman-Approved-At: Tue, 26 Apr 2022 10:32:34 +0200 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org All resource values are published by HV_UIO driver as sysctl key value pairs and they are read at a later point of the code flow Signed-off-by: Srikanth Kaka Signed-off-by: Vag Singh Signed-off-by: Anand Thulasiram --- drivers/bus/vmbus/freebsd/vmbus_bus.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/drivers/bus/vmbus/freebsd/vmbus_bus.c b/drivers/bus/vmbus/freebsd/vmbus_bus.c index c1a3a5f..28f5ff4 100644 --- a/drivers/bus/vmbus/freebsd/vmbus_bus.c +++ b/drivers/bus/vmbus/freebsd/vmbus_bus.c @@ -28,6 +28,24 @@ return 0; } +/* map the resources of a vmbus device in virtual memory */ +int +rte_vmbus_map_device(struct rte_vmbus_device *dev) +{ + if (dev->uio_num < 0) { + VMBUS_LOG(DEBUG, "Not managed by UIO driver, skipped"); + return 1; + } + + return vmbus_uio_map_resource(dev); +} + +void +rte_vmbus_unmap_device(struct rte_vmbus_device *dev) +{ + vmbus_uio_unmap_resource(dev); +} + /* Scan one vmbus entry, and fill the devices list from it. */ static int vmbus_scan_one(const char *name, unsigned int unit_num) From patchwork Sat Apr 23 04:28:41 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Srikanth Kaka X-Patchwork-Id: 110267 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 24DB0A00C4; Tue, 26 Apr 2022 10:33:34 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 245FD42818; Tue, 26 Apr 2022 10:32:45 +0200 (CEST) Received: from mail-pl1-f193.google.com (mail-pl1-f193.google.com [209.85.214.193]) by mails.dpdk.org (Postfix) with ESMTP id 5558740E09 for ; Sat, 23 Apr 2022 06:30:05 +0200 (CEST) Received: by mail-pl1-f193.google.com with SMTP id s14so15051146plk.8 for ; Fri, 22 Apr 2022 21:30:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oneconvergence.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=zTa18xyTYiPFfeU/TSe3fPXTKrS//TcwiQvqQibUXSY=; b=PnD1E0eptjASS/co4e3igpKu/JeBP6Q3i/pIcpb2/ZGw24u1A7Zl+T62AatI91YR1+ nr8VBofKJLvFWGJLATnkPmAvwdW63Fn2mlBaIj1i75ESJtjjgXRrZnzilxoDEsgwt1vF uk0TpArOq9pOVowpdg9LoyxI9e4b1S6LhZ/l8= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=zTa18xyTYiPFfeU/TSe3fPXTKrS//TcwiQvqQibUXSY=; b=oNKu1+VJKkREwezzPxvxXD8wH5iAonb+aUC/8yOxzuSRho3slEQnrEClQnUX7gMaId rqdJ0xl8hAiatjxTg33njW8eD0dkjITCKZypIQkJSmuW0ymU+VjPC4AhFvV7P9wpCO4g vVmFMzTxXJZM+39scz+evaVMMu64f8/XpU2XypXnks2eDD8jc8pKGXmiQCjSxiEXkWVW ye3FMqW3BIPyx3Qg1hscVsHEQ/vjO8DKoQ1se36F+OKUvU3U2OHMjpV2yhAn/qDJPTk6 KMnw6esu1TvlzQeZQV6M0VDPGeTL57dxlMZao7ZV61OBIKwF36309YVvCnh4OnbLTzfe Wn+Q== X-Gm-Message-State: AOAM533U1uwqcCZQz5EttkWedgSL+UvOlAF9HZ9Z3nMSvmx3QVfDx8hN /zLoe3LqID3ka4EuG8VGMYIYGQ== X-Google-Smtp-Source: ABdhPJzuFtOrVVdICzkcRyu+zopuP9yYfs3lg1kB9mLy2lbVzH6PVoPrQaGMTLDR1VnHRLJW8qjlaw== X-Received: by 2002:a17:90b:3945:b0:1d2:9347:7fb8 with SMTP id oe5-20020a17090b394500b001d293477fb8mr9152952pjb.0.1650688204589; Fri, 22 Apr 2022 21:30:04 -0700 (PDT) Received: from home-desktop.localdomain ([49.37.158.191]) by smtp.gmail.com with ESMTPSA id g6-20020a17090a714600b001d7f3bb11d7sm4056438pjs.53.2022.04.22.21.30.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 22 Apr 2022 21:30:03 -0700 (PDT) From: Srikanth Kaka To: Stephen Hemminger , Long Li Cc: dev@dpdk.org, Vag Singh , Anand Thulasiram , Srikanth Kaka Subject: [PATCH v5 06/14] bus/vmbus: get device resource values using sysctl Date: Sat, 23 Apr 2022 09:58:41 +0530 Message-Id: <20220423042849.7718-7-srikanth.k@oneconvergence.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220423042849.7718-1-srikanth.k@oneconvergence.com> References: <20220418042915.5765-1-srikanth.k@oneconvergence.com> <20220423042849.7718-1-srikanth.k@oneconvergence.com> MIME-Version: 1.0 X-Mailman-Approved-At: Tue, 26 Apr 2022 10:32:34 +0200 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org The UIO device's attribute (relid, monitor id, etc) values are retrieved using following sysctl variables: $ sysctl dev.hv_uio.0 dev.hv_uio.0.send_buf.gpadl: 925241 dev.hv_uio.0.send_buf.size: 16777216 dev.hv_uio.0.recv_buf.gpadl: 925240 dev.hv_uio.0.recv_buf.size: 32505856 dev.hv_uio.0.monitor_page.size: 4096 dev.hv_uio.0.int_page.size: 4096 Signed-off-by: Srikanth Kaka Signed-off-by: Vag Singh Signed-off-by: Anand Thulasiram --- drivers/bus/vmbus/freebsd/vmbus_uio.c | 105 ++++++++++++++++++++++++++++++++ drivers/bus/vmbus/linux/vmbus_uio.c | 16 +++++ drivers/bus/vmbus/unix/vmbus_unix.h | 4 ++ drivers/bus/vmbus/unix/vmbus_unix_uio.c | 6 +- 4 files changed, 130 insertions(+), 1 deletion(-) create mode 100644 drivers/bus/vmbus/freebsd/vmbus_uio.c diff --git a/drivers/bus/vmbus/freebsd/vmbus_uio.c b/drivers/bus/vmbus/freebsd/vmbus_uio.c new file mode 100644 index 0000000..0544371 --- /dev/null +++ b/drivers/bus/vmbus/freebsd/vmbus_uio.c @@ -0,0 +1,105 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright (c) 2018, Microsoft Corporation. + * All Rights Reserved. + */ + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include "private.h" +#include "vmbus_unix.h" + +const char *driver_name = "hv_uio"; + +/* Check map names with kernel names */ +static const char *map_names[VMBUS_MAX_RESOURCE] = { + [HV_TXRX_RING_MAP] = "txrx_rings", + [HV_INT_PAGE_MAP] = "int_page", + [HV_MON_PAGE_MAP] = "monitor_page", + [HV_RECV_BUF_MAP] = "recv_buf", + [HV_SEND_BUF_MAP] = "send_buf", +}; + +static int +sysctl_get_vmbus_device_info(struct rte_vmbus_device *dev) +{ + char sysctl_buf[PATH_MAX]; + char sysctl_var[PATH_MAX]; + size_t len = PATH_MAX, sysctl_len; + unsigned long tmp; + int i; + + snprintf(sysctl_buf, len, "dev.%s.%d", driver_name, dev->uio_num); + + sysctl_len = sizeof(unsigned long); + /* get relid */ + snprintf(sysctl_var, len, "%s.channel.ch_id", sysctl_buf); + if (sysctlbyname(sysctl_var, &tmp, &sysctl_len, NULL, 0) < 0) { + VMBUS_LOG(ERR, "could not read %s", sysctl_var); + goto error; + } + dev->relid = tmp; + + /* get monitor id */ + snprintf(sysctl_var, len, "%s.channel.%u.monitor_id", sysctl_buf, + dev->relid); + if (sysctlbyname(sysctl_var, &tmp, &sysctl_len, NULL, 0) < 0) { + VMBUS_LOG(ERR, "could not read %s", sysctl_var); + goto error; + } + dev->monitor_id = tmp; + + /* Extract resource value */ + for (i = 0; i < VMBUS_MAX_RESOURCE; i++) { + struct rte_mem_resource *res = &dev->resource[i]; + unsigned long size, gpad = 0; + size_t sizelen = sizeof(len); + + snprintf(sysctl_var, sizeof(sysctl_var), "%s.%s.size", + sysctl_buf, map_names[i]); + if (sysctlbyname(sysctl_var, &size, &sizelen, NULL, 0) < 0) { + VMBUS_LOG(ERR, + "could not read %s", sysctl_var); + goto error; + } + res->len = size; + + if (i == HV_RECV_BUF_MAP || i == HV_SEND_BUF_MAP) { + snprintf(sysctl_var, sizeof(sysctl_var), "%s.%s.gpadl", + sysctl_buf, map_names[i]); + if (sysctlbyname(sysctl_var, &gpad, &sizelen, NULL, 0) < 0) { + VMBUS_LOG(ERR, + "could not read %s", sysctl_var); + goto error; + } + /* put the GPAD value in physical address */ + res->phys_addr = gpad; + } + } + return 0; +error: + return -1; +} + +/* + * On FreeBSD, the device is opened first to ensure kernel UIO driver + * is properly initialized before reading device attributes + */ +int vmbus_get_device_info_os(struct rte_vmbus_device *dev) +{ + return sysctl_get_vmbus_device_info(dev); +} + +const char *get_devname_os(void) +{ + return "/dev/hv_uio"; +} diff --git a/drivers/bus/vmbus/linux/vmbus_uio.c b/drivers/bus/vmbus/linux/vmbus_uio.c index b5d15c9..69f0b26 100644 --- a/drivers/bus/vmbus/linux/vmbus_uio.c +++ b/drivers/bus/vmbus/linux/vmbus_uio.c @@ -199,3 +199,19 @@ int vmbus_uio_get_subchan(struct vmbus_channel *primary, closedir(chan_dir); return err; } + +/* + * In Linux the device info is fetched from SYSFS and doesn't need + * opening of the device before reading its attributes + * This is a stub function and it should always succeed. + */ +int vmbus_get_device_info_os(struct rte_vmbus_device *dev) +{ + RTE_SET_USED(dev); + return 0; +} + +const char *get_devname_os(void) +{ + return "/dev/uio"; +} diff --git a/drivers/bus/vmbus/unix/vmbus_unix.h b/drivers/bus/vmbus/unix/vmbus_unix.h index 579c4bb..59afc10 100644 --- a/drivers/bus/vmbus/unix/vmbus_unix.h +++ b/drivers/bus/vmbus/unix/vmbus_unix.h @@ -20,4 +20,8 @@ int vmbus_uio_map_subchan_os(const struct rte_vmbus_device *dev, bool vmbus_isnew_subchannel(struct vmbus_channel *primary, unsigned long id); +int vmbus_get_device_info_os(struct rte_vmbus_device *dev); + +const char *get_devname_os(void); + #endif /* _VMBUS_BUS_UNIX_H_ */ diff --git a/drivers/bus/vmbus/unix/vmbus_unix_uio.c b/drivers/bus/vmbus/unix/vmbus_unix_uio.c index c5ce8ca..5a57a5e 100644 --- a/drivers/bus/vmbus/unix/vmbus_unix_uio.c +++ b/drivers/bus/vmbus/unix/vmbus_unix_uio.c @@ -82,7 +82,8 @@ int vmbus_uio_irq_read(struct rte_vmbus_device *dev) int fd; /* save fd if in primary process */ - snprintf(devname, sizeof(devname), "/dev/uio%u", dev->uio_num); + snprintf(devname, sizeof(devname), "%s%u", get_devname_os(), + dev->uio_num); fd = open(devname, O_RDWR); if (fd < 0) { VMBUS_LOG(ERR, "Cannot open %s: %s", @@ -106,6 +107,9 @@ int vmbus_uio_irq_read(struct rte_vmbus_device *dev) strlcpy((*uio_res)->path, devname, PATH_MAX); rte_uuid_copy((*uio_res)->id, dev->device_id); + if (vmbus_get_device_info_os(dev) < 0) + goto error; + return 0; error: From patchwork Sat Apr 23 04:28:42 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Srikanth Kaka X-Patchwork-Id: 110268 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id D095DA00C4; Tue, 26 Apr 2022 10:33:45 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 0E0E342812; Tue, 26 Apr 2022 10:32:51 +0200 (CEST) Received: from mail-pg1-f169.google.com (mail-pg1-f169.google.com [209.85.215.169]) by mails.dpdk.org (Postfix) with ESMTP id 5C77840E09 for ; Sat, 23 Apr 2022 06:30:08 +0200 (CEST) Received: by mail-pg1-f169.google.com with SMTP id h5so8887510pgc.7 for ; Fri, 22 Apr 2022 21:30:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oneconvergence.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=xHI3zYDMG9RY/SY7djFYcFqY9H8+sbi4liXQQ+VbHSA=; b=T4wYGrG3jZgpiCxmw7MYEElQWFtP9FV+NrNmd83KF06lMTr09H1N/OmFGSO8dTYeCw B3SHP97KgzfNJErZJHlPsUb5ipoVOcnoNxjx5oobXrEwnmi2/zMimrvThExvJFHxCT+/ P8JrzYL0R++D24R+n3BydTAhjQ44dqtw4ZzrU= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=xHI3zYDMG9RY/SY7djFYcFqY9H8+sbi4liXQQ+VbHSA=; b=WOC2ecDjJunMt8/ElJp2KkaAthq/V5Dc5hog07/ErBzMTCwPZIBZnlY3lrMjt6uVes GH31+EQxcBTrYbFs2b77/0jy5dT3Ayj6omjbqr2Ik5lNrG3bZVO7PEa7dEQKMHe0Ofok sjx2kjcQLeNLNm9c5osB5Wdj0M/Ftj3p3QNuXeWdFMkIFpjqeBBpI7f5b7SZI/0Qypwf 7VhNBHpM5iMiY1/z7ekfNP8ZAqQg1WQScjIxlqC+4rQLJqD7nkpTwi7BiHBTme3Mm2qN +oYA5Z7rSq8XUUmv0IrvbYXgkvQ85o8CbxaMmnZzPg3wp6lR4KkphE6zHeBPaI328g/d 94bw== X-Gm-Message-State: AOAM532JChGAaYvTRxMBb2uyjOkhujpkAg549svBSsaWqbzzZkJ5gTnU nKwOIwYel0h0cQCd5xIxZBJLmw== X-Google-Smtp-Source: ABdhPJwCMczx5Xq6G8OxLVCRDBW07tjDjRFB6mzvGCTfEShOvj/FDLzeaVgSSwnAbLNTVC6JxJd0Cw== X-Received: by 2002:a63:714e:0:b0:398:9bdc:e11a with SMTP id b14-20020a63714e000000b003989bdce11amr6440955pgn.572.1650688207371; Fri, 22 Apr 2022 21:30:07 -0700 (PDT) Received: from home-desktop.localdomain ([49.37.158.191]) by smtp.gmail.com with ESMTPSA id g6-20020a17090a714600b001d7f3bb11d7sm4056438pjs.53.2022.04.22.21.30.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 22 Apr 2022 21:30:06 -0700 (PDT) From: Srikanth Kaka To: Stephen Hemminger , Long Li Cc: dev@dpdk.org, Vag Singh , Anand Thulasiram , Srikanth Kaka Subject: [PATCH v5 07/14] net/netvsc: make event monitor OS dependent Date: Sat, 23 Apr 2022 09:58:42 +0530 Message-Id: <20220423042849.7718-8-srikanth.k@oneconvergence.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220423042849.7718-1-srikanth.k@oneconvergence.com> References: <20220418042915.5765-1-srikanth.k@oneconvergence.com> <20220423042849.7718-1-srikanth.k@oneconvergence.com> MIME-Version: 1.0 X-Mailman-Approved-At: Tue, 26 Apr 2022 10:32:34 +0200 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org - Event monitoring is not yet supported on FreeBSD, hence moving it to the OS specific files - Add meson support to OS environment Signed-off-by: Srikanth Kaka Signed-off-by: Vag Singh Signed-off-by: Anand Thulasiram --- drivers/net/netvsc/freebsd/hn_os.c | 16 ++++++++++++++++ drivers/net/netvsc/freebsd/meson.build | 6 ++++++ drivers/net/netvsc/hn_ethdev.c | 7 +++---- drivers/net/netvsc/hn_os.h | 6 ++++++ drivers/net/netvsc/linux/hn_os.c | 21 +++++++++++++++++++++ drivers/net/netvsc/linux/meson.build | 6 ++++++ drivers/net/netvsc/meson.build | 3 +++ 7 files changed, 61 insertions(+), 4 deletions(-) create mode 100644 drivers/net/netvsc/freebsd/hn_os.c create mode 100644 drivers/net/netvsc/freebsd/meson.build create mode 100644 drivers/net/netvsc/hn_os.h create mode 100644 drivers/net/netvsc/linux/hn_os.c create mode 100644 drivers/net/netvsc/linux/meson.build diff --git a/drivers/net/netvsc/freebsd/hn_os.c b/drivers/net/netvsc/freebsd/hn_os.c new file mode 100644 index 0000000..4c6a798 --- /dev/null +++ b/drivers/net/netvsc/freebsd/hn_os.c @@ -0,0 +1,16 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright(c) 2016-2021 Microsoft Corporation + */ + +#include + +#include + +#include "hn_logs.h" +#include "hn_os.h" + +int eth_hn_os_dev_event(void) +{ + PMD_DRV_LOG(DEBUG, "rte_dev_event_monitor_start not supported on FreeBSD"); + return 0; +} diff --git a/drivers/net/netvsc/freebsd/meson.build b/drivers/net/netvsc/freebsd/meson.build new file mode 100644 index 0000000..78f824f --- /dev/null +++ b/drivers/net/netvsc/freebsd/meson.build @@ -0,0 +1,6 @@ +# SPDX-License-Identifier: BSD-3-Clause +# Copyright(c) 2018 Microsoft Corporation + +sources += files( + 'hn_os.c', +) diff --git a/drivers/net/netvsc/hn_ethdev.c b/drivers/net/netvsc/hn_ethdev.c index 8a95040..8b1e07b 100644 --- a/drivers/net/netvsc/hn_ethdev.c +++ b/drivers/net/netvsc/hn_ethdev.c @@ -39,6 +39,7 @@ #include "hn_rndis.h" #include "hn_nvs.h" #include "ndis.h" +#include "hn_os.h" #define HN_TX_OFFLOAD_CAPS (RTE_ETH_TX_OFFLOAD_IPV4_CKSUM | \ RTE_ETH_TX_OFFLOAD_TCP_CKSUM | \ @@ -1240,11 +1241,9 @@ static int eth_hn_probe(struct rte_vmbus_driver *drv __rte_unused, PMD_INIT_FUNC_TRACE(); - ret = rte_dev_event_monitor_start(); - if (ret) { - PMD_DRV_LOG(ERR, "Failed to start device event monitoring"); + ret = eth_hn_os_dev_event(); + if (ret) return ret; - } eth_dev = eth_dev_vmbus_allocate(dev, sizeof(struct hn_data)); if (!eth_dev) diff --git a/drivers/net/netvsc/hn_os.h b/drivers/net/netvsc/hn_os.h new file mode 100644 index 0000000..618c53c --- /dev/null +++ b/drivers/net/netvsc/hn_os.h @@ -0,0 +1,6 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright (c) 2009-2021 Microsoft Corp. + * All rights reserved. + */ + +int eth_hn_os_dev_event(void); diff --git a/drivers/net/netvsc/linux/hn_os.c b/drivers/net/netvsc/linux/hn_os.c new file mode 100644 index 0000000..1ea12ce --- /dev/null +++ b/drivers/net/netvsc/linux/hn_os.c @@ -0,0 +1,21 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright(c) 2016-2021 Microsoft Corporation + */ + +#include + +#include + +#include "hn_logs.h" +#include "hn_os.h" + +int eth_hn_os_dev_event(void) +{ + int ret; + + ret = rte_dev_event_monitor_start(); + if (ret) + PMD_DRV_LOG(ERR, "Failed to start device event monitoring"); + + return ret; +} diff --git a/drivers/net/netvsc/linux/meson.build b/drivers/net/netvsc/linux/meson.build new file mode 100644 index 0000000..78f824f --- /dev/null +++ b/drivers/net/netvsc/linux/meson.build @@ -0,0 +1,6 @@ +# SPDX-License-Identifier: BSD-3-Clause +# Copyright(c) 2018 Microsoft Corporation + +sources += files( + 'hn_os.c', +) diff --git a/drivers/net/netvsc/meson.build b/drivers/net/netvsc/meson.build index bb6225d..c50414d 100644 --- a/drivers/net/netvsc/meson.build +++ b/drivers/net/netvsc/meson.build @@ -8,6 +8,7 @@ if is_windows endif deps += 'bus_vmbus' +includes += include_directories(exec_env) sources = files( 'hn_ethdev.c', 'hn_nvs.c', @@ -15,3 +16,5 @@ sources = files( 'hn_rxtx.c', 'hn_vf.c', ) + +subdir(exec_env) From patchwork Sat Apr 23 04:28:43 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Srikanth Kaka X-Patchwork-Id: 110269 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 42FF9A00C4; Tue, 26 Apr 2022 10:33:52 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id E9F9A42827; Tue, 26 Apr 2022 10:32:51 +0200 (CEST) Received: from mail-pl1-f170.google.com (mail-pl1-f170.google.com [209.85.214.170]) by mails.dpdk.org (Postfix) with ESMTP id 8795240E09 for ; Sat, 23 Apr 2022 06:30:11 +0200 (CEST) Received: by mail-pl1-f170.google.com with SMTP id h12so11384405plf.12 for ; Fri, 22 Apr 2022 21:30:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oneconvergence.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=cTyYosyEDZ3ddumbgTfsxZBjypUcxxLo4wkhsxdGx30=; b=X5fXLKmfaOBYbmem1rnRja/PsdK0Au8jZAqsTzQ9vciMDleIAZyGoDfhLmo2V7a7o0 f9g4vIkOmJm+NoePP5n0W9i81qdNjmWul/XnKsTaaRd3KU86mpvKfXkT69ujSOfVl7wX nAfcRXL8etise0fQwMcSoKbGaAnFQmgF5c35o= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=cTyYosyEDZ3ddumbgTfsxZBjypUcxxLo4wkhsxdGx30=; b=jRxt5mBaXnBDWXTu6NTYlbO3DK4BlsvzF4T6+C9yx9Qbbo2eQVrGTGYPy1qkeYoo4a FwAfXtooTXa7U2Nc10pRnHuQ83QpdFHS/+yaW1vzN3j49NTNPVpSy3MIoX7UzBslLVbP zu1lvCWDSMydQ4Yq0vC9qJcLL+YzoyXRI0jKUndmcdlqi31xQkgvOkRKZizhbYTo4DKM KfkqI9JmuHU96knN692g+8HslQucfoSG+6gJClvwyceBiGMf82wC+IWoEMHxeN8tcAp6 63YhhuQBzYcam2okAzgiPXnx/s1/KHB1C4rLc10TRy7aJifk8n72Be5hhqopsb5N7Gou ee5w== X-Gm-Message-State: AOAM532ZfH93QwwlgV2lKA1TUFWL2X42je413zCuHqG+ECHZGhEb1OVy cYbJHrrI/qN3pVwgPVHxtaFI8Q== X-Google-Smtp-Source: ABdhPJx+fXWN7J+jjk/iwGDIdcVqU3knkMZMWqi2dmHAOoPBBFYEaiavKDfwA9UyIqsu0P2h1aggtw== X-Received: by 2002:a17:90a:4a95:b0:1d8:2918:7065 with SMTP id f21-20020a17090a4a9500b001d829187065mr6876286pjh.117.1650688210746; Fri, 22 Apr 2022 21:30:10 -0700 (PDT) Received: from home-desktop.localdomain ([49.37.158.191]) by smtp.gmail.com with ESMTPSA id g6-20020a17090a714600b001d7f3bb11d7sm4056438pjs.53.2022.04.22.21.30.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 22 Apr 2022 21:30:10 -0700 (PDT) From: Srikanth Kaka To: Stephen Hemminger , Long Li Cc: dev@dpdk.org, Vag Singh , Anand Thulasiram , Srikanth Kaka Subject: [PATCH v5 08/14] bus/vmbus: add sub-channel mapping support Date: Sat, 23 Apr 2022 09:58:43 +0530 Message-Id: <20220423042849.7718-9-srikanth.k@oneconvergence.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220423042849.7718-1-srikanth.k@oneconvergence.com> References: <20220418042915.5765-1-srikanth.k@oneconvergence.com> <20220423042849.7718-1-srikanth.k@oneconvergence.com> MIME-Version: 1.0 X-Mailman-Approved-At: Tue, 26 Apr 2022 10:32:34 +0200 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org To map the subchannels, an mmap request is directly made after determining the subchan memory offset Signed-off-by: Srikanth Kaka Signed-off-by: Vag Singh Signed-off-by: Anand Thulasiram --- drivers/bus/vmbus/freebsd/vmbus_uio.c | 48 +++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/drivers/bus/vmbus/freebsd/vmbus_uio.c b/drivers/bus/vmbus/freebsd/vmbus_uio.c index 0544371..55b8f18 100644 --- a/drivers/bus/vmbus/freebsd/vmbus_uio.c +++ b/drivers/bus/vmbus/freebsd/vmbus_uio.c @@ -18,6 +18,13 @@ #include "private.h" #include "vmbus_unix.h" +/* + * Macros to distinguish mmap request + * [7-0] - Device memory region + * [15-8]- Sub-channel id + */ +#define UH_SUBCHAN_MASK_SHIFT 8 + const char *driver_name = "hv_uio"; /* Check map names with kernel names */ @@ -99,6 +106,47 @@ int vmbus_get_device_info_os(struct rte_vmbus_device *dev) return sysctl_get_vmbus_device_info(dev); } +int vmbus_uio_map_subchan_os(const struct rte_vmbus_device *dev, + const struct vmbus_channel *chan, + void **mapaddr, size_t *size) +{ + char ring_path[PATH_MAX]; + off_t offset; + int fd; + + snprintf(ring_path, sizeof(ring_path), + "/dev/hv_uio%d", dev->uio_num); + + fd = open(ring_path, O_RDWR); + if (fd < 0) { + VMBUS_LOG(ERR, "Cannot open %s: %s", + ring_path, strerror(errno)); + return -errno; + } + + /* subchannel rings are of the same size as primary */ + *size = dev->resource[HV_TXRX_RING_MAP].len; + offset = (chan->relid << UH_SUBCHAN_MASK_SHIFT) * PAGE_SIZE; + + *mapaddr = vmbus_map_resource(vmbus_map_addr, fd, + offset, *size, 0); + close(fd); + + if (*mapaddr == MAP_FAILED) + return -EIO; + + return 0; +} + +/* This function should always succeed */ +bool vmbus_uio_subchannels_supported(const struct rte_vmbus_device *dev, + const struct vmbus_channel *chan) +{ + RTE_SET_USED(dev); + RTE_SET_USED(chan); + return true; +} + const char *get_devname_os(void) { return "/dev/hv_uio"; From patchwork Sat Apr 23 04:28:44 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Srikanth Kaka X-Patchwork-Id: 110270 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 59B6FA00C4; Tue, 26 Apr 2022 10:33:58 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id D46504282A; Tue, 26 Apr 2022 10:32:52 +0200 (CEST) Received: from mail-pl1-f174.google.com (mail-pl1-f174.google.com [209.85.214.174]) by mails.dpdk.org (Postfix) with ESMTP id 835BD40E09 for ; Sat, 23 Apr 2022 06:30:14 +0200 (CEST) Received: by mail-pl1-f174.google.com with SMTP id b12so246389plg.4 for ; Fri, 22 Apr 2022 21:30:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oneconvergence.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=qUPSBoiZizDQ/lFG6R4aq6K9burRAzRnEfD1rLnlio0=; b=QJoWxS8MpnfbsGnJ+Psfy/owlNu0S7RnlNGCXOtHaqpGeFpYooge3Ei9twFBAxajAS MWLPgqk6KveekFI3VUx+hxFq4Kmjce2WbT+I+6NjKLIdinO7YjQ6QgdOH27VOMbxsCkY QYtUZJHcmdC7vs+5YzLK7qcN5A7Zm7fN9Pj2Q= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=qUPSBoiZizDQ/lFG6R4aq6K9burRAzRnEfD1rLnlio0=; b=3l1OeL1LUhJYRm2Ynv2XFVLdn6iUbLXfI3LqFGyg2l8youwc76KnvBquuwFd/G5DI8 KPx+tuxC4paVDMBytz15SyyOCtKbZsnfM7eJltYNergsdsazKBdLv4rwmRqi0eJurAoJ ixp/GfDMLwoJnPV+liWgV1DH87U1oIc4sW2MHNQdpRDURV+QoFGWL4lDuagjCGZbtZID pVy1n3Gc/l8+N5ECxfgc0NQ2FlmOfV1FE2cou63YEqdFmwsQ2qT7vbmjYRWdTZNwc2S5 kIIABo1oSqTu4OVOwe+M1rtYciK62/zqE33rU79O89lOX1q2QsQlRrOM5HiKGOHWH2UO y76A== X-Gm-Message-State: AOAM531Ue79xMiNDRsPcJBARO1L0akMq6hNwnl4l1fIResv5RkhrHVmz FFnUvhYeDjqbzR+DJZqTRsmINpcc2D70LkD2 X-Google-Smtp-Source: ABdhPJyhzG3p9NZYSBAmHnh6ZtgyJaNWK4b23QHz8cVSHmPEFFa3lBLHApi9nsFUPeROluidJC+39Q== X-Received: by 2002:a17:902:f542:b0:159:62:3871 with SMTP id h2-20020a170902f54200b0015900623871mr7865363plf.61.1650688213717; Fri, 22 Apr 2022 21:30:13 -0700 (PDT) Received: from home-desktop.localdomain ([49.37.158.191]) by smtp.gmail.com with ESMTPSA id g6-20020a17090a714600b001d7f3bb11d7sm4056438pjs.53.2022.04.22.21.30.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 22 Apr 2022 21:30:13 -0700 (PDT) From: Srikanth Kaka To: Stephen Hemminger , Long Li Cc: dev@dpdk.org, Vag Singh , Anand Thulasiram , Srikanth Kaka Subject: [PATCH v5 09/14] bus/vmbus: open subchannels Date: Sat, 23 Apr 2022 09:58:44 +0530 Message-Id: <20220423042849.7718-10-srikanth.k@oneconvergence.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220423042849.7718-1-srikanth.k@oneconvergence.com> References: <20220418042915.5765-1-srikanth.k@oneconvergence.com> <20220423042849.7718-1-srikanth.k@oneconvergence.com> MIME-Version: 1.0 X-Mailman-Approved-At: Tue, 26 Apr 2022 10:32:34 +0200 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org In FreeBSD, unlike Linux there is no sub-channel open callback that could be called by HV_UIO driver upon their grant by the hypervisor. Thus the PMD makes an IOCTL to the HV_UIO to open the sub-channels On Linux, the vmbus_uio_subchan_open() will always return success as the Linux HV_UIO opens them implicitly. Signed-off-by: Srikanth Kaka Signed-off-by: Vag Singh Signed-off-by: Anand Thulasiram --- drivers/bus/vmbus/freebsd/vmbus_uio.c | 30 ++++++++++++++++++++++++++++++ drivers/bus/vmbus/linux/vmbus_uio.c | 12 ++++++++++++ drivers/bus/vmbus/private.h | 1 + drivers/bus/vmbus/rte_bus_vmbus.h | 11 +++++++++++ drivers/bus/vmbus/version.map | 6 ++++++ drivers/bus/vmbus/vmbus_channel.c | 5 +++++ 6 files changed, 65 insertions(+) diff --git a/drivers/bus/vmbus/freebsd/vmbus_uio.c b/drivers/bus/vmbus/freebsd/vmbus_uio.c index 55b8f18..438db41 100644 --- a/drivers/bus/vmbus/freebsd/vmbus_uio.c +++ b/drivers/bus/vmbus/freebsd/vmbus_uio.c @@ -25,6 +25,9 @@ */ #define UH_SUBCHAN_MASK_SHIFT 8 +/* ioctl */ +#define HVIOOPENSUBCHAN _IOW('h', 14, uint32_t) + const char *driver_name = "hv_uio"; /* Check map names with kernel names */ @@ -151,3 +154,30 @@ const char *get_devname_os(void) { return "/dev/hv_uio"; } + +int vmbus_uio_subchan_open(struct rte_vmbus_device *dev, uint32_t subchan) +{ + struct mapped_vmbus_resource *uio_res; + int fd, err = 0; + + uio_res = vmbus_uio_find_resource(dev); + if (!uio_res) { + VMBUS_LOG(ERR, "cannot find uio resource"); + return -EINVAL; + } + + fd = open(uio_res->path, O_RDWR); + if (fd < 0) { + VMBUS_LOG(ERR, "Cannot open %s: %s", + uio_res->path, strerror(errno)); + return -1; + } + + if (ioctl(fd, HVIOOPENSUBCHAN, &subchan)) { + VMBUS_LOG(ERR, "open subchan ioctl failed %s: %s", + uio_res->path, strerror(errno)); + err = -1; + } + close(fd); + return err; +} diff --git a/drivers/bus/vmbus/linux/vmbus_uio.c b/drivers/bus/vmbus/linux/vmbus_uio.c index 69f0b26..b9616bd 100644 --- a/drivers/bus/vmbus/linux/vmbus_uio.c +++ b/drivers/bus/vmbus/linux/vmbus_uio.c @@ -215,3 +215,15 @@ const char *get_devname_os(void) { return "/dev/uio"; } + +/* + * This is a stub function and it should always succeed. + * The Linux UIO kernel driver opens the subchannels implicitly. + */ +int vmbus_uio_subchan_open(struct rte_vmbus_device *dev, + uint32_t subchan) +{ + RTE_SET_USED(dev); + RTE_SET_USED(subchan); + return 0; +} diff --git a/drivers/bus/vmbus/private.h b/drivers/bus/vmbus/private.h index 1bca147..ea0276a 100644 --- a/drivers/bus/vmbus/private.h +++ b/drivers/bus/vmbus/private.h @@ -116,6 +116,7 @@ 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_subchan_open(struct rte_vmbus_device *device, uint32_t subchan); void vmbus_br_setup(struct vmbus_br *br, void *buf, unsigned int blen); diff --git a/drivers/bus/vmbus/rte_bus_vmbus.h b/drivers/bus/vmbus/rte_bus_vmbus.h index a24bad8..06b2ffc 100644 --- a/drivers/bus/vmbus/rte_bus_vmbus.h +++ b/drivers/bus/vmbus/rte_bus_vmbus.h @@ -404,6 +404,17 @@ void rte_vmbus_set_latency(const struct rte_vmbus_device *dev, */ void rte_vmbus_unregister(struct rte_vmbus_driver *driver); +/** + * Perform IOCTL to VMBUS device + * + * @param device + * A pointer to a rte_vmbus_device structure + * @param subchan + * Count of subchannels to open + */ +__rte_experimental +int rte_vmbus_ioctl(struct rte_vmbus_device *device, uint32_t subchan); + /** Helper for VMBUS device registration from driver instance */ #define RTE_PMD_REGISTER_VMBUS(nm, vmbus_drv) \ RTE_INIT(vmbusinitfn_ ##nm) \ diff --git a/drivers/bus/vmbus/version.map b/drivers/bus/vmbus/version.map index 3cadec7..e5b7218 100644 --- a/drivers/bus/vmbus/version.map +++ b/drivers/bus/vmbus/version.map @@ -26,3 +26,9 @@ DPDK_22 { local: *; }; + +EXPERIMENTAL { + global: + + rte_vmbus_ioctl; +}; diff --git a/drivers/bus/vmbus/vmbus_channel.c b/drivers/bus/vmbus/vmbus_channel.c index 119b9b3..9a8f6e3 100644 --- a/drivers/bus/vmbus/vmbus_channel.c +++ b/drivers/bus/vmbus/vmbus_channel.c @@ -365,6 +365,11 @@ int rte_vmbus_max_channels(const struct rte_vmbus_device *device) return 1; } +int rte_vmbus_ioctl(struct rte_vmbus_device *device, uint32_t subchan) +{ + return vmbus_uio_subchan_open(device, subchan); +} + /* Setup secondary channel */ int rte_vmbus_subchan_open(struct vmbus_channel *primary, struct vmbus_channel **new_chan) From patchwork Sat Apr 23 04:28:45 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Srikanth Kaka X-Patchwork-Id: 110271 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 1B6F7A00C4; Tue, 26 Apr 2022 10:34:04 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id A9ACA4282F; Tue, 26 Apr 2022 10:32:53 +0200 (CEST) Received: from mail-pl1-f170.google.com (mail-pl1-f170.google.com [209.85.214.170]) by mails.dpdk.org (Postfix) with ESMTP id 6EFB84003F for ; Sat, 23 Apr 2022 06:30:17 +0200 (CEST) Received: by mail-pl1-f170.google.com with SMTP id c23so15102703plo.0 for ; Fri, 22 Apr 2022 21:30:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oneconvergence.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=i0uMkeRByG7bNsgDW/eQzYBovu/Xh3EYlcSLsTCxxVo=; b=MohfjdVZc55kGt6OccV3/he9f14IZiDrjSBRxsyCZtI86eBxeVDHFA6AaUHtfim7c/ Unl7jaRFH7rkoEOcemtrEzVpABAKqHXFPbhoJAXzE5apxjUSdCA7KahsQH+lwOuvGPdb LkimfbdUgSucJ5EqNOr5PUqGH8jrgYdoZF9GY= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=i0uMkeRByG7bNsgDW/eQzYBovu/Xh3EYlcSLsTCxxVo=; b=FOE44xW+U40FuMCmWUWQPh4ih3RPSxi4lMl+IdPvMV5exIiVPh2D7/8ZvHtwaQmmuG ycfeBgh+eZafMDGb/YIWyJoK+Gnt92pQJCUUYr/kkLaRqLNcbEyqyTfSejr5K8C31wMl AkED0Hz1kTPPspp7ce/xOqeepqKoOND5g7Zlm7ds2YEAIFsbIkqDp5haE6lbR9oZtXrt CCbdrF89IQXkCymOmsQ7jglEG4HThi70R4OYe/gG30DEkJ4+Ks/7bwhW7N59ZysLCGGN l4AbAm6OZw8jH5WauyaHsAtv+QQS7hDm6B7MUjkUqVN6iH9mdz6dEKEoDsV9l+b7ZHKe B78Q== X-Gm-Message-State: AOAM532DM2OLXGVgxZRXrU+eFyrqP5Tt9aenE6B4O44GAa2Gj3ipmV7b 7ebRvtZz4Ri+O/bKT7HwT+tXYw== X-Google-Smtp-Source: ABdhPJwKW9dG58jjbs93snv/xEnEBsSVdYDmtqccvF7QV5QSDFPmLeInf9Pm6102PfJ2EuJdWvMb+g== X-Received: by 2002:a17:90b:1a87:b0:1d5:2320:9b6b with SMTP id ng7-20020a17090b1a8700b001d523209b6bmr15856030pjb.90.1650688216502; Fri, 22 Apr 2022 21:30:16 -0700 (PDT) Received: from home-desktop.localdomain ([49.37.158.191]) by smtp.gmail.com with ESMTPSA id g6-20020a17090a714600b001d7f3bb11d7sm4056438pjs.53.2022.04.22.21.30.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 22 Apr 2022 21:30:15 -0700 (PDT) From: Srikanth Kaka To: Stephen Hemminger , Long Li Cc: dev@dpdk.org, Vag Singh , Anand Thulasiram , Srikanth Kaka Subject: [PATCH v5 10/14] net/netvsc: make IOCTL call to open subchannels Date: Sat, 23 Apr 2022 09:58:45 +0530 Message-Id: <20220423042849.7718-11-srikanth.k@oneconvergence.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220423042849.7718-1-srikanth.k@oneconvergence.com> References: <20220418042915.5765-1-srikanth.k@oneconvergence.com> <20220423042849.7718-1-srikanth.k@oneconvergence.com> MIME-Version: 1.0 X-Mailman-Approved-At: Tue, 26 Apr 2022 10:32:34 +0200 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org make IOCTL call to open subchannels Signed-off-by: Srikanth Kaka Signed-off-by: Vag Singh Signed-off-by: Anand Thulasiram --- drivers/net/netvsc/hn_ethdev.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/drivers/net/netvsc/hn_ethdev.c b/drivers/net/netvsc/hn_ethdev.c index 8b1e07b..104c7ae 100644 --- a/drivers/net/netvsc/hn_ethdev.c +++ b/drivers/net/netvsc/hn_ethdev.c @@ -516,6 +516,10 @@ static int hn_subchan_configure(struct hn_data *hv, if (err) return err; + err = rte_vmbus_ioctl(hv->vmbus, subchan); + if (err) + return err; + while (subchan > 0) { struct vmbus_channel *new_sc; uint16_t chn_index; From patchwork Sat Apr 23 04:28:46 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Srikanth Kaka X-Patchwork-Id: 110272 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id F12A5A00C4; Tue, 26 Apr 2022 10:34:09 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 8FC2142835; Tue, 26 Apr 2022 10:32:54 +0200 (CEST) Received: from mail-pl1-f195.google.com (mail-pl1-f195.google.com [209.85.214.195]) by mails.dpdk.org (Postfix) with ESMTP id 26A9B40E09 for ; Sat, 23 Apr 2022 06:30:20 +0200 (CEST) Received: by mail-pl1-f195.google.com with SMTP id s17so15055338plg.9 for ; Fri, 22 Apr 2022 21:30:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oneconvergence.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=I0Wk461oRId+aoyqibk9l8b64+5KVFa7/vN5pNJXBeA=; b=eY3SY/SncXTt9ucBt0PGp2REwREh7R6MFyLmKgehDrGkiCI7/34GM3HmmMKyoP3wmZ EWwHRVlipQyD2jBZchKl3PAR6AzeQDL5Xweoiz6Oix6tAz8BAq8ir1AQp2g/seN1vovF i2lJqTUYPtPDd6+xf8V10+Srot1NY9dfG1bMo= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=I0Wk461oRId+aoyqibk9l8b64+5KVFa7/vN5pNJXBeA=; b=AjC2LKLuLuxmqwPLhv6Z+HMAcAzlySTzU+TrRh1POCwh5qF+PT4Q2FGDFJcULzF6ts vSzJOLS66+sK9xv0lqY134JjH1ED7MGt/1DGOeZKanA0pZyEQLzmChl2YChWE/xPBZqW 5JSbuksQmXJTJuhPWuiNaQOpTVhfmLvIA0YL0QdWJJOahhsh1UyCCZyW5iDYj7HLrMgd vXo45HVYV8ntChbC5FNuLgFv7kN4s0IMJN4UnDCGJ5vat527fiugISnWG7I1qSBst60L jYHIWeBCrpIe9EiEbDygYbWtlrBLuXauQwEg2LIYXPxVYQyR7fXl8Zm5g9xPLVez9ShE F36g== X-Gm-Message-State: AOAM533zc5RHInHKQBXEvX2nvkigW6hy8xnILjSDn0eIeSWaNTMSxuen Xo5levFwUyJNQsupcS/w7BVFnpcUj4lPcgOH X-Google-Smtp-Source: ABdhPJzmO90TJoein+lJkY7nNz3d7xukhH5bJ5xMlQlHL36bGrXtR7evVqRUSkyLWX7GoXMZIOzw8A== X-Received: by 2002:a17:90b:4b05:b0:1d2:3d1e:fbfb with SMTP id lx5-20020a17090b4b0500b001d23d1efbfbmr20068038pjb.33.1650688219368; Fri, 22 Apr 2022 21:30:19 -0700 (PDT) Received: from home-desktop.localdomain ([49.37.158.191]) by smtp.gmail.com with ESMTPSA id g6-20020a17090a714600b001d7f3bb11d7sm4056438pjs.53.2022.04.22.21.30.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 22 Apr 2022 21:30:18 -0700 (PDT) From: Srikanth Kaka To: Stephen Hemminger , Long Li Cc: dev@dpdk.org, Vag Singh , Anand Thulasiram , Srikanth Kaka Subject: [PATCH v5 11/14] bus/vmbus: get subchannel info Date: Sat, 23 Apr 2022 09:58:46 +0530 Message-Id: <20220423042849.7718-12-srikanth.k@oneconvergence.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220423042849.7718-1-srikanth.k@oneconvergence.com> References: <20220418042915.5765-1-srikanth.k@oneconvergence.com> <20220423042849.7718-1-srikanth.k@oneconvergence.com> MIME-Version: 1.0 X-Mailman-Approved-At: Tue, 26 Apr 2022 10:32:34 +0200 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Using sysctl, all the subchannel's attributes are fetched Signed-off-by: Srikanth Kaka Signed-off-by: Vag Singh Signed-off-by: Anand Thulasiram --- drivers/bus/vmbus/freebsd/vmbus_uio.c | 73 +++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) diff --git a/drivers/bus/vmbus/freebsd/vmbus_uio.c b/drivers/bus/vmbus/freebsd/vmbus_uio.c index 438db41..6a9a196 100644 --- a/drivers/bus/vmbus/freebsd/vmbus_uio.c +++ b/drivers/bus/vmbus/freebsd/vmbus_uio.c @@ -155,6 +155,79 @@ const char *get_devname_os(void) return "/dev/hv_uio"; } +int vmbus_uio_get_subchan(struct vmbus_channel *primary, + struct vmbus_channel **subchan) +{ + const struct rte_vmbus_device *dev = primary->device; + char sysctl_buf[PATH_MAX], sysctl_var[PATH_MAX]; + size_t len = PATH_MAX, sysctl_len; + /* nr_schan, relid, subid & monid datatype must match kernel's for sysctl */ + uint32_t relid, subid, nr_schan, i; + uint8_t monid; + int err; + + /* get no. of sub-channels opened by hv_uio + * dev.hv_uio.0.subchan_cnt + */ + snprintf(sysctl_var, len, "dev.%s.%d.subchan_cnt", driver_name, + dev->uio_num); + sysctl_len = sizeof(nr_schan); + if (sysctlbyname(sysctl_var, &nr_schan, &sysctl_len, NULL, 0) < 0) { + VMBUS_LOG(ERR, "could not read %s : %s", sysctl_var, + strerror(errno)); + return -1; + } + + /* dev.hv_uio.0.channel.14.sub */ + snprintf(sysctl_buf, len, "dev.%s.%d.channel.%u.sub", driver_name, + dev->uio_num, primary->relid); + for (i = 1; i <= nr_schan; i++) { + /* get relid */ + snprintf(sysctl_var, len, "%s.%u.chanid", sysctl_buf, i); + sysctl_len = sizeof(relid); + if (sysctlbyname(sysctl_var, &relid, &sysctl_len, NULL, 0) < 0) { + VMBUS_LOG(ERR, "could not read %s : %s", sysctl_var, + strerror(errno)); + goto error; + } + + if (!vmbus_isnew_subchannel(primary, (uint16_t)relid)) { + VMBUS_LOG(DEBUG, "skip already found channel: %u", + relid); + continue; + } + + /* get sub-channel id */ + snprintf(sysctl_var, len, "%s.%u.ch_subidx", sysctl_buf, i); + sysctl_len = sizeof(subid); + if (sysctlbyname(sysctl_var, &subid, &sysctl_len, NULL, 0) < 0) { + VMBUS_LOG(ERR, "could not read %s : %s", sysctl_var, + strerror(errno)); + goto error; + } + + /* get monitor id */ + snprintf(sysctl_var, len, "%s.%u.monitor_id", sysctl_buf, i); + sysctl_len = sizeof(monid); + if (sysctlbyname(sysctl_var, &monid, &sysctl_len, NULL, 0) < 0) { + VMBUS_LOG(ERR, "could not read %s : %s", sysctl_var, + strerror(errno)); + goto error; + } + + err = vmbus_chan_create(dev, (uint16_t)relid, (uint16_t)subid, + monid, subchan); + if (err) { + VMBUS_LOG(ERR, "subchannel setup failed"); + return err; + } + break; + } + return 0; +error: + return -1; +} + int vmbus_uio_subchan_open(struct rte_vmbus_device *dev, uint32_t subchan) { struct mapped_vmbus_resource *uio_res; From patchwork Sat Apr 23 04:28:47 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Srikanth Kaka X-Patchwork-Id: 110273 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id EE9A5A00C4; Tue, 26 Apr 2022 10:34:15 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 9490742838; Tue, 26 Apr 2022 10:32:55 +0200 (CEST) Received: from mail-pl1-f194.google.com (mail-pl1-f194.google.com [209.85.214.194]) by mails.dpdk.org (Postfix) with ESMTP id 4FD5F40042 for ; Sat, 23 Apr 2022 06:30:23 +0200 (CEST) Received: by mail-pl1-f194.google.com with SMTP id q3so15100421plg.3 for ; Fri, 22 Apr 2022 21:30:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oneconvergence.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=l9AHb0J/Suw2x7szpE9IL7eMjL617g6ubJj5016vQGI=; b=hdGM6QTX7RvUmaysOGe8yrKV0gOh9ZLTHQ6U9qpenQTIr/uS247+B7fRNagBj5pM3m 5AFZWTw8Wtk2F8TFW/YI0kdohzbFVPK0uDq0FqQB0QxAf7EpnBQ1pM/qs5Cie2KJBcQb oQpMwb6LRLUbnH3/4BlUVE8LA2Mj16wph5OCo= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=l9AHb0J/Suw2x7szpE9IL7eMjL617g6ubJj5016vQGI=; b=Mfl6XD80SEu2RTePTIm6gBtL9tM3s/jqXR7YoZWrMfDLM3UZcnFUsxSOY7PXlKHhw1 qri8bWog4aD2OvioADz39o6rht4UV48hqkd1xRjA522FXzuhI+eQhfQv4IV3k1Wd3/3o 1BKij5kNhSL/PDQ7afmu8mW60r31kabGNOxvIkf4Ki9jgMrhRMyKA3BRVj+8amc677wZ yAtvmfS+S2RQIaPwdU5HP4nMMLznGiXM8I5PFzzS7Rk7iGhIDEzYCbSRszXv7965536q JbxqF8GoVCH/H8WjEc9N/gx1xMXOe7sm3gEl78fGKHG4RKbNQ+iZNUIx59IScAUJCIet 90+g== X-Gm-Message-State: AOAM533nhxzdRHWp7NNfc7ZVcIXgzfSlkIT62aLKopDLijCEfar8rpQG 6kYl6FtWCKqq2nxVeO951hUtHA== X-Google-Smtp-Source: ABdhPJxTRLShzUvyTtTaoNcfIs2Ri3mf9pIe9xJF4TlyugYvQycsQgb0YQ4CNGSUqWE7GKQIOKczHA== X-Received: by 2002:a17:90a:d584:b0:1bc:e520:91f2 with SMTP id v4-20020a17090ad58400b001bce52091f2mr20036517pju.192.1650688222496; Fri, 22 Apr 2022 21:30:22 -0700 (PDT) Received: from home-desktop.localdomain ([49.37.158.191]) by smtp.gmail.com with ESMTPSA id g6-20020a17090a714600b001d7f3bb11d7sm4056438pjs.53.2022.04.22.21.30.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 22 Apr 2022 21:30:21 -0700 (PDT) From: Srikanth Kaka To: Stephen Hemminger , Long Li Cc: dev@dpdk.org, Vag Singh , Anand Thulasiram , Srikanth Kaka Subject: [PATCH v5 12/14] net/netvsc: moving hotplug retry to OS dir Date: Sat, 23 Apr 2022 09:58:47 +0530 Message-Id: <20220423042849.7718-13-srikanth.k@oneconvergence.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220423042849.7718-1-srikanth.k@oneconvergence.com> References: <20220418042915.5765-1-srikanth.k@oneconvergence.com> <20220423042849.7718-1-srikanth.k@oneconvergence.com> MIME-Version: 1.0 X-Mailman-Approved-At: Tue, 26 Apr 2022 10:32:34 +0200 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Moved netvsc_hotplug_retry to respective OS dir as it contains OS dependent code. For Linux, it is copied as is and for FreeBSD it is not supported yet. Signed-off-by: Srikanth Kaka Signed-off-by: Vag Singh Signed-off-by: Anand Thulasiram --- drivers/net/netvsc/freebsd/hn_os.c | 5 +++ drivers/net/netvsc/hn_ethdev.c | 84 ----------------------------------- drivers/net/netvsc/hn_os.h | 2 + drivers/net/netvsc/linux/hn_os.c | 90 ++++++++++++++++++++++++++++++++++++++ 4 files changed, 97 insertions(+), 84 deletions(-) diff --git a/drivers/net/netvsc/freebsd/hn_os.c b/drivers/net/netvsc/freebsd/hn_os.c index 4c6a798..fece1be 100644 --- a/drivers/net/netvsc/freebsd/hn_os.c +++ b/drivers/net/netvsc/freebsd/hn_os.c @@ -14,3 +14,8 @@ int eth_hn_os_dev_event(void) PMD_DRV_LOG(DEBUG, "rte_dev_event_monitor_start not supported on FreeBSD"); return 0; } + +void netvsc_hotplug_retry(void *args) +{ + RTE_SET_USED(args); +} diff --git a/drivers/net/netvsc/hn_ethdev.c b/drivers/net/netvsc/hn_ethdev.c index 104c7ae..dd4b872 100644 --- a/drivers/net/netvsc/hn_ethdev.c +++ b/drivers/net/netvsc/hn_ethdev.c @@ -57,9 +57,6 @@ #define NETVSC_ARG_TXBREAK "tx_copybreak" #define NETVSC_ARG_RX_EXTMBUF_ENABLE "rx_extmbuf_enable" -/* The max number of retry when hot adding a VF device */ -#define NETVSC_MAX_HOTADD_RETRY 10 - struct hn_xstats_name_off { char name[RTE_ETH_XSTATS_NAME_SIZE]; unsigned int offset; @@ -556,87 +553,6 @@ static int hn_subchan_configure(struct hn_data *hv, return err; } -static void netvsc_hotplug_retry(void *args) -{ - int ret; - struct hn_data *hv = args; - struct rte_eth_dev *dev = &rte_eth_devices[hv->port_id]; - struct rte_devargs *d = &hv->devargs; - char buf[256]; - - DIR *di; - struct dirent *dir; - struct ifreq req; - struct rte_ether_addr eth_addr; - int s; - - PMD_DRV_LOG(DEBUG, "%s: retry count %d", - __func__, hv->eal_hot_plug_retry); - - if (hv->eal_hot_plug_retry++ > NETVSC_MAX_HOTADD_RETRY) - return; - - snprintf(buf, sizeof(buf), "/sys/bus/pci/devices/%s/net", d->name); - di = opendir(buf); - if (!di) { - PMD_DRV_LOG(DEBUG, "%s: can't open directory %s, " - "retrying in 1 second", __func__, buf); - goto retry; - } - - while ((dir = readdir(di))) { - /* Skip . and .. directories */ - if (!strcmp(dir->d_name, ".") || !strcmp(dir->d_name, "..")) - continue; - - /* trying to get mac address if this is a network device*/ - s = socket(PF_INET, SOCK_DGRAM, IPPROTO_IP); - if (s == -1) { - PMD_DRV_LOG(ERR, "Failed to create socket errno %d", - errno); - break; - } - strlcpy(req.ifr_name, dir->d_name, sizeof(req.ifr_name)); - ret = ioctl(s, SIOCGIFHWADDR, &req); - close(s); - if (ret == -1) { - PMD_DRV_LOG(ERR, - "Failed to send SIOCGIFHWADDR for device %s", - dir->d_name); - break; - } - if (req.ifr_hwaddr.sa_family != ARPHRD_ETHER) { - closedir(di); - return; - } - memcpy(eth_addr.addr_bytes, req.ifr_hwaddr.sa_data, - RTE_DIM(eth_addr.addr_bytes)); - - if (rte_is_same_ether_addr(ð_addr, dev->data->mac_addrs)) { - PMD_DRV_LOG(NOTICE, - "Found matching MAC address, adding device %s network name %s", - d->name, dir->d_name); - ret = rte_eal_hotplug_add(d->bus->name, d->name, - d->args); - if (ret) { - PMD_DRV_LOG(ERR, - "Failed to add PCI device %s", - d->name); - break; - } - } - /* When the code reaches here, we either have already added - * the device, or its MAC address did not match. - */ - closedir(di); - return; - } - closedir(di); -retry: - /* The device is still being initialized, retry after 1 second */ - rte_eal_alarm_set(1000000, netvsc_hotplug_retry, hv); -} - static void netvsc_hotadd_callback(const char *device_name, enum rte_dev_event_type type, void *arg) diff --git a/drivers/net/netvsc/hn_os.h b/drivers/net/netvsc/hn_os.h index 618c53c..1fb7292 100644 --- a/drivers/net/netvsc/hn_os.h +++ b/drivers/net/netvsc/hn_os.h @@ -4,3 +4,5 @@ */ int eth_hn_os_dev_event(void); + +void netvsc_hotplug_retry(void *args); diff --git a/drivers/net/netvsc/linux/hn_os.c b/drivers/net/netvsc/linux/hn_os.c index 1ea12ce..9c2f4cd 100644 --- a/drivers/net/netvsc/linux/hn_os.c +++ b/drivers/net/netvsc/linux/hn_os.c @@ -3,12 +3,21 @@ */ #include +#include +#include +#include +#include #include +#include #include "hn_logs.h" +#include "hn_var.h" #include "hn_os.h" +/* The max number of retry when hot adding a VF device */ +#define NETVSC_MAX_HOTADD_RETRY 10 + int eth_hn_os_dev_event(void) { int ret; @@ -19,3 +28,84 @@ int eth_hn_os_dev_event(void) return ret; } + +void netvsc_hotplug_retry(void *args) +{ + int ret; + struct hn_data *hv = args; + struct rte_eth_dev *dev = &rte_eth_devices[hv->port_id]; + struct rte_devargs *d = &hv->devargs; + char buf[256]; + + DIR *di; + struct dirent *dir; + struct ifreq req; + struct rte_ether_addr eth_addr; + int s; + + PMD_DRV_LOG(DEBUG, "%s: retry count %d", + __func__, hv->eal_hot_plug_retry); + + if (hv->eal_hot_plug_retry++ > NETVSC_MAX_HOTADD_RETRY) + return; + + snprintf(buf, sizeof(buf), "/sys/bus/pci/devices/%s/net", d->name); + di = opendir(buf); + if (!di) { + PMD_DRV_LOG(DEBUG, "%s: can't open directory %s, " + "retrying in 1 second", __func__, buf); + goto retry; + } + + while ((dir = readdir(di))) { + /* Skip . and .. directories */ + if (!strcmp(dir->d_name, ".") || !strcmp(dir->d_name, "..")) + continue; + + /* trying to get mac address if this is a network device*/ + s = socket(PF_INET, SOCK_DGRAM, IPPROTO_IP); + if (s == -1) { + PMD_DRV_LOG(ERR, "Failed to create socket errno %d", + errno); + break; + } + strlcpy(req.ifr_name, dir->d_name, sizeof(req.ifr_name)); + ret = ioctl(s, SIOCGIFHWADDR, &req); + close(s); + if (ret == -1) { + PMD_DRV_LOG(ERR, + "Failed to send SIOCGIFHWADDR for device %s", + dir->d_name); + break; + } + if (req.ifr_hwaddr.sa_family != ARPHRD_ETHER) { + closedir(di); + return; + } + memcpy(eth_addr.addr_bytes, req.ifr_hwaddr.sa_data, + RTE_DIM(eth_addr.addr_bytes)); + + if (rte_is_same_ether_addr(ð_addr, dev->data->mac_addrs)) { + PMD_DRV_LOG(NOTICE, + "Found matching MAC address, adding device %s network name %s", + d->name, dir->d_name); + ret = rte_eal_hotplug_add(d->bus->name, d->name, + d->args); + if (ret) { + PMD_DRV_LOG(ERR, + "Failed to add PCI device %s", + d->name); + break; + } + } + /* When the code reaches here, we either have already added + * the device, or its MAC address did not match. + */ + closedir(di); + return; + } + closedir(di); +retry: + /* The device is still being initialized, retry after 1 second */ + rte_eal_alarm_set(1000000, netvsc_hotplug_retry, hv); +} From patchwork Sat Apr 23 04:28:48 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Srikanth Kaka X-Patchwork-Id: 110274 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id A713FA00C4; Tue, 26 Apr 2022 10:34:21 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 8F71F4283E; Tue, 26 Apr 2022 10:32:56 +0200 (CEST) Received: from mail-pl1-f181.google.com (mail-pl1-f181.google.com [209.85.214.181]) by mails.dpdk.org (Postfix) with ESMTP id 7EF4C40042 for ; Sat, 23 Apr 2022 06:30:26 +0200 (CEST) Received: by mail-pl1-f181.google.com with SMTP id b12so247022plg.4 for ; Fri, 22 Apr 2022 21:30:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oneconvergence.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=llSvk13Fh/XDxhDMgpTAs/9fjs5jvtrtXBFYO87maUo=; b=Wq/VweriWgFdWzPagFfglJKGpXp+xQKtjANaOP1ob3ZG/8+RwCsUTtdASML2yPPKq+ M8sPEtf3ZrekWQqWWXWYxp0cbnuQ5feljismP/6tZGcJBg3EqG6qY26THOxNpn3dd8F4 Z/oEs9AyQj9fu4u3G26n+nMz20Dj5xSMU7rm8= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=llSvk13Fh/XDxhDMgpTAs/9fjs5jvtrtXBFYO87maUo=; b=XwbEo2nrvu4ZPH+oGIRV7AhEvQxFEJR4RHdpALb3Cd4PX0VO5DmqM5DyqFnFyyhxAj ZnQ2Cs5G23R2LHziM3OzFZS6aS/Rqwyv+TwfWbhQu481yq4NhhfPiHNhwA4qorb58iTV 2bx6Fqj469GmjLfSaAMIKioYdxasKD+/5YSN0pBsez7MZpA/p/nFqQAfwQjbezpoSyJ5 EhY46DCutjKpQKy1SDMxAkGb23Sx17TyVYOMdQvUL9k+Nnllz/yl4wCfDgM+e4AAl4CW qAZogLuSime14WlUcN6yEQvbCauCVkhxjt75xVuH9O6gIgtuxkCjnU5S+RexVSw1Z/3A zlzw== X-Gm-Message-State: AOAM530oNNoCWIX6IH6k1Qg2fpfQJKgVLniGAcGCd90cDEkOr/q3RF/9 PMDp6X2/LGCymrP+2YmgrDEcpA== X-Google-Smtp-Source: ABdhPJz0KzWd2nCARwO2JQs/cXDvc5pV4fECTme5ITu9S7kIH4mDlRaonCn9wKEtgwR/gquRImcp/A== X-Received: by 2002:a17:90a:5991:b0:1d9:27f3:74cc with SMTP id l17-20020a17090a599100b001d927f374ccmr2307583pji.90.1650688225705; Fri, 22 Apr 2022 21:30:25 -0700 (PDT) Received: from home-desktop.localdomain ([49.37.158.191]) by smtp.gmail.com with ESMTPSA id g6-20020a17090a714600b001d7f3bb11d7sm4056438pjs.53.2022.04.22.21.30.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 22 Apr 2022 21:30:25 -0700 (PDT) From: Srikanth Kaka To: Stephen Hemminger , Long Li Cc: dev@dpdk.org, Vag Singh , Anand Thulasiram , Srikanth Kaka Subject: [PATCH v5 13/14] bus/vmbus: add meson support for FreeBSD Date: Sat, 23 Apr 2022 09:58:48 +0530 Message-Id: <20220423042849.7718-14-srikanth.k@oneconvergence.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220423042849.7718-1-srikanth.k@oneconvergence.com> References: <20220418042915.5765-1-srikanth.k@oneconvergence.com> <20220423042849.7718-1-srikanth.k@oneconvergence.com> MIME-Version: 1.0 X-Mailman-Approved-At: Tue, 26 Apr 2022 10:32:34 +0200 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org add meson support for FreeBSD OS Signed-off-by: Srikanth Kaka Signed-off-by: Vag Singh Signed-off-by: Anand Thulasiram --- drivers/bus/vmbus/meson.build | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/drivers/bus/vmbus/meson.build b/drivers/bus/vmbus/meson.build index 60913d0..77f18ce 100644 --- a/drivers/bus/vmbus/meson.build +++ b/drivers/bus/vmbus/meson.build @@ -26,7 +26,11 @@ if is_linux sources += files('linux/vmbus_bus.c', 'linux/vmbus_uio.c') includes += include_directories('linux') +elif is_freebsd + sources += files('freebsd/vmbus_bus.c', + 'freebsd/vmbus_uio.c') + includes += include_directories('freebsd') else build = false - reason = 'only supported on Linux' + reason = 'only supported on Linux & FreeBSD' endif From patchwork Sat Apr 23 04:28:49 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Srikanth Kaka X-Patchwork-Id: 110275 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 0B25DA00C4; Tue, 26 Apr 2022 10:34:28 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 93A1242843; Tue, 26 Apr 2022 10:32:57 +0200 (CEST) Received: from mail-pl1-f194.google.com (mail-pl1-f194.google.com [209.85.214.194]) by mails.dpdk.org (Postfix) with ESMTP id 6FDA34003F for ; Sat, 23 Apr 2022 06:30:29 +0200 (CEST) Received: by mail-pl1-f194.google.com with SMTP id q3so15100761plg.3 for ; Fri, 22 Apr 2022 21:30:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oneconvergence.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=Hh6b94ODTR6fQfIY19mgCqE2yFDVWiUwBySuaxGTNHE=; b=UlD6Du5+I4Mvxsc2yu/fblRM0WSb8UxzQBzQXFEvHLXe8pbQd/ucUI2dI96w+udkvq 9S8STFIhLoJcyceVf+P1wgyxYiyvkeUbT3TOCA67UqS6aOcMZStM9PgaBv15Gi/pPd7O AB0jxWBcql+YoQ0A/noOrylWCkyp4Et54I8wA= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=Hh6b94ODTR6fQfIY19mgCqE2yFDVWiUwBySuaxGTNHE=; b=0dQ7kMn0wlXhsn4qQItVXpb6QwaRunqm4NKD45FmCqUi/cdMCQcX6WsOZHLcZcrYsS lnSVvEQQU4yJAuytnCBTCrdBD+iqsKqzs+ZC5DVf6c5jsdrg0J3wXCpBvXcJuKgBEGHS 53/Erd/bOlfzt5yKNubOwlpoJw6jn8zEl46OPFbjaD78Ej/YRzqDeOODsiD+29MRjFP5 yt5jzUNzD/0PvfVPIi3pJRXx/HlVmLKBkgM3AbwtfalCLVgDinZBqXNdMvq1WTL3LZO7 zdRyGn4ly+xs5KU6yTCYQ61gAyQASoVJ4pjhYR9igi4C1Bp24nTW3JIyN4kpv5CxVFIJ jfqA== X-Gm-Message-State: AOAM532idwIqEi7Y3nOrec3ePctVraNUa3crDNbxN1X5t9Eo5rOzJmp9 aMZJ7mIdK9EqZXuZC6vgADynwg== X-Google-Smtp-Source: ABdhPJxBeNJ/7K/sR/RrfzyO8YYIMrT1qoUcXAr/L82WvsBCvj/ryqM+EApIpZLW161iz2Cwc/2dUw== X-Received: by 2002:a17:90a:70cf:b0:1cb:a31e:a2c1 with SMTP id a15-20020a17090a70cf00b001cba31ea2c1mr20008852pjm.94.1650688228671; Fri, 22 Apr 2022 21:30:28 -0700 (PDT) Received: from home-desktop.localdomain ([49.37.158.191]) by smtp.gmail.com with ESMTPSA id g6-20020a17090a714600b001d7f3bb11d7sm4056438pjs.53.2022.04.22.21.30.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 22 Apr 2022 21:30:27 -0700 (PDT) From: Srikanth Kaka To: Stephen Hemminger , Long Li Cc: dev@dpdk.org, Vag Singh , Anand Thulasiram , Srikanth Kaka Subject: [PATCH v5 14/14] bus/vmbus: update MAINTAINERS and docs Date: Sat, 23 Apr 2022 09:58:49 +0530 Message-Id: <20220423042849.7718-15-srikanth.k@oneconvergence.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220423042849.7718-1-srikanth.k@oneconvergence.com> References: <20220418042915.5765-1-srikanth.k@oneconvergence.com> <20220423042849.7718-1-srikanth.k@oneconvergence.com> MIME-Version: 1.0 X-Mailman-Approved-At: Tue, 26 Apr 2022 10:32:34 +0200 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org updated MAINTAINERS and doc files for FreeBSD support Signed-off-by: Srikanth Kaka Signed-off-by: Vag Singh Signed-off-by: Anand Thulasiram --- MAINTAINERS | 2 ++ doc/guides/nics/netvsc.rst | 11 +++++++++++ 2 files changed, 13 insertions(+) diff --git a/MAINTAINERS b/MAINTAINERS index 7c4f541..01a494e 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -567,6 +567,7 @@ F: app/test/test_vdev.c VMBUS bus driver M: Stephen Hemminger M: Long Li +M: Srikanth Kaka F: drivers/bus/vmbus/ @@ -823,6 +824,7 @@ F: doc/guides/nics/vdev_netvsc.rst Microsoft Hyper-V netvsc M: Stephen Hemminger M: Long Li +M: Srikanth Kaka F: drivers/net/netvsc/ F: doc/guides/nics/netvsc.rst F: doc/guides/nics/features/netvsc.ini diff --git a/doc/guides/nics/netvsc.rst b/doc/guides/nics/netvsc.rst index 77efe1d..12d1702 100644 --- a/doc/guides/nics/netvsc.rst +++ b/doc/guides/nics/netvsc.rst @@ -91,6 +91,12 @@ operations: The dpdk-devbind.py script can not be used since it only handles PCI devices. +On FreeBSD, with hv_uio kernel driver loaded, do the following: + + .. code-block:: console + + devctl set driver -f hn1 hv_uio + Prerequisites ------------- @@ -101,6 +107,11 @@ The following prerequisites apply: Full support of multiple queues requires the 4.17 kernel. It is possible to use the netvsc PMD with 4.16 kernel but it is limited to a single queue. +* FreeBSD support for UIO on vmbus is done with hv_uio driver and it is still + in `review`_ + +.. _`review`: https://reviews.freebsd.org/D32184 + Netvsc PMD arguments --------------------