All of lore.kernel.org
 help / color / mirror / Atom feed
From: Lewis Donzis <lew@perftech.com>
To: Konstantin Ananyev <konstantin.ananyev@intel.com>
Cc: Bruce Richardson <bruce.richardson@intel.com>, dev <dev@dpdk.org>,
	 "Wang, Yong" <yongwang@vmware.com>
Subject: Re: vmxnet3 no longer functional on DPDK 21.11
Date: Sat, 6 Jan 2024 08:50:03 -0600 (CST)	[thread overview]
Message-ID: <12922153.12944.1704552603431.JavaMail.zimbra@donzis.com> (raw)
In-Reply-To: <1796133353.5470017.1654262374494.JavaMail.zimbra@donzis.com>

Good morning.

I just wanted to mention that this problem still persists in 22.11.3, and we still have to patch the vmxnet3 driver every time we upgrade.

As mentioned before, ixgbe_ethdev.c is an example of a driver that ifdef's out the attempt to use interrupts on FreeBSD.

Thanks,
lew


----- On Jun 3, 2022, at 8:19 AM, Lewis Donzis lew@perftech.com 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
> 
> ----- On Dec 6, 2021, at 6:08 AM, Konstantin Ananyev
> konstantin.ananyev@intel.com wrote:
> 
>>> -----Original Message-----
>>> From: Richardson, Bruce <bruce.richardson@intel.com>
>>> Sent: Monday, December 6, 2021 9:17 AM
>>> To: Lewis Donzis <lew@perftech.com>
>>> Cc: dev <dev@dpdk.org>; Wang, Yong <yongwang@vmware.com>; Ananyev, Konstantin
>>> <konstantin.ananyev@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@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

  parent reply	other threads:[~2024-01-08 11:13 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-11-29 20:45 vmxnet3 no longer functional on DPDK 21.11 Lewis Donzis
2021-11-30  8:53 ` Ferruh Yigit
2021-11-30 13:42 ` Bruce Richardson
2021-12-06  1:52   ` Lewis Donzis
2021-12-06  9:16     ` Bruce Richardson
2021-12-06 12:08       ` Ananyev, Konstantin
2021-12-06 13:58         ` Lewis Donzis
2022-06-03 13:19         ` Lewis Donzis
2022-06-03 15:25           ` Ferruh Yigit
2024-01-06 14:50           ` Lewis Donzis [this message]
2024-01-09 10:21             ` Bruce Richardson
2024-01-09 13:46               ` Lewis Donzis
2024-01-09 14:28                 ` Bruce Richardson
2024-01-09 15:21                   ` Lewis Donzis
2024-01-09 15:35                     ` Bruce Richardson
2024-01-09 23:55               ` Stephen Hemminger
2024-01-10 13:36                 ` Lewis Donzis
2024-01-09 14:23             ` [PATCH] net/vmxnet3: fix use of interrupts on FreeBSD Bruce Richardson
2024-01-09 16:00               ` Lewis Donzis
2024-01-11 12:03                 ` Ferruh Yigit
2024-01-24 12:34                   ` Lewis Donzis
2024-01-24 13:58                     ` Ferruh Yigit
2024-01-24 14:04                       ` Lewis Donzis

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=12922153.12944.1704552603431.JavaMail.zimbra@donzis.com \
    --to=lew@perftech.com \
    --cc=bruce.richardson@intel.com \
    --cc=dev@dpdk.org \
    --cc=konstantin.ananyev@intel.com \
    --cc=yongwang@vmware.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.