diff -ru random-0.7/version random-0.7/version --- random-0.7/.version 2001-11-20 09:19:59.000000000 +0100 +++ random-0.7/.version 2015-07-28 01:17:00.728013502 +0200 @@ -1 +1 @@ -0.7 +0.8 diff -ru random-0.7/Makefile random-0.7/Makefile --- random-0.7/Makefile 2000-11-19 09:55:37.000000000 +0100 +++ random-0.7/Makefile 2015-07-27 22:34:33.908082373 +0200 @@ -15,19 +15,12 @@ # # use this one # -CC = cc +CC = gcc # # for cc # -CFLAGS = -D_KERNEL -O -CFLAGS64 = -xarch=v9 - -# -# for gcc (support for 64 bit binaries?) -# -#CFLAGS = -D_KERNEL -O2 -#CFLAGS64 = +CFLAGS = -D_KERNEL -Os -fno-builtin # # version of random.c @@ -41,8 +34,8 @@ PKG = ANDIrand PACK = ${PKG}.pkg -OBJ = random-32.o random-64.o -MOD = random-32 random-64 +OBJ = random.o +MOD = random SCRIPTS = checkinstall random.init postinstall preremove postremove PKGFILES = pkginfo prototype copyright devlink.tab @@ -53,41 +46,31 @@ # all: ${PACK} -random-32.o: random.c +random.o: random.c $(CC) $(CFLAGS) -o $@ -c $? -random-32: random-32.o +random: random.o ld -r -o $@ $? -random-64.o: random.c - if [ -x /usr/bin/isainfo ]; then \ - if [ `/usr/bin/isainfo -b` -eq 64 ]; then \ - $(CC) $(CFLAGS) $(CFLAGS64) -o $@ -c $?; \ - else \ - touch $@; \ - fi; \ - else \ - touch $@; \ - fi - -random-64: random-64.o - if [ -x /usr/bin/isainfo ]; then \ - if [ `/usr/bin/isainfo -b` -eq 64 ]; then \ - ld -r -o $@ $?; \ - else \ - touch $@; \ - fi; \ - else \ - touch $@; \ - fi - -pkginfo: pkginfo.in +pkginfo: pkginfo.in sed -e "s/^ARCH=/ARCH=${ARCH}/" \ -e "s/XVERSION/${VERSION}/" $? > $@ -${PACK}: $(FILES) - pkgmk -o -d . -f prototype -p `date +%Y%m%d%H%M` - pkgtrans -s . $@ ${PKG} +install: $(FILES) + mkdir -p /usr/kernel/drv + cp random /usr/kernel/drv/random + cp random.conf /usr/kernel/drv/random.conf + cp random.init /etc/init.d/random + chmod 0755 /usr/kernel/drv/random + chown root:sys /usr/kernel/drv/random + chmod 0744 /etc/init.d/random + cd /etc/rc2.d ; ln -f ../init.d/random S60random + cd /etc/rc0.d ; ln -f ../init.d/random K50random + +${PACK}: install + pkgmk -r / -p `date +%Y%m%d%H%M` + pkgtrans -s /var/spool/pkg ${PACK} ${PKG} + rm -rf /var/spool/pkg/${PKG} clean: rm -rf ${PKG} ${PACK} diff -ru random-0.7/pkginfo.in random-0.7/pkginfo.in --- random-0.7/pkginfo.in 2000-11-19 09:54:46.000000000 +0100 +++ random-0.7/pkginfo.in 2015-07-27 22:21:04.578088092 +0200 @@ -1,11 +1,10 @@ PKG=ANDIrand NAME='random-XVERSION' -ARCH= +ARCH='i386' VERSION=XVERSION -CATEGORY=system +CATEGORY='system' DESC='random number generator' -CLASSES=none sed +CLASSES='none' HOTLINE='http://www.cosy.sbg.ac.at/~andi/' VENDOR='Andreas Maier' EMAIL='andi@cosy.sbg.ac.at' -BASEDIR=/ diff -ru random-0.7/postinstall random-0.7/postinstall --- random-0.7/postinstall 2015-07-28 02:05:50.547992800 +0200 +++ random-0.7/postinstall 2015-07-28 02:07:49.507991959 +0200 @@ -11,6 +11,9 @@ # 20.06.2000 wib add_drv during jumpstart needs -b # +echo "type=ddi_pseudo;name=random;addr=0;minor=random\t\\M0" >> /etc/devlink.tab +echo "type=ddi_pseudo;name=random;addr=0;minor=urandom\t\\M0" >> /etc/devlnk.tab + # # PKG_INSTALL_ROOT is empty if we are NOT installing during jumpstart # diff -ru render-0.7/postremove render-0.7/postremove --- random-0.7/postremove 2015-07-28 02:05:50.547992800 +0200 +++ random-0.7/postremove 2015-07-28 02:18:54.137987263 +0200 @@ -16,6 +16,8 @@ # we need to remove links from /dev +sed -e '/name=random\;/d' /etc/devlink.tab > /etc/devlink.tab.new +mv /etc/devlink.tab.new /etc/devlink.tab rm -f ${PKG_INSTALL_ROOT}/dev/random rm -f ${PKG_INSTALL_ROOT}/dev/urandom diff -ru random-0.7/prototype random-0.7/prototype --- random-0.7/prototype 2015-07-28 02:05:50.547992800 +0200 +++ random-0.7/prototype 2015-07-28 02:08:52.827991512 +0200 @@ -13,39 +13,18 @@ # pkg files # i pkginfo -i checkinstall i copyright i postinstall i preremove i postremove # -# directories -# -# -# default -# -!default 0755 root sys -# -d none /etc ? ? ? -d none /etc/init.d ? ? ? -d none /etc/rc0.d ? ? ? -d none /etc/rc2.d ? ? ? -d none /usr ? ? ? -d none /usr/kernel ? ? ? -d none /usr/kernel/drv ? ? ? -d km64 /usr/kernel/drv/sparcv9 ? ? ? -# # files # -f none /etc/init.d/random=random.init 0744 root sys +f none /etc/init.d/random 0744 root sys l none /etc/rc2.d/S60random=../init.d/random l none /etc/rc0.d/K50random=../init.d/random -# -e sed /etc/devlink.tab ? ? ? -# e none /usr/kernel/drv/random.conf 0644 root sys -f none /usr/kernel/drv/random=random-32 0755 root sys -f km64 /usr/kernel/drv/sparcv9/random=random-64 0755 root sys +f none /usr/kernel/drv/random 0755 root sys # # end of file # diff -ru random-0.7/random.c random-0.7/random.c --- random-0.7/random.c 2015-07-28 02:05:50.547992800 +0200 +++ random-0.7/random.c 2015-07-28 02:06:11.167992654 +0200 @@ -295,8 +295,9 @@ struct kstat *kstat_ksp; /* How often should we stir then entropy pool */ -extern uint_t ticks_per_stir = 1000; -timeout_id_t timer_id; +extern uint_t ticks_per_stir; +uint_t ticks_per_stir = 1000; +int timer_id; /* Set the default interval (in secs) to stir the random pool */ #define DEFAULT_INTERVAL 10 @@ -394,20 +395,20 @@ status_named_ksp = (random_status_kstat_t *)(kstat_ksp->ks_data); /* initialize the named kstats */ kstat_named_init(&status_named_ksp->open, - "open", KSTAT_DATA_UINT64); + "open", KSTAT_DATA_ULONGLONG); kstat_named_init(&status_named_ksp->extract_entropy, - "extract_entropy", KSTAT_DATA_UINT64); + "extract_entropy", KSTAT_DATA_ULONGLONG); kstat_named_init(&status_named_ksp->add_entropy, - "add_entropy", KSTAT_DATA_UINT64); + "add_entropy", KSTAT_DATA_ULONGLONG); kstat_named_init(&status_named_ksp->read, - "read", KSTAT_DATA_UINT64); + "read", KSTAT_DATA_ULONGLONG); kstat_named_init(&status_named_ksp->write, - "write", KSTAT_DATA_UINT64); + "write", KSTAT_DATA_ULONGLONG); kstat_named_init(&status_named_ksp->interval, - "interval", KSTAT_DATA_UINT64); - status_named_ksp->interval.value.ui64 = ticks_per_stir; + "interval", KSTAT_DATA_ULONGLONG); + status_named_ksp->interval.value.ull = ticks_per_stir; kstat_named_init(&status_named_ksp->wakeups, - "wake_ups", KSTAT_DATA_UINT64); + "wake_ups", KSTAT_DATA_ULONGLONG); kstat_install(kstat_ksp); @@ -534,7 +535,7 @@ } status_named_ksp = (random_status_kstat_t *)(kstat_ksp->ks_data); - status_named_ksp->open.value.ui64 += 1; + status_named_ksp->open.value.ull += 1; add_pid_rand (rsp); add_inode_1_rand (rsp); @@ -574,7 +575,7 @@ random_status_kstat_t *status_named_ksp; status_named_ksp = (random_status_kstat_t *)(kstat_ksp->ks_data); - status_named_ksp->read.value.ui64 += 1; + status_named_ksp->read.value.ull += 1; instance = getminor (dev) / 2; @@ -602,7 +603,7 @@ random_status_kstat_t *status_named_ksp; status_named_ksp = (random_status_kstat_t *)(kstat_ksp->ks_data); - status_named_ksp->write.value.ui64 += 1; + status_named_ksp->write.value.ull += 1; instance = getminor (dev) / 2; @@ -683,13 +684,12 @@ */ if(ticks_per_stir < 100) ticks_per_stir = 100; - status_named_ksp->interval.value.ui64 = ticks_per_stir; - status_named_ksp->wakeups.value.ui64 += 1; + status_named_ksp->interval.value.ull = ticks_per_stir; + status_named_ksp->wakeups.value.ull += 1; timer_id = timeout(rand_interval_stir, r, ticks_per_stir); } - - +#define FOLD_KSTAT(stat) ((stat << 16) ^ (stat >> 16)) /* add entropy be means of CPU kstats */ static void @@ -712,64 +712,78 @@ /* VMINFO */ /* minor page faults via as_fault() */ - X ^= (cpu_statptr->cpu_vminfo.as_fault << 16) ^ (cpu_statptr->cpu_vminfo.as_fault >> 16); + X ^= FOLD_KSTAT(cpu_statptr->cpu_vminfo.as_fault); /* copy-on-write faults */ - X ^= (cpu_statptr->cpu_vminfo.cow_fault << 16) ^ (cpu_statptr->cpu_vminfo.cow_fault >> 16); - /* executable pages paged in */ - X ^= (cpu_statptr->cpu_vminfo.execpgin << 16) ^ (cpu_statptr->cpu_vminfo.cow_fault >> 16); - /* fs pages paged in */ - X ^= (cpu_statptr->cpu_vminfo.fspgin << 16) ^ (cpu_statptr->cpu_vminfo.cow_fault >> 16); + X ^= FOLD_KSTAT(cpu_statptr->cpu_vminfo.cow_fault); + /* minor page faults via hat_fault() */ + X ^= FOLD_KSTAT(cpu_statptr->cpu_vminfo.hat_fault); + /* times pager scheduled */ + X ^= FOLD_KSTAT(cpu_statptr->cpu_vminfo.pgrrun); /* page reclaims (includes pageout) */ - X ^= (cpu_statptr->cpu_vminfo.pgrec << 16) ^ (cpu_statptr->cpu_vminfo.cow_fault >> 16); + X ^= FOLD_KSTAT(cpu_statptr->cpu_vminfo.pgfrec); /* page reclaims from free list */ - X ^= (cpu_statptr->cpu_vminfo.pgfrec << 16) ^ (cpu_statptr->cpu_vminfo.cow_fault >> 16); + X ^= FOLD_KSTAT(cpu_statptr->cpu_vminfo.pgfrec); /* pageins */ - X ^= (cpu_statptr->cpu_vminfo.pgin << 16) ^ (cpu_statptr->cpu_vminfo.cow_fault >> 16); + X ^= FOLD_KSTAT(cpu_statptr->cpu_vminfo.pgin); /* pages paged in */ - X ^= (cpu_statptr->cpu_vminfo.pgpgin << 16) ^ (cpu_statptr->cpu_vminfo.cow_fault >> 16); + X ^= FOLD_KSTAT(cpu_statptr->cpu_vminfo.pgpgin); /* pageouts */ - X ^= (cpu_statptr->cpu_vminfo.pgout << 16) ^ (cpu_statptr->cpu_vminfo.cow_fault >> 16); + X ^= FOLD_KSTAT(cpu_statptr->cpu_vminfo.pgout); /* pages paged out */ - X ^= (cpu_statptr->cpu_vminfo.pgpgout << 16) ^ (cpu_statptr->cpu_vminfo.cow_fault >> 16); + X ^= FOLD_KSTAT(cpu_statptr->cpu_vminfo.pgpgout); /* SYSINFO */ /* physical block reads */ - Y ^= (cpu_statptr->cpu_sysinfo.bread << 16) ^ (cpu_statptr->cpu_sysinfo.bread >> 16); + Y ^= FOLD_KSTAT(cpu_statptr->cpu_sysinfo.bread); /* physical block writes (sync+async) */ - Y ^= (cpu_statptr->cpu_sysinfo.bwrite << 16) ^ (cpu_statptr->cpu_sysinfo.bwrite >> 16); + Y ^= FOLD_KSTAT(cpu_statptr->cpu_sysinfo.bwrite); /* logical block reads */ - Y ^= (cpu_statptr->cpu_sysinfo.lread << 16) ^ (cpu_statptr->cpu_sysinfo.lread >> 16); + Y ^= FOLD_KSTAT(cpu_statptr->cpu_sysinfo.lread); /* logical block writes */ - Y ^= (cpu_statptr->cpu_sysinfo.lwrite << 16) ^ (cpu_statptr->cpu_sysinfo.lwrite >> 16); + Y ^= FOLD_KSTAT(cpu_statptr->cpu_sysinfo.lwrite); /* context switches */ - Y ^= (cpu_statptr->cpu_sysinfo.pswitch << 16) ^ (cpu_statptr->cpu_sysinfo.pswitch >> 16); + Y ^= FOLD_KSTAT(cpu_statptr->cpu_sysinfo.pswitch); /* traps */ - Y ^= (cpu_statptr->cpu_sysinfo.trap << 16) ^ (cpu_statptr->cpu_sysinfo.trap >> 16); + Y ^= FOLD_KSTAT(cpu_statptr->cpu_sysinfo.trap); /* device interrupts */ - Y ^= (cpu_statptr->cpu_sysinfo.intr << 16) ^ (cpu_statptr->cpu_sysinfo.intr >> 16); + Y ^= FOLD_KSTAT(cpu_statptr->cpu_sysinfo.intr); /* system calls */ - Y ^= (cpu_statptr->cpu_sysinfo.syscall << 16) ^ (cpu_statptr->cpu_sysinfo.syscall >> 16); + Y ^= FOLD_KSTAT(cpu_statptr->cpu_sysinfo.syscall); /* read() + readv() system calls */ - Y ^= (cpu_statptr->cpu_sysinfo.sysread << 16) ^ (cpu_statptr->cpu_sysinfo.sysread >> 16); + Y ^= FOLD_KSTAT(cpu_statptr->cpu_sysinfo.sysread); /* write() + writev() system calls */ - Y ^= (cpu_statptr->cpu_sysinfo.syswrite << 16) ^ (cpu_statptr->cpu_sysinfo.syswrite >> 16); + Y ^= FOLD_KSTAT(cpu_statptr->cpu_sysinfo.syswrite); /* forks */ - Y ^= (cpu_statptr->cpu_sysinfo.sysfork << 16) ^ (cpu_statptr->cpu_sysinfo.sysfork >> 16); + Y ^= FOLD_KSTAT(cpu_statptr->cpu_sysinfo.sysfork); /* vforks */ - Y ^= (cpu_statptr->cpu_sysinfo.sysvfork << 16) ^ (cpu_statptr->cpu_sysinfo.sysvfork >> 16); + Y ^= FOLD_KSTAT(cpu_statptr->cpu_sysinfo.sysvfork); /* execs */ - Y ^= (cpu_statptr->cpu_sysinfo.sysexec << 16) ^ (cpu_statptr->cpu_sysinfo.sysexec >> 16); + Y ^= FOLD_KSTAT(cpu_statptr->cpu_sysinfo.sysexec); /* bytes read by rdwr() */ - Y ^= (cpu_statptr->cpu_sysinfo.readch << 16) ^ (cpu_statptr->cpu_sysinfo.readch >> 16); + Y ^= FOLD_KSTAT(cpu_statptr->cpu_sysinfo.readch); /* bytes written by rdwr() */ - Y ^= (cpu_statptr->cpu_sysinfo.writech << 16) ^ (cpu_statptr->cpu_sysinfo.writech >> 16); + Y ^= FOLD_KSTAT(cpu_statptr->cpu_sysinfo.writech); /* interrupts as threads (below clock) */ - Y ^= (cpu_statptr->cpu_sysinfo.intrthread << 16) ^ (cpu_statptr->cpu_sysinfo.intrthread >> 16); + Y ^= FOLD_KSTAT(cpu_statptr->cpu_sysinfo.intrthread); /* intrs blkd/prempted/released (swtch) */ - Y ^= (cpu_statptr->cpu_sysinfo.intrblk << 16) ^ (cpu_statptr->cpu_sysinfo.intrblk >> 16); + Y ^= FOLD_KSTAT(cpu_statptr->cpu_sysinfo.intrblk); /* involuntary context switches */ - Y ^= (cpu_statptr->cpu_sysinfo.inv_swtch << 16) ^ (cpu_statptr->cpu_sysinfo.inv_swtch >> 16); + Y ^= FOLD_KSTAT(cpu_statptr->cpu_sysinfo.inv_swtch); + /* Semaphore op count */ + Y ^= FOLD_KSTAT(cpu_statptr->cpu_sysinfo.sema); + /* msgrecv() + msgsend() calls */ + Y ^= FOLD_KSTAT(cpu_statptr->cpu_sysinfo.msg); + /* Cross-calls (IPIs) */ + Y ^= FOLD_KSTAT(cpu_statptr->cpu_sysinfo.xcalls); + /* Failed mutex enters */ + Y ^= FOLD_KSTAT(cpu_statptr->cpu_sysinfo.mutex_adenters); + /* Number of times the idle thread was scheduled */ + Y ^= FOLD_KSTAT(cpu_statptr->cpu_sysinfo.idlethread); + /* Number of times the idle thread was scheduled */ + Y ^= FOLD_KSTAT(cpu_statptr->cpu_sysinfo.ufsdirblk); + /* ufs_iget() calls */ + Y ^= FOLD_KSTAT(cpu_statptr->cpu_sysinfo.ufsiget); /* cmn_err (CE_INFO, "CPU instance: %d: X %u: Y %u\n", */ /* threadp()->t_cpu->cpu_kstat->ks_instance, X, Y); */ @@ -783,13 +797,13 @@ static void add_inode_2_rand (struct rand_state * r) { - inode_t *pinode; - user_t puser; + struct inode *vnode; + struct proc *proc; - pinode = VTOI(ttoproc(curthread)->p_exec); - puser = ttoproc(curthread)->p_user; - add_entropy_words (r, (uint32_t) pinode->i_number, - (uint32_t) puser.u_ticks); + vnode = VTOI(ttoproc(curthread)->p_exec); + proc = ttoproc(curthread); + add_entropy_words (r, (uint32_t) vnode->i_number, + (uint32_t) proc->p_user.u_ticks); } @@ -798,13 +812,13 @@ static void add_inode_1_rand (struct rand_state * r) { - inode_t *pinode; - user_t puser; + struct inode *pinode; + struct proc *proc; pinode = VTOI(ttoproc(curthread)->p_exec); - puser = ttoproc(curthread)->p_user; + proc = ttoproc(curthread); add_entropy_words (r, (uint32_t) pinode->i_number, - (uint32_t) puser.u_start.tv_sec); + (uint32_t) proc->p_user.u_start); } @@ -898,7 +912,7 @@ mutex_enter (&(r->guard)); status_named_ksp = (random_status_kstat_t *)(kstat_ksp->ks_data); - status_named_ksp->add_entropy.value.ui64 += 1; + status_named_ksp->add_entropy.value.ull += 1; i = MASK (r->add_ptr - 2); /* no need to initialize add_ptr */ r->add_ptr = i; @@ -1080,7 +1094,7 @@ random_status_kstat_t *status_named_ksp; status_named_ksp = (random_status_kstat_t *)(kstat_ksp->ks_data); - status_named_ksp->extract_entropy.value.ui64 += 1; + status_named_ksp->extract_entropy.value.ull += 1; n = MAX_BEFORE_YIELD; while ((uiop->uio_resid > 0) && (n > 0)) {