[dpdk-dev] [PATCH v2] ring: check for zero objects mc dequeue / mp enqueue
Olivier Matz
olivier.matz at 6wind.com
Fri Mar 18 11:27:18 CET 2016
Hi,
On 03/18/2016 11:18 AM, Bruce Richardson wrote:
>>> diff --git a/lib/librte_ring/rte_ring.h b/lib/librte_ring/rte_ring.h
>>> index 943c97c..eb45e41 100644
>>> --- a/lib/librte_ring/rte_ring.h
>>> +++ b/lib/librte_ring/rte_ring.h
>>> @@ -431,6 +431,11 @@ __rte_ring_mp_do_enqueue(struct rte_ring *r, void *
>>> const *obj_table,
>>> uint32_t mask = r->prod.mask;
>>> int ret;
>>>
>>> + /* Avoid the unnecessary cmpset operation below, which is also
>>> + * potentially harmful when n equals 0. */
>>> + if (n == 0)
>>>
>>
>> What about using unlikely here?
>>
>
> Unless there is a measurable performance increase by adding in likely/unlikely
> I'd suggest avoiding it's use. In general, likely/unlikely should only be used
> for things like catestrophic errors because the penalty for taking the unlikely
> leg of the code can be quite severe. For normal stuff, where the code nearly
> always goes one way in the branch but occasionally goes the other, the hardware
> branch predictors generally do a good enough job.
Do you mean using likely/unlikely could be worst than not using it
in this case?
To me, using unlikely here is not a bad idea: it shows to the compiler
and to the reader of the code that is case is not the usual case.
Olivier
More information about the dev
mailing list