diff options
author | Rasmus Villemoes <linux@rasmusvillemoes.dk> | 2015-01-16 09:39:56 -0500 |
---|---|---|
committer | Roland Dreier <roland@purestorage.com> | 2015-02-18 11:31:06 -0500 |
commit | f3070e7efdc37a84fa63cbe84ac4febc87440121 (patch) | |
tree | 95ca4251d6c867bb977203f4eaab3185b5a115a3 | |
parent | ba64fdca63af5a1bdda8e33d9cc8496089631dde (diff) |
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>
-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 c1e9f9617ab9..397a3678ecfb 100644 --- a/drivers/infiniband/hw/ocrdma/ocrdma_verbs.c +++ b/drivers/infiniband/hw/ocrdma/ocrdma_verbs.c | |||
@@ -1586,10 +1586,10 @@ mbx_err: | |||
1586 | return status; | 1586 | return status; |
1587 | } | 1587 | } |
1588 | 1588 | ||
1589 | static void ocrdma_srq_toggle_bit(struct ocrdma_srq *srq, int idx) | 1589 | static void ocrdma_srq_toggle_bit(struct ocrdma_srq *srq, unsigned int idx) |
1590 | { | 1590 | { |
1591 | int i = idx / 32; | 1591 | unsigned int i = idx / 32; |
1592 | unsigned int mask = (1 << (idx % 32)); | 1592 | u32 mask = (1U << (idx % 32)); |
1593 | 1593 | ||
1594 | srq->idx_bit_fields[i] ^= mask; | 1594 | srq->idx_bit_fields[i] ^= mask; |
1595 | } | 1595 | } |