diff options
author | Rasmus Villemoes <linux@rasmusvillemoes.dk> | 2015-01-16 15:39:56 +0100 |
---|---|---|
committer | Roland Dreier <roland@purestorage.com> | 2015-02-18 08:31:06 -0800 |
commit | f3070e7efdc37a84fa63cbe84ac4febc87440121 (patch) | |
tree | 95ca4251d6c867bb977203f4eaab3185b5a115a3 /drivers/infiniband | |
parent | ba64fdca63af5a1bdda8e33d9cc8496089631dde (diff) | |
download | op-kernel-dev-f3070e7efdc37a84fa63cbe84ac4febc87440121.zip op-kernel-dev-f3070e7efdc37a84fa63cbe84ac4febc87440121.tar.gz |
RDMA/ocrdma: Use unsigned for bit index
In the expressions idx/32 and idx%32, both idx and 32 have signed
type, and unfortunately the C standard prescribes rounding to 0, so
unless gcc can prove that idx is non-negative, these cannot be
implemented as simple shift respectively mask operations. Help gcc by
changing the type of idx to unsigned - this cuts another few
instructions from the generated code.
Signed-off-by: Rasmus Villemoes <linux@rasmusvillemoes.dk>
Acked-by: Selvin Xavier <selvin.xavier@emulex.com>
Signed-off-by: Roland Dreier <roland@purestorage.com>
Diffstat (limited to 'drivers/infiniband')
-rw-r--r-- | drivers/infiniband/hw/ocrdma/ocrdma_verbs.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/drivers/infiniband/hw/ocrdma/ocrdma_verbs.c b/drivers/infiniband/hw/ocrdma/ocrdma_verbs.c index c1e9f96..397a367 100644 --- a/drivers/infiniband/hw/ocrdma/ocrdma_verbs.c +++ b/drivers/infiniband/hw/ocrdma/ocrdma_verbs.c @@ -1586,10 +1586,10 @@ mbx_err: return status; } -static void ocrdma_srq_toggle_bit(struct ocrdma_srq *srq, int idx) +static void ocrdma_srq_toggle_bit(struct ocrdma_srq *srq, unsigned int idx) { - int i = idx / 32; - unsigned int mask = (1 << (idx % 32)); + unsigned int i = idx / 32; + u32 mask = (1U << (idx % 32)); srq->idx_bit_fields[i] ^= mask; } |