summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Mustacchi <rm@joyent.com>2019-06-14 22:07:35 +0000
committerRobert Mustacchi <rm@joyent.com>2019-06-27 22:12:20 +0000
commit88531c3e5ce29d6ea3c44903bc3f1daf216153ed (patch)
treef6c58e49e2c98d826a737939c423360018a2a1af
parentc0834af5f903a2f16c6ad3a4a8946d7f40edda4b (diff)
downloadillumos-joyent-88531c3e5ce29d6ea3c44903bc3f1daf216153ed.tar.gz
OS-7557 blown assert in i40e_intr_io_clear_cause()
Reviewed by: Dan McDonald <danmcd@joyent.com> Reviewed by: Ryan Zezeski <rpz@joyent.com> Approved by: Ryan Zezeski <rpz@joyent.com>
-rw-r--r--usr/src/uts/common/io/i40e/i40e_intr.c21
1 files changed, 7 insertions, 14 deletions
diff --git a/usr/src/uts/common/io/i40e/i40e_intr.c b/usr/src/uts/common/io/i40e/i40e_intr.c
index 170bef7ec6..e3a0d69cc6 100644
--- a/usr/src/uts/common/io/i40e/i40e_intr.c
+++ b/usr/src/uts/common/io/i40e/i40e_intr.c
@@ -10,7 +10,7 @@
*/
/*
- * Copyright 2018 Joyent, Inc.
+ * Copyright 2019 Joyent, Inc.
* Copyright 2017 Tegile Systems, Inc. All rights reserved.
*/
@@ -326,7 +326,7 @@ i40e_intr_io_disable_all(i40e_t *i40e)
void
i40e_intr_io_clear_cause(i40e_t *i40e)
{
- int i;
+ uint32_t i;
i40e_hw_t *hw = &i40e->i40e_hw_space;
if (i40e->i40e_intr_type != DDI_INTR_TYPE_MSIX) {
@@ -336,16 +336,9 @@ i40e_intr_io_clear_cause(i40e_t *i40e)
return;
}
- for (i = 0; i < i40e->i40e_num_trqpairs; i++) {
+ for (i = 0; i < i40e->i40e_intr_count - 1; i++) {
uint32_t reg;
-#ifdef DEBUG
- /*
- * Verify that the interrupt in question is disabled. This is a
- * prerequisite of modifying the data in question.
- */
- reg = I40E_READ_REG(hw, I40E_PFINT_DYN_CTLN(i));
- VERIFY0(reg & I40E_PFINT_DYN_CTLN_INTENA_MASK);
-#endif
+
reg = I40E_QUEUE_TYPE_EOL;
I40E_WRITE_REG(hw, I40E_PFINT_LNKLSTN(i), reg);
}
@@ -370,7 +363,7 @@ i40e_intr_chip_fini(i40e_t *i40e)
* and the interrupt linked lists have been zeroed.
*/
if (i40e->i40e_intr_type == DDI_INTR_TYPE_MSIX) {
- for (i = 0; i < i40e->i40e_num_trqpairs; i++) {
+ for (i = 0; i < i40e->i40e_intr_count - 1; i++) {
reg = I40E_READ_REG(hw, I40E_PFINT_DYN_CTLN(i));
VERIFY0(reg & I40E_PFINT_DYN_CTLN_INTENA_MASK);
@@ -472,7 +465,7 @@ i40e_intr_init_queue_msix(i40e_t *i40e)
boolean_t head = B_TRUE;
for (uint_t qidx = vec; qidx < i40e->i40e_num_trqpairs;
- qidx += intr_count) {
+ qidx += intr_count) {
uint_t next_qidx = qidx + intr_count;
next_qidx = (next_qidx > i40e->i40e_num_trqpairs) ?
@@ -764,7 +757,7 @@ i40e_intr_msix(void *arg1, void *arg2)
* performed during i40e_map_intrs_to_vectors().
*/
for (uint_t i = vector_idx - 1; i < i40e->i40e_num_trqpairs;
- i += (i40e->i40e_intr_count - 1)) {
+ i += (i40e->i40e_intr_count - 1)) {
i40e_trqpair_t *itrq = &i40e->i40e_trqpairs[i];
ASSERT3U(i, <, i40e->i40e_num_trqpairs);