b633e08c70
Overview: This is the first stage of a RDMA stack upgrade introducing kernel changes only based on Linux 5.7-rc1. This patch is based on about four main areas of work: - Update of the IB uobjects system: - The memory holding so-called AH, CQ, PD, SRQ and UCONTEXT objects is now managed by ibcore. This also require some changes in the kernel verbs API. The updated verbs changes are typically about initialize and deinitialize objects, and remove allocation and free of memory. - Update of the uverbs IOCTL framework: - The parsing and handling of user-space commands has been completely refactored to integrate with the updated IB uobjects system. - Various changes and updates to the generic uverbs interfaces in device drivers including the new uAPI surface. - The mlx5_ib_devx.c in mlx5ib and related mlx5 core changes. Dependencies: - The mlx4ib driver code has been updated with the minimum changes needed. - The mlx5ib driver code has been updated with the minimum changes needed including DV support. Compatibility: - All user-space facing APIs are backwards compatible after this change. - All kernel-space facing RDMA APIs are backwards compatible after this change, with exception of ib_create_ah() and ib_destroy_ah() which takes a new flag. - The "ib_device_ops" structure exist, but only contains the driver ID and some structure sizes. Differences from Linux: - Infiniband drivers must use the INIT_IB_DEVICE_OPS() macro to set the sizes needed for allocating various IB objects, when adding IB device instances. Security: - PRIV_NET_RAW is needed to use raw ethernet transmit features. - PRIV_DRIVER is needed to use other privileged operations. Based on upstream Linux, Torvalds (5.7-rc1): 8632e9b5645bbc2331d21d892b0d6961c1a08429 MFC after: 1 week Reviewed by: kib Differential Revision: https://reviews.freebsd.org/D31149 Sponsored by: NVIDIA Networking
93 lines
2.6 KiB
C
93 lines
2.6 KiB
C
/*
|
|
* Copyright (c) 2018, Mellanox Technologies inc. All rights reserved.
|
|
*
|
|
* This software is available to you under a choice of one of two
|
|
* licenses. You may choose to be licensed under the terms of the GNU
|
|
* General Public License (GPL) Version 2, available from the file
|
|
* COPYING in the main directory of this source tree, or the
|
|
* OpenIB.org BSD license below:
|
|
*
|
|
* Redistribution and use in source and binary forms, with or
|
|
* without modification, are permitted provided that the following
|
|
* conditions are met:
|
|
*
|
|
* - Redistributions of source code must retain the above
|
|
* copyright notice, this list of conditions and the following
|
|
* disclaimer.
|
|
*
|
|
* - Redistributions in binary form must reproduce the above
|
|
* copyright notice, this list of conditions and the following
|
|
* disclaimer in the documentation and/or other materials
|
|
* provided with the distribution.
|
|
*
|
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
|
|
* BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
|
|
* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
* SOFTWARE.
|
|
*/
|
|
|
|
#ifndef RDMA_USER_IOCTL_CMDS_H
|
|
#define RDMA_USER_IOCTL_CMDS_H
|
|
|
|
#ifdef _KERNEL
|
|
#include <linux/types.h>
|
|
#include <linux/ioctl.h>
|
|
#else
|
|
#include <infiniband/types.h>
|
|
#include <sys/ioccom.h>
|
|
#endif
|
|
|
|
/* Documentation/ioctl/ioctl-number.rst */
|
|
#define RDMA_IOCTL_MAGIC 0x1b
|
|
#define RDMA_VERBS_IOCTL \
|
|
_IOWR(RDMA_IOCTL_MAGIC, 1, struct ib_uverbs_ioctl_hdr)
|
|
|
|
enum {
|
|
/* User input */
|
|
UVERBS_ATTR_F_MANDATORY = 1U << 0,
|
|
/*
|
|
* Valid output bit should be ignored and considered set in
|
|
* mandatory fields. This bit is kernel output.
|
|
*/
|
|
UVERBS_ATTR_F_VALID_OUTPUT = 1U << 1,
|
|
};
|
|
|
|
struct ib_uverbs_attr {
|
|
__u16 attr_id; /* command specific type attribute */
|
|
__u16 len; /* only for pointers and IDRs array */
|
|
__u16 flags; /* combination of UVERBS_ATTR_F_XXXX */
|
|
union {
|
|
struct {
|
|
__u8 elem_id;
|
|
__u8 reserved;
|
|
} enum_data;
|
|
__u16 reserved;
|
|
} attr_data;
|
|
union {
|
|
/*
|
|
* ptr to command, inline data, idr/fd or
|
|
* ptr to __u32 array of IDRs
|
|
*/
|
|
__aligned_u64 data;
|
|
/* Used by FD_IN and FD_OUT */
|
|
__s64 data_s64;
|
|
};
|
|
};
|
|
|
|
struct ib_uverbs_ioctl_hdr {
|
|
__u16 length;
|
|
__u16 object_id;
|
|
__u16 method_id;
|
|
__u16 num_attrs;
|
|
__aligned_u64 reserved1;
|
|
__u32 driver_id;
|
|
__u32 reserved2;
|
|
struct ib_uverbs_attr attrs[0];
|
|
};
|
|
|
|
#endif
|