staging/rdma/hfi1: Eliminate WARN_ON when VL is invalid
authorIra Weiny <iweiny@gmail.com>
Sat, 21 Nov 2015 00:43:47 +0000 (19:43 -0500)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 21 Dec 2015 21:48:27 +0000 (13:48 -0800)
sdma_select_engine_vl only needs to protect itself from an invalid VL.
Something higher up the stack should be warning the user when they try
to use an SL which maps to an invalid VL.

Reviewed-by: Dean Luick <dean.luick@intel.com>
Reviewed-by: Mike Marciniszyn <mike.marciniszyn@intel.com>
Reviewed-by: Kaike Wan <kaike.wan@intel.com>
Signed-off-by: Ira Weiny <iweiny@gmail.com>
Signed-off-by: Jubin John <jubin.john@intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/rdma/hfi1/sdma.c

index 90b7072a99698a6b30d4caf68f4495e63b31b09b..0710e2ab767c605ea844dbc1ee1b9c5ed18a59ae 100644 (file)
@@ -765,8 +765,14 @@ struct sdma_engine *sdma_select_engine_vl(
        struct sdma_map_elem *e;
        struct sdma_engine *rval;
 
-       if (WARN_ON(vl > 8))
-               return &dd->per_sdma[0];
+       /* NOTE This should only happen if SC->VL changed after the initial
+        *      checks on the QP/AH
+        *      Default will return engine 0 below
+        */
+       if (vl >= num_vls) {
+               rval = NULL;
+               goto done;
+       }
 
        rcu_read_lock();
        m = rcu_dereference(dd->sdma_map);
@@ -778,6 +784,7 @@ struct sdma_engine *sdma_select_engine_vl(
        rval = e->sde[selector & e->mask];
        rcu_read_unlock();
 
+done:
        rval =  !rval ? &dd->per_sdma[0] : rval;
        trace_hfi1_sdma_engine_select(dd, selector, vl, rval->this_idx);
        return rval;