diff -rcNP /usr/src/pristine-linux/arch/i386/kernel/entry.S /usr/src/linux-2.4.21-20.EL/arch/i386/kernel/entry.S *** /usr/src/pristine-linux/arch/i386/kernel/entry.S 2004-09-19 13:52:00.000000000 -0400 --- /usr/src/linux-2.4.21-20.EL/arch/i386/kernel/entry.S 2004-10-19 21:57:12.000000000 -0400 *************** *** 833,838 **** --- 833,839 ---- .long SYMBOL_NAME(sys_ni_syscall) /* sys_statfs64 */ .long SYMBOL_NAME(sys_ni_syscall) /* sys_fstatfs64 */ .long SYMBOL_NAME(sys_tgkill) /* 270 */ + .long SYMBOL_NAME(sys_getThreadInfo) /* 271 */ .rept NR_syscalls-(.-sys_call_table)/4 .long SYMBOL_NAME(sys_ni_syscall) diff -rcNP /usr/src/pristine-linux/include/asm-i386/unistd.h /usr/src/linux-2.4.21-20.EL/include/asm-i386/unistd.h *** /usr/src/pristine-linux/include/asm-i386/unistd.h 2004-09-19 13:53:46.000000000 -0400 --- /usr/src/linux-2.4.21-20.EL/include/asm-i386/unistd.h 2004-10-14 12:20:30.000000000 -0400 *************** *** 261,266 **** --- 261,267 ---- #define __NR_remap_file_pages 257 #define __NR_set_tid_address 258 #define __NR_tgkill 270 + #define __NR_getThreadInfo 271 /* user-visible error numbers are in the range -1 - -124: see */ diff -rcNP /usr/src/pristine-linux/include/linux/getthreadinfo.h /usr/src/linux-2.4.21-20.EL/include/linux/getthreadinfo.h *** /usr/src/pristine-linux/include/linux/getthreadinfo.h 1969-12-31 19:00:00.000000000 -0500 --- /usr/src/linux-2.4.21-20.EL/include/linux/getthreadinfo.h 2004-10-14 23:12:49.000000000 -0400 *************** *** 0 **** --- 1,15 ---- + /* Programmer: Spencer Shimko + * Project: Project 2 CS421 + * Date: 2004-10-14 + */ + + #ifndef __LINUX_GETTHREADINFO_H + #define __LINUX_GETTHREADINFO_H + + #include + #include + + _syscall2(int, getThreadInfo, int*, threads_max, int*, threads_running); + + #endif + diff -rcNP /usr/src/pristine-linux/include/linux/sys.h /usr/src/linux-2.4.21-20.EL/include/linux/sys.h *** /usr/src/pristine-linux/include/linux/sys.h 2004-09-19 13:54:05.000000000 -0400 --- /usr/src/linux-2.4.21-20.EL/include/linux/sys.h 2004-10-14 23:00:28.000000000 -0400 *************** *** 4,10 **** /* * system call entry points ... but not all are defined */ ! #define NR_syscalls 271 /* * These are system calls that will be removed at some time --- 4,10 ---- /* * system call entry points ... but not all are defined */ ! #define NR_syscalls 280 /* * These are system calls that will be removed at some time diff -rcNP /usr/src/pristine-linux/kernel/getthreadinfo.c /usr/src/linux-2.4.21-20.EL/kernel/getthreadinfo.c *** /usr/src/pristine-linux/kernel/getthreadinfo.c 1969-12-31 19:00:00.000000000 -0500 --- /usr/src/linux-2.4.21-20.EL/kernel/getthreadinfo.c 2004-10-19 22:04:33.000000000 -0400 *************** *** 0 **** --- 1,62 ---- + /* Programmer: Spencer Shimko + * Project: Project 2 CS421 + * Date: 2004-10-14 + */ + #include + #include + #include + + extern int max_threads; + extern int nr_threads; + + /* Syscall: getThreadInfo + * Parameters: userspace threads max and threads running + * Purpose: pass the max thread and running thread count to userspace + */ + asmlinkage int sys_getThreadInfo(int *threads_max, int *threads_running){ + /* variables used for error tracking */ + int err, had_err = 0; + + printk("Entering getThreadInfo!\n"); + + /* if we can safely write proceed else flag error */ + if ( access_ok ( VERIFY_WRITE, threads_max, sizeof(int) ) ){ + cli(); + /* copy into userspace */ + err = put_user ( max_threads, threads_max ); + sti(); + } else { + /* send sigsegv if unable to write to address */ + /* according to Prof. Joshi this is the "proper" + way to handle this case */ + force_sig(SIGSEGV, current); + } + + if ( err != 0 ){ + printk("Error putting threads_max\n"); + had_err = 1; + } + + err = 0; + + /* if we can safely write proceed else flag error */ + if ( access_ok ( VERIFY_WRITE, threads_running, sizeof(int) ) ){ + cli(); + /* copy into userspace */ + err = put_user ( nr_threads, threads_running ); + sti(); + } else { + /* send sigsegv if unable to write to address */ + /* according to Prof. Joshi this is the "proper" + way to handle this case */ + force_sig(SIGSEGV, current); + } + + if ( err != 0 ){ + printk("Error putting threads_running\n"); + had_err = 1; + } + + printk("Leaving getThreadInfo!\n"); + return (had_err); + } diff -rcNP /usr/src/pristine-linux/kernel/Makefile /usr/src/linux-2.4.21-20.EL/kernel/Makefile *** /usr/src/pristine-linux/kernel/Makefile 2004-09-19 13:54:06.000000000 -0400 --- /usr/src/linux-2.4.21-20.EL/kernel/Makefile 2004-10-14 23:20:28.000000000 -0400 *************** *** 16,22 **** module.o exit.o itimer.o info.o time.o softirq.o resource.o \ sysctl.o acct.o capability.o ptrace.o timer.o user.o \ signal.o sys.o kmod.o context.o \ ! futex.o pid.o kksymoops.o obj-$(CONFIG_UID16) += uid16.o obj-$(CONFIG_MODULES) += ksyms.o --- 16,22 ---- module.o exit.o itimer.o info.o time.o softirq.o resource.o \ sysctl.o acct.o capability.o ptrace.o timer.o user.o \ signal.o sys.o kmod.o context.o \ ! futex.o pid.o kksymoops.o getthreadinfo.o obj-$(CONFIG_UID16) += uid16.o obj-$(CONFIG_MODULES) += ksyms.o diff -rcNP /usr/src/pristine-linux/Makefile /usr/src/linux-2.4.21-20.EL/Makefile *** /usr/src/pristine-linux/Makefile 2004-09-19 13:51:58.000000000 -0400 --- /usr/src/linux-2.4.21-20.EL/Makefile 2004-10-14 11:42:33.000000000 -0400 *************** *** 1,7 **** VERSION = 2 PATCHLEVEL = 4 SUBLEVEL = 21 ! EXTRAVERSION = -20.ELcustom KERNELRELEASE=$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION) --- 1,7 ---- VERSION = 2 PATCHLEVEL = 4 SUBLEVEL = 21 ! EXTRAVERSION = -20.EL-sshimko1-project2 KERNELRELEASE=$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)