On Mon, Apr 05, 2021 at 11:27:10PM +0200, Mark Kettenis wrote:

[...]

> > > > How common is it to explain the system behavior in cases like this?
> > > > Would it be less surprising (generate less misc@ traffic) if we printed
> > > > a note explaining why the camera was skipped?
> > > 
> > > I wouldn't print a specific message per unsupported device, but I think
> > > a generic message that the video device isn't supported would make
> > > sense.  Something like that maybe?  Obviously this can print more than
> > > once, but I'm not sure if it's worth to make that a unique print.
> > > 
> > > E.g.:
> > > 
> > > vmm0 at mainbus0: VMX/EPT
> > > uvideo: device 13d3:56b2 isn't supported
> > > uvideo: device 13d3:56b2 isn't supported
> > > ugen0 at uhub0 port 8 "SunplusIT Inc Integrated Camera" rev 2.01/17.11 
> > > addr 2
> > 
> > No; match functions shouldn't print stuff.
> 
> If you really wanted to print a message, you'll need to let uvideo(4)
> attach and then print a "not supported" message early on in the attach
> function and return.

Right.  Despite the print line, maybe this way is anyway better than
doing this check in the match function.


Index: sys/dev/usb/uvideo.c
===================================================================
RCS file: /cvs/src/sys/dev/usb/uvideo.c,v
retrieving revision 1.212
diff -u -p -u -p -r1.212 uvideo.c
--- sys/dev/usb/uvideo.c        5 Apr 2021 20:45:49 -0000       1.212
+++ sys/dev/usb/uvideo.c        5 Apr 2021 21:51:11 -0000
@@ -490,9 +490,6 @@ uvideo_match(struct device *parent, void
        /* quirk devices */
        quirk = uvideo_lookup(uaa->vendor, uaa->product);
        if (quirk != NULL) {
-               if (quirk->flags & UVIDEO_FLAG_NOATTACH)
-                       return (UMATCH_NONE);
-
                if (quirk->flags & UVIDEO_FLAG_REATTACH)
                        return (UMATCH_VENDOR_PRODUCT_CONF_IFACE);
 
@@ -577,6 +574,11 @@ uvideo_attach(struct device *parent, str
 
        /* maybe the device has quirks */
        sc->sc_quirk = uvideo_lookup(uaa->vendor, uaa->product);
+
+       if (sc->sc_quirk && sc->sc_quirk->flags & UVIDEO_FLAG_NOATTACH) {
+               printf("%s: device not supported\n", DEVNAME(sc));
+               return;
+       }
 
        if (sc->sc_quirk && sc->sc_quirk->ucode_name)
                config_mountroot(self, uvideo_attach_hook);

Reply via email to