qed: Fix QM getters to always return a valid pq
authorDenis Bolotin <denis.bolotin@cavium.com>
Mon, 19 Nov 2018 14:28:31 +0000 (16:28 +0200)
committerDavid S. Miller <davem@davemloft.net>
Tue, 20 Nov 2018 02:38:15 +0000 (18:38 -0800)
commiteb62cca9bee842e5b23bd0ddfb1f271ca95e8759
tree49c09bf5da21021f25e88a423b42b8014ea0336e
parent276d43f0ae963312c0cd0e2b9a85fd11ac65dfcc
qed: Fix QM getters to always return a valid pq

The getter callers doesn't know the valid Physical Queues (PQ) values.
This patch makes sure that a valid PQ will always be returned.

The patch consists of 3 fixes:

 - When qed_init_qm_get_idx_from_flags() receives a disabled flag, it
   returned PQ 0, which can potentially be another function's pq. Verify
   that flag is enabled, otherwise return default start_pq.

 - When qed_init_qm_get_idx_from_flags() receives an unknown flag, it
   returned NULL and could lead to a segmentation fault. Return default
   start_pq instead.

 - A modulo operation was added to MCOS/VFS PQ getters to make sure the
   PQ returned is in range of the required flag.

Fixes: b5a9ee7cf3be ("qed: Revise QM cofiguration")
Signed-off-by: Denis Bolotin <denis.bolotin@cavium.com>
Signed-off-by: Michal Kalderon <michal.kalderon@cavium.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/qlogic/qed/qed_dev.c