diff -u --recursive --new-file v2.0.9/linux/Makefile linux/Makefile --- v2.0.9/linux/Makefile Tue Jul 23 08:22:48 1996 +++ linux/Makefile Fri Jul 26 14:25:08 1996 @@ -1,6 +1,6 @@ VERSION = 2 PATCHLEVEL = 0 -SUBLEVEL = 9 +SUBLEVEL = 10 ARCH = i386 diff -u --recursive --new-file v2.0.9/linux/arch/alpha/mm/fault.c linux/arch/alpha/mm/fault.c --- v2.0.9/linux/arch/alpha/mm/fault.c Thu Apr 25 08:43:43 1996 +++ linux/arch/alpha/mm/fault.c Sat Jul 27 09:49:05 1996 @@ -84,7 +84,6 @@ if (!(vma->vm_flags & VM_WRITE)) goto bad_area; } - tbis(address); handle_mm_fault(vma, address, cause > 0); return; diff -u --recursive --new-file v2.0.9/linux/drivers/block/cmd640.c linux/drivers/block/cmd640.c --- v2.0.9/linux/drivers/block/cmd640.c Tue Jul 23 11:33:32 1996 +++ linux/drivers/block/cmd640.c Sat Jul 27 11:23:41 1996 @@ -1,5 +1,5 @@ /* - * linux/drivers/block/cmd640.c Version 0.12 Jul 22, 1996 + * linux/drivers/block/cmd640.c Version 0.13 Jul 23, 1996 * * Copyright (C) 1995-1996 Linus Torvalds & authors (see below) */ @@ -61,6 +61,7 @@ * irq unmasking disabled for reliability. -lp * try to be even smarter about the second port. -lp * tidy up source code formatting. -ml + * Version 0.13 permit irq unmasking again. -ml */ #undef REALLY_SLOW_IO /* most systems can safely undef this */ @@ -451,7 +452,9 @@ */ ide_hwifs[0].chipset = ide_cmd640; ide_hwifs[0].tuneproc = &cmd640_tune_drive; +#if 0 ide_hwifs[0].no_unmask = 1; +#endif if (ide_hwifs[0].drives[0].autotune == 0) ide_hwifs[0].drives[0].autotune = 1; @@ -470,8 +473,9 @@ ide_hwifs[1].chipset = ide_cmd640; ide_hwifs[1].tuneproc = &cmd640_tune_drive; +#if 0 ide_hwifs[1].no_unmask = 1; - +#endif if (ide_hwifs[1].drives[0].autotune == 0) ide_hwifs[1].drives[0].autotune = 1; if (ide_hwifs[1].drives[1].autotune == 0) diff -u --recursive --new-file v2.0.9/linux/drivers/block/genhd.c linux/drivers/block/genhd.c --- v2.0.9/linux/drivers/block/genhd.c Thu Jul 25 09:08:28 1996 +++ linux/drivers/block/genhd.c Sat Jul 27 11:21:21 1996 @@ -326,7 +326,9 @@ */ for (i = 0; i < 4 ; i++) { struct partition *q = &p[i]; - if (NR_SECTS(q) && q->sector == 1 && q->end_sector == 63) { + if (NR_SECTS(q) + && (q->sector & 63) == 1 + && (q->end_sector & 63) == 63) { unsigned int heads = q->end_head + 1; if (heads == 32 || heads == 64 || heads == 128) { diff -u --recursive --new-file v2.0.9/linux/drivers/block/ide.c linux/drivers/block/ide.c --- v2.0.9/linux/drivers/block/ide.c Wed Jul 24 07:48:47 1996 +++ linux/drivers/block/ide.c Sat Jul 27 11:23:41 1996 @@ -1,5 +1,5 @@ /* - * linux/drivers/block/ide.c Version 5.45 Jul 22, 1996 + * linux/drivers/block/ide.c Version 5.46 Jul 23, 1996 * * Copyright (C) 1994-1996 Linus Torvalds & authors (see below) */ @@ -243,6 +243,9 @@ * add a throttle to the unexpected_intr() messages * Version 5.45 fix ugly parameter parsing bugs (thanks Derek) * include Gadi's magic fix for cmd640 unexpected_intr + * include mc68000 patches from Geert Uytterhoeven + * add Gadi's fix for PCMCIA cdroms + * Version 5.46 remove the mc68000 #ifdefs for 2.0.x * * Some additional driver compile-time options are in ide.h * @@ -1625,7 +1628,6 @@ byte stat; unsigned int unit; ide_hwif_t *hwif = hwgroup->hwif; - static unsigned long last_time = 0; /* * handle the unexpected interrupt @@ -1638,8 +1640,10 @@ continue; SELECT_DRIVE(hwif,drive); if (!OK_STAT(stat=GET_STAT(), drive->ready_stat, BAD_STAT)) { - if ((last_time + (HZ/2)) < jiffies && !drive->ignore_unexp) { - last_time = jiffies; + /* Try to not flood the console with msgs */ + static unsigned long last_msgtime = 0; + if ((last_msgtime + (HZ/2)) < jiffies) { + last_msgtime = jiffies; (void) ide_dump_status(drive, "unexpected_intr", stat); } } @@ -2210,7 +2214,7 @@ if ((id->model[0] == 'N' && id->model[1] == 'E') /* NEC */ || (id->model[0] == 'F' && id->model[1] == 'X') /* Mitsumi */ || (id->model[0] == 'P' && id->model[1] == 'i'))/* Pioneer */ - bswap ^= 1; /* Vertos drives may still be weird */ + bswap = 0; /* Vertos drives may still be weird */ } ide_fixstring (id->model, sizeof(id->model), bswap); ide_fixstring (id->fw_rev, sizeof(id->fw_rev), bswap); @@ -2383,15 +2387,10 @@ */ static int try_to_identify (ide_drive_t *drive, byte cmd) { - int irqs, rc; + int hd_status, rc; unsigned long timeout; -#ifdef CONFIG_BLK_DEV_CMD640 - int retry = 0; - int hd_status; + int irqs = 0; -try_again: -#endif /* CONFIG_BLK_DEV_CMD640 */ - irqs = 0; if (!HWIF(drive)->irq) { /* already got an IRQ? */ probe_irq_off(probe_irq_on()); /* clear dangling irqs */ irqs = probe_irq_on(); /* start monitoring irqs */ @@ -2458,19 +2457,9 @@ #ifdef CONFIG_BLK_DEV_CMD640 if (HWIF(drive)->chipset == ide_cmd640) { extern byte (*get_cmd640_reg)(int); - byte reg9 = get_cmd640_reg(0x09); printk("%s: Hmmm.. probably a driver problem.\n", drive->name); - printk("%s: cmd640 reg 09h == 0x%02x\n", drive->name, reg9); + printk("%s: cmd640 reg 09h == 0x%02x\n", drive->name, get_cmd640_reg(9)); printk("%s: cmd640 reg 51h == 0x%02x\n", drive->name, get_cmd640_reg(0x51)); - if (reg9 == 0x0a) { - printk("%s: perhaps PCI INTA has not been set to IRQ15?\n", drive->name); - if (retry++ == 0) { - extern void (*put_cmd640_reg)(int, int); - printk("%s: switching secondary interface to legacy mode\n", drive->name); - put_cmd640_reg(0x09,0x00); - goto try_again; - } - } } #endif /* CONFIG_BLK_DEV_CMD640 */ } diff -u --recursive --new-file v2.0.9/linux/drivers/block/ide.h linux/drivers/block/ide.h --- v2.0.9/linux/drivers/block/ide.h Thu Jul 25 20:27:39 1996 +++ linux/drivers/block/ide.h Sat Jul 27 12:30:13 1996 @@ -296,18 +296,6 @@ } b; } special_t; -#ifdef __BIG_ENDIAN_BITFIELD -typedef union { - unsigned all : 8; /* all of the bits together */ - struct { - unsigned bit7 : 1; /* always 1 */ - unsigned lba : 1; /* using LBA instead of CHS */ - unsigned bit5 : 1; /* always 1 */ - unsigned unit : 1; /* drive select number, 0 or 1 */ - unsigned head : 4; /* always zeros here */ - } b; - } select_t; -#else /* __BIG_ENDIAN_BITFIELD */ typedef union { unsigned all : 8; /* all of the bits together */ struct { @@ -318,7 +306,6 @@ unsigned bit7 : 1; /* always 1 */ } b; } select_t; -#endif /* __BIG_ENDIAN_BITFIELD */ typedef struct ide_drive_s { special_t special; /* special action flags */ @@ -332,7 +319,6 @@ unsigned unmask : 1; /* flag: okay to unmask other irqs */ unsigned nobios : 1; /* flag: do not probe bios for drive */ unsigned autotune : 2; /* 1=autotune, 2=noautotune, 0=default */ - unsigned ignore_unexp : 1; /* flag: ignore unexpected_intr's */ #if FAKE_FDISK_FOR_EZDRIVE unsigned remap_0_to_1 : 1; /* flag: partitioned with ezdrive */ #endif /* FAKE_FDISK_FOR_EZDRIVE */ diff -u --recursive --new-file v2.0.9/linux/drivers/block/triton.c linux/drivers/block/triton.c --- v2.0.9/linux/drivers/block/triton.c Thu Jul 25 07:18:32 1996 +++ linux/drivers/block/triton.c Sat Jul 27 11:23:41 1996 @@ -7,7 +7,7 @@ /* * This module provides support for the Bus Master IDE DMA function - * of the Intel PCI Triton chipset (82371FB). + * of the Intel PCI Triton I/II chipsets (i82371FB or i82371SB). * * DMA is currently supported only for hard disk drives (not cdroms). * @@ -15,11 +15,11 @@ * after broader experience has been obtained with hard disks. * * Up to four drives may be enabled for DMA, and the Triton chipset will - * (hopefully) arbitrate the PCI bus among them. Note that the 82371FB chip + * (hopefully) arbitrate the PCI bus among them. Note that the i82371 chip * provides a single "line buffer" for the BM IDE function, so performance of * multiple (two) drives doing DMA simultaneously will suffer somewhat, * as they contest for that resource bottleneck. This is handled transparently - * inside the 82371FB chip. + * inside the i82371 chip. * * By default, DMA support is prepared for use, but is currently enabled only * for drives which support multi-word DMA mode2 (mword2), or which are @@ -322,7 +322,7 @@ /* * print_triton_drive_flags() displays the currently programmed options - * in the 82371 (Triton) for a given drive. + * in the i82371 (Triton) for a given drive. * * If fastDMA is "no", then slow ISA timings are used for DMA data xfers. * If fastPIO is "no", then slow ISA timings are used for PIO data xfers. @@ -382,7 +382,7 @@ unsigned short pcicmd; unsigned int bmiba, timings; - printk("ide: 82371 PIIX (Triton) on PCI bus %d function %d\n", bus, fn); + printk("ide: i82371 PIIX (Triton) on PCI bus %d function %d\n", bus, fn); /* * See if IDE and BM-DMA features are enabled: */ diff -u --recursive --new-file v2.0.9/linux/fs/isofs/inode.c linux/fs/isofs/inode.c --- v2.0.9/linux/fs/isofs/inode.c Tue Jul 23 10:27:00 1996 +++ linux/fs/isofs/inode.c Sat Jul 27 11:33:06 1996 @@ -189,7 +189,7 @@ printk("isofs.inode: vol_desc_start = %d\n", ms_info.addr.lba); } #endif 0 - if (i==0) vol_desc_start=ms_info.addr.lba; + if ((i==0)&&(ms_info.xa_flag)) vol_desc_start=ms_info.addr.lba; } return vol_desc_start; } diff -u --recursive --new-file v2.0.9/linux/net/ipv4/igmp.c linux/net/ipv4/igmp.c --- v2.0.9/linux/net/ipv4/igmp.c Mon May 13 12:15:24 1996 +++ linux/net/ipv4/igmp.c Sat Jul 27 11:25:24 1996 @@ -56,6 +56,11 @@ * Christian Daudt : igmp_heard_report now only calls * igmp_timer_expire if tm->running is * true (960216). + * Malcolm Beattie : ttl comparison wrong in igmp_rcv made + * igmp_heard_query never trigger. Expiry + * miscalculation fixed in igmp_heard_query + * and random() made to return unsigned to + * prevent negative expiry times. */ @@ -207,7 +212,7 @@ } } -extern __inline__ int random(void) +extern __inline__ unsigned int random(void) { static unsigned long seed=152L; seed=seed*69069L+1; @@ -326,7 +331,7 @@ { if(im->tm_running) { - if(im->timer.expires>max_resp_time*HZ/IGMP_TIMER_SCALE) + if(im->timer.expires>jiffies+max_resp_time*HZ/IGMP_TIMER_SCALE) { igmp_stop_timer(im); igmp_start_timer(im,max_resp_time); @@ -447,7 +452,7 @@ } ih=(struct igmphdr *)skb->h.raw; - if(skb->len ip_hdr->ttl>1 || ip_compute_csum((void *)skb->h.raw,sizeof(struct igmphdr))) + if(skb->len ip_hdr->ttl<1 || ip_compute_csum((void *)skb->h.raw,sizeof(struct igmphdr))) { kfree_skb(skb, FREE_READ); return 0; diff -u --recursive --new-file v2.0.9/linux/net/ipv4/tcp.c linux/net/ipv4/tcp.c --- v2.0.9/linux/net/ipv4/tcp.c Fri Jul 5 18:17:12 1996 +++ linux/net/ipv4/tcp.c Sat Jul 27 11:54:58 1996 @@ -726,12 +726,7 @@ return 0; if (sk->state == TCP_SYN_SENT || sk->state == TCP_SYN_RECV) break; - /* - * This is now right thanks to a small fix - * by Matt Dillon. - */ - - if (sock_wspace(sk) < sk->mtu+128+sk->prot->max_header) + if (sk->wmem_alloc*2 > sk->sndbuf) break; return 1;