vmxnet3 no longer functional on DPDK 21.11

Ferruh Yigit ferruh.yigit at xilinx.com
Fri Jun 3 17:25:04 CEST 2022


On 6/3/2022 2:19 PM, Lewis Donzis wrote:
> Hi, all.
> 
> Resurrecting this thread from six months ago, I apologize for not having more time to dig into it, but in light of recent findings, I see numerous other drivers and other parts of the code that have comments to the effect that "FreeBSD doesn't support interrupts" and they effectively #ifdef out the attempt.
> 
> Could this be as simple as needing to do the same in vmxnet3?  Empirically, ignoring the error from rte_intr_enable() allows the driver to work normally, for what that's worth.
> 
> Thanks,
> lew

cc'ed new maintainer, Jochen.

> 
> ----- On Dec 6, 2021, at 6:08 AM, Konstantin Ananyev konstantin.ananyev at intel.com wrote:
> 
>>> -----Original Message-----
>>> From: Richardson, Bruce <bruce.richardson at intel.com>
>>> Sent: Monday, December 6, 2021 9:17 AM
>>> To: Lewis Donzis <lew at perftech.com>
>>> Cc: dev <dev at dpdk.org>; Wang, Yong <yongwang at vmware.com>; Ananyev, Konstantin
>>> <konstantin.ananyev at intel.com>
>>> Subject: Re: vmxnet3 no longer functional on DPDK 21.11
>>>
>>> On Sun, Dec 05, 2021 at 07:52:33PM -0600, Lewis Donzis wrote:
>>>>
>>>>
>>>> ----- On Nov 30, 2021, at 7:42 AM, Bruce Richardson bruce.richardson at intel.com
>>>> wrote:
>>>>
>>>>> On Mon, Nov 29, 2021 at 02:45:15PM -0600, Lewis Donzis wrote:
>>>>>>     Hello.
>>>>>>     We just upgraded from 21.08 to 21.11 and it's rather astounding the
>>>>>>     number of incompatible changes in three months.  Not a big deal, just
>>>>>>     kind of a surprise, that's all.
>>>>>>     Anyway, the problem is that the vmxnet3 driver is no longer functional
>>>>>>     on FreeBSD.
>>>>>>     In drivers/net/vmxnet3/vmxnet3_ethdev.c, vmxnet3_dev_start() gets an
>>>>>>     error calling rte_intr_enable().  So it logs "interrupt enable failed"
>>>>>>     and returns an error.
>>>>>>     In lib/eal/freebsd/eal_interrupts.c, rte_intr_enable() is returning an
>>>>>>     error because rte_intr_dev_fd_get(intr_handle) is returning -1.
>>>>>>     I don't see how that could ever return anything other than -1 since it
>>>>>>     appears that there is no code that ever calls rte_intr_dev_fd_set()
>>>>>>     with a value other than -1 on FreeBSD.  Also weird to me is that even
>>>>>>     if it didn't get an error, the switch statement that follows looks like
>>>>>>     it will return an error in every case.
>>>>>>     Nonetheless, it worked in 21.08, and I can't quite see why the
>>>>>>     difference, so I must be missing something.
>>>>>>     For the moment, I just commented the "return -EIO" in vmxnet3_ethdev.c,
>>>>>>     and it's now working again, but that's obviously not the correct
>>>>>>     solution.
>>>>>>     Can someone who's knowledgable about this mechanism perhaps explain a
>>>>>>     little bit about what's going on?  I'll be happy to help troubleshoot.
>>>>>>     It seems like it must be something simple, but I just don't see it yet.
>>>>>
>>>>> Hi
>>>>>
>>>>> if you have the chance, it would be useful if you could use "git bisect" to
>>>>> identify the commit in 21.11 that broke this driver. Looking through the
>>>>> logs for 21.11 I can't identify any particular likely-looking commit, so
>>>>> bisect is likely a good way to start looking into this.
>>>>>
>>>>> Regards,
>>>>> /Bruce
>>>>
>>>> Hi, Bruce.  git bisect is very time-consuming and very cool!
>>>>
>>>> I went back to 21.08, about 1100 commits, and worked through the process, but
>>>> then I realized that I had forgotten to run ninja on one of
>>> the steps, so I did it again.
>>>>
>>>> I also re-checked it after the bisect, just to make sure that
>>>> c87d435a4d79739c0cec2ed280b94b41cb908af7 is good, and
>>> 7a0935239b9eb817c65c03554a9954ddb8ea5044 is bad.
>>>>
>>>> Thanks,
>>>> lew
>>>>
>>>
>>> Many thanks for taking the time to do this. Adding Konstantin to thread as
>>> author of the commit you identified. Konstantin, any thoughts on this
>>> issue?
>>
>> Hmm, that's looks really strange to me.
>> So to clarify, it fails at:
>> static int
>> vmxnet3_dev_start(struct rte_eth_dev *dev)
>> {
>> 	...
>> line 1695:
>> 	if (rte_intr_enable(dev->intr_handle) < 0) {
>>                 PMD_INIT_LOG(ERR, "interrupt enable failed");
>>                 return -EIO;
>>         }
>>
>> Right?
>>
>> The strange thing here is that 7a0935239b9e
>> doesn't change dev_start or rte_intr code in any way.
>> All it does - change rte_eth_rx_burst/rte_eth_tx_burst and other fast-path
>> functions.
>> Anyway, if git blames that commit, let's try to figure out what is going on.
>> Unfortunately, I don't have freebsd with vmxnet3, so will need to rely on your
>> help here.
>> As the first thing can you try to run testpmd build with last good commit
>> (c87d435a4d79)
>> and then testpmd build with bad commit applied and collect for both cases:
>> - contents of 'struct rte_eth_dev' and ' rte_eth_dev->intr_handle' for
>>   your vmxnet3 port
>> - debug log output (--log-level=eal,debug --log-level=pmd,debug)
>>
>> Konstantin



More information about the dev mailing list