mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-10 23:29:46 +00:00
Round three of 4.7 rc fixes
- Two fixes for hfi1 - Two fixes for i40iw - On ommission correction in the port table counter arrays -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQIcBAABAgAGBQJXh5bUAAoJELgmozMOVy/d9AYP/2/qNR4skRczRbSFeuLy4ypa fJt/UQqAokwIQiImSbUOJFygshjL9KRRLfEoe9h8XOUMPr+H8RhLEYyx57DCTZSx E3Yhyf3VYZNxG8iqieTCLHIaCo8sm0JtFlNqn4jrzWBOdVqn7BL0pvpqYw/i6P2B eEh3iag031uHy1qM6dkYsP1y19Kc2lIuufi4o1tm2ecIrBoZUn8P7bJT2I8Cjv6L kesnDKdPEGqRe9Tr1+vu9n5TCKOPJDvNNOZONbssyBbLOGxJcEeV8uVTdr5TYcCT 4IIjLM/l2/nlWstMq1XJ70Yt5Ov/r34T/q/aqUKPhtinaVQkP11X0nvfjY/tLA/B 3T2FapJX13OtqV/QamcpGABroK5AvUCBdEB8Ufn4ZTT1mQ6X5LAMhFs6/OKOGMYM MlwYF7XXezJATbuqIXKxXbSmTQ4e5s3mmtxJMUt0pD0Tg5eOfcmg8awvGqHEEWgv rrM5xbnEfxSXkoBQYxdwa65y2u78Ke59QuU0J/Y1FA3A+gWlapawK6uGlpyQunPs vexUs4T7Onl7gGjvVOcMKJlSG0NBxy8m/ObOBpiPVG1eu6BduvE6VHL3WGfvD2yW 1l07aYpAuBOiHv2me1uEoUT+78egI3tJ3U6ABjO3PgKVyYdu8mdyHkI1p8Z4aaPZ EPxBpp07ItzzO3tgqHVx =UaLC -----END PGP SIGNATURE----- Merge tag 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dledford/rdma Pull rdma fixes from Doug Ledford: "Round three of 4.7 rc fixes: - two fixes for hfi1 - two fixes for i40iw - one omission correction in the port table counter arrays" * tag 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dledford/rdma: i40iw: Enable remote access rights for stag allocation i40iw: do not print unitialized variables in error message IB core: Add port_xmit_wait counter IB/hfi1: Fix sleep inside atomic issue in init_asic_data IB/hfi1: Correct issues with sc5 computation
This commit is contained in:
commit
0a9cb4815b
@ -530,6 +530,7 @@ static PORT_PMA_ATTR(port_xmit_data , 12, 32, 192);
|
||||
static PORT_PMA_ATTR(port_rcv_data , 13, 32, 224);
|
||||
static PORT_PMA_ATTR(port_xmit_packets , 14, 32, 256);
|
||||
static PORT_PMA_ATTR(port_rcv_packets , 15, 32, 288);
|
||||
static PORT_PMA_ATTR(port_xmit_wait , 0, 32, 320);
|
||||
|
||||
/*
|
||||
* Counters added by extended set
|
||||
@ -560,6 +561,7 @@ static struct attribute *pma_attrs[] = {
|
||||
&port_pma_attr_port_rcv_data.attr.attr,
|
||||
&port_pma_attr_port_xmit_packets.attr.attr,
|
||||
&port_pma_attr_port_rcv_packets.attr.attr,
|
||||
&port_pma_attr_port_xmit_wait.attr.attr,
|
||||
NULL
|
||||
};
|
||||
|
||||
@ -579,6 +581,7 @@ static struct attribute *pma_attrs_ext[] = {
|
||||
&port_pma_attr_ext_port_xmit_data.attr.attr,
|
||||
&port_pma_attr_ext_port_rcv_data.attr.attr,
|
||||
&port_pma_attr_ext_port_xmit_packets.attr.attr,
|
||||
&port_pma_attr_port_xmit_wait.attr.attr,
|
||||
&port_pma_attr_ext_port_rcv_packets.attr.attr,
|
||||
&port_pma_attr_ext_unicast_rcv_packets.attr.attr,
|
||||
&port_pma_attr_ext_unicast_xmit_packets.attr.attr,
|
||||
@ -604,6 +607,7 @@ static struct attribute *pma_attrs_noietf[] = {
|
||||
&port_pma_attr_ext_port_rcv_data.attr.attr,
|
||||
&port_pma_attr_ext_port_xmit_packets.attr.attr,
|
||||
&port_pma_attr_ext_port_rcv_packets.attr.attr,
|
||||
&port_pma_attr_port_xmit_wait.attr.attr,
|
||||
NULL
|
||||
};
|
||||
|
||||
|
@ -14113,8 +14113,14 @@ static int init_asic_data(struct hfi1_devdata *dd)
|
||||
{
|
||||
unsigned long flags;
|
||||
struct hfi1_devdata *tmp, *peer = NULL;
|
||||
struct hfi1_asic_data *asic_data;
|
||||
int ret = 0;
|
||||
|
||||
/* pre-allocate the asic structure in case we are the first device */
|
||||
asic_data = kzalloc(sizeof(*dd->asic_data), GFP_KERNEL);
|
||||
if (!asic_data)
|
||||
return -ENOMEM;
|
||||
|
||||
spin_lock_irqsave(&hfi1_devs_lock, flags);
|
||||
/* Find our peer device */
|
||||
list_for_each_entry(tmp, &hfi1_dev_list, list) {
|
||||
@ -14126,18 +14132,14 @@ static int init_asic_data(struct hfi1_devdata *dd)
|
||||
}
|
||||
|
||||
if (peer) {
|
||||
/* use already allocated structure */
|
||||
dd->asic_data = peer->asic_data;
|
||||
kfree(asic_data);
|
||||
} else {
|
||||
dd->asic_data = kzalloc(sizeof(*dd->asic_data), GFP_KERNEL);
|
||||
if (!dd->asic_data) {
|
||||
ret = -ENOMEM;
|
||||
goto done;
|
||||
}
|
||||
dd->asic_data = asic_data;
|
||||
mutex_init(&dd->asic_data->asic_resource_mutex);
|
||||
}
|
||||
dd->asic_data->dds[dd->hfi1_id] = dd; /* self back-pointer */
|
||||
|
||||
done:
|
||||
spin_unlock_irqrestore(&hfi1_devs_lock, flags);
|
||||
return ret;
|
||||
}
|
||||
|
@ -678,8 +678,7 @@ void hfi1_ud_rcv(struct hfi1_packet *packet)
|
||||
u32 tlen = packet->tlen;
|
||||
struct rvt_qp *qp = packet->qp;
|
||||
bool has_grh = rcv_flags & HFI1_HAS_GRH;
|
||||
bool sc4_bit = has_sc4_bit(packet);
|
||||
u8 sc;
|
||||
u8 sc5 = hdr2sc((struct hfi1_message_header *)hdr, packet->rhf);
|
||||
u32 bth1;
|
||||
int is_mcast;
|
||||
struct ib_grh *grh = NULL;
|
||||
@ -697,10 +696,8 @@ void hfi1_ud_rcv(struct hfi1_packet *packet)
|
||||
*/
|
||||
struct hfi1_pportdata *ppd = ppd_from_ibp(ibp);
|
||||
u32 lqpn = be32_to_cpu(ohdr->bth[1]) & RVT_QPN_MASK;
|
||||
u8 sl, sc5;
|
||||
u8 sl;
|
||||
|
||||
sc5 = (be16_to_cpu(hdr->lrh[0]) >> 12) & 0xf;
|
||||
sc5 |= sc4_bit;
|
||||
sl = ibp->sc_to_sl[sc5];
|
||||
|
||||
process_becn(ppd, sl, 0, lqpn, 0, IB_CC_SVCTYPE_UD);
|
||||
@ -717,10 +714,6 @@ void hfi1_ud_rcv(struct hfi1_packet *packet)
|
||||
|
||||
if (!is_mcast && (opcode != IB_OPCODE_CNP) && bth1 & HFI1_FECN_SMASK) {
|
||||
u16 slid = be16_to_cpu(hdr->lrh[3]);
|
||||
u8 sc5;
|
||||
|
||||
sc5 = (be16_to_cpu(hdr->lrh[0]) >> 12) & 0xf;
|
||||
sc5 |= sc4_bit;
|
||||
|
||||
return_cnp(ibp, qp, src_qp, pkey, dlid, slid, sc5, grh);
|
||||
}
|
||||
@ -745,10 +738,6 @@ void hfi1_ud_rcv(struct hfi1_packet *packet)
|
||||
if (qp->ibqp.qp_num > 1) {
|
||||
struct hfi1_pportdata *ppd = ppd_from_ibp(ibp);
|
||||
u16 slid;
|
||||
u8 sc5;
|
||||
|
||||
sc5 = (be16_to_cpu(hdr->lrh[0]) >> 12) & 0xf;
|
||||
sc5 |= sc4_bit;
|
||||
|
||||
slid = be16_to_cpu(hdr->lrh[3]);
|
||||
if (unlikely(rcv_pkey_check(ppd, pkey, sc5, slid))) {
|
||||
@ -790,10 +779,6 @@ void hfi1_ud_rcv(struct hfi1_packet *packet)
|
||||
/* Received on QP0, and so by definition, this is an SMP */
|
||||
struct opa_smp *smp = (struct opa_smp *)data;
|
||||
u16 slid = be16_to_cpu(hdr->lrh[3]);
|
||||
u8 sc5;
|
||||
|
||||
sc5 = (be16_to_cpu(hdr->lrh[0]) >> 12) & 0xf;
|
||||
sc5 |= sc4_bit;
|
||||
|
||||
if (opa_smp_check(ibp, pkey, sc5, qp, slid, smp))
|
||||
goto drop;
|
||||
@ -890,9 +875,7 @@ void hfi1_ud_rcv(struct hfi1_packet *packet)
|
||||
}
|
||||
|
||||
wc.slid = be16_to_cpu(hdr->lrh[3]);
|
||||
sc = (be16_to_cpu(hdr->lrh[0]) >> 12) & 0xf;
|
||||
sc |= sc4_bit;
|
||||
wc.sl = ibp->sc_to_sl[sc];
|
||||
wc.sl = ibp->sc_to_sl[sc5];
|
||||
|
||||
/*
|
||||
* Save the LMC lower bits if the destination LID is a unicast LID.
|
||||
|
@ -600,8 +600,7 @@ static enum i40iw_status_code i40iw_create_cqp(struct i40iw_device *iwdev)
|
||||
cqp_init_info.scratch_array = cqp->scratch_array;
|
||||
status = dev->cqp_ops->cqp_init(dev->cqp, &cqp_init_info);
|
||||
if (status) {
|
||||
i40iw_pr_err("cqp init status %d maj_err %d min_err %d\n",
|
||||
status, maj_err, min_err);
|
||||
i40iw_pr_err("cqp init status %d\n", status);
|
||||
goto exit;
|
||||
}
|
||||
status = dev->cqp_ops->cqp_create(dev->cqp, true, &maj_err, &min_err);
|
||||
|
@ -1474,6 +1474,7 @@ static int i40iw_hw_alloc_stag(struct i40iw_device *iwdev, struct i40iw_mr *iwmr
|
||||
info->stag_idx = iwmr->stag >> I40IW_CQPSQ_STAG_IDX_SHIFT;
|
||||
info->pd_id = iwpd->sc_pd.pd_id;
|
||||
info->total_len = iwmr->length;
|
||||
info->remote_access = true;
|
||||
cqp_info->cqp_cmd = OP_ALLOC_STAG;
|
||||
cqp_info->post_sq = 1;
|
||||
cqp_info->in.u.alloc_stag.dev = &iwdev->sc_dev;
|
||||
|
Loading…
x
Reference in New Issue
Block a user