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