fm10k: fix interrupt fault handling
authorStephen Hemminger <stephen@networkplumber.org>
Fri, 17 Jul 2015 00:33:22 +0000 (17:33 -0700)
committerThomas Monjalon <thomas.monjalon@6wind.com>
Wed, 22 Jul 2015 10:46:43 +0000 (12:46 +0200)
The fm10k driver was reading the interrupt cause register but then
using the interrupt mask register defines to look at the bits.
The result is that if a fault happens, the driver would never clear
the fault and would get into an infinite cycle of interrupts.

Note: I don't work for Intel or have the hardware manuals (probably
requires NDA anyway), but this looks logical and matches how the
known working Linux driver handles these bits.

Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
Acked-by: Jing Chen <jing.d.chen@intel.com>
drivers/net/fm10k/fm10k_ethdev.c

index 5aa13f0..5cb65c3 100644 (file)
@@ -1779,7 +1779,7 @@ fm10k_dev_handle_fault(struct fm10k_hw *hw, uint32_t eicr)
        const char *estr = "Unknown error";
 
        /* Process PCA fault */
-       if (eicr & FM10K_EIMR_PCA_FAULT) {
+       if (eicr & FM10K_EICR_PCA_FAULT) {
                err = fm10k_get_fault(hw, FM10K_PCA_FAULT, &fault);
                if (err)
                        goto error;
@@ -1807,7 +1807,7 @@ fm10k_dev_handle_fault(struct fm10k_hw *hw, uint32_t eicr)
        }
 
        /* Process THI fault */
-       if (eicr & FM10K_EIMR_THI_FAULT) {
+       if (eicr & FM10K_EICR_THI_FAULT) {
                err = fm10k_get_fault(hw, FM10K_THI_FAULT, &fault);
                if (err)
                        goto error;
@@ -1825,7 +1825,7 @@ fm10k_dev_handle_fault(struct fm10k_hw *hw, uint32_t eicr)
        }
 
        /* Process FUM fault */
-       if (eicr & FM10K_EIMR_FUM_FAULT) {
+       if (eicr & FM10K_EICR_FUM_FAULT) {
                err = fm10k_get_fault(hw, FM10K_FUM_FAULT, &fault);
                if (err)
                        goto error;