]> git.hungrycats.org Git - linux/commitdiff
v2.4.13.8 -> v2.4.14
authorLinus Torvalds <torvalds@athlon.transmeta.com>
Tue, 5 Feb 2002 04:30:08 +0000 (20:30 -0800)
committerLinus Torvalds <torvalds@athlon.transmeta.com>
Tue, 5 Feb 2002 04:30:08 +0000 (20:30 -0800)
  - David Miller: sparc/scsi scatterlist fixes
  - Martin Mares: PCI ids, email address update
  - David Miller: revert TCP hash optimizations that need more checking
  - Ivan Kokshaysky/Richard Henderson: alpha update (atomic_dec_and_lock etc)
  - Peter Anvin: cramfs/zisofs missing pieces

67 files changed:
CREDITS
Documentation/Configure.help
Documentation/pci.txt
MAINTAINERS
Makefile
arch/alpha/config.in
arch/alpha/kernel/alpha_ksyms.c
arch/alpha/kernel/pci_iommu.c
arch/alpha/kernel/traps.c
arch/alpha/lib/Makefile
arch/alpha/lib/dec_and_lock.c [new file with mode: 0644]
arch/i386/defconfig
arch/i386/kernel/pci-i386.c
arch/i386/kernel/pci-irq.c
arch/i386/kernel/pci-pc.c
arch/i386/kernel/pci-visws.c
arch/sh/kernel/pci-sh7751.c
arch/sparc64/kernel/ioctl32.c
drivers/acorn/scsi/cumana_2.c
drivers/acorn/scsi/eesox.c
drivers/acorn/scsi/powertec.c
drivers/char/serial.c
drivers/net/arcnet/arc-rimi.c
drivers/net/arcnet/arcnet.c
drivers/net/arcnet/com20020-isa.c
drivers/net/arcnet/com20020-pci.c
drivers/net/arcnet/com20020.c
drivers/net/arcnet/com90io.c
drivers/net/arcnet/com90xx.c
drivers/pci/compat.c
drivers/pci/gen-devlist.c
drivers/pci/pci.c
drivers/pci/pci.ids
drivers/pci/proc.c
drivers/pci/quirks.c
drivers/pcmcia/i82092aa.h
drivers/pnp/quirks.c
drivers/scsi/osst.c
drivers/scsi/sg.c
drivers/usb/storage/sddr09.c
drivers/zorro/gen-devlist.c
fs/Config.in
fs/Makefile
include/asm-sparc64/xor.h
include/linux/pagemap.h
include/linux/pci.h
include/linux/skbuff.h
include/linux/swap.h
include/linux/zlib_fs.h [new file with mode: 0644]
include/net/tcp.h
kernel/ksyms.c
mm/filemap.c
mm/memory.c
mm/mmap.c
mm/page_alloc.c
mm/shmem.c
mm/swap.c
mm/vmscan.c
net/core/dv.c
net/ipv4/af_inet.c
net/ipv4/netfilter/ipt_LOG.c
net/ipv4/tcp_ipv4.c
net/ipv4/tcp_output.c
net/ipv6/netfilter/ip6t_LOG.c
net/ipv6/tcp_ipv6.c
net/netsyms.c
net/unix/af_unix.c

diff --git a/CREDITS b/CREDITS
index 91dafec186ee1851944d911d8cabdab1ddb9d4af..940617131705ae32ad59bc3ba4f6336ca20e44dd 100644 (file)
--- a/CREDITS
+++ b/CREDITS
@@ -1868,9 +1868,8 @@ S: 1324 Sofia
 S: Bulgaria
 
 N: Martin Mares
-E: mj@suse.cz
 E: mj@ucw.cz
-W: http://atrey.karlin.mff.cuni.cz/~mj/
+W: http://www.ucw.cz/~mj/
 D: BIOS video mode handling code
 D: MOXA C-218 serial board driver
 D: Network autoconfiguration
index 2672a9e81d31b528f8cf48866271e2253027b479..936a35f21f1d0d5e2c06c1c555d289bd2535fe57 100644 (file)
@@ -12258,6 +12258,15 @@ CONFIG_JOLIET
   http://www.unicode.org for more information). Say Y here if you want
   to be able to read Joliet CDROMs under Linux.
 
+Transparent decompression extension
+CONFIG_ZISOFS
+  This is a Linux-specific extension to RockRidge which lets you store
+  data in compressed form on a CD-ROM and have it transparently
+  decompressed when the CD-ROM is accessed.  See
+  <http://www.kernel.org/pub/linux/utils/fs/zisofs/> for the tools
+  necessary to create such a filesystem.  Say Y here if you want to be
+  able to read such compressed CD-ROMs.
+
 UDF File System support (read only)
 CONFIG_UDF_FS
   This is the new file system used on some CDROMs and DVDs. Say Y if
index 0fcf90a7aa89ac28000ea8e74b72aaf79c20d3cb..dadb9a9dcd426e7bfb80f75e1d4e1bdc65fde5fc 100644 (file)
@@ -1,6 +1,6 @@
                         How To Write Linux PCI Drivers
 
-                 by Martin Mares <mj@suse.cz> on 07-Feb-2000
+                  by Martin Mares <mj@ucw.cz> on 07-Feb-2000
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 The world of PCI is vast and it's full of (mostly unpleasant) surprises.
index 8d7e1bf5e9210ba480de2f7df3d0f606445e0f84..440f4deb642c67f40a7e3cf85731c181ca36d962 100644 (file)
@@ -1151,9 +1151,9 @@ S:        Maintained
 
 PCI SUBSYSTEM
 P:     Martin Mares
-M:     mj@suse.cz
+M:     mj@ucw.cz
 L:     linux-kernel@vger.kernel.org
-S:     Supported
+S:     Odd Fixes
 
 PCMCIA SUBSYSTEM
 P:     David Hinds
@@ -1401,7 +1401,7 @@ S:        Maintained
 
 SVGA HANDLING
 P:     Martin Mares
-M:     mj@suse.cz
+M:     mj@ucw.cz
 L:     linux-video@atrey.karlin.mff.cuni.cz
 S:     Maintained
 
index 92b94d0782af833ff39f9a6babe2c24812fe69b3..e7ee6f04cbd1296a5a6ec9542fbaf163e6ec8ff0 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1,7 +1,7 @@
 VERSION = 2
 PATCHLEVEL = 4
 SUBLEVEL = 14
-EXTRAVERSION =-pre8
+EXTRAVERSION =
 
 KERNELRELEASE=$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)
 
index 09083ec3b288d246c457cc43646063856f882ce5..b67e2c4fbda3c14ebdbab42b1e36897626dfd5a5 100644 (file)
@@ -217,6 +217,10 @@ then
        bool 'Symmetric multi-processing support' CONFIG_SMP
 fi
 
+if [ "$CONFIG_SMP" = "y" ]; then
+   define_bool CONFIG_HAVE_DEC_LOCK y
+fi
+
 if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
    bool 'Discontiguous Memory Support' CONFIG_DISCONTIGMEM
    if [ "$CONFIG_DISCONTIGMEM" = "y" ]; then
index ba6ee64a384db8e7f1bbbb1b76c9c32f4005890a..f09f1b2ffb70134723de740bc84abc8252732459 100644 (file)
@@ -221,6 +221,7 @@ EXPORT_SYMBOL(__global_cli);
 EXPORT_SYMBOL(__global_sti);
 EXPORT_SYMBOL(__global_save_flags);
 EXPORT_SYMBOL(__global_restore_flags);
+EXPORT_SYMBOL(atomic_dec_and_lock);
 #if DEBUG_SPINLOCK
 EXPORT_SYMBOL(spin_unlock);
 EXPORT_SYMBOL(debug_spin_lock);
index 4b620c713832c8f90112a588a0e20c0900337a5c..ffa69a431b5703e7e18aa89f605dda0dc0941b96 100644 (file)
@@ -250,7 +250,7 @@ pci_map_single(struct pci_dev *pdev, void *cpu_addr, size_t size, int dir)
        if (dir == PCI_DMA_NONE)
                BUG();
        return pci_map_single_1(pdev, cpu_addr, size,
-                               (pdev->dma_mask >> 32) != 0);
+                               pdev ? (pdev->dma_mask >> 32) != 0 : 0);
 }
 
 dma_addr_t
@@ -260,7 +260,7 @@ pci_map_page(struct pci_dev *pdev, struct page *page, unsigned long offset,
        if (dir == PCI_DMA_NONE)
                BUG();
        return pci_map_single_1(pdev, (char *)page_address(page) + offset,
-                               size, (pdev->dma_mask >> 32) != 0);
+                               size, pdev ? (pdev->dma_mask >> 32) != 0 : 0);
 }
 
 /* Unmap a single streaming mode DMA translation.  The DMA_ADDR and
@@ -304,7 +304,7 @@ pci_unmap_single(struct pci_dev *pdev, dma_addr_t dma_addr, size_t size,
        dma_ofs = (dma_addr - arena->dma_base) >> PAGE_SHIFT;
        if (dma_ofs * PAGE_SIZE >= arena->size) {
                printk(KERN_ERR "Bogus pci_unmap_single: dma_addr %lx "
-                      " base %x size %x\n", dma_addr, arena->dma_base,
+                      " base %lx size %x\n", dma_addr, arena->dma_base,
                       arena->size);
                return;
                BUG();
index 4b6f52900b6f5e08b2919ce5a712178db47b03f7..c95dcf6518c3f3b9271093f4c9988303520f3f06 100644 (file)
@@ -295,9 +295,13 @@ do_entIF(unsigned long type, unsigned long a1,
                           we get the correct PC.  If not, we set a flag
                           to correct it every time through.
                        */
-                       if (opDEC_testing && regs.pc == opDEC_test_pc) {
-                               opDEC_fix = 4;
-                               printk("opDEC fixup enabled.\n");
+                       if (opDEC_testing) {
+                               if (regs.pc == opDEC_test_pc) {
+                                       opDEC_fix = 4;
+                                       regs.pc += 4;
+                                       printk("opDEC fixup enabled.\n");
+                               }
+                               return;
                        }
                        regs.pc += opDEC_fix; 
                        
index a92ba4c9d4b22b9e69f55faf9935a244c9d4f58e..198125182f11e801d73ed601ccde190d72e5827e 100644 (file)
@@ -49,6 +49,10 @@ OBJS =       __divqu.o __remqu.o __divlu.o __remlu.o \
        fpreg.o \
        callback_srm.o srm_puts.o srm_printk.o
 
+ifeq ($(CONFIG_SMP),y)
+  OBJS += dec_and_lock.o
+endif
+
 lib.a: $(OBJS)
        $(AR) rcs lib.a $(OBJS)
 
diff --git a/arch/alpha/lib/dec_and_lock.c b/arch/alpha/lib/dec_and_lock.c
new file mode 100644 (file)
index 0000000..4497441
--- /dev/null
@@ -0,0 +1,40 @@
+/*
+ * arch/alpha/lib/dec_and_lock.c
+ *
+ * ll/sc version of atomic_dec_and_lock()
+ * 
+ */
+
+#include <linux/spinlock.h>
+#include <asm/atomic.h>
+
+  asm (".text                                  \n\
+       .global atomic_dec_and_lock             \n\
+       .ent atomic_dec_and_lock                \n\
+       .align  4                               \n\
+atomic_dec_and_lock:                           \n\
+       .prologue 0                             \n\
+1:     ldl_l   $1, 0($16)                      \n\
+       subl    $1, 1, $1                       \n\
+       beq     $1, 2f                          \n\
+       stl_c   $1, 0($16)                      \n\
+       beq     $1, 3f                          \n\
+       mb                                      \n\
+       clr     $0                              \n\
+       ret                                     \n\
+3:     br      1b                              \n\
+2:     lda     $27, atomic_dec_and_lock_1      \n\
+       .end atomic_dec_and_lock");
+
+       /* FALLTHRU */
+
+static int __attribute__((unused))
+atomic_dec_and_lock_1(atomic_t *atomic, spinlock_t *lock)
+{
+       /* Slow path */
+       spin_lock(lock);
+       if (atomic_dec_and_test(atomic))
+               return 1;
+       spin_unlock(lock);
+       return 0;
+}
index 7e5c18498361f74cca9bc9da617da754d2695d5a..ae0ccd783bba924cc589c8d83aa482086a6f06fa 100644 (file)
@@ -614,6 +614,7 @@ CONFIG_TMPFS=y
 # CONFIG_RAMFS is not set
 CONFIG_ISO9660_FS=y
 # CONFIG_JOLIET is not set
+# CONFIG_ZISOFS is not set
 # CONFIG_MINIX_FS is not set
 # CONFIG_VXFS_FS is not set
 # CONFIG_NTFS_FS is not set
@@ -655,6 +656,8 @@ CONFIG_LOCKD=y
 # CONFIG_NCPFS_SMALLDOS is not set
 # CONFIG_NCPFS_NLS is not set
 # CONFIG_NCPFS_EXTRAS is not set
+# CONFIG_ZISOFS_FS is not set
+# CONFIG_ZLIB_FS_INFLATE is not set
 
 #
 # Partition Types
index 2fdc05c60d73234bae7026373f5afa1a3da78f57..389c2d0cb5d53be5afe731016b726047edfa93ef 100644 (file)
@@ -12,7 +12,7 @@
  *     Hannover, Germany
  *     hm@ix.de
  *
- * Copyright 1997--2000 Martin Mares <mj@suse.cz>
+ * Copyright 1997--2000 Martin Mares <mj@ucw.cz>
  *
  * For more information, please consult the following manuals (look at
  * http://www.pcisig.com/ for how to get them):
index b5519558ab15df78e7fe2dfd06cb5868f53fc1b0..0c45abebda3838796e0a3926eea994cd48f8c39e 100644 (file)
@@ -1,7 +1,7 @@
 /*
  *     Low-Level PCI Support for PC -- Routing of Interrupts
  *
- *     (c) 1999--2000 Martin Mares <mj@suse.cz>
+ *     (c) 1999--2000 Martin Mares <mj@ucw.cz>
  */
 
 #include <linux/config.h>
index 54285845f543e91e4e7dc5f8cf52ca535bd8ff4b..68b4849aaf7a963672328ed04458af8673059ba9 100644 (file)
@@ -1,7 +1,7 @@
 /*
  *     Low-Level PCI Support for PC
  *
- *     (c) 1999--2000 Martin Mares <mj@suse.cz>
+ *     (c) 1999--2000 Martin Mares <mj@ucw.cz>
  */
 
 #include <linux/config.h>
@@ -521,7 +521,7 @@ static int __init check_pcibios(void)
                DBG("PCI: BIOS probe returned s=%02x hw=%02x ver=%02x.%02x l=%02x\n",
                        status, hw_mech, major_ver, minor_ver, pcibios_last_bus);
                if (status || signature != PCI_SIGNATURE) {
-                       printk (KERN_ERR "PCI: BIOS BUG #%x[%08x] found, report to <mj@suse.cz>\n",
+                       printk (KERN_ERR "PCI: BIOS BUG #%x[%08x] found\n",
                                status, signature);
                        return 0;
                }
@@ -773,7 +773,7 @@ static struct pci_ops * __init pci_find_bios(void)
                if (sum != 0)
                        continue;
                if (check->fields.revision != 0) {
-                       printk("PCI: unsupported BIOS32 revision %d at 0x%p, report to <mj@suse.cz>\n",
+                       printk("PCI: unsupported BIOS32 revision %d at 0x%p\n",
                                check->fields.revision, check);
                        continue;
                }
index 15e4c584fc33ff9d5b1e6eb0fcc9a811e22c90a8..c583be60d66e1b6db413e71b522ceb71f7aaa1ba 100644 (file)
@@ -1,7 +1,7 @@
 /*
  *     Low-Level PCI Support for SGI Visual Workstation
  *
- *     (c) 1999--2000 Martin Mares <mj@suse.cz>
+ *     (c) 1999--2000 Martin Mares <mj@ucw.cz>
  */
 
 #include <linux/config.h>
index 15c20ce47c3e17ce77ea242bf8c0096d00abb6e1..32529eea41a1e8ad4100f502d2b5727226353b58 100644 (file)
@@ -3,7 +3,7 @@
  *
  *  Dustin McIntire (dustin@sensoria.com)
  *     Derived from arch/i386/kernel/pci-*.c which bore the message:
- *     (c) 1999--2000 Martin Mares <mj@suse.cz>
+ *     (c) 1999--2000 Martin Mares <mj@ucw.cz>
  *     
  *  May be copied or modified under the terms of the GNU General Public
  *  License.  See linux/COPYING for more information.
index 68d65d7a3deb23d84c468d76ef9b54dde9e85427..1a7710704530296fd09db3dd96b8c5781b6a9c0a 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: ioctl32.c,v 1.126 2001/10/18 11:41:02 davem Exp $
+/* $Id: ioctl32.c,v 1.127 2001/11/01 23:54:19 davem Exp $
  * ioctl32.c: Conversion between 32bit and 64bit native ioctls.
  *
  * Copyright (C) 1997-2000  Jakub Jelinek  (jakub@redhat.com)
@@ -592,44 +592,6 @@ out:
        return err;
 }
 
-static int mii_ioctl(unsigned long fd, unsigned int cmd, unsigned long arg)
-{
-       struct ifreq ifr;
-       mm_segment_t old_fs;
-       int err;
-       u32 data;
-
-       if (copy_from_user(&ifr, (struct ifreq32 *)arg, sizeof(struct ifreq32)))
-               return -EFAULT;
-       ifr.ifr_data = (__kernel_caddr_t) kmalloc(sizeof(struct mii_ioctl_data),
-                                                 GFP_KERNEL);
-       if (!ifr.ifr_data)
-               return -EAGAIN;
-
-       __get_user(data, &(((struct ifreq32 *)arg)->ifr_ifru.ifru_data));
-       if (copy_from_user(ifr.ifr_data, (char *)A(data),
-                          sizeof(struct mii_ioctl_data))) {
-               err = -EFAULT;
-               goto out;
-       }
-
-       old_fs = get_fs();
-       set_fs(KERNEL_DS);
-       err = sys_ioctl(fd, cmd, (unsigned long)&ifr);
-       set_fs(old_fs);
-
-       if (!err) {
-               if (copy_to_user((char *)A(data),
-                                ifr.ifr_data,
-                                sizeof(struct mii_ioctl_data)))
-                       err = -EFAULT;
-       }
-
-out:
-       kfree(ifr.ifr_data);
-       return err;
-}
-
 static inline int dev_ifsioc(unsigned int fd, unsigned int cmd, unsigned long arg)
 {
        struct ifreq ifr;
@@ -4102,6 +4064,9 @@ COMPATIBLE_IOCTL(SIOCGRARP)
 COMPATIBLE_IOCTL(SIOCDRARP)
 COMPATIBLE_IOCTL(SIOCADDDLCI)
 COMPATIBLE_IOCTL(SIOCDELDLCI)
+COMPATIBLE_IOCTL(SIOCGMIIPHY)
+COMPATIBLE_IOCTL(SIOCGMIIREG)
+COMPATIBLE_IOCTL(SIOCSMIIREG)
 /* SG stuff */
 COMPATIBLE_IOCTL(SG_SET_TIMEOUT)
 COMPATIBLE_IOCTL(SG_GET_TIMEOUT)
@@ -4523,9 +4488,6 @@ HANDLE_IOCTL(SIOCGPPPVER, dev_ifsioc)
 HANDLE_IOCTL(SIOCGIFTXQLEN, dev_ifsioc)
 HANDLE_IOCTL(SIOCSIFTXQLEN, dev_ifsioc)
 HANDLE_IOCTL(SIOCETHTOOL, ethtool_ioctl)
-HANDLE_IOCTL(SIOCGMIIPHY, mii_ioctl)
-HANDLE_IOCTL(SIOCGMIIREG, mii_ioctl)
-HANDLE_IOCTL(SIOCSMIIREG, mii_ioctl)
 HANDLE_IOCTL(SIOCADDRT, routing_ioctl)
 HANDLE_IOCTL(SIOCDELRT, routing_ioctl)
 /* Note SIOCRTMSG is no longer, so this is safe and * the user would have seen just an -EINVAL anyways. */
index 24b59ca93ac06fd041b41f7851cf4bbaa703f747..1a049d345c6d2e63aaa5dcdbe97f296759fc8041 100644 (file)
@@ -195,6 +195,7 @@ cumanascsi_2_dma_setup(struct Scsi_Host *host, Scsi_Pointer *SCp,
                        memcpy(info->sg + 1, SCp->buffer + 1,
                                sizeof(struct scatterlist) * bufs);
                info->sg[0].address = SCp->ptr;
+               info->sg[0].page    = NULL;
                info->sg[0].length  = SCp->this_residual;
 
                if (direction == DMA_OUT)
index 19fb20ef59bd6f91647bf372df288417ae7a2d32..f2c0c9fc0f765a440d22c28c303fb5ea0dcba157 100644 (file)
@@ -199,7 +199,8 @@ eesoxscsi_dma_setup(struct Scsi_Host *host, Scsi_Pointer *SCp,
                        memcpy(info->sg + 1, SCp->buffer + 1,
                                sizeof(struct scatterlist) * bufs);
                info->sg[0].address = SCp->ptr;
-               info->sg[0].length = SCp->this_residual;
+               info->sg[0].page    = NULL;
+               info->sg[0].length  = SCp->this_residual;
 
                if (direction == DMA_OUT)
                        pci_dir = PCI_DMA_TODEVICE,
index dc61d3ce54b3f8fee903ce31d74123987295fc79..97b1d07ce4301f2bfe5370031607a50bcd228283 100644 (file)
@@ -187,7 +187,8 @@ powertecscsi_dma_setup(struct Scsi_Host *host, Scsi_Pointer *SCp,
                        memcpy(info->sg + 1, SCp->buffer + 1,
                                sizeof(struct scatterlist) * bufs);
                info->sg[0].address = SCp->ptr;
-               info->sg[0].length = SCp->this_residual;
+               info->sg[0].page    = NULL;
+               info->sg[0].length  = SCp->this_residual;
 
                if (direction == DMA_OUT)
                        pci_dir = PCI_DMA_TODEVICE,
index 55b642532fa8b27c3df8a834b564c37aa63b6313..ed092b2fea0bc4c14e1a1b8077007889476d2322 100644 (file)
@@ -4457,7 +4457,7 @@ static int __devinit serial_init_one(struct pci_dev *dev,
        else if (serial_pci_guess_board(dev, &tmp) == 0) {
                printk(KERN_INFO "Redundant entry in serial pci_table.  "
                       "Please send the output of\n"
-                      "lspci -vv, this message (%d,%d,%d,%d)\n"
+                      "lspci -vv, this message (%04x,%04x,%04x,%04x)\n"
                       "and the manufacturer and name of "
                       "serial board or modem board\n"
                       "to serial-pci-info@lists.sourceforge.net.\n",
index a797c8272db3911f98514f6999500ea95699891c..571670eaeb84c2cde668df6d278e5f2e6753fefe 100644 (file)
@@ -2,7 +2,7 @@
  * Linux ARCnet driver - "RIM I" (entirely mem-mapped) cards
  * 
  * Written 1994-1999 by Avery Pennarun.
- * Written 1999-2000 by Martin Mares <mj@suse.cz>.
+ * Written 1999-2000 by Martin Mares <mj@ucw.cz>.
  * Derived from skeleton.c by Donald Becker.
  *
  * Special thanks to Contemporary Controls, Inc. (www.ccontrols.com)
index f18fff900e3bf56d085a47724bcc370e21f6a5a7..826f26dd69fa6a3f26e4f1e1b3135a690786c4e4 100644 (file)
@@ -3,7 +3,7 @@
  * 
  * Written 1997 by David Woodhouse.
  * Written 1994-1999 by Avery Pennarun.
- * Written 1999-2000 by Martin Mares <mj@suse.cz>.
+ * Written 1999-2000 by Martin Mares <mj@ucw.cz>.
  * Derived from skeleton.c by Donald Becker.
  *
  * Special thanks to Contemporary Controls, Inc. (www.ccontrols.com)
index 56671567d28ed7410227f22d628a05a2d9dc5165..621ff78cede373320cd12471f35b1998f1461df5 100644 (file)
@@ -3,7 +3,7 @@
  * 
  * Written 1997 by David Woodhouse.
  * Written 1994-1999 by Avery Pennarun.
- * Written 1999-2000 by Martin Mares <mj@suse.cz>.
+ * Written 1999-2000 by Martin Mares <mj@ucw.cz>.
  * Derived from skeleton.c by Donald Becker.
  *
  * Special thanks to Contemporary Controls, Inc. (www.ccontrols.com)
index 0769eb396dadb4c80e5af28625387e098ed67f1f..4858285e861dff9c89fb36c0bdccd91945f0d57a 100644 (file)
@@ -3,7 +3,7 @@
  * 
  * Written 1994-1999 by Avery Pennarun,
  *    based on an ISA version by David Woodhouse.
- * Written 1999-2000 by Martin Mares <mj@suse.cz>.
+ * Written 1999-2000 by Martin Mares <mj@ucw.cz>.
  * Derived from skeleton.c by Donald Becker.
  *
  * Special thanks to Contemporary Controls, Inc. (www.ccontrols.com)
index ba4d5eb3bfe326e4b925924a987018a8e7276919..851e43be975f9b85eff8dbc66c16b6991c3f80d8 100644 (file)
@@ -3,7 +3,7 @@
  * 
  * Written 1997 by David Woodhouse.
  * Written 1994-1999 by Avery Pennarun.
- * Written 1999 by Martin Mares <mj@suse.cz>.
+ * Written 1999 by Martin Mares <mj@ucw.cz>.
  * Derived from skeleton.c by Donald Becker.
  *
  * Special thanks to Contemporary Controls, Inc. (www.ccontrols.com)
index 51bdff18fedcbaa4221da1edbdcccda48550e77e..c6401d6c497148b6c51999dadf809800198d4f6d 100644 (file)
@@ -3,7 +3,7 @@
  * 
  * Written 1997 by David Woodhouse.
  * Written 1994-1999 by Avery Pennarun.
- * Written 1999-2000 by Martin Mares <mj@suse.cz>.
+ * Written 1999-2000 by Martin Mares <mj@ucw.cz>.
  * Derived from skeleton.c by Donald Becker.
  *
  * Special thanks to Contemporary Controls, Inc. (www.ccontrols.com)
index 8269d0d2b9d5adf4a7587daaf7c3b103a387953a..fd92d5e808f6ca006ca6a2e676a8c9c226df5693 100644 (file)
@@ -2,7 +2,7 @@
  * Linux ARCnet driver - COM90xx chipset (memory-mapped buffers)
  * 
  * Written 1994-1999 by Avery Pennarun.
- * Written 1999 by Martin Mares <mj@suse.cz>.
+ * Written 1999 by Martin Mares <mj@ucw.cz>.
  * Derived from skeleton.c by Donald Becker.
  *
  * Special thanks to Contemporary Controls, Inc. (www.ccontrols.com)
index ce058cc0e7c358a0d7e9fa5d59f21e5291c90a33..2aa07768628525340b8bb899251c2444afef278f 100644 (file)
@@ -3,7 +3,7 @@
  *
  *     PCI Bus Services -- Function For Backward Compatibility
  *
- *     Copyright 1998--2000 Martin Mares <mj@suse.cz>
+ *     Copyright 1998--2000 Martin Mares <mj@ucw.cz>
  */
 
 #include <linux/types.h>
index 4481a14d5a1869b73ded3ca377c015f8d7fd4bfb..7c718080e2573fc32eb818e68246fd18ab557b45 100644 (file)
@@ -1,7 +1,7 @@
 /*
  *     Generate devlist.h and classlist.h from the PCI ID file.
  *
- *     (c) 1999--2000 Martin Mares <mj@suse.cz>
+ *     (c) 1999--2000 Martin Mares <mj@ucw.cz>
  */
 
 #include <stdio.h>
index 944ab82106032cea62db3e2a67bfcf641ff7fbcd..29e54fcaf31003c7182ba3c2a0aff7dac8221a92 100644 (file)
@@ -6,7 +6,7 @@
  *     Copyright 1993 -- 1997 Drew Eckhardt, Frederic Potter,
  *     David Mosberger-Tang
  *
- *     Copyright 1997 -- 2000 Martin Mares <mj@suse.cz>
+ *     Copyright 1997 -- 2000 Martin Mares <mj@ucw.cz>
  */
 
 #include <linux/config.h>
index aa757e09c09b55bc1d31dc5f9a2a2b1440913d44..c67b18fbf1c398187be6a94c644840d452eb50ea 100644 (file)
@@ -1,10 +1,13 @@
 #
 #      List of PCI ID's
 #
-#      Maintained by Martin Mares <pci-ids@ucw.cz>
-#      If you have any new entries, send them to the maintainer.
+#      Maintained by Martin Mares <mj@ucw.cz> and other volunteers from the
+#      Linux PCI ID's Project at http://pciids.sf.net/. New data are always
+#      welcome (if they are accurate), we're eagerly expecting new entries,
+#      so if you have anything to contribute, please visit the home page or
+#      send a diff -u against the most recent pci.ids to pci-ids@ucw.cz.
 #
-#      $Id: pci.ids,v 1.62 2000/06/28 10:56:36 mj Exp $
+#      $Id: pci.ids,v 1.24 2001/10/28 21:55:26 mares Exp $
 #
 
 # Vendors, devices and subsystems. Please keep sorted.
@@ -45,6 +48,7 @@
                8086 002a  PCI Hotplug Controller A
                8086 002b  PCI Hotplug Controller B
        a0f8  USB Open Host Controller
+       a0fc  Fibre Channel Host Controller
        ae10  Smart-2/P RAID Controller
                0e11 4030  Smart-2/P Array Controller
                0e11 4031  Smart-2SL Array Controller
@@ -70,6 +74,7 @@
        b02f  NC1120 Ethernet NIC
        b030  Netelligent WS 5100
        b04a  10/100 TX PCI Intel WOL UTP Controller
+       b060  Smart Array 5300 Controller
        b0c6  NC3161 Fast Ethernet NIC
        b0c7  NC3160 Fast Ethernet NIC
        b0d7  NC3121 Fast Ethernet NIC
@@ -84,6 +89,7 @@
        b144  NC3123 Fast Ethernet NIC
        b163  NC3134 Fast Ethernet NIC
        b164  NC3135 Fast Ethernet Upgrade Module
+       b178  Smart Array 5i/532
        b1a4  NC7131 Gigabit Server Adapter
        f130  NetFlex-3/P ThunderLAN 1.0
        f150  NetFlex-3/P ThunderLAN 2.3
        4554  210888ET [Mach64 ET]
        4654  Mach64 VT
        4742  3D Rage Pro AGP 1X/2X
-               1028 4082  Optiplex GX1 Onboard Display Adapter 
+               1028 4082  Optiplex GX1 Onboard Display Adapter
                8086 4152  Rage 3D Pro AGP
        4744  3D Rage Pro AGP 1X
        4747  3D Rage Pro
        4c52  Rage Mobility P/M
        4c53  Rage Mobility L
        4c54  264LT [Mach64 LT]
+       4c57  Radeon Mobility M6 LW
+       4c59  Radeon Mobility M6 LY
+       4c5a  Radeon Mobility M6 LZ
        4d46  Rage Mobility M4 AGP
        4d4c  Rage Mobility M4 AGP
        5041  Rage 128 PA
        5056  Rage 128 PV
        5057  Rage 128 PW
        5058  Rage 128 PX
+       5144  Radeon QD
+       5145  Radeon QE
+       5146  Radeon QF
+       5147  Radeon QG
+       5159  Radeon VE QY
+       515a  Radeon VE QZ
        5245  Rage 128 RE
        5246  Rage 128 RF
+       5247  Rage 128 RG
        524b  Rage 128 RK
        524c  Rage 128 RL
        5345  Rage 128 SE
        534b  Rage 128 SK
        534c  Rage 128 SL
        534d  Rage 128 SM
-       534e  Rage 128 4x
+       534e  Rage 128 SN
        5354  Mach 64 VT
                1002 5654  Mach 64 reference
+       5446  Rage 128 Pro TF
+       544c  Rage 128 Pro TL
+       5452  Rage 128 Pro TR
        5654  264VT [Mach64 VT]
                1002 5654  Mach64VT Reference
        5655  264VT3 [Mach64 VT3]
        000f  OHCI Compliant FireWire Controller
        0011  National PCI System I/O
        0012  USB Controller
-       0020  DP83815
-       0022  DP83820
+       0020  DP83815 (MacPhyter) Ethernet Controller
+       0022  DP83820 10/100/1000 Ethernet Controller
        d001  87410 IDE
 100c  Tseng Labs Inc
        3202  ET4000/W32p rev A
        0026  DECchip 21154
        0045  DECchip 21553
        0046  DECchip 21554
+               103c 10c2  Hewlett-Packard NetRAID-4M
+               9005 0365  Adaptec 5400S
                9005 1364  Dell PowerEdge RAID Controller 2
                9005 1365  Dell PowerEdge RAID Controller 2
        1065  StrongARM DC21285
        007c  ATM Controller (14107c00)
        007d  3780IDSP [MWave]
        0090  GXT 3000P
-               1014 008E  GXT-3000P
+               1014 008e  GXT-3000P
        0095  20H2999 PCI Docking Bridge
        0096  Chukar chipset SCSI controller
-               1014 0099  iSeries 2748 DASD IOA
-               1014 0098  iSeries 2763 DASD IOA
                1014 0097  iSeries 2778 DASD IOA
+               1014 0098  iSeries 2763 DASD IOA
+               1014 0099  iSeries 2748 DASD IOA
        00a5  ATM Controller (1410a500)
        00a6  ATM 155MBPS MM Controller (1410a600)
        00b7  256-bit Graphics Rasterizer [Fire GL1]
                1902 00b8  Fire GL1
        00be  ATM 622MBPS Controller (1410be00)
        0142  Yotta Video Compositor Input
-               1014 0143 Yotta Input Controller (ytin)
+               1014 0143  Yotta Input Controller (ytin)
        0144  Yotta Video Compositor Output
-               1014 0145 Yotta Output Controller (ytout)
+               1014 0145  Yotta Output Controller (ytout)
        0156  405GP PLB to PCI Bridge
        01bd  Netfinity ServeRAID controller
        01be  ServeRAID-4M
        c24a  90C
 101e  American Megatrends Inc.
        1960  MegaRAID
-               1028 0471 PowerEdge RAID Controller 3/QC
-               1028 0493 PowerEdge RAID Controller 3/DC
+               1028 0471  PowerEdge RAID Controller 3/QC
+               1028 0493  PowerEdge RAID Controller 3/DC
        9010  MegaRAID
        9030  EIDE Controller
        9031  EIDE Controller
        2040  79c974
        7006  AMD-751 [Irongate] System Controller
        7007  AMD-751 [Irongate] AGP Bridge
-       700E  AMD-760 [Irongate] System Controller
-       700F  AMD-760 [Irongate] AGP Bridge
+       700e  AMD-760 [Irongate] System Controller
+       700f  AMD-760 [Irongate] AGP Bridge
        7400  AMD-755 [Cobra] ISA
        7401  AMD-755 [Cobra] IDE
        7403  AMD-755 [Cobra] ACPI
        9850  3DImage 9850
        9880  Blade 3D PCI/AGP
                1023 9880  Blade 3D
+       9910  CyberBlade/XP
+       9930  CyberBlade/XPm
 1024  Zenith Data Systems
 1025  Acer Incorporated [ALI]
        1435  M1435
        0000  HYDRA
        0010  ASPEN
 102b  Matrox Graphics, Inc.
-#DJ: I've a suspicion that 0010 is a duplicate of 0d10.
+# DJ: I've a suspicion that 0010 is a duplicate of 0d10.
        0010  MGA-I [Impression?]
        0518  MGA-II [Athena]
        0519  MGA 2064W [Millennium]
                102b 0328  Millennium G400 16Mb SDRAM
                102b 0338  Millennium G400 16Mb SDRAM
                102b 0378  Millennium G400 32Mb SDRAM
+               102b 0541  Millennium G450 Dual Head
+               102b 0542  Millennium G450 Dual Head LX
                102b 0641  Millennium G450 32Mb SDRAM
+               102b 0642  Millennium G450 32Mb SDRAM Dual Head LX
+               102b 07c0  Millennium G450 Dual Head LE
+               102b 07c1  Millennium G450 SDR Dual Head
+               102b 0d41  Millennium G450 Dual Head PCI
+               102b 0d42  Millennium G450 Dual Head LX PCI
+               102b 0e00  Marvel G450 eTV
+               102b 0e01  Marvel G450 eTV
+               102b 0e02  Marvel G450 eTV
+               102b 0e03  Marvel G450 eTV
+               102b 0f80  Millennium G450 Low Profile
+               102b 0f81  Millennium G450 Low Profile
+               102b 0f82  Millennium G450 Low Profile DVI
+               102b 0f83  Millennium G450 Low Profile DVI
                102b 19d8  Millennium G400 16Mb SGRAM
                102b 19f8  Millennium G400 32Mb SGRAM
                102b 2159  Millennium G400 Dual Head 16Mb
                102b 2f58  Millennium G400
                102b 2f78  Millennium G400
                102b 3693  Marvel G400 AGP
+               1705 0001  Millennium G450 32MB SGRAM
                b16f 0e11  Matrox MGA-G400 AGP
        0d10  MGA Ultima/Impression
        1000  MGA G100 [Productiva]
                1039 6326  SiS6326 GUI Accelerator
                1092 0a50  SpeedStar A50
                1092 0a70  SpeedStar A70
-               1092 4910  SpeedStar A70 
-               1092 4920  SpeedStar A70 
+               1092 4910  SpeedStar A70
+               1092 4920  SpeedStar A70
                1569 6326  SiS6326 GUI Accelerator
        7001  7001
        7007  OHCI Compliant FireWire Controller
                3d3d 0100  Reference Permedia 2 3D
        8000  PCILynx/PCILynx2 IEEE 1394 Link Layer Controller
                e4bf 1010  CF1-1-SNARE
-               e4bf 1020  CF1-2-SNARE 
+               e4bf 1020  CF1-2-SNARE
        8009  OHCI Compliant FireWire Controller
        8019  TSB12LV23 OHCI Compliant IEEE-1394 Controller
                11bd 000a  Studio DV500-1394
        9462  USB Universal Host Controller [OHCI]
        9463  Power Management Controller [Bridge]
 1056  ICL
-# Motorola made a mistake and used 1507 instead of 1057 in some chips.
-# Please look at the 1507 entry as well when updating this.
+# Motorola made a mistake and used 1507 instead of 1057 in some chips. Please look at the 1507 entry as well when updating this.
 1057  Motorola
        0001  MPC105 [Eagle]
        0002  MPC106 [Grackle]
        1022  ISP1022
        1080  QLA1080
        1216  QLA12160
-               101e 8471 QLA12160 on AMI MegaRAID
-               101e 8493 QLA12160 on AMI MegaRAID
+               101e 8471  QLA12160 on AMI MegaRAID
+               101e 8493  QLA12160 on AMI MegaRAID
        1240  QLA1240
        1280  QLA1280
        2020  ISP2020A
 1092  Diamond Multimedia Systems
        00a0  Speedstar Pro SE
        00a8  Speedstar 64
+       0550  Viper V550
        08d4  Supra 2260 Modem
        1092  Viper V330
        6120  Maximum DVD
                14f1 1522  Bt879a Video Capture PAL I
                14f1 1622  Bt879a Video Capture PAL BG
                14f1 1722  Bt879a Video Capture NTSC
-               1851 1850  FlyVideo'98 - Video  
+               1851 1850  FlyVideo'98 - Video
                1851 1851  FlyVideo II
                1852 1852  FlyVideo'98 - Video (with FM Tuner)
        0370  Bt880 Video Capture
                10b7 3590  TokenLink Velocity XL Adapter
        4500  3c450 Cyclone/unknown
        5055  3c555 Laptop Hurricane
-       6055  3c556 Laptop Hurricane
-       6056  3c556B Laptop Hurricane
        5057  3c575 [Megahertz] 10/100 LAN CardBus
                10b7 5a57  3C575 Megahertz 10/100 LAN Cardbus PC Card
        5157  3c575 [Megahertz] 10/100 LAN CardBus
        5970  3c597 EISA Fast Demon/Vortex
        5b57  3c595 [Megahertz] 10/100 LAN CardBus
                10b7 5b57  3C575 Megahertz 10/100 LAN Cardbus PC Card
+       6055  3c556 Hurricane CardBus
+       6056  3c556B Hurricane CardBus
        6560  3CCFE656 Cyclone CardBus
        6562  3CCFEM656 [id 6562] Cyclone CardBus
        6564  3CCFEM656 [id 6564] Cyclone CardBus
        5237  M5237 USB
        5243  M5243
        5247  M5247
+       5451  M5451 PCI South Bridge Audio
        7101  M7101 PMU
                10b9 7101  ALI M7101 Power Management Controller
 10ba  Mitsubishi Electric Corp.
        0006  NM2360 [MagicMedia 256ZX]
        0016  NM2380 [MagicMedia 256XL+]
                10c8 0016  MagicMedia 256XL+
+       0025  [MagicMedia 256AV+]
        0083  [MagicGraph 128ZV Plus]
        8005  [MagicMedia 256AV Audio]
                0e11 b0d1  MagicMedia 256AV Audio Device on Discovery
        1300  ABP940-U / ABP960-U
                10cd 1310  ASC1300 SCSI Adapter
        2300  ABP940-UW
+       2500  ABP940-U2W
 10ce  Radius
 10cf  Citicorp TTI
        2001  mb86605
                1048 0c18  Erazor II SGRAM
                1092 0550  Viper V550
                1092 0552  Viper V550
-               1092 4804  Viper V550 
-               1092 4808  Viper V550 
+               1092 4804  Viper V550
+               1092 4808  Viper V550
                1092 4810  Viper V550
                1092 4812  Viper V550
                1092 4815  Viper V550
                1092 4820  Viper V550 with TV out
                1092 4822  Viper V550
-               1092 4904  Viper V550 
-               1092 4914  Viper V550 
+               1092 4904  Viper V550
+               1092 4914  Viper V550
                1092 8225  Viper V550
                10de 0020  Riva TNT
                1102 1015  Graphics Blaster CT6710
        0111  NV11 (GeForce2 MX DDR)
        0112  GeForce2 Go
        0113  NV11 (GeForce2 MXR)
-       0150  NV15 (Geforce2 Pro)
+       0150  NV15 (GeForce2 Pro)
                107d 2840  WinFast GeForce2 GTS with TV output
-       0151  NV15 DDR (Geforce2 GTS)
-       0152  NV15 Bladerunner (Geforce2 Ultra)
+       0151  NV15 DDR (GeForce2 GTS)
+       0152  NV15 Bladerunner (GeForce2 Ultra)
        0153  NV15 GL (Quadro2 Pro)
+       0200  NV20 (GeForce3)
        0203  Quadro DCC
 10df  Emulex Corporation
        10df  Light Pulse Fibre Channel Adapter
 10e5  Micro Industries Corporation
 10e6  Gainbery Computer Products Inc.
 10e7  Vadem
-10e8  Applied Micro Circuits Corporation
+10e8  Applied Micro Circuits Corp.
        2011  Q-Motion Video Capture/Edit board
        4750  S5930 [Matchmaker]
        5920  S5920
        80d9  PCI-9118
        80da  PCI-9812
        811a  PCI-IEEE1355-DS-DE Interface
-       8170  S5933 "Matchmaker" [PCI Chipset Development Tool]
+       8170  S5933 [Matchmaker] (Chipset Development Tool)
 10e9  Alps Electric Co., Ltd.
 10ea  Intergraphics Systems
        1680  IGA-1680
        0002  SB Live! EMU10k1
                1102 0020  CT4850 SBLive! Value
                1102 0021  CT4620 SBLive!
-               1102 002f  SBLive! mainboard implementation 
+               1102 002f  SBLive! mainboard implementation
                1102 4001  E-mu APS
                1102 8022  CT4780 SBLive! Value
                1102 8023  CT4790 SoundBlaster PCI512
                1102 8051  CT4850 SBLive! Value
        7002  SB Live!
                1102 0020  Gameport Joystick
+       8938  ES1371
 1103  Triones Technologies, Inc.
        0003  HPT343
        0004  HPT366 / HPT370
        8231  VT8231 [PCI-to-ISA Bridge]
        8235  VT8235 Power Management
        8305  VT8363/8365 [KT133/KM133 AGP]
-       8391  VT8371 [KX133 AGP] 
+       8391  VT8371 [KX133 AGP]
        8501  VT8501 [Apollo MVP4 AGP]
        8596  VT82C596 [Apollo PRO AGP]
        8597  VT82C597 [Apollo VP3 AGP]
        8598  VT82C598/694x [Apollo MVP3/Pro133x AGP]
        8601  VT8601 [Apollo ProMedia AGP]
        8605  VT8605 [PM133 AGP]
+       8691  VT82C691 [Apollo Pro]
        b091  VT8633 [Apollo Pro266 AGP]
        b099  VT8367 [KT266 AGP]
-       8691  VT82C691 [Apollo Pro]
 1107  Stratus Computers
        0576  VIA VT82C570MV [Apollo] (Wrong vendor ID!)
 1108  Proteon, Inc.
        6037  Firepower Powerized SMP I/O ASIC
        6073  Firepower Powerized SMP I/O ASIC
 1111  Santa Cruz Operation
-# DJ- Some people say that 0x1112 is Rockwell International ?
+# DJ: Some people say that 0x1112 is Rockwell International
 1112  RNS - Div. of Meret Communications Inc
        2200  FDDI Adapter
        2300  Fast Ethernet Adapter
        1211  SMC2-1211TX
                103c 1207  EN-1207D Fast Ethernet Adapter
                1113 1211  EN-1207D Fast Ethernet Adapter
+       1216  EN-1216 Ethernet Adapter
        1217  EN-1217 Ethernet Adapter
        5105  10Mbps Network card
        9211  EN-1207D Fast Ethernet Adapter
        0119  GDT 6128RD/6528RD/6628RD
        011a  GDT 6538RD/6638RD
        011b  GDT 6558RD/6658RD
+       0120  GDT 6117RP2/6517RP2
+       0121  GDT 6127RP2/6527RP2
+       0122  GDT 6537RP2
+       0123  GDT 6557RP2
+       0124  GDT 6111RP2/6511RP2
+       0125  GDT 6121RP2/6521RP2
+       0136  GDT 6113RS/6513RS
+       0137  GDT 6123RS/6523RS
        0138  GDT 6118RS/6518RS/6618RS
        0139  GDT 6128RS/6528RS/6628RS
        013a  GDT 6538RS/6638RS
        013b  GDT 6558RS/6658RS
+       013c  GDT 6533RS/6633RS
+       013d  GDT 6543RS/6643RS
+       013e  GDT 6553RS/6653RS
+       013f  GDT 6563RS/6663RS
        0166  GDT 7113RN/7513RN/7613RN
        0167  GDT 7123RN/7523RN/7623RN
        0168  GDT 7118RN/7518RN/7518RN
        016d  GDT 7543RN/7643RN
        016e  GDT 7553RN/7653RN
        016f  GDT 7563RN/7663RN
+       01d6  GDT 4x13RZ
+       01d7  GDT 4x23RZ
+       01f6  GDT 8x13RZ
+       01f7  GDT 8x23RZ
+       01fc  GDT 8x33RZ
+       01fd  GDT 8x43RZ
+       01fe  GDT 8x53RZ
+       01ff  GDT 8x63RZ
        0210  GDT 6519RD/6619RD
        0211  GDT 6529RD/6629RD
        0260  GDT 7519RN/7619RN
        0261  GDT 7529RN/7629RN
+       0300  GDT Raid Controller
 111a  Efficient Networks, Inc
        0000  155P-MF1 (FPGA)
        0002  155P-MF1 (ASIC)
                111a 0000  ENI-25p Miniport ATM Adapter
        0005  SpeedStream (LANAI)
                111a 0001  ENI-3010 ATM
-               111a 0101  ENI-3010 ATM
                111a 0009  ENI-3060 ADSL (VPI=0)
+               111a 0101  ENI-3010 ATM
                111a 0109  ENI-3060CO ADSL (VPI=0)
                111a 0809  ENI-3060 ADSL (VPI=0 or 8)
                111a 0909  ENI-3060CO ADSL (VPI=0 or 8)
                111a 0a09  ENI-3060 ADSL (VPI=<0..15>)
-       0007  SpeedStream ADSL 
+       0007  SpeedStream ADSL
                111a 1001  ENI-3061 ADSL [ASIC]
 111b  Teledyne Electronic Systems
 111c  Tricord Systems Inc.
 113c  Cyclone Microsystems, Inc.
        0000  PCI-9060 i960 Bridge
        0001  PCI-SDK [PCI i960 Evaluation Platform]
-       0911  PCI-911 [PCI-based i960Jx Intelligent I/O Controller]
+       0911  PCI-911 [i960Jx-based Intelligent I/O Controller]
        0912  PCI-912 [i960CF-based Intelligent I/O Controller]
        0913  PCI-913
        0914  PCI-914 [I/O Controller w/ secondary PCI bus]
        060f  ToPIC97
        0617  ToPIC95 PCI to Cardbus Bridge with ZV Support
        0618  CPU to PCI and PCI to ISA bridge
+# Claimed to be Lucent DSP1645 [Mars], but that's apparently incorrect. Does anyone know the correct ID?
        0701  FIR Port
-# This is apparently incorrect. Does anyone know the correct ID?
-#      0701  Lucent DSP1645 [Mars]
        0d01  FIR Port Type-DO
                1179 0001  FIR Port Type-DO
 117a  A-Trend Technology
 1185  Dataworld International Ltd
 1186  D-Link System Inc
        0100  DC21041
+       1002  Sundance Ethernet
+       1300  RTL8139 Ethernet
+       4000  DL2K Ethernet
 1187  Advanced Technology Laboratories, Inc.
 1188  Shima Seiki Manufacturing Ltd.
 1189  Matsushita Electronics Co Ltd
 119c  Information Technology Inst.
 119d  Bug, Inc. Sapporo Japan
 119e  Fujitsu Microelectronics Ltd.
-       0001 FireStream 155
-       0003 FireStream 50
+       0001  FireStream 155
+       0003  FireStream 50
 119f  Bull HN Information Systems
 11a0  Convex Computer Corporation
 11a1  Hamamatsu Photonics K.K.
 11c1  Lucent Microelectronics
        0440  56k WinModem
                0001 0440  LT WinModem 56k Data+Fax+Voice+Dsvd
-               1033 8015  LT WinModem 56k Data+Fax+Voice+Dsvd 
-               1033 804f  LT WinModem 56k Data+Fax+Voice+Dsvd 
+               1033 8015  LT WinModem 56k Data+Fax+Voice+Dsvd
+               1033 804f  LT WinModem 56k Data+Fax+Voice+Dsvd
                10cf 102c  LB LT Modem V.90 56k
                10cf 104a  BIBLO LT Modem 56k
                10cf 105f  LB2 LT Modem V.90 56k
                13e0 0040  LT WinModem 56k Data+Fax+Voice+Dsvd
                13e0 0440  LT WinModem 56k Data+Fax+Voice+Dsvd
                13e0 0441  LT WinModem 56k Data+Fax+Voice+Dsvd
-               13e0 f100  LT WinModem 56k Data+Fax+Voice+Dsvd 
-               13e0 f101  LT WinModem 56k Data+Fax+Voice+Dsvd 
+               13e0 f100  LT WinModem 56k Data+Fax+Voice+Dsvd
+               13e0 f101  LT WinModem 56k Data+Fax+Voice+Dsvd
                144d 2101  LT56PV Modem
                149f 0440  LT WinModem 56k Data+Fax+Voice+Dsvd
        0441  56k WinModem
                1092 0440  Supra 56i
                1179 0001  Internal V.90 Modem
                11c1 0440  LT WinModem 56k Data+Fax
-               11c1 0441  LT WinModem 56k Data+Fax 
+               11c1 0441  LT WinModem 56k Data+Fax
                122d 4100  MDP7800-U Modem
-               13e0 0040  LT WinModem 56k Data+Fax 
-               13e0 0100  LT WinModem 56k Data+Fax 
-               13e0 0410  LT WinModem 56k Data+Fax 
+               13e0 0040  LT WinModem 56k Data+Fax
+               13e0 0100  LT WinModem 56k Data+Fax
+               13e0 0410  LT WinModem 56k Data+Fax
                13e0 0420  TelePath Internet 56k WinModem
-               13e0 0443  LT WinModem 56k Data+Fax 
+               13e0 0443  LT WinModem 56k Data+Fax
                1416 9804  CommWave 56k Modem
-               141d 0440  LT WinModem 56k Data+Fax 
+               141d 0440  LT WinModem 56k Data+Fax
                144f 0441  Lucent 56k V.90 DF Modem
                1468 0441  Presario 56k V.90 DF Modem
        0442  56k WinModem
        2120  VideoPlex CC
        2130  VideoQuest
 1256  Perceptive Solutions, Inc.
+       4201  PCI-2220I
+       4401  PCI-2240I
+       5201  PCI-2000
 1257  Vertex Networks, Inc.
 1258  Gilbarco, Inc.
 1259  Allied Telesyn International
        2560  AT-2560 Fast Ethernet Adapter (i82557B)
 125a  ABB Power Systems
 125b  Asix Electronics Corporation
+       1400  ALFA GFC2204
 125c  Aurora Technologies, Inc.
 125d  ESS Technology
        0000  ES336H Fax Modem (Early Model)
 1280  Photoscript Group Ltd.
 1281  Yokogawa Electric Corporation
 1282  Davicom Semiconductor, Inc.
+       9009  Ethernet 100/10 MBit
+       9100  Ethernet 100/10 MBit
        9102  Ethernet 100/10 MBit
+       9132  Ethernet 100/10 MBit
 1283  Integrated Technology Express, Inc.
        673a  IT8330G
        8330  IT8330G
 12c1  GMM Research Corp
 12c2  Mentec Limited
 12c3  Holtek Microelectronics Inc
+       0058  PCI NE2K Ethernet
+       5598  PCI NE2K Ethernet
 12c4  Connect Tech Inc
 12c5  Picture Elements Incorporated
        0081  PCIVST [Grayscale Thresholding Engine]
 1313  Yaskawa Electric Co.
 1316  Teradyne Inc
 1317  Linksys
+       0981  Fast Ethernet 10/100
        0985  Network Everywhere Fast Ethernet 10/100 model NC100
+       1985  Fast Ethernet 10/100
 1318  Packet Engines Inc.
        0911  PCI Ethernet Adapter
 1319  Fortemedia, Inc
 1385  Netgear
        620a  GA620
        622a  GA622
+       630a  GA630
        f311  FA311
 1386  Video Domain Technologies
 1387  Systran Corp
 1391  Development Concepts Inc
 1392  Medialight Inc
 1393  Moxa Technologies Co Ltd
+       1040  Smartio C104H/PCI
+       1680  Smartio C168H/PCI
+       2040  Intellio CP-204J
+       2180  Intellio C218 Turbo PCI
+       3200  Intellio C320 Turbo PCI
 1394  Level One Communications
 1395  Ambicom Inc
 1396  Cipher Systems Inc
        0010  SyncLink WAN Adapter
 13c1  3ware Inc
        1000  3ware ATA-RAID
+       1001  3ware 7000-series ATA-RAID
 13c2  Technotrend Systemtechnik GmbH
 13c3  Janz Computer AG
 13c4  Phase Metrics
 13de  ABB Robotics Products AB
 13df  E-Tech Inc
        0001  PCI56RVP Modem
-               13df 0001  PCI56RVP Modem 
+               13df 0001  PCI56RVP Modem
 13e0  GVC Corporation
 13e1  Silicom Multimedia Systems Inc
 13e2  Dynamics Research Corporation
 13ed  Raytheion E-Systems
 13ee  Hayes Microcomputer Products Inc
 13ef  Coppercom Inc
-13f0  Sundance technology Inc
+13f0  Sundance Technology Inc
+       0201  Sundance Ethernet
 13f1  Oce' - Technologies B.V.
 13f2  Ford Microelectronics Inc
 13f3  Mcdata Corporation
 13fe  Advantech Co. Ltd
 13ff  Silicon Spice Inc
 1400  Artx Inc
+       1401  9432 TX
 1401  CR-Systems A/S
 1402  Meilhaus Electronic GmbH
 1403  Ascor Inc
 1405  Excalibur Systems Inc
 1406  Oce' Printing Systems GmbH
 1407  Lava Computer mfg Inc
+       0100  Lava Dual Serial
+       0101  Lava Quatro A
+       0102  Lava Quatro B
+       0200  Lava Port Plus
+       0201  Lava Quad A
+       0202  Lava Quad B
+       0500  Lava Single Serial
+       0600  Lava Port 650
        8000  Lava Parallel
        8002  Lava Dual Parallel port A
        8003  Lava Dual Parallel port B
                14e4 0004  NetXtreme 1000BaseTX
                14e4 1644  NetXtreme BCM5700 1000BaseTX
        1645  NetXtreme BCM5701 Gigabit Ethernet
-               0e11 007d  NC6770 1000BaseSX
                0e11 007c  NC7770 1000BaseTX
+               0e11 007d  NC6770 1000BaseSX
                0e11 0085  NC7780 1000BaseTX
                10b7 1004  3C996-SX 1000BaseSX
                10b7 1006  3C996B-T 1000BaseTX
                14e4 0007  NetXtreme BCM5701 1000BaseSX
                14e4 0008  NetXtreme BCM5701 1000BaseTX
                14e4 8008  NetXtreme BCM5701 1000BaseTX
+       1647  NetXtreme BCM5701 Gigabit Ethernet
        5820  BCM5820 Crypto Accelerator
 14e5  Pixelfusion Ltd
 14e6  SHINING Technology Inc
 14f0  CANON RESEACH CENTRE FRANCE
 14f1  Conexant
        1033  HCF 56k Data/Fax Modem
-               1033 8077  NEC
-               122d 4027  Dell Zeus - MDP3880-W(B) Data Fax Modem # Aztech
-               122d 4030  Dell Mercury - MDP3880-U(B) Data Fax Modem # Aztech
-               122d 4034  Dell Thor - MDP3880-W(U) Data Fax Modem # Aztech
+               122d 4027  Dell Zeus - MDP3880-W(B) Data Fax Modem
+               122d 4030  Dell Mercury - MDP3880-U(B) Data Fax Modem
+               122d 4034  Dell Thor - MDP3880-W(U) Data Fax Modem
                13e0 020d  Dell Copper
                13e0 020e  Dell Silver
-               13e0 0261  IBM # GVC
                13e0 0290  Compaq Goldwing
-               13e0 02a0  IBM # GVC
-               13e0 02b0  IBM # GVC
                13e0 02c0  Compaq Scooter
-               13e0 02d0  IBM # GVC
-               144f 1500  IBM P85-DF # Askey
-               144f 1501  IBM P85-DF # Askey
-               144f 150a  IBM P85-DF # Askey
-               144f 150b  IBM P85-DF Low Profile # Askey
-               144f 1510  IBM P85-DF Low Profile # Askey
+               144f 1500  IBM P85-DF (1)
+               144f 1501  IBM P85-DF (2)
+               144f 150a  IBM P85-DF (3)
+               144f 150b  IBM P85-DF Low Profile (1)
+               144f 1510  IBM P85-DF Low Profile (2)
        1034  HCF 56k Data/Fax/Voice Modem
        1035  HCF 56k Data/Fax/Voice/Spkp (w/Handset) Modem
                10cf 1098  Fujitsu P85-DFSV
        1036  HCF 56k Data/Fax/Voice/Spkp Modem
-               122d 4029  MDP3880SP-W # Aztech
-               122d 4031  MDP3880SP-U # Aztech
+               122d 4029  MDP3880SP-W
+               122d 4031  MDP3880SP-U
                13e0 0209  Dell Titanium
                13e0 020a  Dell Graphite
                13e0 0260  Gateway Red Owl
        1064  HCF 56k Data/Fax/Voice Modem
        1065  HCF 56k Data/Fax/Voice/Spkp (w/Handset) Modem
        1066  HCF 56k Data/Fax/Voice/Spkp Modem
-               122d 4033  Dell Athena - MDP3900V-U # Aztech
+               122d 4033  Dell Athena - MDP3900V-U
        1433  HCF 56k Data/Fax Modem
        1434  HCF 56k Data/Fax/Voice Modem
        1435  HCF 56k Data/Fax/Voice/Spkp (w/Handset) Modem
        1436  HCF 56k Data/Fax Modem
        1453  HCF 56k Data/Fax Modem
-               13e0 0240  IBM # GVC
-               13e0 0250  IBM # GVC
-               144f 1502  IBM P95-DF # Askey
-               144f 1503  IBM P95-DF # Askey
+               144f 1502  IBM P95-DF (1)
+               144f 1503  IBM P95-DF (2)
        1454  HCF 56k Data/Fax/Voice Modem
        1455  HCF 56k Data/Fax/Voice/Spkp (w/Handset) Modem
        1456  HCF 56k Data/Fax/Voice/Spkp Modem
-               122d 4035  Dell Europa - MDP3900V-W # Aztech
-               122d 4302  MP3930V-W(C) MiniPCI # Aztech
+               122d 4035  Dell Europa - MDP3900V-W
+               122d 4302  Dell MP3930V-W(C) MiniPCI
        1803  HCF 56k Modem
-               0e11 0023 623-LAN Grizzly # Compaq
-               0e11 0043 623-LAN Yogi # Compaq
+               0e11 0023  623-LAN Grizzly
+               0e11 0043  623-LAN Yogi
        1815  HCF 56k Modem
-               0e11 0022  Grizzly # Compaq
-               0e11 0042  Yogi # Compaq
+               0e11 0022  Grizzly
+               0e11 0042  Yogi
        2003  HSF 56k Data/Fax Modem
        2004  HSF 56k Data/Fax/Voice Modem
        2005  HSF 56k Data/Fax/Voice/Spkp (w/Handset) Modem
        2006  HSF 56k Data/Fax/Voice/Spkp Modem
        2013  HSF 56k Data/Fax Modem
-               0e11 b195  Bear # Compaq
-               0e11 b196  Seminole 1 # Compaq
-               0e11 b1be  Seminole 2 # Compaq
-               1025 8013  Acer
-               1033 809d  NEC
-               1033 80bc  NEC
+               0e11 b195  Bear
+               0e11 b196  Seminole 1
+               0e11 b1be  Seminole 2
                155d 6793  HP
                155d 8850  E Machines
        2014  HSF 56k Data/Fax/Voice Modem
        2015  HSF 56k Data/Fax/Voice/Spkp (w/Handset) Modem
        2016  HSF 56k Data/Fax/Voice/Spkp Modem
-       2043  HSF 56k Data/Fax Modem (Worldwide SmartDAA)
-       2044  HSF 56k Data/Fax/Voice Modem (Worldwide SmartDAA)
-       2045  HSF 56k Data/Fax/Voice/Spkp (w/Handset) Modem (Worldwide SmartDAA)
-       2046  HSF 56k Data/Fax/Voice/Spkp Modem (Worldwide SmartDAA)
+       2043  HSF 56k Data/Fax Modem (WorldW SmartDAA)
+       2044  HSF 56k Data/Fax/Voice Modem (WorldW SmartDAA)
+       2045  HSF 56k Data/Fax/Voice/Spkp (w/Handset) Modem (WorldW SmartDAA)
+       2046  HSF 56k Data/Fax/Voice/Spkp Modem (WorldW SmartDAA)
        2063  HSF 56k Data/Fax Modem (SmartDAA)
        2064  HSF 56k Data/Fax/Voice Modem (SmartDAA)
        2065  HSF 56k Data/Fax/Voice/Spkp (w/Handset) Modem (SmartDAA)
        2066  HSF 56k Data/Fax/Voice/Spkp Modem (SmartDAA)
        2093  HSF 56k Modem
                155d 2f07  Legend
-       2143  HSF 56k Data/Fax/Cell Modem (Mobile Worldwide SmartDAA)
-       2144  HSF 56k Data/Fax/Voice/Cell Modem (Mobile Worldwide SmartDAA)
-       2145  HSF 56k Data/Fax/Voice/Spkp (w/HS)/Cell Modem (Mob WW SmartDAA)
-       2146  HSF 56k Data/Fax/Voice/Spkp/Cell Modem (Mobile Worldwide SmartDAA)
-       2163  HSF 56k Data/Fax/Cell Modem (Mobile SmartDAA)
-       2164  HSF 56k Data/Fax/Voice/Cell Modem (Mobile SmartDAA)
-       2165  HSF 56k Data/Fax/Voice/Spkp (w/Handset)/Cell Modem (Mobile SmartDAA)
-       2166  HSF 56k Data/Fax/Voice/Spkp/Cell Modem (Mobile SmartDAA)
-       2343  HSF 56k Data/Fax CardBus Modem (Mobile Worldwide SmartDAA)
-       2344  HSF 56k Data/Fax/Voice CardBus Modem (Mobile Worldwide SmartDAA)
-       2345  HSF 56k Data/Fax/Voice/Spkp (w/HS) CardBus Modem (Mob WW SmartDAA)
-       2346  HSF 56k Data/Fax/Voice/Spkp CardBus Modem (Mobile Worldwide SmartDAA)
-       2363  HSF 56k Data/Fax CardBus Modem (Mobile SmartDAA)
-       2364  HSF 56k Data/Fax/Voice CardBus Modem (Mobile SmartDAA)
+       2143  HSF 56k Data/Fax/Cell Modem (Mob WorldW SmartDAA)
+       2144  HSF 56k Data/Fax/Voice/Cell Modem (Mob WorldW SmartDAA)
+       2145  HSF 56k Data/Fax/Voice/Spkp (w/HS)/Cell Modem (Mob WorldW SmartDAA)
+       2146  HSF 56k Data/Fax/Voice/Spkp/Cell Modem (Mob WorldW SmartDAA)
+       2163  HSF 56k Data/Fax/Cell Modem (Mob SmartDAA)
+       2164  HSF 56k Data/Fax/Voice/Cell Modem (Mob SmartDAA)
+       2165  HSF 56k Data/Fax/Voice/Spkp (w/HS)/Cell Modem (Mob SmartDAA)
+       2166  HSF 56k Data/Fax/Voice/Spkp/Cell Modem (Mob SmartDAA)
+       2343  HSF 56k Data/Fax CardBus Modem (Mob WorldW SmartDAA)
+       2344  HSF 56k Data/Fax/Voice CardBus Modem (Mob WorldW SmartDAA)
+       2345  HSF 56k Data/Fax/Voice/Spkp (w/HS) CardBus Modem (Mob WorldW SmartDAA)
+       2346  HSF 56k Data/Fax/Voice/Spkp CardBus Modem (Mob WorldW SmartDAA)
+       2363  HSF 56k Data/Fax CardBus Modem (Mob SmartDAA)
+       2364  HSF 56k Data/Fax/Voice CardBus Modem (Mob SmartDAA)
        2365  HSF 56k Data/Fax/Voice/Spkp (w/HS) CardBus Modem (Mob SmartDAA)
-       2366  HSF 56k Data/Fax/Voice/Spkp CardBus Modem (Mobile SmartDAA)
-       2443  HSF 56k Data/Fax Modem (Mobile Worldwide SmartDAA)
-               104d 8075  Modem # Sony
-               104d 8083  Modem # Sony
-               104d 8097  Modem # Sony
-       2444  HSF 56k Data/Fax/Voice Modem (Mobile Worldwide SmartDAA)
-       2445  HSF 56k Data/Fax/Voice/Spkp (w/HS) Modem (Mobile WW SmartDAA)
-       2446  HSF 56k Data/Fax/Voice/Spkp Modem (Mobile Worldwide SmartDAA)
-       2463  HSF 56k Data/Fax Modem (Mobile SmartDAA)
-       2464  HSF 56k Data/Fax/Voice Modem (Mobile SmartDAA)
-       2465  HSF 56k Data/Fax/Voice/Spkp (w/Handset) Modem (Mobile SmartDAA)
-       2466  HSF 56k Data/Fax/Voice/Spkp Modem (Mobile SmartDAA)
+       2366  HSF 56k Data/Fax/Voice/Spkp CardBus Modem (Mob SmartDAA)
+       2443  HSF 56k Data/Fax Modem (Mob WorldW SmartDAA)
+       2444  HSF 56k Data/Fax/Voice Modem (Mob WorldW SmartDAA)
+       2445  HSF 56k Data/Fax/Voice/Spkp (w/HS) Modem (Mob WorldW SmartDAA)
+       2446  HSF 56k Data/Fax/Voice/Spkp Modem (Mob WorldW SmartDAA)
+       2463  HSF 56k Data/Fax Modem (Mob SmartDAA)
+       2464  HSF 56k Data/Fax/Voice Modem (Mob SmartDAA)
+       2465  HSF 56k Data/Fax/Voice/Spkp (w/HS) Modem (Mob SmartDAA)
+       2466  HSF 56k Data/Fax/Voice/Spkp Modem (Mob SmartDAA)
        2f00  HSF 56k HSFi Modem
                13e0 8d84  IBM HSFi V.90
                13e0 8d85  Compaq Stinger
 1504  KAISER Electronics
 1505  ITA INGENIEURBURO FUR TESTAUFGABEN GmbH
 1506  CHAMELEON Systems Inc
-# 1507  HTEC Ltd
-# Commented out because there are no known HTEC chips and 1507 is already
-# used by mistake by Motorola (see vendor ID 1057)
+# Should be HTEC Ltd, but there are no known HTEC chips and 1507 is already used by mistake by Motorola (see vendor ID 1057).
 1507  Motorola ?? / HTEC
        0001  MPC105 [Eagle]
        0002  MPC106 [Grackle]
        4000  ALS4000 Audio Chipset
                4005 4000  ALS4000 Audio Chipset
 4033  Addtron Technology Co, Inc.
+       1360  RTL8139 Ethernet
 4143  Digital Equipment Corp
 416c  Aladdin Knowledge Systems
        0100  AladdinCARD
 8008  Quancom Electronic GmbH
        0010  WDOG1 [PCI-Watchdog 1]
        0011  PWDOG2 [PCI-Watchdog 2]
-8086  Intel Corporation
+8086  Intel Corp.
        0007  82379AB
        0039  21145
        0122  82437FX
        0486  82430ZX [Aries]
        04a3  82434LX [Mercury/Neptune]
        04d0  82437FX [Triton FX]
+       0600  RAID Controller
        0960  80960RP [i960 RP Microprocessor/Bridge]
        0964  80960RP [i960 RP Microprocessor/Bridge]
        1000  82542 Gigabit Ethernet Controller
        1001  82543GC Gigabit Ethernet Controller
        1004  82543GC Gigabit Ethernet Controller
        1008  82544EI Gigabit Ethernet Controller
+       1009  82544EI Gigabit Ethernet Controller
        100c  82544GC Gigabit Ethernet Controller
        100d  82544GC Gigabit Ethernet Controller
+       1029  82559 Ethernet Controller
        1030  82559 InBusiness 10/100
        1031  82801CAM (ICH3) Chipset Ethernet Controller
        1032  82801CAM (ICH3) Chipset Ethernet Controller
        1037  82801CAM (ICH3) Chipset Ethernet Controller
        1038  82801CAM (ICH3) Chipset Ethernet Controller
        1130  82815 815 Chipset Host Bridge and Memory Controller Hub
-       1132  82815 CGC [Chipset Graphics Controller] 
+       1132  82815 CGC [Chipset Graphics Controller]
        1161  82806AA PCI64 Hub Advanced Programmable Interrupt Controller
        1209  82559ER
        1221  82092AA_0
                103c 1200  Ethernet Pro 10/100TX
                10c3 1100  SmartEther100 SC1100
                1179 0002  PCI FastEther LAN on Docker
-               1259 2560  AT-2560 100 
+               1259 2560  AT-2560 100
                1259 2561  AT-2560 100 FX Ethernet Adapter
                1266 0001  NE10/100 Adapter
                8086 0001  EtherExpress PRO/100B (TX)
        122e  82371FB PIIX ISA [Triton I]
        1230  82371FB PIIX IDE [Triton I]
        1231  DSVD Modem
-       1234  430MX - 82371MX MPIIX [430MX PCIset - 82371MX Mobile PCI I/O IDE Xcelerator (MPIIX)]
-       1235  430MX - 82437MX MTSC [430MX PCIset - 82437MX Mobile System Controller (MTSC) and 82438MX Mobile Data Path (MTDP)]
+       1234  430MX - 82371MX Mobile PCI I/O IDE Xcelerator (MPIIX)
+       1235  430MX - 82437MX Mob. System Ctrlr (MTSC) & 82438MX Data Path (MTDP)
        1237  440FX - 82441FX PMC [Natoma]
        1239  82371FB
        123b  82380PB
                101e 0438  MegaRaid 438
                101e 0466  MegaRaid 466
                101e 0467  MegaRaid 467
+               101e 09a0  PowerEdge Expandable RAID Controller 2/SC
                1028 0467  PowerEdge Expandable RAID Controller 2/DC
                1028 1111  PowerEdge Expandable RAID Controller 2/SC
+               103c 03a2  MegaRaid
                103c 10c6  MegaRaid 438
                103c 10c7  MegaRaid T5
+               103c 10cc  MegaRaid
                1111 1111  MegaRaid 466
                113c 03a2  MegaRaid
        1a21  82840 840 (Carmel) Chipset Host Bridge (Hub A)
        244b  82820 820 (Camino 2) Chipset IDE U100
        244c  82820 820 (Camino 2) Chipset ISA Bridge (ICH2-M)
        244e  82820 820 (Camino 2) Chipset PCI
+       2485  AC'97 Audio Controller
        2500  82820 820 (Camino) Chipset Host Bridge (MCH)
                1043 801c  P3C-2000 system chipset
        2501  82820 820 (Camino) Chipset Host Bridge (MCH)
        2531  82850 860 (Wombat) Chipset Host Bridge (MCH)
        2532  82850 850 (Tehama) Chipset AGP Bridge
        2533  82860 860 (Wombat) Chipset AGP Bridge
+       3092  Integrated RAID
        5200  EtherExpress PRO/100 Intelligent Server
        5201  EtherExpress PRO/100 Intelligent Server
                8086 0001  EtherExpress PRO/100 Server Ethernet Adapter
        84e2  460GX - 84460GX AGP Bridge (GXB)
        84e3  460GX - 84460GX Memory Address Controller (MAC)
        84e4  460GX - 84460GX Memory Data Controller (MDC)
+       9621  Integrated RAID
+       9622  Integrated RAID
+       9641  Integrated RAID
+       96a1  Integrated RAID
        ffff  450NX/GX [Orion] - 82453KX/GX Memory controller [BUG]
 8800  Trigem Computer Inc.
        2008  Video assistent component
 8e2e  KTI
        3000  ET32P2
 9004  Adaptec
-# FIXME: [dj] In one document I have, lot of these AIC's are actually AHA's
        1078  AIC-7810
        1160  AIC-1160 [Family Fibre Channel Adapter]
        2178  AIC-7821
        7278  AHA-3940 / AIC-7872
        7378  AHA-3985 / AIC-7873
        7478  AHA-2944 / AIC-7874
-# FIXME: [dj] Where did the 3rd number come from in 0x7578 & 0x7678 ?
+# DJ: Where did the 3rd number come from?
        7578  AHA-3944 / AHA-3944W / 7875
+# DJ: Where did the 3rd number come from?
        7678  AHA-4944W/UW / 7876
        7778  AIC-787x
        7810  AIC-7810
@@ -5315,7 +5410,7 @@ C 0c  Serial bus controller
                00  UHCI
                10  OHCI
                80  Unspecified
-               Fe  USB Device
+               fe  USB Device
        04  Fibre Channel
        05  SMBus
        06  InfiniBand
index 736f29d4d68004554a475e948b745672e3a11dcb..6280f1309bd9a909d9cf02366e68aff95ffe28e5 100644 (file)
@@ -3,7 +3,7 @@
  *
  *     Procfs interface for the PCI bus.
  *
- *     Copyright (c) 1997--1999 Martin Mares <mj@suse.cz>
+ *     Copyright (c) 1997--1999 Martin Mares <mj@ucw.cz>
  */
 
 #include <linux/types.h>
index 6838566cde262a87fb134ff445ced8d0b7270a9d..94a767fc13dcc40087ae1f88cb272eb6df4fc952 100644 (file)
@@ -5,7 +5,7 @@
  *  bugs.  Devices present only on certain architectures (host
  *  bridges et cetera) should be handled in arch-specific code.
  *
- *  Copyright (c) 1999 Martin Mares <mj@suse.cz>
+ *  Copyright (c) 1999 Martin Mares <mj@ucw.cz>
  *
  *  The bridge optimization stuff has been removed. If you really
  *  have a silly BIOS which is unable to set your host bridge right,
index 9f2a2d5665f631bb14033b8d7127c3a84aee2954..4e857688ec78791b8df2d88d0788ead4e50e6c82 100644 (file)
@@ -7,11 +7,11 @@
 #ifdef NOTRACE
 #define enter(x)   printk("Enter: %s, %s line %i\n",x,__FILE__,__LINE__)
 #define leave(x)   printk("Leave: %s, %s line %i\n",x,__FILE__,__LINE__)
-#define dprintk printk
+#define dprintk(fmt, args...) printk(fmt , ## args)
 #else
 #define enter(x)   do {} while (0)
 #define leave(x)   do {} while (0)
-#define dprintk(...) do {} while (0)
+#define dprintk(fmt, args...) do {} while (0)
 #endif
 
 
index 871858523fbd8e2fed32e0eea099832aeba64391..2b26a28ebb5626a775f3e173d3d311222d1cde78 100644 (file)
@@ -8,7 +8,7 @@
  *
  *  Heavily based on PCI quirks handling which is
  *
- *  Copyright (c) 1999 Martin Mares <mj@suse.cz>
+ *  Copyright (c) 1999 Martin Mares <mj@ucw.cz>
  */
 
 #include <linux/types.h>
index c6b89f40fd2d18cbe96b77f00d247639731cfe02..feef961930a91a5dc5023e9d612e5878053d6cd6 100644 (file)
@@ -4935,6 +4935,7 @@ static OSST_buffer * new_tape_buffer( int from_initialization, int need_dma )
                        tb->sg[0].address =
                            (unsigned char *)__get_free_pages(priority, order);
                        if (tb->sg[0].address != NULL) {
+                           tb->sg[0].page = NULL;
                            tb->sg[0].length = b_size;
                            break;
                        }
@@ -4970,6 +4971,7 @@ static OSST_buffer * new_tape_buffer( int from_initialization, int need_dma )
                                tb = NULL;
                                break;
                            }
+                           tb->sg[segs].page = NULL;
                            tb->sg[segs].length = b_size;
                            got += b_size;
                            segs++;
@@ -5043,6 +5045,7 @@ static int enlarge_buffer(OSST_buffer *STbuffer, int new_size, int need_dma)
                        normalize_buffer(STbuffer);
                        return FALSE;
                }
+               STbuffer->sg[segs].page = NULL;
                STbuffer->sg[segs].length = b_size;
                STbuffer->sg_segs += 1;
                got += b_size;
index 906d30481d2b427a26319471b7214a4e54438b33..71fb97133d19bf52888c6729d6e45eaa73961626 100644 (file)
@@ -1544,6 +1544,7 @@ static int sg_build_dir(Sg_request * srp, Sg_fd * sfp, int dxfer_len)
        num = (rem_sz > (PAGE_SIZE - offset)) ? (PAGE_SIZE - offset) :
                                                rem_sz;
        sclp->address = page_address(kp->maplist[k]) + offset;
+       sclp->page = NULL;
        sclp->length = num;
        mem_src_arr[k] = SG_USER_MEM;
        rem_sz -= num;
@@ -1630,6 +1631,7 @@ static int sg_build_indi(Sg_scatter_hold * schp, Sg_fd * sfp, int buff_size)
                     break;
             }
             sclp->address = p;
+           sclp->page = NULL;
             sclp->length = ret_sz;
            mem_src_arr[k] = mem_src;
 
@@ -1787,6 +1789,7 @@ static void sg_remove_scat(Sg_scatter_hold * schp)
                        k, sclp->address, sclp->length, mem_src));
             sg_free(sclp->address, sclp->length, mem_src);
             sclp->address = NULL;
+           sclp->page = NULL;
             sclp->length = 0;
         }
        sg_free(schp->buffer, schp->sglist_len, schp->buffer_mem_src);
index db62a9e65fd3d48ec92aac82dfba334acddd10d6..07c061bd7d8c0064b5da266693027f036de383b7 100644 (file)
@@ -637,9 +637,11 @@ int sddr09_read_map(struct us_data *us) {
        for (i=0; i<alloc_blocks; i++) {
                if (i<alloc_blocks-1) {
                        sg[i].address = kmalloc( (1<<17), GFP_KERNEL );
+                       sg[i].page = NULL;
                        sg[i].length = (1<<17);
                } else {
                        sg[i].address = kmalloc(alloc_len, GFP_KERNEL);
+                       sg[i].page = NULL;
                        sg[i].length = alloc_len;
                }
                alloc_len -= sg[i].length;
index b0a3559454b1beaeac5fe004b45dbb185642b4aa..16fe206f9998bc1d8631646ccad12e0782286032 100644 (file)
@@ -5,7 +5,7 @@
  *
  *     Based on the PCI version:
  *
- *     (c) 1999--2000 Martin Mares <mj@suse.cz>
+ *     (c) 1999--2000 Martin Mares <mj@ucw.cz>
  */
 
 #include <stdio.h>
index 6d0ea96519886d8567e3eef934e838eb4e8c71cc..2337d60d85fa1f92a617fe2c89a5ace027a252d7 100644 (file)
@@ -41,6 +41,7 @@ tristate 'Simple RAM-based file system support' CONFIG_RAMFS
 
 tristate 'ISO 9660 CDROM file system support' CONFIG_ISO9660_FS
 dep_mbool '  Microsoft Joliet CDROM extensions' CONFIG_JOLIET $CONFIG_ISO9660_FS
+dep_mbool '  Transparent decompression extension' CONFIG_ZISOFS $CONFIG_ISO9660_FS
 
 tristate 'Minix fs support' CONFIG_MINIX_FS
 
@@ -128,6 +129,24 @@ else
    define_bool CONFIG_SMB_FS n
 fi
 
+#
+# Do we need the compression support?
+#
+if [ "$CONFIG_ZISOFS" = "y" ]; then
+   define_tristate CONFIG_ZISOFS_FS $CONFIG_ISO9660_FS
+else
+   define_tristate CONFIG_ZISOFS_FS n
+fi
+if [ "$CONFIG_CRAMFS" = "y" -o "$CONFIG_ZISOFS_FS" = "y" ]; then
+   define_tristate CONFIG_ZLIB_FS_INFLATE y
+else
+  if [ "$CONFIG_CRAMFS" = "m" -o "$CONFIG_ZISOFS_FS" = "m" ]; then
+     define_tristate CONFIG_ZLIB_FS_INFLATE m
+  else
+     define_tristate CONFIG_ZLIB_FS_INFLATE n
+  fi
+fi
+
 mainmenu_option next_comment
 comment 'Partition Types'
 source fs/partitions/Config.in
index fe8140273c31bbb7bcff10e0734b2a0dbe0bbf80..3520fb9f438cd68843b674135ddfe05ce516d788 100644 (file)
@@ -27,6 +27,7 @@ subdir-y                      += partitions
 
 # Do not add any filesystems before this line
 subdir-$(CONFIG_EXT2_FS)       += ext2
+subdir-$(CONFIG_ZLIB_FS_INFLATE) += inflate_fs
 subdir-$(CONFIG_CRAMFS)                += cramfs
 subdir-$(CONFIG_RAMFS)         += ramfs
 subdir-$(CONFIG_CODA_FS)       += coda
index 0a3e1e876351d70639fd357e5b6374ebabd2ac55..97acf538539017f64fb804d632fa331d70d5d341 100644 (file)
@@ -52,8 +52,8 @@ __asm__ ("
        .globl xor_vis_2
        .type xor_vis_2,@function
 xor_vis_2:
-       rd      %fprs, %g1
-       andcc   %g1, FPRS_FEF|FPRS_DU, %g0
+       rd      %fprs, %o5
+       andcc   %o5, FPRS_FEF|FPRS_DU, %g0
        be,pt   %icc, 0f
         sethi  %hi(VISenter), %g1
        jmpl    %g1 + %lo(VISenter), %g7
@@ -124,8 +124,8 @@ xor_vis_2:
        .globl xor_vis_3
        .type xor_vis_3,@function
 xor_vis_3:
-       rd      %fprs, %g1
-       andcc   %g1, FPRS_FEF|FPRS_DU, %g0
+       rd      %fprs, %o5
+       andcc   %o5, FPRS_FEF|FPRS_DU, %g0
        be,pt   %icc, 0f
         sethi  %hi(VISenter), %g1
        jmpl    %g1 + %lo(VISenter), %g7
@@ -193,8 +193,8 @@ xor_vis_3:
        .globl xor_vis_4
        .type xor_vis_4,@function
 xor_vis_4:
-       rd      %fprs, %g1
-       andcc   %g1, FPRS_FEF|FPRS_DU, %g0
+       rd      %fprs, %o5
+       andcc   %o5, FPRS_FEF|FPRS_DU, %g0
        be,pt   %icc, 0f
         sethi  %hi(VISenter), %g1
        jmpl    %g1 + %lo(VISenter), %g7
@@ -281,13 +281,15 @@ xor_vis_4:
        .globl xor_vis_5
        .type xor_vis_5,@function
 xor_vis_5:
-       rd      %fprs, %g1
-       andcc   %g1, FPRS_FEF|FPRS_DU, %g0
+       mov     %o5, %g5
+       rd      %fprs, %o5
+       andcc   %o5, FPRS_FEF|FPRS_DU, %g0
        be,pt   %icc, 0f
         sethi  %hi(VISenter), %g1
        jmpl    %g1 + %lo(VISenter), %g7
         add    %g7, 8, %g7
 0:     wr      %g0, FPRS_FEF, %fprs
+       mov     %g5, %o5
        rd      %asi, %g1
        wr      %g0, ASI_BLK_P, %asi
        membar  #LoadStore|#StoreLoad|#StoreStore
index b894a9b8fec0945183ca113f6af9319056c2a183..d18fc2b008fd53ec6eae72eed541d20736fae509 100644 (file)
@@ -98,6 +98,7 @@ static inline void wait_on_page(struct page * page)
 }
 
 extern struct page * grab_cache_page (struct address_space *, unsigned long);
+extern struct page * grab_cache_page_nowait (struct address_space *, unsigned long);
 
 typedef int filler_t(void *, struct page*);
 
index 584aa64882dfd3a79fe8f3556ea65f560ff3783c..8eaa73a08c3ef2847b33d8a92baa8fc1e36e182e 100644 (file)
@@ -3,7 +3,7 @@
  *
  *     PCI defines and function prototypes
  *     Copyright 1994, Drew Eckhardt
- *     Copyright 1997--1999 Martin Mares <mj@suse.cz>
+ *     Copyright 1997--1999 Martin Mares <mj@ucw.cz>
  *
  *     For more information, please consult the following manuals (look at
  *     http://www.pcisig.com/ for how to get them):
index b2fc5595c04bb467d8bdc5ed15d10c6a642c10cc..a1d9d4e347edd3556f9378f74474f2a731e62ee4 100644 (file)
@@ -35,7 +35,9 @@
 #define CHECKSUM_UNNECESSARY 2
 
 #define SKB_DATA_ALIGN(X)      (((X) + (SMP_CACHE_BYTES-1)) & ~(SMP_CACHE_BYTES-1))
-#define SKB_MAX_HEAD(X)                ((PAGE_SIZE - (X) - sizeof(struct skb_shared_info))&~(SMP_CACHE_BYTES-1))
+#define SKB_MAX_ORDER(X,ORDER) (((PAGE_SIZE<<(ORDER)) - (X) - sizeof(struct skb_shared_info))&~(SMP_CACHE_BYTES-1))
+#define SKB_MAX_HEAD(X)                (SKB_MAX_ORDER((X),0))
+#define SKB_MAX_ALLOC          (SKB_MAX_ORDER(0,2))
 
 /* A. Checksumming of received packets by device.
  *
index ef563f855c00ac2f6812ba1e93bd7427eaeb18d3..ab6cf6d6f95895f87644cd89213270bf8e566482 100644 (file)
@@ -105,7 +105,6 @@ extern void FASTCALL(lru_cache_add(struct page *));
 extern void FASTCALL(__lru_cache_del(struct page *));
 extern void FASTCALL(lru_cache_del(struct page *));
 
-extern void FASTCALL(deactivate_page(struct page *));
 extern void FASTCALL(activate_page(struct page *));
 
 extern void swap_setup(void);
diff --git a/include/linux/zlib_fs.h b/include/linux/zlib_fs.h
new file mode 100644 (file)
index 0000000..66efc18
--- /dev/null
@@ -0,0 +1,679 @@
+/* zlib.h -- interface of the 'zlib' general purpose compression library
+  version 1.1.3, July 9th, 1998
+
+  Copyright (C) 1995-1998 Jean-loup Gailly and Mark Adler
+
+  This software is provided 'as-is', without any express or implied
+  warranty.  In no event will the authors be held liable for any damages
+  arising from the use of this software.
+
+  Permission is granted to anyone to use this software for any purpose,
+  including commercial applications, and to alter it and redistribute it
+  freely, subject to the following restrictions:
+
+  1. The origin of this software must not be misrepresented; you must not
+     claim that you wrote the original software. If you use this software
+     in a product, an acknowledgment in the product documentation would be
+     appreciated but is not required.
+  2. Altered source versions must be plainly marked as such, and must not be
+     misrepresented as being the original software.
+  3. This notice may not be removed or altered from any source distribution.
+
+  Jean-loup Gailly        Mark Adler
+  jloup@gzip.org          madler@alumni.caltech.edu
+
+
+  The data format used by the zlib library is described by RFCs (Request for
+  Comments) 1950 to 1952 in the files ftp://ds.internic.net/rfc/rfc1950.txt
+  (zlib format), rfc1951.txt (deflate format) and rfc1952.txt (gzip format).
+*/
+
+#ifndef _ZLIB_H
+#define _ZLIB_H
+
+#include "zconf.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define ZLIB_VERSION "1.1.3"
+
+/* 
+     The 'zlib' compression library provides in-memory compression and
+  decompression functions, including integrity checks of the uncompressed
+  data.  This version of the library supports only one compression method
+  (deflation) but other algorithms will be added later and will have the same
+  stream interface.
+
+     Compression can be done in a single step if the buffers are large
+  enough (for example if an input file is mmap'ed), or can be done by
+  repeated calls of the compression function.  In the latter case, the
+  application must provide more input and/or consume the output
+  (providing more output space) before each call.
+
+     The library also supports reading and writing files in gzip (.gz) format
+  with an interface similar to that of stdio.
+
+     The library does not install any signal handler. The decoder checks
+  the consistency of the compressed data, so the library should never
+  crash even in case of corrupted input.
+*/
+
+typedef voidpf (*alloc_func) OF((voidpf opaque, uInt items, uInt size));
+typedef void   (*free_func)  OF((voidpf opaque, voidpf address));
+
+struct internal_state;
+
+typedef struct z_stream_s {
+    Bytef    *next_in;  /* next input byte */
+    uInt     avail_in;  /* number of bytes available at next_in */
+    uLong    total_in;  /* total nb of input bytes read so far */
+
+    Bytef    *next_out; /* next output byte should be put there */
+    uInt     avail_out; /* remaining free space at next_out */
+    uLong    total_out; /* total nb of bytes output so far */
+
+    char     *msg;      /* last error message, NULL if no error */
+    struct internal_state FAR *state; /* not visible by applications */
+
+    void     *workspace; /* memory allocated for this stream */
+
+    int     data_type;  /* best guess about the data type: ascii or binary */
+    uLong   adler;      /* adler32 value of the uncompressed data */
+    uLong   reserved;   /* reserved for future use */
+} z_stream;
+
+typedef z_stream FAR *z_streamp;
+
+/*
+   The application must update next_in and avail_in when avail_in has
+   dropped to zero. It must update next_out and avail_out when avail_out
+   has dropped to zero. The application must initialize zalloc, zfree and
+   opaque before calling the init function. All other fields are set by the
+   compression library and must not be updated by the application.
+
+   The opaque value provided by the application will be passed as the first
+   parameter for calls of zalloc and zfree. This can be useful for custom
+   memory management. The compression library attaches no meaning to the
+   opaque value.
+
+   zalloc must return Z_NULL if there is not enough memory for the object.
+   If zlib is used in a multi-threaded application, zalloc and zfree must be
+   thread safe.
+
+   On 16-bit systems, the functions zalloc and zfree must be able to allocate
+   exactly 65536 bytes, but will not be required to allocate more than this
+   if the symbol MAXSEG_64K is defined (see zconf.h). WARNING: On MSDOS,
+   pointers returned by zalloc for objects of exactly 65536 bytes *must*
+   have their offset normalized to zero. The default allocation function
+   provided by this library ensures this (see zutil.c). To reduce memory
+   requirements and avoid any allocation of 64K objects, at the expense of
+   compression ratio, compile the library with -DMAX_WBITS=14 (see zconf.h).
+
+   The fields total_in and total_out can be used for statistics or
+   progress reports. After compression, total_in holds the total size of
+   the uncompressed data and may be saved for use in the decompressor
+   (particularly if the decompressor wants to decompress everything in
+   a single step).
+*/
+
+                        /* constants */
+
+#define Z_NO_FLUSH      0
+#define Z_PARTIAL_FLUSH 1 /* will be removed, use Z_SYNC_FLUSH instead */
+#define Z_SYNC_FLUSH    2
+#define Z_FULL_FLUSH    3
+#define Z_FINISH        4
+/* Allowed flush values; see deflate() below for details */
+
+#define Z_OK            0
+#define Z_STREAM_END    1
+#define Z_NEED_DICT     2
+#define Z_ERRNO        (-1)
+#define Z_STREAM_ERROR (-2)
+#define Z_DATA_ERROR   (-3)
+#define Z_MEM_ERROR    (-4)
+#define Z_BUF_ERROR    (-5)
+#define Z_VERSION_ERROR (-6)
+/* Return codes for the compression/decompression functions. Negative
+ * values are errors, positive values are used for special but normal events.
+ */
+
+#define Z_NO_COMPRESSION         0
+#define Z_BEST_SPEED             1
+#define Z_BEST_COMPRESSION       9
+#define Z_DEFAULT_COMPRESSION  (-1)
+/* compression levels */
+
+#define Z_FILTERED            1
+#define Z_HUFFMAN_ONLY        2
+#define Z_DEFAULT_STRATEGY    0
+/* compression strategy; see deflateInit2() below for details */
+
+#define Z_BINARY   0
+#define Z_ASCII    1
+#define Z_UNKNOWN  2
+/* Possible values of the data_type field */
+
+#define Z_DEFLATED   8
+/* The deflate compression method (the only one supported in this version) */
+
+#define Z_NULL  0  /* for initializing zalloc, zfree, opaque */
+
+                        /* basic functions */
+
+ZEXTERN const char * ZEXPORT zlib_fs_zlibVersion OF((void));
+/* The application can compare zlibVersion and ZLIB_VERSION for consistency.
+   If the first character differs, the library code actually used is
+   not compatible with the zlib.h header file used by the application.
+   This check is automatically made by deflateInit and inflateInit.
+ */
+
+/* 
+ZEXTERN int ZEXPORT deflateInit OF((z_streamp strm, int level));
+
+     Initializes the internal stream state for compression. The fields
+   zalloc, zfree and opaque must be initialized before by the caller.
+   If zalloc and zfree are set to Z_NULL, deflateInit updates them to
+   use default allocation functions.
+
+     The compression level must be Z_DEFAULT_COMPRESSION, or between 0 and 9:
+   1 gives best speed, 9 gives best compression, 0 gives no compression at
+   all (the input data is simply copied a block at a time).
+   Z_DEFAULT_COMPRESSION requests a default compromise between speed and
+   compression (currently equivalent to level 6).
+
+     deflateInit returns Z_OK if success, Z_MEM_ERROR if there was not
+   enough memory, Z_STREAM_ERROR if level is not a valid compression level,
+   Z_VERSION_ERROR if the zlib library version (zlib_version) is incompatible
+   with the version assumed by the caller (ZLIB_VERSION).
+   msg is set to null if there is no error message.  deflateInit does not
+   perform any compression: this will be done by deflate().
+*/
+
+
+ZEXTERN int ZEXPORT zlib_fs_deflate OF((z_streamp strm, int flush));
+/*
+    deflate compresses as much data as possible, and stops when the input
+  buffer becomes empty or the output buffer becomes full. It may introduce some
+  output latency (reading input without producing any output) except when
+  forced to flush.
+
+    The detailed semantics are as follows. deflate performs one or both of the
+  following actions:
+
+  - Compress more input starting at next_in and update next_in and avail_in
+    accordingly. If not all input can be processed (because there is not
+    enough room in the output buffer), next_in and avail_in are updated and
+    processing will resume at this point for the next call of deflate().
+
+  - Provide more output starting at next_out and update next_out and avail_out
+    accordingly. This action is forced if the parameter flush is non zero.
+    Forcing flush frequently degrades the compression ratio, so this parameter
+    should be set only when necessary (in interactive applications).
+    Some output may be provided even if flush is not set.
+
+  Before the call of deflate(), the application should ensure that at least
+  one of the actions is possible, by providing more input and/or consuming
+  more output, and updating avail_in or avail_out accordingly; avail_out
+  should never be zero before the call. The application can consume the
+  compressed output when it wants, for example when the output buffer is full
+  (avail_out == 0), or after each call of deflate(). If deflate returns Z_OK
+  and with zero avail_out, it must be called again after making room in the
+  output buffer because there might be more output pending.
+
+    If the parameter flush is set to Z_SYNC_FLUSH, all pending output is
+  flushed to the output buffer and the output is aligned on a byte boundary, so
+  that the decompressor can get all input data available so far. (In particular
+  avail_in is zero after the call if enough output space has been provided
+  before the call.)  Flushing may degrade compression for some compression
+  algorithms and so it should be used only when necessary.
+
+    If flush is set to Z_FULL_FLUSH, all output is flushed as with
+  Z_SYNC_FLUSH, and the compression state is reset so that decompression can
+  restart from this point if previous compressed data has been damaged or if
+  random access is desired. Using Z_FULL_FLUSH too often can seriously degrade
+  the compression.
+
+    If deflate returns with avail_out == 0, this function must be called again
+  with the same value of the flush parameter and more output space (updated
+  avail_out), until the flush is complete (deflate returns with non-zero
+  avail_out).
+
+    If the parameter flush is set to Z_FINISH, pending input is processed,
+  pending output is flushed and deflate returns with Z_STREAM_END if there
+  was enough output space; if deflate returns with Z_OK, this function must be
+  called again with Z_FINISH and more output space (updated avail_out) but no
+  more input data, until it returns with Z_STREAM_END or an error. After
+  deflate has returned Z_STREAM_END, the only possible operations on the
+  stream are deflateReset or deflateEnd.
+  
+    Z_FINISH can be used immediately after deflateInit if all the compression
+  is to be done in a single step. In this case, avail_out must be at least
+  0.1% larger than avail_in plus 12 bytes.  If deflate does not return
+  Z_STREAM_END, then it must be called again as described above.
+
+    deflate() sets strm->adler to the adler32 checksum of all input read
+  so far (that is, total_in bytes).
+
+    deflate() may update data_type if it can make a good guess about
+  the input data type (Z_ASCII or Z_BINARY). In doubt, the data is considered
+  binary. This field is only for information purposes and does not affect
+  the compression algorithm in any manner.
+
+    deflate() returns Z_OK if some progress has been made (more input
+  processed or more output produced), Z_STREAM_END if all input has been
+  consumed and all output has been produced (only when flush is set to
+  Z_FINISH), Z_STREAM_ERROR if the stream state was inconsistent (for example
+  if next_in or next_out was NULL), Z_BUF_ERROR if no progress is possible
+  (for example avail_in or avail_out was zero).
+*/
+
+
+ZEXTERN int ZEXPORT zlib_fs_deflateEnd OF((z_streamp strm));
+/*
+     All dynamically allocated data structures for this stream are freed.
+   This function discards any unprocessed input and does not flush any
+   pending output.
+
+     deflateEnd returns Z_OK if success, Z_STREAM_ERROR if the
+   stream state was inconsistent, Z_DATA_ERROR if the stream was freed
+   prematurely (some input or output was discarded). In the error case,
+   msg may be set but then points to a static string (which must not be
+   deallocated).
+*/
+
+
+ZEXTERN int ZEXPORT zlib_fs_inflate_workspacesize OF((void));
+/*
+   Returns the number of bytes that needs to be allocated for a per-
+   stream workspace.  A pointer to this number of bytes should be
+   returned in stream->workspace before calling zlib_fs_inflateInit().
+*/
+
+/* 
+ZEXTERN int ZEXPORT zlib_fs_inflateInit OF((z_streamp strm));
+
+     Initializes the internal stream state for decompression. The fields
+   next_in, avail_in, and workspace must be initialized before by
+   the caller. If next_in is not Z_NULL and avail_in is large enough (the exact
+   value depends on the compression method), inflateInit determines the
+   compression method from the zlib header and allocates all data structures
+   accordingly; otherwise the allocation will be deferred to the first call of
+   inflate.  If zalloc and zfree are set to Z_NULL, inflateInit updates them to
+   use default allocation functions.
+
+     inflateInit returns Z_OK if success, Z_MEM_ERROR if there was not enough
+   memory, Z_VERSION_ERROR if the zlib library version is incompatible with the
+   version assumed by the caller.  msg is set to null if there is no error
+   message. inflateInit does not perform any decompression apart from reading
+   the zlib header if present: this will be done by inflate().  (So next_in and
+   avail_in may be modified, but next_out and avail_out are unchanged.)
+*/
+
+
+ZEXTERN int ZEXPORT zlib_fs_inflate OF((z_streamp strm, int flush));
+/*
+    inflate decompresses as much data as possible, and stops when the input
+  buffer becomes empty or the output buffer becomes full. It may some
+  introduce some output latency (reading input without producing any output)
+  except when forced to flush.
+
+  The detailed semantics are as follows. inflate performs one or both of the
+  following actions:
+
+  - Decompress more input starting at next_in and update next_in and avail_in
+    accordingly. If not all input can be processed (because there is not
+    enough room in the output buffer), next_in is updated and processing
+    will resume at this point for the next call of inflate().
+
+  - Provide more output starting at next_out and update next_out and avail_out
+    accordingly.  inflate() provides as much output as possible, until there
+    is no more input data or no more space in the output buffer (see below
+    about the flush parameter).
+
+  Before the call of inflate(), the application should ensure that at least
+  one of the actions is possible, by providing more input and/or consuming
+  more output, and updating the next_* and avail_* values accordingly.
+  The application can consume the uncompressed output when it wants, for
+  example when the output buffer is full (avail_out == 0), or after each
+  call of inflate(). If inflate returns Z_OK and with zero avail_out, it
+  must be called again after making room in the output buffer because there
+  might be more output pending.
+
+    If the parameter flush is set to Z_SYNC_FLUSH, inflate flushes as much
+  output as possible to the output buffer. The flushing behavior of inflate is
+  not specified for values of the flush parameter other than Z_SYNC_FLUSH
+  and Z_FINISH, but the current implementation actually flushes as much output
+  as possible anyway.
+
+    inflate() should normally be called until it returns Z_STREAM_END or an
+  error. However if all decompression is to be performed in a single step
+  (a single call of inflate), the parameter flush should be set to
+  Z_FINISH. In this case all pending input is processed and all pending
+  output is flushed; avail_out must be large enough to hold all the
+  uncompressed data. (The size of the uncompressed data may have been saved
+  by the compressor for this purpose.) The next operation on this stream must
+  be inflateEnd to deallocate the decompression state. The use of Z_FINISH
+  is never required, but can be used to inform inflate that a faster routine
+  may be used for the single inflate() call.
+
+     If a preset dictionary is needed at this point (see inflateSetDictionary
+  below), inflate sets strm-adler to the adler32 checksum of the
+  dictionary chosen by the compressor and returns Z_NEED_DICT; otherwise 
+  it sets strm->adler to the adler32 checksum of all output produced
+  so far (that is, total_out bytes) and returns Z_OK, Z_STREAM_END or
+  an error code as described below. At the end of the stream, inflate()
+  checks that its computed adler32 checksum is equal to that saved by the
+  compressor and returns Z_STREAM_END only if the checksum is correct.
+
+    inflate() returns Z_OK if some progress has been made (more input processed
+  or more output produced), Z_STREAM_END if the end of the compressed data has
+  been reached and all uncompressed output has been produced, Z_NEED_DICT if a
+  preset dictionary is needed at this point, Z_DATA_ERROR if the input data was
+  corrupted (input stream not conforming to the zlib format or incorrect
+  adler32 checksum), Z_STREAM_ERROR if the stream structure was inconsistent
+  (for example if next_in or next_out was NULL), Z_MEM_ERROR if there was not
+  enough memory, Z_BUF_ERROR if no progress is possible or if there was not
+  enough room in the output buffer when Z_FINISH is used. In the Z_DATA_ERROR
+  case, the application may then call inflateSync to look for a good
+  compression block.
+*/
+
+
+ZEXTERN int ZEXPORT zlib_fs_inflateEnd OF((z_streamp strm));
+/*
+     All dynamically allocated data structures for this stream are freed.
+   This function discards any unprocessed input and does not flush any
+   pending output.
+
+     inflateEnd returns Z_OK if success, Z_STREAM_ERROR if the stream state
+   was inconsistent. In the error case, msg may be set but then points to a
+   static string (which must not be deallocated).
+*/
+
+                        /* Advanced functions */
+
+/*
+    The following functions are needed only in some special applications.
+*/
+
+/*   
+ZEXTERN int ZEXPORT deflateInit2 OF((z_streamp strm,
+                                     int  level,
+                                     int  method,
+                                     int  windowBits,
+                                     int  memLevel,
+                                     int  strategy));
+
+     This is another version of deflateInit with more compression options. The
+   fields next_in, zalloc, zfree and opaque must be initialized before by
+   the caller.
+
+     The method parameter is the compression method. It must be Z_DEFLATED in
+   this version of the library.
+
+     The windowBits parameter is the base two logarithm of the window size
+   (the size of the history buffer).  It should be in the range 8..15 for this
+   version of the library. Larger values of this parameter result in better
+   compression at the expense of memory usage. The default value is 15 if
+   deflateInit is used instead.
+
+     The memLevel parameter specifies how much memory should be allocated
+   for the internal compression state. memLevel=1 uses minimum memory but
+   is slow and reduces compression ratio; memLevel=9 uses maximum memory
+   for optimal speed. The default value is 8. See zconf.h for total memory
+   usage as a function of windowBits and memLevel.
+
+     The strategy parameter is used to tune the compression algorithm. Use the
+   value Z_DEFAULT_STRATEGY for normal data, Z_FILTERED for data produced by a
+   filter (or predictor), or Z_HUFFMAN_ONLY to force Huffman encoding only (no
+   string match).  Filtered data consists mostly of small values with a
+   somewhat random distribution. In this case, the compression algorithm is
+   tuned to compress them better. The effect of Z_FILTERED is to force more
+   Huffman coding and less string matching; it is somewhat intermediate
+   between Z_DEFAULT and Z_HUFFMAN_ONLY. The strategy parameter only affects
+   the compression ratio but not the correctness of the compressed output even
+   if it is not set appropriately.
+
+      deflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough
+   memory, Z_STREAM_ERROR if a parameter is invalid (such as an invalid
+   method). msg is set to null if there is no error message.  deflateInit2 does
+   not perform any compression: this will be done by deflate().
+*/
+                            
+ZEXTERN int ZEXPORT zlib_fs_deflateSetDictionary OF((z_streamp strm,
+                                                    const Bytef *dictionary,
+                                                    uInt  dictLength));
+/*
+     Initializes the compression dictionary from the given byte sequence
+   without producing any compressed output. This function must be called
+   immediately after deflateInit, deflateInit2 or deflateReset, before any
+   call of deflate. The compressor and decompressor must use exactly the same
+   dictionary (see inflateSetDictionary).
+
+     The dictionary should consist of strings (byte sequences) that are likely
+   to be encountered later in the data to be compressed, with the most commonly
+   used strings preferably put towards the end of the dictionary. Using a
+   dictionary is most useful when the data to be compressed is short and can be
+   predicted with good accuracy; the data can then be compressed better than
+   with the default empty dictionary.
+
+     Depending on the size of the compression data structures selected by
+   deflateInit or deflateInit2, a part of the dictionary may in effect be
+   discarded, for example if the dictionary is larger than the window size in
+   deflate or deflate2. Thus the strings most likely to be useful should be
+   put at the end of the dictionary, not at the front.
+
+     Upon return of this function, strm->adler is set to the Adler32 value
+   of the dictionary; the decompressor may later use this value to determine
+   which dictionary has been used by the compressor. (The Adler32 value
+   applies to the whole dictionary even if only a subset of the dictionary is
+   actually used by the compressor.)
+
+     deflateSetDictionary returns Z_OK if success, or Z_STREAM_ERROR if a
+   parameter is invalid (such as NULL dictionary) or the stream state is
+   inconsistent (for example if deflate has already been called for this stream
+   or if the compression method is bsort). deflateSetDictionary does not
+   perform any compression: this will be done by deflate().
+*/
+
+ZEXTERN int ZEXPORT zlib_fs_deflateCopy OF((z_streamp dest,
+                                           z_streamp source));
+/*
+     Sets the destination stream as a complete copy of the source stream.
+
+     This function can be useful when several compression strategies will be
+   tried, for example when there are several ways of pre-processing the input
+   data with a filter. The streams that will be discarded should then be freed
+   by calling deflateEnd.  Note that deflateCopy duplicates the internal
+   compression state which can be quite large, so this strategy is slow and
+   can consume lots of memory.
+
+     deflateCopy returns Z_OK if success, Z_MEM_ERROR if there was not
+   enough memory, Z_STREAM_ERROR if the source stream state was inconsistent
+   (such as zalloc being NULL). msg is left unchanged in both source and
+   destination.
+*/
+
+ZEXTERN int ZEXPORT zlib_fs_deflateReset OF((z_streamp strm));
+/*
+     This function is equivalent to deflateEnd followed by deflateInit,
+   but does not free and reallocate all the internal compression state.
+   The stream will keep the same compression level and any other attributes
+   that may have been set by deflateInit2.
+
+      deflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source
+   stream state was inconsistent (such as zalloc or state being NULL).
+*/
+
+ZEXTERN int ZEXPORT zlib_fs_deflateParams OF((z_streamp strm,
+                                             int level,
+                                             int strategy));
+/*
+     Dynamically update the compression level and compression strategy.  The
+   interpretation of level and strategy is as in deflateInit2.  This can be
+   used to switch between compression and straight copy of the input data, or
+   to switch to a different kind of input data requiring a different
+   strategy. If the compression level is changed, the input available so far
+   is compressed with the old level (and may be flushed); the new level will
+   take effect only at the next call of deflate().
+
+     Before the call of deflateParams, the stream state must be set as for
+   a call of deflate(), since the currently available input may have to
+   be compressed and flushed. In particular, strm->avail_out must be non-zero.
+
+     deflateParams returns Z_OK if success, Z_STREAM_ERROR if the source
+   stream state was inconsistent or if a parameter was invalid, Z_BUF_ERROR
+   if strm->avail_out was zero.
+*/
+
+/*   
+ZEXTERN int ZEXPORT inflateInit2 OF((z_streamp strm,
+                                     int  windowBits));
+
+     This is another version of inflateInit with an extra parameter. The
+   fields next_in, avail_in, zalloc, zfree and opaque must be initialized
+   before by the caller.
+
+     The windowBits parameter is the base two logarithm of the maximum window
+   size (the size of the history buffer).  It should be in the range 8..15 for
+   this version of the library. The default value is 15 if inflateInit is used
+   instead. If a compressed stream with a larger window size is given as
+   input, inflate() will return with the error code Z_DATA_ERROR instead of
+   trying to allocate a larger window.
+
+      inflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough
+   memory, Z_STREAM_ERROR if a parameter is invalid (such as a negative
+   memLevel). msg is set to null if there is no error message.  inflateInit2
+   does not perform any decompression apart from reading the zlib header if
+   present: this will be done by inflate(). (So next_in and avail_in may be
+   modified, but next_out and avail_out are unchanged.)
+*/
+
+ZEXTERN int ZEXPORT zlib_fs_inflateSetDictionary OF((z_streamp strm,
+                                                    const Bytef *dictionary,
+                                                    uInt  dictLength));
+/*
+     Initializes the decompression dictionary from the given uncompressed byte
+   sequence. This function must be called immediately after a call of inflate
+   if this call returned Z_NEED_DICT. The dictionary chosen by the compressor
+   can be determined from the Adler32 value returned by this call of
+   inflate. The compressor and decompressor must use exactly the same
+   dictionary (see deflateSetDictionary).
+
+     inflateSetDictionary returns Z_OK if success, Z_STREAM_ERROR if a
+   parameter is invalid (such as NULL dictionary) or the stream state is
+   inconsistent, Z_DATA_ERROR if the given dictionary doesn't match the
+   expected one (incorrect Adler32 value). inflateSetDictionary does not
+   perform any decompression: this will be done by subsequent calls of
+   inflate().
+*/
+
+ZEXTERN int ZEXPORT zlib_fs_inflateSync OF((z_streamp strm));
+/* 
+    Skips invalid compressed data until a full flush point (see above the
+  description of deflate with Z_FULL_FLUSH) can be found, or until all
+  available input is skipped. No output is provided.
+
+    inflateSync returns Z_OK if a full flush point has been found, Z_BUF_ERROR
+  if no more input was provided, Z_DATA_ERROR if no flush point has been found,
+  or Z_STREAM_ERROR if the stream structure was inconsistent. In the success
+  case, the application may save the current current value of total_in which
+  indicates where valid compressed data was found. In the error case, the
+  application may repeatedly call inflateSync, providing more input each time,
+  until success or end of the input data.
+*/
+
+ZEXTERN int ZEXPORT zlib_fs_inflateReset OF((z_streamp strm));
+/*
+     This function is equivalent to inflateEnd followed by inflateInit,
+   but does not free and reallocate all the internal decompression state.
+   The stream will keep attributes that may have been set by inflateInit2.
+
+      inflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source
+   stream state was inconsistent (such as zalloc or state being NULL).
+*/
+
+                        /* checksum functions */
+
+/*
+     These functions are not related to compression but are exported
+   anyway because they might be useful in applications using the
+   compression library.
+*/
+
+ZEXTERN uLong ZEXPORT zlib_fs_adler32 OF((uLong adler, const Bytef *buf, uInt len));
+
+/*
+     Update a running Adler-32 checksum with the bytes buf[0..len-1] and
+   return the updated checksum. If buf is NULL, this function returns
+   the required initial value for the checksum.
+   An Adler-32 checksum is almost as reliable as a CRC32 but can be computed
+   much faster. Usage example:
+
+     uLong adler = adler32(0L, Z_NULL, 0);
+
+     while (read_buffer(buffer, length) != EOF) {
+       adler = adler32(adler, buffer, length);
+     }
+     if (adler != original_adler) error();
+*/
+
+ZEXTERN uLong ZEXPORT zlib_fs_crc32   OF((uLong crc, const Bytef *buf, uInt len));
+/*
+     Update a running crc with the bytes buf[0..len-1] and return the updated
+   crc. If buf is NULL, this function returns the required initial value
+   for the crc. Pre- and post-conditioning (one's complement) is performed
+   within this function so it shouldn't be done by the application.
+   Usage example:
+
+     uLong crc = crc32(0L, Z_NULL, 0);
+
+     while (read_buffer(buffer, length) != EOF) {
+       crc = crc32(crc, buffer, length);
+     }
+     if (crc != original_crc) error();
+*/
+
+
+                        /* various hacks, don't look :) */
+
+/* deflateInit and inflateInit are macros to allow checking the zlib version
+ * and the compiler's view of z_stream:
+ */
+ZEXTERN int ZEXPORT zlib_fs_deflateInit_ OF((z_streamp strm, int level,
+                                     const char *version, int stream_size));
+ZEXTERN int ZEXPORT zlib_fs_inflateInit_ OF((z_streamp strm,
+                                     const char *version, int stream_size));
+ZEXTERN int ZEXPORT zlib_fs_deflateInit2_ OF((z_streamp strm, int  level, int  method,
+                                      int windowBits, int memLevel,
+                                      int strategy, const char *version,
+                                      int stream_size));
+ZEXTERN int ZEXPORT zlib_fs_inflateInit2_ OF((z_streamp strm, int  windowBits,
+                                      const char *version, int stream_size));
+#define zlib_fs_deflateInit(strm, level) \
+        zlib_fs_deflateInit_((strm), (level), ZLIB_VERSION, sizeof(z_stream))
+#define zlib_fs_inflateInit(strm) \
+        zlib_fs_inflateInit_((strm), ZLIB_VERSION, sizeof(z_stream))
+#define zlib_fs_deflateInit2(strm, level, method, windowBits, memLevel, strategy) \
+        zlib_fs_deflateInit2_((strm),(level),(method),(windowBits),(memLevel),\
+                      (strategy), ZLIB_VERSION, sizeof(z_stream))
+#define zlib_fs_inflateInit2(strm, windowBits) \
+        zlib_fs_inflateInit2_((strm), (windowBits), ZLIB_VERSION, sizeof(z_stream))
+
+
+#if !defined(_Z_UTIL_H) && !defined(NO_DUMMY_DECL)
+    struct internal_state {int dummy;}; /* hack for buggy compilers */
+#endif
+
+ZEXTERN const char   * ZEXPORT zlib_fs_zError           OF((int err));
+ZEXTERN int            ZEXPORT zlib_fs_inflateSyncPoint OF((z_streamp z));
+ZEXTERN const uLongf * ZEXPORT zlib_fs_get_crc_table    OF((void));
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _ZLIB_H */
index fd137efd84cf65a6475cccac2f92bab608a25b4d..2cd60784ada2400aacc9288b8c959f2218ff2131 100644 (file)
@@ -568,7 +568,9 @@ struct tcp_func {
                                                         struct sk_buff *skb,
                                                         struct open_request *req,
                                                         struct dst_entry *dst);
-    
+       
+       int                     (*hash_connecting)      (struct sock *sk);
+
        int                     (*remember_stamp)       (struct sock *sk);
 
        __u16                   net_header_len;
@@ -770,9 +772,8 @@ extern int                  tcp_v4_connect(struct sock *sk,
                                               struct sockaddr *uaddr,
                                               int addr_len);
 
-extern void                    tcp_connect_init(struct sock *sk);
-
-extern void                    tcp_connect_send(struct sock *sk, struct sk_buff *skb);
+extern int                     tcp_connect(struct sock *sk,
+                                           struct sk_buff *skb);
 
 extern struct sk_buff *                tcp_make_synack(struct sock *sk,
                                                struct dst_entry *dst,
index 6e4438a968bd3c607c1fbc27e594edee4ff90fbe..6ecd30f3d323dea65f3a2ead21b4aa7de1c95135 100644 (file)
@@ -116,7 +116,6 @@ EXPORT_SYMBOL(vmtruncate);
 EXPORT_SYMBOL(find_vma);
 EXPORT_SYMBOL(get_unmapped_area);
 EXPORT_SYMBOL(init_mm);
-EXPORT_SYMBOL(deactivate_page);
 #ifdef CONFIG_HIGHMEM
 EXPORT_SYMBOL(kmap_high);
 EXPORT_SYMBOL(kunmap_high);
@@ -254,6 +253,7 @@ EXPORT_SYMBOL(ROOT_DEV);
 EXPORT_SYMBOL(__find_get_page);
 EXPORT_SYMBOL(__find_lock_page);
 EXPORT_SYMBOL(grab_cache_page);
+EXPORT_SYMBOL(grab_cache_page_nowait);
 EXPORT_SYMBOL(read_cache_page);
 EXPORT_SYMBOL(vfs_readlink);
 EXPORT_SYMBOL(vfs_follow_link);
index c6c4794c19a2733a6dfea1d6fc8886f2657e4a38..9dcbf21c51f85d7ac139f7bf3acb1c6598d47d00 100644 (file)
@@ -549,6 +549,7 @@ int generic_buffer_fdatasync(struct inode *inode, unsigned long start_idx, unsig
 int fail_writepage(struct page *page)
 {
        activate_page(page);
+       SetPageReferenced(page);
        SetPageDirty(page);
        UnlockPage(page);
        return 0;
@@ -950,6 +951,51 @@ struct page *grab_cache_page(struct address_space *mapping, unsigned long index)
 }
 
 
+/*
+ * Same as grab_cache_page, but do not wait if the page is unavailable.
+ * This is intended for speculative data generators, where the data can
+ * be regenerated if the page couldn't be grabbed.  This routine should
+ * be safe to call while holding the lock for another page.
+ */
+struct page *grab_cache_page_nowait(struct address_space *mapping, unsigned long index)
+{
+       struct page *page, **hash;
+
+       hash = page_hash(mapping, index);
+       page = __find_get_page(mapping, index, hash);
+
+       if ( page ) {
+               if ( !TryLockPage(page) ) {
+                       /* Page found and locked */
+                       /* This test is overly paranoid, but what the heck... */
+                       if ( unlikely(page->mapping != mapping || page->index != index) ) {
+                               /* Someone reallocated this page under us. */
+                               UnlockPage(page);
+                               page_cache_release(page);
+                               return NULL;
+                       } else {
+                               return page;
+                       }
+               } else {
+                       /* Page locked by someone else */
+                       page_cache_release(page);
+                       return NULL;
+               }
+       }
+
+       page = page_cache_alloc(mapping);
+       if ( unlikely(!page) )
+               return NULL;    /* Failed to allocate a page */
+
+       if ( unlikely(add_to_page_cache_unique(page, mapping, index, hash)) ) {
+               /* Someone else grabbed the page already. */
+               page_cache_release(page);
+               return NULL;
+       }
+
+       return page;
+}
+
 #if 0
 #define PROFILE_READAHEAD
 #define DEBUG_READAHEAD
index eab1def526e68d50f6377ddc60883d056f83f53c..1ece6dc254d371f273db6fbcb623279d95ae42f2 100644 (file)
@@ -911,7 +911,7 @@ static int do_wp_page(struct mm_struct *mm, struct vm_area_struct * vma,
        if (!VALID_PAGE(old_page))
                goto bad_wp_page;
 
-       if (PageSwapCache(old_page) && !TryLockPage(old_page)) {
+       if (!TryLockPage(old_page)) {
                int reuse = can_share_swap_page(old_page);
                unlock_page(old_page);
                if (reuse) {
index a353ec3a0593cb33538df1d3b3b00bd7d84c30d0..79c513ecca9decb15ca22768ec99ce7fe06d1e43 100644 (file)
--- a/mm/mmap.c
+++ b/mm/mmap.c
@@ -72,6 +72,14 @@ int vm_enough_memory(long pages)
        free += nr_free_pages();
        free += nr_swap_pages;
 
+       /*
+        * This double-counts: the nrpages are both in the page-cache
+        * and in the swapper space. At the same time, this compensates
+        * for the swap-space over-allocation (ie "nr_swap_pages" being
+        * too small.
+        */
+       free += swapper_space.nrpages;
+
        /*
         * The code below doesn't account for free space in the inode
         * and dentry slab cache, slab cache fragmentation, inodes and
index ef2b8fc9b23a49129ffb81656559e895bbf1d19f..d2605907760fbc7cb69ffe8d0a1058e871e361e9 100644 (file)
@@ -386,7 +386,7 @@ rebalance:
        }
 
        /* Don't let big-order allocations loop */
-       if (order > 1)
+       if (order > 3)
                return NULL;
 
        /* Yield for kswapd, and try again */
index 5ef6dcbbcd46213ff1ba0428df20d74dffd7e4b4..4bc3ec770ee852b2d8832bd337c0a615b4ae2c75 100644 (file)
@@ -810,7 +810,6 @@ shmem_file_write(struct file *file,const char *buf,size_t count,loff_t *ppos)
        while (count) {
                unsigned long bytes, index, offset;
                char *kaddr;
-               int deactivate = 1;
 
                /*
                 * Try to find the page in the cache. If it isn't there,
@@ -821,7 +820,6 @@ shmem_file_write(struct file *file,const char *buf,size_t count,loff_t *ppos)
                bytes = PAGE_CACHE_SIZE - offset;
                if (bytes > count) {
                        bytes = count;
-                       deactivate = 0;
                }
 
                /*
@@ -868,8 +866,6 @@ shmem_file_write(struct file *file,const char *buf,size_t count,loff_t *ppos)
 unlock:
                /* Mark it unlocked again and drop the page.. */
                UnlockPage(page);
-               if (deactivate)
-                       deactivate_page(page);
                page_cache_release(page);
 
                if (status < 0)
index 51f8541cd59e5d736e4070a35bae4d45f5c0e529..1cb039cbdc33bf8fb22a0ac423570acb30fd33a1 100644 (file)
--- a/mm/swap.c
+++ b/mm/swap.c
@@ -33,32 +33,6 @@ pager_daemon_t pager_daemon = {
        8,      /* do swap I/O in clusters of this size */
 };
 
-/**
- * (de)activate_page - move pages from/to active and inactive lists
- * @page: the page we want to move
- * @nolock - are we already holding the pagemap_lru_lock?
- *
- * Deactivate_page will move an active page to the right
- * inactive list, while activate_page will move a page back
- * from one of the inactive lists to the active list. If
- * called on a page which is not on any of the lists, the
- * page is left alone.
- */
-static inline void deactivate_page_nolock(struct page * page)
-{
-       if (PageActive(page)) {
-               del_page_from_active_list(page);
-               add_page_to_inactive_list(page);
-       }
-}      
-
-void deactivate_page(struct page * page)
-{
-       spin_lock(&pagemap_lru_lock);
-       deactivate_page_nolock(page);
-       spin_unlock(&pagemap_lru_lock);
-}
-
 /*
  * Move an inactive page to the active list.
  */
index 3b6484f397ec03d8c301ae85e7718ab90dcc8d94..864a8d77d8bdee6b57932217842e481f2bd988a3 100644 (file)
@@ -541,6 +541,7 @@ static void refill_inactive(int nr_pages)
 
                del_page_from_active_list(page);
                add_page_to_inactive_list(page);
+               SetPageReferenced(page);
        }
        spin_unlock(&pagemap_lru_lock);
 }
index 0178979d2e0dd4704ce399a7d48570ab7f74a634..6b152aa1cf9869ef3557c9275bd4d9da0f3fa77a 100644 (file)
@@ -53,7 +53,7 @@ int alloc_divert_blk(struct net_device *dev)
 {
        int alloc_size = (sizeof(struct divert_blk) + 3) & ~3;
 
-       if (!strncmp(dev->name, "eth", 3)) {
+       if (dev->type == ARPHRD_ETHER) {
                printk(KERN_DEBUG "divert: allocating divert_blk for %s\n",
                       dev->name);
 
index e591461b36ea3022c2d7637e821f9f04d60f2ecd..8abf96699dfa8a529085307e4c63a83416acfc45 100644 (file)
@@ -620,6 +620,13 @@ int inet_stream_connect(struct socket *sock, struct sockaddr * uaddr,
                if (sk->state != TCP_CLOSE) 
                        goto out;
 
+               err = -EAGAIN;
+               if (sk->num == 0) {
+                       if (sk->prot->get_port(sk, 0) != 0)
+                               goto out;
+                       sk->sport = htons(sk->num);
+               }
+
                err = sk->prot->connect(sk, uaddr, addr_len);
                if (err < 0)
                        goto out;
index 0c97dd27b0cc156d8ada76743b2c0ee53400bf81..6a31ad3b081ccec423e866c59d033727a2582ce8 100644 (file)
@@ -95,7 +95,11 @@ static void dump_packet(const struct ipt_log_info *info,
                printk("WINDOW=%u ", ntohs(tcph->window));
                /* Max length: 9 "RES=0x3F " */
                printk("RES=0x%02x ", (u_int8_t)(ntohl(tcp_flag_word(tcph) & TCP_RESERVED_BITS) >> 22));
-               /* Max length: 36 "URG ACK PSH RST SYN FIN " */
+               /* Max length: 32 "CWR ECE URG ACK PSH RST SYN FIN " */
+               if (tcph->cwr)
+                       printk("CWR ");
+               if (tcph->ece)
+                       printk("ECE ");
                if (tcph->urg)
                        printk("URG ");
                if (tcph->ack)
@@ -254,7 +258,7 @@ static void dump_packet(const struct ipt_log_info *info,
 
        /* Proto    Max log string length */
        /* IP:      40+46+6+11+127 = 230 */
-       /* TCP:     10+max(25,20+30+13+9+36+11+127) = 256 */
+       /* TCP:     10+max(25,20+30+13+9+32+11+127) = 252 */
        /* UDP:     10+max(25,20) = 35 */
        /* ICMP:    11+max(25, 18+25+max(19,14,24+3+n+10,3+n+10)) = 91+n */
        /* ESP:     10+max(25)+15 = 50 */
@@ -263,7 +267,7 @@ static void dump_packet(const struct ipt_log_info *info,
 
        /* (ICMP allows recursion one level deep) */
        /* maxlen =  IP + ICMP +  IP + max(TCP,UDP,ICMP,unknown) */
-       /* maxlen = 230+   91  + 230 + 256 = 807 */
+       /* maxlen = 230+   91  + 230 + 252 = 803 */
 }
 
 static unsigned int
index a33abf999f2c8248aac4993a3041af3f507a8d33..0c97073a04e80a77bfebdb10734e2c8f7c42ec52 100644 (file)
@@ -337,13 +337,13 @@ void tcp_listen_wlock(void)
        }
 }
 
-static __inline__ void __tcp_v4_hash(struct sock *sk,const int listen_possible)
+static __inline__ void __tcp_v4_hash(struct sock *sk)
 {
        struct sock **skp;
        rwlock_t *lock;
 
        BUG_TRAP(sk->pprev==NULL);
-       if(listen_possible && sk->state == TCP_LISTEN) {
+       if(sk->state == TCP_LISTEN) {
                skp = &tcp_listening_hash[tcp_sk_listen_hashfn(sk)];
                lock = &tcp_lhash_lock;
                tcp_listen_wlock();
@@ -358,7 +358,7 @@ static __inline__ void __tcp_v4_hash(struct sock *sk,const int listen_possible)
        sk->pprev = skp;
        sock_prot_inc_use(sk->prot);
        write_unlock(lock);
-       if (listen_possible && sk->state == TCP_LISTEN)
+       if (sk->state == TCP_LISTEN)
                wake_up(&tcp_lhash_wait);
 }
 
@@ -366,7 +366,7 @@ static void tcp_v4_hash(struct sock *sk)
 {
        if (sk->state != TCP_CLOSE) {
                local_bh_disable();
-               __tcp_v4_hash(sk, 1);
+               __tcp_v4_hash(sk);
                local_bh_enable();
        }
 }
@@ -375,9 +375,6 @@ void tcp_unhash(struct sock *sk)
 {
        rwlock_t *lock;
 
-       if (!sk->pprev) 
-               goto ende; 
-
        if (sk->state == TCP_LISTEN) {
                local_bh_disable();
                tcp_listen_wlock();
@@ -396,8 +393,6 @@ void tcp_unhash(struct sock *sk)
                sock_prot_dec_use(sk->prot);
        }
        write_unlock_bh(lock);
-
- ende:
        if (sk->state == TCP_LISTEN)
                wake_up(&tcp_lhash_wait);
 }
@@ -535,20 +530,19 @@ static inline __u32 tcp_v4_init_sequence(struct sock *sk, struct sk_buff *skb)
                                          skb->h.th->source);
 }
 
-/* called with local bh disabled */ 
-static int __tcp_v4_check_established(struct sock *sk, __u16 lport)
+static int tcp_v4_check_established(struct sock *sk)
 {
        u32 daddr = sk->rcv_saddr;
        u32 saddr = sk->daddr;
        int dif = sk->bound_dev_if;
        TCP_V4_ADDR_COOKIE(acookie, saddr, daddr)
-       __u32 ports = TCP_COMBINED_PORTS(sk->dport, lport);
-       int hash = tcp_hashfn(daddr, lport, saddr, sk->dport);
+       __u32 ports = TCP_COMBINED_PORTS(sk->dport, sk->num);
+       int hash = tcp_hashfn(daddr, sk->num, saddr, sk->dport);
        struct tcp_ehash_bucket *head = &tcp_ehash[hash];
        struct sock *sk2, **skp;
        struct tcp_tw_bucket *tw;
 
-       write_lock(&head->lock);
+       write_lock_bh(&head->lock);
 
        /* Check TIME-WAIT sockets first. */
        for(skp = &(head + tcp_ehash_size)->chain; (sk2=*skp) != NULL;
@@ -601,13 +595,15 @@ unique:
        sk->pprev = skp;
        sk->hashent = hash;
        sock_prot_inc_use(sk->prot);
-       write_unlock(&head->lock);
+       write_unlock_bh(&head->lock);
 
        if (tw) {
                /* Silly. Should hash-dance instead... */
+               local_bh_disable();
                tcp_tw_deschedule(tw);
                tcp_timewait_kill(tw);
                NET_INC_STATS_BH(TimeWaitRecycled);
+               local_bh_enable();
 
                tcp_tw_put(tw);
        }
@@ -615,96 +611,34 @@ unique:
        return 0;
 
 not_unique:
-       write_unlock(&head->lock);
+       write_unlock_bh(&head->lock);
        return -EADDRNOTAVAIL;
 }
 
-/* 
- * Bind a port for a connect operation and hash it.
- */ 
-static int tcp_v4_hash_connect(struct sock *sk, struct sockaddr_in *dst)
+/* Hash SYN-SENT socket to established hash table after
+ * checking that it is unique. Note, that without kernel lock
+ * we MUST make these two operations atomically.
+ *
+ * Optimization: if it is bound and tcp_bind_bucket has the only
+ * owner (us), we need not to scan established bucket.
+ */
+
+int tcp_v4_hash_connecting(struct sock *sk)
 {
        unsigned short snum = sk->num;
-       struct tcp_bind_hashbucket *head;
-       struct tcp_bind_bucket *tb;
-
-       if (snum == 0) { 
-               int rover;
-               int low = sysctl_local_port_range[0];
-               int high = sysctl_local_port_range[1];
-               int remaining = (high - low) + 1;
-               
-               local_bh_disable(); 
-               spin_lock(&tcp_portalloc_lock); 
-               rover = tcp_port_rover;
-               
-               do {    
-                       rover++;
-                       if ((rover < low) || (rover > high))
-                               rover = low;
-                       head = &tcp_bhash[tcp_bhashfn(rover)];
-                       spin_lock(&head->lock);         
-                               
-                       /* Does not bother with rcv_saddr checks,
-                        * because the established check is already
-                        * unique enough.  
-                        */
-                       for (tb = head->chain; tb; tb = tb->next) {
-                               if (tb->port == rover) { 
-                                       if (!tb->owners) 
-                                               goto ok;
-                                       if (!tb->fastreuse)
-                                               goto next_port;
-                                       if (!__tcp_v4_check_established(sk,rover))
-                                               goto ok; 
-                                       goto next_port; 
-                               }       
-                       }               
-
-                       tb = tcp_bucket_create(head, rover);
-                       if (!tb) { 
-                               spin_unlock(&head->lock); 
-                               break;
-                       }
-                       goto ok; 
+       struct tcp_bind_hashbucket *head = &tcp_bhash[tcp_bhashfn(snum)];
+       struct tcp_bind_bucket *tb = (struct tcp_bind_bucket *)sk->prev;
 
-               next_port:
-                       spin_unlock(&head->lock);
-               } while (--remaining > 0);
-               tcp_port_rover = rover;                       
-
-               spin_unlock(&tcp_portalloc_lock); 
-               local_bh_enable(); 
-
-               return -EADDRNOTAVAIL;
-
-       ok:
-               /* All locks still held and bhs disabled */ 
-               tcp_port_rover = rover;                         
-               tcp_bind_hash(sk, tb, rover);  
-               sk->sport = htons(rover); 
-               spin_unlock(&tcp_portalloc_lock); 
-               __tcp_v4_hash(sk, 0); 
-               /* fastreuse state of tb is never changed in connect */ 
-               spin_unlock(&head->lock); 
-               local_bh_enable(); 
-               return 0;                       
-       }
-               
-       head  = &tcp_bhash[tcp_bhashfn(snum)];
-       tb  = (struct tcp_bind_bucket *)sk->prev;
        spin_lock_bh(&head->lock);
        if (tb->owners == sk && sk->bind_next == NULL) {
-               __tcp_v4_hash(sk, 0);
+               __tcp_v4_hash(sk);
                spin_unlock_bh(&head->lock);
                return 0;
        } else {
-               int ret;
-               spin_unlock(&head->lock);
+               spin_unlock_bh(&head->lock);
+
                /* No definite answer... Walk to established hash table */
-               ret = __tcp_v4_check_established(sk, snum);
-               local_bh_enable(); 
-               return ret;
+               return tcp_v4_check_established(sk);
        }
 }
 
@@ -713,6 +647,7 @@ int tcp_v4_connect(struct sock *sk, struct sockaddr *uaddr, int addr_len)
 {
        struct tcp_opt *tp = &(sk->tp_pinfo.af_tcp);
        struct sockaddr_in *usin = (struct sockaddr_in *) uaddr;
+       struct sk_buff *buff;
        struct rtable *rt;
        u32 daddr, nexthop;
        int tmp;
@@ -747,6 +682,12 @@ int tcp_v4_connect(struct sock *sk, struct sockaddr *uaddr, int addr_len)
        if (!sk->protinfo.af_inet.opt || !sk->protinfo.af_inet.opt->srr)
                daddr = rt->rt_dst;
 
+       err = -ENOBUFS;
+       buff = alloc_skb(MAX_TCP_HEADER + 15, sk->allocation);
+
+       if (buff == NULL)
+               goto failure;
+
        if (!sk->saddr)
                sk->saddr = rt->rt_src;
        sk->rcv_saddr = sk->saddr;
@@ -788,27 +729,11 @@ int tcp_v4_connect(struct sock *sk, struct sockaddr *uaddr, int addr_len)
 
        tp->mss_clamp = 536;
 
-       /* Initialise common fields */ 
-       tcp_connect_init(sk);
-
-       /* Socket identity change complete, no longer
-        * in TCP_CLOSE, so enter ourselves into the
-        * hash tables.
-        */
-       tcp_set_state(sk,TCP_SYN_SENT);
-       err = tcp_v4_hash_connect(sk, usin); 
-       if (!err) { 
-               struct sk_buff *buff; 
-
-               err = -ENOBUFS;
-               buff = alloc_skb(MAX_TCP_HEADER + 15, sk->allocation);
-               if (buff != NULL) { 
-                       tcp_connect_send(sk, buff); 
-                       return 0;
-               } 
-       } 
+       err = tcp_connect(sk, buff);
+       if (err == 0)
+               return 0;
 
-       tcp_set_state(sk, TCP_CLOSE); 
+failure:
        __sk_dst_reset(sk);
        sk->route_caps = 0;
        sk->dport = 0;
@@ -1531,7 +1456,7 @@ struct sock * tcp_v4_syn_recv_sock(struct sock *sk, struct sk_buff *skb,
        newtp->advmss = dst->advmss;
        tcp_initialize_rcv_mss(newsk);
 
-       __tcp_v4_hash(newsk, 0);
+       __tcp_v4_hash(newsk);
        __tcp_inherit_port(sk, newsk);
 
        return newsk;
@@ -1948,6 +1873,7 @@ struct tcp_func ipv4_specific = {
        tcp_v4_rebuild_header,
        tcp_v4_conn_request,
        tcp_v4_syn_recv_sock,
+       tcp_v4_hash_connecting,
        tcp_v4_remember_stamp,
        sizeof(struct iphdr),
 
index bf6b1c6fdc5f4a9ff58824d8ee1cf5b6f23d1f2d..0a85f075376edb134b2a6eeeed4215a010a900c9 100644 (file)
@@ -1157,15 +1157,14 @@ struct sk_buff * tcp_make_synack(struct sock *sk, struct dst_entry *dst,
        return skb;
 }
 
-/* 
- * Do all connect socket setups that can be done AF independent.
- * Could be inlined.
- */ 
-void tcp_connect_init(struct sock *sk)
+int tcp_connect(struct sock *sk, struct sk_buff *buff)
 {
        struct dst_entry *dst = __sk_dst_get(sk);
        struct tcp_opt *tp = &(sk->tp_pinfo.af_tcp);
 
+       /* Reserve space for headers. */
+       skb_reserve(buff, MAX_TCP_HEADER);
+
        /* We'll fix this up when we get a response from the other end.
         * See tcp_input.c:tcp_rcv_state_process case TCP_SYN_SENT.
         */
@@ -1192,6 +1191,14 @@ void tcp_connect_init(struct sock *sk)
 
        tp->rcv_ssthresh = tp->rcv_wnd;
 
+       /* Socket identity change complete, no longer
+        * in TCP_CLOSE, so enter ourselves into the
+        * hash tables.
+        */
+       tcp_set_state(sk,TCP_SYN_SENT);
+       if (tp->af_specific->hash_connecting(sk))
+               goto err_out;
+
        sk->err = 0;
        sk->done = 0;
        tp->snd_wnd = 0;
@@ -1205,17 +1212,6 @@ void tcp_connect_init(struct sock *sk)
        tp->rto = TCP_TIMEOUT_INIT;
        tp->retransmits = 0;
        tcp_clear_retrans(tp);
-}
-
-/*
- * Build a SYN and send it off.
- */ 
-void tcp_connect_send(struct sock *sk, struct sk_buff *buff)
-{ 
-       struct tcp_opt *tp = &(sk->tp_pinfo.af_tcp);
-
-       /* Reserve space for headers. */
-       skb_reserve(buff, MAX_TCP_HEADER);
 
        TCP_SKB_CB(buff)->flags = TCPCB_FLAG_SYN;
        TCP_ECN_send_syn(tp, buff);
@@ -1237,6 +1233,12 @@ void tcp_connect_send(struct sock *sk, struct sk_buff *buff)
 
        /* Timer for repeating the SYN until an answer. */
        tcp_reset_xmit_timer(sk, TCP_TIME_RETRANS, tp->rto);
+       return 0;
+
+err_out:
+       tcp_set_state(sk,TCP_CLOSE);
+       kfree_skb(buff);
+       return -EADDRNOTAVAIL;
 }
 
 /* Send out a delayed ack, the caller does the policy checking
index 0882bc1af40b0d058e3882d364941889d227361d..74a69222289c9a3c5413fd80a1a50bfa81c90c83 100644 (file)
@@ -168,7 +168,11 @@ static void dump_packet(const struct ip6t_log_info *info,
                printk("WINDOW=%u ", ntohs(tcph->window));
                /* Max length: 9 "RES=0x3F " */
                printk("RES=0x%02x ", (u_int8_t)(ntohl(tcp_flag_word(tcph) & TCP_RESERVED_BITS) >> 22));
-               /* Max length: 36 "URG ACK PSH RST SYN FIN " */
+               /* Max length: 32 "CWR ECE URG ACK PSH RST SYN FIN " */
+               if (tcph->cwr)
+                       printk("CWR ");
+               if (tcph->ece)
+                       printk("ECE ");
                if (tcph->urg)
                        printk("URG ");
                if (tcph->ack)
index aad7906b72ef3c1a6a3ca698149b875003e5cc9d..738a3e5d220ed59612105b54a0ce04a49e51eb18 100644 (file)
@@ -5,7 +5,7 @@
  *     Authors:
  *     Pedro Roque             <roque@di.fc.ul.pt>     
  *
- *     $Id: tcp_ipv6.c,v 1.141 2001/10/26 14:51:13 davem Exp $
+ *     $Id: tcp_ipv6.c,v 1.140 2001/10/15 12:34:50 davem Exp $
  *
  *     Based on: 
  *     linux/net/ipv4/tcp.c
@@ -486,21 +486,11 @@ not_unique:
        return -EADDRNOTAVAIL;
 }
 
-static int tcp_v6_hash_connect(struct sock *sk, struct sockaddr_in6 *dst)
+static int tcp_v6_hash_connecting(struct sock *sk)
 {
-       struct tcp_bind_hashbucket *head;
-       struct tcp_bind_bucket *tb;
-
-       /* XXX */ 
-       if (sk->num == 0) { 
-               int err = tcp_v6_get_port(sk, sk->num);
-               if (err)
-                       return err;
-               sk->sport = htons(sk->num);     
-       } 
-               
-       head = &tcp_bhash[tcp_bhashfn(sk->num)];
-       tb = head->chain;
+       unsigned short snum = sk->num;
+       struct tcp_bind_hashbucket *head = &tcp_bhash[tcp_bhashfn(snum)];
+       struct tcp_bind_bucket *tb = head->chain;
 
        spin_lock_bh(&head->lock);
 
@@ -530,6 +520,7 @@ static int tcp_v6_connect(struct sock *sk, struct sockaddr *uaddr,
        struct in6_addr saddr_buf;
        struct flowi fl;
        struct dst_entry *dst;
+       struct sk_buff *buff;
        int addr_type;
        int err;
 
@@ -669,6 +660,12 @@ static int tcp_v6_connect(struct sock *sk, struct sockaddr *uaddr,
                tp->ext_header_len = np->opt->opt_flen+np->opt->opt_nflen;
        tp->mss_clamp = IPV6_MIN_MTU - sizeof(struct tcphdr) - sizeof(struct ipv6hdr);
 
+       err = -ENOBUFS;
+       buff = alloc_skb(MAX_TCP_HEADER + 15, sk->allocation);
+
+       if (buff == NULL)
+               goto failure;
+
        sk->dport = usin->sin6_port;
 
        /*
@@ -679,23 +676,12 @@ static int tcp_v6_connect(struct sock *sk, struct sockaddr *uaddr,
                tp->write_seq = secure_tcpv6_sequence_number(np->saddr.s6_addr32,
                                                             np->daddr.s6_addr32,
                                                             sk->sport, sk->dport);
-       tcp_connect_init(sk);
-
-       tcp_set_state(sk, TCP_SYN_SENT); 
-       err = tcp_v6_hash_connect(sk, usin); 
-       if (!err) {
-               struct sk_buff *buff;
-               err = -ENOBUFS;
-               buff = alloc_skb(MAX_TCP_HEADER + 15, sk->allocation);
-               if (buff != NULL) { 
-                       tcp_connect_send(sk, buff); 
-                       return 0;
-               } 
-       }
 
+       err = tcp_connect(sk, buff);
+       if (err == 0)
+               return 0;
 
-       tcp_set_state(sk, TCP_CLOSE); 
- failure:
+failure:
        __sk_dst_reset(sk);
        sk->dport = 0;
        sk->route_caps = 0;
@@ -1775,6 +1761,7 @@ static struct tcp_func ipv6_specific = {
        tcp_v6_rebuild_header,
        tcp_v6_conn_request,
        tcp_v6_syn_recv_sock,
+       tcp_v6_hash_connecting,
        tcp_v6_remember_stamp,
        sizeof(struct ipv6hdr),
 
@@ -1794,6 +1781,7 @@ static struct tcp_func ipv6_mapped = {
        tcp_v4_rebuild_header,
        tcp_v6_conn_request,
        tcp_v6_syn_recv_sock,
+       tcp_v4_hash_connecting,
        tcp_v4_remember_stamp,
        sizeof(struct iphdr),
 
index c77904288e2a97eb76f7e6bb7df9072f432758ee..f1ff465451fe7ca907f381a7a33173525d8cfada 100644 (file)
@@ -361,6 +361,7 @@ EXPORT_SYMBOL(tcp_inherit_port);
 EXPORT_SYMBOL(tcp_v4_syn_recv_sock);
 EXPORT_SYMBOL(tcp_v4_do_rcv);
 EXPORT_SYMBOL(tcp_v4_connect);
+EXPORT_SYMBOL(tcp_v4_hash_connecting);
 EXPORT_SYMBOL(tcp_unhash);
 EXPORT_SYMBOL(udp_prot);
 EXPORT_SYMBOL(tcp_prot);
@@ -368,8 +369,7 @@ EXPORT_SYMBOL(tcp_openreq_cachep);
 EXPORT_SYMBOL(ipv4_specific);
 EXPORT_SYMBOL(tcp_simple_retransmit);
 EXPORT_SYMBOL(tcp_transmit_skb);
-EXPORT_SYMBOL(tcp_connect_init);
-EXPORT_SYMBOL(tcp_connect_send);
+EXPORT_SYMBOL(tcp_connect);
 EXPORT_SYMBOL(tcp_make_synack);
 EXPORT_SYMBOL(tcp_tw_deschedule);
 EXPORT_SYMBOL(tcp_delete_keepalive_timer);
index c8c88213c148cddfa0d146fb67b1038c7cb919cd..ffa92fcde23e26b76d6c477775fb0fcb92cca7bf 100644 (file)
@@ -1317,8 +1317,8 @@ static int unix_stream_sendmsg(struct socket *sock, struct msghdr *msg, int len,
                if (size > sk->sndbuf/2 - 64)
                        size = sk->sndbuf/2 - 64;
 
-               if (size > (128 * 1024) / 2)
-                       size = (128 * 1024) / 2;
+               if (size > SKB_MAX_ALLOC)
+                       size = SKB_MAX_ALLOC;
                        
                /*
                 *      Grab a buffer