On Mon, Dec 04, 2023 at 11:16:04AM +1000, David Gwynne wrote:
> On Sun, Dec 03, 2023 at 06:02:03PM +0100, Jan Stary wrote:
> > (please keep replies on the list)
> > 
> > On Dec 03 12:08:08, kolip...@exoticsilicon.com wrote:
> > > On Sun, Dec 03, 2023 at 02:35:11PM +0100, Jan Stary wrote:
> > > > This is current/amd64 on a HP 260 G2 mini PC (dmesg below).
> > > > Everything works, except the wifi seems to be unsupported:
> > > > 
> > > > "Realtek 8723BE" rev 0x00 at pci2 dev 0 function 0 not configured
> > > 
> > > What does pcidump -v show?
> > 
> > First of all, pcidump -v (but not pcidump) fucks up re(4):
> > 
> > rgephy0 detached
> > re0 detached
> > re0 at pci1 dev 0 function 0 "Realtek 8168" rev 0x10: RTL8168GU/8111GU 
> > (0x5080), msi, address 7c:d3:0a:21:eb:f5
> > rgephy0 at re0 phy 7: RTL8251 PHY, rev. 0
> > re0: cannot create re-stats kstat
> > rgephy0 detached
> > re0 detached
> > re0 at pci1 dev 0 function 0 "Realtek 8168" rev 0x10: RTL8168GU/8111GU 
> > (0x5080), msi, address 7c:d3:0a:21:eb:f5
> > rgephy0 at re0 phy 7: RTL8251 PHY, rev. 0
> > re0: cannot create re-stats kstat
> > 
> > Is anyone seeing that, i.e. devices detaching
> > when they are being probed by pcidump?
> > 
> > After doing the pcidump -v localy and rebooting to upload, I get this.
> > Note that the Realtek 8168 entry seems mangled (related to the above?).
> 
> pcidump causing a device to detach is a problem, but the kstat bit is a
> separate problem too.
> 
> the diff below consolidates the detach code in re(4) and adds the code
> to tear the kstat down when the device goes away.

Makes sense. One question below.
OK claudio@
 
> Index: ic/re.c
> ===================================================================
> RCS file: /cvs/src/sys/dev/ic/re.c,v
> retrieving revision 1.216
> diff -u -p -r1.216 re.c
> --- ic/re.c   10 Nov 2023 15:51:20 -0000      1.216
> +++ ic/re.c   4 Dec 2023 01:03:30 -0000
> @@ -2608,6 +2630,27 @@ freedma:
>  destroy:
>       bus_dmamap_destroy(sc->sc_dmat, re_ks_sc->re_ks_sc_map);
>  free:
> +     free(re_ks_sc, M_DEVBUF, sizeof(*re_ks_sc));
> +}
> +
> +void
> +re_kstat_detach(struct rl_softc *sc)
> +{
> +     struct kstat *ks = sc->rl_kstat;
> +     struct re_kstat_softc *re_ks_sc;
> +
> +     if (ks == NULL)
> +             return;
> +
> +     kstat_remove(ks);
> +     re_ks_sc = ks->ks_ptr;
> +     kstat_destroy(ks);
> +
> +     bus_dmamap_unload(sc->sc_dmat, re_ks_sc->re_ks_sc_map);
> +     bus_dmamem_unmap(sc->sc_dmat,
> +         (caddr_t)re_ks_sc->re_ks_sc_stats, sizeof(struct re_stats));
> +     bus_dmamem_free(sc->sc_dmat, &re_ks_sc->re_ks_sc_seg, 1);

Shouldn't this use re_ks_sc->re_ks_sc_nsegs?
Or actually why save re_ks_sc_nsegs when it is known to be 1?
It is just confusing to see a difference with re_kstat_attach() in this
regard.

> +     bus_dmamap_destroy(sc->sc_dmat, re_ks_sc->re_ks_sc_map);
>       free(re_ks_sc, M_DEVBUF, sizeof(*re_ks_sc));
>  }
>  #endif /* NKSTAT > 0 */

-- 
:wq Claudio

Reply via email to