Re: [PATCH][RFC] Add default CPU topology information

Previous thread: [PATCH] Pass two of removing "__KERNEL__" tests from unexported headers. by Robert P. J. Day on Monday, March 31, 2008 - 6:25 am. (1 message)

Next thread: [ANNOUNCE] The Linux Test Project has been Released for MARCH 2008 by Subrata Modak on Monday, March 31, 2008 - 8:34 am. (1 message)
To: <linux-kernel@...>
Date: Monday, March 31, 2008 - 7:44 am

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...

To: Ben Hutchings <bhutchings@...>
Cc: <linux-kernel@...>, Ingo Molnar <mingo@...>, Arjan van de Ven <arjan@...>
Date: Friday, April 18, 2008 - 3:10 am

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.txt

If 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.

--

To: Andrew Morton <akpm@...>
Cc: <linux-kernel@...>, Ingo Molnar <mingo@...>, Arjan van de Ven <arjan@...>
Date: Friday, April 18, 2008 - 8:24 am

<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.
--

To: Ben Hutchings <bhutchings@...>, <linux-kernel@...>, Ingo Molnar <mingo@...>, Arjan van de Ven <arjan@...>
Date: Friday, April 18, 2008 - 3:32 am

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().

--

To: Ben Hutchings <bhutchings@...>
Cc: <linux-kernel@...>, Paul Mackerras <paulus@...>, Benjamin Herrenschmidt <benh@...>
Date: Friday, April 18, 2008 - 2:45 am

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 '(' token

Because this:

#ifdef CONFIG_NUMA
int pcibus_to_node(struct pci_bus *bus)
{
struct pci_controller *phb = pci_bus_to_host(bus);
return phb->node;
}
#endif

is 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.

--

To: Andrew Morton <akpm@...>
Cc: <linux-kernel@...>, Paul Mackerras <paulus@...>, Benjamin Herrenschmidt <benh@...>
Date: Friday, April 18, 2008 - 8:10 am

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.
--

To: Ben Hutchings <bhutchings@...>
Cc: <linux-kernel@...>, Ingo Molnar <mingo@...>
Date: Tuesday, April 15, 2008 - 3:42 pm

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.

--

To: Andrew Morton <akpm@...>
Cc: Ben Hutchings <bhutchings@...>, <linux-kernel@...>
Date: Wednesday, April 16, 2008 - 8:51 am

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
--

To: Ingo Molnar <mingo@...>
Cc: <bhutchings@...>, <linux-kernel@...>
Date: Wednesday, April 16, 2008 - 3:07 pm

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.

--

To: Ben Hutchings <bhutchings@...>
Cc: <linux-kernel@...>, Andrew Morton <akpm@...>
Date: Monday, March 31, 2008 - 8:35 am

very nice - i suspect this would be a patch for -mm.

Acked-by: Ingo Molnar <mingo@elte.hu>

Ingo
--

Previous thread: [PATCH] Pass two of removing "__KERNEL__" tests from unexported headers. by Robert P. J. Day on Monday, March 31, 2008 - 6:25 am. (1 message)

Next thread: [ANNOUNCE] The Linux Test Project has been Released for MARCH 2008 by Subrata Modak on Monday, March 31, 2008 - 8:34 am. (1 message)