home *** CD-ROM | disk | FTP | other *** search
/ Il CD di internet / CD.iso / SOURCE / KERNEL-S / V1.0 / PATCH8.GZ / patch8
Encoding:
Text File  |  1994-04-07  |  17.5 KB  |  496 lines

  1. diff -u --recursive --new-file v1.0.7/linux/CREDITS linux/CREDITS
  2. --- v1.0.7/linux/CREDITS    Mon Mar 21 20:42:08 1994
  3. +++ linux/CREDITS    Thu Apr  7 08:14:56 1994
  4. @@ -531,6 +531,14 @@
  5.  S: 97078 Wuerzburg
  6.  S: Germany
  7.  
  8. +N: Patrick Volkerding
  9. +E: volkerdi@ftp.cdrom.com
  10. +D: Produced the Slackware distribution, updated the SVGAlib
  11. +D: patches for ghostscript, worked on color 'ls', etc.
  12. +S: 301 15th Street S.
  13. +S: Moorhead, MN 56560
  14. +S: USA 
  15. +
  16.  N: Juergen Weigert
  17.  E: jnweiger@immd4.informatik.uni-erlangen.de
  18.  D: The Linux Support Team Erlangen
  19. diff -u --recursive --new-file v1.0.7/linux/Makefile linux/Makefile
  20. --- v1.0.7/linux/Makefile    Wed Apr  6 13:21:39 1994
  21. +++ linux/Makefile    Thu Apr  7 08:36:20 1994
  22. @@ -1,6 +1,6 @@
  23.  VERSION = 1
  24.  PATCHLEVEL = 0
  25. -SUBLEVEL = 7
  26. +SUBLEVEL = 8
  27.  
  28.  all:    Version zImage
  29.  
  30. diff -u --recursive --new-file v1.0.7/linux/drivers/scsi/fdomain.c linux/drivers/scsi/fdomain.c
  31. --- v1.0.7/linux/drivers/scsi/fdomain.c    Sun Apr  3 14:58:23 1994
  32. +++ linux/drivers/scsi/fdomain.c    Thu Apr  7 07:50:25 1994
  33. @@ -1,10 +1,10 @@
  34.  /* fdomain.c -- Future Domain TMC-16x0 SCSI driver
  35.   * Created: Sun May  3 18:53:19 1992 by faith@cs.unc.edu
  36. - * Revised: Sun Jan 23 08:59:04 1994 by faith@cs.unc.edu
  37. + * Revised: Fri Apr  1 23:47:55 1994 by faith@cs.unc.edu
  38.   * Author: Rickard E. Faith, faith@cs.unc.edu
  39.   * Copyright 1992, 1993, 1994 Rickard E. Faith
  40.   *
  41. - * $Id: fdomain.c,v 5.9 1994/01/23 13:59:14 root Exp $
  42. + * $Id: fdomain.c,v 5.15 1994/04/02 04:48:04 root Exp $
  43.  
  44.   * This program is free software; you can redistribute it and/or modify it
  45.   * under the terms of the GNU General Public License as published by the
  46. @@ -16,6 +16,10 @@
  47.   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  48.   * General Public License for more details.
  49.  
  50. + * You should have received a copy of the GNU General Public License along
  51. + * with this program; if not, write to the Free Software Foundation, Inc.,
  52. + * 675 Mass Ave, Cambridge, MA 02139, USA.
  53. +
  54.   **************************************************************************
  55.   
  56.   DESCRIPTION:
  57. @@ -26,7 +30,7 @@
  58.   high-density external connector.  The 1670 and 1680 have floppy disk
  59.   controllers built in.
  60.  
  61. - Future Domain's older boards are based on the TMC-1800 chip, and the
  62. + Future Domain's older boards are based on the TMC-1800 chip, and this
  63.   driver was originally written for a TMC-1680 board with the TMC-1800
  64.   chip.  More recently, boards are being produced with the TMC-18C50 chip.
  65.   The latest and greatest board may not work with this driver.  If you have
  66. @@ -34,6 +38,12 @@
  67.   signature, then the driver may fail to function after the board is
  68.   detected.
  69.  
  70. + The following BIOS versions are supported: 2.0, 3.0, 3.2, and 3.4.
  71. + The following chips are supported: TMC-1800, TMC-18C50.
  72. + Reports suggest that the driver will also work with the TMC-18C30 chip.
  73. + The support for the version 3.4 BIOS is new, as of March 1994, and may not
  74. + be stable.
  75. +
  76.   If you have a TMC-8xx or TMC-9xx board, then this is not the driver for
  77.   your board.  Please refer to the Seagate driver for more information and
  78.   possible support.
  79. @@ -60,6 +70,16 @@
  80.   Private communications, Drew Eckhardt (drew@cs.colorado.edu) and Eric
  81.   Youngdale (eric@tantalus.nrl.navy.mil), 1992.
  82.  
  83. + Private communication, Tuong Le (Future Domain Engineering department),
  84. + 1994. (Disk geometry computations for Future Domain BIOS version 3.4, and
  85. + TMC-18C30 detection.)
  86. +
  87. + Hogan, Thom. The Programmer's PC Sourcebook. Microsoft Press, 1988. Page
  88. + 60 (2.39: Disk Partition Table Layout).
  89. +
  90. + "18C30 Technical Reference Manual", Future Domain Corporation, 1993, page
  91. + 6-1.
  92. +
  93.  
  94.   
  95.   NOTES ON REFERENCES:
  96. @@ -95,6 +115,9 @@
  97.   his 18C50-based card for debugging.  He is the sole reason that this
  98.   driver works with the 18C50 chip.
  99.  
  100. + Thanks to Dave Newman (dnewman@crl.com) for providing initial patches for
  101. + the version 3.4 BIOS.
  102. +
  103.   All of the alpha testers deserve much thanks.
  104.   
  105.  
  106. @@ -128,11 +151,12 @@
  107.   of the two race conditions which were introduced by multiple outstanding
  108.   commands).  The instability seems a very high price to pay just so that
  109.   you don't have to wait for the tape to rewind.  When I have time, I will
  110. - work on this again.  In the interim, if anyone want to work on the code, I
  111. - can give them my latest version.
  112. + work on this again.  In the interim, if anyone wants to work on the code,
  113. + I can give them my latest version.
  114.  
  115.   **************************************************************************/
  116.  
  117. +#include <linux/config.h>
  118.  #include <linux/sched.h>
  119.  #include <asm/io.h>
  120.  #include "../block/blk.h"
  121. @@ -144,7 +168,7 @@
  122.  #include <linux/string.h>
  123.  #include <linux/ioport.h>
  124.  
  125. -#define VERSION          "$Revision: 5.9 $"
  126. +#define VERSION          "$Revision: 5.15 $"
  127.  
  128.  /* START OF USER DEFINABLE OPTIONS */
  129.  
  130. @@ -189,6 +213,7 @@
  131.     unknown          = 0x00,
  132.     tmc1800          = 0x01,
  133.     tmc18c50         = 0x02,
  134. +   tmc18c30         = 0x03,
  135.  };
  136.  
  137.  enum {
  138. @@ -204,15 +229,15 @@
  139.     Read_SCSI_Data   =  0,
  140.     SCSI_Status      =  1,
  141.     TMC_Status       =  2,
  142. -   FIFO_Status      =  3,    /* tmc18c50 only */
  143. -   Interrupt_Cond   =  4,    /* tmc18c50 only */
  144. +   FIFO_Status      =  3,    /* tmc18c50/tmc18c30 only */
  145. +   Interrupt_Cond   =  4,    /* tmc18c50/tmc18c30 only */
  146.     LSB_ID_Code      =  5,
  147.     MSB_ID_Code      =  6,
  148.     Read_Loopback    =  7,
  149.     SCSI_Data_NoACK  =  8,
  150.     Interrupt_Status =  9,
  151.     Configuration1   = 10,
  152. -   Configuration2   = 11,    /* tmc18c50 only */
  153. +   Configuration2   = 11,    /* tmc18c50/tmc18c30 only */
  154.     Read_FIFO        = 12,
  155.     FIFO_Data_Count  = 14
  156.  };
  157. @@ -223,8 +248,9 @@
  158.     Interrupt_Cntl   =  2,
  159.     SCSI_Mode_Cntl   =  3,
  160.     TMC_Cntl         =  4,
  161. -   Memory_Cntl      =  5,    /* tmc18c50 only */
  162. +   Memory_Cntl      =  5,    /* tmc18c50/tmc18c30 only */
  163.     Write_Loopback   =  7,
  164. +   IO_Control       = 11,    /* tmc18c30 only */
  165.     Write_FIFO       = 12
  166.  };
  167.  
  168. @@ -278,8 +304,9 @@
  169.  
  170.    READ EVERY WORD, ESPECIALLY THE WORD *NOT*
  171.  
  172. -  This driver works *ONLY* for Future Domain cards using the TMC-1800 or
  173. -  the TMC-18C50 chip.  This includes models TMC-1650, 1660, 1670, and 1680.
  174. +  This driver works *ONLY* for Future Domain cards using the TMC-1800,
  175. +  TMC-18C50, or TMC-18C30 chip.  This includes models TMC-1650, 1660, 1670,
  176. +  and 1680.
  177.  
  178.    The following BIOS signature signatures are for boards which do *NOT*
  179.    work with this driver (these TMC-8xx and TMC-9xx boards may work with the
  180. @@ -308,6 +335,7 @@
  181.     { "FUTURE DOMAIN CORP. (C) 1986-1990 1800-V1.07/28/89", 5, 50,  2,  0 },
  182.     { "FUTURE DOMAIN CORP. (C) 1992 V3.00.004/02/92",       5, 44,  3,  0 },
  183.     { "FUTURE DOMAIN TMC-18XX (C) 1993 V3.203/12/93",       5, 44,  3,  2 },
  184. +   { "Future Domain Corp. V1.0008/18/93",                  5, 33,  3,  4 }, 
  185.     { "FUTURE DOMAIN TMC-18XX",                             5, 22, -1, -1 },
  186.  
  187.     /* READ NOTICE ABOVE *BEFORE* YOU WASTE YOUR TIME ADDING A SIGANTURE
  188. @@ -331,7 +359,8 @@
  189.     printk( "Future Domain: BIOS version %d.%d, %s\n",
  190.         bios_major, bios_minor,
  191.         chip == tmc1800 ? "TMC-1800"
  192. -       : (chip == tmc18c50 ? "TMC-18C50" : "Unknown") );
  193. +       : (chip == tmc18c50 ? "TMC-18C50"
  194. +          : (chip == tmc18c30 ? "TMC-18C30" : "Unknown")) );
  195.     
  196.     if (interrupt_level) {
  197.        printk( "Future Domain: BIOS at %x; port base at %x; using IRQ %d\n",
  198. @@ -353,7 +382,7 @@
  199.  {
  200.     outb( 0, SCSI_Cntl_port );
  201.     outb( 0, SCSI_Mode_Cntl_port );
  202. -   if (chip == tmc18c50)
  203. +   if (chip == tmc18c50 || chip == tmc18c30)
  204.       outb( 0x21 | PARITY_MASK, TMC_Cntl_port ); /* Clear forced intr. */
  205.     else
  206.       outb( 0x01 | PARITY_MASK, TMC_Cntl_port );
  207. @@ -381,6 +410,28 @@
  208.     } else {                        /* test for 0xe960 id */
  209.        if (inb( port + MSB_ID_Code ) != 0x60) return 0;
  210.        chip = tmc18c50;
  211. +
  212. +#if 0
  213. +
  214. +                /* Try to toggle 32-bit mode.  This only
  215. +                   works on an 18c30 chip.  (User reports
  216. +                   say that this doesn't work at all, so
  217. +                   we'll use the other method.) */
  218. +
  219. +      outb( 0x80, port + IO_Control );
  220. +      if (inb( port + Configuration2 ) & 0x80 == 0x80) {
  221. +     outb( 0x00, port + IO_Control );
  222. +     if (inb( port + Configuration2 ) & 0x80 == 0x00) chip = tmc18c30;
  223. +      }
  224. +#else
  225. +
  226. +                /* That should have worked, but appears to
  227. +                                   have problems.  Lets assume it is an
  228. +                                   18c30 if the RAM is disabled. */
  229. +
  230. +      if (inb( port + Configuration2 ) & 0x02) chip = tmc18c30;
  231. +#endif
  232. +                /* If that failed, we are an 18c50. */
  233.     }
  234.  
  235.     /* We have a valid MCA ID for a TMC-1660/TMC-1680 Future Domain board.
  236. @@ -395,9 +446,13 @@
  237.     printk( " Options = %x\n", options );
  238.  #endif
  239.  
  240. -                /* Check for board with lowest bios_base. */
  241. -   if (addresses[ (options & 0xc0) >> 6 ] != bios_base)
  242. +                /* Check for board with lowest bios_base --
  243. +                   this isn't valid for the 18c30, so just
  244. +                   assume we have the right board. */
  245. +
  246. +   if (chip != tmc18c30 && addresses[ (options & 0xc0) >> 6 ] != bios_base)
  247.       return 0;
  248. +
  249.     interrupt_level = ints[ (options & 0x0e) >> 1 ];
  250.  
  251.     return 1;
  252. @@ -705,7 +760,7 @@
  253.     printk( "Arbitration failed, status = %x\n", status );
  254.  #endif
  255.  #if ERRORS_ONLY
  256. -   printk( "Future Domain: Arbitration failed, status = %x", status );
  257. +   printk( "Future Domain: Arbitration failed, status = %x\n", status );
  258.  #endif
  259.     return 1;
  260.  }
  261. @@ -723,7 +778,11 @@
  262.     /* Stop arbitration and enable parity */
  263.     outb( PARITY_MASK, TMC_Cntl_port ); 
  264.  
  265. +#if 0
  266.     timeout = jiffies + 25;            /* 250mS */
  267. +#else
  268. +   timeout = jiffies + 35;            /* 350mS -- because of timeouts */
  269. +#endif
  270.     while (jiffies < timeout) {
  271.        status = inb( SCSI_Status_port ); /* Read adapter status */
  272.        if (status & 1) {                /* Busy asserted */
  273. @@ -738,7 +797,7 @@
  274.     if (!target) printk( "Selection failed\n" );
  275.  #endif
  276.  #if ERRORS_ONLY
  277. -   if (!target) printk( "Future Domain: Selection failed" );
  278. +   if (!target) printk( "Future Domain: Selection failed\n" );
  279.  #endif
  280.     return 1;
  281.  }
  282. @@ -858,13 +917,13 @@
  283.           current_SC->cmnd[ current_SC->SCp.sent_command - 1] );
  284.  #endif
  285.       break;
  286. -      case 0x00:        /* DATA OUT -- tmc18c50 only */
  287. +      case 0x00:        /* DATA OUT -- tmc18c50/tmc18c30 only */
  288.       if (chip != tmc1800 && !current_SC->SCp.have_data_in) {
  289.          current_SC->SCp.have_data_in = -1;
  290.          outb( 0xd0 | PARITY_MASK, TMC_Cntl_port );
  291.       }
  292.       break;
  293. -      case 0x04:        /* DATA IN -- tmc18c50 only */
  294. +      case 0x04:        /* DATA IN -- tmc18c50/tmc18c30 only */
  295.       if (chip != tmc1800 && !current_SC->SCp.have_data_in) {
  296.          current_SC->SCp.have_data_in = 1;
  297.          outb( 0x90 | PARITY_MASK, TMC_Cntl_port );
  298. @@ -1315,13 +1374,13 @@
  299.     if (inb( Interrupt_Status_port ) & 0x08)
  300.       printk( " (enabled)" );
  301.     printk( "\n" );
  302. -   if (chip == tmc18c50) {
  303. +   if (chip == tmc18c50 || chip == tmc18c30) {
  304.        printk( "FIFO Status      = 0x%02x\n", inb( port_base + FIFO_Status ) );
  305.        printk( "Int. Condition   = 0x%02x\n",
  306.            inb( port_base + Interrupt_Cond ) );
  307.     }
  308.     printk( "Configuration 1  = 0x%02x\n", inb( port_base + Configuration1 ) );
  309. -   if (chip == tmc18c50)
  310. +   if (chip == tmc18c50 || chip == tmc18c30)
  311.       printk( "Configuration 2  = 0x%02x\n",
  312.           inb( port_base + Configuration2 ) );
  313.  }
  314. @@ -1396,9 +1455,20 @@
  315.     return 0;
  316.  }
  317.  
  318. +#ifdef CONFIG_BLK_DEV_SD
  319. +
  320. +#include "sd.h"
  321. +#include "scsi_ioctl.h"
  322. +
  323.  int fdomain_16x0_biosparam( int size, int dev, int *info_array )
  324.  {
  325. -   int    drive;
  326. +   int              drive;
  327. +   unsigned char    buf[512 + sizeof( int ) * 2];
  328. +   int              *sizes    = (int *)buf;
  329. +   unsigned char    *data     = (unsigned char *)(sizes + 2);
  330. +   unsigned char    do_read[] = { READ_6, 0, 0, 0, 1, 0 };
  331. +   int              retcode;
  332. +   Scsi_Device      *disk;
  333.     struct drive_info {
  334.        unsigned short cylinders;
  335.        unsigned char  heads;
  336. @@ -1438,43 +1508,84 @@
  337.      */
  338.  
  339.     drive = MINOR(dev) / 16;
  340. +   disk  = rscsi_disks[ drive ].device;
  341.  
  342.     if (bios_major == 2) {
  343.        i = (struct drive_info *)( (char *)bios_base + 0x1f31 + drive * 25 );
  344.        info_array[0] = i->heads;
  345.        info_array[1] = i->sectors;
  346.        info_array[2] = i->cylinders;
  347. -   } else if (bios_major == 3) { /* Appears to be the same for 3.0 and 3.2 */
  348. -      i = (struct drive_info *)( (char *)bios_base + 0x1f71 + drive * 10 );
  349. -      info_array[0] = i->heads + 1;
  350. -      info_array[1] = i->sectors;
  351. -      info_array[2] = i->cylinders;
  352. -   } else {
  353. -      /* How the data is stored in the RAM area is very BIOS-dependent.
  354. -         Therefore, assume a version 3 layout, and check for validity. */
  355. -      
  356. +   } else if (bios_major == 3 && bios_minor < 4) { /* 3.0 and 3.2 BIOS */
  357.        i = (struct drive_info *)( (char *)bios_base + 0x1f71 + drive * 10 );
  358.        info_array[0] = i->heads + 1;
  359.        info_array[1] = i->sectors;
  360.        info_array[2] = i->cylinders;
  361. +   } else {            /* 3.4 BIOS (and up?) */
  362. +      /* This algorithm was provided by Future Domain (much thanks!). */
  363.  
  364. -      if (!info_array[0]
  365. -      || !info_array[1]
  366. -      || !info_array[2]
  367. -      || info_array[2] > 1024 /* DOS uses only 10 bits.
  368. -                     Should this be changed
  369. -                     to support larger drives?
  370. -                     I.e., will the controller
  371. -                     "do the right thing"?
  372. -                   */
  373. -      ) {
  374. -     
  375. -     info_array[0]
  376. -           = info_array[1]
  377. -           = info_array[2]
  378. -           = 0;
  379. +      sizes[0] = 0;        /* zero bytes out */
  380. +      sizes[1] = 512;        /* one sector in */
  381. +      memcpy( data, do_read, sizeof( do_read ) );
  382. +      retcode = kernel_scsi_ioctl( disk,
  383. +                   SCSI_IOCTL_SEND_COMMAND,
  384. +                   (void *)buf );
  385. +      if (!retcode                            /* SCSI command ok */
  386. +      && data[511] == 0xaa && data[510] == 0x55 /* Partition table valid */
  387. +      && data[0x1c2]) {                /* Partition type */
  388. +
  389. +     /* The partition table layout is as follows:
  390. +
  391. +        Start: 0x1b3h
  392. +        Offset: 0 = partition status
  393. +                1 = starting head
  394. +            2 = starting sector and cylinder (word, encoded)
  395. +            4 = partition type
  396. +            5 = ending head
  397. +            6 = ending sector and cylinder (word, encoded)
  398. +            8 = starting absolute sector (double word)
  399. +            c = number of sectors (double word)
  400. +        Signature: 0x1fe = 0x55aa
  401. +
  402. +        So, this algorithm assumes:
  403. +        1) the first partition table is in use,
  404. +        2) the data in the first entry is correct, and
  405. +        3) partitions never divide cylinders
  406. +
  407. +        Note that (1) may be FALSE for NetBSD (and other BSD flavors),
  408. +            as well as for Linux.  Note also, that Linux doesn't pay any
  409. +            attention to the fields that are used by this algorithm -- it
  410. +            only uses the absolute sector data.  Recent versions of Linux's
  411. +            fdisk(1) will fill this data in correctly, and forthcoming
  412. +            versions will check for consistency.
  413. +
  414. +        Checking for a non-zero partition type is not part of the
  415. +            Future Domain algorithm, but it seemed to be a reasonable thing
  416. +            to do, especially in the Linux and BSD worlds. */
  417. +
  418. +     info_array[0] = data[0x1c3] + 1;        /* heads */
  419. +     info_array[1] = data[0x1c4] & 0x3f;        /* sectors */
  420. +      } else {
  421. +
  422. +      /* Note that this new method guarantees that there will always be
  423. +            less than 1024 cylinders on a platter.  This is good for drives
  424. +            up to approximately 7.85GB (where 1GB = 1024 * 1024 kB). */
  425. +
  426. +     if ((unsigned int)size >= 0x7e0000U) {
  427. +        info_array[0] = 0xff; /* heads   = 255 */
  428. +        info_array[1] = 0x3f; /* sectors =  63 */
  429. +     } else if ((unsigned int)size >= 0x200000U) {
  430. +        info_array[0] = 0x80; /* heads   = 128 */
  431. +        info_array[1] = 0x3f; /* sectors =  63 */
  432. +     } else {
  433. +        info_array[0] = 0x40; /* heads   =  64 */
  434. +        info_array[1] = 0x20; /* sectors =  32 */
  435. +     }
  436.        }
  437. +                /* For both methods, compute the cylinders */
  438. +      info_array[2] = (unsigned int)size / (info_array[0] * info_array[1] );
  439.     }
  440.     
  441.     return 0;
  442.  }
  443. +
  444. +#endif /* CONFIG_BLK_DEV_SD */
  445. diff -u --recursive --new-file v1.0.7/linux/drivers/scsi/fdomain.h linux/drivers/scsi/fdomain.h
  446. --- v1.0.7/linux/drivers/scsi/fdomain.h    Wed Jan  5 08:18:50 1994
  447. +++ linux/drivers/scsi/fdomain.h    Thu Apr  7 07:50:25 1994
  448. @@ -1,10 +1,10 @@
  449.  /* fdomain.h -- Header for Future Domain TMC-16x0 driver
  450.   * Created: Sun May  3 18:47:33 1992 by faith@cs.unc.edu
  451. - * Revised: Tue Jan  4 20:44:04 1994 by faith@cs.unc.edu
  452. + * Revised: Sat Mar 19 16:07:14 1994 by faith@cs.unc.edu
  453.   * Author: Rickard E. Faith, faith@cs.unc.edu
  454.   * Copyright 1992, 1993, 1994 Rickard E. Faith
  455.   *
  456. - * $Id: fdomain.h,v 5.3 1994/01/05 01:44:16 root Exp $
  457. + * $Id: fdomain.h,v 5.5 1994/03/19 21:07:38 root Exp $
  458.  
  459.   * This program is free software; you can redistribute it and/or modify it
  460.   * under the terms of the GNU General Public License as published by the
  461. @@ -16,6 +16,10 @@
  462.   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  463.   * General Public License for more details.
  464.  
  465. + * You should have received a copy of the GNU General Public License along
  466. + * with this program; if not, write to the Free Software Foundation, Inc.,
  467. + * 675 Mass Ave, Cambridge, MA 02139, USA.
  468. +
  469.   */
  470.  
  471.  #ifndef _FDOMAIN_H
  472. @@ -27,7 +31,12 @@
  473.  const char *fdomain_16x0_info( void );
  474.  int        fdomain_16x0_reset( Scsi_Cmnd * ); 
  475.  int        fdomain_16x0_queue( Scsi_Cmnd *, void (*done)(Scsi_Cmnd *) );
  476. +
  477. +#ifdef CONFIG_BLK_DEV_SD
  478.  int        fdomain_16x0_biosparam( int, int, int * );
  479. +#else
  480. +#define    fdomain_16x0_biosparam NULL
  481. +#endif
  482.  
  483.  #define FDOMAIN_16X0 { "Future Domain TMC-16x0",          \
  484.              fdomain_16x0_detect,              \
  485. diff -u --recursive --new-file v1.0.7/linux/net/inet/tcp.c linux/net/inet/tcp.c
  486. --- v1.0.7/linux/net/inet/tcp.c    Wed Apr  6 13:13:35 1994
  487. +++ linux/net/inet/tcp.c    Thu Apr  7 07:51:05 1994
  488. @@ -3407,7 +3407,6 @@
  489.      case TCP_SYN_RECV:
  490.          if (th->syn) {
  491.              /* Probably a retransmitted syn */
  492. -            printk("syn while in TCP_SYN_RECV\n");
  493.              kfree_skb(skb, FREE_READ);
  494.              release_sock(sk);
  495.              return(0);
  496.