diff -u --recursive --new-file v1.2.2/linux/Makefile linux/Makefile --- v1.2.2/linux/Makefile Wed Mar 29 06:52:56 1995 +++ linux/Makefile Wed Mar 29 06:55:12 1995 @@ -1,6 +1,6 @@ VERSION = 1 PATCHLEVEL = 2 -SUBLEVEL = 2 +SUBLEVEL = 3 ARCH = i386 diff -u --recursive --new-file v1.2.2/linux/drivers/block/ide.c linux/drivers/block/ide.c --- v1.2.2/linux/drivers/block/ide.c Sat Mar 18 12:45:45 1995 +++ linux/drivers/block/ide.c Sun Apr 2 08:09:47 1995 @@ -125,11 +125,11 @@ #include #include #include -#include #include #include #include #include +#include #include #include #include diff -u --recursive --new-file v1.2.2/linux/drivers/char/vc_screen.c linux/drivers/char/vc_screen.c --- v1.2.2/linux/drivers/char/vc_screen.c Wed Mar 29 06:52:57 1995 +++ linux/drivers/char/vc_screen.c Sun Apr 2 10:21:20 1995 @@ -80,7 +80,6 @@ if (!vc_cons_allocated(cons)) return -ENXIO; - clear_selection(); size = vcs_size(inode); if (count < 0 || p > size) return -EINVAL; @@ -139,7 +138,6 @@ if (!vc_cons_allocated(cons)) return -ENXIO; - clear_selection(); size = vcs_size(inode); if (count < 0 || p > size) return -EINVAL; diff -u --recursive --new-file v1.2.2/linux/drivers/scsi/Makefile linux/drivers/scsi/Makefile --- v1.2.2/linux/drivers/scsi/Makefile Wed Mar 29 06:52:58 1995 +++ linux/drivers/scsi/Makefile Sun Apr 2 10:14:40 1995 @@ -62,8 +62,6 @@ ifdef CONFIG_SCSI_AHA152X SCSI_OBJS := $(SCSI_OBJS) aha152x.o SCSI_SRCS := $(SCSI_SRCS) aha152x.c -else -SCSI_MODULE_OBJS := $(SCSI_MODULE_OBJS) aha152x.o endif ifdef CONFIG_SCSI_AHA1542 diff -u --recursive --new-file v1.2.2/linux/drivers/scsi/aha152x.c linux/drivers/scsi/aha152x.c --- v1.2.2/linux/drivers/scsi/aha152x.c Wed Mar 29 06:52:58 1995 +++ linux/drivers/scsi/aha152x.c Tue Mar 28 14:33:31 1995 @@ -223,7 +223,7 @@ /* DEFINES */ /* For PCMCIA cards, always use AUTOCONF */ -#ifdef PCMCIA +#if defined(PCMCIA) || defined(MODULE) #define AUTOCONF #endif diff -u --recursive --new-file v1.2.2/linux/drivers/scsi/st.c linux/drivers/scsi/st.c --- v1.2.2/linux/drivers/scsi/st.c Sun Feb 19 10:27:21 1995 +++ linux/drivers/scsi/st.c Wed Mar 29 06:51:54 1995 @@ -251,6 +251,7 @@ Scsi_Cmnd *SCpnt; Scsi_Tape *STp = &(scsi_tapes[dev]); unsigned char cmd[10]; + unsigned int flags; cmd[0] = SPACE; cmd[1] = 0x01; /* Space FileMarks */ @@ -264,7 +265,12 @@ (void *) cmd, (void *) (STp->buffer)->b_data, 0, st_sleep_done, ST_TIMEOUT, MAX_RETRIES); + /* need to do the check with interrupts off. -RAB */ + save_flags(flags); + cli(); if (SCpnt->request.dev == dev) sleep_on( &(STp->waiting) ); + restore_flags(flags); + SCpnt->request.dev = -1; if ((STp->buffer)->last_result != 0) { printk("st%d: Backing over filemark failed.\n", dev); @@ -283,6 +289,7 @@ { int offset, transfer, blks; int result; + unsigned int flags; unsigned char cmd[10]; Scsi_Cmnd *SCpnt; Scsi_Tape *STp = &(scsi_tapes[dev]); @@ -327,8 +334,12 @@ (void *) cmd, (STp->buffer)->b_data, transfer, st_sleep_done, ST_TIMEOUT, MAX_WRITE_RETRIES); + /* this must be done with interrupts off */ + save_flags (flags); + cli(); if (SCpnt->request.dev == dev) sleep_on( &(STp->waiting) ); - + restore_flags(flags); + if ((STp->buffer)->last_result_fatal != 0) { printk("st%d: Error on flush.\n", dev); if ((SCpnt->sense_buffer[0] & 0x70) == 0x70 && @@ -406,6 +417,7 @@ { int dev; unsigned short flags; + unsigned int processor_flags; int i; unsigned char cmd[10]; Scsi_Cmnd * SCpnt; @@ -459,7 +471,12 @@ 0, st_sleep_done, ST_LONG_TIMEOUT, MAX_READY_RETRIES); + + /* this must be done with interrupts off */ + save_flags (processor_flags); + cli(); if (SCpnt->request.dev == dev) sleep_on( &(STp->waiting) ); + restore_flags(processor_flags); if ((SCpnt->sense_buffer[0] & 0x70) == 0x70 && (SCpnt->sense_buffer[2] & 0x0f) == UNIT_ATTENTION) { /* New media? */ @@ -473,7 +490,13 @@ 0, st_sleep_done, ST_LONG_TIMEOUT, MAX_READY_RETRIES); - if (SCpnt->request.dev == dev) sleep_on( &(STp->waiting) ); + + /* this must be done with interrupts off */ + save_flags (processor_flags); + cli(); + if (SCpnt->request.dev == dev) sleep_on( &(STp->waiting) ); + restore_flags(processor_flags); + (STp->mt_status)->mt_fileno = STp->drv_block = 0; STp->eof = ST_NOEOF; } @@ -509,7 +532,12 @@ (void *) cmd, (void *) (STp->buffer)->b_data, 6, st_sleep_done, ST_TIMEOUT, MAX_READY_RETRIES); + + /* this must be done with interrupts off */ + save_flags (processor_flags); + cli(); if (SCpnt->request.dev == dev) sleep_on( &(STp->waiting) ); + restore_flags(processor_flags); if (!SCpnt->result && !SCpnt->sense_buffer[0]) { STp->max_block = ((STp->buffer)->b_data[1] << 16) | @@ -539,7 +567,12 @@ (void *) cmd, (void *) (STp->buffer)->b_data, 12, st_sleep_done, ST_TIMEOUT, MAX_READY_RETRIES); + + /* this must be done with interrupts off */ + save_flags (processor_flags); + cli(); if (SCpnt->request.dev == dev) sleep_on( &(STp->waiting) ); + restore_flags(flags); if ((STp->buffer)->last_result_fatal != 0) { #ifdef DEBUG @@ -626,6 +659,7 @@ static unsigned char cmd[10]; Scsi_Cmnd * SCpnt; Scsi_Tape * STp; + unsigned int flags; dev = MINOR(inode->i_rdev); rewind = (dev & 0x80) == 0; @@ -653,7 +687,13 @@ (void *) cmd, (void *) (STp->buffer)->b_data, 0, st_sleep_done, ST_TIMEOUT, MAX_WRITE_RETRIES); + + /* this must be done with interrupts off */ + save_flags (flags); + cli(); if (SCpnt->request.dev == dev) sleep_on( &(STp->waiting) ); + restore_flags(flags); + if ((STp->buffer)->last_result_fatal != 0) { SCpnt->request.dev = -1; /* Mark as not busy */ @@ -710,6 +750,7 @@ char *b_point; Scsi_Cmnd * SCpnt; Scsi_Tape * STp; + unsigned int flags; dev = MINOR(inode->i_rdev) & 127; STp = &(scsi_tapes[dev]); @@ -813,7 +854,12 @@ (void *) cmd, (STp->buffer)->b_data, transfer, st_sleep_done, ST_TIMEOUT, MAX_WRITE_RETRIES); - if (SCpnt->request.dev == dev) sleep_on( &(STp->waiting) ); + + /* this must be done with interrupts off */ + save_flags (flags); + cli(); + if (SCpnt->request.dev == dev) sleep_on( &(STp->waiting) ); + restore_flags(flags); if ((STp->buffer)->last_result_fatal != 0) { #ifdef DEBUG @@ -944,6 +990,7 @@ static unsigned char cmd[10]; Scsi_Cmnd * SCpnt; Scsi_Tape * STp; + unsigned int flags; dev = MINOR(inode->i_rdev) & 127; STp = &(scsi_tapes[dev]); @@ -1019,7 +1066,12 @@ (STp->buffer)->buffer_size, st_sleep_done, ST_TIMEOUT, MAX_RETRIES); + + /* this must be done with interrupts off */ + save_flags (flags); + cli(); if (SCpnt->request.dev == dev) sleep_on( &(STp->waiting) ); + restore_flags(flags); (STp->buffer)->read_pointer = 0; STp->eof_hit = 0; @@ -1232,6 +1284,7 @@ Scsi_Cmnd * SCpnt; Scsi_Tape * STp; int fileno, blkno, at_sm, undone, datalen; + unsigned int flags; dev = dev & 127; STp = &(scsi_tapes[dev]); @@ -1551,7 +1604,13 @@ (void *) cmd, (void *) (STp->buffer)->b_data, datalen, st_sleep_done, timeout, MAX_RETRIES); - if (SCpnt->request.dev == dev) sleep_on( &(STp->waiting) ); + + /* this must be done with interrupts off */ + save_flags (flags); + cli(); + if (SCpnt->request.dev == dev) sleep_on( &(STp->waiting) ); + restore_flags(flags); + ioctl_result = (STp->buffer)->last_result_fatal; @@ -1676,6 +1735,7 @@ unsigned char scmd[10]; Scsi_Cmnd *SCpnt; Scsi_Tape *STp; + unsigned int flags; dev = dev & 127; STp = &(scsi_tapes[dev]); @@ -1803,7 +1863,13 @@ (void *) scmd, (void *) (STp->buffer)->b_data, 20, st_sleep_done, ST_TIMEOUT, MAX_READY_RETRIES); - if (SCpnt->request.dev == dev) sleep_on( &(STp->waiting) ); + + /* this must be done with interrupts off */ + save_flags (flags); + cli(); + if (SCpnt->request.dev == dev) sleep_on( &(STp->waiting) ); + restore_flags(flags); + if ((STp->buffer)->last_result_fatal != 0) { mt_pos.mt_blkno = (-1); diff -u --recursive --new-file v1.2.2/linux/kernel/exit.c linux/kernel/exit.c --- v1.2.2/linux/kernel/exit.c Thu Mar 9 20:37:36 1995 +++ linux/kernel/exit.c Thu Mar 30 15:54:00 1995 @@ -47,7 +47,7 @@ if (!p || sig > 32) return -EINVAL; if (!priv && ((sig != SIGCONT) || (current->session != p->session)) && - (current->euid != p->euid) && (current->uid != p->uid) && !suser()) + (current->euid != p->euid) && (current->euid != p->uid) && !suser()) return -EPERM; if (!sig) return 0;