From patchwork Wed Mar 9 04:26:13 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jason Gunthorpe X-Patchwork-Id: 620321 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by demeter1.kernel.org (8.14.4/8.14.3) with ESMTP id p294QMlC025271 for ; Wed, 9 Mar 2011 04:26:23 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754738Ab1CIE0R (ORCPT ); Tue, 8 Mar 2011 23:26:17 -0500 Received: from quartz.orcorp.ca ([139.142.54.143]:58906 "EHLO quartz.orcorp.ca" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754555Ab1CIE0Q (ORCPT ); Tue, 8 Mar 2011 23:26:16 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=obsidianresearch.com; s=rsa1; h=Content-Type:MIME-Version:Message-ID:Subject:To:From:Date; bh=1pkqqN8ttMQ4KOBr6Lt72MhL3v2ttK99wclpuE/kyjA=; b=CWWAG8dIko0xPWMP2v7mhOum0Ug5oCJ+zvdessC+E/bv/9lF9U5iByTbgsLKLq6gJK5zveK3XI+SKBAZ8JX6C6qeh+YhamTmxpU1YQoyTvyQ5AeteLbqLeYRqZAMX1Ko+Xa07NDiNcewL6w64zMDDgdvYXM4tsT1li5H/oaT5Fg=; Received: from jgg by quartz.orcorp.ca with local (Exim 4.72) (envelope-from ) id 1PxAyT-0006Yb-CT; Tue, 08 Mar 2011 21:26:13 -0700 Date: Tue, 8 Mar 2011 21:26:13 -0700 From: Jason Gunthorpe To: Roland Dreier , "linux-rdma@vger.kernel.org" Subject: [PATCH/libmlx] Set the ibv_wc.opcode even if the wc is an error wc Message-ID: <20110309042613.GA21606@obsidianresearch.com> MIME-Version: 1.0 Content-Disposition: inline User-Agent: Mutt/1.5.20 (2009-06-14) Sender: linux-rdma-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-rdma@vger.kernel.org X-Greylist: IP, sender and recipient auto-whitelisted, not delayed by milter-greylist-4.2.6 (demeter1.kernel.org [140.211.167.41]); Wed, 09 Mar 2011 04:26:23 +0000 (UTC) diff --git a/src/cq.c b/src/cq.c index 8226b6b..c920844 100644 --- a/src/cq.c +++ b/src/cq.c @@ -253,13 +253,6 @@ static int mlx4_poll_one(struct mlx4_cq *cq, ++wq->tail; } - if (is_error) { - mlx4_handle_error_cqe((struct mlx4_err_cqe *) cqe, wc); - return CQ_OK; - } - - wc->status = IBV_WC_SUCCESS; - if (is_send) { wc->wc_flags = 0; switch (cqe->owner_sr_opcode & MLX4_CQE_OPCODE_MASK) { @@ -311,6 +304,10 @@ static int mlx4_poll_one(struct mlx4_cq *cq, wc->wc_flags = IBV_WC_WITH_IMM; wc->imm_data = cqe->immed_rss_invalid; break; + default: + /* assume it's a recv completion */ + wc->opcode = IBV_WC_RECV; + break; } wc->slid = ntohs(cqe->rlid); @@ -322,6 +319,11 @@ static int mlx4_poll_one(struct mlx4_cq *cq, wc->pkey_index = ntohl(cqe->immed_rss_invalid) & 0x7f; } + if (is_error) + mlx4_handle_error_cqe((struct mlx4_err_cqe *) cqe, wc); + else + wc->status = IBV_WC_SUCCESS; + return CQ_OK; }