12 years agolibtopology v0.3 v0.3
Nathan Lynch [Thu, 16 Oct 2008 23:36:56 +0000 (18:36 -0500)]
libtopology v0.3

About time I made an actual release.

12 years agoupdate library build procedure
Nathan Lynch [Thu, 16 Oct 2008 09:05:57 +0000 (04:05 -0500)]
update library build procedure

This sets the soname properly, and creates the (I think?) appropriate
links: -> -> is now the output file.

12 years agoREADME: fix up references to old API
Nathan Lynch [Wed, 15 Oct 2008 20:01:34 +0000 (15:01 -0500)]
README: fix up references to old API

12 years agoadd a simple cache listing example program
Nathan Lynch [Tue, 14 Oct 2008 19:36:51 +0000 (14:36 -0500)]
add a simple cache listing example program

Example output from a dual core system:

cache : level = 1, type = Instruction, size = 32K
        cpus = 0x2
cache : level = 1, type = Data, size = 32K
        cpus = 0x2
cache : level = 2, type = Unified, size = 4096K
        cpus = 0x3
cache : level = 1, type = Instruction, size = 32K
        cpus = 0x1
cache : level = 1, type = Data, size = 32K
        cpus = 0x1

12 years agocpumasks: remove unused DO_SELFTEST define
Nathan Lynch [Tue, 14 Oct 2008 19:35:11 +0000 (14:35 -0500)]
cpumasks: remove unused DO_SELFTEST define

No longer used.

12 years ago"two cores, shared L2" test: check L2 cpumask
Nathan Lynch [Tue, 14 Oct 2008 19:34:17 +0000 (14:34 -0500)]
"two cores, shared L2" test: check L2 cpumask

Ensure that both logical CPUs are accounted in the L2 cpumask.

12 years agoinitialize cache device cpumask from shared_cpu_map
Nathan Lynch [Tue, 14 Oct 2008 19:32:00 +0000 (14:32 -0500)]
initialize cache device cpumask from shared_cpu_map

When initializing a cache device we're setting only the current CPU's
bit in the device cpumask.  This is incorrect for caches that are

Fix this by initializing the cache cpumask from the shared_cpu_map
sysfs attribute, and add a sanity check ensuring that the current
CPU's bit is set in the mask.

12 years agoprint line number on testcase failure
Nathan Lynch [Tue, 14 Oct 2008 19:09:27 +0000 (14:09 -0500)]
print line number on testcase failure

So the output is like this:
two cores, shared L2                    : failed! (line 49)

12 years agoupdate README example code
Nathan Lynch [Mon, 13 Oct 2008 20:08:49 +0000 (15:08 -0500)]
update README example code

Was using old API, oops.

12 years agoset soname when building
Nathan Lynch [Mon, 13 Oct 2008 15:10:26 +0000 (10:10 -0500)]
set soname when building

12 years agoknock some items off todo list
Nathan Lynch [Mon, 13 Oct 2008 05:32:17 +0000 (00:32 -0500)]
knock some items off todo list

12 years agoremove static library support
Nathan Lynch [Mon, 13 Oct 2008 05:25:01 +0000 (00:25 -0500)]
remove static library support

Can add it back later if there's a legitimate need (unlikely).

12 years agoadd C++ guards to header
Nathan Lynch [Mon, 13 Oct 2008 05:20:32 +0000 (00:20 -0500)]
add C++ guards to header

Remove #define _GNU_SOURCE as this trips up g++ and doesn't seem to be
needed for the test suite.

12 years agoDocument user-visible functions
Nathan Lynch [Mon, 13 Oct 2008 04:29:36 +0000 (23:29 -0500)]
Document user-visible functions

12 years agorename topo_ent to topo_procent
Nathan Lynch [Sun, 12 Oct 2008 07:31:59 +0000 (02:31 -0500)]
rename topo_ent to topo_procent

12 years agoorganize lib/topology.c by function
Nathan Lynch [Sun, 12 Oct 2008 06:57:14 +0000 (01:57 -0500)]
organize lib/topology.c by function

Code movement and additional comments making the delineation between
groups of functions clear.

12 years agogrow device hashtable when full
Nathan Lynch [Sat, 11 Oct 2008 17:01:59 +0000 (12:01 -0500)]
grow device hashtable when full

This gets us out of guessing a maximum size for the table at context

12 years agoupdate, tidy TODO
Nathan Lynch [Fri, 10 Oct 2008 00:51:55 +0000 (19:51 -0500)]
update, tidy TODO

12 years agoremove old typedefs from header
Nathan Lynch [Fri, 10 Oct 2008 00:45:05 +0000 (19:45 -0500)]
remove old typedefs from header

12 years agoremove most old code from library
Nathan Lynch [Fri, 10 Oct 2008 00:36:43 +0000 (19:36 -0500)]
remove most old code from library

Now unused.

12 years agoremove old API declarations from topology.h
Nathan Lynch [Fri, 10 Oct 2008 00:15:45 +0000 (19:15 -0500)]
remove old API declarations from topology.h

No longer used.

12 years agostop allocating "legacy" context in testcases
Nathan Lynch [Fri, 10 Oct 2008 00:15:02 +0000 (19:15 -0500)]
stop allocating "legacy" context in testcases

Now that they've all been converted to the new API we can stop using
topology_get_context and topology_release_context.

12 years agoconvert cpumasks program to new API
Nathan Lynch [Fri, 10 Oct 2008 00:09:38 +0000 (19:09 -0500)]
convert cpumasks program to new API

12 years agoremove API hack from "two cores, shared L2" testcase
Nathan Lynch [Thu, 9 Oct 2008 23:51:12 +0000 (18:51 -0500)]
remove API hack from "two cores, shared L2" testcase

12 years agoactually check cache size in "cache size = 16KB" testcase
Nathan Lynch [Thu, 9 Oct 2008 23:47:57 +0000 (18:47 -0500)]
actually check cache size in "cache size = 16KB" testcase

12 years agoconvert "cache size = 16KB" testcase to new API
Nathan Lynch [Thu, 9 Oct 2008 23:43:24 +0000 (18:43 -0500)]
convert "cache size = 16KB" testcase to new API

12 years agoadd topology_device_cpumask interface
Nathan Lynch [Thu, 9 Oct 2008 23:42:13 +0000 (18:42 -0500)]
add topology_device_cpumask interface

Associated code movement in topology.c to avoid forward declarations.

12 years agoconvert "single core smt4" testcase to new API
Nathan Lynch [Thu, 9 Oct 2008 23:30:06 +0000 (18:30 -0500)]
convert "single core smt4" testcase to new API

12 years agoadd topology_procent_cpumask interface
Nathan Lynch [Thu, 9 Oct 2008 23:12:38 +0000 (18:12 -0500)]
add topology_procent_cpumask interface

Replacement for topology_*_cpumask.

12 years agoconvert "topology_nr_threads" testcase to new API
Nathan Lynch [Thu, 9 Oct 2008 22:59:49 +0000 (17:59 -0500)]
convert "topology_nr_threads" testcase to new API

12 years agoconvert "topology_nr_cores" testcase to new API
Nathan Lynch [Thu, 9 Oct 2008 22:58:36 +0000 (17:58 -0500)]
convert "topology_nr_cores" testcase to new API

12 years ago"no sysfs" testcase: check return code of new-style context creation
Nathan Lynch [Thu, 9 Oct 2008 22:55:51 +0000 (17:55 -0500)]
"no sysfs" testcase: check return code of new-style context creation

12 years agoconvert "fake core id" testcase to new API
Nathan Lynch [Thu, 9 Oct 2008 22:54:06 +0000 (17:54 -0500)]
convert "fake core id" testcase to new API

Remove use of topology_nr_* functions.

12 years agouse topology_sizeof_cpumask in cpu set size testcase
Nathan Lynch [Thu, 9 Oct 2008 22:50:14 +0000 (17:50 -0500)]
use topology_sizeof_cpumask in cpu set size testcase

12 years agoexport topology_sizeof_cpumask API
Nathan Lynch [Thu, 9 Oct 2008 22:49:09 +0000 (17:49 -0500)]
export topology_sizeof_cpumask API

For use with new-style context objects.

12 years agoconvert "cpu present but offline" testcase to new API
Nathan Lynch [Thu, 9 Oct 2008 22:38:44 +0000 (17:38 -0500)]
convert "cpu present but offline" testcase to new API

Kill uses of old topology_nr_* API.

12 years agouse new api in "caches missing shared_cpu_map" testcase
Nathan Lynch [Thu, 9 Oct 2008 22:36:01 +0000 (17:36 -0500)]
use new api in "caches missing shared_cpu_map" testcase

We can remove the hack now.

12 years agoAllocate and free new-style context in testcases
Nathan Lynch [Thu, 9 Oct 2008 22:28:54 +0000 (17:28 -0500)]
Allocate and free new-style context in testcases

Testcases are now able to use the new-style API implicitly.

12 years agoadd testcase for new traversal API
Nathan Lynch [Thu, 9 Oct 2008 20:31:10 +0000 (15:31 -0500)]
add testcase for new traversal API

Uses topology_traverse to iterate over nodes, packages, cores, and
threads and verify the hierarchy.

12 years agoadd count_ents_at_level helper for testcases
Nathan Lynch [Thu, 9 Oct 2008 20:29:52 +0000 (15:29 -0500)]
add count_ents_at_level helper for testcases

This uses the new traversal API to count elements of the given type
below the given element (e.g. number of threads in a node).

12 years agoadd topology_init_context and topology_free_context
Nathan Lynch [Thu, 9 Oct 2008 20:28:36 +0000 (15:28 -0500)]
add topology_init_context and topology_free_context

New initialization and release functions.

12 years agoexport topology_traverse interface
Nathan Lynch [Thu, 9 Oct 2008 19:02:25 +0000 (14:02 -0500)]
export topology_traverse interface

Enables more flexible traversal between arbitrary processor objects.

12 years agouse only opaque types in topo_device API
Nathan Lynch [Thu, 9 Oct 2008 18:45:16 +0000 (13:45 -0500)]
use only opaque types in topo_device API

Returning unsigned longs means a user would have to try pretty hard to
dereference or free one of the library's internal data structures.

12 years agoadd testcase for incomplete cache info
Nathan Lynch [Thu, 9 Oct 2008 07:16:00 +0000 (02:16 -0500)]
add testcase for incomplete cache info

Mostly we're just ensuring that context initialization succeeds; also
check that no cache devices are registered.

12 years agofix sysfs population script regex
Nathan Lynch [Thu, 9 Oct 2008 07:13:32 +0000 (02:13 -0500)]
fix sysfs population script regex

sysfs-populate.awk is skipping lines with commas or spaces in the
file value; loosen the regex accordingly.

12 years agodon't error on failure to collect cache info
Nathan Lynch [Thu, 9 Oct 2008 07:12:05 +0000 (02:12 -0500)]
don't error on failure to collect cache info

Some kernel versions (e.g. 2.6.27-rc on powerpc) present cache
information in sysfs but lack the shared_cpu_map attribute, which is
necessary for uniquely identifying caches.  This was causing context
initialization to fail.

Proceed even if cache info collection fails.

12 years agofix double-free/memory corruption in build_context error path
Nathan Lynch [Thu, 9 Oct 2008 06:29:47 +0000 (01:29 -0500)]
fix double-free/memory corruption in build_context error path

If build_context() errors out after the system object is initialized and
added to the context list, the system object is freed, but not removed
from the list.  This causes context_release() to walk into freed memory,
passing garbage to free().

Alter alloc_init_topo_ent() so that it takes a context pointer and a
possibly-null parent.  If the parent is null, it now allocates a
system object appropriately.  Change the error path in build_context()
so that it does not free the system object; leave that up to

12 years agoadd testcase for shared L2 cache
Nathan Lynch [Wed, 8 Oct 2008 21:14:18 +0000 (16:14 -0500)]
add testcase for shared L2 cache

The previous commit ("uniquely identify caches") enables this test
to pass.

12 years agouniquely identify caches
Nathan Lynch [Wed, 8 Oct 2008 20:41:47 +0000 (15:41 -0500)]
uniquely identify caches

Until now we've been adding a device for each cache represention in
sysfs; problem is that each logical CPU's directory has information
for every cache it uses -- on systems where CPUs share cache, we get
duplicate entries in the device list.

Fix this by hashing on each cache object's (level,type,shared_cpu_map)
tuple, and weed out the duplicates.

12 years agoadd testcase for offline CPUs
Nathan Lynch [Wed, 8 Oct 2008 21:03:36 +0000 (16:03 -0500)]
add testcase for offline CPUs

I had thought we weren't handling this correctly,
but turns out I was wrong.  Add the testcase anyway.

12 years agoexport device APIs
Nathan Lynch [Wed, 8 Oct 2008 19:30:19 +0000 (14:30 -0500)]
export device APIs

Add to the header:

Signed-off-by: Nathan Lynch <>
12 years agorework device iteration
Nathan Lynch [Wed, 8 Oct 2008 18:42:39 +0000 (13:42 -0500)]
rework device iteration

No need for a separate function for beginning the search.

12 years agointroduce topo_device_get_attr_value
Nathan Lynch [Wed, 8 Oct 2008 18:34:37 +0000 (13:34 -0500)]
introduce topo_device_get_attr_value

Client code shouldn't really be exposed to the attribute structure
itself, so add an interface which returns the value of the given
attribute if it exists.  Convert the cache APIs to use it instead of
poking around in the attributes themselves.

12 years agoAdd -O to CFLAGS
Nathan Lynch [Wed, 8 Oct 2008 16:20:00 +0000 (11:20 -0500)]
Add -O to CFLAGS

This catches some uninitialized use bugs.

12 years agofix uninitialized use
Nathan Lynch [Wed, 8 Oct 2008 16:19:14 +0000 (11:19 -0500)]
fix uninitialized use

Caught when adding -O to CFLAGS.

12 years agoremove new_ prefix from identifiers
Nathan Lynch [Wed, 8 Oct 2008 15:13:55 +0000 (10:13 -0500)]
remove new_ prefix from identifiers

Now that the old code is gone, we can clean up the namespace.

12 years agoremove commented code
Nathan Lynch [Wed, 8 Oct 2008 15:05:14 +0000 (10:05 -0500)]
remove commented code

We can do fancy-pants traversal later if there's a need, for now the
full-list walk is adequate.

12 years agoconst cleanup
Nathan Lynch [Tue, 7 Oct 2008 23:49:15 +0000 (18:49 -0500)]
const cleanup

We should use it in function prototypes where appropriate, but
elsewhere it doesn't make much sense (to me).

12 years agoremove most of the old code
Nathan Lynch [Tue, 7 Oct 2008 21:57:04 +0000 (16:57 -0500)]
remove most of the old code

Stop piggybacking on topology_context and stash the new_topo_context
pointer in the topology_context_t directly.  Stop building and
releasing the old context, which enables deletion of most (all?) of
the code related to the old types.

12 years agoAdd device infrastructure and convert cache code
Nathan Lynch [Tue, 7 Oct 2008 21:06:08 +0000 (16:06 -0500)]
Add device infrastructure and convert cache code

Introduce topo_device, which has the following qualities:
- type (string)
- cpumask - the CPUs to which this device is affine or related
- a list of attributes (name-value pairs)

Hoping this will be generic enough to use for I/O, SPUs on
Cell... anything that's not a CPU.  Seems to work well enough for
processor caches.

Get rid of now-unused original cache code.

12 years agoremove struct topo_{node,package,core} types
Nathan Lynch [Tue, 7 Oct 2008 06:51:12 +0000 (01:51 -0500)]
remove struct topo_{node,package,core} types

No longer used.

12 years agoremove node, package, and core lists from old code
Nathan Lynch [Tue, 7 Oct 2008 06:48:22 +0000 (01:48 -0500)]
remove node, package, and core lists from old code

These lists are no longer used, so remove the code which initializes
and releases them.  Saves a few kilobytes at runtime.

12 years agoremove old node-related code
Nathan Lynch [Tue, 7 Oct 2008 06:31:41 +0000 (01:31 -0500)]
remove old node-related code

The node list in the "old" code is no longer meaningfully used, so
remove the code which builds it.

Now the only list which the old code builds is the thread list; we
have to keep it around until the new API supports caches.

12 years agoremove old core and package code
Nathan Lynch [Tue, 7 Oct 2008 06:00:45 +0000 (01:00 -0500)]
remove old core and package code

The core and package lists in the "old" code are no longer
meaningfully used, so remove all the code which builds them.

12 years agoremove *_extract functions
Nathan Lynch [Tue, 7 Oct 2008 05:10:11 +0000 (00:10 -0500)]
remove *_extract functions

The topology_*_valid functions are the only users, and they only need
to check their arguments against 0.

12 years agoconvert topology_for_each_node etc to new API
Nathan Lynch [Tue, 7 Oct 2008 04:32:58 +0000 (23:32 -0500)]
convert topology_for_each_node etc to new API

Change topology_first_node, topology_next_node, and
topology_node_cpumask to use the new API internally.

Remove list_next as it is no longer used.

12 years agoconvert topology_for_each_package etc to new API
Nathan Lynch [Tue, 7 Oct 2008 04:28:15 +0000 (23:28 -0500)]
convert topology_for_each_package etc to new API

Change topology_first_package, topology_next_package, and
topology_package_cpumask to use the new API internally.

12 years agoconvert topology_for_each_core etc to new API
Nathan Lynch [Tue, 7 Oct 2008 04:22:45 +0000 (23:22 -0500)]
convert topology_for_each_core etc to new API

Change topology_first_core, topology_next_core, and
topology_core_cpumask to use the new API internally.

12 years agoconvert topology_for_each_thread etc to new API
Nathan Lynch [Tue, 7 Oct 2008 04:13:35 +0000 (23:13 -0500)]
convert topology_for_each_thread etc to new API

Change topology_first_thread, topology_next_thread, and
topology_thread_cpumask to use the new API internally.

topology_first_cache is hacked to look up the right thread in the old
list, since the new code doesn't handle caches yet.  This keeps the
cache testcase working.

12 years agocheck topology_nr_* functions against new scheme
Nathan Lynch [Tue, 7 Oct 2008 03:26:09 +0000 (22:26 -0500)]
check topology_nr_* functions against new scheme

Place assertions in the topology_nr_* functions which check the old
code's results against the new code.

12 years agofix logic errors in next_at_level
Nathan Lynch [Tue, 7 Oct 2008 03:24:30 +0000 (22:24 -0500)]
fix logic errors in next_at_level

First, if we're supplied an iterator, traverse to the next node before
checking whether criteria are met.

Next, the logic in the while loop is incorrect -- we want to return an
entity iff its level matches and it is a descendant -- not one or the

12 years agoupdate cpumasks of all ancestors for each thread
Nathan Lynch [Tue, 7 Oct 2008 02:42:09 +0000 (21:42 -0500)]
update cpumasks of all ancestors for each thread

For every thread that is encountered, record its bit in its cpumask
and the cpumasks of all its parent objects.

12 years agoallocate cpumask for system object
Nathan Lynch [Tue, 7 Oct 2008 02:40:22 +0000 (21:40 -0500)]
allocate cpumask for system object

12 years agonew traversal API: enumerate threads
Nathan Lynch [Tue, 7 Oct 2008 02:21:27 +0000 (21:21 -0500)]
new traversal API: enumerate threads

Record threads internally in the new data structures.

12 years agonew traversal API: enumerate cores
Nathan Lynch [Tue, 7 Oct 2008 02:15:38 +0000 (21:15 -0500)]
new traversal API: enumerate cores

Record cores internally in the new data structures.

12 years agonew traversal API: enumerate packages
Nathan Lynch [Tue, 7 Oct 2008 02:06:40 +0000 (21:06 -0500)]
new traversal API: enumerate packages

Record packages internally in the new data structures.

12 years agoimplement do_new_node_cpus
Nathan Lynch [Tue, 7 Oct 2008 01:17:22 +0000 (20:17 -0500)]
implement do_new_node_cpus

And put a placeholder do_one_new_cpu in there to keep tests happy; the
implementation of that will probably be quite different from its

12 years agonew traversal API: enumerate nodes
Nathan Lynch [Wed, 8 Oct 2008 21:08:55 +0000 (16:08 -0500)]
new traversal API: enumerate nodes

Record nodes internally in the new data structures.

Modify probe_cpumask_size slightly so that both old and new code paths
can use it.

12 years agoadd core of new traversal API
Nathan Lynch [Mon, 6 Oct 2008 07:30:31 +0000 (02:30 -0500)]
add core of new traversal API

It's clear that the way things are going will result in a
combinatorial explosion of interfaces, especially when it comes to
traversing a subtree (e.g. for each thread in a given core), or
traversing between non-adjacent levels in the hierarchy (e.g. for each
thread in node).

This adds a new API - topology_traverse - which, given a particular
entity, allows traversal to any descendants or parent at the specified
level in the hierarchy.

The new API is unused as yet.  The plan is to convert the existing
APIs to use it internally, and then phase the out the old API.

12 years agorelease core and package hash tables earlier
Nathan Lynch [Sun, 5 Oct 2008 06:57:18 +0000 (01:57 -0500)]
release core and package hash tables earlier

They're not used after initialization, so release them before
returning from topology_get_context().

12 years agocpumasks: fix valgrind warnings
Nathan Lynch [Sun, 5 Oct 2008 04:49:58 +0000 (23:49 -0500)]
cpumasks: fix valgrind warnings

Commit 70aa32314ce59f07007c586cf1a6e32d2556e33d ("cpumasks: act on the
first option only") changed cpumasks to exit at the end of each of the
do_* functions, but exiting without releasing the context makes
valgrind complain about still-reachable memory.  Running cpumasks
under valgrind is useful for finding bugs that the testsuite might

Fix this up by being strict about getting only one option before doing
the getopt() loop and removing all the exits added before.

12 years agoidentify cores and packages via thread_siblings and core_siblings
Nathan Lynch [Sun, 5 Oct 2008 04:39:27 +0000 (23:39 -0500)]
identify cores and packages via thread_siblings and core_siblings

On machines where the kernel is not able to discover core and package
information, the /sys/devices/system/cpu/cpu*/core_id are all '0' and
/sys/devices/system/cpu/cpu*/package_id are all '-1'.  The latter was
actually handled fine by sysfs_cpu_package_id(), but there's no sane
way to handle the former -- '0' is a perfectly valid core identifier
and it's beyond me why this was chosen as a fallback value.

An example of a machine where this problem occurs is an ia64 IBM
8855-2RZ with 2 NUMA nodes and 4 processors per node (plain SMP, no
multi-core or multi-threading).  libtopology blows up on this machine
because it's as if individual cores and packages are spanning nodes.

So abandon core_id and package_id since we know at least the first is
unreliable.  Instead, use hash tables keyed on the thread_siblings and
core_siblings bitmaps to keep track of which cores and packages have
been seen already.

Update the one_core_smt4 test to have thread_siblings attributes.

Add a new fake_core_id testcase which was used to recreate the

12 years agoAPI type-safety overhaul
Nathan Lynch [Fri, 3 Oct 2008 21:28:45 +0000 (16:28 -0500)]
API type-safety overhaul

It's possible to erroneously pass a e.g. core object to a thread API
without any complaint from the compiler, since all topology types are
typedef'd unsigned long.  At runtime this kind of mistake can result
in crashes or silent memory corruption.

In an effort to make it impossible for users to get this wrong, define
each type as a struct with a single opaque unsigned long member.  The
build will fail if the kind of mistake described occurs.  The
traversal APIs (topology_(first|next)_*) now essentially return a
pointer to the object, which will enable further API enhancements.

Update tests and example in README to reflect change to

12 years agolist_to_ent: return NULL when appropriate
Nathan Lynch [Fri, 3 Oct 2008 18:52:43 +0000 (13:52 -0500)]
list_to_ent: return NULL when appropriate

While making some modifications to the traversal API this bit me.

12 years agolibtopology 0.1
Nathan Lynch [Fri, 3 Oct 2008 07:54:23 +0000 (02:54 -0500)]
libtopology 0.1

12 years agoimplement topology_nr_nodes() and doc
Nathan Lynch [Fri, 3 Oct 2008 07:10:57 +0000 (02:10 -0500)]
implement topology_nr_nodes() and doc

Guess I need to write a NUMA testcase...

12 years agodocumentation movement
Nathan Lynch [Fri, 3 Oct 2008 06:59:32 +0000 (01:59 -0500)]
documentation movement

Move all existing API documentation to topology.h, and give names to
function arguments to please doxygen.

Tweak Doxyfile so we only generate documentation for the exported
APIs, and inhibit sorting (APIs are listed in declaration order).

12 years agodocument topology_get_context() and all iterator interfaces
Nathan Lynch [Fri, 3 Oct 2008 02:04:33 +0000 (21:04 -0500)]
document topology_get_context() and all iterator interfaces

Be clear that the order in which topology entities are returned is

12 years agoupdate TODO
Nathan Lynch [Fri, 3 Oct 2008 00:26:59 +0000 (19:26 -0500)]
update TODO

Remove a couple items.

12 years agocpumasks: act on the first option only
Nathan Lynch [Fri, 3 Oct 2008 00:15:10 +0000 (19:15 -0500)]
cpumasks: act on the first option only

It's not very useful to handle every option given as there's no way to
tell the output for one type of entity from the next.  So exit after
the first option is processed.

12 years agocpumasks: remove self-test code, tweak usage()
Nathan Lynch [Fri, 3 Oct 2008 00:09:29 +0000 (19:09 -0500)]
cpumasks: remove self-test code, tweak usage()

The self-test code isn't really useful anymore.

Provide an exit code for usage() to pass to exit(), and add -h option
to invoke the usage statement.

12 years agocpumasks: add node support
Nathan Lynch [Fri, 3 Oct 2008 00:01:03 +0000 (19:01 -0500)]
cpumasks: add node support

cpumasks -n will print the cpu mask for each node in the system.

12 years agoadd basic numa interfaces
Nathan Lynch [Thu, 2 Oct 2008 23:53:12 +0000 (18:53 -0500)]
add basic numa interfaces

topology_for_each_node() (and requisite first, next, valid APIs)

12 years agolink threads to cores to packages to nodes
Nathan Lynch [Thu, 2 Oct 2008 23:34:10 +0000 (18:34 -0500)]
link threads to cores to packages to nodes

Introduce a linked list into each entity type which has its direct
"children".  This allows e.g. iteration over packages on a per-node
basis, iteration over each thread of a particular core, and traversal
from any point in the hierarchy to any other point.

12 years agolink thread to node
Nathan Lynch [Thu, 2 Oct 2008 22:53:25 +0000 (17:53 -0500)]
link thread to node

Similar to linking threads to cores, packages.

12 years agoadd basic NUMA support
Nathan Lynch [Thu, 2 Oct 2008 22:42:20 +0000 (17:42 -0500)]
add basic NUMA support

Record NUMA nodes in the context.  Rework context initialization to
proceed from the node level "down".

Nodes are not linked to other entities yet.

12 years agokill struct topo_ent_list
Nathan Lynch [Thu, 2 Oct 2008 20:07:44 +0000 (15:07 -0500)]
kill struct topo_ent_list

No longer used.

12 years agouse per-cpu linked lists for managing caches
Nathan Lynch [Thu, 2 Oct 2008 20:06:29 +0000 (15:06 -0500)]
use per-cpu linked lists for managing caches

The cache code still needs some more thought, but this allows us to
get rid of most of the remaining topo_ent_list APIs.

12 years agouse linked list for managing packages
Nathan Lynch [Thu, 2 Oct 2008 19:51:43 +0000 (14:51 -0500)]
use linked list for managing packages

Same story as cores.

Remove some topo_ent_list APIs that are no longer used.

12 years agouse linked list for managing cores
Nathan Lynch [Thu, 2 Oct 2008 19:34:49 +0000 (14:34 -0500)]
use linked list for managing cores

This is a more appropriate data structure for tracking cores as the domain
of core IDs is unspecified and not suited to indexing an array.

Also add some convenience functions for converting between topology
typedefs and list element pointers.