diff -u --recursive --new-file v2.0.4/linux/CREDITS linux/CREDITS --- v2.0.4/linux/CREDITS Sat Jul 6 14:51:22 1996 +++ linux/CREDITS Wed Jul 10 13:11:15 1996 @@ -26,9 +26,11 @@ S: Switzerland N: H. Peter Anvin -E: Peter.Anvin@linux.org +E: hpa@zytor.com +W: http://www.zytor.com/~hpa/ +P: 2047/2A960705 BA 03 D3 2C 14 A8 A8 BD 1E DF FE 69 EE 35 BD 74 D: Author of the SYSLINUX boot loader, maintainer of the linux.* news -D: hierarchy, responsible for various console and other hacks +D: hierarchy and the Linux Device List; various kernel hacks S: 4390 Albany Dr. #46 S: San Jose CA 95129 S: USA @@ -886,11 +888,11 @@ N: Nigel Metheringham E: Nigel.Metheringham@ThePLAnet.net +P: 1024/31455639 B7 99 BD B8 00 17 BD 46 C1 15 B8 AB 87 BC 25 FA D: IP Masquerading work and minor fixes S: Planet Online S: The White House, Melbourne Street, LEEDS S: LS2 7PS, UK -P: 1024/31455639 B7 99 BD B8 00 17 BD 46 C1 15 B8 AB 87 BC 25 FA N: Craig Metz E: cmetz@tjhsst.edu @@ -1242,8 +1244,8 @@ N: Leo Spiekman E: spiekman@et.tudelft.nl -D: Optics Storage 8000AT cdrom driver W: http://dutettk.et.tudelft.nl/~spiekman +D: Optics Storage 8000AT cdrom driver S: Utrecht S: The Netherlands @@ -1258,13 +1260,13 @@ S: Denmark N: Drew Sullivan -W: http://www.ss.org/ E: drew@ss.org +W: http://www.ss.org/ +P: 1024/ACFFA969 5A 9C 42 AB E4 24 82 31 99 56 00 BF D3 2B 25 46 D: iBCS2 developer S: 22 Irvington Cres. S: Willowdale, Ontario S: Canada M2N 2Z1 -P: 1024/ACFFA969 5A 9C 42 AB E4 24 82 31 99 56 00 BF D3 2B 25 46 N: Tommy Thorn E: Tommy.Thorn@irisa.fr diff -u --recursive --new-file v2.0.4/linux/Documentation/devices.tex linux/Documentation/devices.tex --- v2.0.4/linux/Documentation/devices.tex Wed Jul 3 22:05:06 1996 +++ linux/Documentation/devices.tex Wed Jul 10 13:11:40 1996 @@ -42,7 +42,7 @@ % \title{{\bf Linux Allocated Devices}} \author{Maintained by H. Peter Anvin $<$hpa@zytor.com$>$} -\date{Last revised: June 9, 1996} +\date{Last revised: July 9, 1996} \maketitle % \noindent @@ -64,7 +64,9 @@ where that applies (e.g.\ busmice), please contact me with the appropriate device information. Also, if you have additional information regarding any of the devices listed below, or if I have -made a mistake, I would greatly appreciate a note. +made a mistake, I would greatly appreciate a note. When sending me +mail, please include the word ``device'' in the subject so your mail +won't accidentally get buried! Allocations marked (68k/Amiga) apply to Linux/68k on the Amiga platform only. Allocations marked (68k/Atari) apply to Linux/68k on @@ -163,6 +165,7 @@ \major{40}{}{char }{Matrox Meteor frame grabber} \major{ }{}{block}{Syquest EZ135 parallel port removable drive} \major{41}{}{char }{Yet Another Micro Monitor} +\major{ }{}{block}{MicroSolutions BackPack parallel port CD-ROM} \major{42}{}{}{Demo/sample use} \major{43}{}{char }{isdn4linux virtual modem} \major{44}{}{char }{isdn4linux virtual modem -- alternate devices} @@ -175,7 +178,8 @@ \major{51}{}{char }{Baycom radio modem} \major{52}{}{char }{Spellcaster DataComm/BRI ISDN card} \major{53}{}{char }{BDM interface for remote debugging MC683xx microcontrollers} -\major{54}{--59}{}{Unallocated} +\major{54}{}{char }{Electrocardiognosis Holter serial card} +\major{55}{--59}{}{Unallocated} \major{60}{--63}{}{Local/experimental use} \major{64}{--119}{}{Unallocated} \major{120}{--127}{}{Local/experimental use} @@ -460,6 +464,7 @@ \minor{136}{/dev/qcam0}{QuickCam on {\file lp0}} \minor{137}{/dev/qcam1}{QuickCam on {\file lp1}} \minor{138}{/dev/qcam2}{QuickCam on {\file lp2}} + \minor{139}{/dev/openprom}{SPARC OpenBoot PROM} \end{devicelist} \noindent @@ -989,6 +994,9 @@ \begin{devicelist} \major{41}{}{char }{Yet Another Micro Monitor} \minor{0}{/dev/yamm}{Yet Another Micro Monitor} +\\ +\major{ }{}{block}{MicroSolutions BackPack parallel port CD-ROM} + \minor{0}{/dev/bpcd}{BackPack CD-ROM} \end{devicelist} \begin{devicelist} @@ -1096,7 +1104,19 @@ commercial interface by P\&E. \begin{devicelist} -\major{54}{--59}{}{Unallocated} +\major{54}{Electrocardiognosis Holter serial card} + \minor{0}{/dev/holter0}{First Holter port} + \minor{1}{/dev/holter1}{Second Holter port} + \minor{2}{/dev/holter2}{Third Holter port} +\end{devicelist} + +\noindent +A custom serial card used by Electrocardiognosis SRL +$<$mseritan@ottonel.pub.ro$>$ to transfer data from Holter 24-hour +heart monitoring equipment. + +\begin{devicelist} +\major{55}{--59}{}{Unallocated} \end{devicelist} \begin{devicelist} diff -u --recursive --new-file v2.0.4/linux/Documentation/devices.txt linux/Documentation/devices.txt --- v2.0.4/linux/Documentation/devices.txt Wed Jul 3 22:05:06 1996 +++ linux/Documentation/devices.txt Wed Jul 10 13:11:44 1996 @@ -2,7 +2,7 @@ Maintained by H. Peter Anvin - Last revised: June 9, 1996 + Last revised: July 9, 1996 This list is the successor to Rick Miller's Linux Device List, which he stopped maintaining when he got busy with other things in 1993. It @@ -21,7 +21,9 @@ where that applies (e.g. busmice), please contact me with the appropriate device information. Also, if you have additional information regarding any of the devices listed below, or if I have -made a mistake, I would greatly appreciate a note. +made a mistake, I would greatly appreciate a note. When sending me +mail, please include the word "device" in the subject so your mail +won't accidentally get buried! Allocations marked (68k/Amiga) apply to Linux/68k on the Amiga platform only. Allocations marked (68k/Atari) apply to Linux/68k on @@ -278,6 +280,7 @@ 136 = /dev/qcam0 QuickCam on lp0 137 = /dev/qcam1 QuickCam on lp1 138 = /dev/qcam2 QuickCam on lp2 + 139 = /dev/openprom SPARC OpenBoot PROM 11 char Raw keyboard device 0 = /dev/kbd Raw keyboard device @@ -689,6 +692,8 @@ 41 char Yet Another Micro Monitor 0 = /dev/yamm Yet Another Micro Monitor + block MicroSolutions BackPack parallel port CD-ROM + 0 = /dev/bpcd BackPack CD-ROM 42 Demo/sample use @@ -771,7 +776,16 @@ Domain Interface and ICD is the commercial interface by P&E. - 54-59 UNALLOCATED + 54 char Electrocardiognosis Holter serial card + 0 = /dev/holter0 First Holter port + 1 = /dev/holter1 Second Holter port + 2 = /dev/holter2 Third Holter port + + A custom serial card used by Electrocardiognosis SRL + to transfer data from Holter + 24-hour heart monitoring equipment. + + 55-59 UNALLOCATED 60-63 LOCAL/EXPERIMENTAL USE Allocated for local/experimental use. For devices not diff -u --recursive --new-file v2.0.4/linux/Makefile linux/Makefile --- v2.0.4/linux/Makefile Mon Jul 8 16:09:50 1996 +++ linux/Makefile Mon Jul 8 16:10:46 1996 @@ -1,6 +1,6 @@ VERSION = 2 PATCHLEVEL = 0 -SUBLEVEL = 4 +SUBLEVEL = 5 ARCH = i386 diff -u --recursive --new-file v2.0.4/linux/arch/alpha/boot/Makefile linux/arch/alpha/boot/Makefile --- v2.0.4/linux/arch/alpha/boot/Makefile Sat Mar 16 13:52:12 1996 +++ linux/arch/alpha/boot/Makefile Tue Jul 9 08:37:20 1996 @@ -56,7 +56,7 @@ vmlinux: $(TOPDIR)/vmlinux cp $(TOPDIR)/vmlinux vmlinux - quickstrip vmlinux + strip vmlinux tools/lxboot: tools/build tools/build > tools/lxboot diff -u --recursive --new-file v2.0.4/linux/arch/alpha/config.in linux/arch/alpha/config.in --- v2.0.4/linux/arch/alpha/config.in Sat Jul 6 12:07:12 1996 +++ linux/arch/alpha/config.in Tue Jul 9 08:08:18 1996 @@ -82,7 +82,7 @@ define_bool CONFIG_ALPHA_AVANTI y fi -bool 'Echo console messages on /dev/ttyS1' CONFIG_SERIAL_ECHO +bool 'Echo console messages on /dev/ttyS0 (COM1)' CONFIG_SERIAL_ECHO if [ "$CONFIG_PCI" = "y" ]; then bool 'TGA Console Support' CONFIG_TGA_CONSOLE if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then diff -u --recursive --new-file v2.0.4/linux/arch/alpha/kernel/apecs.c linux/arch/alpha/kernel/apecs.c --- v2.0.4/linux/arch/alpha/kernel/apecs.c Wed Jun 5 10:41:27 1996 +++ linux/arch/alpha/kernel/apecs.c Tue Jul 9 08:08:18 1996 @@ -491,27 +491,30 @@ struct pt_regs * regs) { struct el_common *mchk_header; + struct el_procdata *mchk_procdata; struct el_apecs_sysdata_mcheck *mchk_sysdata; + unsigned long *ptr; + int i; - mchk_header = (struct el_common *)la_ptr; + mchk_header = (struct el_common *)la_ptr; + mchk_procdata = (struct el_procdata *) + (la_ptr + mchk_header->proc_offset - sizeof(mchk_procdata->paltemp)); mchk_sysdata = (struct el_apecs_sysdata_mcheck *)(la_ptr + mchk_header->sys_offset); - DBG(("apecs_machine_check: vector=0x%lx la_ptr=0x%lx\n", vector, la_ptr)); - DBG((" pc=0x%lx size=0x%x procoffset=0x%x sysoffset 0x%x\n", - regs->pc, mchk_header->size, mchk_header->proc_offset, mchk_header->sys_offset)); - DBG(("apecs_machine_check: expected %d DCSR 0x%lx PEAR 0x%lx\n", - apecs_mcheck_expected, mchk_sysdata->epic_dcsr, mchk_sysdata->epic_pear)); #ifdef DEBUG - { - unsigned long *ptr; - int i; - - ptr = (unsigned long *)la_ptr; - for (i = 0; i < mchk_header->size / sizeof(long); i += 2) { + printk("apecs_machine_check: vector=0x%lx la_ptr=0x%lx\n", + vector, la_ptr); + printk(" pc=0x%lx size=0x%x procoffset=0x%x sysoffset 0x%x\n", + regs->pc, mchk_header->size, mchk_header->proc_offset, + mchk_header->sys_offset); + printk("apecs_machine_check: expected %d DCSR 0x%lx PEAR 0x%lx\n", + apecs_mcheck_expected, mchk_sysdata->epic_dcsr, + mchk_sysdata->epic_pear); + ptr = (unsigned long *)la_ptr; + for (i = 0; i < mchk_header->size / sizeof(long); i += 2) { printk(" +%lx %lx %lx\n", i*sizeof(long), ptr[i], ptr[i+1]); - } } #endif /* DEBUG */ @@ -520,9 +523,13 @@ * ignore the machine check. */ #ifdef CONFIG_ALPHA_MIKASA - /* for now on MIKASA, if it was expected, ignore it */ - /* we need the details of the mcheck frame to really know... */ - if (apecs_mcheck_expected) { +#define MCHK_NO_DEVSEL 0x205L +#define MCHK_NO_TABT 0x204L + if (apecs_mcheck_expected && + (((unsigned int)mchk_procdata->paltemp[0] == MCHK_NO_DEVSEL) || + ((unsigned int)mchk_procdata->paltemp[0] == MCHK_NO_TABT)) + ) + { #else if (apecs_mcheck_expected && (mchk_sysdata->epic_dcsr && 0x0c00UL)) { #endif @@ -534,7 +541,33 @@ wrmces(0x7); mb(); draina(); + DBG(("apecs_machine_check: EXPECTED\n")); + } + else if (vector == 0x620 || vector == 0x630) { + wrmces(0x1f); /* disable correctable from now on */ + mb(); + draina(); + printk("apecs_machine_check: HW correctable (0x%lx)\n", vector); + } + else { + printk("APECS machine check:\n"); + printk(" vector=0x%lx la_ptr=0x%lx\n", + vector, la_ptr); + printk(" pc=0x%lx size=0x%x procoffset=0x%x sysoffset 0x%x\n", + regs->pc, mchk_header->size, mchk_header->proc_offset, + mchk_header->sys_offset); + printk(" expected %d DCSR 0x%lx PEAR 0x%lx\n", + apecs_mcheck_expected, mchk_sysdata->epic_dcsr, + mchk_sysdata->epic_pear); + + ptr = (unsigned long *)la_ptr; + for (i = 0; i < mchk_header->size / sizeof(long); i += 2) { + printk(" +%lx %lx %lx\n", i*sizeof(long), ptr[i], ptr[i+1]); + } +#if 0 + /* doesn't work with MILO */ + show_regs(regs); +#endif } } - #endif /* CONFIG_ALPHA_APECS */ diff -u --recursive --new-file v2.0.4/linux/arch/alpha/kernel/irq.c linux/arch/alpha/kernel/irq.c --- v2.0.4/linux/arch/alpha/kernel/irq.c Wed Jul 3 22:05:07 1996 +++ linux/arch/alpha/kernel/irq.c Tue Jul 9 08:08:18 1996 @@ -446,6 +446,41 @@ restore_flags(flags); } +static inline void mikasa_device_interrupt(unsigned long vector, + struct pt_regs * regs) +{ + unsigned long pld; + unsigned int i; + unsigned long flags; + + save_flags(flags); + cli(); + + /* read the interrupt summary registers */ + pld = (((unsigned long) (~inw(0x534)) & 0x0000ffffUL) << 16) | + (((unsigned long) inb(0xa0)) << 8) | + ((unsigned long) inb(0x20)); + +#if 0 + printk("[0x%08lx]", pld); +#endif + + /* + * Now for every possible bit set, work through them and call + * the appropriate interrupt handler. + */ + while (pld) { + i = ffz(~pld); + pld &= pld - 1; /* clear least bit set */ + if (i < 16) { + isa_device_interrupt(vector, regs); + } else { + device_interrupt(i, i, regs); + } + } + restore_flags(flags); +} + static inline void eb66_and_eb64p_device_interrupt(unsigned long vector, struct pt_regs * regs) { @@ -622,12 +657,10 @@ srm_device_interrupt(vector, ®s); #elif NR_IRQS == 33 cabriolet_and_eb66p_device_interrupt(vector, ®s); +#elif defined(CONFIG_ALPHA_MIKASA) + mikasa_device_interrupt(vector, ®s); #elif NR_IRQS == 32 -# ifdef CONFIG_ALPHA_MIKASA -# error we got a problem here Charlie MIKASA should be SRM console -# else eb66_and_eb64p_device_interrupt(vector, ®s); -# endif #elif NR_IRQS == 16 isa_device_interrupt(vector, ®s); #endif diff -u --recursive --new-file v2.0.4/linux/arch/i386/boot/tools/build.c linux/arch/i386/boot/tools/build.c --- v2.0.4/linux/arch/i386/boot/tools/build.c Sat Mar 9 13:31:43 1996 +++ linux/arch/i386/boot/tools/build.c Wed Jul 10 13:10:59 1996 @@ -19,6 +19,7 @@ /* * Changes by tytso to allow root device specification * High loaded stuff by Hans Lermen & Werner Almesberger, Feb. 1996 + * Cross compiling fixes by Gertjan van Wingerde, July 1996 */ #include /* fprintf */ @@ -56,6 +57,7 @@ #define STRINGIFY(x) #x typedef union { + int i; long l; short s[2]; char b[4]; @@ -72,6 +74,17 @@ return t.l; } +int intel_int(int i) +{ + conv t; + + t.b[0] = i & 0xff; i >>= 8; + t.b[1] = i & 0xff; i >>= 8; + t.b[2] = i & 0xff; i >>= 8; + t.b[3] = i & 0xff; i >>= 8; + return t.i; +} + short intel_short(short l) { conv t; @@ -94,8 +107,8 @@ int main(int argc, char ** argv) { - int i,c,id, sz; - unsigned long sys_size; + int i,c,id,sz,tmp_int; + unsigned long sys_size, tmp_long; char buf[1024]; #ifndef __BFD__ struct exec *ex = (struct exec *)buf; @@ -180,12 +193,17 @@ #ifdef __BIG_KERNEL__ { if (!i) { - if (*((long *)(&buf[2])) != 0x53726448 ) + /* Working with memcpy because of alignment constraints + on Sparc - Gertjan */ + memcpy(&tmp_long, &buf[2], sizeof(long)); + if (tmp_long != intel_long(0x53726448) ) die("Wrong magic in loader header of 'setup'"); - if (*((int *)(&buf[6])) < 0x200 ) + memcpy(&tmp_int, &buf[6], sizeof(int)); + if (tmp_int < intel_int(0x200)) die("Wrong version of loader header of 'setup'"); buf[0x11] = 1; /* LOADED_HIGH */ - *((long *)(&buf[0x14])) = 0x100000; /* code32_start */ + tmp_long = intel_long(0x100000); + memcpy(&buf[0x14], &tmp_long, sizeof(long)); /* code32_start */ } #endif if (write(1,buf,c)!=c) diff -u --recursive --new-file v2.0.4/linux/drivers/block/ide-cd.c linux/drivers/block/ide-cd.c --- v2.0.4/linux/drivers/block/ide-cd.c Mon Jul 8 16:09:52 1996 +++ linux/drivers/block/ide-cd.c Wed Jul 10 13:11:15 1996 @@ -104,6 +104,7 @@ * from Ben Galliart with * special help from Jeff Lightfoot * + * 3.15a July 9, 1996 -- Improved Sanyo 3 CD changer identification * * NOTE: Direct audio reads will only work on some types of drive. * So far, i've received reports of success for Sony and Toshiba drives. @@ -2657,7 +2658,8 @@ /* Sanyo 3 CD changer uses a non-standard command for CD changing */ - else if (strcmp (drive->id->model, "CD-ROM CDR-C3 G") == 0) { + else if ((strcmp(drive->id->model, "CD-ROM CDR-C3 G") == 0) || + (strcmp(drive->id->model, "CD-ROM CDR-C3G") == 0)) { /* uses CD in slot 0 when value is set to 3 */ CDROM_STATE_FLAGS (drive)->sanyo_slot = 3; } diff -u --recursive --new-file v2.0.4/linux/drivers/cdrom/cdrom.c linux/drivers/cdrom/cdrom.c --- v2.0.4/linux/drivers/cdrom/cdrom.c Mon May 13 23:02:47 1996 +++ linux/drivers/cdrom/cdrom.c Wed Jul 10 13:10:59 1996 @@ -457,7 +457,7 @@ } case CDROMPLAYMSF: { struct cdrom_msf msf; - GETARG(struct cdrom_mdf, msf); + GETARG(struct cdrom_msf, msf); return cdo->audio_ioctl(dev, cmd, &msf); } case CDROMPLAYTRKIND: { @@ -467,13 +467,13 @@ } case CDROMVOLCTRL: { struct cdrom_volctrl volume; - GETARG(struct cdrom_volctl, volume); + GETARG(struct cdrom_volctrl, volume); return cdo->audio_ioctl(dev, cmd, &volume); } case CDROMVOLREAD: { struct cdrom_volctrl volume; if (!cdo->audio_ioctl(dev, cmd, &volume)) { - PUTARG(struct cdrom_volctl, volume); + PUTARG(struct cdrom_volctrl, volume); return 0; } return -EINVAL; diff -u --recursive --new-file v2.0.4/linux/drivers/net/de4x5.c linux/drivers/net/de4x5.c --- v2.0.4/linux/drivers/net/de4x5.c Wed Jul 3 22:05:10 1996 +++ linux/drivers/net/de4x5.c Tue Jul 9 08:08:18 1996 @@ -1918,12 +1918,8 @@ break; case NC: -#ifndef __alpha__ + /* default to TP for all */ reset_init_sia(dev, 0x8f01, 0xffff, 0x0000); -#else - /* JAE: for Alpha, default to BNC/AUI, *not* TP */ - reset_init_sia(dev, 0x8f09, 0x0705, 0x0006); -#endif /* i386 */ if (lp->media != lp->c_media) { de4x5_dbg_media(dev); lp->c_media = lp->media; diff -u --recursive --new-file v2.0.4/linux/drivers/scsi/README.ncr53c8xx linux/drivers/scsi/README.ncr53c8xx --- v2.0.4/linux/drivers/scsi/README.ncr53c8xx Sat Jul 6 14:51:24 1996 +++ linux/drivers/scsi/README.ncr53c8xx Wed Jul 10 13:11:16 1996 @@ -29,6 +29,7 @@ 14. Control commands under linux-1.2.13 15. Known problems 15.1 Tagged commands with Iomega Jaz device + 15.2 Tagged command queueing cannot be disabled at run time =============================================================================== @@ -189,8 +190,9 @@ The profiling informations are updated upon completion of scsi commands. The data structure is allocated and zeroed when the host adapter is -attached. So, if the driver is a module you can reset the profiling data -by unloading and reloading the driver. +attached. So, if the driver is a module, the profile counters are cleared each +time the driver is loaded. +The "clearprof" command allow to clear these counters at any time. The following counters are available: ("num" prefix means "number of", "ms" means milli-seconds) @@ -290,6 +292,7 @@ target: target number tags: number of concurrent tagged commands must not be greater than SCSI_NCR_MAX_TAGS (default: 4) + must not be lower that 1 (see: known problems) 8.4 Set order type for tagged command @@ -316,10 +319,10 @@ tiny: print minimal debugging informations timing: print timing informations of the ncr chip. nego: print informations about scsi negotiations - phase: printf informations on script interruptions + phase: print informations on script interruptions -8.5 Clear profile counters +8.6 Clear profile counters clearprof @@ -555,6 +558,13 @@ The other problems that may appear are timeouts. The only way to avoid timeouts seems to edit linux/drivers/scsi/sd.c and to increase the current timeout values. + +15.2 Tagged command queuing cannot be disabled at run time + +Once Tagged command queuing has been enabled, the driver will not allow to +disable this feature ("settags 0" is not supported). +This problem is due to some limitations of the code added to the Linux version +of the driver. =============================================================================== End of NCR53C8XX driver README file diff -u --recursive --new-file v2.0.4/linux/drivers/scsi/eata.c linux/drivers/scsi/eata.c --- v2.0.4/linux/drivers/scsi/eata.c Fri Apr 19 10:07:59 1996 +++ linux/drivers/scsi/eata.c Wed Jul 10 08:05:27 1996 @@ -1,6 +1,9 @@ /* * eata.c - Low-level driver for EATA/DMA SCSI host adapters. * + * 09 Jul 1996 rev. 2.11 for linux 2.0.4 + * Number of internal retries is now limited. + * * 16 Apr 1996 rev. 2.10 for linux 1.3.90 * New argument "reset_flags" to the reset routine. * @@ -156,6 +159,7 @@ #define MAX_BOARDS 18 #define MAX_MAILBOXES 64 #define MAX_SGLIST 64 +#define MAX_INTERNAL_RETRIES 64 #define MAX_CMD_PER_LUN 2 #define FALSE 0 @@ -313,6 +317,8 @@ int in_reset; /* True if board is doing a reset */ int target_time_out[MAX_TARGET]; /* N. of timeout errors on target */ int target_reset[MAX_TARGET]; /* If TRUE redo operation on target */ + unsigned int retries; /* Number of internal retries */ + unsigned long last_retried_pid; /* Pid of last retried command */ unsigned char subversion; /* Bus type, either ISA or ESA */ unsigned char protocol_rev; /* EATA 2.0 rev., 'A' or 'B' or 'C' */ struct mssp sp[MAX_MAILBOXES]; /* Returned status for this board */ @@ -802,6 +808,8 @@ return SCSI_RESET_ERROR; } + HD(j)->retries = 0; + for (k = 0; k < MAX_TARGET; k++) HD(j)->target_reset[k] = TRUE; for (k = 0; k < MAX_TARGET; k++) HD(j)->target_time_out[k] = 0; @@ -1008,6 +1016,8 @@ HD(j)->target_time_out[SCpnt->target] = 0; + if (HD(j)->last_retried_pid == SCpnt->pid) HD(j)->retries = 0; + break; case ASST: /* Selection Time Out */ case 0x02: /* Command Time Out */ @@ -1020,17 +1030,23 @@ } break; + + /* Perform a limited number of internal retries */ case 0x03: /* SCSI Bus Reset Received */ case 0x04: /* Initial Controller Power-up */ - if (SCpnt->device->type != TYPE_TAPE) - status = DID_BUS_BUSY << 16; - else - status = DID_ERROR << 16; - for (k = 0; k < MAX_TARGET; k++) HD(j)->target_reset[k] = TRUE; + if (SCpnt->device->type != TYPE_TAPE + && HD(j)->retries < MAX_INTERNAL_RETRIES) { + status = DID_BUS_BUSY << 16; + HD(j)->retries++; + HD(j)->last_retried_pid = SCpnt->pid; + } + else + status = DID_ERROR << 16; + break; case 0x07: /* Bus Parity Error */ case 0x0c: /* Controller Ram Parity */ @@ -1058,7 +1074,7 @@ spp->adapter_status != ASST && HD(j)->iocount <= 1000) || do_trace) #endif - printk("%s: ihdlr, mbox %d, err 0x%x:%x,"\ + printk("%s: ihdlr, mbox %2d, err 0x%x:%x,"\ " target %d:%d, pid %ld, count %d.\n", BN(j), i, spp->adapter_status, spp->target_status, SCpnt->target, SCpnt->lun, SCpnt->pid, HD(j)->iocount); diff -u --recursive --new-file v2.0.4/linux/drivers/scsi/eata.h linux/drivers/scsi/eata.h --- v2.0.4/linux/drivers/scsi/eata.h Sun May 5 08:52:00 1996 +++ linux/drivers/scsi/eata.h Wed Jul 10 08:05:27 1996 @@ -11,7 +11,7 @@ int eata2x_abort(Scsi_Cmnd *); int eata2x_reset(Scsi_Cmnd *, unsigned int); -#define EATA_VERSION "2.10.00" +#define EATA_VERSION "2.11.00" #define EATA { \ diff -u --recursive --new-file v2.0.4/linux/drivers/scsi/ncr53c8xx.c linux/drivers/scsi/ncr53c8xx.c --- v2.0.4/linux/drivers/scsi/ncr53c8xx.c Mon Jul 8 16:09:54 1996 +++ linux/drivers/scsi/ncr53c8xx.c Wed Jul 10 13:11:15 1996 @@ -8165,7 +8165,7 @@ #endif } else { - if (*start) + if (start) *start = buffer; retv = ncr_host_info(ncb, buffer, offset, length); } diff -u --recursive --new-file v2.0.4/linux/drivers/scsi/qlogicisp.c linux/drivers/scsi/qlogicisp.c --- v2.0.4/linux/drivers/scsi/qlogicisp.c Wed Jul 3 22:05:11 1996 +++ linux/drivers/scsi/qlogicisp.c Wed Jul 10 13:11:25 1996 @@ -63,7 +63,7 @@ the latest firmware provided by QLogic. This may be an earlier/later revision than supplied by your board. */ -#define RELOAD_FIRMWARE 0 +#define RELOAD_FIRMWARE 1 /* Set the following macro to 1 to reload the ISP1020's defaults from nvram. If you are not sure of your settings, leave this alone, the driver will diff -u --recursive --new-file v2.0.4/linux/drivers/scsi/scsi.c linux/drivers/scsi/scsi.c --- v2.0.4/linux/drivers/scsi/scsi.c Mon Jul 8 16:09:55 1996 +++ linux/drivers/scsi/scsi.c Wed Jul 10 13:11:25 1996 @@ -92,7 +92,7 @@ static void print_inquiry(unsigned char *data); static void scsi_times_out (Scsi_Cmnd * SCpnt); static int scan_scsis_single (int channel,int dev,int lun,int * max_scsi_dev , - Scsi_Device ** SDpnt, Scsi_Cmnd * SCpnt, + int * sparse_lun, Scsi_Device ** SDpnt, Scsi_Cmnd * SCpnt, struct Scsi_Host *shpnt, char * scsi_result); void scsi_build_commandblocks(Scsi_Device * SDpnt); @@ -226,6 +226,7 @@ #define BLIST_KEY 0x08 #define BLIST_SINGLELUN 0x10 #define BLIST_NOTQ 0x20 +#define BLIST_SPARSELUN 0x40 struct dev_info{ const char * vendor; @@ -292,7 +293,8 @@ {"NRC","MBR-7","*", BLIST_FORCELUN | BLIST_SINGLELUN}, {"PIONEER","CD-ROM DRM-602X","*", BLIST_FORCELUN | BLIST_SINGLELUN}, {"PIONEER","CD-ROM DRM-604X","*", BLIST_FORCELUN | BLIST_SINGLELUN}, -{"EMULEX","MD21/S2 ESDI","*",BLIST_SINGLELUN}, +{"EMULEX","MD21/S2 ESDI","*", BLIST_SINGLELUN}, +{"CANON","IPUBJD","*", BLIST_SPARSELUN}, /* * Must be at end of list... */ @@ -415,7 +417,7 @@ unsigned char scsi_result0[256]; unsigned char *scsi_result; Scsi_Device *SDpnt; - int max_dev_lun; + int max_dev_lun, sparse_lun; Scsi_Cmnd *SCpnt; SCpnt = (Scsi_Cmnd *) scsi_init_malloc (sizeof (Scsi_Cmnd), GFP_ATOMIC | GFP_DMA); @@ -449,8 +451,8 @@ if(dev >= shpnt->max_id) goto leave; lun = hlun; if(lun >= shpnt->max_lun) goto leave; - scan_scsis_single (channel, dev, lun, &max_dev_lun, - &SDpnt, SCpnt, shpnt, scsi_result); + scan_scsis_single (channel, dev, lun, &max_dev_lun, &sparse_lun, + &SDpnt, SCpnt, shpnt, scsi_result); if(SDpnt!=oldSDpnt) { /* it could happen the blockdevice hasn't yet been inited */ @@ -483,9 +485,12 @@ */ max_dev_lun = (max_scsi_luns < shpnt->max_lun ? max_scsi_luns : shpnt->max_lun); + sparse_lun = 0; for (lun = 0; lun < max_dev_lun; ++lun) { if (!scan_scsis_single (channel, dev, lun, &max_dev_lun, - &SDpnt, SCpnt, shpnt, scsi_result)) + &sparse_lun, &SDpnt, SCpnt, shpnt, + scsi_result) + && !sparse_lun) break; /* break means don't probe further for luns!=0 */ } /* for lun ends */ } /* if this_id != id ends */ @@ -528,8 +533,8 @@ * Global variables used : scsi_devices(linked list) */ int scan_scsis_single (int channel, int dev, int lun, int *max_dev_lun, - Scsi_Device **SDpnt2, Scsi_Cmnd * SCpnt, struct Scsi_Host * shpnt, - char *scsi_result) + int *sparse_lun, Scsi_Device **SDpnt2, Scsi_Cmnd * SCpnt, + struct Scsi_Host * shpnt, char *scsi_result) { unsigned char scsi_cmd[12]; struct Scsi_Device_Template *sdtpnt; @@ -794,6 +799,16 @@ */ if (bflags & BLIST_SINGLELUN) SDpnt->single_lun = 1; + + /* + * If this device is known to support sparse multiple units, override the + * other settings, and scan all of them. + */ + if (bflags & BLIST_SPARSELUN) { + *max_dev_lun = 8; + *sparse_lun = 1; + return 1; + } /* * If this device is known to support multiple units, override the other diff -u --recursive --new-file v2.0.4/linux/drivers/scsi/sd.c linux/drivers/scsi/sd.c --- v2.0.4/linux/drivers/scsi/sd.c Mon Jul 8 16:09:55 1996 +++ linux/drivers/scsi/sd.c Tue Jul 9 08:08:18 1996 @@ -1054,7 +1054,7 @@ * Issue command to spin up drive for these cases. */ if(the_result && !rscsi_disks[i].device->removable && SCpnt->sense_buffer[2] == NOT_READY) { - int time1; + unsigned long time1; if(!spintime){ printk( "sd%c: Spinning up disk...", 'a' + i ); cmd[0] = START_STOP; @@ -1081,8 +1081,8 @@ spintime = jiffies; } - time1 = jiffies; - while(jiffies < time1 + HZ); /* Wait 1 second for next try */ + time1 = jiffies + HZ; + while(jiffies < time1); /* Wait 1 second for next try */ printk( "." ); } } while(the_result && spintime && spintime+100*HZ > jiffies); diff -u --recursive --new-file v2.0.4/linux/drivers/scsi/u14-34f.c linux/drivers/scsi/u14-34f.c --- v2.0.4/linux/drivers/scsi/u14-34f.c Fri Apr 19 10:08:01 1996 +++ linux/drivers/scsi/u14-34f.c Wed Jul 10 08:05:27 1996 @@ -1,6 +1,10 @@ /* * u14-34f.c - Low-level driver for UltraStor 14F/34F SCSI host adapters. * + * 09 Jul 1996 rev. 2.11 for linux 2.0.4 + * "Data over/under-run" no longer implies a redo on all targets. + * Number of internal retries is now limited. + * * 16 Apr 1996 rev. 2.10 for linux 1.3.90 * New argument "reset_flags" to the reset routine. * @@ -199,6 +203,7 @@ #define MAX_MAILBOXES 16 #define MAX_SGLIST 32 #define MAX_SAFE_SGLIST 16 +#define MAX_INTERNAL_RETRIES 64 #define MAX_CMD_PER_LUN 2 #define FALSE 0 @@ -280,6 +285,8 @@ int in_reset; /* True if board is doing a reset */ int target_time_out[MAX_TARGET]; /* N. of timeout errors on target */ int target_reset[MAX_TARGET]; /* If TRUE redo operation on target */ + unsigned int retries; /* Number of internal retries */ + unsigned long last_retried_pid; /* Pid of last retried command */ unsigned char subversion; /* Bus type, either ISA or ESA */ unsigned char heads; unsigned char sectors; @@ -763,6 +770,8 @@ return SCSI_RESET_ERROR; } + HD(j)->retries = 0; + for (k = 0; k < MAX_TARGET; k++) HD(j)->target_reset[k] = TRUE; for (k = 0; k < MAX_TARGET; k++) HD(j)->target_time_out[k] = 0; @@ -972,6 +981,8 @@ HD(j)->target_time_out[SCpnt->target] = 0; + if (HD(j)->last_retried_pid == SCpnt->pid) HD(j)->retries = 0; + break; case ASST: /* Selection Time Out */ @@ -983,20 +994,27 @@ } break; - case 0x92: /* Data over/under-run */ + + /* Perform a limited number of internal retries */ case 0x93: /* Unexpected bus free */ case 0x94: /* Target bus phase sequence failure */ case 0x96: /* Illegal SCSI command */ case 0xa3: /* SCSI bus reset error */ - if (SCpnt->device->type != TYPE_TAPE) - status = DID_BUS_BUSY << 16; - else - status = DID_ERROR << 16; - for (k = 0; k < MAX_TARGET; k++) HD(j)->target_reset[k] = TRUE; + case 0x92: /* Data over/under-run */ + + if (SCpnt->device->type != TYPE_TAPE + && HD(j)->retries < MAX_INTERNAL_RETRIES) { + status = DID_BUS_BUSY << 16; + HD(j)->retries++; + HD(j)->last_retried_pid = SCpnt->pid; + } + else + status = DID_ERROR << 16; + break; case 0x01: /* Invalid command */ case 0x02: /* Invalid parameters */ @@ -1023,7 +1041,7 @@ spp->adapter_status != ASST && HD(j)->iocount <= 1000) || do_trace) #endif - printk("%s: ihdlr, mbox %d, err 0x%x:%x,"\ + printk("%s: ihdlr, mbox %2d, err 0x%x:%x,"\ " target %d:%d, pid %ld, count %d.\n", BN(j), i, spp->adapter_status, spp->target_status, SCpnt->target, SCpnt->lun, SCpnt->pid, HD(j)->iocount); diff -u --recursive --new-file v2.0.4/linux/drivers/scsi/u14-34f.h linux/drivers/scsi/u14-34f.h --- v2.0.4/linux/drivers/scsi/u14-34f.h Fri Apr 19 10:08:01 1996 +++ linux/drivers/scsi/u14-34f.h Wed Jul 10 08:05:27 1996 @@ -10,7 +10,7 @@ int u14_34f_reset(Scsi_Cmnd *, unsigned int); int u14_34f_biosparam(Disk *, kdev_t, int *); -#define U14_34F_VERSION "2.10.00" +#define U14_34F_VERSION "2.11.00" #define ULTRASTOR_14_34F { \ NULL, /* Ptr for modules */ \ diff -u --recursive --new-file v2.0.4/linux/drivers/sound/gus_wave.c linux/drivers/sound/gus_wave.c --- v2.0.4/linux/drivers/sound/gus_wave.c Sat Jul 6 14:51:26 1996 +++ linux/drivers/sound/gus_wave.c Wed Jul 10 13:11:15 1996 @@ -1549,7 +1549,7 @@ gus_write_addr (0x02, sample_ptrs[sample] + samples[sample].loop_start, samples[sample].fractions & 0x0f, is16bits); /* Loop start location */ - gus_write_addr (0x04, sample_ptrs[sample] + samples[sample].len, + gus_write_addr (0x04, sample_ptrs[sample] + samples[sample].loop_end, (samples[sample].fractions >> 4) & 0x0f, is16bits); /* Loop end location */ } @@ -1560,7 +1560,7 @@ voices[voice].loop_irq_parm = 1; gus_write_addr (0x02, sample_ptrs[sample], 0, is16bits); /* Loop start location */ - gus_write_addr (0x04, sample_ptrs[sample] + samples[sample].loop_end - 1, + gus_write_addr (0x04, sample_ptrs[sample] + samples[sample].len - 1, (samples[sample].fractions >> 4) & 0x0f, is16bits); /* Loop end location */ } diff -u --recursive --new-file v2.0.4/linux/drivers/sound/sb_common.c linux/drivers/sound/sb_common.c --- v2.0.4/linux/drivers/sound/sb_common.c Mon Jul 8 16:09:56 1996 +++ linux/drivers/sound/sb_common.c Wed Jul 10 13:11:25 1996 @@ -130,14 +130,14 @@ sb_devc *devc = irq2devc[irq]; - devc->irq_ok = 1; - if (devc == NULL || devc->irq != irq) { DEB (printk ("sbintr: Bogus interrupt IRQ%d\n", irq)); return; } + devc->irq_ok = 1; + if (devc->model == MDL_SB16) { @@ -671,10 +671,14 @@ devc->dev = num_audiodevs; devc->caps = hw_config->driver_use_1; + irq2devc[hw_config->irq] = devc; + devc->irq_ok = 0; + if (snd_set_irq_handler (hw_config->irq, sbintr, "sound blaster", devc->osp) < 0) { printk ("SB: Can't allocate IRQ%d\n", hw_config->irq); + irq2devc[hw_config->irq] = NULL; return; } @@ -697,9 +701,6 @@ } } - irq2devc[hw_config->irq] = devc; - devc->irq_ok = 0; - for (n = 0; n < 3 && devc->irq_ok == 0; n++) if (sb_dsp_command (devc, 0xf2)) /* Cause interrupt immediately */ { @@ -1173,7 +1174,7 @@ } hw_config->name = "Sound Blaster 16"; hw_config->irq = -devc->irq; - sb16_set_mpu_port(devc, hw_config) + sb16_set_mpu_port(devc, hw_config); break; case MDL_ESS: diff -u --recursive --new-file v2.0.4/linux/fs/ext2/namei.c linux/fs/ext2/namei.c --- v2.0.4/linux/fs/ext2/namei.c Wed Jul 3 22:05:18 1996 +++ linux/fs/ext2/namei.c Wed Jul 10 13:11:15 1996 @@ -163,10 +163,12 @@ return -ENOENT; if (!S_ISDIR(dir->i_mode)) { iput (dir); - return -ENOENT; + return -ENOTDIR; } - if (len > EXT2_NAME_LEN) + if (len > EXT2_NAME_LEN) { + iput (dir); return -ENAMETOOLONG; + } if (dcache_lookup(dir, name, len, &ino)) { if (!ino) { iput(dir); @@ -407,8 +409,10 @@ if (!dir) return -ENOENT; - if (len > EXT2_NAME_LEN) + if (len > EXT2_NAME_LEN) { + iput (dir); return -ENAMETOOLONG; + } bh = ext2_find_entry (dir, name, len, &de); if (bh) { brelse (bh); @@ -472,8 +476,10 @@ if (!dir) return -ENOENT; - if (len > EXT2_NAME_LEN) + if (len > EXT2_NAME_LEN) { + iput (dir); return -ENAMETOOLONG; + } bh = ext2_find_entry (dir, name, len, &de); if (bh) { brelse (bh); @@ -611,8 +617,10 @@ if (!dir) return -ENOENT; inode = NULL; - if (len > EXT2_NAME_LEN) + if (len > EXT2_NAME_LEN) { + iput (dir); return -ENAMETOOLONG; + } bh = ext2_find_entry (dir, name, len, &de); retval = -ENOENT; if (!bh) @@ -699,8 +707,10 @@ return -ENOENT; retval = -ENOENT; inode = NULL; - if (len > EXT2_NAME_LEN) + if (len > EXT2_NAME_LEN) { + iput (dir); return -ENAMETOOLONG; + } bh = ext2_find_entry (dir, name, len, &de); if (!bh) goto end_unlink; diff -u --recursive --new-file v2.0.4/linux/fs/ncpfs/sock.c linux/fs/ncpfs/sock.c --- v2.0.4/linux/fs/ncpfs/sock.c Fri May 17 15:32:18 1996 +++ linux/fs/ncpfs/sock.c Wed Jul 10 13:19:24 1996 @@ -599,7 +599,7 @@ if (server->has_subfunction != 0) { - *(__u16 *)&(h->data[0]) = request_size - 2; + *(__u16 *)&(h->data[0]) = htons(request_size - 2); } h->type = NCP_REQUEST; diff -u --recursive --new-file v2.0.4/linux/include/asm-alpha/apecs.h linux/include/asm-alpha/apecs.h --- v2.0.4/linux/include/asm-alpha/apecs.h Wed Jun 5 10:41:29 1996 +++ linux/include/asm-alpha/apecs.h Tue Jul 9 08:08:18 1996 @@ -414,6 +414,7 @@ /* * Data structure for handling APECS machine checks: */ +#ifdef CONFIG_ALPHA_MIKASA struct el_apecs_sysdata_mcheck { unsigned long coma_gcr; unsigned long coma_edsr; @@ -425,9 +426,11 @@ unsigned long coma_base0; unsigned long coma_base1; unsigned long coma_base2; + unsigned long coma_base3; unsigned long coma_cnfg0; unsigned long coma_cnfg1; unsigned long coma_cnfg2; + unsigned long coma_cnfg3; unsigned long epic_dcsr; unsigned long epic_pear; unsigned long epic_sear; @@ -456,7 +459,100 @@ unsigned long epic_data5; unsigned long epic_data6; unsigned long epic_data7; + + unsigned long pceb_vid; + unsigned long pceb_did; + unsigned long pceb_revision; + unsigned long pceb_command; + unsigned long pceb_status; + unsigned long pceb_latency; + unsigned long pceb_control; + unsigned long pceb_arbcon; + unsigned long pceb_arbpri; + + unsigned long esc_id; + unsigned long esc_revision; + unsigned long esc_int0; + unsigned long esc_int1; + unsigned long esc_elcr0; + unsigned long esc_elcr1; + unsigned long esc_last_eisa; + unsigned long esc_nmi_stat; + + unsigned long pci_ir; + unsigned long pci_imr; + unsigned long svr_mgr; }; +#else /* CONFIG_ALPHA_MIKASA */ +/* this for the normal APECS machines */ +struct el_apecs_sysdata_mcheck { + unsigned long coma_gcr; + unsigned long coma_edsr; + unsigned long coma_ter; + unsigned long coma_elar; + unsigned long coma_ehar; + unsigned long coma_ldlr; + unsigned long coma_ldhr; + unsigned long coma_base0; + unsigned long coma_base1; + unsigned long coma_base2; + unsigned long coma_cnfg0; + unsigned long coma_cnfg1; + unsigned long coma_cnfg2; + unsigned long epic_dcsr; + unsigned long epic_pear; + unsigned long epic_sear; + unsigned long epic_tbr1; + unsigned long epic_tbr2; + unsigned long epic_pbr1; + unsigned long epic_pbr2; + unsigned long epic_pmr1; + unsigned long epic_pmr2; + unsigned long epic_harx1; + unsigned long epic_harx2; + unsigned long epic_pmlt; + unsigned long epic_tag0; + unsigned long epic_tag1; + unsigned long epic_tag2; + unsigned long epic_tag3; + unsigned long epic_tag4; + unsigned long epic_tag5; + unsigned long epic_tag6; + unsigned long epic_tag7; + unsigned long epic_data0; + unsigned long epic_data1; + unsigned long epic_data2; + unsigned long epic_data3; + unsigned long epic_data4; + unsigned long epic_data5; + unsigned long epic_data6; + unsigned long epic_data7; +}; +#endif /* CONFIG_ALPHA_MIKASA */ + +struct el_procdata { + unsigned long paltemp[32]; /* PAL TEMP REGS. */ + /* EV4-specific fields */ + unsigned long exc_addr; /* Address of excepting instruction. */ + unsigned long exc_sum; /* Summary of arithmetic traps. */ + unsigned long exc_mask; /* Exception mask (from exc_sum). */ + unsigned long iccsr; /* IBox hardware enables. */ + unsigned long pal_base; /* Base address for PALcode. */ + unsigned long hier; /* Hardware Interrupt Enable. */ + unsigned long hirr; /* Hardware Interrupt Request. */ + unsigned long csr; /* D-stream fault info. */ + unsigned long dc_stat; /* D-cache status (ECC/Parity Err). */ + unsigned long dc_addr; /* EV3 Phys Addr for ECC/DPERR. */ + unsigned long abox_ctl; /* ABox Control Register. */ + unsigned long biu_stat; /* BIU Status. */ + unsigned long biu_addr; /* BUI Address. */ + unsigned long biu_ctl; /* BIU Control. */ + unsigned long fill_syndrome;/* For correcting ECC errors. */ + unsigned long fill_addr; /* Cache block which was being read */ + unsigned long va; /* Effective VA of fault or miss. */ + unsigned long bc_tag; /* Backup Cache Tag Probe Results.*/ +}; + #define RTC_PORT(x) (0x70 + (x)) #define RTC_ADDR(x) (0x80 | (x)) diff -u --recursive --new-file v2.0.4/linux/include/linux/dirent.h linux/include/linux/dirent.h --- v2.0.4/linux/include/linux/dirent.h Wed Jul 3 22:05:20 1996 +++ linux/include/linux/dirent.h Wed Jul 10 07:38:08 1996 @@ -3,7 +3,7 @@ struct dirent { long d_ino; - off_t d_off; + __kernel_off_t d_off; unsigned short d_reclen; char d_name[256]; /* We must not include limits.h! */ }; diff -u --recursive --new-file v2.0.4/linux/include/linux/socket.h linux/include/linux/socket.h --- v2.0.4/linux/include/linux/socket.h Tue May 21 19:52:38 1996 +++ linux/include/linux/socket.h Mon Jul 8 16:09:16 1996 @@ -102,6 +102,7 @@ #define IPTOS_LOWDELAY 0x10 #define IPTOS_THROUGHPUT 0x08 #define IPTOS_RELIABILITY 0x04 +#define IPTOS_MINCOST 0x02 #define IP_TTL 2 #define IP_HDRINCL 3 #define IP_OPTIONS 4 diff -u --recursive --new-file v2.0.4/linux/mm/vmscan.c linux/mm/vmscan.c --- v2.0.4/linux/mm/vmscan.c Wed Jul 3 22:05:23 1996 +++ linux/mm/vmscan.c Wed Jul 10 14:27:31 1996 @@ -109,7 +109,7 @@ if (page_map->count != 1) return 0; if (!(entry = get_swap_page())) - return 0; + return -1; /* Aieee!!! Out of swap space! */ vma->vm_mm->rss--; flush_cache_page(vma, address); set_pte(page_table, __pte(entry)); @@ -312,6 +312,8 @@ if (!--p->swap_cnt) swap_task++; switch (swap_out_process(p, dma, wait)) { + case -1: + return 0; case 0: if (p->swap_cnt) swap_task++; diff -u --recursive --new-file v2.0.4/linux/net/ipv4/ip_output.c linux/net/ipv4/ip_output.c --- v2.0.4/linux/net/ipv4/ip_output.c Wed Jul 3 22:05:23 1996 +++ linux/net/ipv4/ip_output.c Tue Jul 9 14:28:32 1996 @@ -842,6 +842,8 @@ NULL, NULL, 0)>0) skb->arp=1; } + else + skb->arp = 1; /* * Find where to start putting bytes. diff -u --recursive --new-file v2.0.4/linux/net/ipv4/ip_sockglue.c linux/net/ipv4/ip_sockglue.c --- v2.0.4/linux/net/ipv4/ip_sockglue.c Tue May 7 16:22:41 1996 +++ linux/net/ipv4/ip_sockglue.c Tue Jul 9 08:39:55 1996 @@ -178,17 +178,18 @@ kfree_s(old_opt, sizeof(struct optlen) + old_opt->optlen); return 0; } - case IP_TOS: /* This sets both TOS and Precedence */ - if (val<0 || val>63) /* Reject setting of unused bits */ + case IP_TOS: /* This sets both TOS and Precedence */ + if (val & ~0xfe) /* Reject setting of unused bits */ return -EINVAL; - if ((val&7) > 4 && !suser()) /* Only root can set Prec>4 */ + if ((val>>5) > 4 && !suser()) /* Only root can set Prec>4 */ return -EPERM; sk->ip_tos=val; - switch (val & 0x38) { + switch (val & 0x1E) { case IPTOS_LOWDELAY: sk->priority=SOPRI_INTERACTIVE; break; case IPTOS_THROUGHPUT: + case IPTOS_MINCOST: sk->priority=SOPRI_BACKGROUND; break; default: @@ -270,7 +271,6 @@ * FIXME: Add/Del membership should have a semaphore protecting them from re-entry */ struct ip_mreq mreq; - __u32 route_src; struct rtable *rt; struct device *dev=NULL; @@ -295,9 +295,8 @@ */ if((rt=ip_rt_route(mreq.imr_multiaddr.s_addr,0))!=NULL) { - dev=rt->rt_dev; - route_src = rt->rt_src; - atomic_dec(&rt->rt_use); + dev=rt->u.dst.dev; + atomic_dec(&rt->u.dst.use); ip_rt_put(rt); } } @@ -328,7 +327,6 @@ { struct ip_mreq mreq; struct rtable *rt; - __u32 route_src; struct device *dev=NULL; /* @@ -349,9 +347,8 @@ { if((rt=ip_rt_route(mreq.imr_multiaddr.s_addr,0))!=NULL) { - dev=rt->rt_dev; - atomic_dec(&rt->rt_use); - route_src = rt->rt_src; + dev=rt->u.dst.dev; + atomic_dec(&rt->u.dst.use); ip_rt_put(rt); } } diff -u --recursive --new-file v2.0.4/linux/scripts/Menuconfig linux/scripts/Menuconfig --- v2.0.4/linux/scripts/Menuconfig Wed Jun 5 10:41:30 1996 +++ linux/scripts/Menuconfig Wed Jul 10 07:48:35 1996 @@ -733,7 +733,7 @@ # Create a menu item to load an alternate configuration file. # g_alt_config () { - echo -n "get_alt_config 'Load an Alternate Configuration File' "\ + echo -n "get_alt_config 'Load an Alternate Configuration File' "\ >>MCmenu } @@ -742,6 +742,8 @@ # configuration from it. # get_alt_config () { + set -f ## Switch file expansion OFF + while true do ALT_CONFIG="${ALT_CONFIG:-$DEFAULTS}" @@ -759,9 +761,9 @@ [ "_" = "_$ALT_CONFIG" ] && break - if [ -r "$ALT_CONFIG" ] + if eval [ -r "$ALT_CONFIG" ] then - load_config_file "$ALT_CONFIG" + eval load_config_file "$ALT_CONFIG" break else echo -ne "\007" @@ -789,6 +791,7 @@ fi done + set +f ## Switch file expansion ON rm -f help.out MCdialog.out } @@ -796,7 +799,7 @@ # Create a menu item to store an alternate config file. # s_alt_config () { - echo -n "save_alt_config 'Store an Alternate Configuration File' "\ + echo -n "save_alt_config 'Save Configuration to an Alternate File' "\ >>MCmenu } @@ -805,6 +808,8 @@ # configuration to it. # save_alt_config () { + set -f ## Switch file expansion OFF + while true do $DIALOG --backtitle "$backtitle" \ @@ -818,10 +823,10 @@ ALT_CONFIG=`cat MCdialog.out` [ "_" = "_$ALT_CONFIG" ] && break - - if touch $ALT_CONFIG 2>/dev/null + + if eval touch $ALT_CONFIG 2>/dev/null then - save_configuration $ALT_CONFIG + eval save_configuration $ALT_CONFIG load_functions ## RELOAD break else @@ -844,11 +849,12 @@ leave this blank. EOM $DIALOG --backtitle "$backtitle"\ - --title "Store Alternate Configuration"\ + --title "Save Alternate Configuration"\ --textbox help.out $ROWS $COLS fi done + set +f ## Switch file expansion ON rm -f help.out MCdialog.out }