Commit 5fec1cd9 authored by Linus Torvalds's avatar Linus Torvalds

Import 2.0.20

parent 63038f25
...@@ -1559,6 +1559,7 @@ S: Germany ...@@ -1559,6 +1559,7 @@ S: Germany
N: Leonard N. Zubkoff N: Leonard N. Zubkoff
E: lnz@dandelion.com E: lnz@dandelion.com
W: http://www.dandelion.com/Linux/
D: BusLogic SCSI driver D: BusLogic SCSI driver
D: Miscellaneous kernel fixes D: Miscellaneous kernel fixes
S: 3078 Sulphur Spring Court S: 3078 Sulphur Spring Court
......
...@@ -3,6 +3,14 @@ ...@@ -3,6 +3,14 @@
# This version of the Linux kernel configuration help texts # This version of the Linux kernel configuration help texts
# corresponds to the kernel versions 2.0.x. # corresponds to the kernel versions 2.0.x.
# #
# International versions available on the WWW:
# - http://www.eis.or.jp/muse/kikutani/Configure.help-1.2.x.euc
# is a Japanese translation of a previous version of this file,
# written by kikutani@eis.or.jp.
# - http://nevod.perm.su/service/linux/doc/kernel/Configure.help
# is a Russian translation of this file, maintained by
# kaf@linux.nevod.perm.su.
#
# Information about what a kernel is, what it does, how to patch and # Information about what a kernel is, what it does, how to patch and
# compile it and much more is contained in the Kernel-HOWTO, available # compile it and much more is contained in the Kernel-HOWTO, available
# via ftp (user: anonymous) from sunsite.unc.edu in the directory # via ftp (user: anonymous) from sunsite.unc.edu in the directory
...@@ -202,22 +210,23 @@ CONFIG_BLK_DEV_CMD640 ...@@ -202,22 +210,23 @@ CONFIG_BLK_DEV_CMD640
"SiS" chipset. Unfortunately, it has a number of rather nasty "SiS" chipset. Unfortunately, it has a number of rather nasty
design flaws that can cause severe data corruption under many common design flaws that can cause severe data corruption under many common
conditions. Say Y here to include code which tries to automatically conditions. Say Y here to include code which tries to automatically
detect and correct the problems under Linux. detect and correct the problems under Linux. This option also
This option also enables access to the secondary IDE ports in some enables access to the secondary IDE ports in some CMD640 based
CMD640 based systems. This driver will work automatically in PCI systems. This driver will work automatically in PCI based systems
based systems (most new systems have PCI slots). But if your system (most new systems have PCI slots). But if your system uses VESA
uses VESA local bus (VLB) instead of PCI, you must also supply a local bus (VLB) instead of PCI, you must also supply a kernel boot
kernel boot parameter to enable the CMD640 bugfix/support: parameter to enable the CMD640 bugfix/support: "ide0=cmd640_vlb" The
"ide0=cmd640_vlb" The CMD640 chip is also used on add-in cards by CMD640 chip is also used on add-in cards by Acculogic, and on the
Acculogic, and on the "CSA-6400E PCI to IDE controller" that some "CSA-6400E PCI to IDE controller" that some people have. For
people have. If unsure, say Y. details, read Documentation/ide.txt. If unsure, say Y.
CMD640 enhanced support CMD640 enhanced support
CONFIG_BLK_DEV_CMD640_ENHANCED CONFIG_BLK_DEV_CMD640_ENHANCED
This option includes support for setting/autotuning PIO modes This option includes support for setting/autotuning PIO modes and
and prefetch on CMD640 IDE interfaces. If you have a CMD640 IDE prefetch on CMD640 IDE interfaces. For details, read
interface and your BIOS does not already do this for you, then say Y Documentation/ide.txt. If you have a CMD640 IDE interface and your
here. Otherwise say N. BIOS does not already do this for you, then say Y here. Otherwise
say N.
RZ1000 chipset bugfix/support RZ1000 chipset bugfix/support
CONFIG_BLK_DEV_RZ1000 CONFIG_BLK_DEV_RZ1000
...@@ -267,12 +276,13 @@ CONFIG_BLK_DEV_UMC8672 ...@@ -267,12 +276,13 @@ CONFIG_BLK_DEV_UMC8672
of the UMC-8672, and permits faster I/O speeds to be set as well. of the UMC-8672, and permits faster I/O speeds to be set as well.
See the Documentation/ide.txt and umc8672.c files for more info. See the Documentation/ide.txt and umc8672.c files for more info.
ALI M1439/M1445 support ALI M14xx support
CONFIG_BLK_DEV_ALI14XX CONFIG_BLK_DEV_ALI14XX
This driver is enabled at runtime using the "ide0=ali14xx" kernel This driver is enabled at runtime using the "ide0=ali14xx" kernel
boot parameter. It enables support for the secondary IDE interface boot parameter. It enables support for the secondary IDE interface
of the chipset, and permits faster I/O speeds to be set as well. of the ALI M1439/1443/1445/1487/1489 chipsets, and permits faster
See the Documentation/ide.txt and ali14xx.c files for more info. I/O speeds to be set as well. See the Documentation/ide.txt and
ali14xx.c files for more info.
PROMISE DC4030 support (EXPERIMENTAL) PROMISE DC4030 support (EXPERIMENTAL)
CONFIG_BLK_DEV_PROMISE CONFIG_BLK_DEV_PROMISE
...@@ -551,7 +561,7 @@ CONFIG_PCI_OPTIMIZE ...@@ -551,7 +561,7 @@ CONFIG_PCI_OPTIMIZE
certain BIOSes if your computer uses a PCI bus system. This is certain BIOSes if your computer uses a PCI bus system. This is
recommended; say Y. recommended; say Y.
Intel 430FX (Triton) chipset DMA support Intel 82371 PIIX (Triton I/II) DMA support
CONFIG_BLK_DEV_TRITON CONFIG_BLK_DEV_TRITON
If your PCI system uses an IDE harddrive (as opposed to SCSI, say) If your PCI system uses an IDE harddrive (as opposed to SCSI, say)
and includes the Intel 430FX PCI Triton chipset, you will want to and includes the Intel 430FX PCI Triton chipset, you will want to
...@@ -804,11 +814,11 @@ IP: multicasting ...@@ -804,11 +814,11 @@ IP: multicasting
CONFIG_IP_MULTICAST CONFIG_IP_MULTICAST
This is code for addressing several networked computers at once, This is code for addressing several networked computers at once,
enlarging your kernel by about 2 kB. If you are using gated, the enlarging your kernel by about 2 kB. If you are using gated, the
daemon that updates your computer's routing tables, and are using daemon that updates your computer's routing tables, you will need to
RIP2 or OSPF you will need to have this option compiled in. You also have this option compiled in. You also need multicasting if you
need multicasting if you intend to participate in the MBONE, a high intend to participate in the MBONE, a high bandwidth network on top
bandwidth network on top of the internet which carries audio and of the internet which carries audio and video broadcasts. More
video broadcasts. More information about the MBONE is on the WWW at information about the MBONE is on the WWW at
http://www.best.com/~prince/techinfo/mbone.html (to browse the WWW, http://www.best.com/~prince/techinfo/mbone.html (to browse the WWW,
you need to have access to a machine on the Internet that has one of you need to have access to a machine on the Internet that has one of
the programs lynx, netscape or Mosaic). Information about the the programs lynx, netscape or Mosaic). Information about the
...@@ -1233,16 +1243,19 @@ CONFIG_BLK_DEV_SR ...@@ -1233,16 +1243,19 @@ CONFIG_BLK_DEV_SR
SCSI generic support SCSI generic support
CONFIG_CHR_DEV_SG CONFIG_CHR_DEV_SG
If you want to use SCSI scanners, synthesizers or CD-writers or just If you want to use SCSI scanners, synthesizers or CD-writers or just
about anything having "SCSI" in its name other than disks, CDROMs or about anything having "SCSI" in its name other than harddisks,
tapes, say Y here. Those won't be supported by the kernel directly, CDROMs or tapes, say Y here. Those won't be supported by the kernel
so you need some additional software which knows how to talk to directly, so you need some additional software which knows how to
these things using the SCSI protocol. Chances are that you'll have talk to these devices using the SCSI protocol. For CD-writers, you
to write that software yourself, so have a look at the SCSI-HOWTO would need the program cdwrite, available via ftp (user: anonymous)
and at the SCSI-Programming-HOWTO, both available via ftp (user: from sunsite.unc.edu:/pub/Linux/utils/disk-management; for other
anonymous) in sunsite.unc.edu:/pub/Linux/docs/HOWTO. If you want to devices, it's possible that you'll have to write the driver software
compile this as a module ( = code which can be inserted in and yourself, so have a look at the SCSI-HOWTO and at the
removed from the running kernel whenever you want), say M here and SCSI-Programming-HOWTO, both available via ftp (user: anonymous) in
read Documentation/modules.txt and Documentation/scsi.txt. sunsite.unc.edu:/pub/Linux/docs/HOWTO. 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 here and read
Documentation/modules.txt and Documentation/scsi.txt.
Probe all LUNs on each SCSI device Probe all LUNs on each SCSI device
CONFIG_SCSI_MULTI_LUN CONFIG_SCSI_MULTI_LUN
...@@ -1354,9 +1367,9 @@ EATA-PIO (old DPT PM2001, PM2012A) support ...@@ -1354,9 +1367,9 @@ EATA-PIO (old DPT PM2001, PM2012A) support
CONFIG_SCSI_EATA_PIO CONFIG_SCSI_EATA_PIO
This driver supports all EATA-PIO protocol compliant SCSI Host This driver supports all EATA-PIO protocol compliant SCSI Host
Adaptors like the DPT PM2001 and the PM2012A. EATA-DMA compliant Adaptors like the DPT PM2001 and the PM2012A. EATA-DMA compliant
HBAs can also use this driver but are discouraged from doing so, host adaptors could also use this driver but are discouraged from
since this driver only supports harddisks and lacks numerous doing so, since this driver only supports harddisks and lacks
features. You might want to have a look at the SCSI-HOWTO, numerous features. You might want to have a look at the SCSI-HOWTO,
available via ftp (user: anonymous) at available via ftp (user: anonymous) at
sunsite.unc.edu:/pub/Linux/docs/HOWTO. If you want to compile this sunsite.unc.edu:/pub/Linux/docs/HOWTO. If you want to compile this
as a module ( = code which can be inserted in and removed from the as a module ( = code which can be inserted in and removed from the
...@@ -1482,10 +1495,10 @@ CONFIG_SCSI_NCR53C8XX_IOMAPPED ...@@ -1482,10 +1495,10 @@ CONFIG_SCSI_NCR53C8XX_IOMAPPED
not allow targets to disconnect not allow targets to disconnect
CONFIG_SCSI_NCR53C8XX_NO_DISCONNECT CONFIG_SCSI_NCR53C8XX_NO_DISCONNECT
This option is only provided for safety if you suspect some scsi This option is only provided for safety if you suspect some scsi
device of yours to not support properly this feature. In that case, device of yours to not support properly the target-disconnect
you would say Y here. In general however, to not allow targets to feature. In that case, you would say Y here. In general however, to
disconnect is not reasonable if there is more than 1 device on a not allow targets to disconnect is not reasonable if there is more
scsi bus. The normal answer therefore is N. than 1 device on a scsi bus. The normal answer therefore is N.
enable tagged command queuing enable tagged command queuing
CONFIG_SCSI_NCR53C8XX_TAGGED_QUEUE CONFIG_SCSI_NCR53C8XX_TAGGED_QUEUE
...@@ -1497,8 +1510,8 @@ CONFIG_SCSI_NCR53C8XX_TAGGED_QUEUE ...@@ -1497,8 +1510,8 @@ CONFIG_SCSI_NCR53C8XX_TAGGED_QUEUE
asks the driver to use up to 4 concurrent tagged commands for target asks the driver to use up to 4 concurrent tagged commands for target
2 of controller 0. 2 of controller 0.
See the file drivers/scsi/README.ncr53c8xx for more information. See the file drivers/scsi/README.ncr53c8xx for more information.
WARNING! tagged queue support requires to allow targets to WARNING! If you say Y here, then you have to say N to "not allow
disconnect (see above). targets to disconnect", above.
The safe answer therefore is N. The safe answer therefore is N.
The normal answer therefore is Y. The normal answer therefore is Y.
...@@ -1933,9 +1946,9 @@ CONFIG_DLCI ...@@ -1933,9 +1946,9 @@ CONFIG_DLCI
low-cost way to connect to a remote internet access provider or to low-cost way to connect to a remote internet access provider or to
form a private wide area network. The one physical line from your form a private wide area network. The one physical line from your
box to the local "switch" (i.e. the entry point to the frame relay box to the local "switch" (i.e. the entry point to the frame relay
network) can carry several logical point-to-point connections to network, usually at the phone company) can carry several logical
other computers connected to the frame relay network. For a general point-to-point connections to other computers connected to the frame
explanation of the protocol, check out relay network. For a general explanation of the protocol, check out
http://frame-relay.indiana.edu/4000/4000index.html on the WWW. (To http://frame-relay.indiana.edu/4000/4000index.html on the WWW. (To
browse the WWW, you need to have access to a machine on the Internet browse the WWW, you need to have access to a machine on the Internet
that has one of the programs lynx, netscape or Mosaic.) To use frame that has one of the programs lynx, netscape or Mosaic.) To use frame
...@@ -2724,7 +2737,7 @@ CONFIG_OPTCD ...@@ -2724,7 +2737,7 @@ CONFIG_OPTCD
This is the driver for the 'DOLPHIN' drive with a 34-pin Sony This is the driver for the 'DOLPHIN' drive with a 34-pin Sony
compatible interface. It also works with the Lasermate CR328A. If compatible interface. It also works with the Lasermate CR328A. If
you have one of those, say Y. This driver does not work for the you have one of those, say Y. This driver does not work for the
Optics Storage 8001 drive; use the IDE-ATAPI CDROM driver for this Optics Storage 8001 drive; use the IDE-ATAPI CDROM driver for that
one. one.
Sanyo CDR-H94A CDROM support Sanyo CDR-H94A CDROM support
...@@ -2764,19 +2777,22 @@ Quota support ...@@ -2764,19 +2777,22 @@ Quota support
CONFIG_QUOTA CONFIG_QUOTA
If you say Y here, you will be able to set per user limits for disk If you say Y here, you will be able to set per user limits for disk
usage (also called diskquotas). Currently, it works only for the usage (also called diskquotas). Currently, it works only for the
ext2 filesystem; you need the software available via ftp (user: ext2 filesystem. You need additional software in order to use quota
anonymous) in support; check the file Documentation/Changes for that. Probably the
ftp.funet.fi:/pub/Linux/PEOPLE/Linus/subsystems/quota/ in order to quota support is only useful for multi user systems. If unsure, say
use it. Probably this is only useful for multi user systems. If N.
unsure, say N.
Mandatory lock support Mandatory lock support
CONFIG_LOCK_MANDATORY CONFIG_LOCK_MANDATORY
Mandatory locking is used by some System 5 style database File locking is a system designed to prevent that several processes
applications. To use this option safely you must have newer NFS write to the same file at the same time, causing data
daemons, new samba, new netatalk, new mars-nwe and other file corruption. Mandatory file locking is more secure than the usual
servers. At the time of writing none of these are available. Unless algorithm and is used by some Unix System 5 style database
you need this feature say N. applications. For details, read Documentation/mandatory.txt. To use
this option safely you must have newer NFS daemons, new samba, new
netatalk, new mars-nwe and other file servers. At the time of
writing none of these are available. So it's safest to say N here
unless you really know that you need this feature.
Minix fs support Minix fs support
CONFIG_MINIX_FS CONFIG_MINIX_FS
...@@ -2986,9 +3002,11 @@ ISO9660 cdrom filesystem support ...@@ -2986,9 +3002,11 @@ ISO9660 cdrom filesystem support
CONFIG_ISO9660_FS CONFIG_ISO9660_FS
This is the standard filesystem used on CDROMs. It was previously This is the standard filesystem used on CDROMs. It was previously
known as "High Sierra Filesystem" and is called "hsfs" on other Unix known as "High Sierra Filesystem" and is called "hsfs" on other Unix
systems. If you have a CDROM drive and want to do more with it than systems. The so-called Rock-Ridge extensions which allow for long
just listen to audio CDs and watch its LEDs, say Y (and read the Unix filenames are also supported by this driver. If you have a
CDROM-HOWTO, available via ftp (user: anonymous) from CDROM drive and want to do more with it than just listen to audio
CDs and watch its LEDs, say Y (and read the CDROM-HOWTO, available
via ftp (user: anonymous) from
sunsite.unc.edu:/pub/Linux/docs/HOWTO), thereby enlarging your sunsite.unc.edu:/pub/Linux/docs/HOWTO), thereby enlarging your
kernel by about 27 kB; otherwise say N. If you want to compile this 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 as a module ( = code which can be inserted in and removed from the
...@@ -3355,18 +3373,21 @@ CONFIG_SUN_ZS ...@@ -3355,18 +3373,21 @@ CONFIG_SUN_ZS
Advanced Power Management Advanced Power Management
CONFIG_APM CONFIG_APM
APM is a BIOS specification for saving power using several different APM is a BIOS specification for saving power using several different
techniques. This is mostly useful for battery powered laptops with APM techniques. This is mostly useful for battery powered laptops with
compliant BIOSes. Specifically, the time will be reset after a USER APM compliant BIOSes. Specifically, the time will be reset after a
RESUME operation, the /proc/apm device will provide battery status USER RESUME operation, the /proc/apm device will provide battery
information, and user-space programs will receive notification of APM status information, and user-space programs will receive
"events" (e.g., battery status change). This driver does not spin down notification of APM "events" (e.g., battery status change). This
disk drives (see hdparm(8) for that); and it doesn't turn off driver does not spin down disk drives (see hdparm(8) for that); and
VESA-compliant "green" monitors. This driver does not support the TI it doesn't turn off VESA-compliant "green" monitors. This driver
4000M TravelMate and the ACER 486/DX4/75 because they don't have does not support the TI 4000M TravelMate and the ACER 486/DX4/75
compliant BIOSes. Many "green" desktop machines also don't have because they don't have compliant BIOSes. Many "green" desktop
compliant BIOSes, and this driver will cause those machines to panic machines also don't have compliant BIOSes, and this driver will
during the boot phase (typically, these machines are using a data cause those machines to panic during the boot phase (typically,
segment of 0040, which is reserved for the Linux kernel). If you don't these machines are using a data segment of 0040, which is reserved
for the Linux kernel). If you get random kernel OOPSes that don't
seem to be related to anything and you have a motherboard with APM
support, try disabling/enabling this option. Generally, if you don't
have a battery in your machine, there isn't much point in using this have a battery in your machine, there isn't much point in using this
driver. driver.
...@@ -3478,12 +3499,16 @@ CONFIG_SOFT_WATCHDOG ...@@ -3478,12 +3499,16 @@ CONFIG_SOFT_WATCHDOG
Berkshire Products PC Watchdog card Berkshire Products PC Watchdog card
CONFIG_PCWATCHDOG CONFIG_PCWATCHDOG
This is the driver for the Berkshire Products PC Watchdog card. This card This is the driver for the Berkshire Products PC Watchdog card.
simply watches your kernel to make sure it doesn't freeze, and if it does, This card simply watches your kernel to make sure it doesn't freeze,
it resets your computer after a certain amount of time. This driver is and if it does, it resets your computer after a certain amount of
like the WDT501 driver but for different hardware. The PC watchdog cards time. This driver is like the WDT501 driver but for different
can be ordered from http://www.berkprod.com. Some example rc.local files hardware. The PC watchdog cards can be ordered from
are available from ftp.bitgate.com. http://www.berkprod.com. Some example rc.local files are available
from ftp.bitgate.com. This driver is also available as a module ( =
code which can be inserted in and removed from the running kernel
whenever you want). If you want to compile it as a module, say M
here and read Documentation/modules.txt. Most people will say N.
Enhanced Real Time Clock Support Enhanced Real Time Clock Support
CONFIG_RTC CONFIG_RTC
...@@ -3839,7 +3864,7 @@ CONFIG_AP1000 ...@@ -3839,7 +3864,7 @@ CONFIG_AP1000
# LocalWords: Bernd informatik rwth aachen uae affs multihosting bytecode java # LocalWords: Bernd informatik rwth aachen uae affs multihosting bytecode java
# LocalWords: applets applet JDK ncsa cabi SNI Alphatronix readme LANs scarab # LocalWords: applets applet JDK ncsa cabi SNI Alphatronix readme LANs scarab
# LocalWords: winsock RNIS caltech OSPF honour Honouring Mbit Localtalk DEFRAG # LocalWords: winsock RNIS caltech OSPF honour Honouring Mbit Localtalk DEFRAG
# LocalWords: Camtec Berkshire # LocalWords: localtalk download Packetwin Baycom baycom interwork ascii JNT
# LocalWords: Camtec proxying indyramp defragment defragmented UDP FAS FASXX # LocalWords: Camtec proxying indyramp defragment defragmented UDP FAS FASXX
# LocalWords: FastSCSI SIO FDC qlogicfas QLogic qlogicisp setbaycom ife ee LJ # LocalWords: FastSCSI SIO FDC qlogicfas QLogic qlogicisp setbaycom ife ee LJ
# LocalWords: ethz ch Travelmates ProAudioSpectrum ProAudio SoundMan SB SBPro # LocalWords: ethz ch Travelmates ProAudioSpectrum ProAudio SoundMan SB SBPro
...@@ -3849,4 +3874,5 @@ CONFIG_AP1000 ...@@ -3849,4 +3874,5 @@ CONFIG_AP1000
# LocalWords: Soundscape SSCAPE TRIX MediaTrix PnP Maui dsp midixx EIA getty # LocalWords: Soundscape SSCAPE TRIX MediaTrix PnP Maui dsp midixx EIA getty
# LocalWords: mgetty sendfax gert greenie muc lowlevel Lasermate LanManager io # LocalWords: mgetty sendfax gert greenie muc lowlevel Lasermate LanManager io
# LocalWords: OOPSes trackball binghamton mobileip ncr IOMAPPED settags ns ser # LocalWords: OOPSes trackball binghamton mobileip ncr IOMAPPED settags ns ser
# LocalWords: setsync NEGO MPARITY # LocalWords: setsync NEGO MPARITY autotuning prefetch PIIX cdwrite utils rc
# LocalWords: PCWATCHDOG berkprod bitgate
VERSION = 2 VERSION = 2
PATCHLEVEL = 0 PATCHLEVEL = 0
SUBLEVEL = 19 SUBLEVEL = 20
ARCH = i386 ARCH = i386
......
...@@ -3,6 +3,8 @@ ...@@ -3,6 +3,8 @@
#include <linux/user.h> #include <linux/user.h>
#include <linux/elfcore.h> #include <linux/elfcore.h>
#include <asm/semaphore.h>
extern void dump_thread(struct pt_regs *, struct user *); extern void dump_thread(struct pt_regs *, struct user *);
extern int dump_fpu(elf_fpregset_t *); extern int dump_fpu(elf_fpregset_t *);
...@@ -11,6 +13,8 @@ static struct symbol_table arch_symbol_table = { ...@@ -11,6 +13,8 @@ static struct symbol_table arch_symbol_table = {
/* platform dependent support */ /* platform dependent support */
X(dump_thread), X(dump_thread),
X(dump_fpu), X(dump_fpu),
XNOVERS(down_failed),
XNOVERS(up_wakeup),
#ifdef __SMP__ #ifdef __SMP__
X(apic_reg), /* Needed internally for the I386 inlines */ X(apic_reg), /* Needed internally for the I386 inlines */
X(cpu_data), X(cpu_data),
......
...@@ -12,18 +12,14 @@ ...@@ -12,18 +12,14 @@
* to increment the number of waiters on the semaphore, * to increment the number of waiters on the semaphore,
* call "__down()", and then eventually return to try again. * call "__down()", and then eventually return to try again.
*/ */
.globl down_failed ENTRY(down_failed)
ALIGN
down_failed:
pushl %eax pushl %eax
pushl %ecx pushl %ecx
call SYMBOL_NAME(__down) call SYMBOL_NAME(__down)
popl %ecx popl %ecx
ret ret
.globl up_wakeup ENTRY(up_wakeup)
ALIGN
up_wakeup:
pushl %eax pushl %eax
pushl %ecx pushl %ecx
call SYMBOL_NAME(__up) call SYMBOL_NAME(__up)
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
* interfaces. Requires 'dlcicfg' program to create usable * interfaces. Requires 'dlcicfg' program to create usable
* interfaces, the initial one, 'dlci' is for IOCTL use only. * interfaces, the initial one, 'dlci' is for IOCTL use only.
* *
* Version: @(#)dlci.c 0.25 13 May 1996 * Version: @(#)dlci.c 0.30 12 Sep 1996
* *
* Author: Mike McLagan <mike.mclagan@linux.org> * Author: Mike McLagan <mike.mclagan@linux.org>
* *
...@@ -13,14 +13,13 @@ ...@@ -13,14 +13,13 @@
* *
* 0.15 Mike Mclagan Packet freeing, bug in kmalloc call * 0.15 Mike Mclagan Packet freeing, bug in kmalloc call
* DLCI_RET handling * DLCI_RET handling
*
* 0.20 Mike McLagan More conservative on which packets * 0.20 Mike McLagan More conservative on which packets
* are returned for retry and whic are * are returned for retry and whic are
* are dropped. If DLCI_RET_DROP is * are dropped. If DLCI_RET_DROP is
* returned from the FRAD, the packet is * returned from the FRAD, the packet is
* sent back to Linux for re-transmission * sent back to Linux for re-transmission
*
* 0.25 Mike McLagan Converted to use SIOC IOCTL calls * 0.25 Mike McLagan Converted to use SIOC IOCTL calls
* 0.30 Jim Freeman Fixed to allow IPX traffic
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License * modify it under the terms of the GNU General Public License
...@@ -54,7 +53,7 @@ ...@@ -54,7 +53,7 @@
#include <net/sock.h> #include <net/sock.h>
static const char *devname = "dlci"; static const char *devname = "dlci";
static const char *version = "DLCI driver v0.25, 13 May 1996, mike.mclagan@linux.org"; static const char *version = "DLCI driver v0.30, 12 Sep 1996, mike.mclagan@linux.org";
static struct device *open_dev[CONFIG_DLCI_COUNT]; static struct device *open_dev[CONFIG_DLCI_COUNT];
...@@ -143,7 +142,7 @@ static int dlci_header(struct sk_buff *skb, struct device *dev, ...@@ -143,7 +142,7 @@ static int dlci_header(struct sk_buff *skb, struct device *dev,
hdr.pad = FRAD_P_PADDING; hdr.pad = FRAD_P_PADDING;
hdr.NLPID = FRAD_P_SNAP; hdr.NLPID = FRAD_P_SNAP;
memset(hdr.OUI, 0, sizeof(hdr.OUI)); memset(hdr.OUI, 0, sizeof(hdr.OUI));
hdr.PID = type; hdr.PID = htons(type);
hlen = sizeof(hdr); hlen = sizeof(hdr);
break; break;
} }
...@@ -194,7 +193,8 @@ static void dlci_receive(struct sk_buff *skb, struct device *dev) ...@@ -194,7 +193,8 @@ static void dlci_receive(struct sk_buff *skb, struct device *dev)
/* at this point, it's an EtherType frame */ /* at this point, it's an EtherType frame */
header = sizeof(struct frhdr); header = sizeof(struct frhdr);
skb->protocol = htons(hdr->PID); /* Already in network order ! */
skb->protocol = hdr->PID;
process = 1; process = 1;
break; break;
...@@ -620,12 +620,6 @@ int dlci_init(struct device *dev) ...@@ -620,12 +620,6 @@ int dlci_init(struct device *dev)
for (i = 0; i < DEV_NUMBUFFS; i++) for (i = 0; i < DEV_NUMBUFFS; i++)
skb_queue_head_init(&dev->buffs[i]); skb_queue_head_init(&dev->buffs[i]);
if (strcmp(dev->name, devname) == 0)
{
dev->type = 0xFFFF;
dev->family = AF_UNSPEC;
}
return(0); return(0);
} }
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
* *
* Global definitions for the Frame relay interface. * Global definitions for the Frame relay interface.
* *
* Version: @(#)sdla.c 0.25 14 May 1996 * Version: @(#)sdla.c 0.30 12 Sep 1996
* *
* Credits: Sangoma Technologies, for the use of 2 cards for an extended * Credits: Sangoma Technologies, for the use of 2 cards for an extended
* period of time. * period of time.
...@@ -23,7 +23,8 @@ ...@@ -23,7 +23,8 @@
* non DLCI devices. * non DLCI devices.
* 0.25 Mike McLagan Fixed problem with rejecting packets * 0.25 Mike McLagan Fixed problem with rejecting packets
* from non DLCI devices. * from non DLCI devices.
* * 0.30 Mike McLagan Fixed kernel panic when used with modified
* ifconfig
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License * modify it under the terms of the GNU General Public License
...@@ -58,7 +59,7 @@ ...@@ -58,7 +59,7 @@
#include <linux/sdla.h> #include <linux/sdla.h>
static const char* version = "SDLA driver v0.25, 14 May 1996, mike.mclagan@linux.org"; static const char* version = "SDLA driver v0.30, 12 Sep 1996, mike.mclagan@linux.org";
static const char* devname = "sdla"; static const char* devname = "sdla";
...@@ -424,6 +425,7 @@ static int sdla_cmd(struct device *dev, int cmd, short dlci, short flags, ...@@ -424,6 +425,7 @@ static int sdla_cmd(struct device *dev, int cmd, short dlci, short flags,
window = flp->type == SDLA_S508 ? SDLA_508_CMD_BUF : SDLA_502_CMD_BUF; window = flp->type == SDLA_S508 ? SDLA_508_CMD_BUF : SDLA_502_CMD_BUF;
cmd_buf = (struct sdla_cmd *)(dev->mem_start + (window & SDLA_ADDR_MASK)); cmd_buf = (struct sdla_cmd *)(dev->mem_start + (window & SDLA_ADDR_MASK));
ret = 0; ret = 0;
len = 0;
jiffs = jiffies + HZ; /* 1 second is plenty */ jiffs = jiffies + HZ; /* 1 second is plenty */
save_flags(pflags); save_flags(pflags);
cli(); cli();
...@@ -603,7 +605,7 @@ int sdla_deassoc(struct device *slave, struct device *master) ...@@ -603,7 +605,7 @@ int sdla_deassoc(struct device *slave, struct device *master)
int sdla_dlci_conf(struct device *slave, struct device *master, int get) int sdla_dlci_conf(struct device *slave, struct device *master, int get)
{ {
struct frad_local *flp; struct frad_local *flp;
struct frad_local *dlp; struct dlci_local *dlp;
int i; int i;
short len, ret; short len, ret;
......
...@@ -51,11 +51,30 @@ extern __inline__ void atomic_sub(atomic_t i, atomic_t * v) ...@@ -51,11 +51,30 @@ extern __inline__ void atomic_sub(atomic_t i, atomic_t * v)
} }
/* /*
* Same as above, but return true if we counted down to zero * Same as above, but return the result value
*/ */
extern __inline__ int atomic_sub_and_test(atomic_t i, atomic_t * v) extern __inline__ long atomic_add_return(atomic_t i, atomic_t * v)
{ {
unsigned long temp, result; long temp, result;
__asm__ __volatile__(
"\n1:\t"
"ldl_l %0,%1\n\t"
"addl %0,%3,%0\n\t"
"bis %0,%0,%2\n\t"
"stl_c %0,%1\n\t"
"beq %0,1b\n"
"2:"
:"=&r" (temp),
"=m" (__atomic_fool_gcc(v)),
"=&r" (result)
:"Ir" (i),
"m" (__atomic_fool_gcc(v)));
return result;
}
extern __inline__ long atomic_sub_return(atomic_t i, atomic_t * v)
{
long temp, result;
__asm__ __volatile__( __asm__ __volatile__(
"\n1:\t" "\n1:\t"
"ldl_l %0,%1\n\t" "ldl_l %0,%1\n\t"
...@@ -69,11 +88,16 @@ extern __inline__ int atomic_sub_and_test(atomic_t i, atomic_t * v) ...@@ -69,11 +88,16 @@ extern __inline__ int atomic_sub_and_test(atomic_t i, atomic_t * v)
"=&r" (result) "=&r" (result)
:"Ir" (i), :"Ir" (i),
"m" (__atomic_fool_gcc(v))); "m" (__atomic_fool_gcc(v)));
return result==0; return result;
} }
#define atomic_dec_return(v) atomic_sub_return(1,(v))
#define atomic_inc_return(v) atomic_add_return(1,(v))
#define atomic_sub_and_test(i,v) (atomic_sub_return((i), (v)) == 0)
#define atomic_dec_and_test(v) (atomic_sub_return(1, (v)) == 0)
#define atomic_inc(v) atomic_add(1,(v)) #define atomic_inc(v) atomic_add(1,(v))
#define atomic_dec(v) atomic_sub(1,(v)) #define atomic_dec(v) atomic_sub(1,(v))
#define atomic_dec_and_test(v) atomic_sub_and_test(1,(v))
#endif #endif
...@@ -59,7 +59,7 @@ struct thread_struct { ...@@ -59,7 +59,7 @@ struct thread_struct {
0 \ 0 \
} }
#define alloc_kernel_stack() get_free_page(GFP_KERNEL) #define alloc_kernel_stack() __get_free_page(GFP_KERNEL)
#define free_kernel_stack(page) free_page((page)) #define free_kernel_stack(page) free_page((page))
#include <asm/ptrace.h> #include <asm/ptrace.h>
......
...@@ -7,9 +7,11 @@ ...@@ -7,9 +7,11 @@
* (C) Copyright 1996 Linus Torvalds * (C) Copyright 1996 Linus Torvalds
*/ */
#include <asm/atomic.h>
struct semaphore { struct semaphore {
int count; atomic_t count;
int waiting; atomic_t waiting;
struct wait_queue * wait; struct wait_queue * wait;
}; };
...@@ -17,26 +19,24 @@ struct semaphore { ...@@ -17,26 +19,24 @@ struct semaphore {
#define MUTEX_LOCKED ((struct semaphore) { 0, 0, NULL }) #define MUTEX_LOCKED ((struct semaphore) { 0, 0, NULL })
extern void __down(struct semaphore * sem); extern void __down(struct semaphore * sem);
extern void wake_up(struct wait_queue ** p); extern void __up(struct semaphore * sem);
/* /*
* These are not yet interrupt-safe: should use ldl_l/stl_c here.. * This isn't quite as clever as the x86 side, but the gp register
* * makes things a bit more complicated on the alpha..
* See include/asm-i386/semaphore.h on how to do this correctly
* without any jumps or wakeups taken for the no-contention cases.
*/ */
extern inline void down(struct semaphore * sem) extern inline void down(struct semaphore * sem)
{ {
sem->count--; for (;;) {
/* "down_failed" */ if (atomic_dec_return(&sem->count) >= 0)
if (sem->count < 0) break;
__down(sem); __down(sem);
}
} }
extern inline void up(struct semaphore * sem) extern inline void up(struct semaphore * sem)
{ {
sem->count++; if (atomic_inc_return(&sem->count) <= 0)
/* "up_wakeup" */
__up(sem); __up(sem);
} }
......
...@@ -131,7 +131,7 @@ struct thread_struct { ...@@ -131,7 +131,7 @@ struct thread_struct {
NULL, 0, 0, 0, 0 /* vm86_info */ \ NULL, 0, 0, 0, 0 /* vm86_info */ \
} }
#define alloc_kernel_stack() get_free_page(GFP_KERNEL) #define alloc_kernel_stack() __get_free_page(GFP_KERNEL)
#define free_kernel_stack(page) free_page((page)) #define free_kernel_stack(page) free_page((page))
static inline void start_thread(struct pt_regs * regs, unsigned long eip, unsigned long esp) static inline void start_thread(struct pt_regs * regs, unsigned long eip, unsigned long esp)
......
#ifndef _I386_SEMAPHORE_H #ifndef _I386_SEMAPHORE_H
#define _I386_SEMAPHORE_H #define _I386_SEMAPHORE_H
#include <linux/linkage.h>
/* /*
* SMP- and interrupt-safe semaphores.. * SMP- and interrupt-safe semaphores..
* *
...@@ -16,8 +18,11 @@ struct semaphore { ...@@ -16,8 +18,11 @@ struct semaphore {
#define MUTEX ((struct semaphore) { 1, 0, NULL }) #define MUTEX ((struct semaphore) { 1, 0, NULL })
#define MUTEX_LOCKED ((struct semaphore) { 0, 0, NULL }) #define MUTEX_LOCKED ((struct semaphore) { 0, 0, NULL })
asmlinkage void down_failed(void /* special register calling convention */);
asmlinkage void up_wakeup(void /* special register calling convention */);
extern void __down(struct semaphore * sem); extern void __down(struct semaphore * sem);
extern void wake_up(struct wait_queue ** p); extern void __up(struct semaphore * sem);
/* /*
* This is ugly, but we want the default case to fall through. * This is ugly, but we want the default case to fall through.
...@@ -34,7 +39,7 @@ extern inline void down(struct semaphore * sem) ...@@ -34,7 +39,7 @@ extern inline void down(struct semaphore * sem)
"lock ; " "lock ; "
#endif #endif
"decl %0\n\t" "decl %0\n\t"
"js down_failed" "js " SYMBOL_NAME_STR(down_failed)
:/* no outputs */ :/* no outputs */
:"m" (sem->count), "c" (sem) :"m" (sem->count), "c" (sem)
:"ax","dx","memory"); :"ax","dx","memory");
...@@ -55,8 +60,8 @@ extern inline void up(struct semaphore * sem) ...@@ -55,8 +60,8 @@ extern inline void up(struct semaphore * sem)
"lock ; " "lock ; "
#endif #endif
"incl %0\n\t" "incl %0\n\t"
"jle up_wakeup\n" "jle " SYMBOL_NAME_STR(up_wakeup)
"1:" "\n1:"
:/* no outputs */ :/* no outputs */
:"m" (sem->count), "c" (sem) :"m" (sem->count), "c" (sem)
:"ax", "dx", "memory"); :"ax", "dx", "memory");
......
...@@ -333,6 +333,7 @@ struct symbol_table symbol_table = { ...@@ -333,6 +333,7 @@ struct symbol_table symbol_table = {
X(insert_inode_hash), X(insert_inode_hash),
X(event), X(event),
X(__down), X(__down),
X(__up),
X(securelevel), X(securelevel),
/* all busmice */ /* all busmice */
X(add_mouse_randomness), X(add_mouse_randomness),
......
...@@ -43,7 +43,7 @@ ...@@ -43,7 +43,7 @@
int securelevel = 0; /* system security level */ int securelevel = 0; /* system security level */
long tick = 1000000 / HZ; /* timer interrupt period */ long tick = (1000000 + HZ/2) / HZ; /* timer interrupt period */
volatile struct timeval xtime; /* The current time */ volatile struct timeval xtime; /* The current time */
int tickadj = 500/HZ; /* microsecs */ int tickadj = 500/HZ; /* microsecs */
...@@ -64,7 +64,7 @@ long time_precision = 1; /* clock precision (us) */ ...@@ -64,7 +64,7 @@ long time_precision = 1; /* clock precision (us) */
long time_maxerror = MAXPHASE; /* maximum error (us) */ long time_maxerror = MAXPHASE; /* maximum error (us) */
long time_esterror = MAXPHASE; /* estimated error (us) */ long time_esterror = MAXPHASE; /* estimated error (us) */
long time_phase = 0; /* phase offset (scaled us) */ long time_phase = 0; /* phase offset (scaled us) */
long time_freq = 0; /* frequency offset (scaled ppm) */ long time_freq = ((1000000 + HZ/2) % HZ - HZ/2) << SHIFT_USEC; /* frequency offset (scaled ppm) */
long time_adj = 0; /* tick adjust (scaled 1 / HZ) */ long time_adj = 0; /* tick adjust (scaled 1 / HZ) */
long time_reftime = 0; /* time at last adjustment (s) */ long time_reftime = 0; /* time at last adjustment (s) */
...@@ -515,7 +515,7 @@ static inline void normalize_semaphore(struct semaphore *sem) ...@@ -515,7 +515,7 @@ static inline void normalize_semaphore(struct semaphore *sem)
* critical part is the inline stuff in <asm/semaphore.h> * critical part is the inline stuff in <asm/semaphore.h>
* where we want to avoid any extra jumps and calls. * where we want to avoid any extra jumps and calls.
*/ */
inline void __up(struct semaphore *sem) void __up(struct semaphore *sem)
{ {
normalize_semaphore(sem); normalize_semaphore(sem);
wake_up(&sem->wait); wake_up(&sem->wait);
......
...@@ -108,8 +108,13 @@ static inline int try_to_swap_out(struct task_struct * tsk, struct vm_area_struc ...@@ -108,8 +108,13 @@ static inline int try_to_swap_out(struct task_struct * tsk, struct vm_area_struc
} else { } else {
if (page_map->count != 1) if (page_map->count != 1)
return 0; return 0;
if (!(entry = get_swap_page())) if (!(entry = get_swap_page())) {
return 0; /* Aieee!!! Out of swap space! */ /* Aieee!!! Out of swap space! */
int retval = -1;
if (nr_swapfiles == 0)
retval = 0;
return retval;
}
vma->vm_mm->rss--; vma->vm_mm->rss--;
flush_cache_page(vma, address); flush_cache_page(vma, address);
set_pte(page_table, __pte(entry)); set_pte(page_table, __pte(entry));
...@@ -312,6 +317,9 @@ static int swap_out(unsigned int priority, int dma, int wait) ...@@ -312,6 +317,9 @@ static int swap_out(unsigned int priority, int dma, int wait)
if (!--p->swap_cnt) if (!--p->swap_cnt)
swap_task++; swap_task++;
switch (swap_out_process(p, dma, wait)) { switch (swap_out_process(p, dma, wait)) {
/* out of swap space? */
case -1:
return 0;
case 0: case 0:
if (p->swap_cnt) if (p->swap_cnt)
swap_task++; swap_task++;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment