mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-29 03:01:39 -04:00
[PATCH] LOG2: Implement a general integer log2 facility in the kernel
This facility provides three entry points:
ilog2() Log base 2 of unsigned long
ilog2_u32() Log base 2 of u32
ilog2_u64() Log base 2 of u64
These facilities can either be used inside functions on dynamic data:
int do_something(long q)
{
...;
y = ilog2(x)
...;
}
Or can be used to statically initialise global variables with constant values:
unsigned n = ilog2(27);
When performing static initialisation, the compiler will report "error:
initializer element is not constant" if asked to take a log of zero or of
something not reducible to a constant. They treat negative numbers as
unsigned.
When not dealing with a constant, they fall back to using fls() which permits
them to use arch-specific log calculation instructions - such as BSR on
x86/x86_64 or SCAN on FRV - if available.
[[email protected]: MMC fix]
Signed-off-by: David Howells <[email protected]>
Cc: Benjamin Herrenschmidt <[email protected]>
Cc: Paul Mackerras <[email protected]>
Cc: Herbert Xu <[email protected]>
Cc: David Howells <[email protected]>
Cc: Wojtek Kaniewski <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
This commit is contained in:
parent
b3d7ae5f47
commit
f0d1b0b30d
36 changed files with 384 additions and 28 deletions
|
|
@ -124,7 +124,7 @@ static int mthca_query_device(struct ib_device *ibdev,
|
|||
props->max_map_per_fmr = 255;
|
||||
else
|
||||
props->max_map_per_fmr =
|
||||
(1 << (32 - long_log2(mdev->limits.num_mpts))) - 1;
|
||||
(1 << (32 - ilog2(mdev->limits.num_mpts))) - 1;
|
||||
|
||||
err = 0;
|
||||
out:
|
||||
|
|
@ -816,7 +816,7 @@ static int mthca_resize_cq(struct ib_cq *ibcq, int entries, struct ib_udata *uda
|
|||
lkey = ucmd.lkey;
|
||||
}
|
||||
|
||||
ret = mthca_RESIZE_CQ(dev, cq->cqn, lkey, long_log2(entries), &status);
|
||||
ret = mthca_RESIZE_CQ(dev, cq->cqn, lkey, ilog2(entries), &status);
|
||||
if (status)
|
||||
ret = -EINVAL;
|
||||
|
||||
|
|
|
|||
|
|
@ -636,11 +636,11 @@ int mthca_modify_qp(struct ib_qp *ibqp, struct ib_qp_attr *attr, int attr_mask,
|
|||
|
||||
if (mthca_is_memfree(dev)) {
|
||||
if (qp->rq.max)
|
||||
qp_context->rq_size_stride = long_log2(qp->rq.max) << 3;
|
||||
qp_context->rq_size_stride = ilog2(qp->rq.max) << 3;
|
||||
qp_context->rq_size_stride |= qp->rq.wqe_shift - 4;
|
||||
|
||||
if (qp->sq.max)
|
||||
qp_context->sq_size_stride = long_log2(qp->sq.max) << 3;
|
||||
qp_context->sq_size_stride = ilog2(qp->sq.max) << 3;
|
||||
qp_context->sq_size_stride |= qp->sq.wqe_shift - 4;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -120,7 +120,7 @@ static void mthca_arbel_init_srq_context(struct mthca_dev *dev,
|
|||
|
||||
memset(context, 0, sizeof *context);
|
||||
|
||||
logsize = long_log2(srq->max);
|
||||
logsize = ilog2(srq->max);
|
||||
context->state_logsize_srqn = cpu_to_be32(logsize << 24 | srq->srqn);
|
||||
context->lkey = cpu_to_be32(srq->mr.ibmr.lkey);
|
||||
context->db_index = cpu_to_be32(srq->db_index);
|
||||
|
|
@ -213,7 +213,7 @@ int mthca_alloc_srq(struct mthca_dev *dev, struct mthca_pd *pd,
|
|||
if (!mthca_is_memfree(dev) && (ds > dev->limits.max_desc_sz))
|
||||
return -EINVAL;
|
||||
|
||||
srq->wqe_shift = long_log2(ds);
|
||||
srq->wqe_shift = ilog2(ds);
|
||||
|
||||
srq->srqn = mthca_alloc(&dev->srq_table.alloc);
|
||||
if (srq->srqn == -1)
|
||||
|
|
|
|||
|
|
@ -114,7 +114,7 @@ int iser_start_rdma_unaligned_sg(struct iscsi_iser_cmd_task *iser_ctask,
|
|||
|
||||
if (cmd_data_len > ISER_KMALLOC_THRESHOLD)
|
||||
mem = (void *)__get_free_pages(GFP_NOIO,
|
||||
long_log2(roundup_pow_of_two(cmd_data_len)) - PAGE_SHIFT);
|
||||
ilog2(roundup_pow_of_two(cmd_data_len)) - PAGE_SHIFT);
|
||||
else
|
||||
mem = kmalloc(cmd_data_len, GFP_NOIO);
|
||||
|
||||
|
|
@ -211,7 +211,7 @@ void iser_finalize_rdma_unaligned_sg(struct iscsi_iser_cmd_task *iser_ctask,
|
|||
|
||||
if (cmd_data_len > ISER_KMALLOC_THRESHOLD)
|
||||
free_pages((unsigned long)mem_copy->copy_buf,
|
||||
long_log2(roundup_pow_of_two(cmd_data_len)) - PAGE_SHIFT);
|
||||
ilog2(roundup_pow_of_two(cmd_data_len)) - PAGE_SHIFT);
|
||||
else
|
||||
kfree(mem_copy->copy_buf);
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue