Re: struct class question

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

 



On Wed, 2005-06-29 at 17:28 -0400, Luben Tuikov wrote:
> AFAIU, struct class describes a class of devices
> for which a driver/kernel interface exists.  That is, the
> implication is "struct class => driver interface (i.e. LLDD)".

Not necessarily "driver" interface, but device interface (which is often
implemented by a driver.  The distinction is subtle, but it's the basis
of how transport classes work).

> The reason for this, as I understand it, is that the kernel
> wants to be able to control such devices through the class
> interface (and the class device interface), and possibly
> hotplugging.
> 
> Thus we get the pretty flat sysfs class hierarchy:
> /sys/class/<if>/<device>

That's by design.  The class contains a list of all the devices
implementing the interface.

> But there may be devices which are embedded in the controlled
> device and/or which are part of it but are _not_ directly controlled
> by the kernel or the driver interface and for which no driver
> interface exists.  And representing such devices on their own
> doesn't make sense: they do not exist on their own or/and they
> cannot be directly controlled.

Interface (class) is tied to struct device.  If it doesn't have a struct
device, then it can't have a class and isn't a proper sysfs leaf.  If
the device doesn't exist or it can't be directly controlled, then we
probably don't need a class for it, right?  As to whether it needs to
exist at all if we can't do anything with it, I suppose that depends on
whether it's necessary to the tree representation or not (a bit like
channels in SCSI.  They have meaning, but no sysfs representation on
their own).

> Example of such devices are phys, ports, of a SAS host adapter
> and expanders on the SAS domain.  They are "embedded devices",
> not directly controllable by the kernel or through the kernel
> interface.
> 
> Such devices are controlled by the SAS Discover process.
> 
> Now the SAS Discover process sees those devices as they're
> physically (and logically) connected (simplified):
> 
> host adapter --> phys
>              --> ports (may not exists)
>                  --> participating phys (list, mask, etc)
>                  --> SAS device (target or initiator)
>                  --> expander device (edge or fanout)
> 
> I was wondering if it is viable to represent
> this hierarchy, *as the SAS discover process sees it*, in
> sysfs, possibly through the class interface.

Pretty much yes, that's what SCSI FC adapters do with rports.

> So in effect, (remote) targets and initiators _would_ be present
> in /sys/class/scsi_device/ (as is normal) and hosts
> in /sys/class/scsi_host/ (again as is normal), but that the
> picture as seen by the SAS Discover process (intermediate)
> would be represented:
> 
> /sys/class/sas/
> /sys/class/sas/ha0/
> /sys/class/sas/ha1/
> /sys/class/sas/ha1/phys/
> /sys/class/sas/ha1/ports/
> etc.

No, this is where you go wrong.  The sysfs tree exists under the host<n>
for scsi (and is parented to the PCI/etc device), so you can have
something like

.../host1/
.../host1/phys/
.../host1/ports/

(and obviously you need to know where you're putting the targets under
this).

So the rich deep tree is under devices and the class tree represents a
flat look into that for devices implementing the specific interface.

James


-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[Index of Archives]     [Kernel Newbies]     [Netfilter]     [Bugtraq]     [Photo]     [Stuff]     [Gimp]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Video 4 Linux]     [Linux for the blind]     [Linux Resources]
  Powered by Linux