Before branching v1.3 and doing RC1, I'd like to discuss how I/O devices
are stored in the topology. We currently have dedicated pci device and
OS device lists together with custom helpers (get_next_pcidev/osdev).
Having helpers to traverse hostbridges or bridges may help in some
cases, but I don't think we want to add that many custom things.
So instead I wroted the attached patch which puts I/O devices in levels
so that they are almost regular objects. The only caveat is that those
objects are still special so they can't have a real depth, that's why I
am adding some special depth for them:
HWLOC_TYPE_DEPTH_BRIDGE = -3
HWLOC_TYPE_DEPTH_PCI_DEVICE = -4
HWLOC_TYPE_DEPTH_OS_DEVICE = -5
There might a way to use normal depth for I/O devices too, but it would
make the code much more ugly and I am not sure we really need this. And
we can still change this after RC1 anyway.
Pros:
* Uniform interface
+ no need for custom get_next_<type> helpers anymore (I kept them in
hwloc/helpers.h but they could go away)
+ helpers such as get_obj_by_type/depth work fine
+ documentation is more simple, we just need to say that they have
special depth
* Easy to extend to other special types without adding new helpers (just
need to add new special depth for new types
* Changes in the core are actually small
Cons:
* Several internal functions need special care for this new special depths
* The bridge levels contains objects that may be parent/child of each other
Opinions ?
Brice
|