Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 26 Apr 2025 08:36:04 -0700
From:      Adrian Chadd <adrian.chadd@gmail.com>
To:        Nuno Teixeira <eduardo@freebsd.org>
Cc:        freebsd-wireless@freebsd.org
Subject:   Re: rtwn0: rtwn_rx_copy_to_mbuf: could not allocate RX mbuf
Message-ID:  <CAJ-Vmo=ggte9z-5%2BwmGFm_M13Z%2BkT=Oo65FN9_vif=LGm%2Bomng@mail.gmail.com>
In-Reply-To: <CAFDf7UJ2Ro8REtsAZ4shaOs9FqqETBUa-Z=4rVKB9miqBiakZQ@mail.gmail.com>
References:  <CAFDf7UJdhwnDj8V9944TYLJ4PtFOdr6SDqY-6nGK6XSijd4Esw@mail.gmail.com> <CAJ-Vmo=BbY5kZT8tEhAUE3C1wMKBErCbNDqB7PR6rV3v%2BrP-Qg@mail.gmail.com> <CAFDf7ULNQFex8swiDdKhfqQvm5ziNmk1hyxnEYz_wfRUq6YRNQ@mail.gmail.com> <CAJ-VmokoQ4fm6dapZ6pouhqXOumgj2QjBV9M%2BJYz3MjQ2QNqTA@mail.gmail.com> <CAFDf7UJtn9_chV-Yy9o=nWrMx0siHPhieAw08EiemU406%2Bwk9Q@mail.gmail.com> <CAFDf7UKRVTiVQtVHShVZRZ8fSsTnUdCDNPR5sJ3-_rpiG56Rdw@mail.gmail.com> <CAJ-Vmo=V_hAd4H%2BCv9zNDoaxrVW3_8K9zh6X%2B3SawUxM3JCdEg@mail.gmail.com> <CAFDf7UKaL%2BxNuD2S08MPSMat22O=k=aASoWTtok3P-AODJhH0g@mail.gmail.com> <CAFDf7UKCRa_f3KdJaW8ZACwLSDX5x17rPQLN9-ODUe0LCkJkvA@mail.gmail.com> <CAJ-VmomoUWEaPM0rQC%2BCnkVJeaDt5BEv5DvgQnpxQJWboCNW0Q@mail.gmail.com> <CAFDf7U%2B2Jb4R5iWn55iQeKfzVkDbksjeS0y=k2C01Gy34x_Xhg@mail.gmail.com> <CAJ-Vmo=9rXDeTYt%2BSWGH%2BMOfYcOga6qOLvXavxQbrpqzjs7f_Q@mail.gmail.com> <CAFDf7U%2Bc87jNgQ-4i4CZPKS4PLUROPai4Y0F0PqHazRoQ-8_Yg@mail.gmail.com> <CAJ-VmokSVeF-aW48nkYDaPJK1Pvt=hS6RPMhmUebFC7bdsVd_A@mail.gmail.com> <CAFDf7U%2BcZYEOGYqFU6owG-1F-KHM8H27EO7HTq%2BBF9u%2BFTAc5A@mail.gmail.com> <CAJ-VmonmUvQMtJPjvFVd07UrW_6gPN%2Bk7qPgRNqv%2BSiRvAP5Kw@mail.gmail.com> <CAFDf7UJv5wWbwV9qdjn5H=wTXBy5e6r7OXq-bHAiZok4_KwffQ@mail.gmail.com> <CAJ-Vmo=krAT2jfCn_zprGU8WZS=3DLpMqF212CznWRnHg00qTA@mail.gmail.com> <CAFDf7UKcyiXut3m6WvPQTGtf5ohD-Op-Xpi-Bi9hdV%2BZkiCSsQ@mail.gmail.com> <CAFDf7U%2B9rHSOQogcGasfcBLe3XbKzpDF0PkPQHDnL8EJMdA5MA@mail.gmail.com> <CAFDf7ULTfVRCY9zc71m4p7FkFHrsgm_g3AZXbFNY3jyLdaSG9w@mail.gmail.com> <CAJ-Vmonz=UAvmUAJ4HpJbgL4LB5s3P9NbMRCqzCg_oiF-Qf_cQ@mail.gmail.com> <CAFDf7ULVhh=9=UBJpujJSjU2Nt5nW_cGWLmo0484FMFd9=90eA@mail.gmail.com> <CAJ-VmomfB-CES1KfxZ9OJTEN7iWVnb1AjouqLS-WYywDVjCQJg@mail.gmail.com> <CAFDf7U%2BtMf7V9M%2BX2TsjA%2BhiiiJJE_mHY_TqkdqjHp=TisiiwQ@mail.gmail.com> <CAFDf7UJ2Ro8REtsAZ4shaOs9FqqETBUa-Z=4rVKB9miqBiakZQ@mail.gmail.com>

index | next in thread | previous in thread | raw e-mail

[-- Attachment #1 --]
Oh, and would you mind filing a bug at bugs.freebsd.org ? I'd like to track
this as a normal honest to god bug.



-adrian


On Sat, 26 Apr 2025 at 08:33, Nuno Teixeira <eduardo@freebsd.org> wrote:

> (...)
>
> Found stability and no warnings/errors to report on usb nics:
>
> RTL8821AU 11ac @aarch64
> RTL8811AU 11ac @amd64
>
> Cheers!
>
> Nuno Teixeira <eduardo@freebsd.org> escreveu (sábado, 26/04/2025 à(s)
> 08:58):
> >
> > Hello!
> >
> > > Ok, that is interesting. We're not keeping counters in m_get2() for
> when the buffer requested is too large; it only returns NULL.
> > > I guess it's bailing if it's above a page size (4kbytes.)
> > >
> > > Try changing the m_get2() call there to m_get3(); let's see if that
> improves things.
> > > (m_get3() will fail above 16kbytes; and if it can't allocate a buffer
> < 16kbytes then we should get some UMA error counted somehwere.)
> >
> > iperf3 -R is happy, and git pull --rebase completed OK and fast:
> >
> > Connecting to host hp, port 5201
> > Reverse mode, remote host hp is sending
> > [  5] local 192.168.1.82 port 39601 connected to 192.168.1.100 port 5201
> > [ ID] Interval           Transfer     Bitrate
> > [  5]   0.00-1.06   sec  6.00 MBytes  47.4 Mbits/sec
> > [  5]   1.06-2.06   sec  15.9 MBytes   134 Mbits/sec
> > [  5]   2.06-3.06   sec  16.1 MBytes   135 Mbits/sec
> > [  5]   3.06-4.06   sec  16.4 MBytes   137 Mbits/sec
> > [  5]   4.06-5.00   sec  15.0 MBytes   134 Mbits/sec
> > [  5]   5.00-6.06   sec  16.4 MBytes   129 Mbits/sec
> > [  5]   6.06-7.06   sec  15.2 MBytes   128 Mbits/sec
> > [  5]   7.06-8.06   sec  14.8 MBytes   124 Mbits/sec
> > [  5]   8.06-9.06   sec  15.8 MBytes   132 Mbits/sec
> > [  5]   9.06-10.06  sec  16.1 MBytes   135 Mbits/sec
> > - - - - - - - - - - - - - - - - - - - - - - - - -
> > [ ID] Interval           Transfer     Bitrate         Retr
> > [  5]   0.00-10.08  sec   148 MBytes   123 Mbits/sec    0
> sender
> > [  5]   0.00-10.06  sec   148 MBytes   123 Mbits/sec
> receiver
> >
> > iperf Done.
> >
> > I will use this dongle on amd64 for further testing, I will patch
> aarch64 soon.
> >
> > ```
> > diff --git a/sys/dev/rtwn/usb/rtwn_usb_rx.c
> b/sys/dev/rtwn/usb/rtwn_usb_rx.c
> > index 657d6bdeb9e4..54869fe336bd 100644
> > --- a/sys/dev/rtwn/usb/rtwn_usb_rx.c
> > +++ b/sys/dev/rtwn/usb/rtwn_usb_rx.c
> > @@ -124,10 +124,10 @@ rtwn_rx_copy_to_mbuf(struct rtwn_softc *sc,
> > struct rtwn_rx_stat_common *stat,
> >         if (rtwn_rx_check_pre_alloc(sc, stat) != 0)
> >                 goto fail;
> >
> > -       m = m_get2(totlen, M_NOWAIT, MT_DATA, M_PKTHDR);
> > +       m = m_get3(totlen, M_NOWAIT, MT_DATA, M_PKTHDR);
> >         if (__predict_false(m == NULL)) {
> > -               device_printf(sc->sc_dev, "%s: could not allocate RX
> mbuf\n",
> > -                   __func__);
> > +               device_printf(sc->sc_dev, "%s: could not allocate RX
> > mbuf (%d bytes)\n",
> > +                   __func__, totlen);
> >                 goto fail;
> >         }
> > ```
> >
> > Thanks!
> >
> >
> > --
> > Nuno Teixeira
> > FreeBSD UNIX:  <eduardo@FreeBSD.org>   Web:  https://FreeBSD.org
>
>
>
> --
> Nuno Teixeira
> FreeBSD UNIX:  <eduardo@FreeBSD.org>   Web:  https://FreeBSD.org
>

[-- Attachment #2 --]
<div dir="ltr"><div>Oh, and would you mind filing a bug at <a href="http://bugs.freebsd.org">bugs.freebsd.org</a>; ? I&#39;d like to track this as a normal honest to god bug.</div><div><br></div><div><br></div><div><br></div><div>-adrian</div><div><br></div></div><br><div class="gmail_quote gmail_quote_container"><div dir="ltr" class="gmail_attr">On Sat, 26 Apr 2025 at 08:33, Nuno Teixeira &lt;<a href="mailto:eduardo@freebsd.org">eduardo@freebsd.org</a>&gt; wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">(...)<br>
<br>
Found stability and no warnings/errors to report on usb nics:<br>
<br>
RTL8821AU 11ac @aarch64<br>
RTL8811AU 11ac @amd64<br>
<br>
Cheers!<br>
<br>
Nuno Teixeira &lt;<a href="mailto:eduardo@freebsd.org" target="_blank">eduardo@freebsd.org</a>&gt; escreveu (sábado, 26/04/2025 à(s) 08:58):<br>
&gt;<br>
&gt; Hello!<br>
&gt;<br>
&gt; &gt; Ok, that is interesting. We&#39;re not keeping counters in m_get2() for when the buffer requested is too large; it only returns NULL.<br>
&gt; &gt; I guess it&#39;s bailing if it&#39;s above a page size (4kbytes.)<br>
&gt; &gt;<br>
&gt; &gt; Try changing the m_get2() call there to m_get3(); let&#39;s see if that improves things.<br>
&gt; &gt; (m_get3() will fail above 16kbytes; and if it can&#39;t allocate a buffer &lt; 16kbytes then we should get some UMA error counted somehwere.)<br>
&gt;<br>
&gt; iperf3 -R is happy, and git pull --rebase completed OK and fast:<br>
&gt;<br>
&gt; Connecting to host hp, port 5201<br>
&gt; Reverse mode, remote host hp is sending<br>
&gt; [  5] local 192.168.1.82 port 39601 connected to 192.168.1.100 port 5201<br>
&gt; [ ID] Interval           Transfer     Bitrate<br>
&gt; [  5]   0.00-1.06   sec  6.00 MBytes  47.4 Mbits/sec<br>
&gt; [  5]   1.06-2.06   sec  15.9 MBytes   134 Mbits/sec<br>
&gt; [  5]   2.06-3.06   sec  16.1 MBytes   135 Mbits/sec<br>
&gt; [  5]   3.06-4.06   sec  16.4 MBytes   137 Mbits/sec<br>
&gt; [  5]   4.06-5.00   sec  15.0 MBytes   134 Mbits/sec<br>
&gt; [  5]   5.00-6.06   sec  16.4 MBytes   129 Mbits/sec<br>
&gt; [  5]   6.06-7.06   sec  15.2 MBytes   128 Mbits/sec<br>
&gt; [  5]   7.06-8.06   sec  14.8 MBytes   124 Mbits/sec<br>
&gt; [  5]   8.06-9.06   sec  15.8 MBytes   132 Mbits/sec<br>
&gt; [  5]   9.06-10.06  sec  16.1 MBytes   135 Mbits/sec<br>
&gt; - - - - - - - - - - - - - - - - - - - - - - - - -<br>
&gt; [ ID] Interval           Transfer     Bitrate         Retr<br>
&gt; [  5]   0.00-10.08  sec   148 MBytes   123 Mbits/sec    0            sender<br>
&gt; [  5]   0.00-10.06  sec   148 MBytes   123 Mbits/sec                  receiver<br>
&gt;<br>
&gt; iperf Done.<br>
&gt;<br>
&gt; I will use this dongle on amd64 for further testing, I will patch aarch64 soon.<br>
&gt;<br>
&gt; ```<br>
&gt; diff --git a/sys/dev/rtwn/usb/rtwn_usb_rx.c b/sys/dev/rtwn/usb/rtwn_usb_rx.c<br>
&gt; index 657d6bdeb9e4..54869fe336bd 100644<br>
&gt; --- a/sys/dev/rtwn/usb/rtwn_usb_rx.c<br>
&gt; +++ b/sys/dev/rtwn/usb/rtwn_usb_rx.c<br>
&gt; @@ -124,10 +124,10 @@ rtwn_rx_copy_to_mbuf(struct rtwn_softc *sc,<br>
&gt; struct rtwn_rx_stat_common *stat,<br>
&gt;         if (rtwn_rx_check_pre_alloc(sc, stat) != 0)<br>
&gt;                 goto fail;<br>
&gt;<br>
&gt; -       m = m_get2(totlen, M_NOWAIT, MT_DATA, M_PKTHDR);<br>
&gt; +       m = m_get3(totlen, M_NOWAIT, MT_DATA, M_PKTHDR);<br>
&gt;         if (__predict_false(m == NULL)) {<br>
&gt; -               device_printf(sc-&gt;sc_dev, &quot;%s: could not allocate RX mbuf\n&quot;,<br>
&gt; -                   __func__);<br>
&gt; +               device_printf(sc-&gt;sc_dev, &quot;%s: could not allocate RX<br>
&gt; mbuf (%d bytes)\n&quot;,<br>
&gt; +                   __func__, totlen);<br>
&gt;                 goto fail;<br>
&gt;         }<br>
&gt; ```<br>
&gt;<br>
&gt; Thanks!<br>
&gt;<br>
&gt;<br>
&gt; --<br>
&gt; Nuno Teixeira<br>
&gt; FreeBSD UNIX:  &lt;eduardo@FreeBSD.org&gt;   Web:  <a href="https://FreeBSD.org" rel="noreferrer" target="_blank">https://FreeBSD.org</a><br>;
<br>
<br>
<br>
-- <br>
Nuno Teixeira<br>
FreeBSD UNIX:  &lt;eduardo@FreeBSD.org&gt;   Web:  <a href="https://FreeBSD.org" rel="noreferrer" target="_blank">https://FreeBSD.org</a><br>;
</blockquote></div>
home | help

Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAJ-Vmo=ggte9z-5%2BwmGFm_M13Z%2BkT=Oo65FN9_vif=LGm%2Bomng>