Merge tag 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/rdma/rdma
Pull RDMA subsystem updates from Jason Gunthorpe: "This cycle mainly saw lots of bug fixes and clean up code across the core code and several drivers, few new functional changes were made. - Many cleanup and bug fixes for hns - Various small bug fixes and cleanups in hfi1, mlx5, usnic, qed, bnxt_re, efa - Share the query_port code between all the iWarp drivers - General rework and cleanup of the ODP MR umem code to fit better with the mmu notifier get/put scheme - Support rdma netlink in non init_net name spaces - mlx5 support for XRC devx and DC ODP" * tag 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/rdma/rdma: (99 commits) RDMA: Fix double-free in srq creation error flow RDMA/efa: Fix incorrect error print IB/mlx5: Free mpi in mp_slave mode IB/mlx5: Use the original address for the page during free_pages RDMA/bnxt_re: Fix spelling mistake "missin_resp" -> "missing_resp" RDMA/hns: Package operations of rq inline buffer into separate functions RDMA/hns: Optimize cmd init and mode selection for hip08 IB/hfi1: Define variables as unsigned long to fix KASAN warning IB/{rdmavt, hfi1, qib}: Add a counter for credit waits IB/hfi1: Add traces for TID RDMA READ RDMA/siw: Relax from kmap_atomic() use in TX path IB/iser: Support up to 16MB data transfer in a single command RDMA/siw: Fix page address mapping in TX path RDMA: Fix goto target to release the allocated memory RDMA/usnic: Avoid overly large buffers on stack RDMA/odp: Add missing cast for 32 bit RDMA/hns: Use devm_platform_ioremap_resource() to simplify code Documentation/infiniband: update name of some functions RDMA/cma: Fix false error message RDMA/hns: Fix wrong assignment of qp_access_flags ...
This commit is contained in:
@@ -36,6 +36,8 @@
|
||||
#include <linux/types.h>
|
||||
#include <linux/sched.h>
|
||||
#include <linux/cred.h>
|
||||
#include <linux/uaccess.h>
|
||||
#include <linux/fs.h>
|
||||
|
||||
struct ib_addr {
|
||||
union {
|
||||
|
@@ -98,15 +98,54 @@ void ibdev_info(const struct ib_device *ibdev, const char *format, ...);
|
||||
#if defined(CONFIG_DYNAMIC_DEBUG)
|
||||
#define ibdev_dbg(__dev, format, args...) \
|
||||
dynamic_ibdev_dbg(__dev, format, ##args)
|
||||
#elif defined(DEBUG)
|
||||
#define ibdev_dbg(__dev, format, args...) \
|
||||
ibdev_printk(KERN_DEBUG, __dev, format, ##args)
|
||||
#else
|
||||
__printf(2, 3) __cold
|
||||
static inline
|
||||
void ibdev_dbg(const struct ib_device *ibdev, const char *format, ...) {}
|
||||
#endif
|
||||
|
||||
#define ibdev_level_ratelimited(ibdev_level, ibdev, fmt, ...) \
|
||||
do { \
|
||||
static DEFINE_RATELIMIT_STATE(_rs, \
|
||||
DEFAULT_RATELIMIT_INTERVAL, \
|
||||
DEFAULT_RATELIMIT_BURST); \
|
||||
if (__ratelimit(&_rs)) \
|
||||
ibdev_level(ibdev, fmt, ##__VA_ARGS__); \
|
||||
} while (0)
|
||||
|
||||
#define ibdev_emerg_ratelimited(ibdev, fmt, ...) \
|
||||
ibdev_level_ratelimited(ibdev_emerg, ibdev, fmt, ##__VA_ARGS__)
|
||||
#define ibdev_alert_ratelimited(ibdev, fmt, ...) \
|
||||
ibdev_level_ratelimited(ibdev_alert, ibdev, fmt, ##__VA_ARGS__)
|
||||
#define ibdev_crit_ratelimited(ibdev, fmt, ...) \
|
||||
ibdev_level_ratelimited(ibdev_crit, ibdev, fmt, ##__VA_ARGS__)
|
||||
#define ibdev_err_ratelimited(ibdev, fmt, ...) \
|
||||
ibdev_level_ratelimited(ibdev_err, ibdev, fmt, ##__VA_ARGS__)
|
||||
#define ibdev_warn_ratelimited(ibdev, fmt, ...) \
|
||||
ibdev_level_ratelimited(ibdev_warn, ibdev, fmt, ##__VA_ARGS__)
|
||||
#define ibdev_notice_ratelimited(ibdev, fmt, ...) \
|
||||
ibdev_level_ratelimited(ibdev_notice, ibdev, fmt, ##__VA_ARGS__)
|
||||
#define ibdev_info_ratelimited(ibdev, fmt, ...) \
|
||||
ibdev_level_ratelimited(ibdev_info, ibdev, fmt, ##__VA_ARGS__)
|
||||
|
||||
#if defined(CONFIG_DYNAMIC_DEBUG)
|
||||
/* descriptor check is first to prevent flooding with "callbacks suppressed" */
|
||||
#define ibdev_dbg_ratelimited(ibdev, fmt, ...) \
|
||||
do { \
|
||||
static DEFINE_RATELIMIT_STATE(_rs, \
|
||||
DEFAULT_RATELIMIT_INTERVAL, \
|
||||
DEFAULT_RATELIMIT_BURST); \
|
||||
DEFINE_DYNAMIC_DEBUG_METADATA(descriptor, fmt); \
|
||||
if (DYNAMIC_DEBUG_BRANCH(descriptor) && __ratelimit(&_rs)) \
|
||||
__dynamic_ibdev_dbg(&descriptor, ibdev, fmt, \
|
||||
##__VA_ARGS__); \
|
||||
} while (0)
|
||||
#else
|
||||
__printf(2, 3) __cold
|
||||
static inline
|
||||
void ibdev_dbg_ratelimited(const struct ib_device *ibdev, const char *format, ...) {}
|
||||
#endif
|
||||
|
||||
union ib_gid {
|
||||
u8 raw[16];
|
||||
struct {
|
||||
@@ -451,6 +490,16 @@ enum ib_port_state {
|
||||
IB_PORT_ACTIVE_DEFER = 5
|
||||
};
|
||||
|
||||
enum ib_port_phys_state {
|
||||
IB_PORT_PHYS_STATE_SLEEP = 1,
|
||||
IB_PORT_PHYS_STATE_POLLING = 2,
|
||||
IB_PORT_PHYS_STATE_DISABLED = 3,
|
||||
IB_PORT_PHYS_STATE_PORT_CONFIGURATION_TRAINING = 4,
|
||||
IB_PORT_PHYS_STATE_LINK_UP = 5,
|
||||
IB_PORT_PHYS_STATE_LINK_ERROR_RECOVERY = 6,
|
||||
IB_PORT_PHYS_STATE_PHY_TEST = 7,
|
||||
};
|
||||
|
||||
enum ib_port_width {
|
||||
IB_WIDTH_1X = 1,
|
||||
IB_WIDTH_2X = 16,
|
||||
@@ -3710,6 +3759,25 @@ static inline struct ib_cq *ib_alloc_cq(struct ib_device *dev, void *private,
|
||||
NULL);
|
||||
}
|
||||
|
||||
struct ib_cq *__ib_alloc_cq_any(struct ib_device *dev, void *private,
|
||||
int nr_cqe, enum ib_poll_context poll_ctx,
|
||||
const char *caller);
|
||||
|
||||
/**
|
||||
* ib_alloc_cq_any: Allocate kernel CQ
|
||||
* @dev: The IB device
|
||||
* @private: Private data attached to the CQE
|
||||
* @nr_cqe: Number of CQEs in the CQ
|
||||
* @poll_ctx: Context used for polling the CQ
|
||||
*/
|
||||
static inline struct ib_cq *ib_alloc_cq_any(struct ib_device *dev,
|
||||
void *private, int nr_cqe,
|
||||
enum ib_poll_context poll_ctx)
|
||||
{
|
||||
return __ib_alloc_cq_any(dev, private, nr_cqe, poll_ctx,
|
||||
KBUILD_MODNAME);
|
||||
}
|
||||
|
||||
/**
|
||||
* ib_free_cq_user - Free kernel/user CQ
|
||||
* @cq: The CQ to free
|
||||
|
@@ -33,6 +33,9 @@
|
||||
#ifndef _IW_PORTMAP_H
|
||||
#define _IW_PORTMAP_H
|
||||
|
||||
#include <linux/socket.h>
|
||||
#include <linux/netlink.h>
|
||||
|
||||
#define IWPM_ULIBNAME_SIZE 32
|
||||
#define IWPM_DEVNAME_SIZE 32
|
||||
#define IWPM_IFNAME_SIZE 16
|
||||
|
@@ -33,6 +33,8 @@
|
||||
#if !defined(OPA_PORT_INFO_H)
|
||||
#define OPA_PORT_INFO_H
|
||||
|
||||
#include <rdma/opa_smi.h>
|
||||
|
||||
#define OPA_PORT_LINK_MODE_NOP 0 /* No change */
|
||||
#define OPA_PORT_LINK_MODE_OPA 4 /* Port mode is OPA */
|
||||
|
||||
|
@@ -76,28 +76,32 @@ int ibnl_put_attr(struct sk_buff *skb, struct nlmsghdr *nlh,
|
||||
|
||||
/**
|
||||
* Send the supplied skb to a specific userspace PID.
|
||||
* @net: Net namespace in which to send the skb
|
||||
* @skb: The netlink skb
|
||||
* @pid: Userspace netlink process ID
|
||||
* Returns 0 on success or a negative error code.
|
||||
*/
|
||||
int rdma_nl_unicast(struct sk_buff *skb, u32 pid);
|
||||
int rdma_nl_unicast(struct net *net, struct sk_buff *skb, u32 pid);
|
||||
|
||||
/**
|
||||
* Send, with wait/1 retry, the supplied skb to a specific userspace PID.
|
||||
* @net: Net namespace in which to send the skb
|
||||
* @skb: The netlink skb
|
||||
* @pid: Userspace netlink process ID
|
||||
* Returns 0 on success or a negative error code.
|
||||
*/
|
||||
int rdma_nl_unicast_wait(struct sk_buff *skb, __u32 pid);
|
||||
int rdma_nl_unicast_wait(struct net *net, struct sk_buff *skb, __u32 pid);
|
||||
|
||||
/**
|
||||
* Send the supplied skb to a netlink group.
|
||||
* @net: Net namespace in which to send the skb
|
||||
* @skb: The netlink skb
|
||||
* @group: Netlink group ID
|
||||
* @flags: allocation flags
|
||||
* Returns 0 on success or a negative error code.
|
||||
*/
|
||||
int rdma_nl_multicast(struct sk_buff *skb, unsigned int group, gfp_t flags);
|
||||
int rdma_nl_multicast(struct net *net, struct sk_buff *skb,
|
||||
unsigned int group, gfp_t flags);
|
||||
|
||||
/**
|
||||
* Check if there are any listeners to the netlink group
|
||||
|
@@ -116,6 +116,7 @@ struct rvt_ibport {
|
||||
u64 n_unaligned;
|
||||
u64 n_rc_dupreq;
|
||||
u64 n_rc_seqnak;
|
||||
u64 n_rc_crwaits;
|
||||
u16 pkey_violations;
|
||||
u16 qkey_violations;
|
||||
u16 mkey_violations;
|
||||
|
@@ -53,6 +53,7 @@
|
||||
|
||||
#include <linux/kthread.h>
|
||||
#include <rdma/ib_user_verbs.h>
|
||||
#include <rdma/ib_verbs.h>
|
||||
|
||||
/*
|
||||
* Define an ib_cq_notify value that is not valid so we know when CQ
|
||||
|
@@ -973,6 +973,41 @@ static inline void rvt_free_rq(struct rvt_rq *rq)
|
||||
rq->wq = NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
* rvt_to_iport - Get the ibport pointer
|
||||
* @qp: the qp pointer
|
||||
*
|
||||
* This function returns the ibport pointer from the qp pointer.
|
||||
*/
|
||||
static inline struct rvt_ibport *rvt_to_iport(struct rvt_qp *qp)
|
||||
{
|
||||
struct rvt_dev_info *rdi = ib_to_rvt(qp->ibqp.device);
|
||||
|
||||
return rdi->ports[qp->port_num - 1];
|
||||
}
|
||||
|
||||
/**
|
||||
* rvt_rc_credit_avail - Check if there are enough RC credits for the request
|
||||
* @qp: the qp
|
||||
* @wqe: the request
|
||||
*
|
||||
* This function returns false when there are not enough credits for the given
|
||||
* request and true otherwise.
|
||||
*/
|
||||
static inline bool rvt_rc_credit_avail(struct rvt_qp *qp, struct rvt_swqe *wqe)
|
||||
{
|
||||
lockdep_assert_held(&qp->s_lock);
|
||||
if (!(qp->s_flags & RVT_S_UNLIMITED_CREDIT) &&
|
||||
rvt_cmp_msn(wqe->ssn, qp->s_lsn + 1) > 0) {
|
||||
struct rvt_ibport *rvp = rvt_to_iport(qp);
|
||||
|
||||
qp->s_flags |= RVT_S_WAIT_SSN_CREDIT;
|
||||
rvp->n_rc_crwaits++;
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
struct rvt_qp_iter *rvt_qp_iter_init(struct rvt_dev_info *rdi,
|
||||
u64 v,
|
||||
void (*cb)(struct rvt_qp *qp, u64 v));
|
||||
|
@@ -6,6 +6,8 @@
|
||||
#ifndef _RDMA_SIGNATURE_H_
|
||||
#define _RDMA_SIGNATURE_H_
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
enum ib_signature_prot_cap {
|
||||
IB_PROT_T10DIF_TYPE_1 = 1,
|
||||
IB_PROT_T10DIF_TYPE_2 = 1 << 1,
|
||||
|
Reference in New Issue
Block a user