From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 6122C45D2F; Sun, 17 Nov 2024 18:32:39 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 5B81940281; Sun, 17 Nov 2024 18:32:37 +0100 (CET) Received: from mail-pf1-f178.google.com (mail-pf1-f178.google.com [209.85.210.178]) by mails.dpdk.org (Postfix) with ESMTP id 542F540280 for ; Sun, 17 Nov 2024 18:32:36 +0100 (CET) Received: by mail-pf1-f178.google.com with SMTP id d2e1a72fcca58-71e592d7f6eso695456b3a.3 for ; Sun, 17 Nov 2024 09:32:36 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=networkplumber-org.20230601.gappssmtp.com; s=20230601; t=1731864755; x=1732469555; darn=dpdk.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=oBulZfwkgLcbw3dhrRKdgslxrvQZMBiJrYZLwGYdJys=; b=yoWir4Bn1mkCpgXvp57JYGyU+n0bHRgWahlrsJEpKGXikRI0BJTnvpPPyodqG7REO9 3GvMQprsdyKYYwEtBc3wBTKov4v7aRepkTi+uhthZtm0ADSs6oGrH55xBDz3IMjYP0Ew eX4a6dPQCX95z0ARUa56uLd1PKBfsj6g3K9OAQfqMhS8cfJFTl/Yx+KMelqBvyLqniLt rjkswDMkU2e2yJqmBAisj3Y2F0lHfNkI0FXDHBXHeMynbOWnqDA4OL7c7cmX6MhH6s/R rFPxTZj72mrEUyt/zPe7qW9pAjQXxE2fcqiynifih/gTRxLltVHzotCJ9hSpkh413SZe 712A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1731864755; x=1732469555; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=oBulZfwkgLcbw3dhrRKdgslxrvQZMBiJrYZLwGYdJys=; b=UiSSe05UghDPMQ0biJhUZWFZSsYwckKJduPDDW/UWuod573myFSPwTLnnJQAWJzsfy JXaxXtXb67MyrOkKZ+cmTYaC+qP71EhNtsDyA8OGH+NMR+cpeouVQVmvxtgF4Cm2duWm mt9/NOk/Xcsiw4PNEeKCmUIZxP6NYYpGgCOWogZNbatElKjKIsr1xqHJtalK23eXdRFE h81tNho+mbMlwMJsBAl2HTE7G9DP5aPNO0mBrIzmuIcurtFMZlS8FywaoJrPTDIZ9ZCT O75aUp4PjN5VVx74a8MT3unLzX94S8ZEvc6MgMa6m6qrG8IgONsz+WrZaiPOhZI0BZ/K otFQ== X-Gm-Message-State: AOJu0YyHxnWm5kEIcbJBPt0r/sJnNg5LAalFPpBkDz6q70dgk8+1Ev1A ICHsPq+rK08x/PnsdrMuVxySByDbbmMkCZuMQPZ4+6sSLGEoIaTqApgM5P9P2EsWC0oqg1DkBi5 b X-Google-Smtp-Source: AGHT+IE4tzajLVlYlw3E5fVz+g4rw1nZkKprbAVENSd2Jpf6wQN7tw0GEie0T378SerQD88tZuketQ== X-Received: by 2002:a05:6a00:1acc:b0:71e:69e:596b with SMTP id d2e1a72fcca58-72476d4337cmr11911133b3a.17.1731864755191; Sun, 17 Nov 2024 09:32:35 -0800 (PST) Received: from hermes.local (204-195-96-226.wavecable.com. [204.195.96.226]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-724771e7cc7sm4603770b3a.170.2024.11.17.09.32.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 17 Nov 2024 09:32:34 -0800 (PST) From: Stephen Hemminger To: dev@dpdk.org Cc: Stephen Hemminger , Maxime Coquelin , Chenbo Xia Subject: [RFC] Revert "vhost: use imported VDUSE uAPI header" Date: Sun, 17 Nov 2024 09:32:08 -0800 Message-ID: <20241117173225.56096-1-stephen@networkplumber.org> X-Mailer: git-send-email 2.45.2 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit 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 file vduse.h does not have a license that is compatiable with current DPDK license policy. This reverts commit 9fec3f0569087de06666129c7f2badaf5be2776e. Signed-off-by: Stephen Hemminger --- kernel/linux/uapi/linux/vduse.h | 353 -------------------------------- lib/vhost/meson.build | 5 +- lib/vhost/vduse.c | 2 +- lib/vhost/vduse.h | 22 ++ 4 files changed, 27 insertions(+), 355 deletions(-) delete mode 100644 kernel/linux/uapi/linux/vduse.h diff --git a/kernel/linux/uapi/linux/vduse.h b/kernel/linux/uapi/linux/vduse.h deleted file mode 100644 index 11bd48c72c..0000000000 --- a/kernel/linux/uapi/linux/vduse.h +++ /dev/null @@ -1,353 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ -#ifndef _UAPI_VDUSE_H_ -#define _UAPI_VDUSE_H_ - -#include - -#define VDUSE_BASE 0x81 - -/* The ioctls for control device (/dev/vduse/control) */ - -#define VDUSE_API_VERSION 0 - -/* - * Get the version of VDUSE API that kernel supported (VDUSE_API_VERSION). - * This is used for future extension. - */ -#define VDUSE_GET_API_VERSION _IOR(VDUSE_BASE, 0x00, __u64) - -/* Set the version of VDUSE API that userspace supported. */ -#define VDUSE_SET_API_VERSION _IOW(VDUSE_BASE, 0x01, __u64) - -/** - * struct vduse_dev_config - basic configuration of a VDUSE device - * @name: VDUSE device name, needs to be NUL terminated - * @vendor_id: virtio vendor id - * @device_id: virtio device id - * @features: virtio features - * @vq_num: the number of virtqueues - * @vq_align: the allocation alignment of virtqueue's metadata - * @reserved: for future use, needs to be initialized to zero - * @config_size: the size of the configuration space - * @config: the buffer of the configuration space - * - * Structure used by VDUSE_CREATE_DEV ioctl to create VDUSE device. - */ -struct vduse_dev_config { -#define VDUSE_NAME_MAX 256 - char name[VDUSE_NAME_MAX]; - __u32 vendor_id; - __u32 device_id; - __u64 features; - __u32 vq_num; - __u32 vq_align; - __u32 reserved[13]; - __u32 config_size; - __u8 config[]; -}; - -/* Create a VDUSE device which is represented by a char device (/dev/vduse/$NAME) */ -#define VDUSE_CREATE_DEV _IOW(VDUSE_BASE, 0x02, struct vduse_dev_config) - -/* - * Destroy a VDUSE device. Make sure there are no more references - * to the char device (/dev/vduse/$NAME). - */ -#define VDUSE_DESTROY_DEV _IOW(VDUSE_BASE, 0x03, char[VDUSE_NAME_MAX]) - -/* The ioctls for VDUSE device (/dev/vduse/$NAME) */ - -/** - * struct vduse_iotlb_entry - entry of IOTLB to describe one IOVA region [start, last] - * @offset: the mmap offset on returned file descriptor - * @start: start of the IOVA region - * @last: last of the IOVA region - * @perm: access permission of the IOVA region - * - * Structure used by VDUSE_IOTLB_GET_FD ioctl to find an overlapped IOVA region. - */ -struct vduse_iotlb_entry { - __u64 offset; - __u64 start; - __u64 last; -#define VDUSE_ACCESS_RO 0x1 -#define VDUSE_ACCESS_WO 0x2 -#define VDUSE_ACCESS_RW 0x3 - __u8 perm; -}; - -/* - * Find the first IOVA region that overlaps with the range [start, last] - * and return the corresponding file descriptor. Return -EINVAL means the - * IOVA region doesn't exist. Caller should set start and last fields. - */ -#define VDUSE_IOTLB_GET_FD _IOWR(VDUSE_BASE, 0x10, struct vduse_iotlb_entry) - -/* - * Get the negotiated virtio features. It's a subset of the features in - * struct vduse_dev_config which can be accepted by virtio driver. It's - * only valid after FEATURES_OK status bit is set. - */ -#define VDUSE_DEV_GET_FEATURES _IOR(VDUSE_BASE, 0x11, __u64) - -/** - * struct vduse_config_data - data used to update configuration space - * @offset: the offset from the beginning of configuration space - * @length: the length to write to configuration space - * @buffer: the buffer used to write from - * - * Structure used by VDUSE_DEV_SET_CONFIG ioctl to update device - * configuration space. - */ -struct vduse_config_data { - __u32 offset; - __u32 length; - __u8 buffer[]; -}; - -/* Set device configuration space */ -#define VDUSE_DEV_SET_CONFIG _IOW(VDUSE_BASE, 0x12, struct vduse_config_data) - -/* - * Inject a config interrupt. It's usually used to notify virtio driver - * that device configuration space has changed. - */ -#define VDUSE_DEV_INJECT_CONFIG_IRQ _IO(VDUSE_BASE, 0x13) - -/** - * struct vduse_vq_config - basic configuration of a virtqueue - * @index: virtqueue index - * @max_size: the max size of virtqueue - * @reserved: for future use, needs to be initialized to zero - * - * Structure used by VDUSE_VQ_SETUP ioctl to setup a virtqueue. - */ -struct vduse_vq_config { - __u32 index; - __u16 max_size; - __u16 reserved[13]; -}; - -/* - * Setup the specified virtqueue. Make sure all virtqueues have been - * configured before the device is attached to vDPA bus. - */ -#define VDUSE_VQ_SETUP _IOW(VDUSE_BASE, 0x14, struct vduse_vq_config) - -/** - * struct vduse_vq_state_split - split virtqueue state - * @avail_index: available index - */ -struct vduse_vq_state_split { - __u16 avail_index; -}; - -/** - * struct vduse_vq_state_packed - packed virtqueue state - * @last_avail_counter: last driver ring wrap counter observed by device - * @last_avail_idx: device available index - * @last_used_counter: device ring wrap counter - * @last_used_idx: used index - */ -struct vduse_vq_state_packed { - __u16 last_avail_counter; - __u16 last_avail_idx; - __u16 last_used_counter; - __u16 last_used_idx; -}; - -/** - * struct vduse_vq_info - information of a virtqueue - * @index: virtqueue index - * @num: the size of virtqueue - * @desc_addr: address of desc area - * @driver_addr: address of driver area - * @device_addr: address of device area - * @split: split virtqueue state - * @packed: packed virtqueue state - * @ready: ready status of virtqueue - * - * Structure used by VDUSE_VQ_GET_INFO ioctl to get virtqueue's information. - */ -struct vduse_vq_info { - __u32 index; - __u32 num; - __u64 desc_addr; - __u64 driver_addr; - __u64 device_addr; - union { - struct vduse_vq_state_split split; - struct vduse_vq_state_packed packed; - }; - __u8 ready; -}; - -/* Get the specified virtqueue's information. Caller should set index field. */ -#define VDUSE_VQ_GET_INFO _IOWR(VDUSE_BASE, 0x15, struct vduse_vq_info) - -/** - * struct vduse_vq_eventfd - eventfd configuration for a virtqueue - * @index: virtqueue index - * @fd: eventfd, -1 means de-assigning the eventfd - * - * Structure used by VDUSE_VQ_SETUP_KICKFD ioctl to setup kick eventfd. - */ -struct vduse_vq_eventfd { - __u32 index; -#define VDUSE_EVENTFD_DEASSIGN -1 - int fd; -}; - -/* - * Setup kick eventfd for specified virtqueue. The kick eventfd is used - * by VDUSE kernel module to notify userspace to consume the avail vring. - */ -#define VDUSE_VQ_SETUP_KICKFD _IOW(VDUSE_BASE, 0x16, struct vduse_vq_eventfd) - -/* - * Inject an interrupt for specific virtqueue. It's used to notify virtio driver - * to consume the used vring. - */ -#define VDUSE_VQ_INJECT_IRQ _IOW(VDUSE_BASE, 0x17, __u32) - -/** - * struct vduse_iova_umem - userspace memory configuration for one IOVA region - * @uaddr: start address of userspace memory, it must be aligned to page size - * @iova: start of the IOVA region - * @size: size of the IOVA region - * @reserved: for future use, needs to be initialized to zero - * - * Structure used by VDUSE_IOTLB_REG_UMEM and VDUSE_IOTLB_DEREG_UMEM - * ioctls to register/de-register userspace memory for IOVA regions - */ -struct vduse_iova_umem { - __u64 uaddr; - __u64 iova; - __u64 size; - __u64 reserved[3]; -}; - -/* Register userspace memory for IOVA regions */ -#define VDUSE_IOTLB_REG_UMEM _IOW(VDUSE_BASE, 0x18, struct vduse_iova_umem) - -/* De-register the userspace memory. Caller should set iova and size field. */ -#define VDUSE_IOTLB_DEREG_UMEM _IOW(VDUSE_BASE, 0x19, struct vduse_iova_umem) - -/** - * struct vduse_iova_info - information of one IOVA region - * @start: start of the IOVA region - * @last: last of the IOVA region - * @capability: capability of the IOVA regsion - * @reserved: for future use, needs to be initialized to zero - * - * Structure used by VDUSE_IOTLB_GET_INFO ioctl to get information of - * one IOVA region. - */ -struct vduse_iova_info { - __u64 start; - __u64 last; -#define VDUSE_IOVA_CAP_UMEM (1 << 0) - __u64 capability; - __u64 reserved[3]; -}; - -/* - * Find the first IOVA region that overlaps with the range [start, last] - * and return some information on it. Caller should set start and last fields. - */ -#define VDUSE_IOTLB_GET_INFO _IOWR(VDUSE_BASE, 0x1a, struct vduse_iova_info) - -/* The control messages definition for read(2)/write(2) on /dev/vduse/$NAME */ - -/** - * enum vduse_req_type - request type - * @VDUSE_GET_VQ_STATE: get the state for specified virtqueue from userspace - * @VDUSE_SET_STATUS: set the device status - * @VDUSE_UPDATE_IOTLB: Notify userspace to update the memory mapping for - * specified IOVA range via VDUSE_IOTLB_GET_FD ioctl - */ -enum vduse_req_type { - VDUSE_GET_VQ_STATE, - VDUSE_SET_STATUS, - VDUSE_UPDATE_IOTLB, -}; - -/** - * struct vduse_vq_state - virtqueue state - * @index: virtqueue index - * @split: split virtqueue state - * @packed: packed virtqueue state - */ -struct vduse_vq_state { - __u32 index; - union { - struct vduse_vq_state_split split; - struct vduse_vq_state_packed packed; - }; -}; - -/** - * struct vduse_dev_status - device status - * @status: device status - */ -struct vduse_dev_status { - __u8 status; -}; - -/** - * struct vduse_iova_range - IOVA range [start, last] - * @start: start of the IOVA range - * @last: last of the IOVA range - */ -struct vduse_iova_range { - __u64 start; - __u64 last; -}; - -/** - * struct vduse_dev_request - control request - * @type: request type - * @request_id: request id - * @reserved: for future use - * @vq_state: virtqueue state, only index field is available - * @s: device status - * @iova: IOVA range for updating - * @padding: padding - * - * Structure used by read(2) on /dev/vduse/$NAME. - */ -struct vduse_dev_request { - __u32 type; - __u32 request_id; - __u32 reserved[4]; - union { - struct vduse_vq_state vq_state; - struct vduse_dev_status s; - struct vduse_iova_range iova; - __u32 padding[32]; - }; -}; - -/** - * struct vduse_dev_response - response to control request - * @request_id: corresponding request id - * @result: the result of request - * @reserved: for future use, needs to be initialized to zero - * @vq_state: virtqueue state - * @padding: padding - * - * Structure used by write(2) on /dev/vduse/$NAME. - */ -struct vduse_dev_response { - __u32 request_id; -#define VDUSE_REQ_RESULT_OK 0x00 -#define VDUSE_REQ_RESULT_FAILED 0x01 - __u32 result; - __u32 reserved[4]; - union { - struct vduse_vq_state vq_state; - __u32 padding[32]; - }; -}; - -#endif /* _UAPI_VDUSE_H_ */ diff --git a/lib/vhost/meson.build b/lib/vhost/meson.build index 0004f283bb..51bcf17244 100644 --- a/lib/vhost/meson.build +++ b/lib/vhost/meson.build @@ -26,13 +26,16 @@ sources = files( 'iotlb.c', 'socket.c', 'vdpa.c', - 'vduse.c', 'vhost.c', 'vhost_crypto.c', 'vhost_user.c', 'virtio_net.c', 'virtio_net_ctrl.c', ) +if cc.has_header('linux/vduse.h') + sources += files('vduse.c') + cflags += '-DVHOST_HAS_VDUSE' +endif headers = files( 'rte_vdpa.h', 'rte_vhost.h', diff --git a/lib/vhost/vduse.c b/lib/vhost/vduse.c index eaf3146b95..8ba58555f9 100644 --- a/lib/vhost/vduse.c +++ b/lib/vhost/vduse.c @@ -8,7 +8,7 @@ #include -#include +#include #include #include diff --git a/lib/vhost/vduse.h b/lib/vhost/vduse.h index 47ca97a064..0d8f3f1205 100644 --- a/lib/vhost/vduse.h +++ b/lib/vhost/vduse.h @@ -9,7 +9,29 @@ #define VDUSE_NET_SUPPORTED_FEATURES VIRTIO_NET_SUPPORTED_FEATURES +#ifdef VHOST_HAS_VDUSE + int vduse_device_create(const char *path, bool compliant_ol_flags); int vduse_device_destroy(const char *path); +#else + +static inline int +vduse_device_create(const char *path, bool compliant_ol_flags) +{ + RTE_SET_USED(compliant_ol_flags); + + VHOST_CONFIG_LOG(path, ERR, "VDUSE support disabled at build time"); + return -1; +} + +static inline int +vduse_device_destroy(const char *path) +{ + VHOST_CONFIG_LOG(path, ERR, "VDUSE support disabled at build time"); + return -1; +} + +#endif /* VHOST_HAS_VDUSE */ + #endif /* _VDUSE_H */ -- 2.45.2