Re: [PATCH rebase to for-next 2/2] rdma/cxgb4: Add support for kernel mode srqs

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Raju,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on rdma/for-next]
[also build test WARNING on v4.17-rc5 next-20180517]
[cannot apply to linus/master]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]

url:    https://github.com/0day-ci/linux/commits/Raju-Rangoju/rdma-cxgb4-Add-SRQ-support-for-Chelsio-adapters/20180518-075228
base:   https://git.kernel.org/pub/scm/linux/kernel/git/rdma/rdma.git for-next
reproduce:
        # apt-get install sparse
        make ARCH=x86_64 allmodconfig
        make C=1 CF=-D__CHECK_ENDIAN__


sparse warnings: (new ones prefixed by >>)

   drivers/infiniband/hw/cxgb4/iw_cxgb4.h:422:16: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/iw_cxgb4.h:422:16: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/iw_cxgb4.h:422:16: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/iw_cxgb4.h:422:16: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/iw_cxgb4.h:422:16: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/iw_cxgb4.h:422:16: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/cm.c:1752:35: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/iw_cxgb4.h:422:16: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/cm.c:1752:35: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/iw_cxgb4.h:422:16: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/iw_cxgb4.h:422:16: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/iw_cxgb4.h:422:16: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/iw_cxgb4.h:422:16: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/iw_cxgb4.h:422:16: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/cm.c:1756:35: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/iw_cxgb4.h:422:16: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/cm.c:1756:35: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/iw_cxgb4.h:422:16: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/iw_cxgb4.h:422:16: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/iw_cxgb4.h:422:16: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/iw_cxgb4.h:422:16: sparse: expression using sizeof(void)
>> drivers/infiniband/hw/cxgb4/cm.c:1863:18: sparse: cast to restricted __be32
>> drivers/infiniband/hw/cxgb4/cm.c:1863:18: sparse: cast to restricted __be32
>> drivers/infiniband/hw/cxgb4/cm.c:1863:18: sparse: cast to restricted __be32
>> drivers/infiniband/hw/cxgb4/cm.c:1863:18: sparse: cast to restricted __be32
>> drivers/infiniband/hw/cxgb4/cm.c:1863:18: sparse: cast to restricted __be32
>> drivers/infiniband/hw/cxgb4/cm.c:1863:18: sparse: cast to restricted __be32
   drivers/infiniband/hw/cxgb4/cm.c:1864:18: sparse: cast to restricted __be32
   drivers/infiniband/hw/cxgb4/cm.c:1864:18: sparse: cast to restricted __be32
   drivers/infiniband/hw/cxgb4/cm.c:1864:18: sparse: cast to restricted __be32
   drivers/infiniband/hw/cxgb4/cm.c:1864:18: sparse: cast to restricted __be32
   drivers/infiniband/hw/cxgb4/cm.c:1864:18: sparse: cast to restricted __be32
   drivers/infiniband/hw/cxgb4/cm.c:1864:18: sparse: cast to restricted __be32
   drivers/infiniband/hw/cxgb4/cm.c:2764:18: sparse: cast to restricted __be32
   drivers/infiniband/hw/cxgb4/cm.c:2764:18: sparse: cast to restricted __be32
   drivers/infiniband/hw/cxgb4/cm.c:2764:18: sparse: cast to restricted __be32
   drivers/infiniband/hw/cxgb4/cm.c:2764:18: sparse: cast to restricted __be32
   drivers/infiniband/hw/cxgb4/cm.c:2764:18: sparse: cast to restricted __be32
   drivers/infiniband/hw/cxgb4/cm.c:2764:18: sparse: cast to restricted __be32
   drivers/infiniband/hw/cxgb4/iw_cxgb4.h:422:16: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/iw_cxgb4.h:422:16: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/iw_cxgb4.h:422:16: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/iw_cxgb4.h:422:16: sparse: expression using sizeof(void)
--
   drivers/infiniband/hw/cxgb4/qp.c:248:35: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/qp.c:248:35: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/qp.c:248:35: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/qp.c:248:35: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/qp.c:248:35: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/qp.c:248:35: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/qp.c:248:35: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/qp.c:248:35: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/qp.c:248:35: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/qp.c:248:35: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/qp.c:248:35: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/qp.c:248:35: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/qp.c:248:35: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/qp.c:248:35: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/qp.c:248:35: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/qp.c:248:35: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/qp.c:248:35: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/qp.c:248:35: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/qp.c:248:35: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/qp.c:248:35: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/qp.c:248:35: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/qp.c:248:35: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/qp.c:248:35: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/qp.c:248:35: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/qp.c:248:35: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/qp.c:248:35: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/qp.c:248:35: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/qp.c:248:35: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/qp.c:248:35: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/qp.c:248:35: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/qp.c:248:35: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/qp.c:248:35: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/qp.c:248:35: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/qp.c:248:35: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/qp.c:248:35: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/qp.c:248:35: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/qp.c:248:35: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/qp.c:248:35: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/qp.c:248:35: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/qp.c:248:35: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/qp.c:248:35: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/qp.c:248:35: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/qp.c:248:35: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/qp.c:248:35: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/qp.c:248:35: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/qp.c:248:35: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/qp.c:248:35: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/qp.c:248:35: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/qp.c:248:35: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/qp.c:248:35: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/qp.c:248:35: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/qp.c:248:35: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/qp.c:248:35: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/qp.c:248:35: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/qp.c:248:35: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/qp.c:248:35: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/qp.c:248:35: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/qp.c:248:35: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/qp.c:248:35: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/qp.c:248:35: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/qp.c:248:35: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/qp.c:248:35: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/qp.c:248:35: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/qp.c:248:35: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/qp.c:248:35: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/qp.c:248:35: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/qp.c:248:35: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/qp.c:248:35: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/qp.c:248:35: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/qp.c:248:35: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/iw_cxgb4.h:422:16: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/iw_cxgb4.h:422:16: sparse: expression using sizeof(void)
>> drivers/infiniband/hw/cxgb4/qp.c:2264:34: sparse: Using plain integer as NULL pointer
   drivers/infiniband/hw/cxgb4/qp.c:2538:18: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/qp.c:2538:18: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/qp.c:2538:18: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/qp.c:2538:18: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/qp.c:2538:18: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/qp.c:2538:18: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/qp.c:2538:18: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/qp.c:2538:18: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/qp.c:2538:18: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/qp.c:2538:18: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/qp.c:2538:18: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/qp.c:2538:18: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/qp.c:2538:18: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/qp.c:2538:18: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/qp.c:2538:18: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/qp.c:2538:18: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/qp.c:2538:18: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/qp.c:2538:18: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/qp.c:2538:18: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/qp.c:2538:18: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/qp.c:2538:18: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/qp.c:2538:18: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/qp.c:2538:18: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/qp.c:2538:18: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/qp.c:2538:18: sparse: expression using sizeof(void)
   drivers/infiniband/hw/cxgb4/qp.c:2538:18: sparse: expression using sizeof(void)
>> drivers/infiniband/hw/cxgb4/qp.c:2538:18: sparse: too many warnings

vim +1863 drivers/infiniband/hw/cxgb4/cm.c

  1651	
  1652	/*
  1653	 * process_mpa_request - process streaming mode MPA request
  1654	 *
  1655	 * Returns:
  1656	 *
  1657	 * 0 upon success indicating a connect request was delivered to the ULP
  1658	 * or the mpa request is incomplete but valid so far.
  1659	 *
  1660	 * 1 if a failure requires the caller to close the connection.
  1661	 *
  1662	 * 2 if a failure requires the caller to abort the connection.
  1663	 */
  1664	static int process_mpa_request(struct c4iw_ep *ep, struct sk_buff *skb)
  1665	{
  1666		struct mpa_message *mpa;
  1667		struct mpa_v2_conn_params *mpa_v2_params;
  1668		u16 plen;
  1669	
  1670		pr_debug("ep %p tid %u\n", ep, ep->hwtid);
  1671	
  1672		/*
  1673		 * If we get more than the supported amount of private data
  1674		 * then we must fail this connection.
  1675		 */
  1676		if (ep->mpa_pkt_len + skb->len > sizeof(ep->mpa_pkt))
  1677			goto err_stop_timer;
  1678	
  1679		pr_debug("enter (%s line %u)\n", __FILE__, __LINE__);
  1680	
  1681		/*
  1682		 * Copy the new data into our accumulation buffer.
  1683		 */
  1684		skb_copy_from_linear_data(skb, &(ep->mpa_pkt[ep->mpa_pkt_len]),
  1685					  skb->len);
  1686		ep->mpa_pkt_len += skb->len;
  1687	
  1688		/*
  1689		 * If we don't even have the mpa message, then bail.
  1690		 * We'll continue process when more data arrives.
  1691		 */
  1692		if (ep->mpa_pkt_len < sizeof(*mpa))
  1693			return 0;
  1694	
  1695		pr_debug("enter (%s line %u)\n", __FILE__, __LINE__);
  1696		mpa = (struct mpa_message *) ep->mpa_pkt;
  1697	
  1698		/*
  1699		 * Validate MPA Header.
  1700		 */
  1701		if (mpa->revision > mpa_rev) {
  1702			pr_err("%s MPA version mismatch. Local = %d, Received = %d\n",
  1703			       __func__, mpa_rev, mpa->revision);
  1704			goto err_stop_timer;
  1705		}
  1706	
  1707		if (memcmp(mpa->key, MPA_KEY_REQ, sizeof(mpa->key)))
  1708			goto err_stop_timer;
  1709	
  1710		plen = ntohs(mpa->private_data_size);
  1711	
  1712		/*
  1713		 * Fail if there's too much private data.
  1714		 */
  1715		if (plen > MPA_MAX_PRIVATE_DATA)
  1716			goto err_stop_timer;
  1717	
  1718		/*
  1719		 * If plen does not account for pkt size
  1720		 */
  1721		if (ep->mpa_pkt_len > (sizeof(*mpa) + plen))
  1722			goto err_stop_timer;
  1723		ep->plen = (u8) plen;
  1724	
  1725		/*
  1726		 * If we don't have all the pdata yet, then bail.
  1727		 */
  1728		if (ep->mpa_pkt_len < (sizeof(*mpa) + plen))
  1729			return 0;
  1730	
  1731		/*
  1732		 * If we get here we have accumulated the entire mpa
  1733		 * start reply message including private data.
  1734		 */
  1735		ep->mpa_attr.initiator = 0;
  1736		ep->mpa_attr.crc_enabled = (mpa->flags & MPA_CRC) | crc_enabled ? 1 : 0;
  1737		ep->mpa_attr.recv_marker_enabled = markers_enabled;
  1738		ep->mpa_attr.xmit_marker_enabled = mpa->flags & MPA_MARKERS ? 1 : 0;
  1739		ep->mpa_attr.version = mpa->revision;
  1740		if (mpa->revision == 1)
  1741			ep->tried_with_mpa_v1 = 1;
  1742		ep->mpa_attr.p2p_type = FW_RI_INIT_P2PTYPE_DISABLED;
  1743	
  1744		if (mpa->revision == 2) {
  1745			ep->mpa_attr.enhanced_rdma_conn =
  1746				mpa->flags & MPA_ENHANCED_RDMA_CONN ? 1 : 0;
  1747			if (ep->mpa_attr.enhanced_rdma_conn) {
  1748				mpa_v2_params = (struct mpa_v2_conn_params *)
  1749					(ep->mpa_pkt + sizeof(*mpa));
  1750				ep->ird = ntohs(mpa_v2_params->ird) &
  1751					MPA_V2_IRD_ORD_MASK;
  1752				ep->ird = min_t(u32, ep->ird,
  1753						cur_max_read_depth(ep->com.dev));
  1754				ep->ord = ntohs(mpa_v2_params->ord) &
  1755					MPA_V2_IRD_ORD_MASK;
> 1756				ep->ord = min_t(u32, ep->ord,
  1757						cur_max_read_depth(ep->com.dev));
  1758				pr_debug("initiator ird %u ord %u\n",
  1759					 ep->ird, ep->ord);
  1760				if (ntohs(mpa_v2_params->ird) & MPA_V2_PEER2PEER_MODEL)
  1761					if (peer2peer) {
  1762						if (ntohs(mpa_v2_params->ord) &
  1763								MPA_V2_RDMA_WRITE_RTR)
  1764							ep->mpa_attr.p2p_type =
  1765							FW_RI_INIT_P2PTYPE_RDMA_WRITE;
  1766						else if (ntohs(mpa_v2_params->ord) &
  1767								MPA_V2_RDMA_READ_RTR)
  1768							ep->mpa_attr.p2p_type =
  1769							FW_RI_INIT_P2PTYPE_READ_REQ;
  1770					}
  1771			}
  1772		} else if (mpa->revision == 1)
  1773			if (peer2peer)
  1774				ep->mpa_attr.p2p_type = p2p_type;
  1775	
  1776		pr_debug("crc_enabled=%d, recv_marker_enabled=%d, xmit_marker_enabled=%d, version=%d p2p_type=%d\n",
  1777			 ep->mpa_attr.crc_enabled, ep->mpa_attr.recv_marker_enabled,
  1778			 ep->mpa_attr.xmit_marker_enabled, ep->mpa_attr.version,
  1779			 ep->mpa_attr.p2p_type);
  1780	
  1781		__state_set(&ep->com, MPA_REQ_RCVD);
  1782	
  1783		/* drive upcall */
  1784		mutex_lock_nested(&ep->parent_ep->com.mutex, SINGLE_DEPTH_NESTING);
  1785		if (ep->parent_ep->com.state != DEAD) {
  1786			if (connect_request_upcall(ep))
  1787				goto err_unlock_parent;
  1788		} else {
  1789			goto err_unlock_parent;
  1790		}
  1791		mutex_unlock(&ep->parent_ep->com.mutex);
  1792		return 0;
  1793	
  1794	err_unlock_parent:
  1795		mutex_unlock(&ep->parent_ep->com.mutex);
  1796		goto err_out;
  1797	err_stop_timer:
  1798		(void)stop_ep_timer(ep);
  1799	err_out:
  1800		return 2;
  1801	}
  1802	
  1803	static int rx_data(struct c4iw_dev *dev, struct sk_buff *skb)
  1804	{
  1805		struct c4iw_ep *ep;
  1806		struct cpl_rx_data *hdr = cplhdr(skb);
  1807		unsigned int dlen = ntohs(hdr->len);
  1808		unsigned int tid = GET_TID(hdr);
  1809		__u8 status = hdr->status;
  1810		int disconnect = 0;
  1811	
  1812		ep = get_ep_from_tid(dev, tid);
  1813		if (!ep)
  1814			return 0;
  1815		pr_debug("ep %p tid %u dlen %u\n", ep, ep->hwtid, dlen);
  1816		skb_pull(skb, sizeof(*hdr));
  1817		skb_trim(skb, dlen);
  1818		mutex_lock(&ep->com.mutex);
  1819	
  1820		switch (ep->com.state) {
  1821		case MPA_REQ_SENT:
  1822			update_rx_credits(ep, dlen);
  1823			ep->rcv_seq += dlen;
  1824			disconnect = process_mpa_reply(ep, skb);
  1825			break;
  1826		case MPA_REQ_WAIT:
  1827			update_rx_credits(ep, dlen);
  1828			ep->rcv_seq += dlen;
  1829			disconnect = process_mpa_request(ep, skb);
  1830			break;
  1831		case FPDU_MODE: {
  1832			struct c4iw_qp_attributes attrs;
  1833	
  1834			update_rx_credits(ep, dlen);
  1835			if (status)
  1836				pr_err("%s Unexpected streaming data." \
  1837				       " qpid %u ep %p state %d tid %u status %d\n",
  1838				       __func__, ep->com.qp->wq.sq.qid, ep,
  1839				       ep->com.state, ep->hwtid, status);
  1840			attrs.next_state = C4IW_QP_STATE_TERMINATE;
  1841			c4iw_modify_qp(ep->com.qp->rhp, ep->com.qp,
  1842				       C4IW_QP_ATTR_NEXT_STATE, &attrs, 1);
  1843			disconnect = 1;
  1844			break;
  1845		}
  1846		default:
  1847			break;
  1848		}
  1849		mutex_unlock(&ep->com.mutex);
  1850		if (disconnect)
  1851			c4iw_ep_disconnect(ep, disconnect == 2, GFP_KERNEL);
  1852		c4iw_put_ep(&ep->com);
  1853		return 0;
  1854	}
  1855	
  1856	static void complete_cached_srq_buffers(struct c4iw_ep *ep, u32 srqidx_status)
  1857	{
  1858		enum chip_type adapter_type;
  1859		u32 srqidx;
  1860		u8 status;
  1861	
  1862		adapter_type = ep->com.dev->rdev.lldi.adapter_type;
> 1863		status = ABORT_RSS_STATUS_G(be32_to_cpu(srqidx_status));
  1864		srqidx = ABORT_RSS_SRQIDX_G(be32_to_cpu(srqidx_status));
  1865	
  1866		/*
  1867		 * If this TCB had a srq buffer cached, then we must complete
  1868		 * it. For user mode, that means saving the srqidx in the
  1869		 * user/kernel status page for this qp.  For kernel mode, just
  1870		 * synthesize the CQE now.
  1871		 */
  1872		if (CHELSIO_CHIP_VERSION(adapter_type) > CHELSIO_T5 && srqidx) {
  1873			if (ep->com.qp->ibqp.uobject)
  1874				t4_set_wq_in_error(&ep->com.qp->wq, srqidx);
  1875			else
  1876				c4iw_flush_srqidx(ep->com.qp, srqidx);
  1877		}
  1878	}
  1879	

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Photo]     [Yosemite News]     [Yosemite Photos]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux