Re: patch for sysfs in the cyclades driver

From: Greg KH
Date: Thu Nov 04 2004 - 12:57:28 EST


On Thu, Nov 04, 2004 at 12:29:25PM -0200, Marcelo Tosatti wrote:
> On Thu, Nov 04, 2004 at 08:58:21AM -0800, Roland Dreier wrote:
> > Marcelo> The problem was class_simple only contains the "dev"
> > Marcelo> attribute. You can't add other attributes to it.
> >
> > I believe, based on the comment in class_simple.c:
> >
> > Any further sysfs files that might be required can be created using this pointer.
> >
> > and the implementation in in drivers/scsi/st.c, that there's no
> > problem adding attributes to a device in a simple class. You can just
> > use class_set_devdata() on your class_device to set whatever context
> > you need to get back to your internal structures, and then use
> > class_device_create_file() to add the attributes.
> >
> > I assume this is OK (since there is already one in-kernel driver doing
> > it), but Greg, can you confirm that it's definitely OK for a driver to
> > use class_set_devdata() on a class_device from class_simple_device_add()?
>
> Hi Roland,
>
> Oh thanks, I didnt knew the existance of such possibily.
>
> I once asked here on the list:
>
> ---------
>
> Hope this is not a FAQ.
>
> I want to export some read-only attributes (statistics) from cyclades.c char
> driver to userspace via sysfs.
>
> I can't figure out the right place to do it - I could create a class under
> /sys/class/cyclades for example, but that doesnt sound right since this
> is not a "class" of device, but a device itself.
>
> Hooking the statistics into /sys/class/tty/ttyC$/ sounds reasonable, but
> its not possible it seems because "tty" is a class_simple class, which only implements
> the "dev" attribute.
>
> ------ Greg answer was:
>
> For a driver only attribute, you want them to show up in the place for
> the driver (like under /sys/bus/pci/driver/MY_FOO_DRIVER/). To do that
> use the DRIVER_ATTR() and the driver_add_file() functions. For
> examples, see the other drivers that use these functions.
>
>
> But I hope you are right - /sys/class/tty/tty$/
> sounds the correct place for those files - I thought a "class_tty"
> class was required for new attributes.

No, Roland is right, just use the class_device pointer you get back from
the core when a tty device is created.

Right now we aren't saving the pointer anywhere (see
tty_register_device() for where it is created.) Just add that to the
proper tty_device structure, and you should be fine (yeah, it's going to
be a pain, and you will quickly see why I didn't do that in the first
place, but it is going to need to be changed eventually...)

Good luck,

greg k-h
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/