Not all architectures and configurations define CPU topology information.
This can result in an empty topology directory in sysfs, and requires
in-kernel users to protect all uses with #ifdef - see
<http://marc.info/?l=linux-netdev&m=120639033904472&w=2>.The documentation of CPU topology specifies what the defaults should be
if only partial information is available from the hardware. So we can
provide these defaults as a fallback.This patch:
- Adds default definitions of the 4 topology macros to
include/asm-generic/topology.h.
- Changes include/asm-*/topology.h to include <asm-generic/topology.h>
unconditionally.
- Changes drivers/base/topology.c to use the topology macros unconditionally
and to cope with definitions that aren't lvalues.
- Updates documentation accordingly.Signed-off-by: Ben Hutchings <bhutchings@solarflare.com>
diff --git a/Documentation/cputopology.txt b/Documentation/cputopology.txt
index b61cb95..c035481 100644
--- a/Documentation/cputopology.txt
+++ b/Documentation/cputopology.txt
@@ -14,9 +14,8 @@ represent the thread siblings to cpu X in the same physical package;
To implement it in an architecture-neutral way, a new source file,
drivers/base/topology.c, is to export the 4 attributes.-If one architecture wants to support this feature, it just needs to
-implement 4 defines, typically in file include/asm-XXX/topology.h.
-The 4 defines are:
+If one architecture wants to support this feature, it must define
+some of these macros in include/asm-XXX/topology.h:
#define topology_physical_package_id(cpu)
#define topology_core_id(cpu)
#define topology_thread_siblings(cpu)
@@ -25,17 +24,10 @@ The 4 defines are:
The type of **_id is int.
The type of siblings is cpumask_t.-To be consistent on all architectures, the 4 attributes should have
-default values if their values are unavailable. Below is the rule.
-1) physical_package_id: If cpu has no physical package id, -1 is the
-default value.
-2) core_id: If...
I get a huuuuuuuge crash early in boot on the t61p dual x86_64 laptop.
Before netconsole has started and it has no serial port, so all I have is a
partially-scrolled-off jpg, sorry.I'll drop the patch.
http://userweb.kernel.org/~akpm/p4175278.jpg
http://userweb.kernel.org/~akpm/config-t61p.txt
http://userweb.kernel.org/~akpm/dmesg-t61p.txtIf I didn't have all that wrong crap on the stack we'd have a full
trace here. I have CONFIG_FRAME_POINTER=y, but that doesn't seem to
have helped.--
<snip>
Damn, x86 is also using functions instead of macros. Sorry about that; I'll
have another try.Ben.
--
Ben Hutchings, Senior Software Engineer, Solarflare Communications
Not speaking for my employer; that's the marketing department's job.
--
ooh, I just discovered kstack=. That should be hoisted up to core kernel
then pushed out to other architectures, not hidden in x86_64 code.But first I guess it should be make to work - it fails miserably, because
only one of our seventy fix stack-dumping functions actually looks at it.This:
--- a/arch/x86/kernel/traps_64.c~a
+++ a/arch/x86/kernel/traps_64.c
@@ -426,7 +426,7 @@ _show_stack(struct task_struct *tsk, str
printk(" %016lx", *stack++);
touch_nmi_watchdog();
}
- show_trace(tsk, regs, sp, bp);
+// show_trace(tsk, regs, sp, bp);
}void show_stack(struct task_struct *tsk, unsigned long * sp)
works heaps better.
Here's the rest of your oops: http://userweb.kernel.org/~akpm/p4175279.jpg
I'd be suspecting startup ordering problems - maybe the page allocator
isn't ready yet.otoh, it _should_ be ready by the time we run init_sched_domains().
--
powerpc allmodconfig:
arch/powerpc/kernel/pci_64.c:655: error: expected identifier or '(' before 'void'
arch/powerpc/kernel/pci_64.c:655: error: expected ')' before '(' tokenBecause this:
#ifdef CONFIG_NUMA
int pcibus_to_node(struct pci_bus *bus)
{
struct pci_controller *phb = pci_bus_to_host(bus);
return phb->node;
}
#endifis expanding to
int ((void)(bus), -1)(struct pci_bus *bus)
which the compiler has trouble with.
This:
+++ a/include/asm-powerpc/topology.h
@@ -109,6 +109,8 @@ static inline void sysfs_remove_device_f
#endif
#endif+#define pcibus_to_node pcibus_to_node
+
#include <asm-generic/topology.h>#endif /* __KERNEL__ */
_gets it working, by tricking the preprocessor into expanding pcibus_to_node
to itself, but it isn't exactly pleasing.--
No, it isn't! But cputopology.txt does say these should be macros, not
functions.Ben.
--
Ben Hutchings, Senior Software Engineer, Solarflare Communications
Not speaking for my employer; that's the marketing department's job.
--
On Mon, 31 Mar 2008 12:44:13 +0100
I ran away in terror when I saw this patch. It's dark and dirty stuff
you're unearthing there and it looks like a minefield of compilation
problems. Not aided by the fact that we don't have a topology maintainer
afaik.We shall see.
--
i could pick it up into sched.git - it's a frequent party to topology
patches. We've now got automated cross-build checks as well by virtue of
Thomas so common build failures ought to be rare.Ingo
--
On Wed, 16 Apr 2008 14:51:33 +0200
OK, whatever. There's a tangle between this change and the s390 tree which
already has a tangle with one of the sched-gits which is sort-of getting
sorted out.git-s390 wasn't an appropriate place to host changes to
drivers/base/topology.c.--
very nice - i suspect this would be a patch for -mm.
Acked-by: Ingo Molnar <mingo@elte.hu>
Ingo
--
| Bart Van Assche | Integration of SCST in the mainstream Linux kernel |
| Tarkan Erimer | Re: Slow DOWN, please!!! |
| Greg Kroah-Hartman | [PATCH 004/196] Chinese: add translation of SubmittingPatches |
| Dave Hansen | Re: [RFC/PATCH] Documentation of kernel messages |
git: | |
| Sander | 'struct task_struct' has no member named 'mems_allowed' (was: Re: 2.6.20-rc4-mm1) |
| Evgeniy Polyakov | Re: [PATCH 3/3] Convert the UDP hash lock to RCU |
| Frans Pop | svc: failed to register lockdv1 RPC service (errno 97). |
| Stephen Hemminger | Re: HTB accuracy for high speed |
| Gerrit Renker | [PATCH 15/37] dccp: Set per-connection CCIDs via socket options |
