API to link sysctl nodes to devices

Warner Losh wlosh at bsdimp.com
Mon Jun 6 03:53:58 UTC 2016


> On Jun 5, 2016, at 11:07 PM, KILOREUX Emperex <kiloreux at gmail.com> wrote:
> 
> Hey,
> 
> Thanks for your feedback, but we have been over this and what you are
> proposing seems pretty interesting, can you please elaborate on how that
> could be implemented inside the kernel, or give more details about it, also
> it seems a bit cool if we could do both of them together, so what do you
> think about sysctl nodes, is there any disadvantages for the implementation
> of such API ?
> 
> On Sat, Jun 4, 2016 at 9:52 AM, Poul-Henning Kamp <phk at phk.freebsd.dk>
> wrote:
> 
>> --------
>> In message <
>> CAN1JrQ2dd0WZi0_aaNdqH9xdy292tP2DYLxvKV9bfK93vYFLXw at mail.gmail.com>
>> , KILOREUX Emperex writes:
>> 
>>> As part of my participation GSOC, I have been working on an API spec to
>>> link sysctl nodes to devices.
>> 
>> It's not really the sysctl nodes as such you should focus on, but
>> rather on the gap between (the increasingly inaccurately named)
>> newbus and devfs.
>> 
>> The poster-boy example is how you get from USB bus coordinates to
>> /dev/da* or /dev/{tty|cua}U* devices.
>> 
>> devd(8) seems to know the linkage and usually I resort to /etc/devd
>> entries like this to make it liveable:
>> 
>>        attach 1000 {
>>                match "device-name"     "uftdi[0-9]*";
>>                match "vendor"          "0x0403";
>>                match "product"         "0x6001";
>>                match "sernum"          "FTHAV9UU";
>>                action "ln -s /dev/cua$ttyname /dev/bbb1";
>>        };
>> 
>>        notify 1000 {
>>                match "system"          "USB";
>>                match "subsystem"       "DEVICE";
>>                match "type"            "DETACH";
>>                match "vendor"          "0x0403";
>>                match "product"         "0x6001";
>>                match "sernum"          "FTHAV9UU";
>>                action "rm -f /dev/bbb1";
>>        };

For /dev/da* we created a geom creation event that should be used instead of a USB insertion event, which removed the strain we had. For uftdi vs ttyUx thing, though, there’s a problem. We could do a device creation event as well (there may already be one), but there’s no way to connect the /dev/ttyUx back to the newbus device_t node, which can be used look up info about the device to do interesting things with. One way to do this would be dev.uftdi.0.%devnodes: ttyU2 ttyU3, which would require some new APIs for adding a dev_t to a device_t. But that might be backwards. I’d like something more like devnode.ttyU2.device: uftdi0 would do the trick (or uftdi.0, since device names can have numbers in them, which is why the sysctl nodes under dev are the way they are). Note ‘devnode’ is just a name, I’m agnostic, but given that dev is already taken (and its an API for many device drivers, so changing it would be difficult) ‘devnode’ seems the next best thing, but I’m open to other names.

Of course, having a stronger coupling between device_t and dev_t would allow us to detect when /dev/foo isn’t destroyed when the device_t created it gets detached.

As for sysctl, there’s already a sysctl tree that’s tightly coupled to a device instance that any device can take advantage of. I’m not sure what you need here, unless it’s what I described in the last paragraph.

Warner


More information about the freebsd-arch mailing list