tech-kern archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: ucom console again [PATCH]



On Tue, Nov 25, 2025 at 08:32:24AM +0000, Nick Hudson wrote:
[calling usbd_transfer in callback fires lock-against-myself panic]
> This doesn't make sense. it's perfectly acceptable to call usbd_transfer
> from a callback.

Indeed it works, thank you for the hint! I am just a bit frustrated 
I did not note in the comment what lock triggered the lock-against-myself
panic. I will post an updated patch in about 10 hours.

> > On Qemu:
> > - boot -a sometime hang on a prompt. There is a race somewhere,
> >    I suspect it does not happen on real hardware because Qemu
> >    serial emulation is much faster than a real serial port.
> > - getty fails to start because uftdi.c fails ioctl TIOCSETA with
> >    USBD_STALLED. It seems so unrelated to my changes that I wonder
> >    it I am not hitting an unrelated bug.
> 
> both these should be easy to debug with qemu trace / attaching gdb.

We already discussed that bugs privately. 

On boot -a random hang: 
We get stuck in ucom_cnpoolc() here:
    while(!db_active && atomic_load_relaxed(&cn->cn_sending) == 1)
        usbd_dopoll(sc->sc_iface);

We have cn->cn_sending still set to 1. ucom_cnput_complete() is
never invoked. OTOH, ucomreadb() is still invoked on input, 

On getty failure, ioctl TIOCSETA calls uftdi_param() where we 
have this call that returns USBD_STALLED:
        req.bmRequestType = UT_WRITE_VENDOR_DEVICE;
        req.bRequest = FTDI_SIO_SET_BITMODE;
        USETW(req.wValue, FTDI_BITMODE_RESET << 8 | 0x00);
        USETW(req.wIndex, portno);
        USETW(req.wLength, 0);
        err = usbd_do_request(sc->sc_udev, &req, NULL);

Both problem only happen in Qemu but not on real hardware.
-- 
Emmanuel Dreyfus
manu%netbsd.org@localhost


Home | Main Index | Thread Index | Old Index