[dpdk-dev] [PATCH v3 6/6] ena: fix for icc compiler

Ferruh Yigit ferruh.yigit at intel.com
Fri Jul 8 16:07:02 CEST 2016


On 7/8/2016 2:23 PM, Bruce Richardson wrote:
> On Tue, Jul 05, 2016 at 09:52:09AM +0100, Ferruh Yigit wrote:
>> On 6/30/2016 4:04 PM, Jan Medala wrote:
>>> Signed-off-by: Alexander Matushevsky <matua at amazon.com>
>>> Signed-off-by: Jakub Palider <jpa at semihalf.com>
>>> Signed-off-by: Jan Medala <jan at semihalf.com>
>>
>> The compilation error to fix is [1], it may be good to add what to fix
>> into commit log.
>>
>> [1]
>> == Build drivers/net/ena
>>   CC ena_ethdev.o
>> /tmp/dpdk_maintain/ena_v3/dpdk/drivers/net/ena/ena_ethdev.c(943): error
>> #188: enumerated type mixed with another type
>>         struct ena_com_create_io_ctx ctx = { 0 };
>>                                              ^
>>
>> /tmp/dpdk_maintain/ena_v3/dpdk/drivers/net/ena/ena_ethdev.c(1036): error
>> #188: enumerated type mixed with another type
>>         struct ena_com_create_io_ctx ctx = { 0 };
>>                                              ^
>> ...
>>
>>> --- a/drivers/net/ena/ena_ethdev.c
>>> +++ b/drivers/net/ena/ena_ethdev.c
>>> @@ -940,7 +940,10 @@ static int ena_tx_queue_setup(struct rte_eth_dev *dev,
>>>  			      __rte_unused unsigned int socket_id,
>>>  			      __rte_unused const struct rte_eth_txconf *tx_conf)
>>>  {
>>> -	struct ena_com_create_io_ctx ctx = { 0 };
>>> +	struct ena_com_create_io_ctx ctx =
>>> +		/* policy set to _HOST just to satisfy icc compiler */
>>> +		{ ENA_ADMIN_PLACEMENT_POLICY_HOST,
>>> +		  ENA_COM_IO_QUEUE_DIRECTION_TX, 0, 0, 0, 0 };
>>
>> Trailing "0" are not required, compiler will take care of them.
>>
> Actually, given that this is a structure init and not an array, the trailing 
> zeros are actually required, since we are not using C99 designated initializers.
As far as I know same thing is valid for both array and struct.
uninitialized values set to default values.


c.c:
----
struct mys {
        int a;
        int b;
        int c;
};

int main(int argc, char *argv[])
{
        struct mys s = {99};

        return 0;
}

gcc -S -std=c90 c.c

c.s:
----
...
        movl    %edi, -20(%rbp)
        movq    %rsi, -32(%rbp)
        movq    $0, -16(%rbp)   <----
        movl    $0, -8(%rbp)    <----
        movl    $99, -16(%rbp)
        movl    $0, %eax
        popq    %rbp
        ret
...


> Therefore, I'll leave the zeros in - if anyone wants to convert the format of
> the initializers to c99 style later, and remove the trailing zeros then, it can
> go as a separate patch. I'll just merge this fix in with patch 1 that introduces
> the issue.
> 
> /Bruce
> 



More information about the dev mailing list