kernel and dump mods (2 of 2) for mass driver and fast dumps

Chris Torek chris at umcp-cs.UUCP
Sat Jan 5 19:13:45 AEST 1985


: Run this shell script with "sh" not "csh"
PATH=:/bin:/usr/bin:/usr/ucb
export PATH
all=FALSE
if [ $1x = -ax ]; then
	all=TRUE
fi
/bin/echo 'Extracting kernel_mods'
sed 's/^X//' <<'//go.sysin dd *' >kernel_mods
WARNING: You can't just apply these diffs.  There are comments next
to each to tell you why it's there.  Some of them are parts of other
fixes, some are local devices; anyway, you have to read the ``comments''.

Be sure to read the README first!

RCS file: RCS/conf.c,v
retrieving revision 1.1
diff -b -c1 -r1.1 conf.c
*** /tmp/,RCSt1003142	Fri Jan  4 23:00:18 1985
--- conf.c	Thu Jan  3 11:57:30 1985
*************** I think this one is obvious.
*** 14,16
  int	hpopen(),hpstrategy(),hpread(),hpwrite(),hpdump(),hpioctl(),hpsize();
! #else
  #define	hpopen		nodev

--- 14,16 -----
  int	hpopen(),hpstrategy(),hpread(),hpwrite(),hpdump(),hpioctl(),hpsize();
! #else NHP > 0
  #define	hpopen		nodev
*************** Likewise...
*** 22,24
  #define	hpsize		0
! #endif
   

--- 22,24 -----
  #define	hpsize		0
! #endif NHP > 0
   
*************** Here's an addition for the mass driver on TU77s.
*** 27,28
  int	htopen(),htclose(),htstrategy(),htread(),htwrite(),htdump(),htioctl();
  #else

--- 27,29 -----
  int	htopen(),htclose(),htstrategy(),htread(),htwrite(),htdump(),htioctl();
+ int	htmass();
  #else
*************** Again, but if you have no TU77s.
*** 35,36
  #define	htioctl		nodev
  #endif

--- 36,38 -----
  #define	htioctl		nodev
+ #define	htmass		0
  #endif
*************** Not sure what this is; something used at BRL.
*************** You probably don't want it.
*** 37,38
  
  #include "rk.h"

--- 39,51 -----
  
+ #include "rf.h"
+ #if NXF > 0
+ int	rfopen(),rfstrategy(),rfread(),rfwrite(),rfreset();
+ #else
+ #define	rfopen		nodev
+ #define rfstrategy	nodev
+ #define rfread		nodev
+ #define rfwrite		nodev
+ #define rfreset		nodev
+ #endif
+ 
  #include "rk.h"
*************** More mass driver stuff, this for the TS11.
*** 70,72
  int	tsopen(),tsclose(),tsstrategy(),tsread(),tswrite();
! int	tsioctl(),tsdump(),tsreset();
  #else

--- 83,85 -----
  int	tsopen(),tsclose(),tsstrategy(),tsread(),tswrite();
! int	tsioctl(),tsdump(),tsreset(),tsmass();
  #else
*************** Same, but if you have no TS11s.
*** 80,81
  #define	tsreset		nodev
  #endif

--- 93,95 -----
  #define	tsreset		nodev
+ #define	tsmass		0
  #endif
*************** Still more mass driver additions, for the TU78.
*** 85,87
  int	mtopen(),mtclose(),mtstrategy(),mtread(),mtwrite();
! int	mtioctl(),mtdump();
  #else

--- 99,101 -----
  int	mtopen(),mtclose(),mtstrategy(),mtread(),mtwrite();
! int	mtioctl(),mtdump(),mtmass();
  #else
*************** Mass driver stuff for when you have no TU78s.
*** 94,95
  #define	mtdump		nodev
  #endif

--- 108,110 -----
  #define	mtdump		nodev
+ #define	mtmass		0
  #endif
*************** The BRL rf disk, which you probably don't want.
*** 231,232
  	  rlsize,	0 },
  };

--- 246,249 -----
  	  rlsize,	0 },
+ 	{ rfopen,	nulldev,	rfstrategy,	nodev,		/*15*/
+ 	  0,		0 },
  };
*************** The dh ``outgoing mode'' mods, which I posted before.
*************** If you didn't get them then, you don't want this now.
*** 263,264
  #define	dh11	0
  #else

--- 280,285 -----
  #define	dh11	0
+ #define dhoopen nodev
+ #define dhoclose nodev
+ #define dhpopen nodev
+ #define dhpclose nodev
  #else
*************** Continuation of above...
*** 266,267
  struct	tty dh11[];
  #endif

--- 287,294 -----
  struct	tty dh11[];
+ #include "dho.h"
+ #if NDHO > 0
+ int	dhoopen(),dhoclose();
+ #else
+ #define dhoopen nodev
+ #define dhoclose nodev
  #endif
*************** Passive mode DH (doesn't quite work anyway; you don't want it)
*** 267,268
  #endif
  

--- 294,303 -----
  #endif
+ #include "dhp.h"
+ #if NDHP > 0
+ int	dhpopen(),dhpclose();
+ #else
+ #define dhpopen nodev
+ #define dhpclose nodev
+ #endif
+ #endif
  
*************** 1. The ``file descriptor'' pseudo-device.  If you didn't
***************    get a copy earlier, ignore these too.
*************** 2. The ``mass driver'' pseudo-device (from #include "driv.h"
***************    on.  Now this, you want....
*** 268,269
  
  #include "dmf.h"

--- 303,324 -----
  
+ #include "fd.h"
+ #if NFD > 0
+ int	fdopen();
+ #else
+ #define	fdopen	nodev
+ #endif NFD
+ 
+ #include "driv.h"
+ #if NDRIV > 0
+ int	drivopen(), drivclose(), drivread(), drivwrite(), drivioctl();
+ int	drivselect();
+ #else NDRIV > 0
+ #define drivopen	nodev
+ #define drivclose	nodev
+ #define drivread	nodev
+ #define drivwrite	nodev
+ #define drivioctl	nodev
+ #define drivselect	nodev
+ #endif NDRIV > 0
+ 
  #include "dmf.h"
*************** DZ outgoing mods.  Ignore these if you haven't got them
*************** already...
*** 302,303
  #define	dz_tty	0
  #else

--- 357,360 -----
  #define	dz_tty	0
+ #define dzoopen nodev
+ #define dzoclose nodev
  #else
*************** etc...
*** 305,306
  struct	tty dz_tty[];
  #endif

--- 362,369 -----
  struct	tty dz_tty[];
+ #include "dzo.h"
+ #if NDZO > 0
+ int	dzoopen(),dzoclose();
+ #else
+ #define dzoopen nodev
+ #define dzoclose nodev
  #endif
*************** etc...
*** 306,307
  #endif
  

--- 369,371 -----
  #endif
+ #endif
  
*************** Another BRL addition, the Ikonas frame buffer.  Ignore...
*** 411,412
  
  #include "ps.h"

--- 475,488 -----
  
+ #include "ik.h"
+ #if NIK > 0
+ int	ikopen(),ikclose(),ikread(),ikwrite(),ikioctl(),ikreset();
+ #else
+ #define ikopen nodev
+ #define ikclose nodev
+ #define ikread nodev
+ #define ikwrite nodev
+ #define ikioctl nodev
+ #define ikreset nodev
+ #endif
+ 
  #include "ps.h"
*************** Here come a bunch of BRL and U of MD local devices,
*************** which you also don't want.
*** 445,446
  
  int	ttselect(), seltrue();

--- 521,616 -----
  
+ #include "mg.h"				/* BRL */
+ #if NMG > 0
+ int	mgopen(),mgclose(),mgreset(),mgread(),mgwrite(),mgioctl(),mgselect();
+ #else
+ #define mgopen nodev
+ #define mgclose nodev
+ #define mgreset nodev
+ #define mgread nodev
+ #define mgwrite nodev
+ #define mgioctl nodev
+ #define mgselect nodev
+ #endif
+ 
+ #include "vg.h"				/* BRL */
+ #if NVG > 0
+ int	vgopen(),vgclose(),vgreset(),vgread(),vgwrite(),vgioctl(),vgselect();
+ #else
+ #define vgopen nodev
+ #define vgclose nodev
+ #define vgreset nodev
+ #define vgread nodev
+ #define vgwrite nodev
+ #define vgioctl nodev
+ #define vgselect nodev
+ #endif
+ 
+ #include "ump.h"				/* BRL */
+ #if NUMP > 0
+ int	umpopen(),umpclose(),umpread(),umpwrite(),umpioctl(),umpselect();
+ #else
+ #define umpopen nodev
+ #define umpclose nodev
+ #define umpread nodev
+ #define umpwrite nodev
+ #define umpioctl nodev
+ #define umpselect nodev
+ #endif
+ 
+ #include "hsw.h"				/* BRL */
+ #if NHSW > 0
+ int	hswopen(),hswclose(),hswread(),hswwrite(),hswselect();
+ #else
+ #define hswopen nodev
+ #define hswclose nodev
+ #define hswread nodev
+ #define hswwrite nodev
+ #define hswselect nodev
+ #endif
+ 
+ #include "lsb.h"				/* BRL */
+ #if NLSB > 0
+ int	lsbopen(),lsbclose(),lsbread(),lsbwrite(),lsbreset();
+ #else
+ #define lsbopen nodev
+ #define lsbclose nodev
+ #define lsbread nodev
+ #define lsbwrite nodev
+ #define lsbreset nodev
+ #endif
+ 
+ #include "mcd.h"				/* BRL */
+ #if NMCD > 0
+ int	mcdopen(),mcdclose(),mcdread(),mcdwrite(),mcdreset();
+ #else
+ #define mcdopen nodev
+ #define mcdclose nodev
+ #define mcdread nodev
+ #define mcdwrite nodev
+ #define mcdreset nulldev
+ #endif
+ 
+ #include "mss.h"				/* BRL */
+ #if NMSS > 0
+ int	mssopen(),mssclose(),mssselect(),mssreset(), mssioctl();
+ #else
+ #define	mssopen	nodev
+ #define	mssclose nodev
+ #define	mssselect nodev
+ #define	mssreset nodev
+ #define mssioctl nodev
+ #endif
+ 
+ /* zmob pseudo-device multiplexor FLB */
+ #include "zm.h"
+ #if NZM > 0
+ int   zmopen(),   zmclose(),   zmread(),   zmwrite(),   zmioctl();
+ #else
+ #define    zmopen nodev
+ #define   zmclose nodev
+ #define    zmread nodev
+ #define   zmwrite nodev
+ #define   zmioctl nodev
+ #endif
+ 
  int	ttselect(), seltrue();
*************** Here come changes to the cdevsw[] table, as described
*************** in the installation instructions.  You need to make
*************** the addition of ``0, 0,'' to each existing device in
*************** your own table (except of course for those devices with
*************** mass driver entries).
*** 451,453
  	cnioctl,	nulldev,	nulldev,	&cons,
! 	ttselect,	nodev,
  	dzopen,		dzclose,	dzread,		dzwrite,	/*1*/

--- 621,624 -----
  	cnioctl,	nulldev,	nulldev,	&cons,
! 	ttselect,	nodev,		0,		0,
! 
  	dzopen,		dzclose,	dzread,		dzwrite,	/*1*/
***************
*** 454,456
  	dzioctl,	dzstop,		dzreset,	dz_tty,
! 	ttselect,	nodev,
  	syopen,		nulldev,	syread,		sywrite,	/*2*/

--- 625,628 -----
  	dzioctl,	dzstop,		dzreset,	dz_tty,
! 	ttselect,	nodev,		0,		0,
! 
  	syopen,		nulldev,	syread,		sywrite,	/*2*/
***************
*** 457,459
  	syioctl,	nulldev,	nulldev,	0,
! 	syselect,	nodev,
  	nulldev,	nulldev,	mmread,		mmwrite,	/*3*/

--- 629,632 -----
  	syioctl,	nulldev,	nulldev,	0,
! 	syselect,	nodev,		0,		0,
! 
  	nulldev,	nulldev,	mmread,		mmwrite,	/*3*/
***************
*** 460,462
  	nodev,		nulldev,	nulldev,	0,
! 	mmselect,	nodev,
  	hpopen,		nulldev,	hpread,		hpwrite,	/*4*/

--- 633,636 -----
  	nodev,		nulldev,	nulldev,	0,
! 	mmselect,	nodev,		0,		0,
! 
  	hpopen,		nulldev,	hpread,		hpwrite,	/*4*/
***************
*** 463,465
  	hpioctl,	nodev,		nulldev,	0,
! 	seltrue,	nodev,
  	htopen,		htclose,	htread,		htwrite,	/*5*/

--- 637,640 -----
  	hpioctl,	nodev,		nulldev,	0,
! 	seltrue,	nodev,		0,		0,
! 
  	htopen,		htclose,	htread,		htwrite,	/*5*/
***************
*** 466,468
  	htioctl,	nodev,		nulldev,	0,
! 	seltrue,	nodev,
  	vpopen,		vpclose,	nodev,		vpwrite,	/*6*/

--- 641,644 -----
  	htioctl,	nodev,		nulldev,	0,
! 	seltrue,	nodev,		htmass,		htstrategy,
! 
  	vpopen,		vpclose,	nodev,		vpwrite,	/*6*/
***************
*** 469,471
  	vpioctl,	nulldev,	vpreset,	0,
! 	vpselect,	nodev,
  	nulldev,	nulldev,	swread,		swwrite,	/*7*/

--- 645,648 -----
  	vpioctl,	nulldev,	vpreset,	0,
! 	vpselect,	nodev,		0,		0,
! 
  	nulldev,	nulldev,	swread,		swwrite,	/*7*/
***************
*** 472,474
  	nodev,		nodev,		nulldev,	0,
! 	nodev,		nodev,
  	flopen,		flclose,	flread,		flwrite,	/*8*/

--- 649,652 -----
  	nodev,		nodev,		nulldev,	0,
! 	nodev,		nodev,		0,		0,
! 
  	flopen,		flclose,	flread,		flwrite,	/*8*/
***************
*** 475,477
  	nodev,		nodev,		nulldev,	0,
! 	seltrue,	nodev,
  	udopen,		nulldev,	udread,		udwrite,	/*9*/

--- 653,656 -----
  	nodev,		nodev,		nulldev,	0,
! 	seltrue,	nodev,		0,		0,
! 
  	udopen,		nulldev,	udread,		udwrite,	/*9*/
***************
*** 478,480
  	nodev,		nodev,		udreset,		0,
! 	seltrue,	nodev,
  	vaopen,		vaclose,	nodev,		vawrite,	/*10*/

--- 657,660 -----
  	nodev,		nodev,		udreset,	0,
! 	seltrue,	nodev,		0,		0,
! 
  	vaopen,		vaclose,	nodev,		vawrite,	/*10*/
***************
*** 481,483
  	vaioctl,	nulldev,	vareset,	0,
! 	vaselect,	nodev,
  	rkopen,		nulldev,	rkread,		rkwrite,	/*11*/

--- 661,664 -----
  	vaioctl,	nulldev,	vareset,	0,
! 	vaselect,	nodev,		0,		0,
! 
  	rkopen,		nulldev,	rkread,		rkwrite,	/*11*/
***************
*** 484,486
  	nodev,		nodev,		rkreset,	0,
! 	seltrue,	nodev,
  	dhopen,		dhclose,	dhread,		dhwrite,	/*12*/

--- 665,668 -----
  	nodev,		nodev,		rkreset,	0,
! 	seltrue,	nodev,		0,		0,
! 
  	dhopen,		dhclose,	dhread,		dhwrite,	/*12*/
***************
*** 487,489
  	dhioctl,	dhstop,		dhreset,	dh11,
! 	ttselect,	nodev,
  	upopen,		nulldev,	upread,		upwrite,	/*13*/

--- 669,672 -----
  	dhioctl,	dhstop,		dhreset,	dh11,
! 	ttselect,	nodev,		0,		0,
! 
  	upopen,		nulldev,	upread,		upwrite,	/*13*/
***************
*** 490,492
  	nodev,		nodev,		upreset,	0,
! 	seltrue,	nodev,
  	tmopen,		tmclose,	tmread,		tmwrite,	/*14*/

--- 673,676 -----
  	nodev,		nodev,		upreset,	0,
! 	seltrue,	nodev,		0,		0,
! 
  	tmopen,		tmclose,	tmread,		tmwrite,	/*14*/
***************
*** 493,495
  	tmioctl,	nodev,		tmreset,	0,
! 	seltrue,	nodev,
  	lpopen,		lpclose,	nodev,		lpwrite,	/*15*/

--- 677,680 -----
  	tmioctl,	nodev,		tmreset,	0,
! 	seltrue,	nodev,		0,		0,
! 
  	lpopen,		lpclose,	nodev,		lpwrite,	/*15*/
***************
*** 496,498
  	nodev,		nodev,		lpreset,	0,
! 	seltrue,	nodev,
  	tsopen,		tsclose,	tsread,		tswrite,	/*16*/

--- 681,684 -----
  	nodev,		nodev,		lpreset,	0,
! 	seltrue,	nodev,		0,		0,
! 
  	tsopen,		tsclose,	tsread,		tswrite,	/*16*/
***************
*** 499,501
  	tsioctl,	nodev,		tsreset,	0,
! 	seltrue,	nodev,
  	utopen,		utclose,	utread,		utwrite,	/*17*/

--- 685,688 -----
  	tsioctl,	nodev,		tsreset,	0,
! 	seltrue,	nodev,		tsmass,		tsstrategy,
! 
  	utopen,		utclose,	utread,		utwrite,	/*17*/
***************
*** 502,504
  	utioctl,	nodev,		utreset,	0,
! 	seltrue,	nodev,
  	ctopen,		ctclose,	nodev,		ctwrite,	/*18*/

--- 689,692 -----
  	utioctl,	nodev,		utreset,	0,
! 	seltrue,	nodev,		0,		0,
! 
  	ctopen,		ctclose,	nodev,		ctwrite,	/*18*/
***************
*** 505,507
  	nodev,		nodev,		nulldev,	0,
! 	seltrue,	nodev,
  	mtopen,		mtclose,	mtread,		mtwrite,	/*19*/

--- 693,696 -----
  	nodev,		nodev,		nulldev,	0,
! 	seltrue,	nodev,		0,		0,
! 
  	mtopen,		mtclose,	mtread,		mtwrite,	/*19*/
***************
*** 508,510
  	mtioctl,	nodev,		nodev,		0,
! 	seltrue,	nodev,
  	ptsopen,	ptsclose,	ptsread,	ptswrite,	/*20*/

--- 697,700 -----
  	mtioctl,	nodev,		nodev,		0,
! 	seltrue,	nodev,		mtmass,		mtstrategy,
! 
  	ptsopen,	ptsclose,	ptsread,	ptswrite,	/*20*/
***************
*** 511,513
  	ptyioctl,	ptsstop,	nodev,		pt_tty,
! 	ttselect,	nodev,
  	ptcopen,	ptcclose,	ptcread,	ptcwrite,	/*21*/

--- 701,704 -----
  	ptyioctl,	ptsstop,	nodev,		pt_tty,
! 	ttselect,	nodev,		0,		0,
! 
  	ptcopen,	ptcclose,	ptcread,	ptcwrite,	/*21*/
***************
*** 514,516
  	ptyioctl,	nulldev,	nodev,		pt_tty,
! 	ptcselect,	nodev,
  	dmfopen,	dmfclose,	dmfread,	dmfwrite,	/*22*/

--- 705,708 -----
  	ptyioctl,	nulldev,	nodev,		pt_tty,
! 	ptcselect,	nodev,		0,		0,
! 
  	dmfopen,	dmfclose,	dmfread,	dmfwrite,	/*22*/
***************
*** 517,519
  	dmfioctl,	dmfstop,	dmfreset,	dmf_tty,
! 	ttselect,	nodev,
  	idcopen,	nulldev,	idcread,	idcwrite,	/*23*/

--- 709,712 -----
  	dmfioctl,	dmfstop,	dmfreset,	dmf_tty,
! 	ttselect,	nodev,		0,		0,
! 
  	idcopen,	nulldev,	idcread,	idcwrite,	/*23*/
***************
*** 520,522
  	nodev,		nodev,		idcreset,	0,
! 	seltrue,	nodev,
  	dnopen,		dnclose,	nodev,		dnwrite,	/*24*/

--- 713,716 -----
  	nodev,		nodev,		idcreset,	0,
! 	seltrue,	nodev,		0,		0,
! 
  	dnopen,		dnclose,	nodev,		dnwrite,	/*24*/
***************
*** 523,526
  	nodev,		nodev,		nodev,		0,
! 	seltrue,	nodev,
! /* 25-29 reserved to local sites */
  	gpibopen,	gpibclose,	gpibread,	gpibwrite,	/*25*/

--- 717,720 -----
  	nodev,		nodev,		nodev,		0,
! 	seltrue,	nodev,		0,		0,
! 
  	gpibopen,	gpibclose,	gpibread,	gpibwrite,	/*25*/
***************
*** 527,529
  	gpibioctl,	nulldev,	nodev,		0,
! 	seltrue,	nodev,
  	lpaopen,	lpaclose,	lparead,	lpawrite,	/*26*/

--- 721,724 -----
  	gpibioctl,	nulldev,	nodev,		0,
! 	seltrue,	nodev,		0,		0,
! 
  	lpaopen,	lpaclose,	lparead,	lpawrite,	/*26*/
***************
*** 530,532
  	lpaioctl,	nodev,		nulldev,	0,
! 	seltrue,	nodev,
  	psopen,		psclose,	psread,		pswrite,	/*27*/

--- 725,728 -----
  	lpaioctl,	nodev,		nulldev,	0,
! 	seltrue,	nodev,		0,		0,
! 
  	psopen,		psclose,	psread,		pswrite,	/*27*/
***************
*** 533,535
  	psioctl,	nodev,		psreset,	0,
! 	seltrue,	nodev,
  	ibopen,		ibclose,	ibread,		ibwrite,	/*28*/

--- 729,732 -----
  	psioctl,	nodev,		psreset,	0,
! 	seltrue,	nodev,		0,		0,
! 
  	ibopen,		ibclose,	ibread,		ibwrite,	/*28*/
***************
*** 536,538
  	ibioctl,	nodev,		nodev,		0,
! 	seltrue,	nodev,
  	adopen,		adclose,	nodev,		nodev,		/*29*/

--- 733,736 -----
  	ibioctl,	nodev,		nodev,		0,
! 	seltrue,	nodev,		0,		0,
! 
  	adopen,		adclose,	nodev,		nodev,		/*29*/
***************
*** 539,541
  	adioctl,	nodev,		adreset,	0,
! 	seltrue,	nodev,
  	rxopen,		rxclose,	rxread,		rxwrite,	/*30*/

--- 737,740 -----
  	adioctl,	nodev,		adreset,	0,
! 	seltrue,	nodev,		0,		0,
! 
  	rxopen,		rxclose,	rxread,		rxwrite,	/*30*/
***************
*** 542,544
  	rxioctl,	nodev,		rxreset,	0,
! 	seltrue,	nodev,
  	ikopen,		ikclose,	ikread,		ikwrite,	/*31*/

--- 741,744 -----
  	rxioctl,	nodev,		rxreset,	0,
! 	seltrue,	nodev,		0,		0,
! 
  	ikopen,		ikclose,	ikread,		ikwrite,	/*31*/
***************
*** 545,548
  	ikioctl,	nodev,		ikreset,	0,
! 	seltrue,	nodev,
! 	rlopen,		nodev,		rlread,		rlwrite,	/* 32 */
  	nodev,		nodev,		rlreset,	0,

--- 745,749 -----
  	ikioctl,	nodev,		ikreset,	0,
! 	seltrue,	nodev,		0,		0,
! 
! 	rlopen,		nodev,		rlread,		rlwrite,	/*32*/
  	nodev,		nodev,		rlreset,	0,
*************** Here come lots of additions.  The mass driver entry
*************** is at the end of these.
*** 548,550
  	nodev,		nodev,		rlreset,	0,
! 	seltrue,	nodev,
  };

--- 749,813 -----
  	nodev,		nodev,		rlreset,	0,
! 	seltrue,	nodev,		0,		0,
! 
! /* BRL additions */
! 
! 	rfopen,		nulldev,	rfread,		rfwrite,	/*33*/
! 	nodev,		nodev,		rfreset,	0,
! 	seltrue,	nodev,		0,		0,
! 
! 	vgopen,		vgclose,	vgread,		vgwrite,	/*34*/
! 	vgioctl,	nodev,		vgreset,	0,
! 	vgselect,	nodev,		0,		0,
! 
! 	umpopen,	umpclose,	umpread,	umpwrite,	/*35*/
! 	umpioctl,	nodev,		nulldev,	0,
! 	umpselect,	nodev,		0,		0,
! 
! 	hswopen,	hswclose,	hswread,	hswwrite,	/*36*/
! 	nodev,		nodev,		nulldev,	0,
! 	hswselect,	nodev,		0,		0,
! 
! 	lsbopen,	lsbclose,	lsbread,	lsbwrite,	/*37*/
! 	nodev,		nodev,		lsbreset,	0,
! 	seltrue,	nodev,		0,		0,
! 
! 	mcdopen,	mcdclose,	mcdread,	mcdwrite,	/*38*/
! 	nodev,		nodev,		mcdreset,	0,
! 	seltrue,	nodev,		0,		0,
! 
! 	mssopen,	mssclose,	nodev,		nodev,		/*39*/
! 	mssioctl,	nodev,		mssreset,	0,
! 	mssselect,	nodev,		0,		0,
! 
! 	mgopen,		mgclose,	mgread,		mgwrite,	/*40*/
! 	mgioctl,	nodev,		mgreset,	0,
! 	mgselect,	nodev,		0,		0,
! 
! /* U of MD additions */
! 
! 	dzoopen,	dzoclose,	dzread,		dzwrite,	/*41*/
! 	dzioctl,	dzstop,		nulldev,	dz_tty,
! 	ttselect,	nodev,		0,		0,
! 
! 	dhoopen,	dhoclose,	dhread,		dhwrite,	/*42*/
! 	dhioctl,	dhstop,		nulldev,	dh11,
! 	ttselect,	nodev,		0,		0,
! 
! 	dhpopen,	dhpclose,	dhread,		dhwrite,	/*43*/
! 	dhioctl,	dhstop,		nulldev,	dh11,
! 	ttselect,	nodev,		0,		0,
! 
! 	fdopen,		nodev,		nodev,		nodev,		/*44*/
! 	nodev,		nodev,		nodev,		0,
! 	nodev,		nodev,		0,		0,
! 
! /* moblet multiplexor device: FLB */
! 	zmopen,		zmclose,	zmread,		zmwrite,	/*45*/
! 	zmioctl,	nodev,		nulldev,	0,
! 	seltrue,	nodev,		0,		0,
! 
! /* mass driver */
! 	drivopen,	drivclose,	drivread,	drivwrite,	/*46*/
! 	drivioctl,	nodev,		nulldev,	0,
! 	drivselect,	nodev,		0,		0,
  };
*************** Just a minor format gripe.
*** 550,551
  };
  int	nchrdev = sizeof (cdevsw) / sizeof (cdevsw[0]);

--- 813,815 -----
  };
+ 
  int	nchrdev = sizeof (cdevsw) / sizeof (cdevsw[0]);
RCS file: RCS/conf.h,v
retrieving revision 1.1
diff -b -c1 -r1.1 conf.h
*** /tmp/,RCSt1003100	Fri Jan  4 22:59:28 1985
--- conf.h	Thu Jan  3 11:58:43 1985
*************** Here we have the new entries in character (raw) devices
*************** to allow them to be used by the mass driver.
*** 39,40
  	int	(*d_mmap)();
  };

--- 39,42 -----
  	int	(*d_mmap)();
+ 	int	(*d_mass)();
+ 	int	(*d_bstrat)();
  };
RCS file: RCS/fs.h,v
retrieving revision 1.1
diff -b -c1 -r1.1 fs.h
*** /tmp/,RCSt1003110	Fri Jan  4 22:59:37 1985
--- fs.h	Wed Jan  2 09:50:21 1985
*************** Minor glitch in comments fixed.
*** 89,92
   * within the bounds dictated by MINBSIZE.
!  * Note that super blocks are always of size MAXBSIZE,
!  * and that MAXBSIZE must be >= MINBSIZE.
   */

--- 89,92 -----
   * within the bounds dictated by MINBSIZE.
!  * Note that super blocks are always of size SBSIZE,
!  * and that both SBSIZE and MAXBSIZE must be >= MINBSIZE.
   */
RCS file: RCS/ht.c,v
retrieving revision 1.1
diff -b -c1 -r1.1 ht.c
*** /tmp/,RCSt1003196	Fri Jan  4 23:01:37 1985
--- ht.c	Wed Jan  2 12:19:05 1985
*************** Don't need conf.h in ht.c.
*** 18,20
  #include "../h/buf.h"
- #include "../h/conf.h"
  #include "../h/dir.h"

--- 18,19 -----
  #include "../h/buf.h"
  #include "../h/dir.h"
*************** The BRL "commented sleep" which you don't have and thus
*************** can't use...
*** 173,175
  		bp->b_flags |= B_WANTED;
! 		sleep((caddr_t)bp, PRIBIO);
  	}

--- 172,174 -----
  		bp->b_flags |= B_WANTED;
! 		csleep((caddr_t)bp, PRIBIO, "TAPE");
  	}
*************** Here comes the real mass driver change (actually, addition):
*** 454,455
  	return (0);
  }

--- 453,469 -----
  	return (0);
+ }
+ 
+ /*
+  * Start a ``raw block transfer'' from kernel space (via the
+  * mass driver).
+  */
+ htmass(bp)
+ 	register struct buf *bp;
+ {
+ 	register struct tu_softc *sc;
+ 
+ 	minphys(bp);
+ 	sc = &tu_softc[TUUNIT(bp->b_dev)];
+ 	sc->sc_blkno = bdbtofsb(bp->b_blkno);
+ 	sc->sc_nxrec = sc->sc_blkno + 1;
  }
RCS file: RCS/machdep.c,v
retrieving revision 1.1
diff -b -c1 -r1.1 machdep.c
*** /tmp/,RCSt1003151	Fri Jan  4 23:00:37 1985
--- machdep.c	Wed Jan  2 10:38:44 1985
*************** Don't ask me!
*** 1,2
! /*	machdep.c	6.2	83/10/02	*/
  

--- 1,2 -----
! /*	machdep.c	6.4 (modified)	84/02/02	*/
  
*************** Rearranging a few parameters.  You want these changes....
*** 66,68
  	register struct pte *pte;
- 	int mapaddr, j;
  	register caddr_t v;

--- 66,67 -----
  	register struct pte *pte;
  	register caddr_t v;
***************
*** 68,70
  	register caddr_t v;
! 	int maxbufs, base, residual;
  	extern char etext;

--- 67,70 -----
  	register caddr_t v;
! 	register int mapaddr, j;
! 	int t, base, residual, spaceleft;
  	extern char etext;
*************** This next little bit is for a title which we put in the
*************** version file.  Since you don't do this, you don't want
*************** this particular change.  (I'll tell you when to start
*************** looking again.)
*** 70,71
  	extern char etext;
  

--- 70,72 -----
  	extern char etext;
+ 	extern char vers_title[];
  
***************
*** 83,84
  	 */
  	printf(version);

--- 84,92 -----
  	 */
+ 	if (vers_title[0]) {
+ 		i = strlen(version) - 1;	/* sigh */
+ 		version[i] = 0;
+ 		printf("%s (%s)\n", version, vers_title);
+ 		version[i] = '\n';
+ 	}
+ 	else
  		printf(version);
*************** Start looking again.  Here we change buffer allocation
*************** policies...
*** 90,91
  	 * We allocate 1/2 as many swap buffer headers as file i/o buffers.
  	 */

--- 98,101 -----
  	 * We allocate 1/2 as many swap buffer headers as file i/o buffers.
+ 	 * MAXBSIZE is probably way bigger than most of the buffers
+ 	 * we'll need, so we assume buffers of "average" size AVGBSIZE.
  	 */
***************
*** 91,94
  	 */
- 	maxbufs = ((SYSPTSIZE * NBPG) - (5 * (int)(&etext - 0x80000000))) /
- 	    MAXBSIZE;
  	if (bufpages == 0)

--- 101,102 -----
  	 */
  	if (bufpages == 0)
***************
*** 96,98
  	if (nbuf == 0) {
! 		nbuf = bufpages / 2;
  		if (nbuf < 16)

--- 104,118 -----
  	if (nbuf == 0) {
! 		nbuf = bufpages * CLBYTES / AVGBSIZE;
! 		/*
! 		 * We need enough space to map everything, so we assume
! 		 * about 700K has to be left after mapping the buffers.
! 		 * (It takes only 6K of pte's to map this, so if we need
! 		 * less, we haven't wasted much memory.)
! 		 */
! 		t = ((SYSPTSIZE * NBPG) - 786432) / MAXBSIZE;
! 		if (nbuf > t) {
! 			printf("sys pt too small; want %d buffers", nbuf);
! 			nbuf = t;
! 			printf(" but space for only %d\n", nbuf);
! 		}
  		if (nbuf < 16)
***************
*** 99,102
  			nbuf = 16;
- 		if (nbuf > maxbufs)
- 			nbuf = maxbufs;
  	}

--- 119,120 -----
  			nbuf = 16;
  	}
***************
*** 102,105
  	}
! 	if (bufpages > nbuf * (MAXBSIZE / CLBYTES))
! 		bufpages = nbuf * (MAXBSIZE / CLBYTES);
  	if (nswbuf == 0) {

--- 120,123 -----
  	}
! 	if (bufpages > (nbuf * AVGBSIZE) / CLBYTES)
! 		bufpages = (nbuf * AVGBSIZE) / CLBYTES;
  	if (nswbuf == 0) {
***************
*** 125,126
  	    (name) = (type *)(v); (v) = (caddr_t)((lim) = ((name)+(num)))
  	valloc(buffers, char, MAXBSIZE * nbuf);

--- 143,152 -----
  	    (name) = (type *)(v); (v) = (caddr_t)((lim) = ((name)+(num)))
+ 	/*
+ 	 * Map the buffers first, because they are only partially mapped
+ 	 * (that is to say, they get less physical memory than virtual).
+ 	 * Each buffer maps a full MAXBSIZE bytes but (at least initially)
+ 	 * contains only 1/nbuf'th of the total buffer pool, with the
+ 	 * "extra" pages (if any) given to the first bufpages%nbuf buffers.
+ 	 * binit() (in ../sys/init_main.c) uses this same convention.
+ 	 */
  	valloc(buffers, char, MAXBSIZE * nbuf);
***************
*** 128,131
  	residual = bufpages % nbuf;
! 	for (i = 0; i < residual; i++) {
! 		for (j = 0; j < (base + 1) * CLSIZE; j++) {
  			*(int *)(&Sysmap[mapaddr+j]) = PG_V | PG_KW | firstaddr;

--- 154,162 -----
  	residual = bufpages % nbuf;
! 	for (i = 0; i < nbuf; i++) {
! 		if (i < residual)
! 			t = base + 1;
! 		else
! 			t = base;
! 		t *= CLSIZE;
! 		for (j = 0; j < t; j++) {
  			*(int *)(&Sysmap[mapaddr+j]) = PG_V | PG_KW | firstaddr;
***************
*** 136,145
  	}
! 	for (i = residual; i < nbuf; i++) {
! 		for (j = 0; j < base * CLSIZE; j++) {
! 			*(int *)(&Sysmap[mapaddr+j]) = PG_V | PG_KW | firstaddr;
! 			clearseg((unsigned)firstaddr);
! 			firstaddr++;
! 		}
! 		mapaddr += MAXBSIZE / NBPG;
! 	}
  	valloc(buf, struct buf, nbuf);

--- 167,171 -----
  	}
! 	/*
! 	 * Everything from here on is fully mapped.
! 	 */
  	valloc(buf, struct buf, nbuf);
***************
*** 161,163
  	/*
! 	 * Now allocate space for core map
  	 * Allow space for all of phsical memory minus the amount 

--- 187,189 -----
  	/*
! 	 * Now allocate space for core map.
  	 * Allow space for all of phsical memory minus the amount 
***************
*** 163,168
  	 * Allow space for all of phsical memory minus the amount 
! 	 * dedicated to the system. The amount of physical memory
! 	 * dedicated to the system is the total virtual memory of
! 	 * the system minus the space in the buffers which is not
! 	 * allocated real memory.
  	 */

--- 189,207 -----
  	 * Allow space for all of phsical memory minus the amount 
! 	 * dedicated to the system ("kernel memory").  The amount
! 	 * of kernel memory is equal to v-0x80000000 minus the
! 	 * holes in the buffers.  In other words:
! 	 *
! 	 * kernel mem =     mem used	-	mem not REALLY used
! 	 *	      = (v&~0x80000000) - (nbuf*MAXBSIZE-bufpages*CLBYTES)
! 	 * space left = total space  - kernel space
! 	 *	      = physmem*NBPG - kernel space
! 	 *
! 	 * (Of course, when we allocate the core map, we use up some of
! 	 * that left-over space, thus the formula for ncmap below.)
! 	 * There is, however, no guarantee that we have enough pte's
! 	 * to map everything.  Here we calculate the ideal size for the
! 	 * core map, find out how much space is left in the system page
! 	 * table, and allocate the minimum of the two numbers.  (It
! 	 * currently takes about 100K to map 6M [with CLSIZE == 2 and 
! 	 * sizeof (struct cmap) == 16]).
  	 */
***************
*** 168,174
  	 */
! 	ncmap = (physmem*NBPG - ((int)v &~ 0x80000000) +
! 		(nbuf * (MAXBSIZE - 2 * CLBYTES))) /
! 		    (NBPG*CLSIZE + sizeof (struct cmap));
! 	valloclim(cmap, struct cmap, ncmap, ecmap);
! 	if ((((int)(ecmap+1))&~0x80000000) > SYSPTSIZE*NBPG)
  		panic("sys pt too small");

--- 207,218 -----
  	 */
! 	spaceleft = physmem*NBPG - ((int)v & ~0x80000000) +
! 	    nbuf*MAXBSIZE - bufpages*CLBYTES;
! 	if (spaceleft < 0) {
! 		printf("Kernel wants %d more bytes than exist!\n",
! 			-spaceleft);
! 		panic("kernel size");
! 	}
! 	ncmap = spaceleft / (CLBYTES + sizeof (struct cmap));
! 	spaceleft = SYSPTSIZE*NBPG - (((int)(v + 1)) & ~0x80000000);
! 	if (spaceleft < 0)
  		panic("sys pt too small");
***************
*** 174,176
  		panic("sys pt too small");
! 
  	/*

--- 218,228 -----
  		panic("sys pt too small");
! 	if (ncmap * sizeof (struct cmap) > spaceleft) {
! 		printf("sys pt too small; trimmed core map\n");
! 		ncmap = spaceleft / sizeof (struct cmap);
! 	}
! 	valloclim(cmap, struct cmap, ncmap, ecmap);
! 	/* anti-bug test: */
! 	spaceleft = SYSPTSIZE*NBPG - (((int)(ecmap+1))&~0x80000000);
! 	if (spaceleft < 0)
! 		panic("startup");
  	/*
*************** (The part about #if GYRE is for our kernel hack machine.)
*** 176,177
  	/*
  	 * Clear allocated space, and make r/w entries

--- 228,242 -----
  	/*
+ 	 * If there's "lots" of wasted space, gripe.
+ 	 * (Lots == at least 5% of physical memory in wasted page tables.
+ 	 * Spaceleft is currently the amount of memory we can still map.)
+ 	 */
+ 	spaceleft /= NBPG * NPTEPG;	/* convert to true pages */
+ #if GYRE
+ 	if (spaceleft >= NBPG)
+ 		printf("%d extra pages in sys pt\n", spaceleft / NBPG);
+ #else
+ 	if (spaceleft >= physmem / 20)
+ 		printf("%d extra pages in sys pt\n", spaceleft / NBPG);
+ #endif
+ 	/*
  	 * Clear allocated space, and make r/w entries
*************** This is part of one of RWS at MIT-BOLD's fixes.  I don't know
*************** if it would hurt to put it in if you haven't already... it's
*************** up to you.
*** 286,288
  	 */
! 	if (!oonstack && (int)fp <= USRSTACK - ctob(u.u_ssize)) 
  		grow((unsigned)fp);

--- 351,353 -----
  	 */
! 	if ((int)fp <= USRSTACK - ctob(u.u_ssize)) 
  		grow((unsigned)fp);
*************** I thought this deserved a comment.
*** 288,290
  		grow((unsigned)fp);
! 	;
  #ifndef lint

--- 353,355 -----
  		grow((unsigned)fp);
! 	;			/* Avoid asm() label botch */
  #ifndef lint
*************** More of those fixes from RWS at MIT-BOLD.
*** 296,298
  #endif
! 	if (!u.u_onstack && (int)scp <= USRSTACK - ctob(u.u_ssize))
  		grow((unsigned)scp);

--- 361,363 -----
  #endif
! 	if ((int)scp <= USRSTACK - ctob(u.u_ssize))
  		grow((unsigned)scp);
*************** (Need I say anything?)
*** 360,361
  		return;
  #ifndef lint

--- 425,427 -----
  		return;
+ 	;			/* Avoid asm() label botch */
  #ifndef lint
*************** Part of the changes to handle 64K chip controllers.  This
*************** is not everything you need, so don't install it.
*** 426,428
  		mcr = mcraddr[m];
! 		switch (cpu) {
  #if VAX780

--- 492,494 -----
  		mcr = mcraddr[m];
! 		switch (mcrtype[m]) {
  #if VAX780
***************
*** 428,431
  #if VAX780
! 		case VAX_780:
! 			M780_ENA(mcr);
  			break;

--- 494,497 -----
  #if VAX780
! 		case M780C:
! 			M780C_ENA(mcr);
  			break;
***************
*** 431,432
  			break;
  #endif

--- 497,504 -----
  			break;
+ 		case M780EL:
+ 			M780EL_ENA(mcr);
+ 			break;
+ 		case M780EU:
+ 			M780EU_ENA(mcr);
+ 			break;
  #endif
***************
*** 433,435
  #if VAX750
! 		case VAX_750:
  			M750_ENA(mcr);

--- 505,507 -----
  #if VAX750
! 		case M750:
  			M750_ENA(mcr);
***************
*** 438,440
  #if VAX730
! 		case VAX_730:
  			M730_ENA(mcr);

--- 510,512 -----
  #if VAX730
! 		case M730:
  			M730_ENA(mcr);
***************
*** 461,463
  		mcr = mcraddr[m];
! 		switch (cpu) {
  #if VAX780

--- 533,535 -----
  		mcr = mcraddr[m];
! 		switch (mcrtype[m]) {
  #if VAX780
***************
*** 463,466
  #if VAX780
! 		case VAX_780:
! 			if (M780_ERR(mcr)) {
  				printf("mcr%d: soft ecc addr %x syn %x\n",

--- 535,538 -----
  #if VAX780
! 		case M780C:
! 			if (M780C_ERR(mcr)) {
  				printf("mcr%d: soft ecc addr %x syn %x\n",
***************
*** 466,468
  				printf("mcr%d: soft ecc addr %x syn %x\n",
! 				    m, M780_ADDR(mcr), M780_SYN(mcr));
  #ifdef TRENDATA

--- 538,540 -----
  				printf("mcr%d: soft ecc addr %x syn %x\n",
! 				    m, M780C_ADDR(mcr), M780C_SYN(mcr));
  #ifdef TRENDATA
***************
*** 470,472
  #endif
! 				M780_INH(mcr);
  			}

--- 542,544 -----
  #endif
! 				M780C_INH(mcr);
  			}
***************
*** 473,474
  			break;
  #endif

--- 545,562 -----
  			break;
+ 
+ 		case M780EL:
+ 			if (M780EL_ERR(mcr)) {
+ 				printf("mcr%d: soft ecc addr %x syn %x\n",
+ 				    m, M780EL_ADDR(mcr), M780EL_SYN(mcr));
+ 				M780EL_INH(mcr);
+ 			}
+ 			break;
+ 
+ 		case M780EU:
+ 			if (M780EU_ERR(mcr)) {
+ 				printf("mcr%d: soft ecc addr %x syn %x\n",
+ 				    m, M780EU_ADDR(mcr), M780EU_SYN(mcr));
+ 				M780EU_INH(mcr);
+ 			}
+ 			break;
  #endif
***************
*** 475,477
  #if VAX750
! 		case VAX_750:
  			if (M750_ERR(mcr)) {

--- 563,565 -----
  #if VAX750
! 		case M750:
  			if (M750_ERR(mcr)) {
***************
*** 486,488
  #if VAX730
! 		case VAX_730: {
  			register int mcreg = mcr->mc_reg[1];

--- 574,576 -----
  #if VAX730
! 		case M730: {
  			register int mcreg = mcr->mc_reg[1];
***************
*** 539,541
  
! 	switch (cpu) {
  

--- 627,629 -----
  
! 	switch (mcrtype[m]) {
  
***************
*** 542,544
  #if VAX780
! 	case VAX_780:
  	for (i = 0; i < (sizeof (memlogtab) / sizeof (memlogtab[0])); i++)

--- 630,632 -----
  #if VAX780
! 	case M780C:
  	for (i = 0; i < (sizeof (memlogtab) / sizeof (memlogtab[0])); i++)
***************
*** 544,546
  	for (i = 0; i < (sizeof (memlogtab) / sizeof (memlogtab[0])); i++)
! 		if ((u_char)(M780_SYN(mcr)) == memlogtab[i].m_syndrome) {
  			printf (

--- 632,634 -----
  	for (i = 0; i < (sizeof (memlogtab) / sizeof (memlogtab[0])); i++)
! 		if ((u_char)(M780C_SYN(mcr)) == memlogtab[i].m_syndrome) {
  			printf (
***************
*** 549,552
  				memlogtab[i].m_chip,
! 				(M780_ADDR(mcr) & 0x8000) ? "upper" : "lower",
! 				(M780_ADDR(mcr) >> 16));
  			return;

--- 637,640 -----
  				memlogtab[i].m_chip,
! 				(M780C_ADDR(mcr) & 0x8000) ? "upper" : "lower",
! 				(M780C_ADDR(mcr) >> 16));
  			return;
*************** Here come some irrelevant but perhaps useful changes
*************** in the panic/reboot code.
*** 583,584
  
  boot(paniced, arghowto)

--- 671,675 -----
  
+ /*
+  * Reboot.
+  */
  boot(paniced, arghowto)
***************
*** 588,589
  	register int devtype;		/* r10 == major of root dev */
  

--- 679,682 -----
  	register int devtype;		/* r10 == major of root dev */
+ 	register struct buf *bp;
+ 	register iter, nbusy;
  
***************
*** 593,595
  #endif
! 	(void) spl1();
  	howto = arghowto;

--- 686,692 -----
  #endif
! 	/*
! 	 * Figure out whether we can and should complete sandbagged I/O;
! 	 * if so, wait for no busy buffers or a maximum time of ~1 sec.
! 	 */
! 	mtpr(IPL, 0x1f);		/* block EVERYTHING */
  	howto = arghowto;
***************
*** 597,598
  		waittime = 0;
  		update();

--- 694,696 -----
  		waittime = 0;
+ 		(void) spl1();
  		update();
***************
*** 599,607
  		printf("syncing disks... ");
! #ifdef notdef
! 		DELAY(10000000);
! #else
! 		{ register struct buf *bp;
! 		  int iter, nbusy;
! 
! 		  for (iter = 0; iter < 20; iter++) {
  			nbusy = 0;

--- 697,699 -----
  		printf("syncing disks... ");
! 		for (iter = 0; iter < 32; iter++) {
  			nbusy = 0;
***************
*** 613,614
  			printf("%d ", nbusy);
  		  }

--- 705,707 -----
  			printf("%d ", nbusy);
+ 			DELAY(20000);
  		}
***************
*** 614,617
  		  }
! 		}
! #endif
  		printf("done\n");

--- 707,710 -----
  		}
! 		if (nbusy != 0)
! 			printf("%d bufs un", nbusy);
  		printf("done\n");
***************
*** 617,618
  		printf("done\n");
  	}

--- 710,712 -----
  		printf("done\n");
+ 		mtpr(IPL, 0x1f);
  	}
***************
*** 618,620
  	}
- 	splx(0x1f);			/* extreme priority */
  	devtype = major(rootdev);

--- 712,713 -----
  	}
  	devtype = major(rootdev);
***************
*** 625,627
  			;
! 	} else {
  		if (paniced == RB_PANIC) {

--- 718,721 -----
  			;
! 	}
! 	else {
  		if (paniced == RB_PANIC) {
***************
*** 627,629
  		if (paniced == RB_PANIC) {
! 			doadump();		/* TXDB_BOOT's itsself */
  			/*NOTREACHED*/

--- 721,723 -----
  		if (paniced == RB_PANIC) {
! 			doadump();	/* TXDB_BOOT's itself */
  			/*NOTREACHED*/
***************
*** 633,636
  #if defined(VAX750) || defined(VAX730)
! 	if (cpu != VAX_780)
! 		{ asm("movl r11,r5"); }		/* boot flags go in r5 */
  #endif

--- 727,733 -----
  #if defined(VAX750) || defined(VAX730)
! 	/*
! 	 * 750s and 730s want their boot flags in r5 (rather than r11).
! 	 * Doesn't hurt 780s, so just do it all the time.
! 	 */
! 	asm("movl r11,r5");
  #endif
***************
*** 636,638
  #endif
! 	for (;;)
  		asm("halt");

--- 733,735 -----
  #endif
! 	for (;;) {
  		asm("halt");
***************
*** 638,639
  		asm("halt");
  	/*NOTREACHED*/

--- 735,737 -----
  		asm("halt");
+ 	}
  	/*NOTREACHED*/
*************** (Part of?) wls at astrovax's fix for tbuf parity errors.
*************** If you haven't installed this, do so, maybe it will
*************** help a bit.
*** 809,811
  		mtpr(MCESR, 0xf);
! 		if ((mcf->mc5_mcesr&0xf) == MC750_TBPAR) {
  			printf("tbuf par: flushing and returning\n");

--- 907,909 -----
  		mtpr(MCESR, 0xf);
! 		if ((mcf->mc5_mcesr&0xe) == MC750_TBPAR) {
  			printf("tbuf par: flushing and returning\n");
*************** More BRL csleep changes that you should ignore
*** 860,862
  	while ((bp->b_flags & B_DONE) == 0)
! 		sleep((caddr_t)bp, prio);
  	splx(s);

--- 958,960 -----
  	while ((bp->b_flags & B_DONE) == 0)
! 		csleep((caddr_t)bp, prio, "PHYSIO");
  	splx(s);
***************
*** 863
  }

--- 961,962 -----
  }
+ 
RCS file: RCS/mba.c,v
retrieving revision 1.1
diff -b -c1 -r1.1 mba.c
*** /tmp/,RCSt1003207	Fri Jan  4 23:01:50 1985
--- mba.c	Fri Jan  4 19:34:40 1985
*************** Another useless "conf.h"!
*** 13,15
  #include "../h/buf.h"
- #include "../h/conf.h"
  #include "../h/dir.h"

--- 13,14 -----
  #include "../h/buf.h"
  #include "../h/dir.h"
*************** Track the b_active flag better.  (Part of the mass driver
*************** changes.)  Just about everything else in this file is more
*************** of the same.
*** 46,48
  	bp = mi->mi_tab.b_actf;
! 	if (bp == NULL)
  		return;

--- 45,48 -----
  	bp = mi->mi_tab.b_actf;
! 	if (bp == NULL) {
! 		mi->mi_tab.b_active = 0;
  		return;
***************
*** 48,49
  		return;
  	/*

--- 48,51 -----
  		return;
+ 	}
+ 	mi->mi_tab.b_active = 1;
  	/*
***************
*** 56,58
  		mi->mi_tab.b_actf = bp->av_forw;
- 		mi->mi_tab.b_active = 0;
  		mi->mi_tab.b_errcnt = 0;

--- 58,59 -----
  		mi->mi_tab.b_actf = bp->av_forw;
  		mi->mi_tab.b_errcnt = 0;
***************
*** 69,71
  	case MBU_NEXT:		/* request is complete (e.g. ``sense'') */
- 		mi->mi_tab.b_active = 0;
  		mi->mi_tab.b_errcnt = 0;

--- 70,71 -----
  	case MBU_NEXT:		/* request is complete (e.g. ``sense'') */
  		mi->mi_tab.b_errcnt = 0;
***************
*** 91,93
  		 * In any case the device is ``active'' waiting for the
! 		 * data to transfer.
  		 */

--- 91,93 -----
  		 * In any case the device is ``active'' waiting for the
! 		 * data to transfer.  (mi->mi_tab.b_active was set earlier.)
  		 */
***************
*** 93,95
  		 */
- 		mi->mi_tab.b_active = 1;
  		if (mhp->mh_active == 0)

--- 93,94 -----
  		 */
  		if (mhp->mh_active == 0)
***************
*** 107,109
  		}
- 		mi->mi_tab.b_active = 1;
  		return;

--- 106,107 -----
  		}
  		return;
***************
*** 116,117
  		mi->mi_tab.b_flags |= B_BUSY;
  		return;

--- 114,116 -----
  		mi->mi_tab.b_flags |= B_BUSY;
+ 		mi->mi_tab.b_active = 0;	/* ??? */
  		return;
***************
*** 143,144
  	if ((mi = mhp->mh_actf) == NULL) {
  		return;

--- 142,144 -----
  	if ((mi = mhp->mh_actf) == NULL) {
+ 		mhp->mh_active = 0;
  		return;
***************
*** 146,147
  	if ((bp = mi->mi_tab.b_actf) == NULL) {
  		mhp->mh_actf = mi->mi_forw;

--- 146,148 -----
  	if ((bp = mi->mi_tab.b_actf) == NULL) {
+ 		mi->mi_tab.b_active = 0;
  		mhp->mh_actf = mi->mi_forw;
***************
*** 149,150
  	}
  	/*

--- 150,153 -----
  	}
+ 
+ 	mhp->mh_active = 1;
  	/*
***************
*** 167,169
  		mi->mi_tab.b_errcnt = 0;
- 		mi->mi_tab.b_active = 0;
  		bp->b_flags |= B_ERROR;

--- 170,171 -----
  		mi->mi_tab.b_errcnt = 0;
  		bp->b_flags |= B_ERROR;
***************
*** 173,178
  	/*
! 	 * We can do the operation; mark the massbus active
! 	 * and let the device start routine setup any necessary
! 	 * device state for the transfer (e.g. desired cylinder, etc
! 	 * on disks).
  	 */

--- 175,179 -----
  	/*
! 	 * We can do the operation; let the device start routine
! 	 * set up any necessary device state for the transfer
! 	 * (e.g. desired cylinder, etc on disks).
  	 */
***************
*** 178,180
  	 */
- 	mhp->mh_active = 1;
  	if (mi->mi_driver->md_start) {

--- 179,180 -----
  	 */
  	if (mi->mi_driver->md_start) {
*************** Part of this is a fix from thomas at utah-gr which you should
*************** install anyway, whether or not you are installing the mass
*************** driver.  (In other words, keep going.)
*** 238,239
  	 * are now finished.
  	 */

--- 238,242 -----
  	 * are now finished.
+ 	 * Data transfer complete interrupts do not set the attn
+ 	 * bit, and positioning commands (e.g. recal) do not set
+ 	 * DTCMP.
  	 */
***************
*** 239,241
  	 */
! 	if (mhp->mh_active) {
  		/*

--- 242,245 -----
  	 */
! 	mi = mhp->mh_actf;
! 	if (mhp->mh_active && (mbasr&MBSR_DTCMP || as&(1<<mi->mi_drive))) {
  		/*
***************
*** 246,248
  		 */
- 		mi = mhp->mh_actf;
  		as &= ~(1 << mi->mi_drive);

--- 250,251 -----
  		 */
  		as &= ~(1 << mi->mi_drive);
***************
*** 324,326
  			case MBN_DONE:		/* operation completed */
- 				mi->mi_tab.b_active = 0;
  				mi->mi_tab.b_errcnt = 0;

--- 327,328 -----
  			case MBN_DONE:		/* operation completed */
  				mi->mi_tab.b_errcnt = 0;
***************
*** 329,330
  				iodone(bp);
  				/* fall into common code */

--- 331,333 -----
  				iodone(bp);
+ 				mi->mi_tab.b_active = 0;
  				/* fall into common code */
*************** Here's some stuff I did 'cause I thought the code could
*************** be cleaned up some.  Well, it *is* *slightly* shorter....
*************** (This isn't necessary but can't hurt [famous last words]).
*** 383,385
  /*
!  * Setup the mapping registers for a transfer.
   */

--- 386,389 -----
  /*
!  * Set up the mapping registers for a transfer.
!  * Leave a zero entry at the end to guard against wild transfers.
   */
***************
*** 388,396
  {
! 	register struct mba_regs *mbap = mi->mi_mba;
! 	struct buf *bp = mi->mi_tab.b_actf;
! 	register int npf;
! 	unsigned v;
! 	register struct pte *pte, *io;
! 	int o;
! 	struct proc *rp;
  

--- 392,396 -----
  {
! 	register struct buf *bp = mi->mi_tab.b_actf;
! 	register struct pte *pte;
! 	register int o;
  
***************
*** 396,398
  
- 	v = btop(bp->b_un.b_addr);
  	o = (int)bp->b_un.b_addr & PGOFSET;

--- 396,397 -----
  
  	o = (int)bp->b_un.b_addr & PGOFSET;
***************
*** 398,401
  	o = (int)bp->b_un.b_addr & PGOFSET;
- 	npf = btoc(bp->b_bcount + o);
- 	rp = bp->b_flags&B_DIRTY ? &proc[2] : bp->b_proc;
  	if ((bp->b_flags & B_PHYS) == 0)

--- 397,398 -----
  	o = (int)bp->b_un.b_addr & PGOFSET;
  	if ((bp->b_flags & B_PHYS) == 0)
***************
*** 401,404
  	if ((bp->b_flags & B_PHYS) == 0)
! 		pte = &Sysmap[btop(((int)bp->b_un.b_addr)&0x7fffffff)];
! 	else if (bp->b_flags & B_UAREA)
  		pte = &rp->p_addr[v];

--- 398,406 -----
  	if ((bp->b_flags & B_PHYS) == 0)
! 		pte = &Sysmap[btop((int)bp->b_un.b_addr & 0x7fffffff)];
! 	else {
! 		register struct proc *rp;
! 		register unsigned v = btop(bp->b_un.b_addr);
! 		
! 		rp = bp->b_flags&B_DIRTY ? &proc[2] : bp->b_proc;
! 		if (bp->b_flags & B_UAREA)
  			pte = &rp->p_addr[v];
***************
*** 408,410
  		pte = vtopte(rp, v);
! 	io = mbap->mba_map;
  	while (--npf >= 0) {

--- 410,416 -----
  			pte = vtopte(rp, v);
! 	}
! 	{
! 		register struct pte *io = mi->mi_mba->mba_map;
! 		register int npf = btoc(bp->b_bcount + o);
! 
  		while (--npf >= 0) {
***************
*** 411,413
  		if (pte->pg_pfnum == 0)
! 			panic("mba, zero entry");
  		*(int *)io++ = pte++->pg_pfnum | PG_V;

--- 417,419 -----
  			if (pte->pg_pfnum == 0)
! 				panic("mba zero entry");
  			*(int *)io++ = pte++->pg_pfnum | PG_V;
***************
*** 414,416
  	}
! 	*(int *)io++ = 0;
  	return (o);

--- 420,423 -----
  		}
! 		*(int *)io = 0;
! 	}
  	return (o);
RCS file: RCS/mt.c,v
retrieving revision 1.1
diff -b -c1 -r1.1 mt.c
*** /tmp/,RCSt1003216	Fri Jan  4 23:02:04 1985
--- mt.c	Wed Jan  2 12:22:07 1985
*************** Lots of these changes are stuff I never heard of.  The
*************** only mass driver change is the addition of mtmass().
*************** You can install these or not, as you choose.
*** 9,10
   *
   * TODO:

--- 9,15 -----
   *
+  * Changed by Jules P. Aronson to correct
+  * faulty identification of logical unit numbers with slave numbers
+  * specifically, the construct MUUNIT(dev) is replaced with sc->sc_slave
+  * in most cases.
+  *
   * TODO:
***************
*** 19,21
  #include "../h/buf.h"
- #include "../h/conf.h"
  #include "../h/dir.h"

--- 24,25 -----
  #include "../h/buf.h"
  #include "../h/dir.h"
***************
*** 23,24
  #include "../h/user.h"
  #include "../h/map.h"

--- 27,29 -----
  #include "../h/user.h"
+ #include "../h/proc.h"
  #include "../h/map.h"
***************
*** 53,54
  #define MTUNIT(dev)	(mutomt[MUUNIT(dev)])
  

--- 58,60 -----
  #define MTUNIT(dev)	(mutomt[MUUNIT(dev)])
+ #define MUSLAVE(dev)	((&mu_softc[MUUNIT(dev)])->sc_slave)
  
***************
*** 68,69
  } mu_softc[NMU];
  short	mutomt[NMU];

--- 74,76 -----
  } mu_softc[NMU];
+ 
  short	mutomt[NMU];
***************
*** 119,122
  	muunit = MUUNIT(dev);
! 	if (muunit >= NMU || (sc = &mu_softc[muunit])->sc_openf ||
! 	    (mi = mtinfo[MTUNIT(dev)]) == 0 || mi->mi_alive == 0)
  		return (ENXIO);

--- 126,128 -----
  	muunit = MUUNIT(dev);
! 	if (muunit >= NMU || (mi = mtinfo[MTUNIT(dev)]) == 0 || !mi->mi_alive)
  		return (ENXIO);
***************
*** 122,123
  		return (ENXIO);
  	olddens = sc->sc_dens;

--- 128,132 -----
  		return (ENXIO);
+ 	sc = &mu_softc[muunit];
+ 	if (sc->sc_openf)
+ 		return (EBUSY);
  	olddens = sc->sc_dens;
***************
*** 239,241
  	} else {
! 		mtaddr->mtncs[MUUNIT(bp->b_dev)] =
  			(bp->b_repcnt<<8)|bp->b_command|MT_GO;

--- 248,250 -----
  	} else {
! 		mtaddr->mtncs[sc->sc_slave] =
  			(bp->b_repcnt<<8)|bp->b_command|MT_GO;
***************
*** 245,247
  		if (mi->mi_tab.b_errcnt == 2) {
! 			mtaddr->mtca = MUUNIT(bp->b_dev);
  		} else {

--- 254,256 -----
  		if (mi->mi_tab.b_errcnt == 2) {
! 			mtaddr->mtca = sc->sc_slave;
  		} else {
***************
*** 248,250
  			mtaddr->mtbc = bp->b_bcount;
! 			mtaddr->mtca = (1<<2)|MUUNIT(bp->b_dev);
  		}

--- 257,259 -----
  			mtaddr->mtbc = bp->b_bcount;
! 			mtaddr->mtca = (1<<2)|sc->sc_slave;
  		}
***************
*** 253,255
  	if (blkno < bdbtofsb(bp->b_blkno))
! 		mtaddr->mtncs[MUUNIT(bp->b_dev)] =
  		  (min((unsigned)(bdbtofsb(bp->b_blkno) - blkno), 0377) << 8) |

--- 262,264 -----
  	if (blkno < bdbtofsb(bp->b_blkno))
! 		mtaddr->mtncs[sc->sc_slave] =
  		  (min((unsigned)(bdbtofsb(bp->b_blkno) - blkno), 0377) << 8) |
***************
*** 257,259
  	else
! 		mtaddr->mtncs[MUUNIT(bp->b_dev)] =
  		  (min((unsigned)(blkno - bdbtofsb(bp->b_blkno)), 0377) << 8) |

--- 266,268 -----
  	else
! 		mtaddr->mtncs[sc->sc_slave] =
  		  (min((unsigned)(blkno - bdbtofsb(bp->b_blkno)), 0377) << 8) |
***************
*** 284,286
  	register struct buf *bp = mi->mi_tab.b_actf;
! 	register struct mu_softc *sc;
  

--- 293,295 -----
  	register struct buf *bp = mi->mi_tab.b_actf;
! 	register struct mu_softc *sc = &mu_softc[MUUNIT(bp->b_dev)];
  
***************
*** 287,289
  	/* I'M NOT SURE IF THIS SHOULD ALWAYS BE THE CASE SO FOR NOW... */
! 	if ((mtaddr->mtca&3) != MUUNIT(bp->b_dev)) {
  		printf("mt: wrong unit!\n");

--- 296,298 -----
  	/* I'M NOT SURE IF THIS SHOULD ALWAYS BE THE CASE SO FOR NOW... */
! 	if ((mtaddr->mtca&3) != sc->sc_slave) {
  		printf("mt: wrong unit!\n");
***************
*** 289,291
  		printf("mt: wrong unit!\n");
! 		mtaddr->mtca = MUUNIT(bp->b_dev);
  	}

--- 298,300 -----
  		printf("mt: wrong unit!\n");
! 		mtaddr->mtca = sc->sc_slave;
  	}
***************
*** 291,293
  	}
- 	sc = &mu_softc[MUUNIT(bp->b_dev)];
  	sc->sc_erreg = mtaddr->mter;

--- 300,301 -----
  	}
  	sc->sc_erreg = mtaddr->mter;
***************
*** 369,371
  	register struct mu_softc *sc;
! 	int er, fc, unit;
  

--- 377,379 -----
  	register struct mu_softc *sc;
! 	int er, fc, slave;
  
***************
*** 371,373
  
! 	unit = (mtaddr->mtner >> 8) & 3;
  	er = MASKREG(mtaddr->mtner);

--- 379,381 -----
  
! 	slave = (mtaddr->mtner >> 8) & 3;
  	er = MASKREG(mtaddr->mtner);
***************
*** 374,376
  	/* WILL THIS OCCUR IF ANOTHER DRIVE COMES ONLINE? */
! 	if (bp == 0 || unit != MUUNIT(bp->b_dev)) {	/* consistency check */
  		if ((er & MTER_INTCODE) != MTER_ONLINE)

--- 382,387 -----
  	/* WILL THIS OCCUR IF ANOTHER DRIVE COMES ONLINE? */
! 	if (bp == NULL)
! 		return (MBN_SKIP);
! 	sc = &mu_softc[MUUNIT(bp->b_dev)];
! 	if (slave != sc->sc_slave) {	/* consistency check */
  		if ((er & MTER_INTCODE) != MTER_ONLINE)
***************
*** 376,378
  		if ((er & MTER_INTCODE) != MTER_ONLINE)
! 			printf("mt: unit %d random interrupt\n", unit);
  		return (MBN_SKIP);

--- 387,390 -----
  		if ((er & MTER_INTCODE) != MTER_ONLINE)
! 			printf("mt: unit %d random interrupt\n",
! 					MUUNIT(bp->b_dev));
  		return (MBN_SKIP);
***************
*** 379,384
  	}
! 	if (bp == 0)
! 		return (MBN_SKIP);
! 	fc = (mtaddr->mtncs[unit] >> 8) & 0xff;
! 	sc = &mu_softc[unit];
  	sc->sc_erreg = er;

--- 391,393 -----
  	}
! 	fc = (mtaddr->mtncs[slave] >> 8) & 0xff;
  	sc->sc_erreg = er;
*************** Here's the mass driver addition:
*** 492,493
  	return (0);
  }

--- 501,517 -----
  	return (0);
+ }
+ 
+ /*
+  * Start a ``raw block transfer'' from kernel space (via the
+  * mass driver).
+  */
+ mtmass(bp)
+ 	register struct buf *bp;
+ {
+ 	register struct mu_softc *sc;
+ 
+ 	minphys(bp);
+ 	sc = &mu_softc[MUUNIT(bp->b_dev)];
+ 	sc->sc_blkno = bdbtofsb(bp->b_blkno);
+ 	sc->sc_nxrec = sc->sc_blkno + 1;
  }
RCS file: RCS/param.h,v
retrieving revision 1.1
diff -b -c1 -r1.1 param.h
*** /tmp/,RCSt1003120	Fri Jan  4 22:59:49 1985
--- param.h	Wed Jan  2 09:52:11 1985
*************** We like more processes and more files per process; this
*************** has nothing to do with the mass driver.
*** 18,21
  #define	MSWAPX	15		/* pseudo mount table index for swapdev */
! #define	MAXUPRC	25		/* max processes per user */
! #define	NOFILE	20		/* max open files per process */
  /* NOFILE MUST NOT BE >= 31; SEE pte.h */

--- 18,21 -----
  #define	MSWAPX	15		/* pseudo mount table index for swapdev */
! #define	MAXUPRC	40		/* max processes per user */
! #define	NOFILE	30		/* max open files per process (std=20) */
  /* NOFILE MUST NOT BE >= 31; SEE pte.h */
*************** We like more groups too.  I recall a problem with UPAGES
*************** getting too big if you increase NGROUPS, so you might want
*************** to avoid this.
*** 23,25
  #define	NCARGS	10240		/* # characters in exec arglist */
! #define	NGROUPS	8		/* max number groups */
  

--- 23,25 -----
  #define	NCARGS	10240		/* # characters in exec arglist */
! #define	NGROUPS	16		/* max number groups (std=8)*/
  
*************** I have most of the clist routines in VAX assembly, so I
*************** moved the definitions to a separate file.  You probably
*************** don't want to do this.
*** 97,100
  
! #define	CBSIZE	28		/* number of chars in a clist block */
! #define	CROUND	0x1F		/* clist rounding; sizeof(int *) + CBSIZE -1*/
  

--- 97,103 -----
  
! #ifndef KERNEL
! #include <sys/cblock.h>
! #else
! #include "../h/cblock.h"
! #endif
  
*************** Fixing some comments...
*** 116,118
   * file systems; however making it smaller make make some file
!  * systems unmountable.
   *

--- 119,122 -----
   * file systems; however making it smaller make make some file
!  * systems unmountable.  Also, note that MAXBSIZE must be >= MINBSIZE
!  * (defined in ../h/fs.h).
   *
*************** More comments, related to the way things are after adding
*************** the mass driver.  Install these if you are installing the
*************** mass driver.
*** 118,119
   *
   * Note that the blocked devices are assumed to have DEV_BSIZE

--- 122,134 -----
   *
+  * MAXBSIZE is probably much larger than the average file system
+  * block, and it makes more sense to allocate buffers and memory
+  * based on the average size than on the maximum size.  AVGBSIZE
+  * should be set to the "average" block size on your file systems.
+  * Setting it too small will mean that buffer memory will be scarce,
+  * while setting it too large will mean that buffers themselves will
+  * be the scarce resource.
+  *
+  * N.B.: MAXBSIZE must be a multiple of CLBYTES.  Also, if you
+  * increase MAXBSIZE, you may have to increase SYSPTSIZE.
+  *
   * Note that the blocked devices are assumed to have DEV_BSIZE
*************** The change to MAXBSIZE and the definition of AVGBSIZE
*************** for the new code in vax/machdep.c.  (I.e., the former
*************** goes with the latter.)
*** 127,129
   */
! #define	MAXBSIZE	8192
  #define	DEV_BSIZE	512

--- 142,145 -----
   */
! #define	MAXBSIZE	16384		/* was 8192 */
! #define	AVGBSIZE	4096
  #define	DEV_BSIZE	512
RCS file: RCS/ts.c,v
retrieving revision 1.1
diff -b -c1 -r1.1 ts.c
*** /tmp/,RCSt1003186	Fri Jan  4 23:01:16 1985
--- ts.c	Wed Jan  2 11:57:07 1985
*************** Yet another useless conf.h
*** 16,18
  #include "../h/dir.h"
- #include "../h/conf.h"
  #include "../h/user.h"

--- 16,17 -----
  #include "../h/dir.h"
  #include "../h/user.h"
*************** Yet another BRL csleep change to ignore
*** 296,298
  		bp->b_flags |= B_WANTED;
! 		sleep((caddr_t)bp, PRIBIO);
  	}

--- 295,297 -----
  		bp->b_flags |= B_WANTED;
! 		csleep((caddr_t)bp, PRIBIO, "TAPE");
  	}
*************** I like type names.
*** 509,511
  	int tsunit;
! 	register state;
  

--- 508,510 -----
  	int tsunit;
! 	register int state;
  
*************** This is necessary for the mass driver 'cause we need to
*************** know the state ``inside'' biodone()... biodone may wind
*************** up invoking the strategy routine, and we don't want it
*************** calling tsstart() if the tape is really busy.
*** 533,535
  	state = um->um_tab.b_active;
- 	um->um_tab.b_active = 0;
  	/*

--- 532,533 -----
  	state = um->um_tab.b_active;
  	/*
*************** Formatting, formatting!  Sheesh.
*** 575,577
  			 */
! 			if (state==SIO) {
  				if (++um->um_tab.b_errcnt < 7) {

--- 573,575 -----
  			 */
! 			if (state == SIO) {
  				if (++um->um_tab.b_errcnt < 7) {
*************** Better state info.
*** 660,662
  	iodone(bp);
! 	if (um->um_tab.b_actf->b_actf == 0)
  		return;

--- 658,661 -----
  	iodone(bp);
! 	if (um->um_tab.b_actf->b_actf == 0) {
! 		um->um_tab.b_active = 0;
  		return;
***************
*** 662,663
  		return;
  opcont:

--- 661,663 -----
  		return;
+ 	}
  opcont:
*************** The mass driver entry point.
*** 733,734
  	return (0);
  }

--- 733,750 -----
  	return (0);
+ }
+ 
+ /*
+  * Start a ``raw block transfer'' from kernel space (via the
+  * mass driver).  Job is a combination minphys() and part of
+  * tsphys().
+  */
+ tsmass(bp)
+ 	register struct buf *bp;
+ {
+ 	register struct ts_softc *sc;
+ 
+ 	minphys(bp);
+ 	sc = &ts_softc[TSUNIT(bp->b_dev)];
+ 	sc->sc_blkno = bdbtofsb(bp->b_blkno);
+ 	sc->sc_nxrec = sc->sc_blkno + 1;
  }
RCS file: RCS/ufs_machdep.c,v
retrieving revision 1.1
diff -b -c1 -r1.1 ufs_machdep.c
*** /tmp/,RCSt1003161	Fri Jan  4 23:00:57 1985
--- ufs_machdep.c	Wed Jan  2 10:42:31 1985
*************** Still another useless conf.h!  Sigh.
*** 9,11
  #include "../h/buf.h"
- #include "../h/conf.h"
  #include "../h/proc.h"

--- 9,10 -----
  #include "../h/buf.h"
  #include "../h/proc.h"
*************** Gripe if someone asks for more space than exists in any
*************** one buffer.
*** 30,31
  	sizealloc = roundup(size, CLBYTES);
  	/*

--- 29,33 -----
  	sizealloc = roundup(size, CLBYTES);
+ 	if (sizealloc > MAXBSIZE)
+ 		panic("allocbuf");
+ 
  	/*
*************** Minor style thingy.  I prefer parallel construction...
*** 69,71
  		tp->b_bufsize += take;
! 		bp->b_bufsize = bp->b_bufsize - take;
  		if (bp->b_bcount > bp->b_bufsize)

--- 71,73 -----
  		tp->b_bufsize += take;
! 		bp->b_bufsize -= take;
  		if (bp->b_bcount > bp->b_bufsize)
RCS file: RCS/vm_mem.c,v
retrieving revision 1.1
diff -b -c1 -r1.1 vm_mem.c
*** /tmp/,RCSt1003130	Fri Jan  4 23:00:00 1985
--- vm_mem.c	Wed Jan  2 10:24:43 1985
*************** More BRL csleep stuff to ignore
*** 39,41
  		while (freemem == 0)
! 			sleep((caddr_t)&freemem, PSWP+2);
  		m = imin(size, freemem);

--- 39,41 -----
  		while (freemem == 0)
! 			csleep((caddr_t)&freemem, PSWP+2, "FREEMEM");
  		m = imin(size, freemem);
*************** The C-compiler-sign-extension-bug fix (1 of 2; the other
*************** is in some incredibly similar piece of code somewhere else
*************** that I don't particularly recall.)
*** 251,252
  			}
  			if (mfind(c->c_mdev == MSWAPX ?

--- 251,253 -----
  			}
+ #ifdef lint
  			if (mfind(c->c_mdev == MSWAPX ?
***************
*** 255,256
  				panic("memall mfind");
  			c1->c_mdev = 0;

--- 256,263 -----
  				panic("memall mfind");
+ #else			/* Avoid compiler sign extend bug */
+ 			if (mfind(c->c_mdev == MSWAPX ?
+ 			    swapdev : mount[c->c_mdev].m_dev,
+ 			    c->c_blkno))
+ 				panic("memall mfind");
+ #endif lint
  			c1->c_mdev = 0;
*************** A side dish of changes to make meminit complain about
*************** improperly sized core maps, and to (probably) make the
*************** generated code smaller too.
*** 518,520
  /*
!  * Initialize core map
   */

--- 525,528 -----
  /*
!  * Initialize core map.  Print a warning message if the core map is
!  * too small to map everything, or another if it's way too big.
   */
***************
*** 523,525
  {
! 	register int i;
  	register struct cmap *c;

--- 531,533 -----
  {
! 	register int i, lastcm;
  	register struct cmap *c;
***************
*** 530,535
  	ecmx = ecmap - cmap;
! 	if (ecmx < freemem / CLSIZE)
! 		freemem = ecmx * CLSIZE;
! 	for (i = 1; i <= freemem / CLSIZE; i++) {
! 		cmap[i-1].c_next = i;
  		c = &cmap[i];

--- 538,549 -----
  	ecmx = ecmap - cmap;
! 	lastcm = freemem / CLSIZE;
! 	if (ecmx < lastcm) {
! 		printf("core map %d too small (lost %d bytes of user mem)\n",
! 			lastcm - ecmx, freemem - ecmx * CLSIZE);
! 		lastcm = ecmx;
! 		freemem = lastcm * CLSIZE;
! 	}
! 	else if (ecmx - 20 > lastcm)	/* probably shouldn't happen */
! 		printf("%d unused core map entries\n", ecmx - lastcm);
! 	for (i = 1; i <= lastcm; i++) {
  		c = &cmap[i];
***************
*** 535,536
  		c = &cmap[i];
  		c->c_prev = i-1;

--- 549,551 -----
  		c = &cmap[i];
+ 		c[-1].c_next = i;
  		c->c_prev = i-1;
***************
*** 542,544
  	}
! 	cmap[freemem / CLSIZE].c_next = CMHEAD;
  	for (i = 0; i < CMHSIZ; i++)

--- 557,561 -----
  	}
! 	cmap[CMHEAD].c_prev = lastcm;
! 	cmap[CMHEAD].c_type = CSYS;
! 	cmap[lastcm].c_next = CMHEAD;
  	for (i = 0; i < CMHSIZ; i++)
***************
*** 545,548
  		cmhash[i] = ecmx;
- 	cmap[CMHEAD].c_prev = freemem / CLSIZE;
- 	cmap[CMHEAD].c_type = CSYS;
  	avefree = freemem;

--- 562,563 -----
  		cmhash[i] = ecmx;
  	avefree = freemem;
*************** Yet another BRL csleep to ignore
*** 577,579
  		c->c_want = 1;
! 		sleep((caddr_t)c, PSWP+1);
  	}

--- 592,594 -----
  		c->c_want = 1;
! 		csleep((caddr_t)c, PSWP+1, "PAGE");
  	}
RCS file: RCS/vmparam.h,v
retrieving revision 1.1
diff -b -c1 -r1.1 vmparam.h
*** /tmp/,RCSt1003173	Fri Jan  4 23:01:05 1985
--- vmparam.h	Wed Jan  2 10:43:06 1985
*************** We have bigger data and stack limits.  Ignore these unless
*************** you REALLY know what you're doing here.
*** 26,28
  #ifndef MAXDSIZ
! #define	MAXDSIZ		(12*1024-32-SLOP)	/* max data size (clicks) */
  #endif

--- 26,28 -----
  #ifndef MAXDSIZ
! #define	MAXDSIZ		(16*2048-32-SLOP)	/* max data size (clicks) */
  #endif
***************
*** 28,30
  #endif
! #define	MAXSSIZ		(12*1024-32-SLOP)	/* max stack size (clicks) */
  

--- 28,30 -----
  #endif
! #define	MAXSSIZ		(6*2048-32-SLOP)	/* max stack size (clicks) */
  
*************** Increase SYSPTSIZE to handle mapping those 16K buffers.
*************** The comment is right, but making it work that way is hard.
*** 34,36
  /* SYSPTSIZE IS SILLY; IT SHOULD BE COMPUTED AT BOOT TIME */
! #define	SYSPTSIZE	((20+MAXUSERS)*NPTEPG)
  #define	USRPTSIZE 	(8*NPTEPG)

--- 34,36 -----
  /* SYSPTSIZE IS SILLY; IT SHOULD BE COMPUTED AT BOOT TIME */
! #define	SYSPTSIZE	((40+MAXUSERS)*NPTEPG)
  #define	USRPTSIZE 	(8*NPTEPG)
*************** Not sure exactly what this does, but it affects the
*************** printf about "should use interleaved swap".
*** 114,116
   */
! #define	LOTSOFMEM	2
  

--- 114,116 -----
   */
! #define	LOTSOFMEM	3
  
//go.sysin dd *
made=TRUE
if [ $made = TRUE ]; then
	/bin/chmod 644 kernel_mods
	/bin/echo -n '	'; /bin/ls -ld kernel_mods
fi
-- 
(This line accidently left nonblank.)

In-Real-Life: Chris Torek, Univ of MD Comp Sci Dept (301) 454-7690
UUCP:	{seismo,allegra,brl-bmd}!umcp-cs!chris
CSNet:	chris at umcp-cs		ARPA:	chris at maryland



More information about the Comp.sources.unix mailing list