]> git.neil.brown.name Git - history.git/commitdiff
Import 2.3.22 2.3.22
authorLinus Torvalds <torvalds@linuxfoundation.org>
Fri, 23 Nov 2007 20:27:45 +0000 (15:27 -0500)
committerLinus Torvalds <torvalds@linuxfoundation.org>
Fri, 23 Nov 2007 20:27:45 +0000 (15:27 -0500)
14 files changed:
Documentation/Configure.help
Documentation/SMP.txt [deleted file]
arch/i386/boot/setup.S
arch/i386/kernel/setup.c
drivers/char/bttv.c
drivers/char/buz.c
drivers/char/chipsets.h [deleted file]
fs/Config.in
fs/proc/array.c
net/Config.in
net/ipv4/Config.in
net/ipv6/Config.in
net/sched/Config.in
net/sunrpc/sched.c

index 4956eb34a90f4196b26321a250766e1f784687b0..807d2875511ba3472c4b9d6277614e82e6a1ae02 100644 (file)
@@ -80,9 +80,13 @@ CONFIG_EXPERIMENTAL
   MAINTAINERS, REPORTING_BUGS, Documentation/BUG-HUNTING, and
   Documentation/oops-tracing.txt in the kernel source). 
 
+  This option will also make obsoleted drivers available. These are
+  drivers that have been replaced by something else, and/or are
+  scheduled to be removed in a future kernel release.
+
   Unless you intend to help test and develop a feature or driver that
   falls into this category, or you have a situation that requires
-  using these features you should probably say N here, which will
+  using these features, you should probably say N here, which will
   cause this configure script to present you with fewer choices. If
   you say Y here, you will be offered the choice of using features or
   drivers that are currently considered to be in the alpha-test phase.
@@ -137,7 +141,7 @@ CONFIG_MATH_EMULATION
   More information about the internals of the Linux math coprocessor
   emulation can be found in arch/i386/math-emu/README.
 
-  If you are not sure, say Y; apart from resulting in a 45 KB bigger
+  If you are not sure, say Y; apart from resulting in a 66 KB bigger
   kernel, it won't hurt.
 
 Timer and CPU usage LEDs
@@ -165,7 +169,7 @@ CONFIG_LEDS_CPU
   time indication of CPU usage, by lighting whenever the idle task
   is not currently executing.
 
-Kernel FP software completion
+Kernel FP software completion (EXPERIMENTAL)
 CONFIG_MATHEMU
   This option is required for IEEE compliant floating point arithmetic
   on the Alpha. The only time you would ever not say Y is to say M in
@@ -1321,7 +1325,7 @@ CONFIG_ACER_PICA_61
   the MIPS architecture, check out the Linux/MIPS FAQ on the WWW at
   http://lena.fnet.fr/ .
 
-Support for Algorithmics P4032
+Support for Algorithmics P4032 (EXPERIMENTAL)
 CONFIG_ALGOR_P4032
   This is an evaluation board of the British company Algorithmics. The
   board uses the R4300 and a R5230 CPUs. For more information about
@@ -1641,7 +1645,7 @@ CONFIG_SGI_SERIAL
   If you want to use your SGI's built-in serial ports under Linux,
   answer Y.
 
-SGI Newport Graphics support
+SGI Newport Graphics support (EXPERIMENTAL)
 CONFIG_SGI_NEWPORT_GFX
   If you have an SGI machine and you want to compile the graphics
   drivers, say Y here. This will include the code for the
@@ -1835,7 +1839,7 @@ CONFIG_SYSVIPC
   section 6.4 of the Linux Programmer's Guide, available from
   http://metalab.unc.edu/mdw/linux.html#guide .
 
-  Saying Y here enlarges your kernel by about 7 KB. Just say Y.
+  Saying Y here enlarges your kernel by about 18 KB. Just say Y.
 
 BSD Process Accounting
 CONFIG_BSD_PROCESS_ACCT
@@ -1869,7 +1873,7 @@ CONFIG_BINFMT_ELF
   ELF (Executable and Linkable Format) is a format for libraries and
   executables used across different architectures and operating
   systems. Saying Y here will enable your kernel to run ELF binaries
-  and enlarge it by about 2 KB. ELF support under Linux has now all
+  and enlarge it by about 13 KB. ELF support under Linux has now all
   but replaced the traditional Linux a.out formats (QMAGIC and ZMAGIC)
   because it is portable (this does *not* mean that you will be able
   to run executables from different architectures or operating systems
@@ -1950,7 +1954,7 @@ CONFIG_BINFMT_MISC
   you have use for it; the module is called binfmt_misc.o. If you
   don't know what to answer at this point, say Y.
 
-Solaris binary emulation
+Solaris binary emulation (EXPERIMENTAL)
 CONFIG_SOLARIS_EMUL
   This is experimental code which will enable you to run (many)
   Solaris binaries on your SPARC Linux machine. 
@@ -2108,7 +2112,7 @@ CONFIG_FB_RETINAZ3
   you have a Retina Z3 or plan to get one before you next recompile
   the kernel.
 
-Cirrus Logic support (EXPERIMENTAL)
+Cirrus Logic generic driver (EXPERIMENTAL)
 CONFIG_FB_CLGEN
   This enables support for Cirrus Logic GD542x/543x based boards on
   Amiga: SD64, Piccolo, Picasso II/II+, Picasso IV, or EGS Spectrum.
@@ -2579,7 +2583,7 @@ TCP/IP networking
 CONFIG_INET
   These are the protocols used on the Internet and on most local
   Ethernets. It is highly recommended to say Y here (this will enlarge
-  your kernel by about 35 KB), since some programs (e.g. the X window
+  your kernel by about 144 KB), since some programs (e.g. the X window
   system) use TCP/IP even if your machine is not connected to any
   other computer. You will get the so-called loopback device which
   allows you to ping yourself (great fun, that!).
@@ -2934,7 +2938,7 @@ CONFIG_UNIX
 
   Say Y unless you know what you are doing.
 
-The IPv6 protocol
+The IPv6 protocol (EXPERIMENTAL)
 CONFIG_IPV6
   This is experimental support for the next version of the Internet
   Protocol: IP version 6 (also called IPng "IP next generation").
@@ -3006,7 +3010,7 @@ CONFIG_IPX
   General information about how to connect Linux, Windows machines and
   Macs is on the WWW at http://www.eats.com/linux_mac_win.html .
 
-  The IPX driver would enlarge your kernel by about 5 kB. This driver
+  The IPX driver would enlarge your kernel by about 16 KB. This driver
   is also available as a module ( = code which can be inserted in and
   removed from the running kernel whenever you want). The module will
   be called ipx.o. If you want to compile it as a module, say M here
@@ -4211,6 +4215,15 @@ CONFIG_SCSI_IPS
   does not work correctly without modification please contact the
   author by email at ipslinux@us.ibm.com.
 
+IBM ServeRAID Support
+CONFIG_SCSI_IPS
+  This is support for the IBM ServeRAID hardware RAID controllers.
+  Consult the SCSI-HOWTO, available via anonymous FTP from
+  ftp://metalab.unc.edu/pub/Linux/docs/HOWTO, and the file
+  README.ips in drivers/scsi for more information.  If this driver
+  does not work correctly without modification please contact the
+  author by email at ipslinux@us.ibm.com.
+
 BusLogic SCSI support
 CONFIG_SCSI_BUSLOGIC
   This is support for BusLogic MultiMaster and FlashPoint SCSI Host
@@ -5970,6 +5983,18 @@ CONFIG_RCPCI
   whenever you want). If you want to compile it as a module, say M
   here and read Documentation/modules.txt.
   
+SBNI Leased Line Adapters
+CONFIG_SBNI
+  This is a driver for ISA SBNI12-xx cards that is a low cost
+  alternative to leased line modems. Say Y if you want to insert
+  driver into kernel or say M to compile driver as a module. 
+  
+  You can find more information and last versions of drivers and 
+  utilities at http://www.granch.ru. If you have any question you
+  can mail to sbni@granch.ru.
+  
+  Say N if unsure.
+  
 WAN Drivers
 CONFIG_WAN_DRIVERS
   Say Y to this option if your Linux box contains a WAN card and you
@@ -6203,6 +6228,18 @@ CONFIG_NE2K_PCI
   module, say M here and read Documentation/modules.txt as well as
   Documentation/networking/net-modules.txt.
 
+PCI DM9102 support
+CONFIG_DM9102
+  This driver is for DM9102 compatible PCI cards from Davicom 
+  (http://www.davicom.com.tw) 
+  If you have a PCI DM9102 network (Ethernet) card, say Y.
+
+  This driver is also available as a module ( = code which can be
+  inserted in and removed from the running kernel whenever you want).
+  The module will be called dmfe.o. If you want to compile it as a
+  module, say M here and read Documentation/modules.txt as well as
+  Documentation/networking/net-modules.txt.
+
 Racal-Interlan (Micom) NI cards
 CONFIG_NET_VENDOR_RACAL
   If you have a network (Ethernet) card belonging to this class, such
@@ -6398,7 +6435,7 @@ CONFIG_ELPLUS
   Documentation/networking/net-modules.txt. The module will be called
   3c505.o.
 
-3c507 support
+3c507 support (EXPERIMENTAL)
 CONFIG_EL16
   If you have a network (Ethernet) card of this type, say Y and read
   the Ethernet-HOWTO, available from
@@ -7111,19 +7148,21 @@ CONFIG_IBMOL
   Linux Token Ring Project site for the latest information at
   http://www.linuxtr.net
 
-SysKonnect adapter support
-CONFIG_SKTR
-  This is support for all SysKonnect Token Ring cards, specifically
-  SysKonnect TR4/16(+) ISA (SK-4190), SysKonnect TR4/16(+) PCI
-  (SK-4590), SysKonnect TR4/16 PCI (SK-4591) adapters.
+Generic TMS380 Token Ring ISA/PCI adapter support
+CONFIG_TMS380TR
+  This driver provides generic support for token ring adapters
+  based on the Texas Instruments TMS380 series chipsets.  This
+  includes the SysKonnect TR4/16(+) ISA (SK-4190), SysKonnect
+  TR4/16(+) PCI (SK-4590), SysKonnect TR4/16 PCI (SK-4591),
+  Compaq 4/16 PCI, Thomas-Conrad TC4048 4/16 PCI, and Intel 
+  TokenExpress 4/16 and PRO ISA adapters.
 
   If you have such an adapter and would like to use it, say Y or M and
   read the Token-Ring mini-HOWTO, available from
   http://metalab.unc.edu/mdw/linux.html#howto .
 
   Also read the file linux/Documentation/networking/sktr.txt or check
-  the Linux-SNA WWW site for the latest information at
-  http://www.linux-sna.org .
+  http://www.auk.cx/tms380tr/
 
 Traffic Shaper (EXPERIMENTAL)
 CONFIG_SHAPER
@@ -7795,7 +7834,7 @@ CONFIG_ISO9660_FS
   listen to audio CDs and watch its LEDs, say Y (and read
   Documentation/filesystems/isofs.txt and the CDROM-HOWTO, available
   from http://metalab.unc.edu/mdw/linux.html#howto ), thereby
-  enlarging your kernel by about 27 kB; otherwise say N.
+  enlarging your kernel by about 27 KB; otherwise say N.
 
   If you want to compile this as a module ( = code which can be
   inserted in and removed from the running kernel whenever you want),
@@ -7854,7 +7893,7 @@ CONFIG_FAT_FS
   It is now also becoming possible to read and write compressed FAT
   filesystems; read Documentation/filesystems/fat_cvf.txt for details.
   
-  The FAT support will enlarge your kernel by about 24 kB. If unsure,
+  The FAT support will enlarge your kernel by about 37 KB. If unsure,
   say Y.
 
   If you want to compile this as a module however ( = code which can
@@ -7889,7 +7928,7 @@ CONFIG_MSDOS_FS
   support" below), or you will not be able to see the long filenames
   generated by Windows 95 / Windows NT.
 
-  This option will enlarge your kernel by about 7 kB. If unsure,
+  This option will enlarge your kernel by about 7 KB. If unsure,
   answer Y. This will only work if you said Y to "fat fs support" as
   well. If you want to compile this as a module however ( = code which
   can be inserted in and removed from the running kernel whenever you
@@ -7907,7 +7946,7 @@ CONFIG_VFAT_FS
   want to run Linux from within a DOS partition (i.e. say Y to
   "umsdos: Unix like fs on top of std MSDOS fs", below).
 
-  The VFAT support enlarges your kernel by about 10 kB and it only
+  The VFAT support enlarges your kernel by about 10 KB and it only
   works if you said Y to the "fat fs support" above. Please read the
   file Documentation/filesystems/vfat.txt for details. If unsure, 
   say Y.
@@ -7931,7 +7970,7 @@ CONFIG_UMSDOS_FS
   MSDOS floppies. You will need a program called umssync in order to
   make use of umsdos; read Documentation/filesystems/umsdos.txt. 
 
-  This option enlarges your kernel by about 25 kB and it only works if
+  This option enlarges your kernel by about 28 KB and it only works if
   you said Y to both "fat fs support" and "msdos fs support" above. If
   you want to compile this as a module ( = code which can be inserted
   in and removed from the running kernel whenever you want), say M
@@ -7980,7 +8019,7 @@ CONFIG_NFS_FS
   the Coda filesystem; see "Coda filesystem support" below.
 
   If you say Y here, you should have said Y to TCP/IP networking also.
-  This option would enlarge your kernel by about 27 kB. 
+  This option would enlarge your kernel by about 27 KB. 
 
   This filesystem is also available as a module ( = code which can be
   inserted in and removed from the running kernel whenever you want).
diff --git a/Documentation/SMP.txt b/Documentation/SMP.txt
deleted file mode 100644 (file)
index 99832ca..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-SMP on x86/Linux is now an official feature and is not experimental.
-Experimental SMP support for other architectures is underway.
-
-Please view linux/Documentation/smp.txt for more information about enabling SMP.
-
-SMP support for Linux with up to 16 processors using the Intel MP
-specification. 
-
-To fix:
-
-o      Clean up processor specific/independent split.
-o      Document it all.        [PARTLY DONE]
-o      Halting other CPUs on reset or panic doesn't always work.
-o      Don't waste page at 4 K--don't need it now (watch the GDT code).
-o      Dump bootup pages once booted somehow.
-o      Clean up warnings/volatiles.
-o      486 startup code.
-o      How to handle mixed FPU/non FPU processors.
-o      Test IO-APIC on various hardware.
-o      Separate IO-APIC from SMP.
index 1a6d6baa886eb5bc1bdc74d6fc9b4768301d0197..859c7248b0d3fc27232910656e012cece3bf9314 100644 (file)
@@ -145,7 +145,7 @@ start_of_setup:
 #ifdef SAFE_RESET_DISK_CONTROLLER
 # Reset the disk controller.
        movw    $0x0000, %ax
-       movb    $0x80, $dl
+       movb    $0x80, %dl
        int     $0x13
 #endif
 
@@ -400,7 +400,7 @@ is_disk1:
        subw    $DELTA_INITSEG, %ax             # aka INITSEG
        movw    %ax, %ds
        xorw    %ax, %ax
-       movw    %ax, 0xa0                       # set table length to 0
+       movw    %ax, (0xa0)                     # set table length to 0
        movb    $0xc0, %ah
        stc
        int     $0x15                           # moves feature table to es:bx
@@ -496,7 +496,7 @@ done_apm_bios:
        cmpw    $0, %cs:realmode_swtch
        jz      rmodeswtch_normal
 
-       call    *%cs:realmode_swtch
+       lcall   %cs:realmode_swtch
 
        jmp     rmodeswtch_end
 
index 1605c2eefeed1c53511a72ab8f3fe4778376f33c..734cfca65e8458f6b5f8bfea16db38781ca30a7c 100644 (file)
@@ -881,6 +881,15 @@ static void __init cyrix_model(struct cpuinfo_x86 *c)
                 *      on the MediaGX. So we turn it off for now. 
                 */
                
+#ifdef CONFIG_PCI
+               /* It isnt really a PCI quirk directly, but the cure is the
+                  same. The MediaGX has deep magic SMM stuff that handles the
+                  SB emulation. It thows away the fifo on disable_dma() which
+                  is wrong and ruins the audio. */
+               
+               printk(KERN_INFO "Working around Cyrix MediaGX virtual DMA bug.\n");
+               isa_dma_bridge_buggy = 1;
+#endif         
                /* GXm supports extended cpuid levels 'ala' AMD */
                if (c->cpuid_level == 2) {
                        get_model_name(c);  /* get CPU marketing name */
@@ -893,15 +902,6 @@ static void __init cyrix_model(struct cpuinfo_x86 *c)
                        c->x86_model = (dir1 & 0x20) ? 1 : 2;
                        c->x86_capability&=~X86_FEATURE_TSC;
                }
-#ifdef CONFIG_PCI
-               /* It isnt really a PCI quirk directly, but the cure is the
-                  same. The MediaGX has deep magic SMM stuff that handles the
-                  SB emulation. It thows away the fifo on disable_dma() which
-                  is wrong and ruins the audio. */
-               
-               printk(KERN_INFO "Working around Cyrix MediaGX virtual DMA bug.\n");
-               isa_dma_bridge_buggy = 1;
-#endif         
                break;
 
         case 5: /* 6x86MX/M II */
index b2c6bb38559918232cef14f1cc57e35fd7b2831c..ac21c68f0d82b928634f75cfc2b79273624b9f13 100644 (file)
@@ -2618,14 +2618,13 @@ static void handle_chipset(void)
        if (triton1)
                triton1=BT848_INT_ETBF;
        
-       while ((dev = pci_find_device(PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_496, dev))) 
+       
+       if(pci_pci_problems&PCIPCI_FAIL)
        {
-               /* Beware the SiS 85C496 my friend - rev 49 don't work with a bttv */
-               printk(KERN_WARNING "BT848 and SIS 85C496 chipset don't always work together.\n");
-       }                       
-
-       /* dev == NULL */
-
+               printk(KERN_WARNING "bttv: This configuration is known to have PCI to PCI DMA problems\n");
+               printk(KERN_WARNING "bttv: You may not be able to use overlay mode.\n");
+       }
+                       
        while ((dev = pci_find_device(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82441, dev))) 
        {
                unsigned char b;
index b535ac05e1816c889b3836a7ce7ba32c2cb3668e..91c131c567667ea5ca180736389c191b80e00c50 100644 (file)
@@ -3366,29 +3366,25 @@ static int find_zr36057(void)
        return zoran_num;
 }
 
-#include "chipsets.h"
-
 static void handle_chipset(void)
 {
-       int index;
-       struct pci_dev *dev = NULL;
-
-       for (index = 0; index < sizeof(black) / sizeof(black[0]); index++) {
-               if ((dev = pci_find_device(black[index].vendor, black[index].device, dev)) != NULL) {
-                       printk(KERN_INFO ": Host bridge: %s, ", black[index].name);
-                       switch (black[index].action) {
-
-                       case TRITON:
-                               printk("enabling Triton support.\n");
-                               triton = 1;
-                               break;
+       if(pci_pci_problems&PCIPCI_FAIL)
+       {
+               printk(KERN_WARNING "buz: This configuration is known to have PCI to PCI DMA problems\n");
+               printk(KERN_WARNING "buz: You may not be able to use overlay mode.\n");
+       }
+                       
 
-                       case NATOMA:
-                               printk("enabling Natoma workaround.\n");
-                               natoma = 1;
-                               break;
-                       }
-               }
+       if(pci_pci_problems&PCIPCI_TRITON)
+       {
+               printk("buz: Enabling Triton support.\n");
+               triton = 1;
+       }
+       
+       if(pci_pci_problems&PCIPCI_NATOMA)
+       {
+               printk("buz: Enabling Natoma workaround.\n");
+               natoma = 1;
        }
 }
 
diff --git a/drivers/char/chipsets.h b/drivers/char/chipsets.h
deleted file mode 100644 (file)
index 80c9525..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-static const struct {
-       unsigned short vendor;
-       unsigned short device;
-       enum {
-               TRITON,
-               NATOMA
-       } action;
-       const char *name;
-} black[] = {
-
-       {
-               PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82437, TRITON, "82437"
-       },
-       {
-               PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82437VX, TRITON, "82437VX Triton II"
-       },
-       {
-               PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82439, TRITON, "82439HX Triton II"
-       },
-       {
-               PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82439TX, TRITON, "82439TX"
-       },
-       {
-               PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82441, NATOMA, "82441FX Natoma"
-       },
-       {
-               PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82443LX_0, NATOMA, "440LX - 82443LX PAC Host"
-       },
-       {
-               PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82443LX_1, NATOMA, "440LX - 82443LX PAC AGP"
-       },
-       {
-               PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82443BX_0, NATOMA, "440BX - 82443BX Host"
-       },
-       {
-               PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82443BX_1, NATOMA, "440BX - 82443BX AGP"
-       },
-       {
-               PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82443BX_2, NATOMA, "440BX - 82443BX Host (no AGP)"
-       },
-};
index 0c47f3165b270ba3698bf24bf21f50c89d432c4c..0158b268d9b5ede2154039b29fa3fe6f4efb03e6 100644 (file)
@@ -4,15 +4,15 @@
 mainmenu_option next_comment
 comment 'Filesystems'
 
-bool    'Quota support' CONFIG_QUOTA
+bool 'Quota support' CONFIG_QUOTA
 tristate 'Kernel automounter support' CONFIG_AUTOFS_FS
 
 
 if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
-  tristate 'ADFS filesystem support (read only) (EXPERIMENTAL)' CONFIG_ADFS_FS
+   tristate 'ADFS filesystem support (read only) (EXPERIMENTAL)' CONFIG_ADFS_FS
 fi
 tristate 'Amiga FFS filesystem support' CONFIG_AFFS_FS
-tristate 'Apple Macintosh filesystem support (experimental)' CONFIG_HFS_FS
+tristate 'Apple Macintosh filesystem support (EXPERIMENTAL)' CONFIG_HFS_FS
 # msdos filesystems
 tristate 'DOS FAT fs support' CONFIG_FAT_FS
 dep_tristate '  MSDOS fs support' CONFIG_MSDOS_FS $CONFIG_FAT_FS
@@ -20,51 +20,51 @@ dep_tristate '  UMSDOS: Unix-like filesystem on top of standard MSDOS filesystem
 dep_tristate '  VFAT (Windows-95) fs support' CONFIG_VFAT_FS $CONFIG_FAT_FS
 
 if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
-  tristate 'EFS filesystem support (read only) (experimental)' CONFIG_EFS_FS
+   tristate 'EFS filesystem support (read only) (EXPERIMENTAL)' CONFIG_EFS_FS
 fi
 
 tristate 'ISO 9660 CDROM filesystem support' CONFIG_ISO9660_FS
 if [ "$CONFIG_ISO9660_FS" != "n" ]; then
-  bool 'Microsoft Joliet CDROM extensions' CONFIG_JOLIET
+   bool '  Microsoft Joliet CDROM extensions' CONFIG_JOLIET
 else
-  # needed by nls/Config.in
-  define_bool CONFIG_JOLIET n
+   # needed by nls/Config.in
+   define_bool CONFIG_JOLIET n
 fi
 
-tristate 'UDF filesystem support' CONFIG_UDF_FS
+tristate 'UDF filesystem support (read only)' CONFIG_UDF_FS
 if [ "$CONFIG_UDF_FS" != "n" -a "$CONFIG_EXPERIMENTAL" = "y" ]; then
-  bool '   UDF read-write support (EXPERIMENTAL)' CONFIG_UDF_RW
+   bool '  UDF write support (DANGEROUS)' CONFIG_UDF_RW
 fi
 
 tristate 'Minix fs support' CONFIG_MINIX_FS
 tristate 'NTFS filesystem support (read only)' CONFIG_NTFS_FS
 if [ "$CONFIG_NTFS_FS" != "n" -a "$CONFIG_EXPERIMENTAL" = "y" ]; then
-  bool '   NTFS read-write support (DANGEROUS)' CONFIG_NTFS_RW
+   bool '  NTFS write support (DANGEROUS)' CONFIG_NTFS_RW
 fi
-tristate 'OS/2 HPFS filesystem support (read/write) (NEW)' CONFIG_HPFS_FS
+tristate 'OS/2 HPFS filesystem support' CONFIG_HPFS_FS
 bool '/proc filesystem support' CONFIG_PROC_FS
 if [ "$CONFIG_UNIX98_PTYS" = "y" ]; then
-  # It compiles as a module for testing only.  It should not be used
-  # as a module in general.  If we make this "tristate", a bunch of people
-  # who don't know what they are doing turn it on and complain when it
-  # breaks.
-  bool '/dev/pts filesystem for Unix98 PTYs' CONFIG_DEVPTS_FS
+   # It compiles as a module for testing only.  It should not be used
+   # as a module in general.  If we make this "tristate", a bunch of people
+   # who don't know what they are doing turn it on and complain when it
+   # breaks.
+   bool '/dev/pts filesystem for Unix98 PTYs' CONFIG_DEVPTS_FS
 fi
 if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
-  tristate 'QNX filesystem support (EXPERIMENTAL)' CONFIG_QNX4FS_FS
-  if [ "$CONFIG_QNX4FS_FS" != "n" ]; then
-    bool '   QNXFS read-write support (FOR TESTING ONLY)' CONFIG_QNX4FS_RW
-  fi    
+   tristate 'QNX filesystem support (read only) (EXPERIMENTAL)' CONFIG_QNX4FS_FS
+   if [ "$CONFIG_QNX4FS_FS" != "n" ]; then
+      bool '  QNXFS write support (DANGEROUS)' CONFIG_QNX4FS_RW
+   fi    
 fi
 tristate 'ROM filesystem support' CONFIG_ROMFS_FS
 tristate 'Second extended fs support' CONFIG_EXT2_FS
 tristate 'System V and Coherent filesystem support' CONFIG_SYSV_FS
 if [ "$CONFIG_SYSV_FS" != "n" -a "$CONFIG_EXPERIMENTAL" ]; then
-  bool '   SYSV filesystem write support (DANGEROUS)' CONFIG_SYSV_FS_WRITE
+   bool '  SYSV filesystem write support (DANGEROUS)' CONFIG_SYSV_FS_WRITE
 fi
-tristate 'UFS filesystem support' CONFIG_UFS_FS
-if [ "$CONFIG_UFS_FS" != "n" ]; then
-  bool '   UFS filesystem write support (experimental)' CONFIG_UFS_FS_WRITE
+tristate 'UFS filesystem support (read only)' CONFIG_UFS_FS
+if [ "$CONFIG_UFS_FS" != "n" -a "$CONFIG_EXPERIMENTAL" ]; then
+   bool '  UFS filesystem write support (DANGEROUS)' CONFIG_UFS_FS_WRITE
 fi
 
 
@@ -74,35 +74,36 @@ mainmenu_option next_comment
 comment 'Network File Systems'
 
 if [ "$CONFIG_INET" = "y" ]; then
-  tristate 'Coda filesystem support (advanced network fs)' CONFIG_CODA_FS
-  tristate 'NFS filesystem support' CONFIG_NFS_FS
-  if [ "$CONFIG_NFS_FS" = "y" -a "$CONFIG_IP_PNP" = "y" ]; then
-    bool '   Root file system on NFS' CONFIG_ROOT_NFS
-  fi
-  # considering that RedHat-6.0 ships with this on, I guess it's not really experimental
-  tristate 'NFS server support' CONFIG_NFSD
-  if [ "$CONFIG_NFSD" != "n" ]; then
-    bool '   Emulate SUN NFS server' CONFIG_NFSD_SUN
-  fi
-  if [ "$CONFIG_NFS_FS" = "y" -o "$CONFIG_NFSD" = "y" ]; then
-    define_bool CONFIG_SUNRPC y
-    define_bool CONFIG_LOCKD y
-  else
-    if [ "$CONFIG_NFS_FS" = "m" -o "$CONFIG_NFSD" = "m" ]; then
-      define_bool CONFIG_SUNRPC m
-      define_bool CONFIG_LOCKD m
-    else
-      define_bool CONFIG_SUNRPC n
-      define_bool CONFIG_LOCKD n
-    fi
-  fi
-  tristate 'SMB filesystem support (to mount WfW shares etc.)' CONFIG_SMB_FS
+   tristate 'Coda filesystem support (advanced network fs)' CONFIG_CODA_FS
+   tristate 'NFS filesystem support' CONFIG_NFS_FS
+   if [ "$CONFIG_NFS_FS" = "y" -a "$CONFIG_IP_PNP" = "y" ]; then
+      bool '  Root file system on NFS' CONFIG_ROOT_NFS
+   fi
+   if [ "$CONFIG_EXPERIMENTAL" ]; then
+      tristate 'NFS server support (EXPERIMENTAL)' CONFIG_NFSD
+      if [ "$CONFIG_NFSD" != "n" ]; then
+        bool '  Emulate SUN NFS server' CONFIG_NFSD_SUN
+      fi
+   fi
+   if [ "$CONFIG_NFS_FS" = "y" -o "$CONFIG_NFSD" = "y" ]; then
+      define_bool CONFIG_SUNRPC y
+      define_bool CONFIG_LOCKD y
+   else
+      if [ "$CONFIG_NFS_FS" = "m" -o "$CONFIG_NFSD" = "m" ]; then
+        define_bool CONFIG_SUNRPC m
+        define_bool CONFIG_LOCKD m
+   else
+        define_bool CONFIG_SUNRPC n
+        define_bool CONFIG_LOCKD n
+      fi
+   fi
+   tristate 'SMB filesystem support (to mount WfW shares etc.)' CONFIG_SMB_FS
 fi
 if [ "$CONFIG_IPX" != "n" -o "$CONFIG_INET" != "n" ]; then
-  tristate 'NCP filesystem support (to mount NetWare volumes)' CONFIG_NCP_FS
-  if [ "$CONFIG_NCP_FS" != "n" ]; then
-    source fs/ncpfs/Config.in
-  fi
+   tristate 'NCP filesystem support (to mount NetWare volumes)' CONFIG_NCP_FS
+   if [ "$CONFIG_NCP_FS" != "n" ]; then
+      source fs/ncpfs/Config.in
+   fi
 fi
 
 endmenu
index f4cd01a7c4e92e5f488097df12e7ddd5f445f154..6a7b61b860589b303da59ea320f62d0b908bc240 100644 (file)
@@ -38,7 +38,6 @@
  *
  * aeb@cwi.nl        :  /proc/partitions
  *
- *
  * Alan Cox         :  security fixes.
  *                     <Alan.Cox@linux.org>
  *
  *
  * Gerhard Wichert   :  added BIGMEM support
  * Siemens AG           <Gerhard.Wichert@pdb.siemens.de>
+ *
+ * Chuck Lever       :  safe handling of task_struct
+ *                      <cel@monkey.org>
+ *
+ * Andrea Arcangeli  : SMP race/security fixes.
  */
 
 #include <linux/types.h>
@@ -67,6 +71,7 @@
 #include <linux/slab.h>
 #include <linux/smp.h>
 #include <linux/signal.h>
+#include <linux/smp_lock.h>
 
 #include <asm/uaccess.h>
 #include <asm/pgtable.h>
@@ -469,7 +474,7 @@ static int get_array(struct mm_struct *mm, unsigned long start, unsigned long en
                                return result;
                        }
                } while (addr & ~PAGE_MASK);
-               kunmap(addr, KM_READ);
+               kunmap(addr-1, KM_READ);
        }
        return result;
 }
@@ -478,7 +483,9 @@ static struct mm_struct *get_mm(int pid)
 {
        struct task_struct *p;
        struct mm_struct *mm = NULL;
-       
+
+       /* need kernel lock to avoid the tsk->mm to go away under us */
+       lock_kernel();
        read_lock(&tasklist_lock);
        p = find_task_by_pid(pid);
        if (p)
@@ -486,10 +493,10 @@ static struct mm_struct *get_mm(int pid)
        if (mm)
                atomic_inc(&mm->mm_users);
        read_unlock(&tasklist_lock);
+       unlock_kernel();
        return mm;
 }
 
-
 static int get_env(int pid, char * buffer)
 {
        struct mm_struct *mm = get_mm(pid);
@@ -842,6 +849,9 @@ static inline char * task_mem(struct mm_struct *mm, char *buffer)
        return buffer;
 }
 
+/*
+ * These next two assume that the task's sigmask_lock is held by the caller.
+ */
 static void collect_sigign_sigcatch(struct task_struct *p, sigset_t *ign,
                                    sigset_t *catch)
 {
@@ -894,77 +904,115 @@ extern inline char *task_cap(struct task_struct *p, char *buffer)
                            cap_t(p->cap_effective));
 }
 
-
+/*
+ * This is somewhat safer than it was before.  However...
+ *
+ * Embedded pointers in the task structure may reference data that
+ * can be changed or that is no longer valid after the tasklist
+ * lock is released, or that isn't even protected by the tasklist
+ * lock.  Eg. tsk->tty, tsk->sig, and tsk->p_pptr can change after
+ * we make our own copy of the task structure.  This doesn't matter
+ * unless we are trying to use the pointed-to data as an address.
+ * So there are still a few safety issues to be addressed here.
+ */
 static int get_status(int pid, char * buffer)
 {
        char * orig = buffer;
        struct task_struct *tsk;
        struct mm_struct *mm = NULL;
 
+       /*
+        * We lock the whole kernel here because p->files and p->mm are still
+        * protected by the global kernel lock.
+        */
+       lock_kernel();
+
        read_lock(&tasklist_lock);
        tsk = find_task_by_pid(pid);
-       if (tsk)
+       if (tsk) {
                mm = tsk->mm;
-       if (mm)
-               atomic_inc(&mm->mm_users);
-       read_unlock(&tasklist_lock);    /* FIXME!! This should be done after the last use */
-       if (!tsk)
-               return 0;
-       buffer = task_name(tsk, buffer);
-       buffer = task_state(tsk, buffer);
-       if (mm)
+               if (mm)
+                       atomic_inc(&mm->mm_users);
+
+               buffer = task_name(tsk, buffer);
+               buffer = task_state(tsk, buffer);
+
+               spin_lock_irq(&tsk->sigmask_lock);
+               buffer = task_sig(tsk, buffer);
+               spin_unlock_irq(&tsk->sigmask_lock);
+
+               buffer = task_cap(tsk, buffer);
+       }
+       read_unlock(&tasklist_lock);
+
+       unlock_kernel();
+
+       /*
+        * We can't hold the tasklist_lock and jiggle the mmap_sem --
+        * that can result in a deadlock.
+        */
+       if (mm) {
                buffer = task_mem(mm, buffer);
-       buffer = task_sig(tsk, buffer);
-       buffer = task_cap(tsk, buffer);
-       if (mm)
                mmput(mm);
+       }
+
+       /*
+        * (buffer - orig) will be zero on an error exit.
+        */
        return buffer - orig;
 }
 
 static int get_stat(int pid, char * buffer)
 {
        struct task_struct *tsk;
-       struct mm_struct *mm = NULL;
+       struct mm_struct *mm;
        unsigned long vsize, eip, esp, wchan;
        long priority, nice;
-       int tty_pgrp;
+       pid_t ppid = 0;
        sigset_t sigign, sigcatch;
        char state;
-       int res;
+       int res = 0;
+       unsigned int tty_device;
+       int tty_pgrp;
 
        read_lock(&tasklist_lock);
        tsk = find_task_by_pid(pid);
-       if (tsk)
-               mm = tsk->mm;
+       if (!tsk)
+               goto out_unlock;
+       /* avoid the task list to go away under us (security) */
+       get_page(MAP_NR(tsk) + mem_map);
+       ppid = tsk->p_pptr->pid;
+       read_unlock(&tasklist_lock);
+
+       /* we need the big kernel lock to avoid tsk->mm and tsk->tty
+          to change under us */
+       lock_kernel();
+       mm = tsk->mm;
        if (mm)
                atomic_inc(&mm->mm_users);
-       read_unlock(&tasklist_lock);    /* FIXME!! This should be done after the last use */
-       if (!tsk)
-               return 0;
+       tty_device = tsk->tty ? kdev_t_to_nr(tsk->tty->device) : 0;
+       tty_pgrp = tsk->tty ? tsk->tty->pgrp : -1;
+       unlock_kernel();
+
+       spin_lock_irq(&tsk->sigmask_lock);
+       collect_sigign_sigcatch(tsk, &sigign, &sigcatch);
+       spin_unlock_irq(&tsk->sigmask_lock);
+
+       eip = KSTK_EIP(tsk);
+       esp = KSTK_ESP(tsk);
+       wchan = get_wchan(tsk);
+
        state = *get_task_state(tsk);
        vsize = eip = esp = 0;
-       if (mm) {
+       if (mm)
+       {
                struct vm_area_struct *vma;
                down(&mm->mmap_sem);
-               vma = mm->mmap;
-               while (vma) {
+               for (vma = mm->mmap; vma; vma = vma->vm_next)
                        vsize += vma->vm_end - vma->vm_start;
-                       vma = vma->vm_next;
-               }
-               eip = KSTK_EIP(tsk);
-               esp = KSTK_ESP(tsk);
                up(&mm->mmap_sem);
        }
 
-       wchan = get_wchan(tsk);
-
-       collect_sigign_sigcatch(tsk, &sigign, &sigcatch);
-
-       if (tsk->tty)
-               tty_pgrp = tsk->tty->pgrp;
-       else
-               tty_pgrp = -1;
-
        /* scale priority and nice values from timeslices to -20..20 */
        /* to make it look like a "normal" Unix priority/nice value  */
        priority = tsk->counter;
@@ -978,10 +1026,10 @@ static int get_stat(int pid, char * buffer)
                pid,
                tsk->comm,
                state,
-               tsk->p_pptr->pid,
+               ppid,
                tsk->pgrp,
                tsk->session,
-               tsk->tty ? kdev_t_to_nr(tsk->tty->device) : 0,
+               tty_device,
                tty_pgrp,
                tsk->flags,
                tsk->min_flt,
@@ -1018,9 +1066,16 @@ static int get_stat(int pid, char * buffer)
                tsk->cnswap,
                tsk->exit_signal,
                tsk->processor);
+
        if (mm)
                mmput(mm);
+       free_task_struct(tsk);
        return res;
+
+out_unlock:
+       read_unlock(&tasklist_lock);
+       unlock_kernel();
+       return 0;
 }
                
 static inline void statm_pte_range(pmd_t * pmd, unsigned long address, unsigned long size,
@@ -1168,11 +1223,11 @@ static ssize_t read_maps (int pid, struct file * file, char * buf,
                          size_t count, loff_t *ppos)
 {
        struct task_struct *p;
+       struct mm_struct *mm = NULL;
        struct vm_area_struct * map, * next;
        char * destptr = buf, * buffer;
        loff_t lineno;
        ssize_t column, i;
-       int volatile_task;
        long retval;
 
        /*
@@ -1184,24 +1239,30 @@ static ssize_t read_maps (int pid, struct file * file, char * buf,
                goto out;
 
        retval = -EINVAL;
+       lock_kernel();
        read_lock(&tasklist_lock);
        p = find_task_by_pid(pid);
-       read_unlock(&tasklist_lock);    /* FIXME!! This should be done after the last use */
+       if (p) {
+               mm = p->mm;
+               if (mm)
+                       atomic_inc(&mm->mm_users);
+       }
+       read_unlock(&tasklist_lock);
+       unlock_kernel();
        if (!p)
                goto freepage_out;
 
-       if (!p->mm || count == 0)
+       /* nothing to map */
+       if (!mm || count == 0)
                goto getlen_out;
 
-       /* Check whether the mmaps could change if we sleep */
-       volatile_task = (p != current || atomic_read(&p->mm->mm_users) > 1);
-
        /* decode f_pos */
        lineno = *ppos >> MAPS_LINE_SHIFT;
        column = *ppos & (MAPS_LINE_LENGTH-1);
 
-       /* quickly go to line lineno */
-       for (map = p->mm->mmap, i = 0; map && (i < lineno); map = map->vm_next, i++)
+       down(&mm->mmap_sem);
+       /* quickly go to line "lineno" */
+       for (map = mm->mmap, i = 0; map && (i < lineno); map = map->vm_next, i++)
                continue;
 
        for ( ; map ; map = next ) {
@@ -1272,17 +1333,13 @@ static ssize_t read_maps (int pid, struct file * file, char * buf,
                /* done? */
                if (count == 0)
                        break;
-
-               /* By writing to user space, we might have slept.
-                * Stop the loop, to avoid a race condition.
-                */
-               if (volatile_task)
-                       break;
        }
+       up(&mm->mmap_sem);
 
        /* encode f_pos */
        *ppos = (lineno << MAPS_LINE_SHIFT) + column;
 
+       mmput(mm);
 getlen_out:
        retval = destptr - buf;
 
@@ -1295,28 +1352,31 @@ out:
 #ifdef __SMP__
 static int get_pidcpu(int pid, char * buffer)
 {
-       struct task_struct * tsk = current ;
-       int i, len;
+       struct task_struct * tsk;
+       int i, len = 0;
 
+       /*
+        * Hold the tasklist_lock to guarantee that the task_struct
+        * address will remain valid while we examine its contents.
+        */
        read_lock(&tasklist_lock);
-       if (pid != tsk->pid)
-               tsk = find_task_by_pid(pid);
-       read_unlock(&tasklist_lock);    /* FIXME!! This should be done after the last use */
-
-       if (tsk == NULL)
-               return 0;
-
-       len = sprintf(buffer,
-               "cpu  %lu %lu\n",
-               tsk->times.tms_utime,
-               tsk->times.tms_stime);
+       tsk = find_task_by_pid(pid);
+       if (tsk)
+               get_page(MAP_NR(tsk) + mem_map);
+       read_unlock(&tasklist_lock);
+       if (tsk) {
+               len = sprintf(buffer,
+                       "cpu  %lu %lu\n",
+                       tsk->times.tms_utime,
+                       tsk->times.tms_stime);
                
-       for (i = 0 ; i < smp_num_cpus; i++)
-               len += sprintf(buffer + len, "cpu%d %lu %lu\n",
-                       i,
-                       tsk->per_cpu_utime[cpu_logical_map(i)],
-                       tsk->per_cpu_stime[cpu_logical_map(i)]);
-
+               for (i = 0 ; i < smp_num_cpus; i++)
+                       len += sprintf(buffer + len, "cpu%d %lu %lu\n",
+                               i,
+                               tsk->per_cpu_utime[cpu_logical_map(i)],
+                               tsk->per_cpu_stime[cpu_logical_map(i)]);
+               free_task_struct(tsk);
+       }
        return len;
 }
 #endif
@@ -1453,12 +1513,6 @@ static int process_unauthorized(int type, int pid)
        int ok = 0;
                
        read_lock(&tasklist_lock);
-       
-       /*
-        *      Grab the lock, find the task, save the uid and
-        *      check it has an mm still (ie its not dead)
-        */
-       
        p = find_task_by_pid(pid);
        if (p) {
                euid=p->euid;
@@ -1466,9 +1520,7 @@ static int process_unauthorized(int type, int pid)
                if(!cap_issubset(p->cap_permitted, current->cap_permitted))
                        ok=0;                   
        }
-               
        read_unlock(&tasklist_lock);
-
        if (!p)
                return 1;
 
index c00b0f9029c51acc3f4cb5c70bdfb755e3501896..ead9fc816906c656cc44863eba9edf67b59c9061 100644 (file)
@@ -5,85 +5,86 @@ mainmenu_option next_comment
 comment 'Networking options'
 tristate 'Packet socket' CONFIG_PACKET
 if [ "$CONFIG_PACKET" != "n" ]; then
-  bool 'Packet socket: mmapped IO' CONFIG_PACKET_MMAP
+   bool '  Packet socket: mmapped IO' CONFIG_PACKET_MMAP
 fi
 bool 'Kernel/User netlink socket' CONFIG_NETLINK
 if [ "$CONFIG_NETLINK" = "y" ]; then
-  bool 'Routing messages' CONFIG_RTNETLINK
-  tristate 'Netlink device emulation' CONFIG_NETLINK_DEV
+   bool '  Routing messages' CONFIG_RTNETLINK
+   tristate '  Netlink device emulation' CONFIG_NETLINK_DEV
 fi
 bool 'Network packet filtering (replaces ipchains)' CONFIG_NETFILTER
 if [ "$CONFIG_NETFILTER" = "y" ]; then
-  bool 'Network packet filtering debugging' CONFIG_NETFILTER_DEBUG
+   bool '  Network packet filtering debugging' CONFIG_NETFILTER_DEBUG
 fi
 bool 'Socket Filtering'  CONFIG_FILTER
 tristate 'Unix domain sockets' CONFIG_UNIX
 bool 'TCP/IP networking' CONFIG_INET
 if [ "$CONFIG_INET" = "y" ]; then
-  source net/ipv4/Config.in
-  if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
-#   Sorry, but IPv6 as module is still invalid.
-    tristate 'The IPv6 protocol (EXPERIMENTAL)' CONFIG_IPV6
-#   bool 'The IPv6 protocol (EXPERIMENTAL)' CONFIG_IPV6
-    if [ "$CONFIG_IPV6" != "n" ]; then
-           source net/ipv6/Config.in
-    fi
-  fi
-  if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
-       source net/khttpd/Config.in
-  fi
+   source net/ipv4/Config.in
+   if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
+#   IPv6 as module will cause a CRASH if you try to unload it
+      tristate '  The IPv6 protocol (EXPERIMENTAL)' CONFIG_IPV6
+      if [ "$CONFIG_IPV6" != "n" ]; then
+        source net/ipv6/Config.in
+      fi
+   fi
+   if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
+      source net/khttpd/Config.in
+   fi
 fi
 if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
-  bool 'Asynchronous Transfer Mode (ATM, EXPERIMENTAL)' CONFIG_ATM y
-  if [ "$CONFIG_ATM" = "y" ]; then
-    if [ "$CONFIG_INET" = "y" ]; then
-      bool '  Classical IP over ATM' CONFIG_ATM_CLIP y
-      if [ "$CONFIG_ATM_CLIP" = "y" ]; then
-       bool '    Do NOT send ICMP if no neighbour' CONFIG_ATM_CLIP_NO_ICMP n
+   bool 'Asynchronous Transfer Mode (ATM) (EXPERIMENTAL)' CONFIG_ATM
+   if [ "$CONFIG_ATM" = "y" ]; then
+      if [ "$CONFIG_INET" = "y" ]; then
+        bool '  Classical IP over ATM' CONFIG_ATM_CLIP
+        if [ "$CONFIG_ATM_CLIP" = "y" ]; then
+           bool '    Do NOT send ICMP if no neighbour' CONFIG_ATM_CLIP_NO_ICMP
+        fi
+      fi
+      tristate '  LAN Emulation (LANE) support' CONFIG_ATM_LANE
+      if [ "$CONFIG_INET" = "y" -a "$CONFIG_ATM_LANE" != "n" ]; then
+        tristate '    Multi-Protocol Over ATM (MPOA) support' CONFIG_ATM_MPOA
       fi
-    fi
-    tristate '  LAN Emulation (LANE) support' CONFIG_ATM_LANE y
-    if [ "$CONFIG_INET" = "y" -a "$CONFIG_ATM_LANE" != "n" ]; then
-      tristate '  Multi-Protocol Over ATM (MPOA) support' CONFIG_ATM_MPOA y
-    fi
-  fi
+   fi
 fi
 
 comment ' '
 tristate 'The IPX protocol' CONFIG_IPX
 if [ "$CONFIG_IPX" != "n" ]; then
-  source net/ipx/Config.in
+   source net/ipx/Config.in
 fi
 tristate 'Appletalk DDP' CONFIG_ATALK
 if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
-  tristate 'DECnet Support (EXPERIMENTAL)' CONFIG_DECNET
-  if [ "$CONFIG_DECNET" != "n" ]; then
-    source net/decnet/Config.in
-  fi
-  tristate 'CCITT X.25 Packet Layer (EXPERIMENTAL)' CONFIG_X25
-  tristate 'LAPB Data Link Driver (EXPERIMENTAL)' CONFIG_LAPB
-  bool 'Bridging (EXPERIMENTAL)' CONFIG_BRIDGE
-  bool '802.2 LLC (EXPERIMENTAL)' CONFIG_LLC
-#  if [ "$CONFIG_LLC" = "y" ]; then
-#   bool 'Netbeui (EXPERIMENTAL)' CONFIG_NETBEUI
-#  fi
-  tristate 'Acorn Econet/AUN protocols (EXPERIMENTAL)' CONFIG_ECONET
-  if [ "$CONFIG_ECONET" != "n" ]; then
-    bool '  AUN over UDP' CONFIG_ECONET_AUNUDP
-    bool '  Native Econet' CONFIG_ECONET_NATIVE
-  fi
-  tristate 'WAN router' CONFIG_WAN_ROUTER
-  bool 'Fast switching (read help!)' CONFIG_NET_FASTROUTE
-  bool 'Forwarding between high speed interfaces' CONFIG_NET_HW_FLOWCONTROL
-  if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
-  mainmenu_option next_comment
-  comment 'QoS and/or fair queueing'
-  bool 'QoS and/or fair queueing' CONFIG_NET_SCHED
-  if [ "$CONFIG_NET_SCHED" = "y" ]; then
-    source net/sched/Config.in
-  fi
-#  bool 'Network code profiler' CONFIG_NET_PROFILE
-  endmenu
-  fi
+   tristate 'DECnet Support (EXPERIMENTAL)' CONFIG_DECNET
+   if [ "$CONFIG_DECNET" != "n" ]; then
+      source net/decnet/Config.in
+   fi
+   tristate 'CCITT X.25 Packet Layer (EXPERIMENTAL)' CONFIG_X25
+   tristate 'LAPB Data Link Driver (EXPERIMENTAL)' CONFIG_LAPB
+   bool 'Bridging (EXPERIMENTAL)' CONFIG_BRIDGE
+   bool '802.2 LLC (EXPERIMENTAL)' CONFIG_LLC
+#   if [ "$CONFIG_LLC" = "y" ]; then
+#      bool '  Netbeui (EXPERIMENTAL)' CONFIG_NETBEUI
+#   fi
+   if [ "$CONFIG_INET" = "y" ]; then
+      tristate 'Acorn Econet/AUN protocols (EXPERIMENTAL)' CONFIG_ECONET
+   fi
+   if [ "$CONFIG_ECONET" != "n" ]; then
+      bool '  AUN over UDP' CONFIG_ECONET_AUNUDP
+      bool '  Native Econet' CONFIG_ECONET_NATIVE
+   fi
+   tristate 'WAN router' CONFIG_WAN_ROUTER
+   bool 'Fast switching (read help!)' CONFIG_NET_FASTROUTE
+   bool 'Forwarding between high speed interfaces' CONFIG_NET_HW_FLOWCONTROL
+   if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
+      mainmenu_option next_comment
+      comment 'QoS and/or fair queueing'
+      bool 'QoS and/or fair queueing (EXPERIMENTAL)' CONFIG_NET_SCHED
+      if [ "$CONFIG_NET_SCHED" = "y" ]; then
+        source net/sched/Config.in
+      fi
+#      bool 'Network code profiler' CONFIG_NET_PROFILE
+      endmenu
+   fi
 fi
 endmenu
index a84d61d1766f88310936ec9f0a1085b9ae0ecbad..487b7411a03b23b8a16f989dd999102a45c42d50 100644 (file)
@@ -1,56 +1,55 @@
 #
 # IP configuration
 #
-bool 'IP: multicasting' CONFIG_IP_MULTICAST
-bool 'IP: advanced router' CONFIG_IP_ADVANCED_ROUTER
+bool '  IP: multicasting' CONFIG_IP_MULTICAST
+bool '  IP: advanced router' CONFIG_IP_ADVANCED_ROUTER
 if [ "$CONFIG_IP_ADVANCED_ROUTER" = "y" ]; then
-  define_bool CONFIG_RTNETLINK y       
-  define_bool CONFIG_NETLINK y
-  bool 'IP: policy routing' CONFIG_IP_MULTIPLE_TABLES
-  bool 'IP: equal cost multipath' CONFIG_IP_ROUTE_MULTIPATH
-  bool 'IP: use TOS value as routing key' CONFIG_IP_ROUTE_TOS
-  bool 'IP: verbose route monitoring' CONFIG_IP_ROUTE_VERBOSE
-  bool 'IP: large routing tables' CONFIG_IP_ROUTE_LARGE_TABLES
-  if [ "$CONFIG_IP_MULTIPLE_TABLES" = "y" ]; then
-    bool 'IP: fast network address translation' CONFIG_IP_ROUTE_NAT
-  fi
+   define_bool CONFIG_RTNETLINK y      
+   define_bool CONFIG_NETLINK y
+   bool '    IP: policy routing' CONFIG_IP_MULTIPLE_TABLES
+   if [ "$CONFIG_IP_MULTIPLE_TABLES" = "y" ]; then
+      bool '  IP: use FWMARK value as routing key' CONFIG_IP_ROUTE_FWMARK
+   fi
+   bool '    IP: equal cost multipath' CONFIG_IP_ROUTE_MULTIPATH
+   bool '    IP: use TOS value as routing key' CONFIG_IP_ROUTE_TOS
+   bool '    IP: verbose route monitoring' CONFIG_IP_ROUTE_VERBOSE
+   bool '    IP: large routing tables' CONFIG_IP_ROUTE_LARGE_TABLES
+   if [ "$CONFIG_IP_MULTIPLE_TABLES" = "y" ]; then
+      bool '      IP: fast network address translation' CONFIG_IP_ROUTE_NAT
+   fi
 fi
-if [ "$CONFIG_IP_MULTIPLE_TABLES" = "y" ]; then
-  bool 'IP: use FWMARK value as routing key' CONFIG_IP_ROUTE_FWMARK
-fi
-bool 'IP: kernel level autoconfiguration' CONFIG_IP_PNP
+bool '  IP: kernel level autoconfiguration' CONFIG_IP_PNP
 if [ "$CONFIG_IP_PNP" = "y" ]; then
-  bool '      BOOTP support' CONFIG_IP_PNP_BOOTP
-  bool '      RARP support' CONFIG_IP_PNP_RARP
+   bool '    BOOTP support' CONFIG_IP_PNP_BOOTP
+   bool '    RARP support' CONFIG_IP_PNP_RARP
 # not yet ready..
-#  bool '      ARP support' CONFIG_IP_PNP_ARP          
+#   bool '    ARP support' CONFIG_IP_PNP_ARP           
 fi
-bool 'IP: optimize as router not host' CONFIG_IP_ROUTER
-tristate 'IP: tunneling' CONFIG_NET_IPIP
-tristate 'IP: GRE tunnels over IP' CONFIG_NET_IPGRE
+bool '  IP: optimize as router not host' CONFIG_IP_ROUTER
+tristate '  IP: tunneling' CONFIG_NET_IPIP
+tristate '  IP: GRE tunnels over IP' CONFIG_NET_IPGRE
 if [ "$CONFIG_IP_MULTICAST" = "y" ]; then
-  if [ "$CONFIG_NET_IPGRE" != "n" ]; then
-    bool 'IP: broadcast GRE over IP' CONFIG_NET_IPGRE_BROADCAST
-  fi
-  bool 'IP: multicast routing' CONFIG_IP_MROUTE
-  if [ "$CONFIG_IP_MROUTE" = "y" ]; then
-    bool 'IP: PIM-SM version 1 support' CONFIG_IP_PIMSM_V1
-    bool 'IP: PIM-SM version 2 support' CONFIG_IP_PIMSM_V2
-  fi
+   if [ "$CONFIG_NET_IPGRE" != "n" ]; then
+      bool '    IP: broadcast GRE over IP' CONFIG_NET_IPGRE_BROADCAST
+   fi
+   bool '  IP: multicast routing' CONFIG_IP_MROUTE
+   if [ "$CONFIG_IP_MROUTE" = "y" ]; then
+      bool '    IP: PIM-SM version 1 support' CONFIG_IP_PIMSM_V1
+      bool '    IP: PIM-SM version 2 support' CONFIG_IP_PIMSM_V2
+   fi
 fi
-bool 'IP: aliasing support' CONFIG_IP_ALIAS
+bool '  IP: aliasing support' CONFIG_IP_ALIAS
 if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
-  if [ "$CONFIG_RTNETLINK" = "y" ]; then
-    bool 'IP: ARP daemon support (EXPERIMENTAL)' CONFIG_ARPD
-  fi
+   if [ "$CONFIG_RTNETLINK" = "y" ]; then
+      bool '  IP: ARP daemon support (EXPERIMENTAL)' CONFIG_ARPD
+   fi
 fi
-bool 'IP: TCP syncookie support (not enabled per default)' CONFIG_SYN_COOKIES
+bool '  IP: TCP syncookie support (disabled per default)' CONFIG_SYN_COOKIES
 comment '(it is safe to leave these untouched)'
-#bool 'IP: PC/TCP compatibility mode' CONFIG_INET_PCTCP
-#bool 'IP: Path MTU Discovery (normally enabled)' CONFIG_PATH_MTU_DISCOVERY
-#bool 'IP: Disable NAGLE algorithm (normally enabled)' CONFIG_TCP_NAGLE_OFF
-bool 'IP: Allow large windows (not recommended if <16Mb of memory)' CONFIG_SKB_LARGE
+#bool '  IP: PC/TCP compatibility mode' CONFIG_INET_PCTCP
+#bool '  IP: Path MTU Discovery (normally enabled)' CONFIG_PATH_MTU_DISCOVERY
+#bool '  IP: Disable NAGLE algorithm (normally enabled)' CONFIG_TCP_NAGLE_OFF
+bool '  IP: Allow large windows (not recommended if <16Mb of memory)' CONFIG_SKB_LARGE
 #if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then 
-#bool 'IP: support experimental checksum copy to user for UDP'  CONFIG_UDP_DELAY_CSUM
+#   bool '  IP: support checksum copy to user for UDP (EXPERIMENTAL)'  CONFIG_UDP_DELAY_CSUM
 #fi
-
index 3372817c3eaad8f637d9b0846a6a6546e28ec7aa..6bf46e4e80e8c58ef11ad3f1ae2db12f919597e1 100644 (file)
@@ -1,14 +1,14 @@
 #
 # IPv6 configuration
 # 
-bool 'IPv6: enable EUI-64 token format' CONFIG_IPV6_EUI64
+bool '    IPv6: enable EUI-64 token format' CONFIG_IPV6_EUI64
 if [ "$CONFIG_IPV6_EUI64" = "y" ]; then
-  bool 'IPv6: disable provider based addresses' CONFIG_IPV6_NO_PB
+   bool '    IPv6: disable provider based addresses' CONFIG_IPV6_NO_PB
 fi
 if [ "$CONFIG_NETLINK" = "y" ]; then
-  if [ "$CONFIG_RTNETLINK" = "n" ]; then
-    bool 'IPv6: routing messages via old netlink' CONFIG_IPV6_NETLINK
-  fi
+   if [ "$CONFIG_RTNETLINK" = "n" ]; then
+      bool '    IPv6: routing messages via old netlink' CONFIG_IPV6_NETLINK
+   fi
 fi
-#bool 'IPv6: flow policy support' CONFIG_RT6_POLICY
-#bool 'IPv6: firewall support' CONFIG_IPV6_FIREWALL
+#bool '    IPv6: flow policy support' CONFIG_RT6_POLICY
+#bool '    IPv6: firewall support' CONFIG_IPV6_FIREWALL
index 512f6eb4dfa618bfbb242f2e6df8d43e351ed5d5..aeb2141bb090559753a6044ec48cc3f073baf656 100644 (file)
@@ -8,7 +8,7 @@ tristate 'CSZ packet scheduler' CONFIG_NET_SCH_CSZ
 #tristate 'H-PFQ packet scheduler' CONFIG_NET_SCH_HPFQ
 #tristate 'H-FSC packet scheduler' CONFIG_NET_SCH_HFCS
 if [ "$CONFIG_ATM" = "y" ]; then
-    bool 'ATM pseudo-scheduler' CONFIG_NET_SCH_ATM
+   bool 'ATM pseudo-scheduler' CONFIG_NET_SCH_ATM
 fi
 tristate 'The simplest PRIO pseudoscheduler' CONFIG_NET_SCH_PRIO
 tristate 'RED queue' CONFIG_NET_SCH_RED
@@ -17,20 +17,20 @@ tristate 'TEQL queue' CONFIG_NET_SCH_TEQL
 tristate 'TBF queue' CONFIG_NET_SCH_TBF
 bool 'QoS support' CONFIG_NET_QOS
 if [ "$CONFIG_NET_QOS" = "y" ]; then
-    bool 'Rate estimator' CONFIG_NET_ESTIMATOR
+    bool '  Rate estimator' CONFIG_NET_ESTIMATOR
 fi
 bool 'Packet classifier API' CONFIG_NET_CLS
 if [ "$CONFIG_NET_CLS" = "y" ]; then
-  tristate 'Routing table based classifier' CONFIG_NET_CLS_ROUTE4
-  if [ "$CONFIG_NET_CLS_ROUTE4" != "n" ]; then
-    define_bool CONFIG_NET_CLS_ROUTE y
-  fi
-  tristate 'Firewall based classifier' CONFIG_NET_CLS_FW
-  tristate 'U32 classifier' CONFIG_NET_CLS_U32
-  if [ "$CONFIG_NET_QOS" = "y" ]; then
-    tristate 'Special RSVP classifier' CONFIG_NET_CLS_RSVP
-    tristate 'Special RSVP classifier for IPv6' CONFIG_NET_CLS_RSVP6
-    bool 'Ingres traffic policing' CONFIG_NET_CLS_POLICE
-  fi
+   tristate '  Routing table based classifier' CONFIG_NET_CLS_ROUTE4
+   if [ "$CONFIG_NET_CLS_ROUTE4" != "n" ]; then
+      define_bool CONFIG_NET_CLS_ROUTE y
+   fi
+   tristate '  Firewall based classifier' CONFIG_NET_CLS_FW
+   tristate '  U32 classifier' CONFIG_NET_CLS_U32
+   if [ "$CONFIG_NET_QOS" = "y" ]; then
+      tristate '  Special RSVP classifier' CONFIG_NET_CLS_RSVP
+      tristate '  Special RSVP classifier for IPv6' CONFIG_NET_CLS_RSVP6
+      bool '  Ingres traffic policing' CONFIG_NET_CLS_POLICE
+   fi
 fi
 
index 25264c231114e3b2048666c3995443dea375aa28..181a7e46ca896a1b67fada4a1d2a29d3adbc15d1 100644 (file)
@@ -872,7 +872,6 @@ static int
 rpciod(void *ptr)
 {
        wait_queue_head_t *assassin = (wait_queue_head_t*) ptr;
-       unsigned long   oldflags;
        int             rounds = 0;
 
        MOD_INC_USE_COUNT;
@@ -907,7 +906,6 @@ rpciod(void *ptr)
                        schedule();
                        rounds = 0;
                }
-               save_flags(oldflags); cli();
                dprintk("RPC: rpciod running checking dispatch\n");
                rpciod_tcp_dispatcher();
 
@@ -917,7 +915,6 @@ rpciod(void *ptr)
                        dprintk("RPC: switch to rpciod\n");
                        rounds = 0;
                }
-               restore_flags(oldflags);
        }
 
        dprintk("RPC: rpciod shutdown commences\n");