You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
Merge branch 'for-next-early' into for-next
The early for-next branch was based on v4.14-rc2, while the shared pull request I got from Mellanox used a v4.14-rc4 base. I'm making the branch that was the shared Mellanox pull request the new for-next branch and merging the early for-next branch into it. Signed-off-by: Doug Ledford <dledford@redhat.com>
This commit is contained in:
@@ -11081,6 +11081,7 @@ F: drivers/net/ethernet/qlogic/qede/
|
||||
|
||||
QLOGIC QL4xxx RDMA DRIVER
|
||||
M: Ram Amrani <Ram.Amrani@cavium.com>
|
||||
M: Michal Kalderon <Michal.Kalderon@cavium.com>
|
||||
M: Ariel Elior <Ariel.Elior@cavium.com>
|
||||
L: linux-rdma@vger.kernel.org
|
||||
S: Supported
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
menuconfig INFINIBAND
|
||||
tristate "InfiniBand support"
|
||||
depends on PCI || BROKEN
|
||||
depends on HAS_IOMEM
|
||||
depends on NET
|
||||
depends on INET
|
||||
@@ -46,6 +45,7 @@ config INFINIBAND_EXP_USER_ACCESS
|
||||
config INFINIBAND_USER_MEM
|
||||
bool
|
||||
depends on INFINIBAND_USER_ACCESS != n
|
||||
depends on MMU
|
||||
default y
|
||||
|
||||
config INFINIBAND_ON_DEMAND_PAGING
|
||||
|
||||
@@ -1472,31 +1472,29 @@ static void cm_format_path_lid_from_req(struct cm_req_msg *req_msg,
|
||||
|
||||
if (primary_path->rec_type != SA_PATH_REC_TYPE_OPA) {
|
||||
sa_path_set_dlid(primary_path,
|
||||
htonl(ntohs(req_msg->primary_local_lid)));
|
||||
ntohs(req_msg->primary_local_lid));
|
||||
sa_path_set_slid(primary_path,
|
||||
htonl(ntohs(req_msg->primary_remote_lid)));
|
||||
ntohs(req_msg->primary_remote_lid));
|
||||
} else {
|
||||
lid = opa_get_lid_from_gid(&req_msg->primary_local_gid);
|
||||
sa_path_set_dlid(primary_path, cpu_to_be32(lid));
|
||||
sa_path_set_dlid(primary_path, lid);
|
||||
|
||||
lid = opa_get_lid_from_gid(&req_msg->primary_remote_gid);
|
||||
sa_path_set_slid(primary_path, cpu_to_be32(lid));
|
||||
sa_path_set_slid(primary_path, lid);
|
||||
}
|
||||
|
||||
if (!cm_req_has_alt_path(req_msg))
|
||||
return;
|
||||
|
||||
if (alt_path->rec_type != SA_PATH_REC_TYPE_OPA) {
|
||||
sa_path_set_dlid(alt_path,
|
||||
htonl(ntohs(req_msg->alt_local_lid)));
|
||||
sa_path_set_slid(alt_path,
|
||||
htonl(ntohs(req_msg->alt_remote_lid)));
|
||||
sa_path_set_dlid(alt_path, ntohs(req_msg->alt_local_lid));
|
||||
sa_path_set_slid(alt_path, ntohs(req_msg->alt_remote_lid));
|
||||
} else {
|
||||
lid = opa_get_lid_from_gid(&req_msg->alt_local_gid);
|
||||
sa_path_set_dlid(alt_path, cpu_to_be32(lid));
|
||||
sa_path_set_dlid(alt_path, lid);
|
||||
|
||||
lid = opa_get_lid_from_gid(&req_msg->alt_remote_gid);
|
||||
sa_path_set_slid(alt_path, cpu_to_be32(lid));
|
||||
sa_path_set_slid(alt_path, lid);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2810,6 +2808,7 @@ int ib_send_cm_mra(struct ib_cm_id *cm_id,
|
||||
msg_response = CM_MSG_RESPONSE_OTHER;
|
||||
break;
|
||||
}
|
||||
/* fall through */
|
||||
default:
|
||||
ret = -EINVAL;
|
||||
goto error1;
|
||||
@@ -3037,14 +3036,14 @@ static void cm_format_path_lid_from_lap(struct cm_lap_msg *lap_msg,
|
||||
u32 lid;
|
||||
|
||||
if (path->rec_type != SA_PATH_REC_TYPE_OPA) {
|
||||
sa_path_set_dlid(path, htonl(ntohs(lap_msg->alt_local_lid)));
|
||||
sa_path_set_slid(path, htonl(ntohs(lap_msg->alt_remote_lid)));
|
||||
sa_path_set_dlid(path, ntohs(lap_msg->alt_local_lid));
|
||||
sa_path_set_slid(path, ntohs(lap_msg->alt_remote_lid));
|
||||
} else {
|
||||
lid = opa_get_lid_from_gid(&lap_msg->alt_local_gid);
|
||||
sa_path_set_dlid(path, cpu_to_be32(lid));
|
||||
sa_path_set_dlid(path, lid);
|
||||
|
||||
lid = opa_get_lid_from_gid(&lap_msg->alt_remote_gid);
|
||||
sa_path_set_slid(path, cpu_to_be32(lid));
|
||||
sa_path_set_slid(path, lid);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1540,7 +1540,7 @@ static struct rdma_id_private *cma_id_from_event(struct ib_cm_id *cm_id,
|
||||
return id_priv;
|
||||
}
|
||||
|
||||
static inline int cma_user_data_offset(struct rdma_id_private *id_priv)
|
||||
static inline u8 cma_user_data_offset(struct rdma_id_private *id_priv)
|
||||
{
|
||||
return cma_family(id_priv) == AF_IB ? 0 : sizeof(struct cma_hdr);
|
||||
}
|
||||
@@ -1942,7 +1942,8 @@ static int cma_req_handler(struct ib_cm_id *cm_id, struct ib_cm_event *ib_event)
|
||||
struct rdma_id_private *listen_id, *conn_id = NULL;
|
||||
struct rdma_cm_event event;
|
||||
struct net_device *net_dev;
|
||||
int offset, ret;
|
||||
u8 offset;
|
||||
int ret;
|
||||
|
||||
listen_id = cma_id_from_event(cm_id, ib_event, &net_dev);
|
||||
if (IS_ERR(listen_id))
|
||||
@@ -3440,7 +3441,8 @@ static int cma_resolve_ib_udp(struct rdma_id_private *id_priv,
|
||||
struct ib_cm_sidr_req_param req;
|
||||
struct ib_cm_id *id;
|
||||
void *private_data;
|
||||
int offset, ret;
|
||||
u8 offset;
|
||||
int ret;
|
||||
|
||||
memset(&req, 0, sizeof req);
|
||||
offset = cma_user_data_offset(id_priv);
|
||||
@@ -3497,7 +3499,8 @@ static int cma_connect_ib(struct rdma_id_private *id_priv,
|
||||
struct rdma_route *route;
|
||||
void *private_data;
|
||||
struct ib_cm_id *id;
|
||||
int offset, ret;
|
||||
u8 offset;
|
||||
int ret;
|
||||
|
||||
memset(&req, 0, sizeof req);
|
||||
offset = cma_user_data_offset(id_priv);
|
||||
|
||||
@@ -447,9 +447,6 @@ static void destroy_cm_id(struct iw_cm_id *cm_id)
|
||||
*/
|
||||
void iw_destroy_cm_id(struct iw_cm_id *cm_id)
|
||||
{
|
||||
struct iwcm_id_private *cm_id_priv;
|
||||
|
||||
cm_id_priv = container_of(cm_id, struct iwcm_id_private, id);
|
||||
destroy_cm_id(cm_id);
|
||||
}
|
||||
EXPORT_SYMBOL(iw_destroy_cm_id);
|
||||
|
||||
@@ -384,21 +384,17 @@ int rdma_rw_ctx_signature_init(struct rdma_rw_ctx *ctx, struct ib_qp *qp,
|
||||
count += ret;
|
||||
prev_wr = &ctx->sig->data.reg_wr.wr;
|
||||
|
||||
if (prot_sg_cnt) {
|
||||
ret = rdma_rw_init_one_mr(qp, port_num, &ctx->sig->prot,
|
||||
prot_sg, prot_sg_cnt, 0);
|
||||
if (ret < 0)
|
||||
goto out_destroy_data_mr;
|
||||
count += ret;
|
||||
ret = rdma_rw_init_one_mr(qp, port_num, &ctx->sig->prot,
|
||||
prot_sg, prot_sg_cnt, 0);
|
||||
if (ret < 0)
|
||||
goto out_destroy_data_mr;
|
||||
count += ret;
|
||||
|
||||
if (ctx->sig->prot.inv_wr.next)
|
||||
prev_wr->next = &ctx->sig->prot.inv_wr;
|
||||
else
|
||||
prev_wr->next = &ctx->sig->prot.reg_wr.wr;
|
||||
prev_wr = &ctx->sig->prot.reg_wr.wr;
|
||||
} else {
|
||||
ctx->sig->prot.mr = NULL;
|
||||
}
|
||||
if (ctx->sig->prot.inv_wr.next)
|
||||
prev_wr->next = &ctx->sig->prot.inv_wr;
|
||||
else
|
||||
prev_wr->next = &ctx->sig->prot.reg_wr.wr;
|
||||
prev_wr = &ctx->sig->prot.reg_wr.wr;
|
||||
|
||||
ctx->sig->sig_mr = ib_mr_pool_get(qp, &qp->sig_mrs);
|
||||
if (!ctx->sig->sig_mr) {
|
||||
|
||||
@@ -229,7 +229,16 @@ static void recv_handler(struct ib_mad_agent *agent,
|
||||
packet->mad.hdr.status = 0;
|
||||
packet->mad.hdr.length = hdr_size(file) + mad_recv_wc->mad_len;
|
||||
packet->mad.hdr.qpn = cpu_to_be32(mad_recv_wc->wc->src_qp);
|
||||
packet->mad.hdr.lid = ib_lid_be16(mad_recv_wc->wc->slid);
|
||||
/*
|
||||
* On OPA devices it is okay to lose the upper 16 bits of LID as this
|
||||
* information is obtained elsewhere. Mask off the upper 16 bits.
|
||||
*/
|
||||
if (agent->device->port_immutable[agent->port_num].core_cap_flags &
|
||||
RDMA_CORE_PORT_INTEL_OPA)
|
||||
packet->mad.hdr.lid = ib_lid_be16(0xFFFF &
|
||||
mad_recv_wc->wc->slid);
|
||||
else
|
||||
packet->mad.hdr.lid = ib_lid_be16(mad_recv_wc->wc->slid);
|
||||
packet->mad.hdr.sl = mad_recv_wc->wc->sl;
|
||||
packet->mad.hdr.path_bits = mad_recv_wc->wc->dlid_path_bits;
|
||||
packet->mad.hdr.pkey_index = mad_recv_wc->wc->pkey_index;
|
||||
|
||||
@@ -47,21 +47,28 @@
|
||||
#include <rdma/ib_umem.h>
|
||||
#include <rdma/ib_user_verbs.h>
|
||||
|
||||
#define INIT_UDATA(udata, ibuf, obuf, ilen, olen) \
|
||||
do { \
|
||||
(udata)->inbuf = (const void __user *) (ibuf); \
|
||||
(udata)->outbuf = (void __user *) (obuf); \
|
||||
(udata)->inlen = (ilen); \
|
||||
(udata)->outlen = (olen); \
|
||||
} while (0)
|
||||
static inline void
|
||||
ib_uverbs_init_udata(struct ib_udata *udata,
|
||||
const void __user *ibuf,
|
||||
void __user *obuf,
|
||||
size_t ilen, size_t olen)
|
||||
{
|
||||
udata->inbuf = ibuf;
|
||||
udata->outbuf = obuf;
|
||||
udata->inlen = ilen;
|
||||
udata->outlen = olen;
|
||||
}
|
||||
|
||||
#define INIT_UDATA_BUF_OR_NULL(udata, ibuf, obuf, ilen, olen) \
|
||||
do { \
|
||||
(udata)->inbuf = (ilen) ? (const void __user *) (ibuf) : NULL; \
|
||||
(udata)->outbuf = (olen) ? (void __user *) (obuf) : NULL; \
|
||||
(udata)->inlen = (ilen); \
|
||||
(udata)->outlen = (olen); \
|
||||
} while (0)
|
||||
static inline void
|
||||
ib_uverbs_init_udata_buf_or_null(struct ib_udata *udata,
|
||||
const void __user *ibuf,
|
||||
void __user *obuf,
|
||||
size_t ilen, size_t olen)
|
||||
{
|
||||
ib_uverbs_init_udata(udata,
|
||||
ilen ? ibuf : NULL, olen ? obuf : NULL,
|
||||
ilen, olen);
|
||||
}
|
||||
|
||||
/*
|
||||
* Our lifetime rules for these structs are the following:
|
||||
|
||||
@@ -91,8 +91,8 @@ ssize_t ib_uverbs_get_context(struct ib_uverbs_file *file,
|
||||
goto err;
|
||||
}
|
||||
|
||||
INIT_UDATA(&udata, buf + sizeof(cmd),
|
||||
(unsigned long) cmd.response + sizeof(resp),
|
||||
ib_uverbs_init_udata(&udata, buf + sizeof(cmd),
|
||||
u64_to_user_ptr(cmd.response) + sizeof(resp),
|
||||
in_len - sizeof(cmd) - sizeof(struct ib_uverbs_cmd_hdr),
|
||||
out_len - sizeof(resp));
|
||||
|
||||
@@ -141,8 +141,7 @@ ssize_t ib_uverbs_get_context(struct ib_uverbs_file *file,
|
||||
goto err_fd;
|
||||
}
|
||||
|
||||
if (copy_to_user((void __user *) (unsigned long) cmd.response,
|
||||
&resp, sizeof resp)) {
|
||||
if (copy_to_user(u64_to_user_ptr(cmd.response), &resp, sizeof resp)) {
|
||||
ret = -EFAULT;
|
||||
goto err_file;
|
||||
}
|
||||
@@ -238,8 +237,7 @@ ssize_t ib_uverbs_query_device(struct ib_uverbs_file *file,
|
||||
memset(&resp, 0, sizeof resp);
|
||||
copy_query_dev_fields(file, ib_dev, &resp, &ib_dev->attrs);
|
||||
|
||||
if (copy_to_user((void __user *) (unsigned long) cmd.response,
|
||||
&resp, sizeof resp))
|
||||
if (copy_to_user(u64_to_user_ptr(cmd.response), &resp, sizeof resp))
|
||||
return -EFAULT;
|
||||
|
||||
return in_len;
|
||||
@@ -295,8 +293,7 @@ ssize_t ib_uverbs_query_port(struct ib_uverbs_file *file,
|
||||
resp.link_layer = rdma_port_get_link_layer(ib_dev,
|
||||
cmd.port_num);
|
||||
|
||||
if (copy_to_user((void __user *) (unsigned long) cmd.response,
|
||||
&resp, sizeof resp))
|
||||
if (copy_to_user(u64_to_user_ptr(cmd.response), &resp, sizeof resp))
|
||||
return -EFAULT;
|
||||
|
||||
return in_len;
|
||||
@@ -320,8 +317,8 @@ ssize_t ib_uverbs_alloc_pd(struct ib_uverbs_file *file,
|
||||
if (copy_from_user(&cmd, buf, sizeof cmd))
|
||||
return -EFAULT;
|
||||
|
||||
INIT_UDATA(&udata, buf + sizeof(cmd),
|
||||
(unsigned long) cmd.response + sizeof(resp),
|
||||
ib_uverbs_init_udata(&udata, buf + sizeof(cmd),
|
||||
u64_to_user_ptr(cmd.response) + sizeof(resp),
|
||||
in_len - sizeof(cmd) - sizeof(struct ib_uverbs_cmd_hdr),
|
||||
out_len - sizeof(resp));
|
||||
|
||||
@@ -344,8 +341,7 @@ ssize_t ib_uverbs_alloc_pd(struct ib_uverbs_file *file,
|
||||
memset(&resp, 0, sizeof resp);
|
||||
resp.pd_handle = uobj->id;
|
||||
|
||||
if (copy_to_user((void __user *) (unsigned long) cmd.response,
|
||||
&resp, sizeof resp)) {
|
||||
if (copy_to_user(u64_to_user_ptr(cmd.response), &resp, sizeof resp)) {
|
||||
ret = -EFAULT;
|
||||
goto err_copy;
|
||||
}
|
||||
@@ -490,8 +486,8 @@ ssize_t ib_uverbs_open_xrcd(struct ib_uverbs_file *file,
|
||||
if (copy_from_user(&cmd, buf, sizeof cmd))
|
||||
return -EFAULT;
|
||||
|
||||
INIT_UDATA(&udata, buf + sizeof(cmd),
|
||||
(unsigned long) cmd.response + sizeof(resp),
|
||||
ib_uverbs_init_udata(&udata, buf + sizeof(cmd),
|
||||
u64_to_user_ptr(cmd.response) + sizeof(resp),
|
||||
in_len - sizeof(cmd) - sizeof(struct ib_uverbs_cmd_hdr),
|
||||
out_len - sizeof(resp));
|
||||
|
||||
@@ -556,8 +552,7 @@ ssize_t ib_uverbs_open_xrcd(struct ib_uverbs_file *file,
|
||||
atomic_inc(&xrcd->usecnt);
|
||||
}
|
||||
|
||||
if (copy_to_user((void __user *) (unsigned long) cmd.response,
|
||||
&resp, sizeof resp)) {
|
||||
if (copy_to_user(u64_to_user_ptr(cmd.response), &resp, sizeof resp)) {
|
||||
ret = -EFAULT;
|
||||
goto err_copy;
|
||||
}
|
||||
@@ -655,8 +650,8 @@ ssize_t ib_uverbs_reg_mr(struct ib_uverbs_file *file,
|
||||
if (copy_from_user(&cmd, buf, sizeof cmd))
|
||||
return -EFAULT;
|
||||
|
||||
INIT_UDATA(&udata, buf + sizeof(cmd),
|
||||
(unsigned long) cmd.response + sizeof(resp),
|
||||
ib_uverbs_init_udata(&udata, buf + sizeof(cmd),
|
||||
u64_to_user_ptr(cmd.response) + sizeof(resp),
|
||||
in_len - sizeof(cmd) - sizeof(struct ib_uverbs_cmd_hdr),
|
||||
out_len - sizeof(resp));
|
||||
|
||||
@@ -705,8 +700,7 @@ ssize_t ib_uverbs_reg_mr(struct ib_uverbs_file *file,
|
||||
resp.rkey = mr->rkey;
|
||||
resp.mr_handle = uobj->id;
|
||||
|
||||
if (copy_to_user((void __user *) (unsigned long) cmd.response,
|
||||
&resp, sizeof resp)) {
|
||||
if (copy_to_user(u64_to_user_ptr(cmd.response), &resp, sizeof resp)) {
|
||||
ret = -EFAULT;
|
||||
goto err_copy;
|
||||
}
|
||||
@@ -748,8 +742,8 @@ ssize_t ib_uverbs_rereg_mr(struct ib_uverbs_file *file,
|
||||
if (copy_from_user(&cmd, buf, sizeof(cmd)))
|
||||
return -EFAULT;
|
||||
|
||||
INIT_UDATA(&udata, buf + sizeof(cmd),
|
||||
(unsigned long) cmd.response + sizeof(resp),
|
||||
ib_uverbs_init_udata(&udata, buf + sizeof(cmd),
|
||||
u64_to_user_ptr(cmd.response) + sizeof(resp),
|
||||
in_len - sizeof(cmd) - sizeof(struct ib_uverbs_cmd_hdr),
|
||||
out_len - sizeof(resp));
|
||||
|
||||
@@ -800,8 +794,7 @@ ssize_t ib_uverbs_rereg_mr(struct ib_uverbs_file *file,
|
||||
resp.lkey = mr->lkey;
|
||||
resp.rkey = mr->rkey;
|
||||
|
||||
if (copy_to_user((void __user *)(unsigned long)cmd.response,
|
||||
&resp, sizeof(resp)))
|
||||
if (copy_to_user(u64_to_user_ptr(cmd.response), &resp, sizeof(resp)))
|
||||
ret = -EFAULT;
|
||||
else
|
||||
ret = in_len;
|
||||
@@ -867,8 +860,8 @@ ssize_t ib_uverbs_alloc_mw(struct ib_uverbs_file *file,
|
||||
goto err_free;
|
||||
}
|
||||
|
||||
INIT_UDATA(&udata, buf + sizeof(cmd),
|
||||
(unsigned long)cmd.response + sizeof(resp),
|
||||
ib_uverbs_init_udata(&udata, buf + sizeof(cmd),
|
||||
u64_to_user_ptr(cmd.response) + sizeof(resp),
|
||||
in_len - sizeof(cmd) - sizeof(struct ib_uverbs_cmd_hdr),
|
||||
out_len - sizeof(resp));
|
||||
|
||||
@@ -889,8 +882,7 @@ ssize_t ib_uverbs_alloc_mw(struct ib_uverbs_file *file,
|
||||
resp.rkey = mw->rkey;
|
||||
resp.mw_handle = uobj->id;
|
||||
|
||||
if (copy_to_user((void __user *)(unsigned long)cmd.response,
|
||||
&resp, sizeof(resp))) {
|
||||
if (copy_to_user(u64_to_user_ptr(cmd.response), &resp, sizeof(resp))) {
|
||||
ret = -EFAULT;
|
||||
goto err_copy;
|
||||
}
|
||||
@@ -956,8 +948,7 @@ ssize_t ib_uverbs_create_comp_channel(struct ib_uverbs_file *file,
|
||||
uobj_file.uobj);
|
||||
ib_uverbs_init_event_queue(&ev_file->ev_queue);
|
||||
|
||||
if (copy_to_user((void __user *) (unsigned long) cmd.response,
|
||||
&resp, sizeof resp)) {
|
||||
if (copy_to_user(u64_to_user_ptr(cmd.response), &resp, sizeof resp)) {
|
||||
uobj_alloc_abort(uobj);
|
||||
return -EFAULT;
|
||||
}
|
||||
@@ -1087,10 +1078,11 @@ ssize_t ib_uverbs_create_cq(struct ib_uverbs_file *file,
|
||||
if (copy_from_user(&cmd, buf, sizeof(cmd)))
|
||||
return -EFAULT;
|
||||
|
||||
INIT_UDATA(&ucore, buf, (unsigned long)cmd.response, sizeof(cmd), sizeof(resp));
|
||||
ib_uverbs_init_udata(&ucore, buf, u64_to_user_ptr(cmd.response),
|
||||
sizeof(cmd), sizeof(resp));
|
||||
|
||||
INIT_UDATA(&uhw, buf + sizeof(cmd),
|
||||
(unsigned long)cmd.response + sizeof(resp),
|
||||
ib_uverbs_init_udata(&uhw, buf + sizeof(cmd),
|
||||
u64_to_user_ptr(cmd.response) + sizeof(resp),
|
||||
in_len - sizeof(cmd) - sizeof(struct ib_uverbs_cmd_hdr),
|
||||
out_len - sizeof(resp));
|
||||
|
||||
@@ -1173,8 +1165,8 @@ ssize_t ib_uverbs_resize_cq(struct ib_uverbs_file *file,
|
||||
if (copy_from_user(&cmd, buf, sizeof cmd))
|
||||
return -EFAULT;
|
||||
|
||||
INIT_UDATA(&udata, buf + sizeof(cmd),
|
||||
(unsigned long) cmd.response + sizeof(resp),
|
||||
ib_uverbs_init_udata(&udata, buf + sizeof(cmd),
|
||||
u64_to_user_ptr(cmd.response) + sizeof(resp),
|
||||
in_len - sizeof(cmd) - sizeof(struct ib_uverbs_cmd_hdr),
|
||||
out_len - sizeof(resp));
|
||||
|
||||
@@ -1188,8 +1180,7 @@ ssize_t ib_uverbs_resize_cq(struct ib_uverbs_file *file,
|
||||
|
||||
resp.cqe = cq->cqe;
|
||||
|
||||
if (copy_to_user((void __user *) (unsigned long) cmd.response,
|
||||
&resp, sizeof resp.cqe))
|
||||
if (copy_to_user(u64_to_user_ptr(cmd.response), &resp, sizeof resp.cqe))
|
||||
ret = -EFAULT;
|
||||
|
||||
out:
|
||||
@@ -1249,7 +1240,7 @@ ssize_t ib_uverbs_poll_cq(struct ib_uverbs_file *file,
|
||||
return -EINVAL;
|
||||
|
||||
/* we copy a struct ib_uverbs_poll_cq_resp to user space */
|
||||
header_ptr = (void __user *)(unsigned long) cmd.response;
|
||||
header_ptr = u64_to_user_ptr(cmd.response);
|
||||
data_ptr = header_ptr + sizeof resp;
|
||||
|
||||
memset(&resp, 0, sizeof resp);
|
||||
@@ -1343,8 +1334,7 @@ ssize_t ib_uverbs_destroy_cq(struct ib_uverbs_file *file,
|
||||
resp.async_events_reported = obj->async_events_reported;
|
||||
|
||||
uverbs_uobject_put(uobj);
|
||||
if (copy_to_user((void __user *) (unsigned long) cmd.response,
|
||||
&resp, sizeof resp))
|
||||
if (copy_to_user(u64_to_user_ptr(cmd.response), &resp, sizeof resp))
|
||||
return -EFAULT;
|
||||
|
||||
return in_len;
|
||||
@@ -1650,10 +1640,10 @@ ssize_t ib_uverbs_create_qp(struct ib_uverbs_file *file,
|
||||
if (copy_from_user(&cmd, buf, sizeof(cmd)))
|
||||
return -EFAULT;
|
||||
|
||||
INIT_UDATA(&ucore, buf, (unsigned long)cmd.response, sizeof(cmd),
|
||||
resp_size);
|
||||
INIT_UDATA(&uhw, buf + sizeof(cmd),
|
||||
(unsigned long)cmd.response + resp_size,
|
||||
ib_uverbs_init_udata(&ucore, buf, u64_to_user_ptr(cmd.response),
|
||||
sizeof(cmd), resp_size);
|
||||
ib_uverbs_init_udata(&uhw, buf + sizeof(cmd),
|
||||
u64_to_user_ptr(cmd.response) + resp_size,
|
||||
in_len - sizeof(cmd) - sizeof(struct ib_uverbs_cmd_hdr),
|
||||
out_len - resp_size);
|
||||
|
||||
@@ -1750,8 +1740,8 @@ ssize_t ib_uverbs_open_qp(struct ib_uverbs_file *file,
|
||||
if (copy_from_user(&cmd, buf, sizeof cmd))
|
||||
return -EFAULT;
|
||||
|
||||
INIT_UDATA(&udata, buf + sizeof(cmd),
|
||||
(unsigned long) cmd.response + sizeof(resp),
|
||||
ib_uverbs_init_udata(&udata, buf + sizeof(cmd),
|
||||
u64_to_user_ptr(cmd.response) + sizeof(resp),
|
||||
in_len - sizeof(cmd) - sizeof(struct ib_uverbs_cmd_hdr),
|
||||
out_len - sizeof(resp));
|
||||
|
||||
@@ -1795,8 +1785,7 @@ ssize_t ib_uverbs_open_qp(struct ib_uverbs_file *file,
|
||||
resp.qpn = qp->qp_num;
|
||||
resp.qp_handle = obj->uevent.uobject.id;
|
||||
|
||||
if (copy_to_user((void __user *) (unsigned long) cmd.response,
|
||||
&resp, sizeof resp)) {
|
||||
if (copy_to_user(u64_to_user_ptr(cmd.response), &resp, sizeof resp)) {
|
||||
ret = -EFAULT;
|
||||
goto err_destroy;
|
||||
}
|
||||
@@ -1911,8 +1900,7 @@ ssize_t ib_uverbs_query_qp(struct ib_uverbs_file *file,
|
||||
resp.max_inline_data = init_attr->cap.max_inline_data;
|
||||
resp.sq_sig_all = init_attr->sq_sig_type == IB_SIGNAL_ALL_WR;
|
||||
|
||||
if (copy_to_user((void __user *) (unsigned long) cmd.response,
|
||||
&resp, sizeof resp))
|
||||
if (copy_to_user(u64_to_user_ptr(cmd.response), &resp, sizeof resp))
|
||||
ret = -EFAULT;
|
||||
|
||||
out:
|
||||
@@ -2042,7 +2030,7 @@ ssize_t ib_uverbs_modify_qp(struct ib_uverbs_file *file,
|
||||
~((IB_USER_LEGACY_LAST_QP_ATTR_MASK << 1) - 1))
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
INIT_UDATA(&udata, buf + sizeof(cmd.base), NULL,
|
||||
ib_uverbs_init_udata(&udata, buf + sizeof(cmd.base), NULL,
|
||||
in_len - sizeof(cmd.base) - sizeof(struct ib_uverbs_cmd_hdr),
|
||||
out_len);
|
||||
|
||||
@@ -2126,8 +2114,7 @@ ssize_t ib_uverbs_destroy_qp(struct ib_uverbs_file *file,
|
||||
resp.events_reported = obj->uevent.events_reported;
|
||||
uverbs_uobject_put(uobj);
|
||||
|
||||
if (copy_to_user((void __user *) (unsigned long) cmd.response,
|
||||
&resp, sizeof resp))
|
||||
if (copy_to_user(u64_to_user_ptr(cmd.response), &resp, sizeof resp))
|
||||
return -EFAULT;
|
||||
|
||||
return in_len;
|
||||
@@ -2311,8 +2298,7 @@ ssize_t ib_uverbs_post_send(struct ib_uverbs_file *file,
|
||||
break;
|
||||
}
|
||||
|
||||
if (copy_to_user((void __user *) (unsigned long) cmd.response,
|
||||
&resp, sizeof resp))
|
||||
if (copy_to_user(u64_to_user_ptr(cmd.response), &resp, sizeof resp))
|
||||
ret = -EFAULT;
|
||||
|
||||
out_put:
|
||||
@@ -2460,8 +2446,7 @@ ssize_t ib_uverbs_post_recv(struct ib_uverbs_file *file,
|
||||
}
|
||||
}
|
||||
|
||||
if (copy_to_user((void __user *) (unsigned long) cmd.response,
|
||||
&resp, sizeof resp))
|
||||
if (copy_to_user(u64_to_user_ptr(cmd.response), &resp, sizeof resp))
|
||||
ret = -EFAULT;
|
||||
|
||||
out:
|
||||
@@ -2510,8 +2495,7 @@ ssize_t ib_uverbs_post_srq_recv(struct ib_uverbs_file *file,
|
||||
break;
|
||||
}
|
||||
|
||||
if (copy_to_user((void __user *) (unsigned long) cmd.response,
|
||||
&resp, sizeof resp))
|
||||
if (copy_to_user(u64_to_user_ptr(cmd.response), &resp, sizeof resp))
|
||||
ret = -EFAULT;
|
||||
|
||||
out:
|
||||
@@ -2547,8 +2531,8 @@ ssize_t ib_uverbs_create_ah(struct ib_uverbs_file *file,
|
||||
if (!rdma_is_port_valid(ib_dev, cmd.attr.port_num))
|
||||
return -EINVAL;
|
||||
|
||||
INIT_UDATA(&udata, buf + sizeof(cmd),
|
||||
(unsigned long)cmd.response + sizeof(resp),
|
||||
ib_uverbs_init_udata(&udata, buf + sizeof(cmd),
|
||||
u64_to_user_ptr(cmd.response) + sizeof(resp),
|
||||
in_len - sizeof(cmd) - sizeof(struct ib_uverbs_cmd_hdr),
|
||||
out_len - sizeof(resp));
|
||||
|
||||
@@ -2592,8 +2576,7 @@ ssize_t ib_uverbs_create_ah(struct ib_uverbs_file *file,
|
||||
|
||||
resp.ah_handle = uobj->id;
|
||||
|
||||
if (copy_to_user((void __user *) (unsigned long) cmd.response,
|
||||
&resp, sizeof resp)) {
|
||||
if (copy_to_user(u64_to_user_ptr(cmd.response), &resp, sizeof resp)) {
|
||||
ret = -EFAULT;
|
||||
goto err_copy;
|
||||
}
|
||||
@@ -3619,8 +3602,8 @@ ssize_t ib_uverbs_create_srq(struct ib_uverbs_file *file,
|
||||
xcmd.max_sge = cmd.max_sge;
|
||||
xcmd.srq_limit = cmd.srq_limit;
|
||||
|
||||
INIT_UDATA(&udata, buf + sizeof(cmd),
|
||||
(unsigned long) cmd.response + sizeof(resp),
|
||||
ib_uverbs_init_udata(&udata, buf + sizeof(cmd),
|
||||
u64_to_user_ptr(cmd.response) + sizeof(resp),
|
||||
in_len - sizeof(cmd) - sizeof(struct ib_uverbs_cmd_hdr),
|
||||
out_len - sizeof(resp));
|
||||
|
||||
@@ -3646,8 +3629,8 @@ ssize_t ib_uverbs_create_xsrq(struct ib_uverbs_file *file,
|
||||
if (copy_from_user(&cmd, buf, sizeof cmd))
|
||||
return -EFAULT;
|
||||
|
||||
INIT_UDATA(&udata, buf + sizeof(cmd),
|
||||
(unsigned long) cmd.response + sizeof(resp),
|
||||
ib_uverbs_init_udata(&udata, buf + sizeof(cmd),
|
||||
u64_to_user_ptr(cmd.response) + sizeof(resp),
|
||||
in_len - sizeof(cmd) - sizeof(struct ib_uverbs_cmd_hdr),
|
||||
out_len - sizeof(resp));
|
||||
|
||||
@@ -3672,7 +3655,7 @@ ssize_t ib_uverbs_modify_srq(struct ib_uverbs_file *file,
|
||||
if (copy_from_user(&cmd, buf, sizeof cmd))
|
||||
return -EFAULT;
|
||||
|
||||
INIT_UDATA(&udata, buf + sizeof cmd, NULL, in_len - sizeof cmd,
|
||||
ib_uverbs_init_udata(&udata, buf + sizeof cmd, NULL, in_len - sizeof cmd,
|
||||
out_len);
|
||||
|
||||
srq = uobj_get_obj_read(srq, cmd.srq_handle, file->ucontext);
|
||||
@@ -3723,8 +3706,7 @@ ssize_t ib_uverbs_query_srq(struct ib_uverbs_file *file,
|
||||
resp.max_sge = attr.max_sge;
|
||||
resp.srq_limit = attr.srq_limit;
|
||||
|
||||
if (copy_to_user((void __user *) (unsigned long) cmd.response,
|
||||
&resp, sizeof resp))
|
||||
if (copy_to_user(u64_to_user_ptr(cmd.response), &resp, sizeof resp))
|
||||
return -EFAULT;
|
||||
|
||||
return in_len;
|
||||
@@ -3765,8 +3747,7 @@ ssize_t ib_uverbs_destroy_srq(struct ib_uverbs_file *file,
|
||||
}
|
||||
resp.events_reported = obj->events_reported;
|
||||
uverbs_uobject_put(uobj);
|
||||
if (copy_to_user((void __user *)(unsigned long)cmd.response,
|
||||
&resp, sizeof(resp)))
|
||||
if (copy_to_user(u64_to_user_ptr(cmd.response), &resp, sizeof(resp)))
|
||||
return -EFAULT;
|
||||
|
||||
return in_len;
|
||||
|
||||
@@ -241,9 +241,7 @@ static long ib_uverbs_cmd_verbs(struct ib_device *ib_dev,
|
||||
struct uverbs_attr *curr_attr;
|
||||
unsigned long *curr_bitmap;
|
||||
size_t ctx_size;
|
||||
#ifdef UVERBS_OPTIMIZE_USING_STACK_SZ
|
||||
uintptr_t data[UVERBS_OPTIMIZE_USING_STACK_SZ / sizeof(uintptr_t)];
|
||||
#endif
|
||||
|
||||
if (hdr->reserved)
|
||||
return -EINVAL;
|
||||
@@ -269,13 +267,10 @@ static long ib_uverbs_cmd_verbs(struct ib_device *ib_dev,
|
||||
(method_spec->num_child_attrs / BITS_PER_LONG +
|
||||
method_spec->num_buckets);
|
||||
|
||||
#ifdef UVERBS_OPTIMIZE_USING_STACK_SZ
|
||||
if (ctx_size <= UVERBS_OPTIMIZE_USING_STACK_SZ)
|
||||
ctx = (void *)data;
|
||||
|
||||
if (!ctx)
|
||||
#endif
|
||||
ctx = kmalloc(ctx_size, GFP_KERNEL);
|
||||
ctx = kmalloc(ctx_size, GFP_KERNEL);
|
||||
if (!ctx)
|
||||
return -ENOMEM;
|
||||
|
||||
@@ -311,10 +306,8 @@ static long ib_uverbs_cmd_verbs(struct ib_device *ib_dev,
|
||||
err = uverbs_handle_method(buf, ctx->uattrs, hdr->num_attrs, ib_dev,
|
||||
file, method_spec, ctx->uverbs_attr_bundle);
|
||||
out:
|
||||
#ifdef UVERBS_OPTIMIZE_USING_STACK_SZ
|
||||
if (ctx_size > UVERBS_OPTIMIZE_USING_STACK_SZ)
|
||||
#endif
|
||||
kfree(ctx);
|
||||
if (ctx != (void *)data)
|
||||
kfree(ctx);
|
||||
return err;
|
||||
}
|
||||
|
||||
|
||||
@@ -376,7 +376,7 @@ static struct uverbs_method_spec *build_method_with_attrs(const struct uverbs_me
|
||||
min_id) ||
|
||||
WARN(attr_obj_with_special_access &&
|
||||
!(attr->flags & UVERBS_ATTR_SPEC_F_MANDATORY),
|
||||
"ib_uverbs: Tried to merge attr (%d) but it's an object with new/destroy aceess but isn't mandatory\n",
|
||||
"ib_uverbs: Tried to merge attr (%d) but it's an object with new/destroy access but isn't mandatory\n",
|
||||
min_id) ||
|
||||
WARN(IS_ATTR_OBJECT(attr) &&
|
||||
attr->flags & UVERBS_ATTR_SPEC_F_MIN_SZ,
|
||||
|
||||
@@ -763,7 +763,7 @@ static ssize_t ib_uverbs_write(struct file *filp, const char __user *buf,
|
||||
}
|
||||
|
||||
if (!access_ok(VERIFY_WRITE,
|
||||
(void __user *) (unsigned long) ex_hdr.response,
|
||||
u64_to_user_ptr(ex_hdr.response),
|
||||
(hdr.out_words + ex_hdr.provider_out_words) * 8)) {
|
||||
ret = -EFAULT;
|
||||
goto out;
|
||||
@@ -775,19 +775,17 @@ static ssize_t ib_uverbs_write(struct file *filp, const char __user *buf,
|
||||
}
|
||||
}
|
||||
|
||||
INIT_UDATA_BUF_OR_NULL(&ucore, buf, (unsigned long) ex_hdr.response,
|
||||
hdr.in_words * 8, hdr.out_words * 8);
|
||||
ib_uverbs_init_udata_buf_or_null(&ucore, buf,
|
||||
u64_to_user_ptr(ex_hdr.response),
|
||||
hdr.in_words * 8, hdr.out_words * 8);
|
||||
|
||||
INIT_UDATA_BUF_OR_NULL(&uhw,
|
||||
buf + ucore.inlen,
|
||||
(unsigned long) ex_hdr.response + ucore.outlen,
|
||||
ex_hdr.provider_in_words * 8,
|
||||
ex_hdr.provider_out_words * 8);
|
||||
ib_uverbs_init_udata_buf_or_null(&uhw,
|
||||
buf + ucore.inlen,
|
||||
u64_to_user_ptr(ex_hdr.response) + ucore.outlen,
|
||||
ex_hdr.provider_in_words * 8,
|
||||
ex_hdr.provider_out_words * 8);
|
||||
|
||||
ret = uverbs_ex_cmd_table[command](file,
|
||||
ib_dev,
|
||||
&ucore,
|
||||
&uhw);
|
||||
ret = uverbs_ex_cmd_table[command](file, ib_dev, &ucore, &uhw);
|
||||
if (!ret)
|
||||
ret = written_count;
|
||||
} else {
|
||||
|
||||
@@ -176,18 +176,18 @@ EXPORT_SYMBOL(ib_copy_path_rec_to_user);
|
||||
void ib_copy_path_rec_from_user(struct sa_path_rec *dst,
|
||||
struct ib_user_path_rec *src)
|
||||
{
|
||||
__be32 slid, dlid;
|
||||
u32 slid, dlid;
|
||||
|
||||
memset(dst, 0, sizeof(*dst));
|
||||
if ((ib_is_opa_gid((union ib_gid *)src->sgid)) ||
|
||||
(ib_is_opa_gid((union ib_gid *)src->dgid))) {
|
||||
dst->rec_type = SA_PATH_REC_TYPE_OPA;
|
||||
slid = htonl(opa_get_lid_from_gid((union ib_gid *)src->sgid));
|
||||
dlid = htonl(opa_get_lid_from_gid((union ib_gid *)src->dgid));
|
||||
slid = opa_get_lid_from_gid((union ib_gid *)src->sgid);
|
||||
dlid = opa_get_lid_from_gid((union ib_gid *)src->dgid);
|
||||
} else {
|
||||
dst->rec_type = SA_PATH_REC_TYPE_IB;
|
||||
slid = htonl(ntohs(src->slid));
|
||||
dlid = htonl(ntohs(src->dlid));
|
||||
slid = ntohs(src->slid);
|
||||
dlid = ntohs(src->dlid);
|
||||
}
|
||||
memcpy(dst->dgid.raw, src->dgid, sizeof dst->dgid);
|
||||
memcpy(dst->sgid.raw, src->sgid, sizeof dst->sgid);
|
||||
|
||||
@@ -246,7 +246,8 @@ static void create_udata(struct uverbs_attr_bundle *ctx,
|
||||
outbuf_len = uhw_out->ptr_attr.len;
|
||||
}
|
||||
|
||||
INIT_UDATA_BUF_OR_NULL(udata, inbuf, outbuf, inbuf_len, outbuf_len);
|
||||
ib_uverbs_init_udata_buf_or_null(udata, inbuf, outbuf, inbuf_len,
|
||||
outbuf_len);
|
||||
}
|
||||
|
||||
static int uverbs_create_cq_handler(struct ib_device *ib_dev,
|
||||
|
||||
@@ -1635,7 +1635,7 @@ static int bnxt_re_build_qp1_send_v2(struct bnxt_re_qp *qp,
|
||||
u8 ip_version = 0;
|
||||
u16 vlan_id = 0xFFFF;
|
||||
void *buf;
|
||||
int i, rc = 0, size;
|
||||
int i, rc = 0;
|
||||
|
||||
memset(&qp->qp1_hdr, 0, sizeof(qp->qp1_hdr));
|
||||
|
||||
@@ -1752,7 +1752,7 @@ static int bnxt_re_build_qp1_send_v2(struct bnxt_re_qp *qp,
|
||||
/* Pack the QP1 to the transmit buffer */
|
||||
buf = bnxt_qplib_get_qp1_sq_buf(&qp->qplib_qp, &sge);
|
||||
if (buf) {
|
||||
size = ib_ud_header_pack(&qp->qp1_hdr, buf);
|
||||
ib_ud_header_pack(&qp->qp1_hdr, buf);
|
||||
for (i = wqe->num_sge; i; i--) {
|
||||
wqe->sg_list[i].addr = wqe->sg_list[i - 1].addr;
|
||||
wqe->sg_list[i].lkey = wqe->sg_list[i - 1].lkey;
|
||||
@@ -2208,7 +2208,7 @@ static int bnxt_re_post_recv_shadow_qp(struct bnxt_re_dev *rdev,
|
||||
struct ib_recv_wr *wr)
|
||||
{
|
||||
struct bnxt_qplib_swqe wqe;
|
||||
int rc = 0, payload_sz = 0;
|
||||
int rc = 0;
|
||||
|
||||
memset(&wqe, 0, sizeof(wqe));
|
||||
while (wr) {
|
||||
@@ -2223,8 +2223,7 @@ static int bnxt_re_post_recv_shadow_qp(struct bnxt_re_dev *rdev,
|
||||
rc = -EINVAL;
|
||||
break;
|
||||
}
|
||||
payload_sz = bnxt_re_build_sgl(wr->sg_list, wqe.sg_list,
|
||||
wr->num_sge);
|
||||
bnxt_re_build_sgl(wr->sg_list, wqe.sg_list, wr->num_sge);
|
||||
wqe.wr_id = wr->wr_id;
|
||||
wqe.type = BNXT_QPLIB_SWQE_TYPE_RECV;
|
||||
|
||||
@@ -2561,7 +2560,7 @@ static void bnxt_re_process_req_wc(struct ib_wc *wc, struct bnxt_qplib_cqe *cqe)
|
||||
static int bnxt_re_check_packet_type(u16 raweth_qp1_flags,
|
||||
u16 raweth_qp1_flags2)
|
||||
{
|
||||
bool is_udp = false, is_ipv6 = false, is_ipv4 = false;
|
||||
bool is_ipv6 = false, is_ipv4 = false;
|
||||
|
||||
/* raweth_qp1_flags Bit 9-6 indicates itype */
|
||||
if ((raweth_qp1_flags & CQ_RES_RAWETH_QP1_RAWETH_QP1_FLAGS_ITYPE_ROCE)
|
||||
@@ -2572,7 +2571,6 @@ static int bnxt_re_check_packet_type(u16 raweth_qp1_flags,
|
||||
CQ_RES_RAWETH_QP1_RAWETH_QP1_FLAGS2_IP_CS_CALC &&
|
||||
raweth_qp1_flags2 &
|
||||
CQ_RES_RAWETH_QP1_RAWETH_QP1_FLAGS2_L4_CS_CALC) {
|
||||
is_udp = true;
|
||||
/* raweth_qp1_flags2 Bit 8 indicates ip_type. 0-v4 1 - v6 */
|
||||
(raweth_qp1_flags2 &
|
||||
CQ_RES_RAWETH_QP1_RAWETH_QP1_FLAGS2_IP_TYPE) ?
|
||||
|
||||
@@ -1071,9 +1071,10 @@ static int bnxt_re_ib_reg(struct bnxt_re_dev *rdev)
|
||||
*/
|
||||
rc = bnxt_qplib_alloc_rcfw_channel(rdev->en_dev->pdev, &rdev->rcfw,
|
||||
BNXT_RE_MAX_QPC_COUNT);
|
||||
if (rc)
|
||||
if (rc) {
|
||||
pr_err("Failed to allocate RCFW Channel: %#x\n", rc);
|
||||
goto fail;
|
||||
|
||||
}
|
||||
rc = bnxt_re_net_ring_alloc
|
||||
(rdev, rdev->rcfw.creq.pbl[PBL_LVL_0].pg_map_arr,
|
||||
rdev->rcfw.creq.pbl[rdev->rcfw.creq.level].pg_count,
|
||||
|
||||
@@ -160,11 +160,6 @@ void bnxt_qplib_add_flush_qp(struct bnxt_qplib_qp *qp)
|
||||
|
||||
static void __bnxt_qplib_del_flush_qp(struct bnxt_qplib_qp *qp)
|
||||
{
|
||||
struct bnxt_qplib_cq *scq, *rcq;
|
||||
|
||||
scq = qp->scq;
|
||||
rcq = qp->rcq;
|
||||
|
||||
if (qp->sq.flushed) {
|
||||
qp->sq.flushed = false;
|
||||
list_del(&qp->sq_flush);
|
||||
@@ -1360,7 +1355,7 @@ int bnxt_qplib_post_send(struct bnxt_qplib_qp *qp,
|
||||
|
||||
break;
|
||||
}
|
||||
/* else, just fall thru */
|
||||
/* fall thru */
|
||||
case BNXT_QPLIB_SWQE_TYPE_SEND_WITH_IMM:
|
||||
case BNXT_QPLIB_SWQE_TYPE_SEND_WITH_INV:
|
||||
{
|
||||
|
||||
@@ -88,7 +88,6 @@ static int __send_message(struct bnxt_qplib_rcfw *rcfw, struct cmdq_base *req,
|
||||
unsigned long flags;
|
||||
u32 size, opcode;
|
||||
u16 cookie, cbit;
|
||||
int pg, idx;
|
||||
u8 *preq;
|
||||
|
||||
opcode = req->opcode;
|
||||
@@ -149,9 +148,6 @@ static int __send_message(struct bnxt_qplib_rcfw *rcfw, struct cmdq_base *req,
|
||||
preq = (u8 *)req;
|
||||
size = req->cmd_size * BNXT_QPLIB_CMDQE_UNITS;
|
||||
do {
|
||||
pg = 0;
|
||||
idx = 0;
|
||||
|
||||
/* Locate the next cmdq slot */
|
||||
sw_prod = HWQ_CMP(cmdq->prod, cmdq);
|
||||
cmdqe = &cmdq_ptr[get_cmdq_pg(sw_prod)][get_cmdq_idx(sw_prod)];
|
||||
@@ -172,14 +168,14 @@ static int __send_message(struct bnxt_qplib_rcfw *rcfw, struct cmdq_base *req,
|
||||
rcfw->seq_num++;
|
||||
|
||||
cmdq_prod = cmdq->prod;
|
||||
if (rcfw->flags & FIRMWARE_FIRST_FLAG) {
|
||||
if (test_bit(FIRMWARE_FIRST_FLAG, &rcfw->flags)) {
|
||||
/* The very first doorbell write
|
||||
* is required to set this flag
|
||||
* which prompts the FW to reset
|
||||
* its internal pointers
|
||||
*/
|
||||
cmdq_prod |= FIRMWARE_FIRST_FLAG;
|
||||
rcfw->flags &= ~FIRMWARE_FIRST_FLAG;
|
||||
cmdq_prod |= BIT(FIRMWARE_FIRST_FLAG);
|
||||
clear_bit(FIRMWARE_FIRST_FLAG, &rcfw->flags);
|
||||
}
|
||||
|
||||
/* ring CMDQ DB */
|
||||
@@ -622,7 +618,7 @@ int bnxt_qplib_enable_rcfw_channel(struct pci_dev *pdev,
|
||||
|
||||
/* General */
|
||||
rcfw->seq_num = 0;
|
||||
rcfw->flags = FIRMWARE_FIRST_FLAG;
|
||||
set_bit(FIRMWARE_FIRST_FLAG, &rcfw->flags);
|
||||
bmap_size = BITS_TO_LONGS(RCFW_MAX_OUTSTANDING_CMD *
|
||||
sizeof(unsigned long));
|
||||
rcfw->cmdq_bitmap = kzalloc(bmap_size, GFP_KERNEL);
|
||||
|
||||
@@ -162,9 +162,9 @@ struct bnxt_qplib_rcfw {
|
||||
unsigned long *cmdq_bitmap;
|
||||
u32 bmap_size;
|
||||
unsigned long flags;
|
||||
#define FIRMWARE_INITIALIZED_FLAG BIT(0)
|
||||
#define FIRMWARE_FIRST_FLAG BIT(31)
|
||||
#define FIRMWARE_TIMED_OUT BIT(3)
|
||||
#define FIRMWARE_INITIALIZED_FLAG 0
|
||||
#define FIRMWARE_FIRST_FLAG 31
|
||||
#define FIRMWARE_TIMED_OUT 3
|
||||
wait_queue_head_t waitq;
|
||||
int (*aeq_handler)(struct bnxt_qplib_rcfw *,
|
||||
struct creq_func_event *);
|
||||
|
||||
@@ -169,7 +169,7 @@ struct bnxt_qplib_ctx {
|
||||
u32 cq_count;
|
||||
struct bnxt_qplib_hwq cq_tbl;
|
||||
struct bnxt_qplib_hwq tim_tbl;
|
||||
#define MAX_TQM_ALLOC_REQ 32
|
||||
#define MAX_TQM_ALLOC_REQ 48
|
||||
#define MAX_TQM_ALLOC_BLK_SIZE 8
|
||||
u8 tqm_count[MAX_TQM_ALLOC_REQ];
|
||||
struct bnxt_qplib_hwq tqm_pde;
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user