The previous mail was about the constants; now I have questions about the functions. :-)
What does "binding cannot be enforced" mean (i.e., when EXDEV is returned)? Assumedly the system supports binding (otherwise ENOSYS would have been returned). Does it mean, for example, that I asked for X memory on node Y, but node Y didn't have X memory available on node Y?
When EXDEV is returned, is valid memory returned (that must be freed via hwloc_free), or does the entire allocation fail?
Is the purpose of these 2 functions to query the memory binding policy for an (addr, len) tuple in the current process?
If so, what happens if there are multiple memory binding policies in effect for that tuple?
What is the purpose of the IN flags argument? Taking a guess: can you pass _PROCESS or _THREAD in to query the binding policy for this specific thread or the entire process? (and all other flags are ignored or illegal?)
Is the purpose of these 2 functions to query the memory binding polocy for the entire current process (or a thread in the current process)?
(assuming the other questions/answers from _get_area_membind are also relevant here)
It took me a while to notice the PID argument in this function, and that this was the main difference from hwloc_get_membind*. I assume that the documentation statement "Get current process memory binding in cpuset cpuset." is actually incorrect -- right? It shouldn't say "current" -- it should indicate that you can query the memory binding policy for the process specified by the pid argument, right? If so, is it equivalent to calling hwloc_get_membind* in that process?
Assumedly, you need some kind of rights on the target process -- either you're the owner of the process, or are superuser, ...or have some other administrative rights on the target. Right?
Several of the above questions (more-or-less) apply to hwloc_set_*mem*, so I'll refrain form listing them explicitly here.
For corporate legal information go to: