From: Pat Gefre General module.c clean up --- 25-akpm/arch/ia64/sn/io/sn2/module.c | 122 +++++++++-------------------------- 25-akpm/include/asm-ia64/sn/module.h | 1 2 files changed, 34 insertions(+), 89 deletions(-) diff -puN arch/ia64/sn/io/sn2/module.c~sn22 arch/ia64/sn/io/sn2/module.c --- 25/arch/ia64/sn/io/sn2/module.c~sn22 Thu Jan 8 15:18:56 2004 +++ 25-akpm/arch/ia64/sn/io/sn2/module.c Thu Jan 8 15:18:56 2004 @@ -39,40 +39,8 @@ int nummodules; #define SN00_SERIAL_FUDGE 0x3b1af409d513c2 #define SN0_SERIAL_FUDGE 0x6e -void -encode_int_serial(uint64_t src,uint64_t *dest) -{ - uint64_t val; - int i; - - val = src + SN00_SERIAL_FUDGE; - - - for (i = 0; i < sizeof(long long); i++) { - ((char*)dest)[i] = - ((char*)&val)[sizeof(long long)/2 + - ((i%2) ? ((i/2 * -1) - 1) : (i/2))]; - } -} - - -void -decode_int_serial(uint64_t src, uint64_t *dest) -{ - uint64_t val; - int i; - for (i = 0; i < sizeof(long long); i++) { - ((char*)&val)[sizeof(long long)/2 + - ((i%2) ? ((i/2 * -1) - 1) : (i/2))] = - ((char*)&src)[i]; - } - - *dest = val - SN00_SERIAL_FUDGE; -} - - -void +static void __init encode_str_serial(const char *src, char *dest) { int i; @@ -85,20 +53,8 @@ encode_str_serial(const char *src, char } } -void -decode_str_serial(const char *src, char *dest) -{ - int i; - - for (i = 0; i < MAX_SERIAL_NUM_SIZE; i++) { - dest[MAX_SERIAL_NUM_SIZE/2 + - ((i%2) ? ((i/2 * -1) - 1) : (i/2))] = src[i] - - SN0_SERIAL_FUDGE; - } -} - - -module_t *module_lookup(moduleid_t id) +module_t * __init +module_lookup(moduleid_t id) { int i; @@ -127,6 +83,7 @@ module_add_node(geoid_t geoid, cnodeid_t int i; char buffer[16]; moduleid_t moduleid; + slabid_t slab_number; memset(buffer, 0, 16); moduleid = geo_module(geoid); @@ -135,14 +92,16 @@ module_add_node(geoid_t geoid, cnodeid_t if ((m = module_lookup(moduleid)) == 0) { m = kmalloc(sizeof (module_t), GFP_KERNEL); - memset(m, 0 , sizeof(module_t)); ASSERT_ALWAYS(m); + memset(m, 0 , sizeof(module_t)); + + for (slab_number = 0; slab_number <= MAX_SLABS; slab_number++) { + m->nodes[slab_number] = -1; + } m->id = moduleid; spin_lock_init(&m->lock); - init_MUTEX(&m->thdcnt); - /* Insert in sorted order by module number */ for (i = nummodules; i > 0 && modules[i - 1]->id > moduleid; i--) @@ -152,17 +111,26 @@ module_add_node(geoid_t geoid, cnodeid_t nummodules++; } - m->nodes[m->nodecnt] = cnodeid; - m->geoid[m->nodecnt] = geoid; - m->nodecnt++; + /* + * Save this information in the correct slab number of the node in the + * module. + */ + slab_number = geo_slab(geoid); + DPRINTF("slab number added 0x%x\n", slab_number); + + if (m->nodes[slab_number] != -1) { + printk("module_add_node .. slab previously found\n"); + return NULL; + } - DPRINTF("module_add_node: module %s now has %d nodes\n", buffer, m->nodecnt); + m->nodes[slab_number] = cnodeid; + m->geoid[slab_number] = geoid; return m; } static int __init -module_probe_snum(module_t *m, nasid_t nasid) +module_probe_snum(module_t *m, nasid_t host_nasid, nasid_t nasid) { lboard_t *board; klmod_serial_num_t *comp; @@ -171,13 +139,10 @@ module_probe_snum(module_t *m, nasid_t n /* * record brick serial number */ - board = find_lboard((lboard_t *) KL_CONFIG_INFO(nasid), KLTYPE_SNIA); + board = find_lboard((lboard_t *) KL_CONFIG_INFO(host_nasid), KLTYPE_SNIA); if (! board || KL_CONFIG_DUPLICATE_BOARD(board)) { -#if LDEBUG - printf ("module_probe_snum: no IP35 board found!\n"); -#endif return 0; } @@ -186,12 +151,6 @@ module_probe_snum(module_t *m, nasid_t n encode_str_serial( serial_number, m->snum.snum_str ); m->snum_valid = 1; } -#if LDEBUG - else { - printf("module_probe_snum: brick serial number is null!\n"); - } - printf("module_probe_snum: brick serial number == %s\n", serial_number); -#endif /* DEBUG */ board = find_lboard((lboard_t *) KL_CONFIG_INFO(nasid), KLTYPE_IOBRICK_XBOW); @@ -202,22 +161,10 @@ module_probe_snum(module_t *m, nasid_t n comp = GET_SNUM_COMP(board); if (comp) { -#if LDEBUG - int i; - - printf("********found module with id %x and string", m->id); - - for (i = 0; i < MAX_SERIAL_NUM_SIZE; i++) - printf(" %x ", comp->snum.snum_str[i]); - - printf("\n"); /* Fudged string is not ASCII */ -#endif - if (comp->snum.snum_str[0] != '\0') { - memcpy(m->sys_snum, - comp->snum.snum_str, - MAX_SERIAL_NUM_SIZE); - m->sys_snum_valid = 1; + memcpy(m->sys_snum, comp->snum.snum_str, + MAX_SERIAL_NUM_SIZE); + m->sys_snum_valid = 1; } } @@ -243,21 +190,20 @@ io_module_init(void) nserial = 0; + /* + * First pass just scan for compute node boards KLTYPE_SNIA. + * We do not support memoryless compute nodes. + */ for (node = 0; node < numnodes; node++) { nasid = COMPACT_TO_NASID_NODEID(node); board = find_lboard((lboard_t *) KL_CONFIG_INFO(nasid), KLTYPE_SNIA); ASSERT(board); - m = module_add_node(board->brd_geoid, node); + HWGRAPH_DEBUG((__FILE__, __FUNCTION__, __LINE__, NULL, NULL, "Found Shub lboard 0x%lx nasid 0x%x cnode 0x%x \n", (unsigned long)board, (int)nasid, (int)node)); - if (! m->snum_valid && module_probe_snum(m, nasid)) + m = module_add_node(board->brd_geoid, node); + if (! m->snum_valid && module_probe_snum(m, nasid, nasid)) nserial++; } - - DPRINTF("********found total of %d serial numbers in the system\n", - nserial); - - if (nserial == 0) - DPRINTF(KERN_WARNING "io_module_init: No serial number found.\n"); } diff -puN include/asm-ia64/sn/module.h~sn22 include/asm-ia64/sn/module.h --- 25/include/asm-ia64/sn/module.h~sn22 Thu Jan 8 15:18:56 2004 +++ 25-akpm/include/asm-ia64/sn/module.h Thu Jan 8 15:18:56 2004 @@ -166,7 +166,6 @@ struct module_s { /* Fields for Module System Controller */ int mesgpend; /* Message pending */ int shutdown; /* Shutdown in progress */ - struct semaphore thdcnt; /* Threads finished counter */ time_t intrhist[MODULE_HIST_CNT]; int histptr; _