On Mon, Aug 16, 2004 at 08:54:26AM -0600, dann frazier wrote:
> Attached is a patch that updates the ia64-generic-no-smp patch in our
> kernel source tree to the latest one jbarnes has posted to linux-ia64.
> UP boots work for me with this updated patch.
> 
> hch: if you don't object, I'll add this to kernel-source today.
> 

Patch attached this time.

diff -urN kernel-source-2.6.8.defconfig/arch/ia64/kernel/acpi.c 
kernel-source-2.6.8.newupfix.defconfig/arch/ia64/kernel/acpi.c
--- kernel-source-2.6.8.defconfig/arch/ia64/kernel/acpi.c       2004-08-13 
23:36:58.000000000 -0600
+++ kernel-source-2.6.8.newupfix.defconfig/arch/ia64/kernel/acpi.c      
2004-08-15 15:49:38.000000000 -0600
@@ -618,9 +618,11 @@
                        if (smp_boot_data.cpu_phys_id[cpu] != 
hard_smp_processor_id())
                                node_cpuid[i++].phys_id = 
smp_boot_data.cpu_phys_id[cpu];
        }
-       build_cpu_to_node_map();
 # endif
 #endif
+#ifdef CONFIG_ACPI_NUMA
+       build_cpu_to_node_map();
+#endif
        /* Make boot-up look pretty */
        printk(KERN_INFO "%d CPUs available, %d CPUs total\n", available_cpus, 
total_cpus);
        return 0;
diff -urN kernel-source-2.6.8.defconfig/arch/ia64/kernel/cyclone.c 
kernel-source-2.6.8.newupfix.defconfig/arch/ia64/kernel/cyclone.c
--- kernel-source-2.6.8.defconfig/arch/ia64/kernel/cyclone.c    2004-08-14 
13:07:37.000000000 -0600
+++ kernel-source-2.6.8.newupfix.defconfig/arch/ia64/kernel/cyclone.c   
2004-08-15 15:49:31.000000000 -0600
@@ -1,8 +1,6 @@
-#include <linux/module.h>
 #include <linux/smp.h>
 #include <linux/time.h>
 #include <linux/errno.h>
-#include <asm/io.h>
 
 /* IBM Summit (EXA) Cyclone counter code*/
 #define CYCLONE_CBAR_ADDR 0xFEB00CD0
diff -urN kernel-source-2.6.8.defconfig/arch/ia64/kernel/numa.c 
kernel-source-2.6.8.newupfix.defconfig/arch/ia64/kernel/numa.c
--- kernel-source-2.6.8.defconfig/arch/ia64/kernel/numa.c       2004-08-14 
13:07:37.000000000 -0600
+++ kernel-source-2.6.8.newupfix.defconfig/arch/ia64/kernel/numa.c      
2004-08-15 15:49:38.000000000 -0600
@@ -1,46 +1,57 @@
+/*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * ia64 kernel NUMA specific stuff
+ *
+ * Copyright (C) 2002 Erich Focht <[EMAIL PROTECTED]>
+ * Copyright (C) 2004 Silicon Graphics, Inc.
+ *   Jesse Barnes <[EMAIL PROTECTED]>
+ */
 #include <linux/config.h>
 #include <linux/topology.h>
 #include <linux/module.h>
 #include <asm/processor.h>
 #include <asm/smp.h>
 
-#ifdef CONFIG_NUMA
-
-/* on which node is each logical CPU (one cacheline even for 64 CPUs) */
 u8 cpu_to_node_map[NR_CPUS] __cacheline_aligned;
 EXPORT_SYMBOL(cpu_to_node_map);
-/* which logical CPUs are on which nodes */
+
 cpumask_t node_to_cpu_mask[MAX_NUMNODES] __cacheline_aligned;
 
-/*
- * Build cpu to node mapping and initialize the per node cpu masks.
+/**
+ * build_cpu_to_node_map - setup cpu to node and node to cpumask arrays
+ *
+ * Build cpu to node mapping and initialize the per node cpu masks using
+ * info from the node_cpuid array handed to us by ACPI.
  */
-void __init
-build_cpu_to_node_map (void)
+void __init build_cpu_to_node_map(void)
 {
        int cpu, i, node;
 
-       for(node=0; node<MAX_NUMNODES; node++)
+       for(node=0; node < MAX_NUMNODES; node++)
                cpus_clear(node_to_cpu_mask[node]);
+
        for(cpu = 0; cpu < NR_CPUS; ++cpu) {
-               /*
-                * All Itanium NUMA platforms I know use ACPI, so maybe we
-                * can drop this ifdef completely.                    [EF]
-                */
-#ifdef CONFIG_ACPI_NUMA
                node = -1;
                for (i = 0; i < NR_CPUS; ++i)
                        if (cpu_physical_id(cpu) == node_cpuid[i].phys_id) {
                                node = node_cpuid[i].nid;
                                break;
                        }
-#else
-#              error Fixme: Dunno how to build CPU-to-node map.
-#endif
                cpu_to_node_map[cpu] = (node >= 0) ? node : 0;
                if (node >= 0)
                        cpu_set(cpu, node_to_cpu_mask[node]);
        }
 }
-
-#endif /* CONFIG_NUMA */
diff -urN kernel-source-2.6.8.defconfig/arch/ia64/kernel/setup.c 
kernel-source-2.6.8.newupfix.defconfig/arch/ia64/kernel/setup.c
--- kernel-source-2.6.8.defconfig/arch/ia64/kernel/setup.c      2004-08-13 
23:36:17.000000000 -0600
+++ kernel-source-2.6.8.newupfix.defconfig/arch/ia64/kernel/setup.c     
2004-08-15 15:49:38.000000000 -0600
@@ -317,11 +317,9 @@
        machvec_init(acpi_get_sysname());
 #endif
 
-#ifdef CONFIG_SMP
        /* If we register an early console, allow CPU 0 to printk */
        if (!early_console_setup())
                cpu_set(smp_processor_id(), cpu_online_map);
-#endif
 
 #ifdef CONFIG_ACPI_BOOT
        /* Initialize the ACPI boot-time table parser */
diff -urN kernel-source-2.6.8.defconfig/arch/ia64/mm/discontig.c 
kernel-source-2.6.8.newupfix.defconfig/arch/ia64/mm/discontig.c
--- kernel-source-2.6.8.defconfig/arch/ia64/mm/discontig.c      2004-08-14 
13:07:37.000000000 -0600
+++ kernel-source-2.6.8.newupfix.defconfig/arch/ia64/mm/discontig.c     
2004-08-15 15:49:38.000000000 -0600
@@ -398,8 +398,8 @@
  */
 static void __init initialize_pernode_data(void)
 {
-       int cpu, node;
        pg_data_t *pgdat_list[NR_NODES];
+       int cpu, node;
 
        for (node = 0; node < numnodes; node++)
                pgdat_list[node] = mem_data[node].pgdat;
@@ -409,12 +409,22 @@
                memcpy(mem_data[node].node_data->pg_data_ptrs, pgdat_list,
                       sizeof(pgdat_list));
        }
-
+#ifdef CONFIG_SMP
        /* Set the node_data pointer for each per-cpu struct */
        for (cpu = 0; cpu < NR_CPUS; cpu++) {
                node = node_cpuid[cpu].nid;
                per_cpu(cpu_info, cpu).node_data = mem_data[node].node_data;
        }
+#else
+       {
+               struct cpuinfo_ia64 *cpu0_cpu_info;
+               cpu = 0;
+               node = node_cpuid[cpu].nid;
+               cpu0_cpu_info = (struct cpuinfo_ia64 *)(__phys_per_cpu_start +
+                       ((char *)&per_cpu__cpu_info - __per_cpu_start));
+               cpu0_cpu_info->node_data = mem_data[node].node_data;
+       }
+#endif /* CONFIG_SMP */
 }
 
 /**
@@ -489,12 +499,11 @@
 {
        int cpu;
 
-       if (smp_processor_id() == 0) {
-               for (cpu = 0; cpu < NR_CPUS; cpu++) {
-                       per_cpu(local_per_cpu_offset, cpu) =
-                               __per_cpu_offset[cpu];
-               }
-       }
+       if (smp_processor_id() != 0)
+               return __per_cpu_start + __per_cpu_offset[smp_processor_id()];
+
+       for (cpu = 0; cpu < NR_CPUS; cpu++)
+               per_cpu(local_per_cpu_offset, cpu) = __per_cpu_offset[cpu];
 
        return __per_cpu_start + __per_cpu_offset[smp_processor_id()];
 }
diff -urN kernel-source-2.6.8.defconfig/drivers/serial/sn_console.c 
kernel-source-2.6.8.newupfix.defconfig/drivers/serial/sn_console.c
--- kernel-source-2.6.8.defconfig/drivers/serial/sn_console.c   2004-08-14 
13:07:37.000000000 -0600
+++ kernel-source-2.6.8.newupfix.defconfig/drivers/serial/sn_console.c  
2004-08-15 15:49:31.000000000 -0600
@@ -50,7 +50,6 @@
 #include <linux/miscdevice.h>
 #include <linux/serial_core.h>
 
-#include <asm/io.h>
 #include <asm/sn/simulator.h>
 #include <asm/sn/sn2/sn_private.h>
 #include <asm/sn/sn_sal.h>
@@ -1086,9 +1085,7 @@
                        spin_unlock_irqrestore(&port->sc_port.lock, flags);
 
                        puts_raw_fixed(port->sc_ops->sal_puts_raw, s, count);
-#if defined(CONFIG_SMP) || defined(CONFIG_PREEMPT)
                }
-#endif
        }
        else {
                /* Not yet registered with serial core - simple case */

Reply via email to