[dpdk-dev] [PATCH v4 06/17] eal: add eal_common_thread.c for common thread API

Olivier MATZ olivier.matz at 6wind.com
Mon Feb 9 18:30:03 CET 2015


Hi,

On 02/09/2015 02:12 PM, Liang, Cunming wrote:
>>> +int
>>> +rte_thread_get_affinity(rte_cpuset_t *cpusetp)
>>> +{
>>> +	if (!cpusetp)
>>> +		return -1;
>>
>> Same here. This is the only reason why rte_thread_get_affinity() could
>> fail. Removing this test would allow to change the API to return void
>> instead. It will avoid a useless test below in
>> eal_thread_dump_affinity().
> [LCM] The cpusetp is used as destination of memcpy and the function suppose an EAL API.
> I don't think it's a good idea to remove the check, do you ?

I know we often have debate on this subject on the list. My personal
opinion is that checking a NULL pointer in these cases is useless
because the user is suppose to give a non-NULL pointer. Returning
an error will result in managing an error for something that cannot
happen.

On the other hand, adding an assert() (or the dpdk equivalent) would
be a good idea.


>>
>>> +
>>> +	rte_memcpy(cpusetp, &RTE_PER_LCORE(_cpuset),
>>> +		   sizeof(rte_cpuset_t));
>>> +
>>> +	return 0;
>>> +}
>>> +
>>> +void
>>> +eal_thread_dump_affinity(char str[], unsigned size)
>>> +{
>>> +	rte_cpuset_t cpuset;
>>> +	unsigned cpu;
>>> +	int ret;
>>> +	unsigned int out = 0;
>>> +
>>> +	if (rte_thread_get_affinity(&cpuset) < 0) {
>>> +		str[0] = '\0';
>>> +		return;
>>> +	}
>>
>> This one could be removed it the (== NULL) test is removed.
>>
>>> +
>>> +	for (cpu = 0; cpu < RTE_MAX_LCORE; cpu++) {
>>> +		if (!CPU_ISSET(cpu, &cpuset))
>>> +			continue;
>>> +
>>> +		ret = snprintf(str + out,
>>> +			       size - out, "%u,", cpu);
>>> +		if (ret < 0 || (unsigned)ret >= size - out)
>>> +			break;
>>
>> On the contrary, I think here returning an error to the user
>> would be useful so he can knows that the dump is not complete.
> [LCM] accept.
>>
>>
>> Regards,
>> Olivier


More information about the dev mailing list