[mlx4] Stop DPC from running for ever (mlnx: 2642)
authortzachid <tzachid@ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86>
Sun, 29 Jun 2008 11:38:09 +0000 (11:38 +0000)
committertzachid <tzachid@ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86>
Sun, 29 Jun 2008 11:38:09 +0000 (11:38 +0000)
git-svn-id: svn://openib.tc.cornell.edu/gen1/trunk@1303 ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86

hw/mlx4/kernel/bus/net/eq.c

index 08240ce..d20d3a8 100644 (file)
@@ -160,6 +160,9 @@ static int mlx4_eq_int(struct mlx4_dev *dev, struct mlx4_eq *eq)
        int cqn;
        int eqes_found = 0;
        int set_ci = 0;
        int cqn;
        int eqes_found = 0;
        int set_ci = 0;
+       static const uint32_t cDpcMaxTime = 10000; //max time to spend in a while loop
+               
+    uint64_t start = cl_get_time_stamp();
 
        while ((eqe = next_eqe_sw(eq))) {
                /*
 
        while ((eqe = next_eqe_sw(eq))) {
                /*
@@ -222,6 +225,7 @@ static int mlx4_eq_int(struct mlx4_dev *dev, struct mlx4_eq *eq)
                default:
                        mlx4_warn(dev, "Unhandled event %02x(%02x) on EQ %d at index %u\n",
                                  eqe->type, eqe->subtype, eq->eqn, eq->cons_index);
                default:
                        mlx4_warn(dev, "Unhandled event %02x(%02x) on EQ %d at index %u\n",
                                  eqe->type, eqe->subtype, eq->eqn, eq->cons_index);
+                       
                        break;
                };
 
                        break;
                };
 
@@ -244,6 +248,10 @@ static int mlx4_eq_int(struct mlx4_dev *dev, struct mlx4_eq *eq)
                        eq_set_ci(eq, 0);
                        set_ci = 0;
                }
                        eq_set_ci(eq, 0);
                        set_ci = 0;
                }
+               
+               if (cl_get_time_stamp() - start > cDpcMaxTime ) {
+                       break; //allow other DPCs as well
+               }
        }
 
        eq_set_ci(eq, 1);
        }
 
        eq_set_ci(eq, 1);