All of lore.kernel.org
 help / color / mirror / Atom feed
From: Chas Williams <3chas3@gmail.com>
To: dev@dpdk.org
Cc: "Charles \(Chas\) Williams" <ciwillia@brocade.com>
Subject: [PATCH 1/2] bnx2x: fix error handling in bnx2x_loop_obtain_resources()
Date: Wed, 30 Dec 2015 19:37:50 -0500	[thread overview]
Message-ID: <1451522271-16924-1-git-send-email-3chas3@gmail.com> (raw)

From: "Charles (Chas) Williams" <ciwillia@brocade.com>

bnx2x_loop_obtain_resources() returns a struct containing the status and
the error message.  If bnx2x_do_req4pf() fails, it shouldn't return both
of these fields set to 0 indicating failure and no error.

Further, bnx2x_do_req4pf() needs to be able fail and return NO_RESOURCES
so that bnx2x_loop_obtain_resources() can negotiate reduced resource
requirments.  This requires additional checking around bnx2x_do_req4pf().

Signed-off-by: Chas Williams <3chas3@gmail.com>
---
 drivers/net/bnx2x/bnx2x_vfpf.c | 75 +++++++++++++++++++-----------------------
 1 file changed, 33 insertions(+), 42 deletions(-)

diff --git a/drivers/net/bnx2x/bnx2x_vfpf.c b/drivers/net/bnx2x/bnx2x_vfpf.c
index 765cc92..34b6360 100644
--- a/drivers/net/bnx2x/bnx2x_vfpf.c
+++ b/drivers/net/bnx2x/bnx2x_vfpf.c
@@ -122,16 +122,10 @@ bnx2x_do_req4pf(struct bnx2x_softc *sc, phys_addr_t phys_addr)
 				break;
 		}
 
-		if (i == BNX2X_VF_CHANNEL_TRIES) {
+		if (!*status) {
 			PMD_DRV_LOG(ERR, "Response from PF timed out");
 			return -EAGAIN;
 		}
-
-		if (BNX2X_VF_STATUS_SUCCESS != *status) {
-			PMD_DRV_LOG(ERR, "Bad reply from PF : %u",
-					*status);
-			return -EINVAL;
-		}
 	} else {
 		PMD_DRV_LOG(ERR, "status should be zero before message"
 				"to pf was sent");
@@ -193,10 +187,10 @@ struct bnx2x_obtain_status bnx2x_loop_obtain_resources(struct bnx2x_softc *sc)
 	do {
 		PMD_DRV_LOG(DEBUG, "trying to get resources");
 
-		if ( bnx2x_do_req4pf(sc, sc->vf2pf_mbox_mapping.paddr) ) {
+		if (bnx2x_do_req4pf(sc, sc->vf2pf_mbox_mapping.paddr)) {
 			/* timeout */
 			status.success = 0;
-			status.err_code = 0;
+			status.err_code = -EAGAIN;
 			return status;
 		}
 
@@ -310,8 +304,8 @@ void
 bnx2x_vf_close(struct bnx2x_softc *sc)
 {
 	struct vf_release_tlv *query;
+	struct vf_common_reply_tlv *reply = &sc->vf2pf_mbox->resp.common_reply;
 	int vf_id = bnx2x_read_vf_id(sc);
-	int ret;
 
 	if (vf_id >= 0) {
 		query = &sc->vf2pf_mbox->query[0].release;
@@ -322,11 +316,9 @@ bnx2x_vf_close(struct bnx2x_softc *sc)
 		BNX2X_TLV_APPEND(query, query->first_tlv.length, BNX2X_VF_TLV_LIST_END,
 				sizeof(struct channel_list_end_tlv));
 
-		ret = bnx2x_do_req4pf(sc, sc->vf2pf_mbox_mapping.paddr);
-
-		if (ret) {
+		bnx2x_do_req4pf(sc, sc->vf2pf_mbox_mapping.paddr);
+		if (reply->status != BNX2X_VF_STATUS_SUCCESS)
 			PMD_DRV_LOG(ERR, "Failed to release VF");
-		}
 	}
 }
 
@@ -335,7 +327,8 @@ int
 bnx2x_vf_init(struct bnx2x_softc *sc)
 {
 	struct vf_init_tlv *query;
-	int i, ret;
+	struct vf_common_reply_tlv *reply = &sc->vf2pf_mbox->resp.common_reply;
+	int i;
 
 	query = &sc->vf2pf_mbox->query[0].init;
 	bnx2x_init_first_tlv(sc, &query->first_tlv, BNX2X_VF_TLV_INIT,
@@ -352,11 +345,10 @@ bnx2x_vf_init(struct bnx2x_softc *sc)
 	BNX2X_TLV_APPEND(query, query->first_tlv.length, BNX2X_VF_TLV_LIST_END,
 			sizeof(struct channel_list_end_tlv));
 
-	ret = bnx2x_do_req4pf(sc, sc->vf2pf_mbox_mapping.paddr);
-
-	if (ret) {
+	bnx2x_do_req4pf(sc, sc->vf2pf_mbox_mapping.paddr);
+	if (reply->status != BNX2X_VF_STATUS_SUCCESS) {
 		PMD_DRV_LOG(ERR, "Failed to init VF");
-		return ret;
+		return -EINVAL;
 	}
 
 	PMD_DRV_LOG(DEBUG, "VF was initialized");
@@ -367,8 +359,9 @@ void
 bnx2x_vf_unload(struct bnx2x_softc *sc)
 {
 	struct vf_close_tlv *query;
+	struct vf_common_reply_tlv *reply = &sc->vf2pf_mbox->resp.common_reply;
 	struct vf_q_op_tlv *query_op;
-	int i, vf_id, ret;
+	int i, vf_id;
 
 	vf_id = bnx2x_read_vf_id(sc);
 	if (vf_id > 0) {
@@ -384,10 +377,10 @@ bnx2x_vf_unload(struct bnx2x_softc *sc)
 					BNX2X_VF_TLV_LIST_END,
 					sizeof(struct channel_list_end_tlv));
 
-			ret = bnx2x_do_req4pf(sc, sc->vf2pf_mbox_mapping.paddr);
-			if (ret)
+			bnx2x_do_req4pf(sc, sc->vf2pf_mbox_mapping.paddr);
+			if (reply->status != BNX2X_VF_STATUS_SUCCESS)
 				PMD_DRV_LOG(ERR,
-						"Bad reply for vf_q %d teardown", i);
+					    "Bad reply for vf_q %d teardown", i);
 		}
 
 		bnx2x_vf_set_mac(sc, false);
@@ -402,11 +395,10 @@ bnx2x_vf_unload(struct bnx2x_softc *sc)
 				BNX2X_VF_TLV_LIST_END,
 				sizeof(struct channel_list_end_tlv));
 
-		ret = bnx2x_do_req4pf(sc, sc->vf2pf_mbox_mapping.paddr);
-
-		if (ret)
+		bnx2x_do_req4pf(sc, sc->vf2pf_mbox_mapping.paddr);
+		if (reply->status != BNX2X_VF_STATUS_SUCCESS)
 			PMD_DRV_LOG(ERR,
-				"Bad reply from PF for close message");
+				    "Bad reply from PF for close message");
 	}
 }
 
@@ -469,8 +461,8 @@ int
 bnx2x_vf_setup_queue(struct bnx2x_softc *sc, struct bnx2x_fastpath *fp, int leading)
 {
 	struct vf_setup_q_tlv *query;
+	struct vf_common_reply_tlv *reply = &sc->vf2pf_mbox->resp.common_reply;
 	uint16_t flags = bnx2x_vf_q_flags(leading);
-	int ret;
 
 	query = &sc->vf2pf_mbox->query[0].setup_q;
 	bnx2x_init_first_tlv(sc, &query->first_tlv, BNX2X_VF_TLV_SETUP_Q,
@@ -485,11 +477,10 @@ bnx2x_vf_setup_queue(struct bnx2x_softc *sc, struct bnx2x_fastpath *fp, int lead
 	BNX2X_TLV_APPEND(query, query->first_tlv.length, BNX2X_VF_TLV_LIST_END,
 			sizeof(struct channel_list_end_tlv));
 
-	ret = bnx2x_do_req4pf(sc, sc->vf2pf_mbox_mapping.paddr);
-
-	if (ret) {
+	bnx2x_do_req4pf(sc, sc->vf2pf_mbox_mapping.paddr);
+	if (reply->status != BNX2X_VF_STATUS_SUCCESS) {
 		PMD_DRV_LOG(ERR, "Failed to setup VF queue[%d]",
-				fp->index);
+				 fp->index);
 		return -EINVAL;
 	}
 
@@ -548,7 +539,7 @@ bnx2x_vf_config_rss(struct bnx2x_softc *sc,
 			  struct ecore_config_rss_params *params)
 {
 	struct vf_rss_tlv *query;
-	int ret;
+	struct vf_common_reply_tlv *reply = &sc->vf2pf_mbox->resp.common_reply;
 
 	query = &sc->vf2pf_mbox->query[0].update_rss;
 
@@ -568,10 +559,10 @@ bnx2x_vf_config_rss(struct bnx2x_softc *sc,
 	query->rss_result_mask = params->rss_result_mask;
 	query->rss_flags = params->rss_flags;
 
-	ret = bnx2x_do_req4pf(sc, sc->vf2pf_mbox_mapping.paddr);
-	if (ret) {
-		PMD_DRV_LOG(ERR, "Failed to send message to PF, rc %d", ret);
-		return ret;
+	bnx2x_do_req4pf(sc, sc->vf2pf_mbox_mapping.paddr);
+	if (reply->status != BNX2X_VF_STATUS_SUCCESS) {
+		PMD_DRV_LOG(ERR, "Failed to configure RSS");
+		return -EINVAL;;
 	}
 
 	return 0;
@@ -581,8 +572,8 @@ int
 bnx2x_vf_set_rx_mode(struct bnx2x_softc *sc)
 {
 	struct vf_set_q_filters_tlv *query;
+	struct vf_common_reply_tlv *reply = &sc->vf2pf_mbox->resp.common_reply;
 	unsigned long tx_mask;
-	int ret;
 
 	query = &sc->vf2pf_mbox->query[0].set_q_filters;
 	bnx2x_init_first_tlv(sc, &query->first_tlv, BNX2X_VF_TLV_SET_Q_FILTERS,
@@ -598,10 +589,10 @@ bnx2x_vf_set_rx_mode(struct bnx2x_softc *sc)
 	BNX2X_TLV_APPEND(query, query->first_tlv.length, BNX2X_VF_TLV_LIST_END,
 			sizeof(struct channel_list_end_tlv));
 
-	ret = bnx2x_do_req4pf(sc, sc->vf2pf_mbox_mapping.paddr);
-	if (ret) {
-		PMD_DRV_LOG(ERR, "Failed to send message to PF, rc %d", ret);
-		return ret;
+	bnx2x_do_req4pf(sc, sc->vf2pf_mbox_mapping.paddr);
+	if (reply->status != BNX2X_VF_STATUS_SUCCESS) {
+		PMD_DRV_LOG(ERR, "Failed to set RX mode");
+		return -EINVAL;
 	}
 
 	return 0;
-- 
2.5.0

             reply	other threads:[~2015-12-31  0:37 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-12-31  0:37 Chas Williams [this message]
2015-12-31  0:37 ` [PATCH 2/2] bnx2x: Determine rx/tx queue sizes sooner Chas Williams
2016-03-04 22:28   ` Rasesh Mody
2016-03-10 10:32     ` Bruce Richardson
2016-02-08 13:51 ` [PATCH 1/2] bnx2x: fix error handling in bnx2x_loop_obtain_resources() Bruce Richardson
2016-02-08 15:53   ` Charles (Chas) Williams
2016-02-08 16:03     ` Bruce Richardson
2016-03-04 22:28 ` Rasesh Mody
2016-03-10 10:33   ` Bruce Richardson

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1451522271-16924-1-git-send-email-3chas3@gmail.com \
    --to=3chas3@gmail.com \
    --cc=ciwillia@brocade.com \
    --cc=dev@dpdk.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.