Commit 11199079 authored by Pat Gefre's avatar Pat Gefre Committed by David Mosberger

[PATCH] ia64: SN2 - remove node_first_cpu member

Remove node_first_cpu member from nodepda_s and replace its usage with calls
to sn_get_node_first_cpu().
parent 0f5b969a
...@@ -36,6 +36,25 @@ extern irqpda_t *irqpdaindr; ...@@ -36,6 +36,25 @@ extern irqpda_t *irqpdaindr;
extern cnodeid_t master_node_get(vertex_hdl_t vhdl); extern cnodeid_t master_node_get(vertex_hdl_t vhdl);
extern nasid_t master_nasid; extern nasid_t master_nasid;
cpuid_t
sn_get_node_first_cpu(cnodeid_t cnode) {
int cpuid = -1, slice;
for (slice = CPUS_PER_NODE - 1; slice >= 0; slice--) {
cpuid = cnode_slice_to_cpuid(cnode, slice);
if (cpuid == NR_CPUS)
continue;
if (!cpu_online(cpuid))
continue;
break;
}
if (slice < 0) {
return CPU_NONE;
}
return cpuid;
}
/* Initialize some shub registers for interrupts, both IO and error. */ /* Initialize some shub registers for interrupts, both IO and error. */
void intr_init_vecblk(cnodeid_t node) void intr_init_vecblk(cnodeid_t node)
{ {
...@@ -43,7 +62,6 @@ void intr_init_vecblk(cnodeid_t node) ...@@ -43,7 +62,6 @@ void intr_init_vecblk(cnodeid_t node)
sh_ii_int0_config_u_t ii_int_config; sh_ii_int0_config_u_t ii_int_config;
cpuid_t cpu; cpuid_t cpu;
cpuid_t cpu0, cpu1; cpuid_t cpu0, cpu1;
nodepda_t *lnodepda;
sh_ii_int0_enable_u_t ii_int_enable; sh_ii_int0_enable_u_t ii_int_enable;
sh_int_node_id_config_u_t node_id_config; sh_int_node_id_config_u_t node_id_config;
sh_local_int5_config_u_t local5_config; sh_local_int5_config_u_t local5_config;
...@@ -60,15 +78,13 @@ void intr_init_vecblk(cnodeid_t node) ...@@ -60,15 +78,13 @@ void intr_init_vecblk(cnodeid_t node)
HUB_S((unsigned long *)GLOBAL_MMR_ADDR(nasid, SH_INT_NODE_ID_CONFIG), HUB_S((unsigned long *)GLOBAL_MMR_ADDR(nasid, SH_INT_NODE_ID_CONFIG),
node_id_config.sh_int_node_id_config_regval); node_id_config.sh_int_node_id_config_regval);
cnode = nasid_to_cnodeid(master_nasid); cnode = nasid_to_cnodeid(master_nasid);
lnodepda = NODEPDA(cnode); cpu = sn_get_node_first_cpu(cnode);
cpu = lnodepda->node_first_cpu;
cpu = cpu_physical_id(cpu); cpu = cpu_physical_id(cpu);
SAL_CALL(ret_stuff, SN_SAL_REGISTER_CE, nasid, cpu, master_nasid,0,0,0,0); SAL_CALL(ret_stuff, SN_SAL_REGISTER_CE, nasid, cpu, master_nasid,0,0,0,0);
if (ret_stuff.status < 0) if (ret_stuff.status < 0)
printk("%s: SN_SAL_REGISTER_CE SAL_CALL failed\n",__FUNCTION__); printk("%s: SN_SAL_REGISTER_CE SAL_CALL failed\n",__FUNCTION__);
} else { } else {
lnodepda = NODEPDA(node); cpu = sn_get_node_first_cpu(node);
cpu = lnodepda->node_first_cpu;
cpu = cpu_physical_id(cpu); cpu = cpu_physical_id(cpu);
} }
......
...@@ -451,10 +451,6 @@ sn_cpu_init(void) ...@@ -451,10 +451,6 @@ sn_cpu_init(void)
} }
pda->shub_1_1_found = shub_1_1_found; pda->shub_1_1_found = shub_1_1_found;
if (local_node_data->active_cpu_count == 1)
nodepda->node_first_cpu = cpuid;
/* /*
* We must use different memory allocators for first cpu (bootmem * We must use different memory allocators for first cpu (bootmem
...@@ -474,7 +470,7 @@ sn_cpu_init(void) ...@@ -474,7 +470,7 @@ sn_cpu_init(void)
pda->mem_write_status_addr = (volatile u64 *) pda->mem_write_status_addr = (volatile u64 *)
LOCAL_MMR_ADDR((slice < 2 ? SH_MEMORY_WRITE_STATUS_0 : SH_MEMORY_WRITE_STATUS_1 ) ); LOCAL_MMR_ADDR((slice < 2 ? SH_MEMORY_WRITE_STATUS_0 : SH_MEMORY_WRITE_STATUS_1 ) );
if (nodepda->node_first_cpu == cpuid) { if (local_node_data->active_cpu_count++ == 0) {
int buddy_nasid; int buddy_nasid;
buddy_nasid = cnodeid_to_nasid(numa_node_id() == numnodes-1 ? 0 : numa_node_id()+ 1); buddy_nasid = cnodeid_to_nasid(numa_node_id() == numnodes-1 ? 0 : numa_node_id()+ 1);
pda->pio_shub_war_cam_addr = (volatile unsigned long*)GLOBAL_MMR_ADDR(nasid, SH_PI_CAM_CONTROL); pda->pio_shub_war_cam_addr = (volatile unsigned long*)GLOBAL_MMR_ADDR(nasid, SH_PI_CAM_CONTROL);
......
...@@ -500,9 +500,10 @@ sn_sal_connect_interrupt(void) ...@@ -500,9 +500,10 @@ sn_sal_connect_interrupt(void)
nasid_t console_nasid; nasid_t console_nasid;
unsigned int console_irq; unsigned int console_irq;
int result; int result;
extern cpuid_t sn_get_node_first_cpu(cnodeid_t cnode);
console_nasid = ia64_sn_get_console_nasid(); console_nasid = ia64_sn_get_console_nasid();
intr_cpuid = NODEPDA(NASID_TO_COMPACT_NODEID(console_nasid))->node_first_cpu; intr_cpuid = sn_get_node_first_cpu(NASID_TO_COMPACT_NODEID(console_nasid));
intr_cpuloc = cpu_physical_id(intr_cpuid); intr_cpuloc = cpu_physical_id(intr_cpuid);
console_irq = CPU_VECTOR_TO_IRQ(intr_cpuloc, SGI_UART_VECTOR); console_irq = CPU_VECTOR_TO_IRQ(intr_cpuloc, SGI_UART_VECTOR);
......
...@@ -20,7 +20,7 @@ typedef u64 hubreg_t; ...@@ -20,7 +20,7 @@ typedef u64 hubreg_t;
typedef u64 mmr_t; typedef u64 mmr_t;
typedef u64 nic_t; typedef u64 nic_t;
#define CNODE_TO_CPU_BASE(_cnode) (NODEPDA(_cnode)->node_first_cpu) #define CNODE_TO_CPU_BASE(_cnode) (sn_get_node_first_cpu(_cnode))
#define NASID_TO_COMPACT_NODEID(nasid) (nasid_to_cnodeid(nasid)) #define NASID_TO_COMPACT_NODEID(nasid) (nasid_to_cnodeid(nasid))
#define COMPACT_TO_NASID_NODEID(cnode) (cnodeid_to_nasid(cnode)) #define COMPACT_TO_NASID_NODEID(cnode) (cnodeid_to_nasid(cnode))
......
...@@ -36,13 +36,6 @@ ...@@ -36,13 +36,6 @@
struct nodepda_s { struct nodepda_s {
cpuid_t node_first_cpu; /* Starting cpu number for node */
/* WARNING: no guarantee that */
/* the second cpu on a node is */
/* node_first_cpu+1. */
vertex_hdl_t xbow_vhdl; vertex_hdl_t xbow_vhdl;
nasid_t xbow_peer; /* NASID of our peer hub on xbow */ nasid_t xbow_peer; /* NASID of our peer hub on xbow */
struct semaphore xbow_sema; /* Sema for xbow synchronization */ struct semaphore xbow_sema; /* Sema for xbow synchronization */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment