Commit a5287abe authored by Linus Torvalds's avatar Linus Torvalds
Browse files

v2.4.5.2 -> v2.4.5.3

  - remember to increment the version number
  - Chris Mason: reiserfs mark_journal_new and bh leak fix
  - Richard Gooch: devfs update
  - Alexander Viro: further FS cleanup (superblock list)
  - David Woodhouse: MTD update
  - Kai Germaschewski: ISDN update (stanford checker fixes etc)
  - Rich Baum: gcc-3.0 warning fixes
  - Jeff Garzik: network driver updates
  - Geert Uytterhoeven: m68k fbdev logo merge glitch fix
  - Andrea Arcangeli: fix signal return path
  - David Miller: Sparc updates
  - Johannes Erdfelt: USB update
  - Carsten Otte, Andries Brouwer: don't clear blk_size unconditionally
  on partition check
  - Martin Frey: alpha Sable irq fix
  - Paul Mackerras: PPC softirq update
  - Patrick Mochel: PCI power management infrastructure
  - Robert Siemer: miroSOUND driver update
  - Neil Brown: knfsd updates, including ability to export ReiserFS filesystems
  - Trond Myklebust: NFS readdir fixup, don't update atime on client
  - Andrew Morton: truncate_inode_pages speedup
  - Paul Menage: make inode quota count all inodes..
parent 4fdbe71c
......@@ -2710,9 +2710,7 @@ S: USA
N: Marcelo W. Tosatti
E: marcelo@conectiva.com.br
W: http://bazar.conectiva.com.br/~marcelo/
D: Miscellaneous kernel hacker
D: Cyclom 2X driver, drbd hacker
D: linuxconf apache & proftpd module maintainer
D: Miscellaneous kernel hacker (mostly VM/MM work)
S: Conectiva S.A.
S: R. Tocantins, 89 - Cristo Rei
S: 80050-430 - Curitiba - Paran
......
This diff is collapsed.
......@@ -1613,3 +1613,35 @@ Work sponsored by SGI
- Updated README from master HTML file
- Ported to kernel 2.4.0-test3-pre4 (which had devfs-patch-v174)
===============================================================================
Changes for patch v177
- Updated README from master HTML file
- Documentation cleanups
- Ensure <devfs_generate_path> terminates string for root entry
Thanks to Tim Jansen <tim@tjansen.de>
- Exported <devfs_get_name> to modules
- Make <devfs_mk_symlink> send events to devfsd
- Cleaned up option processing in <devfs_setup>
- Fixed bugs in handling symlinks: could leak or cause Oops
- Cleaned up directory handling by separating fops
Thanks to Alexander Viro <viro@math.psu.edu>
===============================================================================
Changes for patch v178
- Fixed handling of inverted options in <devfs_setup>
===============================================================================
Changes for patch v179
- Adjusted <try_modload> to account for <devfs_generate_path> fix
===============================================================================
Changes for patch v180
- Fixed !CONFIG_DEVFS_FS stub declaration of <devfs_get_info>
......@@ -3,7 +3,7 @@ Devfs (Device File System) FAQ
Linux Devfs (Device File System) FAQ
Richard Gooch
3-JUL-2000
26-APR-2001
-----------------------------------------------------------------------------
......@@ -18,7 +18,7 @@ find out more about it at:
http://www.atnf.csiro.au/~rgooch/linux/
NEWFLASH: The official 2.3.46 kernel has
NEWSFLASH: The official 2.3.46 kernel has
included the devfs patch. Future patches will be released which
build on this. These patches are rolled into Linus' tree from time to
time.
......@@ -54,6 +54,7 @@ All the way with Devfs
Other Issues
Kernel Naming Scheme
Devfsd Naming Scheme
Old Compatibility Names
SCSI Host Probing Issues
......@@ -99,6 +100,7 @@ Also, because the devfs namespace exists without any devfs mounts, you
can easily mount the root filesystem by referring to an entry in the
devfs namespace.
The cost of devfs is a small increase in kernel code size and memory
usage. About 7 pages of code (some of that in __init sections) and 72
bytes for each entry in the namespace. A modest system has only a
......@@ -157,6 +159,7 @@ usually find a MAKEDEV programme which creates all these (hundreds!)
of nodes. This means that changes in the kernel must be reflected by
changes in the MAKEDEV programme, or else the system administrator
creates device nodes by hand.
The basic problem is that there are two separate databases of
major and minor numbers. One is in the kernel and one is in /dev (or
in a MAKEDEV programme, if you want to look at it that way). This is
......@@ -192,6 +195,7 @@ because disc is cheap these days. Embedded systems would care about
256 kBytes of /dev inodes, but you could argue that embedded systems
would have hand-tuned /dev directories. I've had to do just that on my
embedded systems, but I would rather just leave it to devfs.
Another issue is the time taken to lookup an inode when first
referenced. Not only does this take time in scanning through a list in
memory, but also the seek times to read the inodes off disc.
......@@ -212,7 +216,7 @@ also provides this information). Furthermore, such a system would
likely be implemented in an ad-hoc fashion, as different drivers will
provide their information in different ways.
Devfs is much cleaner, because it (natually) has a uniform mechanism
Devfs is much cleaner, because it (naturally) has a uniform mechanism
to provide this information: the device nodes themselves!
......@@ -253,7 +257,7 @@ Alternatively, you can use hashing to speed up the search.
But why do that search at all if you don't have to? Once again, it
seems pointless.
Note thate devfs doesn't use the major&minor system. For devfs
Note that devfs doesn't use the major&minor system. For devfs
entries, the connection is done when you lookup the /dev entry. When
devfs_register() is called, an internal table is appended which has
the entry name and the file_operations. If the dentry cache doesn't
......@@ -274,9 +278,9 @@ driver, in a scalable way.
/dev as a system administration tool
Right now /dev contains a list of conceivable devices, most of which I
don't have. A devfs would only show those devices available on my
system. This means that listing /dev would be a handy way of checking
what devices were available.
don't have. Devfs only shows those devices available on my
system. This means that listing /dev is a handy way of checking what
devices are available.
Major&minor size
......@@ -289,9 +293,9 @@ disc arrays. With devfs an arbitrary pointer can be associated with
each device entry, which can be used to give an effective 32 bit
device identifier (i.e. that's like having a 32 bit minor
number). Since this is private to the kernel, there are no C library
compatibility which you would have with increasing major and minor
number sizes. See the section on "Allocation of Device Numbers" for
details on maintaining compatibility with userspace.
compatibility issues which you would have with increasing major and
minor number sizes. See the section on "Allocation of Device Numbers"
for details on maintaining compatibility with userspace.
Solving this requires a kernel change.
......@@ -375,9 +379,9 @@ possible to send a message (either synchronously or asynchronously) to
devfsd on any event, such as registration/unregistration of device
entries, opening and closing devices, looking up inodes, scanning
directories and more. This has many possibilities. Some of these are
already implemented.
already implemented. See:
See:
http://www.atnf.csiro.au/~rgooch/linux/
Device entry registration events can be used by devfsd to change
......@@ -414,6 +418,7 @@ Inode lookup events can be used to authenticate module autoload
requests. Instead of using kmod directly, the event is sent to
devfsd which can implement an arbitrary authentication before loading
the module itself.
Inode lookup events can also be used to construct arbitrary
namespaces, without having to resort to populating devfs with symlinks
to devices that don't exist.
......@@ -447,10 +452,10 @@ openings.
Who else does it?
FreeBSD has a devfs implementation. Solaris 2 has a pseudo-devfs
(something akin to scsidev but for all devices, with some unspecified
kernel support). BeOS, Plan9 and QNX also have it. SGI's IRIX 6.4 and
above also have a device filesystem.
FreeBSD has a devfs implementation. Solaris and AIX each have a
pseudo-devfs (something akin to scsidev but for all devices, with some
unspecified kernel support). BeOS, Plan9 and QNX also have it. SGI's
IRIX 6.4 and above also have a device filesystem.
While we shouldn't just automatically do something because others do
it, we should not ignore the work of others either. FreeBSD has a lot
......@@ -613,6 +618,21 @@ network (a password is still required, though). However, since there
are problems with dealing with symlinks, I'm suspicious of the level
of security offered in any case.
A better solution is to install util-linux-2.10.h or later, which
fixes a bug with ttyname handling in the login programme. Then append
the following lines to your /etc/securetty file:
vc/1
vc/2
vc/3
vc/4
vc/5
vc/6
vc/7
vc/8
This will not weaken security.
XFree86
While not essential, it's probably a good idea to upgrade to XFree86
4.0, as patches went in to make it more devfs-friendly. If you don't,
......@@ -627,17 +647,25 @@ startx.
# file classes -- these are regular expressions
-<console>=tty[0-9][0-9]* :[0-9]\.[0-9] :[0-9]
+<console>=tty[0-9][0-9]* [0-9][0-9]* :[0-9]\.[0-9] :[0-9]
+<console>=tty[0-9][0-9]* vc/[0-9][0-9]* :[0-9]\.[0-9] :[0-9]
# device classes -- these are shell-style globs
<floppy>=/dev/fd[0-1]*
If the patch does not apply, then change the line:
<console>=tty[0-9][0-9]* :[0-9]\.[0-9] :[0-9]
with:
<console>=tty[0-9][0-9]* vc/[0-9][0-9]* :[0-9]\.[0-9] :[0-9]
Disable devpts
I've had a report of devpts mounted on /dev/pts not working
correctly. Since devfs will also manage /dev/pts, there is no
need to mount devpts as well. You should either edit your
/etc/fstab so devpts is not mounted, or disable devfs from
/etc/fstab so devpts is not mounted, or disable devpts from
your kernel configuration.
Unsupported drivers
......@@ -664,15 +692,23 @@ described above.
The Kernel
Finally, you need to make sure devfs is compiled into your
kernel. Set CONFIG_DEVFS_FS=y and recompile your kernel. Next, you
need to make sure devfs is mounted. The best solution is to pass
devfs=mount at the kernel boot command line. You can edit
/etc/lilo.conf and add the line:
append = "devfs=mount"
This will make the kernel mount devfs at boot time onto /dev.
kernel. Set CONFIG_DEVFS_FS=y and CONFIG_DEVFS_MOUNT=y and recompile
your kernel. At boot, devfs will be mounted onto /dev.
If you encounter problems booting (for example if you forgot a
configuration step), you can pass devfs=nomount at the kernel
boot command line. This will prevent the kernel from mounting devfs at
boot time onto /dev.
In general, a kernel built with CONFIG_DEVFS_FS=y but without mounting
devfs onto /dev is completely safe, and requires no
configuration changes. One exception to take note of is when
LABEL= directives are used in /etc/fstab. In this
case you will be unable to boot properly. This is because the
mount(8) programme uses /proc/partitions as part of
the volume label search process, and the device names it finds are not
available, because setting CONFIG_DEVFS_FS=y changes the names in
/proc/partitions, irrespective of whether devfs is mounted.
Now you've finished all the steps required. You're now ready to boot
your shiny new kernel. Enjoy.
......@@ -701,7 +737,7 @@ A much better approach is to use devfsd to save and restore
permissions. It may be configured to record changes in permissions and
will save them in a database (in fact a directory tree), and restore
these upon boot. This is an efficient method and results in immediate
saving of current permissions (unlike the tar approach, which save
saving of current permissions (unlike the tar approach, which saves
permissions at some unspecified future time).
The default configuration file supplied with devfsd has config entries
......@@ -745,8 +781,11 @@ devfsd /dev
add the following lines to your /etc/devfsd.conf file:
REGISTER ^pt[sy]/.* IGNORE
CHANGE ^pt[sy]/.* IGNORE
REGISTER .* COPY /dev-state/$devname $devpath
CHANGE .* COPY $devpath /dev-state/$devname
CREATE .* COPY $devpath /dev-state/$devname
......@@ -758,6 +797,17 @@ reboot.
Permissions database stored in normal directory
If you are using an older kernel which doesn't support VFS binding,
then you won't be able to have the permissions database in a
mounted-over /dev. However, you can still use a regular
directory to store the database. The sample /etc/devfsd.conf
file above may still be used. You will need to create the
/dev-state directory prior to installing devfsd. If you have
old permissions in /dev, then just copy the device nodes over
to the new directory.
Dealing with drivers without devfs support
......@@ -910,13 +960,48 @@ As of devfsd-v1.3.10, a generic /etc/modules.devfs
configuration file is installed, which is used by the MODLOAD
action. This should be sufficient for most configurations. If you
require further configuration, edit your /etc/modules.conf
file.
file. The way module autoloading work with devfs is:
a process attempts to lookup a device node (e.g. /dev/fred)
if that device node does not exist, the full pathname is passed to
devfsd as a string
devfsd will pass the string to the modprobe programme (provided the
configuration line shown above is present), and specifies that
/etc/modules.devfs is the configuration file
/etc/modules.devfs includes /etc/modules.conf to
access local configurations
modprobe will search it's configuration files, looking for an alias
that translates the pathname into a module name
the translated pathname is then used to load the module.
If you wanted a lookup of /dev/fred to load the
mymod module, you would require the following configuration
line in /etc/modules.conf:
alias /dev/fred mymod
The /etc/modules.devfs configuration file provides many such
aliases for standard device names. If you look closely at this file,
you will note that some modules require multiple alias configuration
lines. This is required to support module autoloading for old and new
device names.
Mounting root off a devfs device
If you wish to mount root off a devfs device when you pass the
"devfs=only" boot option, then you need to pass in the "root="
option to the kernel when booting. If you use LILO, then you must have
this in lilo.conf:
"devfs=only" boot option, then you need to pass in the
"root=<device>" option to the kernel when booting. If you use
LILO, then you must have this in lilo.conf:
append = "root=<device>"
......@@ -926,12 +1011,12 @@ do):
root = <device>
then LILO will determine the device number of and will write
that device number into a special place in the kernel image before
starting the kernel, and the kernel will use that device number to
mount the root filesystem. So, using the "append" variety ensures that
LILO passes the root filesystem device as a string, which devfs can
then use.
then LILO will determine the device number of <device> and will
write that device number into a special place in the kernel image
before starting the kernel, and the kernel will use that device number
to mount the root filesystem. So, using the "append" variety ensures
that LILO passes the root filesystem device as a string, which devfs
can then use.
Note that this isn't an issue if you don't pass "devfs=only".
......@@ -1067,7 +1152,8 @@ The tty devices now appear as:
-------- -------- -----------
/dev/tts/{0,1,...} /dev/ttyS{0,1,...} Serial ports
/dev/cua/{0,1,...} /dev/cua{0,1,...} Call out devices
/dev/vc/{0,1,...} /dev/tty{1...63} Virtual consoles
/dev/vc/0 /dev/tty Current virtual console
/dev/vc/{1,2,...} /dev/tty{1...63} Virtual consoles
/dev/vcc/{0,1,...} /dev/vcs{1...63} Virtual consoles
/dev/pty/m{0,1,...} /dev/ptyp?? PTY masters
/dev/pty/s{0,1,...} /dev/ttyp?? PTY slaves
......@@ -1109,7 +1195,8 @@ the kernel-supplied namespace. In some
cases, the kernel-supplied naming scheme is quite convenient, so
devfsd does not provide another naming scheme. The convenience names
that devfsd creates are in fact the same names as the original devfs
kernel patch created (before Linus mandated the Big Name Change).
kernel patch created (before Linus mandated the Big Name
Change). These are referred to as "new compatibility entries".
In order to configure devfsd to create these convenience names, the
following lines should be placed in your /etc/devfsd.conf:
......@@ -1198,6 +1285,24 @@ All XT discs are placed under /dev/xd. The first XT disc
would appear as /dev/xd/c0t0.
Old Compatibility Names
The old compatibility names are the legacy device names, such as
/dev/hda, /dev/sda, /dev/rtc and so on.
Devfsd can be configured to create compatibility symlinks so that you
may continue to use the old names in your configuration files and so
that old applications will continue to function correctly.
In order to configure devfsd to create these legacy names, the
following lines should be placed in your /etc/devfsd.conf:
REGISTER .* MKOLDCOMPAT
UNREGISTER .* RMOLDCOMPAT
This will cause devfsd to create (and destroy) symbolic links which
point to the kernel-supplied names.
SCSI Host Probing Issues
Devfs allows you to identify SCSI discs based in part on SCSI host
......@@ -1220,14 +1325,15 @@ of drivers used in the /proc filesystem. For example:
means that devices connected to
- first aha1542 controller - will be c0b#t#u#
- first parallel port ZIP - will be c1b#t#u#
- second aha1542 controller - will be c2b#t#u#
- first NCR53C7xx controller - will be c4b#t#u#
- any extra controller - will be c5b#t#u#, c6b#t#u#, etc
- first aha1542 controller - will be /dev/scsi/host0/bus#/target#/lun#
- first parallel port ZIP - will be /dev/scsi/host1/bus#/target#/lun#
- second aha1542 controller - will be /dev/scsi/host2/bus#/target#/lun#
- first NCR53C7xx controller - will be /dev/scsi/host4/bus#/target#/lun#
- any extra controller - will be /dev/scsi/host5/bus#/target#/lun#,
/dev/scsi/host6/bus#/target#/lun#, etc
- if any of above controllers will not be found - the reserved names will
not be used by any other device.
- c3b#t#u# names will never be used
- /dev/scsi/host3/bus#/target#/lun# names will never be used
You can use ',' instead of ':' as the separator character if you
......@@ -1343,6 +1449,7 @@ Questions and Answers
Making things work
Alternatives to devfs
What I don't like about devfs
......@@ -1518,6 +1625,54 @@ proposal above
What I don't like about devfs
Here are some common complaints about devfs, and some suggestions and
solutions that may make it more palatable for you. I can't please
everybody, but I do try :-)
I hate the naming scheme
First, remember that no naming scheme will please everybody. You hate
the scheme, others love it. Who's to say who's right and who's wrong?
Ultimately, the person who writes the code gets to choose, and what
exists now is a combination of the the choices made by the
devfs author and the
kernel maintainer (Linus).
However, not all is lost. If you want to create your own naming
scheme, it is a simple matter to write a standalone script, hack
devfsd, or write a script called by devfsd. You can create whatever
naming scheme you like.
Further, if you want to remove all traces of the devfs naming scheme
from /dev, you can mount devfs elsewhere (say
/devfs) and populate /dev with links into
/devfs. This population can be automated using devfsd if you
wish.
You can even use the VFS binding facility to make the links, rather
than using symbolic links. This way, you don't even have to see the
"destination" of these symbolic links.
Devfs puts policy into the kernel
There's already policy in the kernel. Device numbers are in fact
policy (why should the kernel dictate what device numbers I use?).
Face it, some policy has to be in the kernel. The real difference
between device names as policy and device numbers as policy is that
no one will use device numbers directly, because device
numbers are devoid of meaning to humans and are ugly. At least with
the devfs device names, (even though you can add your own naming
scheme) some people will use the devfs-supplied names directly. This
offends some people :-)
Devfs is bloatware
This is not even remotely true. As shown above,
both code and data size are quite modest.
-----------------------------------------------------------------------------
......@@ -1552,4 +1707,12 @@ http://johannes.erdfelt.com/hotswap.txt.
Johannes has promised a HTML version will follow.
I presented an invited
paper
at the
2nd Annual Storage Management Workshop held in Miamia, Florida,
U.S.A. in October 2000.
......@@ -17,7 +17,7 @@ they are gone forever. Keeping this in mind and with a grain of salt this
document can be still interesting and very helpful.
[ File edited 17.01.1999 - Riccardo Facchetti ]
[ Edited miroSOUND section 17.09.2000 - Robert Siemer ]
[ Edited miroSOUND section 19.04.2001 - Robert Siemer ]
OSS/Free version 3.8 release notes
----------------------------------
......@@ -1327,7 +1327,7 @@ miroSOUND
---------
The miroSOUND PCM1-pro, PCM12 and PCM20 radio has been used
successfully. This card is based on the MAD16, OPL4, and CS4231A chips
successfully. These cards are based on the MAD16, OPL4, and CS4231A chips
and everything said in the section about MAD16 cards applies here,
too. The only major difference between the PCMxx and other MAD16 cards
is that instead of the mixer in the CS4231 codec a separate mixer
......@@ -1337,8 +1337,8 @@ protocol that is implemented in a separate lowlevel driver. Make sure
you compile this ACI driver together with the normal MAD16 support
when you use a miroSOUND PCMxx card. The ACI mixer is controlled by
/dev/mixer and the CS4231 mixer by /dev/mixer1 (depends on load
time). Only in special cases you want to change something on the CS4231
mixer.
time). Only in special cases you want to change something regularly on
the CS4231 mixer.
The miroSOUND PCM12 and PCM20 radio is capable of full duplex
operation (simultaneous PCM replay and recording), which allows you to
......@@ -1354,10 +1354,9 @@ ACI. This radio tuner is supported by the ACI driver together with the
miropcm20.o module. Also the 7-band equalizer is integrated
(limited by the OSS-design). Developement has started and maybe
finished for the RDS decoder on this card, too. You will be able to
read radio text, the program service name, program type and
read RadioText, the Programme Service name, Programme TYpe and
others. Even the v4l radio module benefits from it with a refined
strength value. See aci.c, radio-miropcm20.c and rds-miropcm20.c for
more details.
strength value. See aci.[ch] and miropcm20*.[ch] for more details.
The following configuration parameters have worked fine for the PCM12
in Markus Kuhn's system, many other configurations might work, too:
......
......@@ -712,16 +712,11 @@ P: Jaroslav Kysela
M: perex@suse.cz
S: Maintained
ISDN SUBSYSTEM (general)
P: Fritz Elfert
M: fritz@isdn4linux.de
L: isdn4linux@listserv.isdn4linux.de
W: http://www.isdn4linux.de
S: Maintained
ISDN SUBSYSTEM (card drivers)
ISDN SUBSYSTEM
P: Karsten Keil
M: kkeil@suse.de
P: Kai Germaschewski
M: kai.germaschewski@gmx.de
L: isdn4linux@listserv.isdn4linux.de
W: http://www.isdn4linux.de
S: Maintained
......
VERSION = 2
PATCHLEVEL = 4
SUBLEVEL = 6
EXTRAVERSION =-pre1
EXTRAVERSION =-pre3
KERNELRELEASE=$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)
......@@ -87,7 +87,8 @@ export MODLIB
CPPFLAGS := -D__KERNEL__ -I$(HPATH)
CFLAGS := $(CPPFLAGS) -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -fno-strict-aliasing
CFLAGS := $(CPPFLAGS) -Wall -Wstrict-prototypes -Wno-trigraphs -O2 \
-fomit-frame-pointer -fno-strict-aliasing
AFLAGS := -D__ASSEMBLY__ $(CPPFLAGS)
#
......
......@@ -44,7 +44,6 @@
extern int do_pipe(int *);
extern asmlinkage int sys_swapon(const char *specialfile, int swap_flags);
extern asmlinkage unsigned long sys_brk(unsigned long);
/*
......
......@@ -96,7 +96,7 @@ static struct
static inline void
sable_update_irq_hw(unsigned long bit, unsigned long mask)
{
int port = 0x536;
int port = 0x537;
if (bit >= 16) {
port = 0x53d;
......@@ -121,7 +121,7 @@ sable_ack_irq_hw(unsigned long bit)
} else if (bit >= 8) {
port = 0x53a;
val1 = 0xE0 | (bit - 8);
val2 = 0xE0 | 2;
val2 = 0xE0 | 3;
} else {
port = 0x536;
val1 = 0xE0 | (bit - 0);
......
......@@ -102,6 +102,64 @@ CONFIG_PM=y
#
# CONFIG_MTD is not set
#
# RAM/ROM/Flash chip drivers
#
# CONFIG_MTD_CFI is not set
# CONFIG_MTD_CFI_INTELEXT is not set
# CONFIG_MTD_CFI_AMDSTD is not set
# CONFIG_MTD_AMDSTD is not set
# CONFIG_MTD_SHARP is not set
# CONFIG_MTD_RAM is not set
# CONFIG_MTD_ROM is not set
# CONFIG_MTD_JEDEC is not set
#
# Mapping drivers for chip access
#
# CONFIG_MTD_PHYSMAP is not set
# CONFIG_MTD_SUN_UFLASH is not set
# CONFIG_MTD_NORA is not set
# CONFIG_MTD_PNC2000 is not set
# CONFIG_MTD_RPXLITE is not set
# CONFIG_MTD_SC520CDP is not set
# CONFIG_MTD_NETSC520 is not set
# CONFIG_MTD_SBC_GXX is not set
# CONFIG_MTD_ELAN_104NC is not set
# CONFIG_MTD_SA1100 is not set
# CONFIG_MTD_SA1100_REDBOOT_PARTITIONS is not set
# CONFIG_MTD_SA1100_BOOTLDR_PARTITIONS is not set
# CONFIG_MTD_DC21285 is not set
# CONFIG_MTD_IQ80310 is not set
# CONFIG_MTD_DBOX2 is not set
# CONFIG_MTD_CSTM_MIPS_IXX is not set
# CONFIG_MTD_CFI_FLAGADM is not set
# CONFIG_MTD_MIXMEM is not set
# CONFIG_MTD_OCTAGON is not set
# CONFIG_MTD_VMAX is not set
# CONFIG_MTD_OCELOT is not set
#
# Self-contained MTD device drivers
#
# CONFIG_MTD_PMC551 is not set
# CONFIG_MTD_SLRAM is not set
# CONFIG_MTD_MTDRAM is not set
#
# Disk-On-Chip Device Drivers
#
# CONFIG_MTD_DOC1000 is not set
# CONFIG_MTD_DOC2000 is not set
# CONFIG_MTD_DOC2001 is not set
# CONFIG_MTD_DOCPROBE is not set
#
# NAND Flash Device Drivers
#
# CONFIG_MTD_NAND is not set
# CONFIG_MTD_NAND_SPIA is not set
#
# Parallel port support
#
......
......@@ -246,16 +246,9 @@ badsys:
jmp ret_from_sys_call
ALIGN
ret_from_exception:
cli
cmpl $0,need_resched(%ebx)
jne reschedule
cmpl $0,sigpending(%ebx)
jne signal_return
jmp restore_all
ENTRY(ret_from_intr)
GET_CURRENT(%ebx)
ret_from_exception:
movl EFLAGS(%esp),%eax # mix EFLAGS and CS
movb CS(%esp),%al
testl $(VM_MASK | 3),%eax # return to VM86 mode or non-supervisor?
......@@ -313,14 +306,16 @@ ENTRY(device_not_available)
pushl $-1 # mark this as an int
SAVE_ALL
GET_CURRENT(%ebx)
pushl $ret_from_exception
movl %cr0,%eax
testl $0x4,%eax # EM (math emulation bit)
je SYMBOL_NAME(math_state_restore)
jne device_not_available_emulate
call SYMBOL_NAME(math_state_restore)
jmp ret_from_exception
device_not_available_emulate:
pushl $0 # temporary storage for ORIG_EIP
call SYMBOL_NAME(math_emulate)
addl $4,%esp
ret
jmp ret_from_exception
ENTRY(debug)
pushl $0
......
......@@ -1543,6 +1543,7 @@ static void fyl2xp1(FPU_REG *st0_ptr, u_char st0_tag)
EXCEPTION(EX_INTERNAL | 0x116);
return;
#endif /* PARANOID */
break;
}
}
else if ( (st0_tag == TAG_Valid) || (st0_tag == TW_Denormal) )
......
/*
* BK Id: SCCS/s.entry.S 1.12 05/21/01 11:49:59 paulus
* BK Id: SCCS/s.entry.S 1.15 06/09/01 22:16:38 paulus
*/
/*
* PowerPC version
......@@ -310,25 +310,7 @@ ret_from_intercept:
beq restore
.globl ret_from_except
ret_from_except:
lwz r5,_MSR(r1)
andi. r5,r5,MSR_EE
beq 2f
lis r4,irq_stat@ha /* &softirq_active for cpu 0 */
addi r4,r4,irq_stat@l
#ifdef CONFIG_SMP
/* get processor # */
lwz r3,PROCESSOR(r2)
slwi r3,r3,LG_CACHE_LINE_SIZE
add r4,r4,r3
#endif /* CONFIG_SMP */
lwz r5,0(r4) /* softirq_active */
lwz r4,4(r4) /* softirq_mask */
and. r5,r5,r4
beq+ 2f
bl do_softirq
.globl do_bottom_half_ret
do_bottom_half_ret:
2: lwz r3,_MSR(r1) /* Returning to user mode? */
lwz r3,_MSR(r1) /* Returning to user mode? */
andi. r3,r3,MSR_PR
beq+ do_signal_ret /* if so, check need_resched and signals */
lwz r3,NEED_RESCHED(r2)
......
/*
* BK Id: SCCS/s.ppc_ksyms.c 1.31 05/18/01 08:18:10 patch
* BK Id: SCCS/s.ppc_ksyms.c 1.34 06/09/01 22:38:13 paulus
*/
#include <linux/config.h>
#include <linux/module.h>
......@@ -357,7 +357,6 @@ EXPORT_SYMBOL(cpm_free_handler);
#endif /* CONFIG_8xx */
EXPORT_SYMBOL(ret_to_user_hook);
EXPORT_SYMBOL(do_softirq);
EXPORT_SYMBOL(next_mmu_context);
EXPORT_SYMBOL(set_context);
EXPORT_SYMBOL(mmu_context_overflow);
......
/*
* BK Id: SCCS/s.xmon.c 1.9 05/17/01 18:14:24 cort
* BK Id: SCCS/s.xmon.c 1.12 06/09/01 22:18:05 paulus
*/
/*
* Routines providing a simple monitor for use on the PowerMac.
......@@ -661,8 +661,7 @@ backtrace(struct pt_regs *excp)
unsigned stack[2];
struct pt_regs regs;
extern char ret_from_intercept, ret_from_syscall_1, ret_from_syscall_2;
extern char do_bottom_half_ret, do_signal_ret;
extern char ret_from_except;
extern char do_signal_ret, ret_from_except;
printf("backtrace:\n");
......@@ -680,7 +679,6 @@ backtrace(struct pt_regs *excp)
|| stack[1] == (unsigned) &ret_from_except
|| stack[1] == (unsigned) &ret_from_syscall_1
|| stack[1] == (unsigned) &ret_from_syscall_2
|| stack[1] == (unsigned) &do_bottom_half_ret
|| stack[1] == (unsigned) &do_signal_ret) {
if (mread(sp+16, &regs, sizeof(regs)) != sizeof(regs))
break;
......
/* $Id: rtrap.S,v 1.55 2000/08/05 10:48:40 davem Exp $
/* $Id: rtrap.S,v 1.56 2001/06/05 09:56:06 davem Exp $
* rtrap.S: Return from Sparc trap low-level code.
*
* Copyright (C) 1995 David S. Miller (davem@caip.rutgers.edu)
......@@ -52,9 +52,8 @@ ret_trap_entry:
sll %l3, 5, %l3
sethi %hi(C_LABEL(irq_stat)), %l4 ! &softirq_active
add %l4, %l3, %l4
ld [%l4 + %lo(C_LABEL(irq_stat))], %g5 ! softirq_active
ld [%l4 + %lo(C_LABEL(irq_stat) + 4)], %g4 ! softirq_mask
andcc %g4, %g5, %g0
ld [%l4 + %lo(C_LABEL(irq_stat))], %g5 ! softirq_pending
cmp %g5, 0
be C_LABEL(ret_trap_lockless_ipi)
nop
call C_LABEL(do_softirq)
......
......@@ -9,6 +9,7 @@
#include <linux/threads.h>
#include <linux/init.h>
#include <linux/ioport.h>
#include <linux/string.h>
#include <asm/page.h>
#include <asm/oplib.h>
......
/* $Id: ebus.c,v 1.61 2001/04/24 05:13:25 davem Exp $
/* $Id: ebus.c,v 1.63 2001/06/08 02:27:16 davem Exp $
* ebus.c: PCI to EBus bridge device.
*
* Copyright (C) 1997 Eddie C. Dost (ecd@skynet.be)
......@@ -25,7 +25,6 @@ struct linux_ebus *ebus_chain = 0;
#ifdef CONFIG_SUN_AUXIO
extern void auxio_probe(void);
#endif
extern void rs_init(void);
static inline void *ebus_alloc(size_t size)
{
......@@ -269,8 +268,6 @@ void __init fill_ebus_device(int node, struct linux_ebus_device *dev)
printk("]");
}
extern void clock_probe(void);
extern void power_init(void);
void __init ebus_init(void)
{
......@@ -395,10 +392,7 @@ void __init ebus_init(void)
++num_ebus;
}
rs_init();
#ifdef CONFIG_SUN_AUXIO
auxio_probe();
#endif
clock_probe();
power_init();
}
/* $Id: pci.c,v 1.29 2001/05/15 08:54:30 davem Exp $
/* $Id: pci.c,v 1.32 2001/06/08 06:25:41 davem Exp $
* pci.c: UltraSparc PCI controller support.
*
* Copyright (C) 1997, 1998, 1999 David S. Miller (davem@redhat.com)
......@@ -177,6 +177,10 @@ static void __init pci_reorder_devs(void)
}
}
extern void rs_init(void);
extern void clock_probe(void);
extern void power_init(void);
void __init pcibios_init(void)
{
pci_controller_probe();
......@@ -190,6 +194,9 @@ void __init pcibios_init(void)
isa_init();
ebus_init();
rs_init();
clock_probe();
power_init();
}
struct pci_fixup pcibios_fixups[] = {
......@@ -198,6 +205,66 @@ struct pci_fixup pcibios_fixups[] = {
void pcibios_fixup_bus(struct pci_bus *pbus)
{
struct pci_pbm_info *pbm = pbus->sysdata;
/* Generic PCI bus probing sets these to point at
* &io{port,mem}_resouce which is wrong for us.
*/
pbus->resource[0] = &pbm->io_space;
pbus->resource[1] = &pbm->mem_space;
}
/* NOTE: This can get called before we've fixed up pdev->sysdata. */
int pci_claim_resource(struct pci_dev *pdev, int resource)
{
struct pci_pbm_info *pbm = pci_bus2pbm[pdev->bus->number];
struct resource *res = &pdev->resource[resource];
struct resource *root;
if (!pbm)
return -EINVAL;
if (res->flags & IORESOURCE_IO)
root = &pbm->io_space;
else
root = &pbm->mem_space;
pbm->parent->resource_adjust(pdev, res, root);
return request_resource(root, res);
}
int pci_assign_resource(struct pci_dev *pdev, int resource)
{
struct pcidev_cookie *pcp = pdev->sysdata;
struct pci_pbm_info *pbm = pcp->pbm;
struct resource *res = &pdev->resource[resource];
struct resource *root;
unsigned long min, max, size, align;
int err;
if (res->flags & IORESOURCE_IO) {
root = &pbm->io_space;
min = root->start + 0x400UL;
max = root->end;
} else {
root = &pbm->mem_space;
min = root->start;
max = min + 0x80000000UL;
}
size = res->end - res->start;
align = size + 1;
err = allocate_resource(root, res, size + 1, min, max, align, NULL, NULL);
if (err < 0) {
printk("PCI: Failed to allocate resource %d for %s\n",
resource, pdev->name);
} else {
pbm->parent->base_address_update(pdev, resource);
}
return err;
}
void pcibios_update_resource(struct pci_dev *pdev, struct resource *res1,
......
/* $Id: pci_common.c,v 1.18 2001/05/18 23:06:35 davem Exp $
/* $Id: pci_common.c,v 1.21 2001/06/08 06:57:19 davem Exp $
* pci_common.c: PCI controller common support.
*
* Copyright (C) 1999 David S. Miller (davem@redhat.com)
......@@ -93,12 +93,38 @@ static void pci_device_delete(struct pci_dev *pdev)
}
/* Older versions of OBP on PCI systems encode 64-bit MEM
* space assignments incorrectly, this fixes them up.
* space assignments incorrectly, this fixes them up. We also
* take the opportunity here to hide other kinds of bogus
* assignments.
*/
static void __init fixup_obp_assignments(struct pcidev_cookie *pcp)
static void __init fixup_obp_assignments(struct pci_dev *pdev,
struct pcidev_cookie *pcp)
{
int i;
if (pdev->vendor == PCI_VENDOR_ID_AL &&
(pdev->device == PCI_DEVICE_ID_AL_M7101 ||
pdev->device == PCI_DEVICE_ID_AL_M1533)) {
int i;
/* Zap all of the normal resources, they are
* meaningless and generate bogus resource collision
* messages. This is OpenBoot's ill-fated attempt to
* represent the implicit resources that these devices
* have.
*/
pcp->num_prom_assignments = 0;
for (i = 0; i < 6; i++) {
pdev->resource[i].start =
pdev->resource[i].end =
pdev->resource[i].flags = 0;
}
pdev->resource[PCI_ROM_RESOURCE].start =
pdev->resource[PCI_ROM_RESOURCE].end =
pdev->resource[PCI_ROM_RESOURCE].flags = 0;
return;
}
for (i = 0; i < pcp->num_prom_assignments; i++) {
struct linux_prom_pci_registers *ap;
int space;
......@@ -194,7 +220,7 @@ static void __init pdev_cookie_fillin(struct pci_pbm_info *pbm,
(err / sizeof(pcp->prom_assignments[0]));
}
fixup_obp_assignments(pcp);
fixup_obp_assignments(pdev, pcp);
pdev->sysdata = pcp;
}
......@@ -316,6 +342,19 @@ __init get_device_resource(struct linux_prom_pci_registers *ap,
return res;
}
static int __init pdev_resource_collisions_expected(struct pci_dev *pdev)
{
if (pdev->vendor != PCI_VENDOR_ID_SUN)
return 0;
if (pdev->device == PCI_DEVICE_ID_SUN_RIO_EBUS ||
pdev->device == PCI_DEVICE_ID_SUN_RIO_1394 ||
pdev->device == PCI_DEVICE_ID_SUN_RIO_USB)
return 1;
return 0;
}
static void __init pdev_record_assignments(struct pci_pbm_info *pbm,
struct pci_dev *pdev)
{
......@@ -374,12 +413,17 @@ static void __init pdev_record_assignments(struct pci_pbm_info *pbm,
if (request_resource(root, res) < 0) {
/* OK, there is some conflict. But this is fine
* since we'll reassign it in the fixup pass.
* Nevertheless notify the user that OBP made
* an error.
*
* We notify the user that OBP made an error if it
* is a case we don't expect.
*/
printk(KERN_ERR "PCI: Address space collision on region %ld "
"of device %s\n",
(res - &pdev->resource[0]), pdev->name);
if (!pdev_resource_collisions_expected(pdev)) {
printk(KERN_ERR "PCI: Address space collision on region %ld "
"[%016lx:%016lx] of device %s\n",
(res - &pdev->resource[0]),
res->start, res->end,
pdev->name);
}
}
}
}
......
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