Re: [PATCH] Add vDSO for x86-64 with gettimeofday/clock_gettime/getcpu fix

Mel Gorman
2007-04-27T16:49:29Z

On (27/04/07 18:34), Andi Kleen didst pronounce:
> On Friday 27 April 2007 17:50:06 Mel Gorman wrote:
> > On (27/04/07 09:59), Mel Gorman didst pronounce:
> > > On (27/04/07 02:39), Andi Kleen didst pronounce:
> > > >
> > > >
> > > > > That's vdso.lds.S, not vdso.lds. The VDSO_TEXT_OFFSET is still 0x400.
> > > > > This is what I should have posted the last time
> > > > >
> > > > > --- build/arch/x86_64/vdso/voffset.h.orig 2007-04-26 08:43:31.523739878 -0700
> > > > > +++ build/arch/x86_64/vdso/voffset.h 2007-04-26 08:43:38.839579356 -0700
> > > > > @@ -1 +1 @@
> > > > > -#define VDSO_TEXT_OFFSET 0x500
> > > > > +#define VDSO_TEXT_OFFSET 0x400
> > > >
> > > > It's definitely 0x400 here. Is your patch reversed and you want 0x500?
> > > >
> > >
> > > Sorry, that patch is reversed. It's 0x500 it needs to be to work here.
> > >
> >
> > What I should have done in the first place..... Sorry for the noise.
>
> I had already fixed it up.
>

Cool

> But now can you test Suresh's latest patch too please?

I did earlier and it had merge problems. I had responded to the and I see
it in my sent-mail and Andy says he received it but it hasn't shown up on
lkml so somehow I screwed up. Here is the response again.

===== Rend earlier response =====
On (26/04/07 16:40), Siddha, Suresh B didst pronounce:
> On Thu, Apr 26, 2007 at 06:40:36PM +0100, Mel Gorman wrote:
> > NODE_DATA(0) was returning NULL because of
> > x86_64-set-node_possible_map-at-runtime.patch. This patch appears to
> > break acpi_scan_nodes() so that setup_node_bootmem() never gets called and
> > node_data[] remains full of zeros. Later on, reserve_bootmem_generic() is
> > called but with NODE_DATA(0) == NULL, it all goes pear shaped. Author of
> > patch cc'd.
>
> oops. Appended patch should fix this. Can you please check this and Ack it?
>

This patch does not apply cleanly to 2.6.21-rc7-mm2. Nor does
x86_64-set-node_possible_map-at-runtime.patch backout cleanly and when rejects
are fixed up, this patch still not apply cleanly . After fixing rejects
I ended up with the patch below that applies on top of 2.6.21-rc7-mm2. It
booted but it's not clear if the end result is what you intended. Could you
send a patch that applies cleanly on top of 2.6.21-rc7-mm2 and I'll give it
a test please? Thanks

diff -rup -X /usr/src/patchset-0.6/bin//dontdiff linux-2.6.21-rc7-mm2-clean/arch/x86_64/mm/numa.c linux-2.6.21-rc7-mm2-scratch/arch/x86_64/mm/numa.c
--- linux-2.6.21-rc7-mm2-clean/arch/x86_64/mm/numa.c 2007-04-27 10:24:47.000000000 +0100
+++ linux-2.6.21-rc7-mm2-scratch/arch/x86_64/mm/numa.c 2007-04-27 11:00:40.000000000 +0100
@@ -298,7 +298,7 @@ static int __init setup_node_range(int n
ret = -1;
}
nodes[nid].end = *addr;
- node_set(nid, node_possible_map);
+ node_set_online(nid);
printk(KERN_INFO "Faking node %d at %016Lx-%016Lx (%LuMB)\n", nid,
nodes[nid].start, nodes[nid].end,
(nodes[nid].end - nodes[nid].start) >> 20);
diff -rup -X /usr/src/patchset-0.6/bin//dontdiff linux-2.6.21-rc7-mm2-clean/arch/x86_64/mm/srat.c linux-2.6.21-rc7-mm2-scratch/arch/x86_64/mm/srat.c
--- linux-2.6.21-rc7-mm2-clean/arch/x86_64/mm/srat.c 2007-04-27 10:24:47.000000000 +0100
+++ linux-2.6.21-rc7-mm2-scratch/arch/x86_64/mm/srat.c 2007-04-27 10:58:33.000000000 +0100
@@ -25,6 +25,7 @@ int acpi_numa __initdata;

static struct acpi_table_slit *acpi_slit;

+static nodemask_t nodes_parsed __initdata;
static struct bootnode nodes[MAX_NUMNODES] __initdata;
static struct bootnode nodes_add[MAX_NUMNODES];
static int found_add_area __initdata;
@@ -42,7 +43,7 @@ static __init int setup_node(int pxm)
static __init int conflicting_nodes(unsigned long start, unsigned long end)
{
int i;
- for_each_node_mask(i, node_possible_map) {
+ for_each_node_mask(i, nodes_parsed) {
struct bootnode *nd = &nodes[i];
if (nd->start == nd->end)
continue;
@@ -320,7 +321,7 @@ acpi_numa_memory_affinity_init(struct ac
}
nd = &nodes[node];
oldnode = *nd;
- if (!node_test_and_set(node, node_possible_map)) {
+ if (!node_test_and_set(node, nodes_parsed)) {
nd->start = start;
nd->end = end;
} else {
@@ -343,7 +344,7 @@ acpi_numa_memory_affinity_init(struct ac
printk(KERN_NOTICE "SRAT: Hotplug region ignored\n");
*nd = oldnode;
if ((nd->start | nd->end) == 0)
- node_clear(node, node_possible_map);
+ node_clear(node, nodes_parsed);
}
}

@@ -355,7 +356,7 @@ static int nodes_cover_memory(void)
unsigned long pxmram, e820ram;

pxmram = 0;
- for_each_node_mask(i, node_possible_map) {
+ for_each_node_mask(i, nodes_parsed) {
unsigned long s = nodes[i].start >> PAGE_SHIFT;
unsigned long e = nodes[i].end >> PAGE_SHIFT;
pxmram += e - s;
@@ -379,7 +380,7 @@ static int nodes_cover_memory(void)
static void unparse_node(int node)
{
int i;
- node_clear(node, node_possible_map);
+ node_clear(node, nodes_parsed);
for (i = 0; i < MAX_LOCAL_APIC; i++) {
if (apicid_to_node[i] == node)
apicid_to_node[i] = NUMA_NO_NODE;
@@ -418,6 +419,8 @@ int __init acpi_scan_nodes(unsigned long
return -1;
}

+ node_possible_map = nodes_parsed;
+
/* Finally register nodes */
for_each_node_mask(i, node_possible_map)
setup_node_bootmem(i, nodes[i].start, nodes[i].end);