[PATCH v4, under testing] nvme-rdma: support devices with queue size < 32

Marta Rybczynska mrybczyn at kalray.eu
Thu May 4 05:50:00 PDT 2017


> On Wed, 2017-05-03 at 19:27 +0300, Leon Romanovsky wrote:
>> On Wed, May 03, 2017 at 07:01:14PM +0300, Sagi Grimberg wrote:
>> > > As far as I know the compiler only does that for compile-time constants. In
>> > > this case the divisor (max(queue_size / 2, 1)) is not a compile-time constant.
>> > 
>> > We could theoretically do a (sig_count & max(queue_size / 2, 1)) but
>> > that would only do well with power of 2 sized queues...
>> 
>> IMHO, It is not-so-big-deal limitation.
> 
> Hello Marta, Sagi and Leon,
> 
> How about changing nvme_rdma_init_sig_count() such that it always returns
> a power of two? The "+ 1" in the code below makes sure that the argument of
> ilog2() is larger than zero even if queue_size == 1. I'm not sure whether
> the time needed to compute ilog2() would make it necessary to cache the
> nvme_rdma_init_sig_count() return value.
> 
> static inline int nvme_rdma_init_sig_count(int queue_size)
> {
>        /* Return the largest power of two that is not above half of (queue size + 1) */
>        return 1 << ilog2((queue_size + 1) / 2);
> }
> 
> Bart.

This looks like a good idea to me. Then the division can change into
an AND. I'll come back with another version soon.

Marta



More information about the Linux-nvme mailing list