diff -ru NVIDIA_kernel-0.9-5/nv.c nvdriver_/nv.c --- NVIDIA_kernel-0.9-5/nv.c Sat Aug 26 02:48:38 2000 +++ nvdriver_/nv.c Thu Nov 9 00:23:42 2000 @@ -49,6 +49,13 @@ #include #endif +#ifndef mem_map_dec_count + #define mem_map_dec_count(p) atomic_inc(&((p)->count)); +#endif +#ifndef mem_map_inc_count + #define mem_map_inc_count(p) atomic_dec(&((p)->count)); +#endif + #include // needs to precede other headers (SMP) #include diff -ru NVIDIA_kernel-0.9-5/os-interface.c nvdriver_/os-interface.c --- NVIDIA_kernel-0.9-5/os-interface.c Fri Sep 1 04:19:17 2000 +++ nvdriver_/os-interface.c Thu Nov 9 00:22:45 2000 @@ -1331,6 +1331,11 @@ char *parmp; char ch; + spinlock_t unload_lock = SPIN_LOCK_UNLOCKED; + struct module *mp = THIS_MODULE; + struct module_symbol *sym; + int i; + if ((strlen(regParmStr) + NV_SYM_PREFIX_LENGTH) > NV_MAX_SYM_NAME) goto done; @@ -1351,11 +1356,17 @@ *symp = '\0'; - symbol_value = get_module_symbol(NV_MODULE_NAME, symbol_name); - -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 4, 0) - put_module_symbol(symbol_value); -#endif + spin_lock(&unload_lock); + if (MOD_CAN_QUERY(mp) && (mp->nsyms > 0)) { + for (i = mp->nsyms, sym = mp->syms; + i > 0; --i, ++sym) { + + if (strcmp(sym->name, symbol_name) == 0) { + symbol_value = sym->value; + break; + } + } + } + spin_unlock(&unload_lock); done: return (void *) symbol_value;