[dpdk-dev] net/enic: fix segfault after receiving error interrupt

Message ID 1468458557-17989-1-git-send-email-neescoba@cisco.com (mailing list archive)
State Accepted, archived
Headers

Commit Message

Nelson Escobar July 14, 2016, 1:09 a.m. UTC
  When enic's interrupt handler is called indicating an error, it scans
through the receive queues (RQs) on the adapter looking for errors.
But since the inclusion of rx scatter, some of the RQs may not be in
use, and you shouldn't check them for errors.

Fixes: 856d7ba7ed22 ("net/enic: support scattered Rx")

Signed-off-by: Nelson Escobar <neescoba@cisco.com>
Reviewed-by: John Daley <johndale@cisco.com>
---
 drivers/net/enic/enic_main.c | 2 ++
 1 file changed, 2 insertions(+)
  

Comments

Thomas Monjalon July 15, 2016, 9:33 p.m. UTC | #1
2016-07-13 18:09, Nelson Escobar:
> When enic's interrupt handler is called indicating an error, it scans
> through the receive queues (RQs) on the adapter looking for errors.
> But since the inclusion of rx scatter, some of the RQs may not be in
> use, and you shouldn't check them for errors.
> 
> Fixes: 856d7ba7ed22 ("net/enic: support scattered Rx")
> 
> Signed-off-by: Nelson Escobar <neescoba@cisco.com>
> Reviewed-by: John Daley <johndale@cisco.com>

Applied, thanks
  

Patch

diff --git a/drivers/net/enic/enic_main.c b/drivers/net/enic/enic_main.c
index 9ec2a2d..fbd4089 100644
--- a/drivers/net/enic/enic_main.c
+++ b/drivers/net/enic/enic_main.c
@@ -123,6 +123,8 @@  static void enic_log_q_error(struct enic *enic)
 	}
 
 	for (i = 0; i < enic_vnic_rq_count(enic); i++) {
+		if (!enic->rq[i].in_use)
+			continue;
 		error_status = vnic_rq_error_status(&enic->rq[i]);
 		if (error_status)
 			dev_err(enic, "RQ[%d] error_status %d\n", i,