Re: [2.6.24-rc8-mm1][regression?] numactl --interleave=all doesn't works on memoryless node.

KOSAKI Motohiro
2008-02-02T09:37:35Z

Hi Andi,

> > 3. 2.6.24-rc8-mm1 set_mempolicy(2) behavior
> > 3.1 check nodesubset(nodemask argument, node_states[N_HIGH_MEMORY])
> > in mpol_check_policy()
> >
> > -> check failed when memmoryless node exist.
> > (i.e. node_states[N_HIGH_MEMORY] of my machine is 0xc)
> >
> > 4. RHEL5.1 set_mempolicy(2) behavior
> > 4.1 check nodesubset(nodemask argument, node_online_map)
> > in mpol_check_policy().
> >
> > -> check success.
> >
> > I don't know wrong either kernel or libnuma.
>
> When the kernel behaviour changes and breaks user space then the kernel
> is usually wrong. Cc'ed Lee S. who maintains the kernel code now.

may be yes, may be no.

I have 1 simple question.
Why do libnuma generate bitpattern of all bit on instead
check /sys/devices/system/node/has_high_memory nor
check /sys/devices/system/node/online?

Do you know it?

and I made simple patch that has_high_memory exposed however CONFIG_HIGHMEM disabled.
if CONFIG_HIGHMEM disabled, the has_high_memory file show
the same as the has_normal_memory.

may be, userland process should check has_high_memory file.

but, I am not confident.
Thanks.

- kosaki

Signed-off-by: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>

---
drivers/base/node.c | 7 +------
1 file changed, 1 insertion(+), 6 deletions(-)

Index: b/drivers/base/node.c
===================================================================
--- a/drivers/base/node.c 2008-02-02 17:52:32.000000000 +0900
+++ b/drivers/base/node.c 2008-02-02 18:32:38.000000000 +0900
@@ -276,7 +276,6 @@ static SYSDEV_CLASS_ATTR(has_normal_memo
NULL);
static SYSDEV_CLASS_ATTR(has_cpu, 0444, print_nodes_has_cpu, NULL);

-#ifdef CONFIG_HIGHMEM
static ssize_t print_nodes_has_high_memory(struct sysdev_class *class,
char *buf)
{
@@ -285,15 +284,11 @@ static ssize_t print_nodes_has_high_memo

static SYSDEV_CLASS_ATTR(has_high_memory, 0444, print_nodes_has_high_memory,
NULL);
-#endif
-
struct sysdev_class_attribute *node_state_attr[] = {
&attr_possible,
&attr_online,
&attr_has_normal_memory,
-#ifdef CONFIG_HIGHMEM
&attr_has_high_memory,
-#endif
&attr_has_cpu,
};

@@ -302,7 +297,7 @@ static int node_states_init(void)
int i;
int err = 0;

- for (i = 0; i < NR_NODE_STATES; i++) {
+ for (i = 0; i < ARRAY_SIZE(node_state_attr); i++) {
int ret;
ret = sysdev_class_create_file(&node_class, node_state_attr[i]);
if (!err)