WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-ppc-devel

[XenPPC] [linux-ppc-2.6] merge with linux-2.6.tip-xen.hg and building

To: xen-ppc-devel@xxxxxxxxxxxxxxxxxxx
Subject: [XenPPC] [linux-ppc-2.6] merge with linux-2.6.tip-xen.hg and building
From: Xen patchbot-linux-ppc-2.6 <patchbot-linux-ppc-2.6@xxxxxxxxxxxxxxxxxxx>
Date: Tue, 08 Aug 2006 10:19:45 +0000
Delivery-date: Tue, 08 Aug 2006 04:04:52 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-ppc-devel-request@lists.xensource.com?subject=help>
List-id: Xen PPC development <xen-ppc-devel.lists.xensource.com>
List-post: <mailto:xen-ppc-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-ppc-devel>, <mailto:xen-ppc-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-ppc-devel>, <mailto:xen-ppc-devel-request@lists.xensource.com?subject=unsubscribe>
Reply-to: xen-ppc-devel@xxxxxxxxxxxxxxxxxxx
Sender: xen-ppc-devel-bounces@xxxxxxxxxxxxxxxxxxx
# HG changeset patch
# User Jimi Xenidis <jimix@xxxxxxxxxxxxxx>
# Node ID 29fd5adfdc07e67c065ee00987317d58f6bcdd1f
# Parent  c875b3d2c5e55760b2f7a67a3dd5a248e874b78d
# Parent  d4e27553a34b2e4ec6b9e3aebc62b8f6605d7896
merge with linux-2.6.tip-xen.hg and building

diff -r c875b3d2c5e5 -r 29fd5adfdc07 CREDITS
--- a/CREDITS   Mon Aug 07 17:39:11 2006 -0400
+++ b/CREDITS   Mon Aug 07 18:15:57 2006 -0400
@@ -23,6 +23,11 @@ S: C. Negri 6, bl. D3
 S: C. Negri 6, bl. D3
 S: Iasi 6600
 S: Romania
+
+N: Mark Adler
+E: madler@xxxxxxxxxxxxxxxxxx
+W: http://alumnus.caltech.edu/~madler/
+D: zlib decompression
 
 N: Monalisa Agrawal
 E: magrawal@xxxxxxxxxxxxxxxxxx
@@ -1573,12 +1578,8 @@ S: Czech Republic
 S: Czech Republic
 
 N: Niels Kristian Bech Jensen
-E: nkbj@xxxxxxxx
-W: http://www.image.dk/~nkbj
+E: nkbj1970@xxxxxxxxxxx
 D: Miscellaneous kernel updates and fixes.
-S: Dr. Holsts Vej 34, lejl. 164
-S: DK-8230 Åbyhøj
-S: Denmark
 
 N: Michael K. Johnson
 E: johnsonm@xxxxxxxxxx
@@ -3400,10 +3401,10 @@ S: Czech Republic
 
 N: Thibaut Varene
 E: T-Bone@xxxxxxxxxxxxxxxx
-W: http://www.parisc-linux.org/
+W: http://www.parisc-linux.org/~varenet/
 P: 1024D/B7D2F063 E67C 0D43 A75E 12A5 BB1C  FA2F 1E32 C3DA B7D2 F063
 D: PA-RISC port minion, PDC and GSCPS2 drivers, debuglocks and other bits
-D: Some bits in an ARM port, S1D13XXX FB driver, random patches here and there
+D: Some ARM at91rm9200 bits, S1D13XXX FB driver, random patches here and there
 D: AD1889 sound driver
 S: Paris, France
 
diff -r c875b3d2c5e5 -r 29fd5adfdc07 Documentation/Changes
--- a/Documentation/Changes     Mon Aug 07 17:39:11 2006 -0400
+++ b/Documentation/Changes     Mon Aug 07 18:15:57 2006 -0400
@@ -181,8 +181,8 @@ Intel IA32 microcode
 --------------------
 
 A driver has been added to allow updating of Intel IA32 microcode,
-accessible as both a devfs regular file and as a normal (misc)
-character device.  If you are not using devfs you may need to:
+accessible as a normal (misc) character device.  If you are not using
+udev you may need to:
 
 mkdir /dev/cpu
 mknod /dev/cpu/microcode c 10 184
@@ -201,7 +201,9 @@ udev
 udev
 ----
 udev is a userspace application for populating /dev dynamically with
-only entries for devices actually present. udev replaces devfs.
+only entries for devices actually present.  udev replaces the basic
+functionality of devfs, while allowing persistant device naming for
+devices.
 
 FUSE
 ----
@@ -231,17 +233,12 @@ enable it to operate over diverse media 
 enable it to operate over diverse media layers.  If you use PPP,
 upgrade pppd to at least 2.4.0.
 
-If you are not using devfs, you must have the device file /dev/ppp
+If you are not using udev, you must have the device file /dev/ppp
 which can be made by:
 
 mknod /dev/ppp c 108 0
 
 as root.
-
-If you use devfsd and build ppp support as modules, you will need
-the following in your /etc/devfsd.conf file:
-
-LOOKUP PPP     MODLOAD
 
 Isdn4k-utils
 ------------
diff -r c875b3d2c5e5 -r 29fd5adfdc07 Documentation/CodingStyle
--- a/Documentation/CodingStyle Mon Aug 07 17:39:11 2006 -0400
+++ b/Documentation/CodingStyle Mon Aug 07 18:15:57 2006 -0400
@@ -155,7 +155,83 @@ See next chapter.
 See next chapter.
 
 
-               Chapter 5: Functions
+               Chapter 5: Typedefs
+
+Please don't use things like "vps_t".
+
+It's a _mistake_ to use typedef for structures and pointers. When you see a
+
+       vps_t a;
+
+in the source, what does it mean?
+
+In contrast, if it says
+
+       struct virtual_container *a;
+
+you can actually tell what "a" is.
+
+Lots of people think that typedefs "help readability". Not so. They are
+useful only for:
+
+ (a) totally opaque objects (where the typedef is actively used to _hide_
+     what the object is).
+
+     Example: "pte_t" etc. opaque objects that you can only access using
+     the proper accessor functions.
+
+     NOTE! Opaqueness and "accessor functions" are not good in themselves.
+     The reason we have them for things like pte_t etc. is that there
+     really is absolutely _zero_ portably accessible information there.
+
+ (b) Clear integer types, where the abstraction _helps_ avoid confusion
+     whether it is "int" or "long".
+
+     u8/u16/u32 are perfectly fine typedefs, although they fit into
+     category (d) better than here.
+
+     NOTE! Again - there needs to be a _reason_ for this. If something is
+     "unsigned long", then there's no reason to do
+
+       typedef unsigned long myflags_t;
+
+     but if there is a clear reason for why it under certain circumstances
+     might be an "unsigned int" and under other configurations might be
+     "unsigned long", then by all means go ahead and use a typedef.
+
+ (c) when you use sparse to literally create a _new_ type for
+     type-checking.
+
+ (d) New types which are identical to standard C99 types, in certain
+     exceptional circumstances.
+
+     Although it would only take a short amount of time for the eyes and
+     brain to become accustomed to the standard types like 'uint32_t',
+     some people object to their use anyway.
+
+     Therefore, the Linux-specific 'u8/u16/u32/u64' types and their
+     signed equivalents which are identical to standard types are
+     permitted -- although they are not mandatory in new code of your
+     own.
+
+     When editing existing code which already uses one or the other set
+     of types, you should conform to the existing choices in that code.
+
+ (e) Types safe for use in userspace.
+
+     In certain structures which are visible to userspace, we cannot
+     require C99 types and cannot use the 'u32' form above. Thus, we
+     use __u32 and similar types in all structures which are shared
+     with userspace.
+
+Maybe there are other cases too, but the rule should basically be to NEVER
+EVER use a typedef unless you can clearly match one of those rules.
+
+In general, a pointer, or a struct that has elements that can reasonably
+be directly accessed should _never_ be a typedef.
+
+
+               Chapter 6: Functions
 
 Functions should be short and sweet, and do just one thing.  They should
 fit on one or two screenfuls of text (the ISO/ANSI screen size is 80x24,
@@ -183,7 +259,7 @@ to understand what you did 2 weeks from 
 to understand what you did 2 weeks from now.
 
 
-               Chapter 6: Centralized exiting of functions
+               Chapter 7: Centralized exiting of functions
 
 Albeit deprecated by some people, the equivalent of the goto statement is
 used frequently by compilers in form of the unconditional jump instruction.
@@ -220,7 +296,7 @@ out:
        return result;
 }
 
-               Chapter 7: Commenting
+               Chapter 8: Commenting
 
 Comments are good, but there is also a danger of over-commenting.  NEVER
 try to explain HOW your code works in a comment: it's much better to
@@ -240,7 +316,7 @@ See the files Documentation/kernel-doc-n
 See the files Documentation/kernel-doc-nano-HOWTO.txt and scripts/kernel-doc
 for details.
 
-               Chapter 8: You've made a mess of it
+               Chapter 9: You've made a mess of it
 
 That's OK, we all do.  You've probably been told by your long-time Unix
 user helper that "GNU emacs" automatically formats the C sources for
@@ -288,7 +364,7 @@ remember: "indent" is not a fix for bad 
 remember: "indent" is not a fix for bad programming.
 
 
-               Chapter 9: Configuration-files
+               Chapter 10: Configuration-files
 
 For configuration options (arch/xxx/Kconfig, and all the Kconfig files),
 somewhat different indentation is used.
@@ -313,7 +389,7 @@ experimental options should be denoted (
 experimental options should be denoted (EXPERIMENTAL).
 
 
-               Chapter 10: Data structures
+               Chapter 11: Data structures
 
 Data structures that have visibility outside the single-threaded
 environment they are created and destroyed in should always have
@@ -344,7 +420,7 @@ have a reference count on it, you almost
 have a reference count on it, you almost certainly have a bug.
 
 
-               Chapter 11: Macros, Enums and RTL
+               Chapter 12: Macros, Enums and RTL
 
 Names of macros defining constants and labels in enums are capitalized.
 
@@ -399,7 +475,7 @@ covers RTL which is used frequently with
 covers RTL which is used frequently with assembly language in the kernel.
 
 
-               Chapter 12: Printing kernel messages
+               Chapter 13: Printing kernel messages
 
 Kernel developers like to be seen as literate. Do mind the spelling
 of kernel messages to make a good impression. Do not use crippled
@@ -410,7 +486,7 @@ Printing numbers in parentheses (%d) add
 Printing numbers in parentheses (%d) adds no value and should be avoided.
 
 
-               Chapter 13: Allocating memory
+               Chapter 14: Allocating memory
 
 The kernel provides the following general purpose memory allocators:
 kmalloc(), kzalloc(), kcalloc(), and vmalloc().  Please refer to the API
@@ -429,7 +505,7 @@ language.
 language.
 
 
-               Chapter 14: The inline disease
+               Chapter 15: The inline disease
 
 There appears to be a common misperception that gcc has a magic "make me
 faster" speedup option called "inline". While the use of inlines can be
@@ -457,7 +533,7 @@ something it would have done anyway.
 
 
 
-               Chapter 15: References
+               Appendix I: References
 
 The C Programming Language, Second Edition
 by Brian W. Kernighan and Dennis M. Ritchie.
@@ -481,4 +557,4 @@ http://www.kroah.com/linux/talks/ols_200
 http://www.kroah.com/linux/talks/ols_2002_kernel_codingstyle_talk/html/
 
 --
-Last updated on 30 December 2005 by a community effort on LKML.
+Last updated on 30 April 2006.
diff -r c875b3d2c5e5 -r 29fd5adfdc07 Documentation/DocBook/Makefile
--- a/Documentation/DocBook/Makefile    Mon Aug 07 17:39:11 2006 -0400
+++ b/Documentation/DocBook/Makefile    Mon Aug 07 18:15:57 2006 -0400
@@ -10,7 +10,8 @@ DOCBOOKS := wanbook.xml z8530book.xml mc
            kernel-hacking.xml kernel-locking.xml deviceiobook.xml \
            procfs-guide.xml writing_usb_driver.xml \
            kernel-api.xml journal-api.xml lsm.xml usb.xml \
-           gadget.xml libata.xml mtdnand.xml librs.xml rapidio.xml
+           gadget.xml libata.xml mtdnand.xml librs.xml rapidio.xml \
+           genericirq.xml
 
 ###
 # The build process is as follows (targets):
diff -r c875b3d2c5e5 -r 29fd5adfdc07 Documentation/DocBook/kernel-api.tmpl
--- a/Documentation/DocBook/kernel-api.tmpl     Mon Aug 07 17:39:11 2006 -0400
+++ b/Documentation/DocBook/kernel-api.tmpl     Mon Aug 07 18:15:57 2006 -0400
@@ -62,6 +62,8 @@
      <sect1><title>Internal Functions</title>
 !Ikernel/exit.c
 !Ikernel/signal.c
+!Iinclude/linux/kthread.h
+!Ekernel/kthread.c
      </sect1>
 
      <sect1><title>Kernel objects manipulation</title>
@@ -114,9 +116,33 @@ X!Ilib/string.c
      </sect1>
   </chapter>
 
+  <chapter id="kernel-lib">
+     <title>Basic Kernel Library Functions</title>
+
+     <para>
+       The Linux kernel provides more basic utility functions.
+     </para>
+
+     <sect1><title>Bitmap Operations</title>
+!Elib/bitmap.c
+!Ilib/bitmap.c
+     </sect1>
+
+     <sect1><title>Command-line Parsing</title>
+!Elib/cmdline.c
+     </sect1>
+
+     <sect1><title>CRC Functions</title>
+!Elib/crc16.c
+!Elib/crc32.c
+!Elib/crc-ccitt.c
+     </sect1>
+  </chapter>
+
   <chapter id="mm">
      <title>Memory Management in Linux</title>
      <sect1><title>The Slab Cache</title>
+!Iinclude/linux/slab.h
 !Emm/slab.c
      </sect1>
      <sect1><title>User Space Memory Access</title>
@@ -280,12 +306,13 @@ X!Ekernel/module.c
      <sect1><title>MTRR Handling</title>
 !Earch/i386/kernel/cpu/mtrr/main.c
      </sect1>
+
      <sect1><title>PCI Support Library</title>
 !Edrivers/pci/pci.c
 !Edrivers/pci/pci-driver.c
 !Edrivers/pci/remove.c
 !Edrivers/pci/pci-acpi.c
-<!-- kerneldoc does not understand to __devinit
+<!-- kerneldoc does not understand __devinit
 X!Edrivers/pci/search.c
  -->
 !Edrivers/pci/msi.c
@@ -314,9 +341,11 @@ X!Earch/i386/kernel/mca.c
      </sect1>
   </chapter>
 
-  <chapter id="devfs">
-     <title>The Device File System</title>
-!Efs/devfs/base.c
+  <chapter id="firmware">
+     <title>Firmware Interfaces</title>
+     <sect1><title>DMI Interfaces</title>
+!Edrivers/firmware/dmi_scan.c
+     </sect1>
   </chapter>
 
   <chapter id="sysfs">
@@ -329,6 +358,18 @@ X!Earch/i386/kernel/mca.c
   <chapter id="security">
      <title>Security Framework</title>
 !Esecurity/security.c
+  </chapter>
+
+  <chapter id="audit">
+     <title>Audit Interfaces</title>
+!Ekernel/audit.c
+!Ikernel/auditsc.c
+!Ikernel/auditfilter.c
+  </chapter>
+
+  <chapter id="accounting">
+     <title>Accounting Framework</title>
+!Ikernel/acct.c
   </chapter>
 
   <chapter id="pmfuncs">
@@ -390,7 +431,6 @@ X!Edrivers/pnp/system.c
      </sect1>
   </chapter>
 
-
   <chapter id="blkdev">
      <title>Block Devices</title>
 !Eblock/ll_rw_blk.c
@@ -399,6 +439,14 @@ X!Edrivers/pnp/system.c
   <chapter id="miscdev">
      <title>Miscellaneous Devices</title>
 !Edrivers/char/misc.c
+  </chapter>
+
+  <chapter id="parportdev">
+     <title>Parallel Port Devices</title>
+!Iinclude/linux/parport.h
+!Edrivers/parport/ieee1284.c
+!Edrivers/parport/share.c
+!Idrivers/parport/daisy.c
   </chapter>
 
   <chapter id="viddev">
diff -r c875b3d2c5e5 -r 29fd5adfdc07 Documentation/DocBook/kernel-locking.tmpl
--- a/Documentation/DocBook/kernel-locking.tmpl Mon Aug 07 17:39:11 2006 -0400
+++ b/Documentation/DocBook/kernel-locking.tmpl Mon Aug 07 18:15:57 2006 -0400
@@ -1590,7 +1590,7 @@ the amount of locking which needs to be 
     <para>
       Our final dilemma is this: when can we actually destroy the
       removed element?  Remember, a reader might be stepping through
-      this element in the list right now: it we free this element and
+      this element in the list right now: if we free this element and
       the <symbol>next</symbol> pointer changes, the reader will jump
       off into garbage and crash.  We need to wait until we know that
       all the readers who were traversing the list when we deleted the
diff -r c875b3d2c5e5 -r 29fd5adfdc07 Documentation/DocBook/libata.tmpl
--- a/Documentation/DocBook/libata.tmpl Mon Aug 07 17:39:11 2006 -0400
+++ b/Documentation/DocBook/libata.tmpl Mon Aug 07 18:15:57 2006 -0400
@@ -169,6 +169,22 @@ void (*tf_read) (struct ata_port *ap, st
 
        </sect2>
 
+       <sect2><title>PIO data read/write</title>
+       <programlisting>
+void (*data_xfer) (struct ata_device *, unsigned char *, unsigned int, int);
+       </programlisting>
+
+       <para>
+All bmdma-style drivers must implement this hook.  This is the low-level
+operation that actually copies the data bytes during a PIO data
+transfer.
+Typically the driver
+will choose one of ata_pio_data_xfer_noirq(), ata_pio_data_xfer(), or
+ata_mmio_data_xfer().
+       </para>
+
+       </sect2>
+
        <sect2><title>ATA command execute</title>
        <programlisting>
 void (*exec_command)(struct ata_port *ap, struct ata_taskfile *tf);
@@ -204,11 +220,10 @@ command.
        <programlisting>
 u8   (*check_status)(struct ata_port *ap);
 u8   (*check_altstatus)(struct ata_port *ap);
-u8   (*check_err)(struct ata_port *ap);
-       </programlisting>
-
-       <para>
-       Reads the Status/AltStatus/Error ATA shadow register from
+       </programlisting>
+
+       <para>
+       Reads the Status/AltStatus ATA shadow register from
        hardware.  On some hardware, reading the Status register has
        the side effect of clearing the interrupt condition.
        Most drivers for taskfile-based hardware use
@@ -269,23 +284,6 @@ void (*set_mode) (struct ata_port *ap);
 
        </sect2>
 
-       <sect2><title>Reset ATA bus</title>
-       <programlisting>
-void (*phy_reset) (struct ata_port *ap);
-       </programlisting>
-
-       <para>
-       The very first step in the probe phase.  Actions vary depending
-       on the bus type, typically.  After waking up the device and probing
-       for device presence (PATA and SATA), typically a soft reset
-       (SRST) will be performed.  Drivers typically use the helper
-       functions ata_bus_reset() or sata_phy_reset() for this hook.
-       Many SATA drivers use sata_phy_reset() or call it from within
-       their own phy_reset() functions.
-       </para>
-
-       </sect2>
-
        <sect2><title>Control PCI IDE BMDMA engine</title>
        <programlisting>
 void (*bmdma_setup) (struct ata_queued_cmd *qc);
@@ -354,16 +352,74 @@ int (*qc_issue) (struct ata_queued_cmd *
 
        </sect2>
 
-       <sect2><title>Timeout (error) handling</title>
+       <sect2><title>Exception and probe handling (EH)</title>
        <programlisting>
 void (*eng_timeout) (struct ata_port *ap);
-       </programlisting>
-
-       <para>
-This is a high level error handling function, called from the
-error handling thread, when a command times out.  Most newer
-hardware will implement its own error handling code here.  IDE BMDMA
-drivers may use the helper function ata_eng_timeout().
+void (*phy_reset) (struct ata_port *ap);
+       </programlisting>
+
+       <para>
+Deprecated.  Use ->error_handler() instead.
+       </para>
+
+       <programlisting>
+void (*freeze) (struct ata_port *ap);
+void (*thaw) (struct ata_port *ap);
+       </programlisting>
+
+       <para>
+ata_port_freeze() is called when HSM violations or some other
+condition disrupts normal operation of the port.  A frozen port
+is not allowed to perform any operation until the port is
+thawed, which usually follows a successful reset.
+       </para>
+
+       <para>
+The optional ->freeze() callback can be used for freezing the port
+hardware-wise (e.g. mask interrupt and stop DMA engine).  If a
+port cannot be frozen hardware-wise, the interrupt handler
+must ack and clear interrupts unconditionally while the port
+is frozen.
+       </para>
+       <para>
+The optional ->thaw() callback is called to perform the opposite of ->freeze():
+prepare the port for normal operation once again.  Unmask interrupts,
+start DMA engine, etc.
+       </para>
+
+       <programlisting>
+void (*error_handler) (struct ata_port *ap);
+       </programlisting>
+
+       <para>
+->error_handler() is a driver's hook into probe, hotplug, and recovery
+and other exceptional conditions.  The primary responsibility of an
+implementation is to call ata_do_eh() or ata_bmdma_drive_eh() with a set
+of EH hooks as arguments:
+       </para>
+
+       <para>
+'prereset' hook (may be NULL) is called during an EH reset, before any other 
actions
+are taken.
+       </para>
+
+       <para>
+'postreset' hook (may be NULL) is called after the EH reset is performed.  
Based on
+existing conditions, severity of the problem, and hardware capabilities,
+       </para>
+
+       <para>
+Either 'softreset' (may be NULL) or 'hardreset' (may be NULL) will be
+called to perform the low-level EH reset.
+       </para>
+
+       <programlisting>
+void (*post_internal_cmd) (struct ata_queued_cmd *qc);
+       </programlisting>
+
+       <para>
+Perform any hardware-specific actions necessary to finish processing
+after executing a probe-time or EH-time command via ata_exec_internal().
        </para>
 
        </sect2>
diff -r c875b3d2c5e5 -r 29fd5adfdc07 Documentation/RCU/checklist.txt
--- a/Documentation/RCU/checklist.txt   Mon Aug 07 17:39:11 2006 -0400
+++ b/Documentation/RCU/checklist.txt   Mon Aug 07 18:15:57 2006 -0400
@@ -144,9 +144,47 @@ 7. If the updater uses call_rcu(), then 
        whether the increased speed is worth it.
 
 8.     Although synchronize_rcu() is a bit slower than is call_rcu(),
-       it usually results in simpler code.  So, unless update performance
-       is important or the updaters cannot block, synchronize_rcu()
-       should be used in preference to call_rcu().
+       it usually results in simpler code.  So, unless update
+       performance is critically important or the updaters cannot block,
+       synchronize_rcu() should be used in preference to call_rcu().
+
+       An especially important property of the synchronize_rcu()
+       primitive is that it automatically self-limits: if grace periods
+       are delayed for whatever reason, then the synchronize_rcu()
+       primitive will correspondingly delay updates.  In contrast,
+       code using call_rcu() should explicitly limit update rate in
+       cases where grace periods are delayed, as failing to do so can
+       result in excessive realtime latencies or even OOM conditions.
+
+       Ways of gaining this self-limiting property when using call_rcu()
+       include:
+
+       a.      Keeping a count of the number of data-structure elements
+               used by the RCU-protected data structure, including those
+               waiting for a grace period to elapse.  Enforce a limit
+               on this number, stalling updates as needed to allow
+               previously deferred frees to complete.
+
+               Alternatively, limit only the number awaiting deferred
+               free rather than the total number of elements.
+
+       b.      Limiting update rate.  For example, if updates occur only
+               once per hour, then no explicit rate limiting is required,
+               unless your system is already badly broken.  The dcache
+               subsystem takes this approach -- updates are guarded
+               by a global lock, limiting their rate.
+
+       c.      Trusted update -- if updates can only be done manually by
+               superuser or some other trusted user, then it might not
+               be necessary to automatically limit them.  The theory
+               here is that superuser already has lots of ways to crash
+               the machine.
+
+       d.      Use call_rcu_bh() rather than call_rcu(), in order to take
+               advantage of call_rcu_bh()'s faster grace periods.
+
+       e.      Periodically invoke synchronize_rcu(), permitting a limited
+               number of updates per grace period.
 
 9.     All RCU list-traversal primitives, which include
        list_for_each_rcu(), list_for_each_entry_rcu(),
diff -r c875b3d2c5e5 -r 29fd5adfdc07 Documentation/RCU/torture.txt
--- a/Documentation/RCU/torture.txt     Mon Aug 07 17:39:11 2006 -0400
+++ b/Documentation/RCU/torture.txt     Mon Aug 07 18:15:57 2006 -0400
@@ -7,7 +7,7 @@ implementations.  It creates an rcutortu
 implementations.  It creates an rcutorture kernel module that can
 be loaded to run a torture test.  The test periodically outputs
 status messages via printk(), which can be examined via the dmesg
-command (perhaps grepping for "rcutorture").  The test is started
+command (perhaps grepping for "torture").  The test is started
 when the module is loaded, and stops when the module is unloaded.
 
 However, actually setting this config option to "y" results in the system
@@ -35,6 +35,19 @@ stat_interval        The number of seconds betw
                be printed -only- when the module is unloaded, and this
                is the default.
 
+shuffle_interval
+               The number of seconds to keep the test threads affinitied
+               to a particular subset of the CPUs.  Used in conjunction
+               with test_no_idle_hz.
+
+test_no_idle_hz        Whether or not to test the ability of RCU to operate in
+               a kernel that disables the scheduling-clock interrupt to
+               idle CPUs.  Boolean parameter, "1" to test, "0" otherwise.
+
+torture_type   The type of RCU to test: "rcu" for the rcu_read_lock()
+               API, "rcu_bh" for the rcu_read_lock_bh() API, and "srcu"
+               for the "srcu_read_lock()" API.
+
 verbose                Enable debug printk()s.  Default is disabled.
 
 
@@ -42,14 +55,14 @@ OUTPUT
 
 The statistics output is as follows:
 
-       rcutorture: --- Start of test: nreaders=16 stat_interval=0 verbose=0
-       rcutorture: rtc: 0000000000000000 ver: 1916 tfle: 0 rta: 1916 rtaf: 0 
rtf: 1915
-       rcutorture: Reader Pipe:  1466408 9747 0 0 0 0 0 0 0 0 0
-       rcutorture: Reader Batch:  1464477 11678 0 0 0 0 0 0 0 0
-       rcutorture: Free-Block Circulation:  1915 1915 1915 1915 1915 1915 1915 
1915 1915 1915 0
-       rcutorture: --- End of test
+       rcu-torture: --- Start of test: nreaders=16 stat_interval=0 verbose=0
+       rcu-torture: rtc: 0000000000000000 ver: 1916 tfle: 0 rta: 1916 rtaf: 0 
rtf: 1915
+       rcu-torture: Reader Pipe:  1466408 9747 0 0 0 0 0 0 0 0 0
+       rcu-torture: Reader Batch:  1464477 11678 0 0 0 0 0 0 0 0
+       rcu-torture: Free-Block Circulation:  1915 1915 1915 1915 1915 1915 
1915 1915 1915 1915 0
+       rcu-torture: --- End of test
 
-The command "dmesg | grep rcutorture:" will extract this information on
+The command "dmesg | grep torture:" will extract this information on
 most systems.  On more esoteric configurations, it may be necessary to
 use other commands to access the output of the printk()s used by
 the RCU torture test.  The printk()s use KERN_ALERT, so they should
@@ -115,8 +128,9 @@ The following script may be used to tort
        modprobe rcutorture
        sleep 100
        rmmod rcutorture
-       dmesg | grep rcutorture:
+       dmesg | grep torture:
 
 The output can be manually inspected for the error flag of "!!!".
 One could of course create a more elaborate script that automatically
-checked for such errors.
+checked for such errors.  The "rmmod" command forces a "SUCCESS" or
+"FAILURE" indication to be printk()ed.
diff -r c875b3d2c5e5 -r 29fd5adfdc07 Documentation/RCU/whatisRCU.txt
--- a/Documentation/RCU/whatisRCU.txt   Mon Aug 07 17:39:11 2006 -0400
+++ b/Documentation/RCU/whatisRCU.txt   Mon Aug 07 18:15:57 2006 -0400
@@ -184,7 +184,17 @@ synchronize_rcu()
        blocking, it registers a function and argument which are invoked
        after all ongoing RCU read-side critical sections have completed.
        This callback variant is particularly useful in situations where
-       it is illegal to block.
+       it is illegal to block or where update-side performance is
+       critically important.
+
+       However, the call_rcu() API should not be used lightly, as use
+       of the synchronize_rcu() API generally results in simpler code.
+       In addition, the synchronize_rcu() API has the nice property
+       of automatically limiting update rate should grace periods
+       be delayed.  This property results in system resilience in face
+       of denial-of-service attacks.  Code using call_rcu() should limit
+       update rate in order to gain this same sort of resilience.  See
+       checklist.txt for some approaches to limiting the update rate.
 
 rcu_assign_pointer()
 
@@ -790,7 +800,6 @@ RCU pointer update:
 
 RCU grace period:
 
-       synchronize_kernel (deprecated)
        synchronize_net
        synchronize_sched
        synchronize_rcu
diff -r c875b3d2c5e5 -r 29fd5adfdc07 Documentation/README.DAC960
--- a/Documentation/README.DAC960       Mon Aug 07 17:39:11 2006 -0400
+++ b/Documentation/README.DAC960       Mon Aug 07 18:15:57 2006 -0400
@@ -78,9 +78,9 @@ terms are in use in the Mylex documentat
 terms are in use in the Mylex documentation; I have chosen to standardize on
 the more generic "Logical Drive" and "Drive Group".
 
-DAC960 RAID disk devices are named in the style of the Device File System
-(DEVFS).  The device corresponding to Logical Drive D on Controller C is
-referred to as /dev/rd/cCdD, and the partitions are called /dev/rd/cCdDp1
+DAC960 RAID disk devices are named in the style of the obsolete Device File
+System (DEVFS).  The device corresponding to Logical Drive D on Controller C
+is referred to as /dev/rd/cCdD, and the partitions are called /dev/rd/cCdDp1
 through /dev/rd/cCdDp7.  For example, partition 3 of Logical Drive 5 on
 Controller 2 is referred to as /dev/rd/c2d5p3.  Note that unlike with SCSI
 disks the device names will not change in the event of a disk drive failure.
diff -r c875b3d2c5e5 -r 29fd5adfdc07 
Documentation/arm/Samsung-S3C24XX/Overview.txt
--- a/Documentation/arm/Samsung-S3C24XX/Overview.txt    Mon Aug 07 17:39:11 
2006 -0400
+++ b/Documentation/arm/Samsung-S3C24XX/Overview.txt    Mon Aug 07 18:15:57 
2006 -0400
@@ -7,10 +7,12 @@ Introduction
 ------------
 
   The Samsung S3C24XX range of ARM9 System-on-Chip CPUs are supported
-  by the 's3c2410' architecture of ARM Linux. Currently the S3C2410 and
-  the S3C2440 are supported CPUs.
+  by the 's3c2410' architecture of ARM Linux. Currently the S3C2410,
+  S3C2440 and S3C2442 devices are supported.
 
   Support for the S3C2400 series is in progress.
+
+  Support for the S3C2412 and S3C2413 CPUs is being merged.
 
 
 Configuration
@@ -43,9 +45,18 @@ Machines
 
     Samsung's own development board, geared for PDA work.
 
+  Samsung/Aiji SMDK2412
+
+    The S3C2412 version of the SMDK2440.
+
+  Samsung/Aiji SMDK2413
+
+    The S3C2412 version of the SMDK2440.
+
   Samsung/Meritech SMDK2440
 
-    The S3C2440 compatible version of the SMDK2440
+    The S3C2440 compatible version of the SMDK2440, which has the
+    option of an S3C2440 or S3C2442 CPU module.
 
   Thorcom VR1000
 
@@ -211,24 +222,6 @@ Port Contributors
   Lucas Correia Villa Real (S3C2400 port)
 
 
-Document Changes
-----------------
-
-  05 Sep 2004 - BJD - Added Document Changes section
-  05 Sep 2004 - BJD - Added Klaus Fetscher to list of contributors
-  25 Oct 2004 - BJD - Added Dimitry Andric to list of contributors
-  25 Oct 2004 - BJD - Updated the MTD from the 2.6.9 merge
-  21 Jan 2005 - BJD - Added rx3715, added Shannon to contributors
-  10 Feb 2005 - BJD - Added Guillaume Gourat to contributors
-  02 Mar 2005 - BJD - Added SMDK2440 to list of machines
-  06 Mar 2005 - BJD - Added Christer Weinigel
-  08 Mar 2005 - BJD - Added LCVR to list of people, updated introduction
-  08 Mar 2005 - BJD - Added section on adding machines
-  09 Sep 2005 - BJD - Added section on platform data
-  11 Feb 2006 - BJD - Added I2C, RTC and Watchdog sections
-  11 Feb 2006 - BJD - Added Osiris machine, and S3C2400 information
-
-
 Document Author
 ---------------
 
diff -r c875b3d2c5e5 -r 29fd5adfdc07 Documentation/atomic_ops.txt
--- a/Documentation/atomic_ops.txt      Mon Aug 07 17:39:11 2006 -0400
+++ b/Documentation/atomic_ops.txt      Mon Aug 07 18:15:57 2006 -0400
@@ -157,13 +157,13 @@ For example, smp_mb__before_atomic_dec()
        smp_mb__before_atomic_dec();
        atomic_dec(&obj->ref_count);
 
-It makes sure that all memory operations preceeding the atomic_dec()
+It makes sure that all memory operations preceding the atomic_dec()
 call are strongly ordered with respect to the atomic counter
-operation.  In the above example, it guarentees that the assignment of
+operation.  In the above example, it guarantees that the assignment of
 "1" to obj->dead will be globally visible to other cpus before the
 atomic counter decrement.
 
-Without the explicitl smp_mb__before_atomic_dec() call, the
+Without the explicit smp_mb__before_atomic_dec() call, the
 implementation could legally allow the atomic counter update visible
 to other cpus before the "obj->dead = 1;" assignment.
 
@@ -173,11 +173,11 @@ ordering with respect to memory operatio
 (smp_mb__{before,after}_atomic_inc()).
 
 A missing memory barrier in the cases where they are required by the
-atomic_t implementation above can have disasterous results.  Here is
-an example, which follows a pattern occuring frequently in the Linux
+atomic_t implementation above can have disastrous results.  Here is
+an example, which follows a pattern occurring frequently in the Linux
 kernel.  It is the use of atomic counters to implement reference
 counting, and it works such that once the counter falls to zero it can
-be guarenteed that no other entity can be accessing the object:
+be guaranteed that no other entity can be accessing the object:
 
 static void obj_list_add(struct obj *obj)
 {
@@ -291,9 +291,9 @@ size.  The endianness of the bits within
 size.  The endianness of the bits within each "unsigned long" are the
 native endianness of the cpu.
 
-       void set_bit(unsigned long nr, volatils unsigned long *addr);
-       void clear_bit(unsigned long nr, volatils unsigned long *addr);
-       void change_bit(unsigned long nr, volatils unsigned long *addr);
+       void set_bit(unsigned long nr, volatile unsigned long *addr);
+       void clear_bit(unsigned long nr, volatile unsigned long *addr);
+       void change_bit(unsigned long nr, volatile unsigned long *addr);
 
 These routines set, clear, and change, respectively, the bit number
 indicated by "nr" on the bit mask pointed to by "ADDR".
@@ -301,9 +301,9 @@ They must execute atomically, yet there 
 They must execute atomically, yet there are no implicit memory barrier
 semantics required of these interfaces.
 
-       int test_and_set_bit(unsigned long nr, volatils unsigned long *addr);
-       int test_and_clear_bit(unsigned long nr, volatils unsigned long *addr);
-       int test_and_change_bit(unsigned long nr, volatils unsigned long *addr);
+       int test_and_set_bit(unsigned long nr, volatile unsigned long *addr);
+       int test_and_clear_bit(unsigned long nr, volatile unsigned long *addr);
+       int test_and_change_bit(unsigned long nr, volatile unsigned long *addr);
 
 Like the above, except that these routines return a boolean which
 indicates whether the changed bit was set _BEFORE_ the atomic bit
@@ -335,7 +335,7 @@ subsequent memory operation is made visi
                /* ... */;
        obj->killed = 1;
 
-The implementation of test_and_set_bit() must guarentee that
+The implementation of test_and_set_bit() must guarantee that
 "obj->dead = 1;" is visible to cpus before the atomic memory operation
 done by test_and_set_bit() becomes visible.  Likewise, the atomic
 memory operation done by test_and_set_bit() must become visible before
@@ -474,7 +474,7 @@ strictly orders all subsequent memory op
 strictly orders all subsequent memory operations (including
 the cas()) with respect to itself, things will be fine.
 
-Said another way, _atomic_dec_and_lock() must guarentee that
+Said another way, _atomic_dec_and_lock() must guarantee that
 a counter dropping to zero is never made visible before the
 spinlock being acquired.
 
diff -r c875b3d2c5e5 -r 29fd5adfdc07 Documentation/devices.txt
--- a/Documentation/devices.txt Mon Aug 07 17:39:11 2006 -0400
+++ b/Documentation/devices.txt Mon Aug 07 18:15:57 2006 -0400
@@ -3,7 +3,7 @@
 
             Maintained by Torben Mathiasen <device@xxxxxxxxxx>
 
-                     Last revised: 25 January 2005
+                     Last revised: 15 May 2006
 
 This list is the Linux Device List, the official registry of allocated
 device numbers and /dev directory nodes for the Linux operating
@@ -94,7 +94,6 @@ Your cooperation is appreciated.
                  9 = /dev/urandom      Faster, less secure random number gen.
                 10 = /dev/aio          Asyncronous I/O notification interface
                 11 = /dev/kmsg         Writes to this come out as printk's
-                12 = /dev/oldmem       Access to crash dump from kexec kernel
   1 block      RAM disk
                  0 = /dev/ram0         First RAM disk
                  1 = /dev/ram1         Second RAM disk
@@ -262,13 +261,13 @@ Your cooperation is appreciated.
                NOTE: These devices permit both read and write access.
 
   7 block      Loopback devices
-                 0 = /dev/loop0        First loopback device
-                 1 = /dev/loop1        Second loopback device
-                   ...
-
-               The loopback devices are used to mount filesystems not
+                 0 = /dev/loop0        First loop device
+                 1 = /dev/loop1        Second loop device
+                   ...
+
+               The loop devices are used to mount filesystems not
                associated with block devices.  The binding to the
-               loopback devices is handled by mount(8) or losetup(8).
+               loop devices is handled by mount(8) or losetup(8).
 
   8 block      SCSI disk devices (0-15)
                  0 = /dev/sda          First SCSI disk whole disk
@@ -943,7 +942,7 @@ Your cooperation is appreciated.
                240 = /dev/ftlp         FTL on 16th Memory Technology Device 
 
                Partitions are handled in the same way as for IDE
-               disks (see major number 3) expect that the partition
+               disks (see major number 3) except that the partition
                limit is 15 rather than 63 per disk (same as SCSI.)
 
  45 char       isdn4linux ISDN BRI driver
@@ -1168,7 +1167,7 @@ Your cooperation is appreciated.
                The filename of the encrypted container and the passwords
                are sent via ioctls (using the sdmount tool) to the master
                node which then activates them via one of the
-               /dev/scramdisk/x nodes for loopback mounting (all handled
+               /dev/scramdisk/x nodes for loop mounting (all handled
                through the sdmount tool).
 
                Requested by: andy@xxxxxxxxxxxxxxxxxx
@@ -2538,18 +2537,32 @@ 180 char        USB devices
                  0 = /dev/usb/lp0      First USB printer
                    ...
                 15 = /dev/usb/lp15     16th USB printer
-                16 = /dev/usb/mouse0   First USB mouse
-                   ...
-                31 = /dev/usb/mouse15  16th USB mouse
-                32 = /dev/usb/ez0      First USB firmware loader
-                   ...
-                47 = /dev/usb/ez15     16th USB firmware loader
                 48 = /dev/usb/scanner0 First USB scanner
                    ...
                 63 = /dev/usb/scanner15 16th USB scanner
                 64 = /dev/usb/rio500   Diamond Rio 500
                 65 = /dev/usb/usblcd   USBLCD Interface (info@xxxxxxxxx)
                 66 = /dev/usb/cpad0    Synaptics cPad (mouse/LCD)
+                96 = /dev/usb/hiddev0  1st USB HID device
+                   ...
+               111 = /dev/usb/hiddev15 16th USB HID device
+               112 = /dev/usb/auer0    1st auerswald ISDN device
+                   ...
+               127 = /dev/usb/auer15   16th auerswald ISDN device
+               128 = /dev/usb/brlvgr0  First Braille Voyager device
+                   ...
+               131 = /dev/usb/brlvgr3  Fourth Braille Voyager device
+               132 = /dev/usb/idmouse  ID Mouse (fingerprint scanner) device
+               133 = /dev/usb/sisusbvga1       First SiSUSB VGA device
+                   ...
+               140 = /dev/usb/sisusbvga8       Eigth SISUSB VGA device
+               144 = /dev/usb/lcd      USB LCD device
+               160 = /dev/usb/legousbtower0    1st USB Legotower device
+                   ...
+               175 = /dev/usb/legousbtower15   16th USB Legotower device
+               240 = /dev/usb/dabusb0  First daubusb device
+                   ...
+               243 = /dev/usb/dabusb3  Fourth dabusb device
 
 180 block      USB block devices
                0 = /dev/uba            First USB block device
@@ -2709,6 +2722,17 @@ 202 char CPU model-specific registers
                  0 = /dev/cpu/0/msr            MSRs on CPU 0
                  1 = /dev/cpu/1/msr            MSRs on CPU 1
                    ...
+
+202 block      Xen Virtual Block Device
+                 0 = /dev/xvda       First Xen VBD whole disk
+                 16 = /dev/xvdb      Second Xen VBD whole disk
+                 32 = /dev/xvdc      Third Xen VBD whole disk
+                   ...
+                 240 = /dev/xvdp     Sixteenth Xen VBD whole disk
+
+                Partitions are handled in the same way as for IDE
+                disks (see major number 3) except that the limit on
+                partitions is 15.
 
 203 char       CPU CPUID information
                  0 = /dev/cpu/0/cpuid          CPUID on CPU 0
@@ -2747,11 +2771,27 @@ 204 char        Low-density serial ports
                 46 = /dev/ttyCPM0              PPC CPM (SCC or SMC) - port 0
                    ...
                 47 = /dev/ttyCPM5              PPC CPM (SCC or SMC) - port 5
-                50 = /dev/ttyIOC40             Altix serial card
-                   ...
-                81 = /dev/ttyIOC431            Altix serial card
-                82 = /dev/ttyVR0               NEC VR4100 series SIU
-                83 = /dev/ttyVR1               NEC VR4100 series DSIU
+                50 = /dev/ttyIOC0              Altix serial card
+                   ...
+                81 = /dev/ttyIOC31             Altix serial card
+                82 = /dev/ttyVR0               NEC VR4100 series SIU
+                83 = /dev/ttyVR1               NEC VR4100 series DSIU
+                84 = /dev/ttyIOC84             Altix ioc4 serial card
+                   ...
+                115 = /dev/ttyIOC115           Altix ioc4 serial card
+                116 = /dev/ttySIOC0            Altix ioc3 serial card
+                   ...
+                147 = /dev/ttySIOC31           Altix ioc3 serial card
+                148 = /dev/ttyPSC0             PPC PSC - port 0
+                   ...
+                153 = /dev/ttyPSC5             PPC PSC - port 5
+                154 = /dev/ttyAT0              ATMEL serial port 0
+                   ...
+                169 = /dev/ttyAT15             ATMEL serial port 15
+                170 = /dev/ttyNX0              Hilscher netX serial port 0
+                   ...
+                185 = /dev/ttyNX15             Hilscher netX serial port 15
+                186 = /dev/ttyJ0               JTAG1 DCC protocol based serial 
port emulation
 
 205 char       Low-density serial ports (alternate device)
                  0 = /dev/culu0                Callout device for ttyLU0
@@ -2786,8 +2826,8 @@ 205 char  Low-density serial ports (alter
                 50 = /dev/cuioc40              Callout device for ttyIOC40
                    ...
                 81 = /dev/cuioc431             Callout device for ttyIOC431
-                82 = /dev/cuvr0                Callout device for ttyVR0
-                83 = /dev/cuvr1                Callout device for ttyVR1
+                82 = /dev/cuvr0                Callout device for ttyVR0
+                83 = /dev/cuvr1                Callout device for ttyVR1
 
 
 206 char       OnStream SC-x0 tape devices
@@ -2897,7 +2937,6 @@ 212 char  LinuxTV.org DVB driver subsyste
                    ...
                196 = /dev/dvb/adapter3/video0    first video decoder of fourth 
card
 
-
 216 char       Bluetooth RFCOMM TTY devices
                  0 = /dev/rfcomm0              First Bluetooth RFCOMM TTY 
device
                  1 = /dev/rfcomm1              Second Bluetooth RFCOMM TTY 
device
@@ -3002,12 +3041,43 @@ 230 char        IBM iSeries virtual tape
                ioctl()'s can be used to rewind the tape regardless of
                the device used to access it.
 
-231 char       InfiniBand MAD
+231 char       InfiniBand
                0 = /dev/infiniband/umad0
                1 = /dev/infiniband/umad1
-                ...
-
-232-239                UNASSIGNED
+                 ...
+               63 = /dev/infiniband/umad63    63rd InfiniBandMad device
+               64 = /dev/infiniband/issm0     First InfiniBand IsSM device
+               65 = /dev/infiniband/issm1     Second InfiniBand IsSM device
+                 ...
+               127 = /dev/infiniband/issm63    63rd InfiniBand IsSM device
+               128 = /dev/infiniband/uverbs0   First InfiniBand verbs device
+               129 = /dev/infiniband/uverbs1   Second InfiniBand verbs device
+                 ...
+               159 = /dev/infiniband/uverbs31  31st InfiniBand verbs device
+
+232 char       Biometric Devices
+               0 = /dev/biometric/sensor0/fingerprint  first fingerprint 
sensor on first device
+               1 = /dev/biometric/sensor0/iris         first iris sensor on 
first device
+               2 = /dev/biometric/sensor0/retina       first retina sensor on 
first device
+               3 = /dev/biometric/sensor0/voiceprint   first voiceprint sensor 
on first device
+               4 = /dev/biometric/sensor0/facial       first facial sensor on 
first device
+               5 = /dev/biometric/sensor0/hand         first hand sensor on 
first device
+                 ...
+               10 = /dev/biometric/sensor1/fingerprint first fingerprint 
sensor on second device
+                 ...
+               20 = /dev/biometric/sensor2/fingerprint first fingerprint 
sensor on third device
+                 ...
+
+233 char       PathScale InfiniPath interconnect
+               0 = /dev/ipath        Primary device for programs (any unit)
+               1 = /dev/ipath0       Access specifically to unit 0
+               2 = /dev/ipath1       Access specifically to unit 1
+                 ...
+               4 = /dev/ipath3       Access specifically to unit 3
+               129 = /dev/ipath_sma    Device used by Subnet Management Agent
+               130 = /dev/ipath_diag   Device used by diagnostics programs
+
+234-239                UNASSIGNED
 
 240-254 char   LOCAL/EXPERIMENTAL USE
 240-254 block  LOCAL/EXPERIMENTAL USE
@@ -3021,6 +3091,28 @@ 255 block        RESERVED
                This major is reserved to assist the expansion to a
                larger number space.  No device nodes with this major
                should ever be created on the filesystem.
+               (This is probaly not true anymore, but I'll leave it
+               for now /Torben)
+
+---LARGE MAJORS!!!!!---
+
+256 char       Equinox SST multi-port serial boards
+                  0 = /dev/ttyEQ0      First serial port on first Equinox SST 
board
+                127 = /dev/ttyEQ127    Last serial port on first Equinox SST 
board
+                128 = /dev/ttyEQ128    First serial port on second Equinox SST 
board
+                 ...
+               1027 = /dev/ttyEQ1027   Last serial port on eighth Equinox SST 
board
+
+256 block      Resident Flash Disk Flash Translation Layer
+                 0 = /dev/rfda         First RFD FTL layer
+                16 = /dev/rfdb         Second RFD FTL layer
+                 ...
+               240 = /dev/rfdp         16th RFD FTL layer
+
+257 char       Phoenix Technologies Cryptographic Services Driver
+                 0 = /dev/ptlsec       Crypto Services Driver
+
+
 
  ****  ADDITIONAL /dev DIRECTORY ENTRIES
 
diff -r c875b3d2c5e5 -r 29fd5adfdc07 Documentation/driver-model/overview.txt
--- a/Documentation/driver-model/overview.txt   Mon Aug 07 17:39:11 2006 -0400
+++ b/Documentation/driver-model/overview.txt   Mon Aug 07 18:15:57 2006 -0400
@@ -18,7 +18,7 @@ Traditional driver models implemented so
 (sometimes just a list) for the devices they control. There wasn't any
 uniformity across the different bus types.
 
-The current driver model provides a comon, uniform data model for describing
+The current driver model provides a common, uniform data model for describing
 a bus and the devices that can appear under the bus. The unified bus
 model includes a set of common attributes which all busses carry, and a set
 of common callbacks, such as device discovery during bus probing, bus
diff -r c875b3d2c5e5 -r 29fd5adfdc07 Documentation/fb/fbcon.txt
--- a/Documentation/fb/fbcon.txt        Mon Aug 07 17:39:11 2006 -0400
+++ b/Documentation/fb/fbcon.txt        Mon Aug 07 18:15:57 2006 -0400
@@ -135,10 +135,10 @@ 4. fbcon=rotate:<n>
 
        The angle can be changed anytime afterwards by 'echoing' the same
        numbers to any one of the 2 attributes found in
-       /sys/class/graphics/fb{x}
-
-               con_rotate     - rotate the display of the active console
-               con_rotate_all - rotate the display of all consoles
+        /sys/class/graphics/fbcon
+
+               rotate     - rotate the display of the active console
+               rotate_all - rotate the display of all consoles
 
        Console rotation will only become available if Console Rotation
        Support is compiled in your kernel.
@@ -148,5 +148,177 @@ 4. fbcon=rotate:<n>
        Actually, the underlying fb driver is totally ignorant of console
        rotation.
 
----
+C. Attaching, Detaching and Unloading
+
+Before going on on how to attach, detach and unload the framebuffer console, an
+illustration of the dependencies may help.
+
+The console layer, as with most subsystems, needs a driver that interfaces with
+the hardware. Thus, in a VGA console:
+
+console ---> VGA driver ---> hardware.
+
+Assuming the VGA driver can be unloaded, one must first unbind the VGA driver
+from the console layer before unloading the driver.  The VGA driver cannot be
+unloaded if it is still bound to the console layer. (See
+Documentation/console/console.txt for more information).
+
+This is more complicated in the case of the the framebuffer console (fbcon),
+because fbcon is an intermediate layer between the console and the drivers:
+
+console ---> fbcon ---> fbdev drivers ---> hardware
+
+The fbdev drivers cannot be unloaded if it's bound to fbcon, and fbcon cannot
+be unloaded if it's bound to the console layer.
+
+So to unload the fbdev drivers, one must first unbind fbcon from the console,
+then unbind the fbdev drivers from fbcon.  Fortunately, unbinding fbcon from
+the console layer will automatically unbind framebuffer drivers from
+fbcon. Thus, there is no need to explicitly unbind the fbdev drivers from
+fbcon.
+
+So, how do we unbind fbcon from the console? Part of the answer is in
+Documentation/console/console.txt. To summarize:
+
+Echo a value to the bind file that represents the framebuffer console
+driver. So assuming vtcon1 represents fbcon, then:
+
+echo 1 > sys/class/vtconsole/vtcon1/bind - attach framebuffer console to
+                                           console layer
+echo 0 > sys/class/vtconsole/vtcon1/bind - detach framebuffer console from
+                                           console layer
+
+If fbcon is detached from the console layer, your boot console driver (which is
+usually VGA text mode) will take over.  A few drivers (rivafb and i810fb) will
+restore VGA text mode for you.  With the rest, before detaching fbcon, you
+must take a few additional steps to make sure that your VGA text mode is
+restored properly. The following is one of the several methods that you can do:
+
+1. Download or install vbetool.  This utility is included with most
+   distributions nowadays, and is usually part of the suspend/resume tool.
+
+2. In your kernel configuration, ensure that CONFIG_FRAMEBUFFER_CONSOLE is set
+   to 'y' or 'm'. Enable one or more of your favorite framebuffer drivers.
+
+3. Boot into text mode and as root run:
+
+       vbetool vbestate save > <vga state file>
+
+       The above command saves the register contents of your graphics
+       hardware to <vga state file>.  You need to do this step only once as
+       the state file can be reused.
+
+4. If fbcon is compiled as a module, load fbcon by doing:
+
+       modprobe fbcon
+
+5. Now to detach fbcon:
+
+       vbetool vbestate restore < <vga state file> && \
+       echo 0 > /sys/class/vtconsole/vtcon1/bind
+
+6. That's it, you're back to VGA mode. And if you compiled fbcon as a module,
+   you can unload it by 'rmmod fbcon'
+
+7. To reattach fbcon:
+
+       echo 1 > /sys/class/vtconsole/vtcon1/bind
+
+8. Once fbcon is unbound, all drivers registered to the system will also
+become unbound.  This means that fbcon and individual framebuffer drivers
+can be unloaded or reloaded at will. Reloading the drivers or fbcon will
+automatically bind the console, fbcon and the drivers together. Unloading
+all the drivers without unloading fbcon will make it impossible for the
+console to bind fbcon.
+
+Notes for vesafb users:
+=======================
+
+Unfortunately, if your bootline includes a vga=xxx parameter that sets the
+hardware in graphics mode, such as when loading vesafb, vgacon will not load.
+Instead, vgacon will replace the default boot console with dummycon, and you
+won't get any display after detaching fbcon. Your machine is still alive, so
+you can reattach vesafb. However, to reattach vesafb, you need to do one of
+the following:
+
+Variation 1:
+
+    a. Before detaching fbcon, do
+
+       vbetool vbemode save > <vesa state file> # do once for each vesafb mode,
+                                               # the file can be reused
+
+    b. Detach fbcon as in step 5.
+
+    c. Attach fbcon
+
+        vbetool vbestate restore < <vesa state file> && \
+       echo 1 > /sys/class/vtconsole/vtcon1/bind
+
+Variation 2:
+
+    a. Before detaching fbcon, do:
+       echo <ID> > /sys/class/tty/console/bind
+
+
+       vbetool vbemode get
+
+    b. Take note of the mode number
+
+    b. Detach fbcon as in step 5.
+
+    c. Attach fbcon:
+
+       vbetool vbemode set <mode number> && \
+       echo 1 > /sys/class/vtconsole/vtcon1/bind
+
+Samples:
+========
+
+Here are 2 sample bash scripts that you can use to bind or unbind the
+framebuffer console driver if you are in an X86 box:
+
+---------------------------------------------------------------------------
+#!/bin/bash
+# Unbind fbcon
+
+# Change this to where your actual vgastate file is located
+# Or Use VGASTATE=$1 to indicate the state file at runtime
+VGASTATE=/tmp/vgastate
+
+# path to vbetool
+VBETOOL=/usr/local/bin
+
+
+for (( i = 0; i < 16; i++))
+do
+  if test -x /sys/class/vtconsole/vtcon$i; then
+      if [ `cat /sys/class/vtconsole/vtcon$i/name | grep -c "frame buffer"` \
+           = 1 ]; then
+           if test -x $VBETOOL/vbetool; then
+              echo Unbinding vtcon$i
+              $VBETOOL/vbetool vbestate restore < $VGASTATE
+              echo 0 > /sys/class/vtconsole/vtcon$i/bind
+           fi
+      fi
+  fi
+done
+
+---------------------------------------------------------------------------
+#!/bin/bash
+# Bind fbcon
+
+for (( i = 0; i < 16; i++))
+do
+  if test -x /sys/class/vtconsole/vtcon$i; then
+      if [ `cat /sys/class/vtconsole/vtcon$i/name | grep -c "frame buffer"` \
+           = 1 ]; then
+         echo Unbinding vtcon$i
+         echo 1 > /sys/class/vtconsole/vtcon$i/bind
+      fi
+  fi
+done
+---------------------------------------------------------------------------
+
+--
 Antonino Daplas <adaplas@xxxxxxx>
diff -r c875b3d2c5e5 -r 29fd5adfdc07 Documentation/feature-removal-schedule.txt
--- a/Documentation/feature-removal-schedule.txt        Mon Aug 07 17:39:11 
2006 -0400
+++ b/Documentation/feature-removal-schedule.txt        Mon Aug 07 18:15:57 
2006 -0400
@@ -6,17 +6,6 @@ be removed from this file.
 
 ---------------------------
 
-What:  devfs
-When:  July 2005
-Files: fs/devfs/*, include/linux/devfs_fs*.h and assorted devfs
-       function calls throughout the kernel tree
-Why:   It has been unmaintained for a number of years, has unfixable
-       races, contains a naming policy within the kernel that is
-       against the LSB, and can be replaced by using udev.
-Who:   Greg Kroah-Hartman <greg@xxxxxxxxx>
-
----------------------------
-
 What:  RAW driver (CONFIG_RAW_DRIVER)
 When:  December 2005
 Why:   declared obsolete since kernel 2.6.3
@@ -30,21 +19,6 @@ When:        before 2.6.19
 When:  before 2.6.19
 Why:   OSS drivers with ALSA replacements
 Who:   Adrian Bunk <bunk@xxxxxxxxx>
-
----------------------------
-
-What:  RCU API moves to EXPORT_SYMBOL_GPL
-When:  April 2006
-Files: include/linux/rcupdate.h, kernel/rcupdate.c
-Why:   Outside of Linux, the only implementations of anything even
-       vaguely resembling RCU that I am aware of are in DYNIX/ptx,
-       VM/XA, Tornado, and K42.  I do not expect anyone to port binary
-       drivers or kernel modules from any of these, since the first two
-       are owned by IBM and the last two are open-source research OSes.
-       So these will move to GPL after a grace period to allow
-       people, who might be using implementations that I am not aware
-       of, to adjust to this upcoming change.
-Who:   Paul E. McKenney <paulmck@xxxxxxxxxx>
 
 ---------------------------
 
@@ -147,16 +121,6 @@ Who:       NeilBrown <neilb@xxxxxxx>
 
 ---------------------------
 
-What:  au1x00_uart driver
-When:  January 2006
-Why:   The 8250 serial driver now has the ability to deal with the differences
-       between the standard 8250 family of UARTs and their slightly strange
-       brother on Alchemy SOCs.  The loss of features is not considered an
-       issue.
-Who:   Ralf Baechle <ralf@xxxxxxxxxxxxxx>
-
----------------------------
-
 What:   eepro100 network driver
 When:   January 2007
 Why:    replaced by the e100 driver
@@ -189,6 +153,16 @@ Why:       The ISA interface is faster and sho
        probing is also known to cause trouble in at least one case (see
        bug #5889.)
 Who:   Jean Delvare <khali@xxxxxxxxxxxx>
+
+---------------------------
+
+What:  Unused EXPORT_SYMBOL/EXPORT_SYMBOL_GPL exports
+       (temporary transition config option provided until then)
+       The transition config option will also be removed at the same time.
+When:  before 2.6.19
+Why:   Unused symbols are both increasing the size of the kernel binary
+       and are often a sign of "wrong API"
+Who:   Arjan van de Ven <arjan@xxxxxxxxxxxxxxx>
 
 ---------------------------
 
@@ -239,3 +213,47 @@ Who:       Nick Piggin <npiggin@xxxxxxx>
 Who:   Nick Piggin <npiggin@xxxxxxx>
 
 ---------------------------
+
+What:  Support for the MIPS EV96100 evaluation board
+When:  September 2006
+Why:   Does no longer build since at least November 15, 2003, apparently
+       no userbase left.
+Who:   Ralf Baechle <ralf@xxxxxxxxxxxxxx>
+
+---------------------------
+
+What:  Support for the Momentum / PMC-Sierra Jaguar ATX evaluation board
+When:  September 2006
+Why:   Does no longer build since quite some time, and was never popular,
+       due to the platform being replaced by successor models.  Apparently
+       no user base left.  It also is one of the last users of
+       WANT_PAGE_VIRTUAL.
+Who:   Ralf Baechle <ralf@xxxxxxxxxxxxxx>
+
+---------------------------
+
+What:  Support for the Momentum Ocelot, Ocelot 3, Ocelot C and Ocelot G
+When:  September 2006
+Why:   Some do no longer build and apparently there is no user base left
+       for these platforms.
+Who:   Ralf Baechle <ralf@xxxxxxxxxxxxxx>
+
+---------------------------
+
+What:  Support for MIPS Technologies' Altas and SEAD evaluation board
+When:  September 2006
+Why:   Some do no longer build and apparently there is no user base left
+       for these platforms.  Hardware out of production since several years.
+Who:   Ralf Baechle <ralf@xxxxxxxxxxxxxx>
+
+---------------------------
+
+What:  Support for the IT8172-based platforms, ITE 8172G and Globespan IVR
+When:  September 2006
+Why:   Code does no longer build since at least 2.6.0,  apparently there is
+       no user base left for these platforms.  Hardware out of production
+       since several years and hardly a trace of the manufacturer left on
+       the net.
+Who:   Ralf Baechle <ralf@xxxxxxxxxxxxxx>
+
+---------------------------
diff -r c875b3d2c5e5 -r 29fd5adfdc07 Documentation/filesystems/Locking
--- a/Documentation/filesystems/Locking Mon Aug 07 17:39:11 2006 -0400
+++ b/Documentation/filesystems/Locking Mon Aug 07 18:15:57 2006 -0400
@@ -99,7 +99,7 @@ prototypes:
        int (*sync_fs)(struct super_block *sb, int wait);
        void (*write_super_lockfs) (struct super_block *);
        void (*unlockfs) (struct super_block *);
-       int (*statfs) (struct super_block *, struct kstatfs *);
+       int (*statfs) (struct dentry *, struct kstatfs *);
        int (*remount_fs) (struct super_block *, int *, char *);
        void (*clear_inode) (struct inode *);
        void (*umount_begin) (struct super_block *);
@@ -142,15 +142,16 @@ see also dquot_operations section.
 
 --------------------------- file_system_type ---------------------------
 prototypes:
-       struct super_block *(*get_sb) (struct file_system_type *, int,
-                       const char *, void *);
+       struct int (*get_sb) (struct file_system_type *, int,
+                       const char *, void *, struct vfsmount *);
        void (*kill_sb) (struct super_block *);
 locking rules:
                may block       BKL
 get_sb         yes             yes
 kill_sb                yes             yes
 
-->get_sb() returns error or a locked superblock (exclusive on ->s_umount).
+->get_sb() returns error or 0 with locked superblock attached to the vfsmount
+(exclusive on ->s_umount).
 ->kill_sb() takes a write-locked superblock, does all shutdown work on it,
 unlocks and drops the reference.
 
diff -r c875b3d2c5e5 -r 29fd5adfdc07 
Documentation/filesystems/automount-support.txt
--- a/Documentation/filesystems/automount-support.txt   Mon Aug 07 17:39:11 
2006 -0400
+++ b/Documentation/filesystems/automount-support.txt   Mon Aug 07 18:15:57 
2006 -0400
@@ -19,7 +19,7 @@ following procedure:
 
  (2) Have the follow_link() op do the following steps:
 
-     (a) Call do_kern_mount() to call the appropriate filesystem to set up a
+     (a) Call vfs_kern_mount() to call the appropriate filesystem to set up a
          superblock and gain a vfsmount structure representing it.
 
      (b) Copy the nameidata provided as an argument and substitute the dentry
diff -r c875b3d2c5e5 -r 29fd5adfdc07 
Documentation/filesystems/configfs/configfs_example.c
--- a/Documentation/filesystems/configfs/configfs_example.c     Mon Aug 07 
17:39:11 2006 -0400
+++ b/Documentation/filesystems/configfs/configfs_example.c     Mon Aug 07 
18:15:57 2006 -0400
@@ -264,6 +264,15 @@ static struct config_item_type simple_ch
 };
 
 
+struct simple_children {
+       struct config_group group;
+};
+
+static inline struct simple_children *to_simple_children(struct config_item 
*item)
+{
+       return item ? container_of(to_config_group(item), struct 
simple_children, group) : NULL;
+}
+
 static struct config_item *simple_children_make_item(struct config_group 
*group, const char *name)
 {
        struct simple_child *simple_child;
@@ -304,7 +313,13 @@ static ssize_t simple_children_attr_show
 "items have only one attribute that is readable and writeable.\n");
 }
 
+static void simple_children_release(struct config_item *item)
+{
+       kfree(to_simple_children(item));
+}
+
 static struct configfs_item_operations simple_children_item_ops = {
+       .release        = simple_children_release,
        .show_attribute = simple_children_attr_show,
 };
 
@@ -344,10 +359,6 @@ static struct configfs_subsystem simple_
  * a new simple_children group.  That group can then have simple_child
  * children of its own.
  */
-
-struct simple_children {
-       struct config_group group;
-};
 
 static struct config_group *group_children_make_group(struct config_group 
*group, const char *name)
 {
diff -r c875b3d2c5e5 -r 29fd5adfdc07 Documentation/filesystems/ext3.txt
--- a/Documentation/filesystems/ext3.txt        Mon Aug 07 17:39:11 2006 -0400
+++ b/Documentation/filesystems/ext3.txt        Mon Aug 07 18:15:57 2006 -0400
@@ -113,6 +113,14 @@ grpquota
 grpquota
 usrquota
 
+bh             (*)     ext3 associates buffer heads to data pages to
+nobh                   (a) cache disk block mapping information
+                       (b) link pages into transaction to provide
+                           ordering guarantees.
+                       "bh" option forces use of buffer heads.
+                       "nobh" option tries to avoid associating buffer
+                       heads (supported only for "writeback" mode).
+
 
 Specification
 =============
diff -r c875b3d2c5e5 -r 29fd5adfdc07 Documentation/filesystems/fuse.txt
--- a/Documentation/filesystems/fuse.txt        Mon Aug 07 17:39:11 2006 -0400
+++ b/Documentation/filesystems/fuse.txt        Mon Aug 07 18:15:57 2006 -0400
@@ -17,6 +17,14 @@ Non-privileged mount (or user mount):
   The filesystem daemon is running with the privileges of the mounting
   user.  NOTE: this is not the same as mounts allowed with the "user"
   option in /etc/fstab, which is not discussed here.
+
+Filesystem connection:
+
+  A connection between the filesystem daemon and the kernel.  The
+  connection exists until either the daemon dies, or the filesystem is
+  umounted.  Note that detaching (or lazy umounting) the filesystem
+  does _not_ break the connection, in this case it will exist until
+  the last reference to the filesystem is released.
 
 Mount owner:
 
@@ -86,16 +94,20 @@ Mount options
   The default is infinite.  Note that the size of read requests is
   limited anyway to 32 pages (which is 128kbyte on i386).
 
-Sysfs
-~~~~~
-
-FUSE sets up the following hierarchy in sysfs:
-
-  /sys/fs/fuse/connections/N/
-
-where N is an increasing number allocated to each new connection.
-
-For each connection the following attributes are defined:
+Control filesystem
+~~~~~~~~~~~~~~~~~~
+
+There's a control filesystem for FUSE, which can be mounted by:
+
+  mount -t fusectl none /sys/fs/fuse/connections
+
+Mounting it under the '/sys/fs/fuse/connections' directory makes it
+backwards compatible with earlier versions.
+
+Under the fuse control filesystem each connection has a directory
+named by a unique number.
+
+For each connection the following files exist within this directory:
 
  'waiting'
 
@@ -110,7 +122,47 @@ For each connection the following attrib
   connection.  This means that all waiting requests will be aborted an
   error returned for all aborted and new requests.
 
-Only a privileged user may read or write these attributes.
+Only the owner of the mount may read or write these files.
+
+Interrupting filesystem operations
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+If a process issuing a FUSE filesystem request is interrupted, the
+following will happen:
+
+  1) If the request is not yet sent to userspace AND the signal is
+     fatal (SIGKILL or unhandled fatal signal), then the request is
+     dequeued and returns immediately.
+
+  2) If the request is not yet sent to userspace AND the signal is not
+     fatal, then an 'interrupted' flag is set for the request.  When
+     the request has been successfully transfered to userspace and
+     this flag is set, an INTERRUPT request is queued.
+
+  3) If the request is already sent to userspace, then an INTERRUPT
+     request is queued.
+
+INTERRUPT requests take precedence over other requests, so the
+userspace filesystem will receive queued INTERRUPTs before any others.
+
+The userspace filesystem may ignore the INTERRUPT requests entirely,
+or may honor them by sending a reply to the _original_ request, with
+the error set to EINTR.
+
+It is also possible that there's a race between processing the
+original request and it's INTERRUPT request.  There are two possibilities:
+
+  1) The INTERRUPT request is processed before the original request is
+     processed
+
+  2) The INTERRUPT request is processed after the original request has
+     been answered
+
+If the filesystem cannot find the original request, it should wait for
+some timeout and/or a number of new requests to arrive, after which it
+should reply to the INTERRUPT request with an EAGAIN error.  In case
+1) the INTERRUPT request will be requeued.  In case 2) the INTERRUPT
+reply will be ignored.
 
 Aborting a filesystem connection
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -139,8 +191,8 @@ the filesystem.  There are several ways 
   - Use forced umount (umount -f).  Works in all cases but only if
     filesystem is still attached (it hasn't been lazy unmounted)
 
-  - Abort filesystem through the sysfs interface.  Most powerful
-    method, always works.
+  - Abort filesystem through the FUSE control filesystem.  Most
+    powerful method, always works.
 
 How do non-privileged mounts work?
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -304,25 +356,7 @@ Scenario 1 -  Simple deadlock
  |                                    |     for "file"]
  |                                    |    *DEADLOCK*
 
-The solution for this is to allow requests to be interrupted while
-they are in userspace:
-
- |      [interrupted by signal]       |
- |    <fuse_unlink()                  |
- |    [release semaphore]             |    [semaphore acquired]
- |  <sys_unlink()                     |
- |                                    |    >fuse_unlink()
- |                                    |      [queue req on fc->pending]
- |                                    |      [wake up fc->waitq]
- |                                    |      [sleep on req->waitq]
-
-If the filesystem daemon was single threaded, this will stop here,
-since there's no other thread to dequeue and execute the request.
-In this case the solution is to kill the FUSE daemon as well.  If
-there are multiple serving threads, you just have to kill them as
-long as any remain.
-
-Moral: a filesystem which deadlocks, can soon find itself dead.
+The solution for this is to allow the filesystem to be aborted.
 
 Scenario 2 - Tricky deadlock
 ----------------------------
@@ -355,24 +389,14 @@ but is caused by a pagefault.
  |                                    |           [lock page]
  |                                    |           * DEADLOCK *
 
-Solution is again to let the the request be interrupted (not
-elaborated further).
-
-An additional problem is that while the write buffer is being
-copied to the request, the request must not be interrupted.  This
-is because the destination address of the copy may not be valid
-after the request is interrupted.
-
-This is solved with doing the copy atomically, and allowing
-interruption while the page(s) belonging to the write buffer are
-faulted with get_user_pages().  The 'req->locked' flag indicates
-when the copy is taking place, and interruption is delayed until
-this flag is unset.
-
-Scenario 3 - Tricky deadlock with asynchronous read
----------------------------------------------------
-
-The same situation as above, except thread-1 will wait on page lock
-and hence it will be uninterruptible as well.  The solution is to
-abort the connection with forced umount (if mount is attached) or
-through the abort attribute in sysfs.
+Solution is basically the same as above.
+
+An additional problem is that while the write buffer is being copied
+to the request, the request must not be interrupted/aborted.  This is
+because the destination address of the copy may not be valid after the
+request has returned.
+
+This is solved with doing the copy atomically, and allowing abort
+while the page(s) belonging to the write buffer are faulted with
+get_user_pages().  The 'req->locked' flag indicates when the copy is
+taking place, and abort is delayed until this flag is unset.
diff -r c875b3d2c5e5 -r 29fd5adfdc07 Documentation/filesystems/porting
--- a/Documentation/filesystems/porting Mon Aug 07 17:39:11 2006 -0400
+++ b/Documentation/filesystems/porting Mon Aug 07 18:15:57 2006 -0400
@@ -50,10 +50,11 @@ success and negative number in case of e
 success and negative number in case of error (-EINVAL unless you have more
 informative error value to report).  Call it foo_fill_super().  Now declare
 
-struct super_block foo_get_sb(struct file_system_type *fs_type,
-       int flags, const char *dev_name, void *data)
+int foo_get_sb(struct file_system_type *fs_type,
+       int flags, const char *dev_name, void *data, struct vfsmount *mnt)
 {
-       return get_sb_bdev(fs_type, flags, dev_name, data, ext2_fill_super);
+       return get_sb_bdev(fs_type, flags, dev_name, data, foo_fill_super,
+                          mnt);
 }
 
 (or similar with s/bdev/nodev/ or s/bdev/single/, depending on the kind of
diff -r c875b3d2c5e5 -r 29fd5adfdc07 
Documentation/filesystems/ramfs-rootfs-initramfs.txt
--- a/Documentation/filesystems/ramfs-rootfs-initramfs.txt      Mon Aug 07 
17:39:11 2006 -0400
+++ b/Documentation/filesystems/ramfs-rootfs-initramfs.txt      Mon Aug 07 
18:15:57 2006 -0400
@@ -70,11 +70,13 @@ What is rootfs?
 What is rootfs?
 ---------------
 
-Rootfs is a special instance of ramfs, which is always present in 2.6 systems.
-(It's used internally as the starting and stopping point for searches of the
-kernel's doubly-linked list of mount points.)
-
-Most systems just mount another filesystem over it and ignore it.  The
+Rootfs is a special instance of ramfs (or tmpfs, if that's enabled), which is
+always present in 2.6 systems.  You can't unmount rootfs for approximately the
+same reason you can't kill the init process; rather than having special code
+to check for and handle an empty list, it's smaller and simpler for the kernel
+to just make sure certain lists can't become empty.
+
+Most systems just mount another filesystem over rootfs and ignore it.  The
 amount of space an empty instance of ramfs takes up is tiny.
 
 What is initramfs?
@@ -92,14 +94,16 @@ out of that.
 
 All this differs from the old initrd in several ways:
 
-  - The old initrd was a separate file, while the initramfs archive is linked
-    into the linux kernel image.  (The directory linux-*/usr is devoted to
-    generating this archive during the build.)
+  - The old initrd was always a separate file, while the initramfs archive is
+    linked into the linux kernel image.  (The directory linux-*/usr is devoted
+    to generating this archive during the build.)
 
   - The old initrd file was a gzipped filesystem image (in some file format,
-    such as ext2, that had to be built into the kernel), while the new
+    such as ext2, that needed a driver built into the kernel), while the new
     initramfs archive is a gzipped cpio archive (like tar only simpler,
-    see cpio(1) and Documentation/early-userspace/buffer-format.txt).
+    see cpio(1) and Documentation/early-userspace/buffer-format.txt).  The
+    kernel's cpio extraction code is not only extremely small, it's also
+    __init data that can be discarded during the boot process.
 
   - The program run by the old initrd (which was called /initrd, not /init) did
     some setup and then returned to the kernel, while the init program from
@@ -124,13 +128,14 @@ Populating initramfs:
 
 The 2.6 kernel build process always creates a gzipped cpio format initramfs
 archive and links it into the resulting kernel binary.  By default, this
-archive is empty (consuming 134 bytes on x86).  The config option
-CONFIG_INITRAMFS_SOURCE (for some reason buried under devices->block devices
-in menuconfig, and living in usr/Kconfig) can be used to specify a source for
-the initramfs archive, which will automatically be incorporated into the
-resulting binary.  This option can point to an existing gzipped cpio archive, a
-directory containing files to be archived, or a text file specification such
-as the following example:
+archive is empty (consuming 134 bytes on x86).
+
+The config option CONFIG_INITRAMFS_SOURCE (for some reason buried under
+devices->block devices in menuconfig, and living in usr/Kconfig) can be used
+to specify a source for the initramfs archive, which will automatically be
+incorporated into the resulting binary.  This option can point to an existing
+gzipped cpio archive, a directory containing files to be archived, or a text
+file specification such as the following example:
 
   dir /dev 755 0 0
   nod /dev/console 644 0 0 c 5 1
@@ -146,23 +151,84 @@ Run "usr/gen_init_cpio" (after the kerne
 Run "usr/gen_init_cpio" (after the kernel build) to get a usage message
 documenting the above file format.
 
-One advantage of the text file is that root access is not required to
+One advantage of the configuration file is that root access is not required to
 set permissions or create device nodes in the new archive.  (Note that those
 two example "file" entries expect to find files named "init.sh" and "busybox" 
in
 a directory called "initramfs", under the linux-2.6.* directory.  See
 Documentation/early-userspace/README for more details.)
 
-The kernel does not depend on external cpio tools, gen_init_cpio is created
-from usr/gen_init_cpio.c which is entirely self-contained, and the kernel's
-boot-time extractor is also (obviously) self-contained.  However, if you _do_
-happen to have cpio installed, the following command line can extract the
-generated cpio image back into its component files:
+The kernel does not depend on external cpio tools.  If you specify a
+directory instead of a configuration file, the kernel's build infrastructure
+creates a configuration file from that directory (usr/Makefile calls
+scripts/gen_initramfs_list.sh), and proceeds to package up that directory
+using the config file (by feeding it to usr/gen_init_cpio, which is created
+from usr/gen_init_cpio.c).  The kernel's build-time cpio creation code is
+entirely self-contained, and the kernel's boot-time extractor is also
+(obviously) self-contained.
+
+The one thing you might need external cpio utilities installed for is creating
+or extracting your own preprepared cpio files to feed to the kernel build
+(instead of a config file or directory).
+
+The following command line can extract a cpio image (either by the above script
+or by the kernel build) back into its component files:
 
   cpio -i -d -H newc -F initramfs_data.cpio --no-absolute-filenames
+
+The following shell script can create a prebuilt cpio archive you can
+use in place of the above config file:
+
+  #!/bin/sh
+
+  # Copyright 2006 Rob Landley <rob@xxxxxxxxxxx> and TimeSys Corporation.
+  # Licensed under GPL version 2
+
+  if [ $# -ne 2 ]
+  then
+    echo "usage: mkinitramfs directory imagename.cpio.gz"
+    exit 1
+  fi
+
+  if [ -d "$1" ]
+  then
+    echo "creating $2 from $1"
+    (cd "$1"; find . | cpio -o -H newc | gzip) > "$2"
+  else
+    echo "First argument must be a directory"
+    exit 1
+  fi
+
+Note: The cpio man page contains some bad advice that will break your initramfs
+archive if you follow it.  It says "A typical way to generate the list
+of filenames is with the find command; you should give find the -depth option
+to minimize problems with permissions on directories that are unwritable or not
+searchable."  Don't do this when creating initramfs.cpio.gz images, it won't
+work.  The Linux kernel cpio extractor won't create files in a directory that
+doesn't exist, so the directory entries must go before the files that go in
+those directories.  The above script gets them in the right order.
+
+External initramfs images:
+--------------------------
+
+If the kernel has initrd support enabled, an external cpio.gz archive can also
+be passed into a 2.6 kernel in place of an initrd.  In this case, the kernel
+will autodetect the type (initramfs, not initrd) and extract the external cpio
+archive into rootfs before trying to run /init.
+
+This has the memory efficiency advantages of initramfs (no ramdisk block
+device) but the separate packaging of initrd (which is nice if you have
+non-GPL code you'd like to run from initramfs, without conflating it with
+the GPL licensed Linux kernel binary).
+
+It can also be used to supplement the kernel's built-in initamfs image.  The
+files in the external archive will overwrite any conflicting files in
+the built-in initramfs archive.  Some distributors also prefer to customize
+a single kernel image with task-specific initramfs images, without recompiling.
 
 Contents of initramfs:
 ----------------------
 
+An initramfs archive is a complete self-contained root filesystem for Linux.
 If you don't already understand what shared libraries, devices, and paths
 you need to get a minimal root filesystem up and running, here are some
 references:
@@ -176,12 +242,35 @@ code against, along with some related ut
 
 I use uClibc (http://www.uclibc.org) and busybox (http://www.busybox.net)
 myself.  These are LGPL and GPL, respectively.  (A self-contained initramfs
-package is planned for the busybox 1.2 release.)
+package is planned for the busybox 1.3 release.)
 
 In theory you could use glibc, but that's not well suited for small embedded
 uses like this.  (A "hello world" program statically linked against glibc is
 over 400k.  With uClibc it's 7k.  Also note that glibc dlopens libnss to do
 name lookups, even when otherwise statically linked.)
+
+A good first step is to get initramfs to run a statically linked "hello world"
+program as init, and test it under an emulator like qemu (www.qemu.org) or
+User Mode Linux, like so:
+
+  cat > hello.c << EOF
+  #include <stdio.h>
+  #include <unistd.h>
+
+  int main(int argc, char *argv[])
+  {
+    printf("Hello world!\n");
+    sleep(999999999);
+  }
+  EOF
+  gcc -static hello2.c -o init
+  echo init | cpio -o -H newc | gzip > test.cpio.gz
+  # Testing external initramfs using the initrd loading mechanism.
+  qemu -kernel /boot/vmlinuz -initrd test.cpio.gz /dev/zero
+
+When debugging a normal root filesystem, it's nice to be able to boot with
+"init=/bin/sh".  The initramfs equivalent is "rdinit=/bin/sh", and it's
+just as useful.
 
 Why cpio rather than tar?
 -------------------------
@@ -241,7 +330,7 @@ Future directions:
 Future directions:
 ------------------
 
-Today (2.6.14), initramfs is always compiled in, but not always used.  The
+Today (2.6.16), initramfs is always compiled in, but not always used.  The
 kernel falls back to legacy boot code that is reached only if initramfs does
 not contain an /init program.  The fallback is legacy code, there to ensure a
 smooth transition and allowing early boot functionality to gradually move to
@@ -258,8 +347,9 @@ and so on.
 
 This kind of complexity (which inevitably includes policy) is rightly handled
 in userspace.  Both klibc and busybox/uClibc are working on simple initramfs
-packages to drop into a kernel build, and when standard solutions are ready
-and widely deployed, the kernel's legacy early boot code will become obsolete
-and a candidate for the feature removal schedule.
-
-But that's a while off yet.
+packages to drop into a kernel build.
+
+The klibc package has now been accepted into Andrew Morton's 2.6.17-mm tree.
+The kernel's current early boot code (partition detection, etc) will probably
+be migrated into a default initramfs, automatically created and used by the
+kernel build.
diff -r c875b3d2c5e5 -r 29fd5adfdc07 Documentation/filesystems/vfs.txt
--- a/Documentation/filesystems/vfs.txt Mon Aug 07 17:39:11 2006 -0400
+++ b/Documentation/filesystems/vfs.txt Mon Aug 07 18:15:57 2006 -0400
@@ -113,8 +113,8 @@ struct file_system_type {
 struct file_system_type {
        const char *name;
        int fs_flags;
-        struct super_block *(*get_sb) (struct file_system_type *, int,
-                                       const char *, void *);
+        struct int (*get_sb) (struct file_system_type *, int,
+                              const char *, void *, struct vfsmount *);
         void (*kill_sb) (struct super_block *);
         struct module *owner;
         struct file_system_type * next;
@@ -211,7 +211,7 @@ struct super_operations {
         int (*sync_fs)(struct super_block *sb, int wait);
         void (*write_super_lockfs) (struct super_block *);
         void (*unlockfs) (struct super_block *);
-        int (*statfs) (struct super_block *, struct kstatfs *);
+        int (*statfs) (struct dentry *, struct kstatfs *);
         int (*remount_fs) (struct super_block *, int *, char *);
         void (*clear_inode) (struct inode *);
         void (*umount_begin) (struct super_block *);
diff -r c875b3d2c5e5 -r 29fd5adfdc07 Documentation/initrd.txt
--- a/Documentation/initrd.txt  Mon Aug 07 17:39:11 2006 -0400
+++ b/Documentation/initrd.txt  Mon Aug 07 18:15:57 2006 -0400
@@ -67,8 +67,7 @@ initrd adds the following new options:
     as the last process has closed it, all data is freed and /dev/initrd
     can't be opened anymore.
 
-  root=/dev/ram0   (without devfs)
-  root=/dev/rd/0   (with devfs)
+  root=/dev/ram0
 
     initrd is mounted as root, and the normal boot procedure is followed,
     with the RAM disk still mounted as root.
@@ -90,8 +89,7 @@ procedure should create the /initrd dire
 procedure should create the /initrd directory.
 
 If initrd will not be mounted in some cases, its content is still
-accessible if the following device has been created (note that this
-does not work if using devfs):
+accessible if the following device has been created:
 
 # mknod /dev/initrd b 1 250 
 # chmod 400 /dev/initrd
@@ -119,8 +117,7 @@ We'll describe the loopback device metho
     (if space is critical, you may want to use the Minix FS instead of Ext2)
  3) mount the file system, e.g.
     # mount -t ext2 -o loop initrd /mnt
- 4) create the console device (not necessary if using devfs, but it can't
-    hurt to do it anyway):
+ 4) create the console device:
     # mkdir /mnt/dev
     # mknod /mnt/dev/console c 5 1
  5) copy all the files that are needed to properly use the initrd
@@ -152,12 +149,7 @@ have to be given:
 
   root=/dev/ram0 init=/linuxrc rw
 
-if not using devfs, or
-
-  root=/dev/rd/0 init=/linuxrc rw
-
-if using devfs. (rw is only necessary if writing to the initrd file
-system.)
+(rw is only necessary if writing to the initrd file system.)
 
 With LOADLIN, you simply execute
 
@@ -217,9 +209,9 @@ following command:
 # exec chroot . what-follows <dev/console >dev/console 2>&1
 
 Where what-follows is a program under the new root, e.g. /sbin/init
-If the new root file system will be used with devfs and has no valid
-/dev directory, devfs must be mounted before invoking chroot in order to
-provide /dev/console.
+If the new root file system will be used with udev and has no valid
+/dev directory, udev must be initialized before invoking chroot in order
+to provide /dev/console.
 
 Note: implementation details of pivot_root may change with time. In order
 to ensure compatibility, the following points should be observed:
@@ -236,7 +228,7 @@ disk can be freed:
 disk can be freed:
 
 # umount /initrd
-# blockdev --flushbufs /dev/ram0    # /dev/rd/0 if using devfs
+# blockdev --flushbufs /dev/ram0
 
 It is also possible to use initrd with an NFS-mounted root, see the
 pivot_root(8) man page for details.
diff -r c875b3d2c5e5 -r 29fd5adfdc07 Documentation/ioctl-number.txt
--- a/Documentation/ioctl-number.txt    Mon Aug 07 17:39:11 2006 -0400
+++ b/Documentation/ioctl-number.txt    Mon Aug 07 18:15:57 2006 -0400
@@ -85,7 +85,9 @@ 0x22  all     scsi/sg.h
                                        <mailto:maassen@xxxxxxxxxxxxxxx>
 'C'    all     linux/soundcard.h
 'D'    all     asm-s390/dasd.h
+'E'    all     linux/input.h
 'F'    all     linux/fb.h
+'H'    all     linux/hiddev.h
 'I'    all     linux/isdn.h
 'J'    00-1F   drivers/scsi/gdth_ioctl.h
 'K'    all     linux/kd.h
@@ -117,7 +119,6 @@ 0x22        all     scsi/sg.h
 'c'    00-7F   linux/comstats.h        conflict!
 'c'    00-7F   linux/coda.h            conflict!
 'd'    00-FF   linux/char/drm/drm/h    conflict!
-'d'    00-1F   linux/devfs_fs.h        conflict!
 'd'    00-DF   linux/video_decoder.h   conflict!
 'd'    F0-FF   linux/digi1.h
 'e'    all     linux/digi1.h           conflict!
diff -r c875b3d2c5e5 -r 29fd5adfdc07 Documentation/kbuild/makefiles.txt
--- a/Documentation/kbuild/makefiles.txt        Mon Aug 07 17:39:11 2006 -0400
+++ b/Documentation/kbuild/makefiles.txt        Mon Aug 07 18:15:57 2006 -0400
@@ -1123,6 +1123,14 @@ The top Makefile exports the following v
        $(INSTALL_MOD_PATH)/lib/modules/$(KERNELRELEASE).  The user may
        override this value on the command line if desired.
 
+    INSTALL_MOD_STRIP
+
+       If this variable is specified, will cause modules to be stripped
+       after they are installed.  If INSTALL_MOD_STRIP is '1', then the
+       default option --strip-debug will be used.  Otherwise,
+       INSTALL_MOD_STRIP will used as the option(s) to the strip command.
+
+
 === 8 Makefile language
 
 The kernel Makefiles are designed to run with GNU Make.  The Makefiles
diff -r c875b3d2c5e5 -r 29fd5adfdc07 Documentation/kdump/gdbmacros.txt
--- a/Documentation/kdump/gdbmacros.txt Mon Aug 07 17:39:11 2006 -0400
+++ b/Documentation/kdump/gdbmacros.txt Mon Aug 07 18:15:57 2006 -0400
@@ -175,7 +175,7 @@ document trapinfo
 document trapinfo
        Run info threads and lookup pid of thread #1
        'trapinfo <pid>' will tell you by which trap & possibly
-       addresthe kernel paniced.
+       address the kernel panicked.
 end
 
 
diff -r c875b3d2c5e5 -r 29fd5adfdc07 Documentation/kdump/kdump.txt
--- a/Documentation/kdump/kdump.txt     Mon Aug 07 17:39:11 2006 -0400
+++ b/Documentation/kdump/kdump.txt     Mon Aug 07 18:15:57 2006 -0400
@@ -1,155 +1,325 @@ Documentation for kdump - the kexec-base
-Documentation for kdump - the kexec-based crash dumping solution
 ================================================================
-
-DESIGN
-======
-
-Kdump uses kexec to reboot to a second kernel whenever a dump needs to be
-taken. This second kernel is booted with very little memory. The first kernel
-reserves the section of memory that the second kernel uses. This ensures that
-on-going DMA from the first kernel does not corrupt the second kernel.
-
-All the necessary information about Core image is encoded in ELF format and
-stored in reserved area of memory before crash. Physical address of start of
-ELF header is passed to new kernel through command line parameter elfcorehdr=.
-
-On i386, the first 640 KB of physical memory is needed to boot, irrespective
-of where the kernel loads. Hence, this region is backed up by kexec just before
-rebooting into the new kernel.
-
-In the second kernel, "old memory" can be accessed in two ways.
-
-- The first one is through a /dev/oldmem device interface. A capture utility
-  can read the device file and write out the memory in raw format. This is raw
-  dump of memory and analysis/capture tool should be intelligent enough to
-  determine where to look for the right information. ELF headers (elfcorehdr=)
-  can become handy here.
-
-- The second interface is through /proc/vmcore. This exports the dump as an ELF
-  format file which can be written out using any file copy command
-  (cp, scp, etc). Further, gdb can be used to perform limited debugging on
-  the dump file. This method ensures methods ensure that there is correct
-  ordering of the dump pages (corresponding to the first 640 KB that has been
-  relocated).
-
-SETUP
+Documentation for Kdump - The kexec-based Crash Dumping Solution
+================================================================
+
+This document includes overview, setup and installation, and analysis
+information.
+
+Overview
+========
+
+Kdump uses kexec to quickly boot to a dump-capture kernel whenever a
+dump of the system kernel's memory needs to be taken (for example, when
+the system panics). The system kernel's memory image is preserved across
+the reboot and is accessible to the dump-capture kernel.
+
+You can use common Linux commands, such as cp and scp, to copy the
+memory image to a dump file on the local disk, or across the network to
+a remote system.
+
+Kdump and kexec are currently supported on the x86, x86_64, and ppc64
+architectures.
+
+When the system kernel boots, it reserves a small section of memory for
+the dump-capture kernel. This ensures that ongoing Direct Memory Access
+(DMA) from the system kernel does not corrupt the dump-capture kernel.
+The kexec -p command loads the dump-capture kernel into this reserved
+memory.
+
+On x86 machines, the first 640 KB of physical memory is needed to boot,
+regardless of where the kernel loads. Therefore, kexec backs up this
+region just before rebooting into the dump-capture kernel.
+
+All of the necessary information about the system kernel's core image is
+encoded in the ELF format, and stored in a reserved area of memory
+before a crash. The physical address of the start of the ELF header is
+passed to the dump-capture kernel through the elfcorehdr= boot
+parameter.
+
+With the dump-capture kernel, you can access the memory image, or "old
+memory," in two ways:
+
+- Through a /dev/oldmem device interface. A capture utility can read the
+  device file and write out the memory in raw format. This is a raw dump
+  of memory. Analysis and capture tools must be intelligent enough to
+  determine where to look for the right information.
+
+- Through /proc/vmcore. This exports the dump as an ELF-format file that
+  you can write out using file copy commands such as cp or scp. Further,
+  you can use analysis tools such as the GNU Debugger (GDB) and the Crash
+  tool to debug the dump file. This method ensures that the dump pages are
+  correctly ordered.
+
+
+Setup and Installation
+======================
+
+Install kexec-tools and the Kdump patch
+---------------------------------------
+
+1) Login as the root user.
+
+2) Download the kexec-tools user-space package from the following URL:
+
+   http://www.xmission.com/~ebiederm/files/kexec/kexec-tools-1.101.tar.gz
+
+3) Unpack the tarball with the tar command, as follows:
+
+   tar xvpzf kexec-tools-1.101.tar.gz
+
+4) Download the latest consolidated Kdump patch from the following URL:
+
+   http://lse.sourceforge.net/kdump/
+
+   (This location is being used until all the user-space Kdump patches
+   are integrated with the kexec-tools package.)
+
+5) Change to the kexec-tools-1.101 directory, as follows:
+
+   cd kexec-tools-1.101
+
+6) Apply the consolidated patch to the kexec-tools-1.101 source tree
+   with the patch command, as follows. (Modify the path to the downloaded
+   patch as necessary.)
+
+   patch -p1 < /path-to-kdump-patch/kexec-tools-1.101-kdump.patch
+
+7) Configure the package, as follows:
+
+   ./configure
+
+8) Compile the package, as follows:
+
+   make
+
+9) Install the package, as follows:
+
+   make install
+
+
+Download and build the system and dump-capture kernels
+------------------------------------------------------
+
+Download the mainline (vanilla) kernel source code (2.6.13-rc1 or newer)
+from http://www.kernel.org. Two kernels must be built: a system kernel
+and a dump-capture kernel. Use the following steps to configure these
+kernels with the necessary kexec and Kdump features:
+
+System kernel
+-------------
+
+1) Enable "kexec system call" in "Processor type and features."
+
+   CONFIG_KEXEC=y
+
+2) Enable "sysfs file system support" in "Filesystem" -> "Pseudo
+   filesystems." This is usually enabled by default.
+
+   CONFIG_SYSFS=y
+
+   Note that "sysfs file system support" might not appear in the "Pseudo
+   filesystems" menu if "Configure standard kernel features (for small
+   systems)" is not enabled in "General Setup." In this case, check the
+   .config file itself to ensure that sysfs is turned on, as follows:
+
+   grep 'CONFIG_SYSFS' .config
+
+3) Enable "Compile the kernel with debug info" in "Kernel hacking."
+
+   CONFIG_DEBUG_INFO=Y
+
+   This causes the kernel to be built with debug symbols. The dump
+   analysis tools require a vmlinux with debug symbols in order to read
+   and analyze a dump file.
+
+4) Make and install the kernel and its modules. Update the boot loader
+   (such as grub, yaboot, or lilo) configuration files as necessary.
+
+5) Boot the system kernel with the boot parameter "crashkernel=Y@X",
+   where Y specifies how much memory to reserve for the dump-capture kernel
+   and X specifies the beginning of this reserved memory. For example,
+   "crashkernel=64M@16M" tells the system kernel to reserve 64 MB of memory
+   starting at physical address 0x01000000 for the dump-capture kernel.
+
+   On x86 and x86_64, use "crashkernel=64M@16M".
+
+   On ppc64, use "crashkernel=128M@32M".
+
+
+The dump-capture kernel
+-----------------------
+
+1) Under "General setup," append "-kdump" to the current string in
+   "Local version."
+
+2) On x86, enable high memory support under "Processor type and
+   features":
+
+   CONFIG_HIGHMEM64G=y
+   or
+   CONFIG_HIGHMEM4G
+
+3) On x86 and x86_64, disable symmetric multi-processing support
+   under "Processor type and features":
+
+   CONFIG_SMP=n
+   (If CONFIG_SMP=y, then specify maxcpus=1 on the kernel command line
+   when loading the dump-capture kernel, see section "Load the Dump-capture
+   Kernel".)
+
+4) On ppc64, disable NUMA support and enable EMBEDDED support:
+
+   CONFIG_NUMA=n
+   CONFIG_EMBEDDED=y
+   CONFIG_EEH=N for the dump-capture kernel
+
+5) Enable "kernel crash dumps" support under "Processor type and
+   features":
+
+   CONFIG_CRASH_DUMP=y
+
+6) Use a suitable value for "Physical address where the kernel is
+   loaded" (under "Processor type and features"). This only appears when
+   "kernel crash dumps" is enabled. By default this value is 0x1000000
+   (16MB). It should be the same as X in the "crashkernel=Y@X" boot
+   parameter discussed above.
+
+   On x86 and x86_64, use "CONFIG_PHYSICAL_START=0x1000000".
+
+   On ppc64 the value is automatically set at 32MB when
+   CONFIG_CRASH_DUMP is set.
+
+6) Optionally enable "/proc/vmcore support" under "Filesystems" ->
+   "Pseudo filesystems".
+
+   CONFIG_PROC_VMCORE=y
+   (CONFIG_PROC_VMCORE is set by default when CONFIG_CRASH_DUMP is selected.)
+
+7) Make and install the kernel and its modules. DO NOT add this kernel
+   to the boot loader configuration files.
+
+
+Load the Dump-capture Kernel
+============================
+
+After booting to the system kernel, load the dump-capture kernel using
+the following command:
+
+   kexec -p <dump-capture-kernel> \
+   --initrd=<initrd-for-dump-capture-kernel> --args-linux \
+   --append="root=<root-dev> init 1 irqpoll"
+
+
+Notes on loading the dump-capture kernel:
+
+* <dump-capture-kernel> must be a vmlinux image (that is, an
+  uncompressed ELF image). bzImage does not work at this time.
+
+* By default, the ELF headers are stored in ELF64 format to support
+  systems with more than 4GB memory. The --elf32-core-headers option can
+  be used to force the generation of ELF32 headers. This is necessary
+  because GDB currently cannot open vmcore files with ELF64 headers on
+  32-bit systems. ELF32 headers can be used on non-PAE systems (that is,
+  less than 4GB of memory).
+
+* The "irqpoll" boot parameter reduces driver initialization failures
+  due to shared interrupts in the dump-capture kernel.
+
+* You must specify <root-dev> in the format corresponding to the root
+  device name in the output of mount command.
+
+* "init 1" boots the dump-capture kernel into single-user mode without
+  networking. If you want networking, use "init 3."
+
+
+Kernel Panic
+============
+
+After successfully loading the dump-capture kernel as previously
+described, the system will reboot into the dump-capture kernel if a
+system crash is triggered.  Trigger points are located in panic(),
+die(), die_nmi() and in the sysrq handler (ALT-SysRq-c).
+
+The following conditions will execute a crash trigger point:
+
+If a hard lockup is detected and "NMI watchdog" is configured, the system
+will boot into the dump-capture kernel ( die_nmi() ).
+
+If die() is called, and it happens to be a thread with pid 0 or 1, or die()
+is called inside interrupt context or die() is called and panic_on_oops is set,
+the system will boot into the dump-capture kernel.
+
+On powererpc systems when a soft-reset is generated, die() is called by all 
cpus and the system system will boot into the dump-capture kernel.
+
+For testing purposes, you can trigger a crash by using "ALT-SysRq-c",
+"echo c > /proc/sysrq-trigger or write a module to force the panic.
+
+Write Out the Dump File
+=======================
+
+After the dump-capture kernel is booted, write out the dump file with
+the following command:
+
+   cp /proc/vmcore <dump-file>
+
+You can also access dumped memory as a /dev/oldmem device for a linear
+and raw view. To create the device, use the following command:
+
+    mknod /dev/oldmem c 1 12
+
+Use the dd command with suitable options for count, bs, and skip to
+access specific portions of the dump.
+
+To see the entire memory, use the following command:
+
+   dd if=/dev/oldmem of=oldmem.001
+
+
+Analysis
+========
+
+Before analyzing the dump image, you should reboot into a stable kernel.
+
+You can do limited analysis using GDB on the dump file copied out of
+/proc/vmcore. Use the debug vmlinux built with -g and run the following
+command:
+
+   gdb vmlinux <dump-file>
+
+Stack trace for the task on processor 0, register display, and memory
+display work fine.
+
+Note: GDB cannot analyze core files generated in ELF64 format for x86.
+On systems with a maximum of 4GB of memory, you can generate
+ELF32-format headers using the --elf32-core-headers kernel option on the
+dump kernel.
+
+You can also use the Crash utility to analyze dump files in Kdump
+format. Crash is available on Dave Anderson's site at the following URL:
+
+   http://people.redhat.com/~anderson/
+
+
+To Do
 =====
 
-1) Download the upstream kexec-tools userspace package from
-   http://www.xmission.com/~ebiederm/files/kexec/kexec-tools-1.101.tar.gz.
-
-   Apply the latest consolidated kdump patch on top of kexec-tools-1.101
-   from http://lse.sourceforge.net/kdump/. This arrangment has been made
-   till all the userspace patches supporting kdump are integrated with
-   upstream kexec-tools userspace.
-
-2) Download and build the appropriate (2.6.13-rc1 onwards) vanilla kernels.
-   Two kernels need to be built in order to get this feature working.
-   Following are the steps to properly configure the two kernels specific
-   to kexec and kdump features:
-
-  A) First kernel or regular kernel:
-  ----------------------------------
-   a) Enable "kexec system call" feature (in Processor type and features).
-      CONFIG_KEXEC=y
-   b) Enable "sysfs file system support" (in Pseudo filesystems).
-      CONFIG_SYSFS=y
-   c) make
-   d) Boot into first kernel with the command line parameter "crashkernel=Y@X".
-      Use appropriate values for X and Y. Y denotes how much memory to reserve
-      for the second kernel, and X denotes at what physical address the
-      reserved memory section starts. For example: "crashkernel=64M@16M".
-
-
-  B) Second kernel or dump capture kernel:
-  ---------------------------------------
-   a) For i386 architecture enable Highmem support
-      CONFIG_HIGHMEM=y
-   b) Enable "kernel crash dumps" feature (under "Processor type and features")
-      CONFIG_CRASH_DUMP=y
-   c) Make sure a suitable value for "Physical address where the kernel is
-      loaded" (under "Processor type and features"). By default this value
-      is 0x1000000 (16MB) and it should be same as X (See option d above),
-      e.g., 16 MB or 0x1000000.
-      CONFIG_PHYSICAL_START=0x1000000
-   d) Enable "/proc/vmcore support" (Optional, under "Pseudo filesystems").
-      CONFIG_PROC_VMCORE=y
-
-3) After booting to regular kernel or first kernel, load the second kernel
-   using the following command:
-
-   kexec -p <second-kernel> --args-linux --elf32-core-headers
-   --append="root=<root-dev> init 1 irqpoll maxcpus=1"
-
-   Notes:
-   ======
-     i) <second-kernel> has to be a vmlinux image ie uncompressed elf image.
-        bzImage will not work, as of now.
-    ii) --args-linux has to be speicfied as if kexec it loading an elf image,
-        it needs to know that the arguments supplied are of linux type.
-   iii) By default ELF headers are stored in ELF64 format to support systems
-        with more than 4GB memory. Option --elf32-core-headers forces 
generation
-        of ELF32 headers. The reason for this option being, as of now gdb can
-        not open vmcore file with ELF64 headers on a 32 bit systems. So ELF32
-        headers can be used if one has non-PAE systems and hence memory less
-        than 4GB.
-    iv) Specify "irqpoll" as command line parameter. This reduces driver
-         initialization failures in second kernel due to shared interrupts.
-     v) <root-dev> needs to be specified in a format corresponding to the root
-        device name in the output of mount command.
-    vi) If you have built the drivers required to mount root file system as
-        modules in <second-kernel>, then, specify
-        --initrd=<initrd-for-second-kernel>.
-   vii) Specify maxcpus=1 as, if during first kernel run, if panic happens on
-        non-boot cpus, second kernel doesn't seem to be boot up all the cpus.
-        The other option is to always built the second kernel without SMP
-        support ie CONFIG_SMP=n
-
-4) After successfully loading the second kernel as above, if a panic occurs
-   system reboots into the second kernel. A module can be written to force
-   the panic or "ALT-SysRq-c" can be used initiate a crash dump for testing
-   purposes.
-
-5) Once the second kernel has booted, write out the dump file using
-
-   cp /proc/vmcore <dump-file>
-
-   Dump memory can also be accessed as a /dev/oldmem device for a linear/raw
-   view.  To create the device, type:
-
-   mknod /dev/oldmem c 1 12
-
-   Use "dd" with suitable options for count, bs and skip to access specific
-   portions of the dump.
-
-   Entire memory:  dd if=/dev/oldmem of=oldmem.001
-
-
-ANALYSIS
-========
-Limited analysis can be done using gdb on the dump file copied out of
-/proc/vmcore. Use vmlinux built with -g and run
-
-  gdb vmlinux <dump-file>
-
-Stack trace for the task on processor 0, register display, memory display
-work fine.
-
-Note: gdb cannot analyse core files generated in ELF64 format for i386.
-
-Latest "crash" (crash-4.0-2.18) as available on Dave Anderson's site
-http://people.redhat.com/~anderson/ works well with kdump format.
-
-
-TODO
-====
-1) Provide a kernel pages filtering mechanism so that core file size is not
-   insane on systems having huge memory banks.
-2) Relocatable kernel can help in maintaining multiple kernels for crashdump
-   and same kernel as the first kernel can be used to capture the dump.
-
-
-CONTACT
+1) Provide a kernel pages filtering mechanism, so core file size is not
+   extreme on systems with huge memory banks.
+
+2) Relocatable kernel can help in maintaining multiple kernels for
+   crash_dump, and the same kernel as the system kernel can be used to
+   capture the dump.
+
+
+Contact
 =======
+
 Vivek Goyal (vgoyal@xxxxxxxxxx)
 Maneesh Soni (maneesh@xxxxxxxxxx)
+
+
+Trademark
+=========
+
+Linux is a trademark of Linus Torvalds in the United States, other
+countries, or both.
diff -r c875b3d2c5e5 -r 29fd5adfdc07 Documentation/kernel-parameters.txt
--- a/Documentation/kernel-parameters.txt       Mon Aug 07 17:39:11 2006 -0400
+++ b/Documentation/kernel-parameters.txt       Mon Aug 07 18:15:57 2006 -0400
@@ -35,7 +35,6 @@ parameter is applicable:
        APM     Advanced Power Management support is enabled.
        AX25    Appropriate AX.25 support is enabled.
        CD      Appropriate CD support is enabled.
-       DEVFS   devfs support is enabled.
        DRM     Direct Rendering Management support is enabled.
        EDD     BIOS Enhanced Disk Drive Services (EDD) is enabled
        EFI     EFI Partitioning (GPT) is enabled
@@ -61,6 +60,7 @@ parameter is applicable:
        MTD     MTD support is enabled.
        NET     Appropriate network support is enabled.
        NUMA    NUMA support is enabled.
+       GENERIC_TIME The generic timeofday code is enabled.
        NFS     Appropriate NFS support is enabled.
        OSS     OSS sound support is enabled.
        PARIDE  The ParIDE subsystem is enabled.
@@ -147,6 +147,9 @@ running once the system is up.
        acpi_irq_isa=   [HW,ACPI] If irq_balance, mark listed IRQs used by ISA
                        Format: <irq>,<irq>...
 
+       acpi_os_name=   [HW,ACPI] Tell ACPI BIOS the name of the OS
+                       Format: To spoof as Windows 98: ="Microsoft Windows"
+
        acpi_osi=       [HW,ACPI] empty param disables _OSI
 
        acpi_serialize  [HW,ACPI] force serialization of AML methods
@@ -175,6 +178,11 @@ running once the system is up.
                        Allow consolidated generic hotkey driver to
                        override platform specific driver.
                        See also Documentation/acpi-hotkey.txt.
+
+       acpi_pm_good    [IA-32,X86-64]
+                       Override the pmtimer bug detection: force the kernel
+                       to assume that this machine's pmtimer latches its value
+                       and always returns good values.
 
        enable_timer_pin_1 [i386,x86-64]
                        Enable PIN 1 of APIC timer
@@ -338,10 +346,11 @@ running once the system is up.
                        Value can be changed at runtime via
                                /selinux/checkreqprot.
 
-       clock=          [BUGS=IA-32,HW] gettimeofday timesource override.
-                       Forces specified timesource (if avaliable) to be used
-                       when calculating gettimeofday(). If specicified
-                       timesource is not avalible, it defaults to PIT.
+       clock=          [BUGS=IA-32, HW] gettimeofday clocksource override.
+                       [Deprecated]
+                       Forces specified clocksource (if avaliable) to be used
+                       when calculating gettimeofday(). If specified
+                       clocksource is not avalible, it defaults to PIT.
                        Format: { pit | tsc | cyclone | pmtmr }
 
        disable_8254_timer
@@ -429,9 +438,6 @@ running once the system is up.
        decnet=         [HW,NET]
                        Format: <area>[,<node>]
                        See also Documentation/networking/decnet.txt.
-
-       devfs=          [DEVFS]
-                       See Documentation/filesystems/devfs/boot-options.
 
        dhash_entries=  [KNL]
                        Set number of hash buckets for dentry cache.
@@ -1614,6 +1620,10 @@ running once the system is up.
 
        time            Show timing data prefixed to each printk message line
 
+       clocksource=    [GENERIC_TIME] Override the default clocksource
+                       Override the default clocksource and use the clocksource
+                       with the name specified.
+
        tipar.timeout=  [HW,PPT]
                        Set communications timeout in tenths of a second
                        (default 15).
@@ -1654,6 +1664,10 @@ running once the system is up.
 
        usbhid.mousepoll=
                        [USBHID] The interval which mice are to be polled at.
+
+       vdso=           [IA-32]
+                       vdso=1: enable VDSO (default)
+                       vdso=0: disable VDSO mapping
 
        video=          [FB] Frame buffer configuration
                        See Documentation/fb/modedb.txt.
@@ -1671,9 +1685,14 @@ running once the system is up.
                        decrease the size and leave more room for directly
                        mapped kernel RAM.
 
-       vmhalt=         [KNL,S390]
-
-       vmpoff=         [KNL,S390]
+       vmhalt=         [KNL,S390] Perform z/VM CP command after system halt.
+                       Format: <command>
+
+       vmpanic=        [KNL,S390] Perform z/VM CP command after kernel panic.
+                       Format: <command>
+
+       vmpoff=         [KNL,S390] Perform z/VM CP command after power off.
+                       Format: <command>
 
        waveartist=     [HW,OSS]
                        Format: <io>,<irq>,<dma>,<dma2>
diff -r c875b3d2c5e5 -r 29fd5adfdc07 Documentation/keys-request-key.txt
--- a/Documentation/keys-request-key.txt        Mon Aug 07 17:39:11 2006 -0400
+++ b/Documentation/keys-request-key.txt        Mon Aug 07 18:15:57 2006 -0400
@@ -3,15 +3,22 @@
                              ===================
 
 The key request service is part of the key retention service (refer to
-Documentation/keys.txt). This document explains more fully how that the
-requesting algorithm works.
+Documentation/keys.txt).  This document explains more fully how the requesting
+algorithm works.
 
 The process starts by either the kernel requesting a service by calling
-request_key():
+request_key*():
 
        struct key *request_key(const struct key_type *type,
                                const char *description,
                                const char *callout_string);
+
+or:
+
+       struct key *request_key_with_auxdata(const struct key_type *type,
+                                            const char *description,
+                                            const char *callout_string,
+                                            void *aux);
 
 Or by userspace invoking the request_key system call:
 
@@ -20,14 +27,24 @@ Or by userspace invoking the request_key
                                 const char *callout_info,
                                 key_serial_t dest_keyring);
 
-The main difference between the two access points is that the in-kernel
-interface does not need to link the key to a keyring to prevent it from being
-immediately destroyed. The kernel interface returns a pointer directly to the
-key, and it's up to the caller to destroy the key.
+The main difference between the access points is that the in-kernel interface
+does not need to link the key to a keyring to prevent it from being immediately
+destroyed.  The kernel interface returns a pointer directly to the key, and
+it's up to the caller to destroy the key.
+
+The request_key_with_auxdata() call is like the in-kernel request_key() call,
+except that it permits auxiliary data to be passed to the upcaller (the default
+is NULL).  This is only useful for those key types that define their own upcall
+mechanism rather than using /sbin/request-key.
 
 The userspace interface links the key to a keyring associated with the process
 to prevent the key from going away, and returns the serial number of the key to
 the caller.
+
+
+The following example assumes that the key types involved don't define their
+own upcall mechanisms.  If they do, then those should be substituted for the
+forking and execution of /sbin/request-key.
 
 
 ===========
@@ -40,8 +57,8 @@ A request proceeds in the following mann
      interface].
 
  (2) request_key() searches the process's subscribed keyrings to see if there's
-     a suitable key there. If there is, it returns the key. If there isn't, and
-     callout_info is not set, an error is returned. Otherwise the process
+     a suitable key there.  If there is, it returns the key.  If there isn't,
+     and callout_info is not set, an error is returned.  Otherwise the process
      proceeds to the next step.
 
  (3) request_key() sees that A doesn't have the desired key yet, so it creates
@@ -62,7 +79,7 @@ A request proceeds in the following mann
      instantiation.
 
  (7) The program may want to access another key from A's context (say a
-     Kerberos TGT key). It just requests the appropriate key, and the keyring
+     Kerberos TGT key).  It just requests the appropriate key, and the keyring
      search notes that the session keyring has auth key V in its bottom level.
 
      This will permit it to then search the keyrings of process A with the
@@ -79,10 +96,11 @@ A request proceeds in the following mann
 (10) The program then exits 0 and request_key() deletes key V and returns key
      U to the caller.
 
-This also extends further. If key W (step 7 above) didn't exist, key W would be
-created uninstantiated, another auth key (X) would be created (as per step 3)
-and another copy of /sbin/request-key spawned (as per step 4); but the context
-specified by auth key X will still be process A, as it was in auth key V.
+This also extends further.  If key W (step 7 above) didn't exist, key W would
+be created uninstantiated, another auth key (X) would be created (as per step
+3) and another copy of /sbin/request-key spawned (as per step 4); but the
+context specified by auth key X will still be process A, as it was in auth key
+V.
 
 This is because process A's keyrings can't simply be attached to
 /sbin/request-key at the appropriate places because (a) execve will discard two
@@ -118,17 +136,17 @@ A search of any particular keyring proce
 
  (2) It considers all the non-keyring keys within that keyring and, if any key
      matches the criteria specified, calls key_permission(SEARCH) on it to see
-     if the key is allowed to be found. If it is, that key is returned; if
+     if the key is allowed to be found.  If it is, that key is returned; if
      not, the search continues, and the error code is retained if of higher
      priority than the one currently set.
 
  (3) It then considers all the keyring-type keys in the keyring it's currently
-     searching. It calls key_permission(SEARCH) on each keyring, and if this
+     searching.  It calls key_permission(SEARCH) on each keyring, and if this
      grants permission, it recurses, executing steps (2) and (3) on that
      keyring.
 
 The process stops immediately a valid key is found with permission granted to
-use it. Any error from a previous match attempt is discarded and the key is
+use it.  Any error from a previous match attempt is discarded and the key is
 returned.
 
 When search_process_keyrings() is invoked, it performs the following searches
@@ -153,7 +171,7 @@ returned.
 returned.
 
 Only if all these fail does the whole thing fail with the highest priority
-error. Note that several errors may have come from LSM.
+error.  Note that several errors may have come from LSM.
 
 The error priority is:
 
diff -r c875b3d2c5e5 -r 29fd5adfdc07 Documentation/keys.txt
--- a/Documentation/keys.txt    Mon Aug 07 17:39:11 2006 -0400
+++ b/Documentation/keys.txt    Mon Aug 07 18:15:57 2006 -0400
@@ -241,25 +241,30 @@ controls can be applied to keys created 
 controls can be applied to keys created within various contexts.  This support
 is preliminary, and is likely to change quite significantly in the near future.
 Currently, all of the basic permissions explained above are provided in SELinux
-as well; SE Linux is simply invoked after all basic permission checks have been
+as well; SELinux is simply invoked after all basic permission checks have been
 performed.
 
-Each key is labeled with the same context as the task to which it belongs.
-Typically, this is the same task that was running when the key was created.
-The default keyrings are handled differently, but in a way that is very
-intuitive:
-
- (*) The user and user session keyrings that are created when the user logs in
-     are currently labeled with the context of the login manager.
-
- (*) The keyrings associated with new threads are each labeled with the context
-     of their associated thread, and both session and process keyrings are
-     handled similarly.
+The value of the file /proc/self/attr/keycreate influences the labeling of
+newly-created keys.  If the contents of that file correspond to an SELinux
+security context, then the key will be assigned that context.  Otherwise, the
+key will be assigned the current context of the task that invoked the key
+creation request.  Tasks must be granted explicit permission to assign a
+particular context to newly-created keys, using the "create" permission in the
+key security class.
+
+The default keyrings associated with users will be labeled with the default
+context of the user if and only if the login programs have been instrumented to
+properly initialize keycreate during the login process.  Otherwise, they will
+be labeled with the context of the login program itself.
 
 Note, however, that the default keyrings associated with the root user are
 labeled with the default kernel context, since they are created early in the
 boot process, before root has a chance to log in.
 
+The keyrings associated with new threads are each labeled with the context of
+their associated thread, and both session and process keyrings are handled
+similarly.
+
 
 ================
 NEW PROCFS FILES
@@ -270,9 +275,17 @@ about the status of the key service:
 
  (*) /proc/keys
 
-     This lists all the keys on the system, giving information about their
-     type, description and permissions. The payload of the key is not available
-     this way:
+     This lists the keys that are currently viewable by the task reading the
+     file, giving information about their type, description and permissions.
+     It is not possible to view the payload of the key this way, though some
+     information about it may be given.
+
+     The only keys included in the list are those that grant View permission to
+     the reading process whether or not it possesses them.  Note that LSM
+     security checks are still performed, and may further filter out keys that
+     the current process is not authorised to view.
+
+     The contents of the file look like this:
 
        SERIAL   FLAGS  USAGE EXPY PERM     UID   GID   TYPE      DESCRIPTION: 
SUMMARY
        00000001 I-----    39 perm 1f3f0000     0     0 keyring   _uid_ses.0: 
1/4
@@ -300,7 +313,7 @@ about the status of the key service:
  (*) /proc/key-users
 
      This file lists the tracking data for each user that has at least one key
-     on the system. Such data includes quota information and statistics:
+     on the system.  Such data includes quota information and statistics:
 
        [root@andromeda root]# cat /proc/key-users
        0:     46 45/45 1/100 13/10000
@@ -767,6 +780,17 @@ payload contents" for more information.
     See also Documentation/keys-request-key.txt.
 
 
+(*) To search for a key, passing auxiliary data to the upcaller, call:
+
+       struct key *request_key_with_auxdata(const struct key_type *type,
+                                            const char *description,
+                                            const char *callout_string,
+                                            void *aux);
+
+    This is identical to request_key(), except that the auxiliary data is
+    passed to the key_type->request_key() op if it exists.
+
+
 (*) When it is no longer required, the key should be released using:
 
        void key_put(struct key *key);
@@ -1016,6 +1040,24 @@ The structure has a number of fields, so
      prevent the key's payload changing. It is not necessary to use RCU locking
      when accessing the key's payload. It is safe to sleep in this method, such
      as might happen when the userspace buffer is accessed.
+
+
+ (*) int (*request_key)(struct key *key, struct key *authkey, const char *op,
+                       void *aux);
+
+     This method is optional.  If provided, request_key() and
+     request_key_with_auxdata() will invoke this function rather than
+     upcalling to /sbin/request-key to operate upon a key of this type.
+
+     The aux parameter is as passed to request_key_with_auxdata() or is NULL
+     otherwise.  Also passed are the key to be operated upon, the
+     authorisation key for this operation and the operation type (currently
+     only "create").
+
+     This function should return only when the upcall is complete.  Upon return
+     the authorisation key will be revoked, and the target key will be
+     negatively instantiated if it is still uninstantiated.  The error will be
+     returned to the caller of request_key*().
 
 
 ============================
diff -r c875b3d2c5e5 -r 29fd5adfdc07 Documentation/md.txt
--- a/Documentation/md.txt      Mon Aug 07 17:39:11 2006 -0400
+++ b/Documentation/md.txt      Mon Aug 07 18:15:57 2006 -0400
@@ -200,12 +200,71 @@ All md devices contain:
      This can be written only while the array is being assembled, not
      after it is started.
 
+  layout
+     The "layout" for the array for the particular level.  This is
+     simply a number that is interpretted differently by different
+     levels.  It can be written while assembling an array.
+
+  resync_start
+     The point at which resync should start.  If no resync is needed,
+     this will be a very large number.  At array creation it will
+     default to 0, though starting the array as 'clean' will
+     set it much larger.
+
    new_dev
      This file can be written but not read.  The value written should
      be a block device number as major:minor.  e.g. 8:0
      This will cause that device to be attached to the array, if it is
      available.  It will then appear at md/dev-XXX (depending on the
      name of the device) and further configuration is then possible.
+
+   safe_mode_delay
+     When an md array has seen no write requests for a certain period
+     of time, it will be marked as 'clean'.  When another write
+     request arrive, the array is marked as 'dirty' before the write
+     commenses.  This is known as 'safe_mode'.
+     The 'certain period' is controlled by this file which stores the
+     period as a number of seconds.  The default is 200msec (0.200).
+     Writing a value of 0 disables safemode.
+
+   array_state
+     This file contains a single word which describes the current
+     state of the array.  In many cases, the state can be set by
+     writing the word for the desired state, however some states
+     cannot be explicitly set, and some transitions are not allowed.
+
+     clear
+         No devices, no size, no level
+         Writing is equivalent to STOP_ARRAY ioctl
+     inactive
+         May have some settings, but array is not active
+            all IO results in error
+         When written, doesn't tear down array, but just stops it
+     suspended (not supported yet)
+         All IO requests will block. The array can be reconfigured.
+         Writing this, if accepted, will block until array is quiessent
+     readonly
+         no resync can happen.  no superblocks get written.
+         write requests fail
+     read-auto
+         like readonly, but behaves like 'clean' on a write request.
+
+     clean - no pending writes, but otherwise active.
+         When written to inactive array, starts without resync
+         If a write request arrives then
+           if metadata is known, mark 'dirty' and switch to 'active'.
+           if not known, block and switch to write-pending
+         If written to an active array that has pending writes, then fails.
+     active
+         fully active: IO and resync can be happening.
+         When written to inactive array, starts with resync
+
+     write-pending
+         clean, but writes are blocked waiting for 'active' to be written.
+
+     active-idle
+         like active, but no writes have been seen for a while 
(safe_mode_delay).
+
 
    sync_speed_min
    sync_speed_max
@@ -250,10 +309,18 @@ Each directory contains:
              faulty   - device has been kicked from active use due to
                          a detected fault
              in_sync  - device is a fully in-sync member of the array
+             writemostly - device will only be subject to read
+                        requests if there are no other options.
+                        This applies only to raid1 arrays.
              spare    - device is working, but not a full member.
                         This includes spares that are in the process
                         of being recoverred to
        This list make grow in future.
+       This can be written to.
+       Writing "faulty"  simulates a failure on the device.
+       Writing "remove" removes the device from the array.
+       Writing "writemostly" sets the writemostly flag.
+       Writing "-writemostly" clears the writemostly flag.
 
       errors
        An approximate count of read errors that have been detected on
diff -r c875b3d2c5e5 -r 29fd5adfdc07 Documentation/memory-barriers.txt
--- a/Documentation/memory-barriers.txt Mon Aug 07 17:39:11 2006 -0400
+++ b/Documentation/memory-barriers.txt Mon Aug 07 18:15:57 2006 -0400
@@ -262,9 +262,14 @@ CPU to restrict the order.
 CPU to restrict the order.
 
 Memory barriers are such interventions.  They impose a perceived partial
-ordering between the memory operations specified on either side of the barrier.
-They request that the sequence of memory events generated appears to other
-parts of the system as if the barrier is effective on that CPU.
+ordering over the memory operations on either side of the barrier.
+
+Such enforcement is important because the CPUs and other devices in a system
+can use a variety of tricks to improve performance - including reordering,
+deferral and combination of memory operations; speculative loads; speculative
+branch prediction and various types of caching.  Memory barriers are used to
+override or suppress these tricks, allowing the code to sanely control the
+interaction of multiple CPUs and/or devices.
 
 
 VARIETIES OF MEMORY BARRIER
@@ -282,7 +287,7 @@ Memory barriers come in four basic varie
      A write barrier is a partial ordering on stores only; it is not required
      to have any effect on loads.
 
-     A CPU can be viewed as as commiting a sequence of store operations to the
+     A CPU can be viewed as committing a sequence of store operations to the
      memory system as time progresses.  All stores before a write barrier will
      occur in the sequence _before_ all the stores after the write barrier.
 
@@ -413,7 +418,7 @@ There are certain things that the Linux 
      indirect effect will be the order in which the second CPU sees the effects
      of the first CPU's accesses occur, but see the next point:
 
- (*) There is no guarantee that the a CPU will see the correct order of effects
+ (*) There is no guarantee that a CPU will see the correct order of effects
      from a second CPU's accesses, even _if_ the second CPU uses a memory
      barrier, unless the first CPU _also_ uses a matching memory barrier (see
      the subsection on "SMP Barrier Pairing").
@@ -461,8 +466,8 @@ isn't, and this behaviour can be observe
 isn't, and this behaviour can be observed on certain real CPUs (such as the DEC
 Alpha).
 
-To deal with this, a data dependency barrier must be inserted between the
-address load and the data load:
+To deal with this, a data dependency barrier or better must be inserted
+between the address load and the data load:
 
        CPU 1           CPU 2
        =============== ===============
@@ -484,7 +489,7 @@ variable B might be stored in an even-nu
 variable B might be stored in an even-numbered cache line.  Then, if the
 even-numbered bank of the reading CPU's cache is extremely busy while the
 odd-numbered bank is idle, one can see the new value of the pointer P (&B),
-but the old value of the variable B (1).
+but the old value of the variable B (2).
 
 
 Another example of where data dependency barriers might by required is where a
@@ -744,7 +749,7 @@ some effectively random order, despite t
                                                :       :
 
 
-If, however, a read barrier were to be placed between the load of E and the
+If, however, a read barrier were to be placed between the load of B and the
 load of A on CPU 2:
 
        CPU 1                   CPU 2
@@ -1461,9 +1466,8 @@ instruction itself is complete.
 
 On a UP system - where this wouldn't be a problem - the smp_mb() is just a
 compiler barrier, thus making sure the compiler emits the instructions in the
-right order without actually intervening in the CPU.  Since there there's only
-one CPU, that CPU's dependency ordering logic will take care of everything
-else.
+right order without actually intervening in the CPU.  Since there's only one
+CPU, that CPU's dependency ordering logic will take care of everything else.
 
 
 ATOMIC OPERATIONS
@@ -1640,9 +1644,9 @@ functions:
 
      The PCI bus, amongst others, defines an I/O space concept - which on such
      CPUs as i386 and x86_64 cpus readily maps to the CPU's concept of I/O
-     space.  However, it may also mapped as a virtual I/O space in the CPU's
-     memory map, particularly on those CPUs that don't support alternate
-     I/O spaces.
+     space.  However, it may also be mapped as a virtual I/O space in the CPU's
+     memory map, particularly on those CPUs that don't support alternate I/O
+     spaces.
 
      Accesses to this space may be fully synchronous (as on i386), but
      intermediary bridges (such as the PCI host bridge) may not fully honour
diff -r c875b3d2c5e5 -r 29fd5adfdc07 Documentation/networking/tuntap.txt
--- a/Documentation/networking/tuntap.txt       Mon Aug 07 17:39:11 2006 -0400
+++ b/Documentation/networking/tuntap.txt       Mon Aug 07 18:15:57 2006 -0400
@@ -39,10 +39,13 @@ 2. Configuration
      mknod /dev/net/tun c 10 200
   
   Set permissions:
-     e.g. chmod 0700 /dev/net/tun
-     if you want the device only accessible by root. Giving regular users the
-     right to assign network devices is NOT a good idea. Users could assign
-     bogus network interfaces to trick firewalls or administrators.
+     e.g. chmod 0666 /dev/net/tun
+     There's no harm in allowing the device to be accessible by non-root users,
+     since CAP_NET_ADMIN is required for creating network devices or for 
+     connecting to network devices which aren't owned by the user in question.
+     If you want to create persistent devices and give ownership of them to 
+     unprivileged users, then you need the /dev/net/tun device to be usable by
+     those users.
 
   Driver module autoloading
 
diff -r c875b3d2c5e5 -r 29fd5adfdc07 Documentation/power/swsusp.txt
--- a/Documentation/power/swsusp.txt    Mon Aug 07 17:39:11 2006 -0400
+++ b/Documentation/power/swsusp.txt    Mon Aug 07 18:15:57 2006 -0400
@@ -350,9 +350,34 @@ Q: How do I make suspend more verbose?
 
 A: If you want to see any non-error kernel messages on the virtual
 terminal the kernel switches to during suspend, you have to set the
-kernel console loglevel to at least 5, for example by doing
-
-       echo 5 > /proc/sys/kernel/printk
+kernel console loglevel to at least 4 (KERN_WARNING), for example by
+doing
+
+       # save the old loglevel
+       read LOGLEVEL DUMMY < /proc/sys/kernel/printk
+       # set the loglevel so we see the progress bar.
+       # if the level is higher than needed, we leave it alone.
+       if [ $LOGLEVEL -lt 5 ]; then
+               echo 5 > /proc/sys/kernel/printk
+               fi
+
+        IMG_SZ=0
+        read IMG_SZ < /sys/power/image_size
+        echo -n disk > /sys/power/state
+        RET=$?
+        #
+        # the logic here is:
+        # if image_size > 0 (without kernel support, IMG_SZ will be zero),
+        # then try again with image_size set to zero.
+       if [ $RET -ne 0 -a $IMG_SZ -ne 0 ]; then # try again with minimal image 
size
+                echo 0 > /sys/power/image_size
+                echo -n disk > /sys/power/state
+                RET=$?
+        fi
+
+       # restore previous loglevel
+       echo $LOGLEVEL > /proc/sys/kernel/printk
+       exit $RET
 
 Q: Is this true that if I have a mounted filesystem on a USB device and
 I suspend to disk, I can lose data unless the filesystem has been mounted
@@ -380,3 +405,17 @@ Firewire, CompactFlash, MMC, external SA
 Firewire, CompactFlash, MMC, external SATA, or even IDE hotplug bays)
 before suspending; then remount them after resuming.
 
+Q: I upgraded the kernel from 2.6.15 to 2.6.16. Both kernels were
+compiled with the similar configuration files. Anyway I found that
+suspend to disk (and resume) is much slower on 2.6.16 compared to
+2.6.15. Any idea for why that might happen or how can I speed it up?
+
+A: This is because the size of the suspend image is now greater than
+for 2.6.15 (by saving more data we can get more responsive system
+after resume).
+
+There's the /sys/power/image_size knob that controls the size of the
+image.  If you set it to 0 (eg. by echo 0 > /sys/power/image_size as
+root), the 2.6.15 behavior should be restored.  If it is still too
+slow, take a look at suspend.sf.net -- userland suspend is faster and
+supports LZF compression to speed it up further.
diff -r c875b3d2c5e5 -r 29fd5adfdc07 Documentation/power/video.txt
--- a/Documentation/power/video.txt     Mon Aug 07 17:39:11 2006 -0400
+++ b/Documentation/power/video.txt     Mon Aug 07 18:15:57 2006 -0400
@@ -90,6 +90,7 @@ Model                           hack (or
 Model                           hack (or "how to do it")
 ------------------------------------------------------------------------------
 Acer Aspire 1406LC             ole's late BIOS init (7), turn off DRI
+Acer TM 230                    s3_bios (2)
 Acer TM 242FX                  vbetool (6)
 Acer TM C110                   video_post (8)
 Acer TM C300                    vga=normal (only suspend on console, not in 
X), vbetool (6) or video_post (8)
@@ -115,6 +116,7 @@ Dell Inspiron 4000          ??? (*)
 Dell Inspiron 4000             ??? (*)
 Dell Inspiron 500m             ??? (*)
 Dell Inspiron 510m             ???
+Dell Inspiron 5150             vbetool needed (6)
 Dell Inspiron 600m             ??? (*)
 Dell Inspiron 8200             ??? (*)
 Dell Inspiron 8500             ??? (*)
@@ -125,6 +127,7 @@ HP Pavilion ZD7000          vbetool post needed,
 HP Pavilion ZD7000             vbetool post needed, need open-source nv driver 
for X
 HP Omnibook XE3        athlon version  none (1)
 HP Omnibook XE3GC              none (1), video is S3 Savage/IX-MV
+HP Omnibook XE3L-GF            vbetool (6)
 HP Omnibook 5150               none (1), (S1 also works OK)
 IBM TP T20, model 2647-44G     none (1), video is S3 Inc. 86C270-294 
Savage/IX-MV, vesafb gets "interesting" but X work.
 IBM TP A31 / Type 2652-M5G      s3_mode (3) [works ok with BIOS 1.04 
2002-08-23, but not at all with BIOS 1.11 2004-11-05 :-(]
@@ -157,6 +160,7 @@ Sony Vaio vgn-S580BH                vga=normal, but su
 Sony Vaio vgn-S580BH           vga=normal, but suspend from X. Console will be 
blank unless you return to X.
 Sony Vaio vgn-FS115B           s3_bios (2),s3_mode (4)
 Toshiba Libretto L5            none (1)
+Toshiba Libretto 100CT/110CT    vbetool (6)
 Toshiba Portege 3020CT         s3_mode (3)
 Toshiba Satellite 4030CDT      s3_mode (3) (S1 also works OK)
 Toshiba Satellite 4080XCDT      s3_mode (3) (S1 also works OK)
diff -r c875b3d2c5e5 -r 29fd5adfdc07 Documentation/robust-futexes.txt
--- a/Documentation/robust-futexes.txt  Mon Aug 07 17:39:11 2006 -0400
+++ b/Documentation/robust-futexes.txt  Mon Aug 07 18:15:57 2006 -0400
@@ -95,7 +95,7 @@ is empty. If the thread/process crashed 
 is empty. If the thread/process crashed or terminated in some incorrect
 way then the list might be non-empty: in this case the kernel carefully
 walks the list [not trusting it], and marks all locks that are owned by
-this thread with the FUTEX_OWNER_DEAD bit, and wakes up one waiter (if
+this thread with the FUTEX_OWNER_DIED bit, and wakes up one waiter (if
 any).
 
 The list is guaranteed to be private and per-thread at do_exit() time,
diff -r c875b3d2c5e5 -r 29fd5adfdc07 Documentation/rtc.txt
--- a/Documentation/rtc.txt     Mon Aug 07 17:39:11 2006 -0400
+++ b/Documentation/rtc.txt     Mon Aug 07 18:15:57 2006 -0400
@@ -44,8 +44,10 @@ Programming and/or enabling interrupt fr
 Programming and/or enabling interrupt frequencies greater than 64Hz is
 only allowed by root. This is perhaps a bit conservative, but we don't want
 an evil user generating lots of IRQs on a slow 386sx-16, where it might have
-a negative impact on performance.  Note that the interrupt handler is only
-a few lines of code to minimize any possibility of this effect.
+a negative impact on performance. This 64Hz limit can be changed by writing
+a different value to /proc/sys/dev/rtc/max-user-freq. Note that the
+interrupt handler is only a few lines of code to minimize any possibility
+of this effect.
 
 Also, if the kernel time is synchronized with an external source, the 
 kernel will write the time back to the CMOS clock every 11 minutes. In 
@@ -81,6 +83,7 @@ that will be using this driver.
  */
 
 #include <stdio.h>
+#include <stdlib.h>
 #include <linux/rtc.h>
 #include <sys/ioctl.h>
 #include <sys/time.h>
diff -r c875b3d2c5e5 -r 29fd5adfdc07 Documentation/scsi/ppa.txt
--- a/Documentation/scsi/ppa.txt        Mon Aug 07 17:39:11 2006 -0400
+++ b/Documentation/scsi/ppa.txt        Mon Aug 07 18:15:57 2006 -0400
@@ -12,5 +12,3 @@ Email list for Linux Parport
 Email list for Linux Parport
 linux-parport@xxxxxxxxxx
 
-Email for problems with ZIP or ZIP Plus drivers
-campbell@xxxxxxxxxx
diff -r c875b3d2c5e5 -r 29fd5adfdc07 
Documentation/sound/alsa/ALSA-Configuration.txt
--- a/Documentation/sound/alsa/ALSA-Configuration.txt   Mon Aug 07 17:39:11 
2006 -0400
+++ b/Documentation/sound/alsa/ALSA-Configuration.txt   Mon Aug 07 18:15:57 
2006 -0400
@@ -472,6 +472,22 @@ Prior to version 0.9.0rc4 options had a 
 
     The power-management is supported.
 
+  Module snd-darla20
+  ------------------
+
+    Module for Echoaudio Darla20
+
+    This module supports multiple cards.
+    The driver requires the firmware loader support on kernel.
+
+  Module snd-darla24
+  ------------------
+
+    Module for Echoaudio Darla24
+
+    This module supports multiple cards.
+    The driver requires the firmware loader support on kernel.
+
   Module snd-dt019x
   -----------------
 
@@ -498,6 +514,14 @@ Prior to version 0.9.0rc4 options had a 
     requires a sound card (like RealPlayer).
 
     The power-management is supported.
+
+  Module snd-echo3g
+  -----------------
+
+    Module for Echoaudio 3G cards (Gina3G/Layla3G)
+
+    This module supports multiple cards.
+    The driver requires the firmware loader support on kernel.
 
   Module snd-emu10k1
   ------------------
@@ -656,6 +680,22 @@ Prior to version 0.9.0rc4 options had a 
     This module supports multiple cards and autoprobe.
     
     The power-management is supported.
+
+  Module snd-gina20
+  -----------------
+
+    Module for Echoaudio Gina20
+
+    This module supports multiple cards.
+    The driver requires the firmware loader support on kernel.
+
+  Module snd-gina24
+  -----------------
+
+    Module for Echoaudio Gina24
+
+    This module supports multiple cards.
+    The driver requires the firmware loader support on kernel.
 
   Module snd-gusclassic
   ---------------------
@@ -760,12 +800,18 @@ Prior to version 0.9.0rc4 options had a 
          basic         fixed pin assignment w/o SPDIF
          auto          auto-config reading BIOS (default)
 
-       ALC882/883/885
+       ALC882/885
          3stack-dig    3-jack with SPDIF I/O
          6stck-dig     6-jack digital with SPDIF I/O
          auto          auto-config reading BIOS (default)
 
-       ALC861
+       ALC883/888
+         3stack-dig    3-jack with SPDIF I/O
+         6stack-dig    6-jack digital with SPDIF I/O
+         6stack-dig-demo  6-stack digital for Intel demo board
+         auto          auto-config reading BIOS (default)
+
+       ALC861/660
          3stack        3-jack
          3stack-dig    3-jack with SPDIF I/O
          6stack-dig    6-jack with SPDIF I/O
@@ -937,6 +983,30 @@ Prior to version 0.9.0rc4 options had a 
          driver isn't configured properly or you want to try another
          type for testing.
 
+  Module snd-indigo
+  -----------------
+
+    Module for Echoaudio Indigo
+
+    This module supports multiple cards.
+    The driver requires the firmware loader support on kernel.
+
+  Module snd-indigodj
+  -------------------
+
+    Module for Echoaudio Indigo DJ
+
+    This module supports multiple cards.
+    The driver requires the firmware loader support on kernel.
+
+  Module snd-indigoio
+  -------------------
+
+    Module for Echoaudio Indigo IO
+
+    This module supports multiple cards.
+    The driver requires the firmware loader support on kernel.
+
   Module snd-intel8x0
   -------------------
 
@@ -1036,6 +1106,22 @@ Prior to version 0.9.0rc4 options had a 
 
     This module supports multiple cards.
 
+  Module snd-layla20
+  ------------------
+
+    Module for Echoaudio Layla20
+
+    This module supports multiple cards.
+    The driver requires the firmware loader support on kernel.
+
+  Module snd-layla24
+  ------------------
+
+    Module for Echoaudio Layla24
+
+    This module supports multiple cards.
+    The driver requires the firmware loader support on kernel.
+
   Module snd-maestro3
   -------------------
 
@@ -1055,6 +1141,14 @@ Prior to version 0.9.0rc4 options had a 
     option.
 
     The power-management is supported.
+
+  Module snd-mia
+  ---------------
+
+    Module for Echoaudio Mia
+
+    This module supports multiple cards.
+    The driver requires the firmware loader support on kernel.
 
   Module snd-miro
   ---------------
@@ -1087,6 +1181,14 @@ Prior to version 0.9.0rc4 options had a 
     Install the necessary firmware files in alsa-firmware package.
     When no hotplug fw loader is available, you need to load the
     firmware via mixartloader utility in alsa-tools package.
+
+  Module snd-mona
+  ---------------
+
+    Module for Echoaudio Mona
+
+    This module supports multiple cards.
+    The driver requires the firmware loader support on kernel.
 
   Module snd-mpu401
   -----------------
diff -r c875b3d2c5e5 -r 29fd5adfdc07 Documentation/sparc/sbus_drivers.txt
--- a/Documentation/sparc/sbus_drivers.txt      Mon Aug 07 17:39:11 2006 -0400
+++ b/Documentation/sparc/sbus_drivers.txt      Mon Aug 07 18:15:57 2006 -0400
@@ -25,42 +25,84 @@ used members of this structure, and thei
 used members of this structure, and their typical usage,
 will be detailed below.
 
-       Here is how probing is performed by an SBUS driver
-under Linux:
-
-       static void init_one_mydevice(struct sbus_dev *sdev)
-       {
+       Here is a piece of skeleton code for perofming a device
+probe in an SBUS driverunder Linux:
+
+       static int __devinit mydevice_probe_one(struct sbus_dev *sdev)
+       {
+               struct mysdevice *mp = kzalloc(sizeof(*mp), GFP_KERNEL);
+
+               if (!mp)
+                       return -ENODEV;
+
                ...
-       }
-
-       static int mydevice_match(struct sbus_dev *sdev)
-       {
-               if (some_criteria(sdev))
-                       return 1;
+               dev_set_drvdata(&sdev->ofdev.dev, mp);
                return 0;
-       }
-
-       static void mydevice_probe(void)
-       {
-               struct sbus_bus *sbus;
-               struct sbus_dev *sdev;
-
-               for_each_sbus(sbus) {
-                       for_each_sbusdev(sdev, sbus) {
-                               if (mydevice_match(sdev))
-                                       init_one_mydevice(sdev);
-                       }
-               }
-       }
-
-       All this does is walk through all SBUS devices in the
-system, checks each to see if it is of the type which
-your driver is written for, and if so it calls the init
-routine to attach the device and prepare to drive it.
-
-       "init_one_mydevice" might do things like allocate software
-state structures, map in I/O registers, place the hardware
-into an initialized state, etc.
+               ...
+       }
+
+       static int __devinit mydevice_probe(struct of_device *dev,
+                                           const struct of_device_id *match)
+       {
+               struct sbus_dev *sdev = to_sbus_device(&dev->dev);
+
+               return mydevice_probe_one(sdev);
+       }
+
+       static int __devexit mydevice_remove(struct of_device *dev)
+       {
+               struct sbus_dev *sdev = to_sbus_device(&dev->dev);
+               struct mydevice *mp = dev_get_drvdata(&dev->dev);
+
+               return mydevice_remove_one(sdev, mp);
+       }
+
+       static struct of_device_id mydevice_match[] = {
+               {
+                       .name = "mydevice",
+               },
+               {},
+       };
+
+       MODULE_DEVICE_TABLE(of, mydevice_match);
+
+       static struct of_platform_driver mydevice_driver = {
+               .name           = "mydevice",
+               .match_table    = mydevice_match,
+               .probe          = mydevice_probe,
+               .remove         = __devexit_p(mydevice_remove),
+       };
+
+       static int __init mydevice_init(void)
+       {
+               return of_register_driver(&mydevice_driver, &sbus_bus_type);
+       }
+
+       static void __exit mydevice_exit(void)
+       {
+               of_unregister_driver(&mydevice_driver);
+       }
+
+       module_init(mydevice_init);
+       module_exit(mydevice_exit);
+
+       The mydevice_match table is a series of entries which
+describes what SBUS devices your driver is meant for.  In the
+simplest case you specify a string for the 'name' field.  Every
+SBUS device with a 'name' property matching your string will
+be passed one-by-one to your .probe method.
+
+       You should store away your device private state structure
+pointer in the drvdata area so that you can retrieve it later on
+in your .remove method.
+
+       Any memory allocated, registers mapped, IRQs registered,
+etc. must be undone by your .remove method so that all resources
+of your device are relased by the time it returns.
+
+       You should _NOT_ use the for_each_sbus(), for_each_sbusdev(),
+and for_all_sbusdev() interfaces.  They are deprecated, will be
+removed, and no new driver should reference them ever.
 
                Mapping and Accessing I/O Registers
 
@@ -263,10 +305,3 @@ discussed above and plus it handles both
        Lance driver abuses consistent mappings for data transfer.
 It is a nifty trick which we do not particularly recommend...
 Just check it out and know that it's legal.
-
-                       Bad examples, do NOT use
-
-       drivers/video/cgsix.c
-       This one uses result of sbus_ioremap as if it is an address.
-This does NOT work on sparc64 and therefore is broken. We will
-convert it at a later date.
diff -r c875b3d2c5e5 -r 29fd5adfdc07 Documentation/sparse.txt
--- a/Documentation/sparse.txt  Mon Aug 07 17:39:11 2006 -0400
+++ b/Documentation/sparse.txt  Mon Aug 07 18:15:57 2006 -0400
@@ -1,5 +1,6 @@ Copyright 2004 Linus Torvalds
 Copyright 2004 Linus Torvalds
 Copyright 2004 Pavel Machek <pavel@xxxxxxx>
+Copyright 2006 Bob Copeland <me@xxxxxxxxxxxxxxx>
 
 Using sparse for typechecking
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -41,15 +42,8 @@ vs cpu-endian vs whatever), and there th
 vs cpu-endian vs whatever), and there the constant "0" really _is_
 special.
 
-Use
-
-       make C=[12] CF=-Wbitwise
-
-or you don't get any checking at all.
-
-
-Where to get sparse
-~~~~~~~~~~~~~~~~~~~
+Getting sparse
+~~~~~~~~~~~~~~
 
 With git, you can just get it from
 
@@ -57,7 +51,7 @@ With git, you can just get it from
 
 and DaveJ has tar-balls at
 
-       http://www.codemonkey.org.uk/projects/git-snapshots/sparse/
+        http://www.codemonkey.org.uk/projects/git-snapshots/sparse/
 
 
 Once you have it, just do
@@ -65,8 +59,20 @@ Once you have it, just do
         make
         make install
 
-as your regular user, and it will install sparse in your ~/bin directory.
-After that, doing a kernel make with "make C=1" will run sparse on all the
-C files that get recompiled, or with "make C=2" will run sparse on the
-files whether they need to be recompiled or not (ie the latter is fast way
-to check the whole tree if you have already built it).
+as a regular user, and it will install sparse in your ~/bin directory.
+
+Using sparse
+~~~~~~~~~~~~
+
+Do a kernel make with "make C=1" to run sparse on all the C files that get
+recompiled, or use "make C=2" to run sparse on the files whether they need to
+be recompiled or not.  The latter is a fast way to check the whole tree if you
+have already built it.
+
+The optional make variable CF can be used to pass arguments to sparse.  The
+build system passes -Wbitwise to sparse automatically.  To perform endianness
+checks, you may define __CHECK_ENDIAN__:
+
+        make C=2 CF="-D__CHECK_ENDIAN__"
+
+These checks are disabled by default as they generate a host of warnings.
diff -r c875b3d2c5e5 -r 29fd5adfdc07 Documentation/sysctl/vm.txt
--- a/Documentation/sysctl/vm.txt       Mon Aug 07 17:39:11 2006 -0400
+++ b/Documentation/sysctl/vm.txt       Mon Aug 07 18:15:57 2006 -0400
@@ -29,6 +29,7 @@ Currently, these files are in /proc/sys/
 - drop-caches
 - zone_reclaim_mode
 - zone_reclaim_interval
+- panic_on_oom
 
 ==============================================================
 
@@ -178,3 +179,15 @@ Reduce the interval if undesired off nod
 Reduce the interval if undesired off node allocations occur. However, too
 frequent scans will have a negative impact onoff node allocation performance.
 
+=============================================================
+
+panic_on_oom
+
+This enables or disables panic on out-of-memory feature.  If this is set to 1,
+the kernel panics when out-of-memory happens.  If this is set to 0, the kernel
+will kill some rogue process, called oom_killer.  Usually, oom_killer can kill
+rogue processes and system will survive.  If you want to panic the system
+rather than killing rogue processes, set this to 1.
+
+The default value is 0.
+
diff -r c875b3d2c5e5 -r 29fd5adfdc07 Documentation/sysrq.txt
--- a/Documentation/sysrq.txt   Mon Aug 07 17:39:11 2006 -0400
+++ b/Documentation/sysrq.txt   Mon Aug 07 18:15:57 2006 -0400
@@ -115,8 +115,9 @@ when you would try to login. It will kil
 when you would try to login. It will kill all programs on given console
 and thus letting you make sure that the login prompt you see is actually
 the one from init, not some trojan program.
-IMPORTANT:In its true form it is not a true SAK like the one in   :IMPORTANT
-IMPORTANT:c2 compliant systems, and it should be mistook as such. :IMPORTANT
+IMPORTANT: In its true form it is not a true SAK like the one in a :IMPORTANT
+IMPORTANT: c2 compliant system, and it should not be mistaken as   :IMPORTANT
+IMPORTANT: such.                                                   :IMPORTANT
        It seems other find it useful as (System Attention Key) which is
 useful when you want to exit a program that will not let you switch consoles.
 (For example, X or a svgalib program.)
diff -r c875b3d2c5e5 -r 29fd5adfdc07 Documentation/tty.txt
--- a/Documentation/tty.txt     Mon Aug 07 17:39:11 2006 -0400
+++ b/Documentation/tty.txt     Mon Aug 07 18:15:57 2006 -0400
@@ -80,13 +80,6 @@ receive_buf()        -       Hand buffers of bytes fr
                        for processing. Semantics currently rather
                        mysterious 8(
 
-receive_room() -       Can be called by the driver layer at any time when
-                       the ldisc is opened. The ldisc must be able to
-                       handle the reported amount of data at that instant.
-                       Synchronization between active receive_buf and
-                       receive_room calls is down to the driver not the
-                       ldisc. Must not sleep.
-
 write_wakeup() -       May be called at any point between open and close.
                        The TTY_DO_WRITE_WAKEUP flag indicates if a call
                        is needed but always races versus calls. Thus the
diff -r c875b3d2c5e5 -r 29fd5adfdc07 Documentation/video4linux/CARDLIST.bttv
--- a/Documentation/video4linux/CARDLIST.bttv   Mon Aug 07 17:39:11 2006 -0400
+++ b/Documentation/video4linux/CARDLIST.bttv   Mon Aug 07 18:15:57 2006 -0400
@@ -87,7 +87,7 @@
  86 -> Osprey 101/151 w/ svid
  87 -> Osprey 200/201/250/251
  88 -> Osprey 200/250                                      [0070:ff01]
- 89 -> Osprey 210/220
+ 89 -> Osprey 210/220/230
  90 -> Osprey 500                                          [0070:ff02]
  91 -> Osprey 540                                          [0070:ff04]
  92 -> Osprey 2000                                         [0070:ff03]
@@ -111,7 +111,7 @@ 110 -> IVC-100                          
 110 -> IVC-100                                             [ff00:a132]
 111 -> IVC-120G                                            
[ff00:a182,ff01:a182,ff02:a182,ff03:a182,ff04:a182,ff05:a182,ff06:a182,ff07:a182,ff08:a182,ff09:a182,ff0a:a182,ff0b:a182,ff0c:a182,ff0d:a182,ff0e:a182,ff0f:a182]
 112 -> pcHDTV HD-2000 TV                                   [7063:2000]
-113 -> Twinhan DST + clones                                
[11bd:0026,1822:0001,270f:fc00]
+113 -> Twinhan DST + clones                                
[11bd:0026,1822:0001,270f:fc00,1822:0026]
 114 -> Winfast VC100                                       [107d:6607]
 115 -> Teppro TEV-560/InterVision IV-560
 116 -> SIMUS GVC1100                                       [aa6a:82b2]
diff -r c875b3d2c5e5 -r 29fd5adfdc07 Documentation/video4linux/CARDLIST.cx88
--- a/Documentation/video4linux/CARDLIST.cx88   Mon Aug 07 17:39:11 2006 -0400
+++ b/Documentation/video4linux/CARDLIST.cx88   Mon Aug 07 18:15:57 2006 -0400
@@ -15,7 +15,7 @@
  14 -> KWorld/VStream XPert DVB-T                          [17de:08a6]
  15 -> DViCO FusionHDTV DVB-T1                             [18ac:db00]
  16 -> KWorld LTV883RF
- 17 -> DViCO FusionHDTV 3 Gold-Q                           [18ac:d810]
+ 17 -> DViCO FusionHDTV 3 Gold-Q                           
[18ac:d810,18ac:d800]
  18 -> Hauppauge Nova-T DVB-T                              
[0070:9002,0070:9001]
  19 -> Conexant DVB-T reference design                     [14f1:0187]
  20 -> Provideo PV259                                      [1540:2580]
@@ -40,8 +40,13 @@
  39 -> KWorld DVB-S 100                                    [17de:08b2]
  40 -> Hauppauge WinTV-HVR1100 DVB-T/Hybrid                
[0070:9400,0070:9402]
  41 -> Hauppauge WinTV-HVR1100 DVB-T/Hybrid (Low Profile)  
[0070:9800,0070:9802]
- 42 -> digitalnow DNTV Live! DVB-T Pro                     [1822:0025]
+ 42 -> digitalnow DNTV Live! DVB-T Pro                     
[1822:0025,1822:0019]
  43 -> KWorld/VStream XPert DVB-T with cx22702             [17de:08a1]
  44 -> DViCO FusionHDTV DVB-T Dual Digital                 
[18ac:db50,18ac:db54]
  45 -> KWorld HardwareMpegTV XPert                         [17de:0840]
  46 -> DViCO FusionHDTV DVB-T Hybrid                       
[18ac:db40,18ac:db44]
+ 47 -> pcHDTV HD5500 HDTV                                  [7063:5500]
+ 48 -> Kworld MCE 200 Deluxe                               [17de:0841]
+ 49 -> PixelView PlayTV P7000                              [1554:4813]
+ 50 -> NPG Tech Real TV FM Top 10                          [14f1:0842]
+ 51 -> WinFast DTV2000 H                                   [107d:665e]
diff -r c875b3d2c5e5 -r 29fd5adfdc07 Documentation/video4linux/CARDLIST.saa7134
--- a/Documentation/video4linux/CARDLIST.saa7134        Mon Aug 07 17:39:11 
2006 -0400
+++ b/Documentation/video4linux/CARDLIST.saa7134        Mon Aug 07 18:15:57 
2006 -0400
@@ -93,3 +93,4 @@
  92 -> AVerMedia A169 B1                        [1461:6360]
  93 -> Medion 7134 Bridge #2                    [16be:0005]
  94 -> LifeView FlyDVB-T Hybrid Cardbus         [5168:3306,5168:3502]
+ 95 -> LifeView FlyVIDEO3000 (NTSC)             [5169:0138]
diff -r c875b3d2c5e5 -r 29fd5adfdc07 Documentation/video4linux/CARDLIST.tuner
--- a/Documentation/video4linux/CARDLIST.tuner  Mon Aug 07 17:39:11 2006 -0400
+++ b/Documentation/video4linux/CARDLIST.tuner  Mon Aug 07 18:15:57 2006 -0400
@@ -62,7 +62,7 @@ tuner=61 - Tena TNF9533-D/IF/TNF9533-B/D
 tuner=61 - Tena TNF9533-D/IF/TNF9533-B/DF
 tuner=62 - Philips TEA5767HN FM Radio
 tuner=63 - Philips FMD1216ME MK3 Hybrid Tuner
-tuner=64 - LG TDVS-H062F/TUA6034
+tuner=64 - LG TDVS-H06xF
 tuner=65 - Ymec TVF66T5-B/DFF
 tuner=66 - LG TALN series
 tuner=67 - Philips TD1316 Hybrid Tuner
@@ -71,3 +71,4 @@ tuner=70 - Samsung TCPN 2121P30A
 tuner=70 - Samsung TCPN 2121P30A
 tuner=71 - Xceive xc3028
 tuner=72 - Thomson FE6600
+tuner=73 - Samsung TCPG 6121P30A
diff -r c875b3d2c5e5 -r 29fd5adfdc07 Documentation/video4linux/CQcam.txt
--- a/Documentation/video4linux/CQcam.txt       Mon Aug 07 17:39:11 2006 -0400
+++ b/Documentation/video4linux/CQcam.txt       Mon Aug 07 18:15:57 2006 -0400
@@ -185,207 +185,10 @@ this work is documented at the video4lin
 
 9.0 --- A sample program using v4lgrabber,
 
-This program is a simple image grabber that will copy a frame from the
+v4lgrab is a simple image grabber that will copy a frame from the
 first video device, /dev/video0 to standard output in portable pixmap
-format (.ppm)  Using this like: 'v4lgrab | convert - c-qcam.jpg'
-produced this picture of me at
-    http://mug.sys.virginia.edu/~drf5n/extras/c-qcam.jpg
-
--------------------- 8< ---------------- 8< -----------------------------
-
-/* Simple Video4Linux image grabber. */
-/*
- *     Video4Linux Driver Test/Example Framegrabbing Program
- *
- *     Compile with:
- *             gcc -s -Wall -Wstrict-prototypes v4lgrab.c -o v4lgrab
- *      Use as:
- *              v4lgrab >image.ppm
- *
- *     Copyright (C) 1998-05-03, Phil Blundell <philb@xxxxxxx>
- *      Copied from http://www.tazenda.demon.co.uk/phil/vgrabber.c
- *      with minor modifications (Dave Forrest, drf5n@xxxxxxxxxxxx).
- *
- */
-
-#include <unistd.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <stdio.h>
-#include <sys/ioctl.h>
-#include <stdlib.h>
-
-#include <linux/types.h>
-#include <linux/videodev.h>
-
-#define FILE "/dev/video0"
-
-/* Stole this from tvset.c */
-
-#define READ_VIDEO_PIXEL(buf, format, depth, r, g, b)                   \
-{                                                                       \
-       switch (format)                                                 \
-       {                                                               \
-               case VIDEO_PALETTE_GREY:                                \
-                       switch (depth)                                  \
-                       {                                               \
-                               case 4:                                 \
-                               case 6:                                 \
-                               case 8:                                 \
-                                       (r) = (g) = (b) = (*buf++ << 8);\
-                                       break;                          \
-                                                                       \
-                               case 16:                                \
-                                       (r) = (g) = (b) =               \
-                                               *((unsigned short *) buf);      
\
-                                       buf += 2;                       \
-                                       break;                          \
-                       }                                               \
-                       break;                                          \
-                                                                       \
-                                                                       \
-               case VIDEO_PALETTE_RGB565:                              \
-               {                                                       \
-                       unsigned short tmp = *(unsigned short *)buf;    \
-                       (r) = tmp&0xF800;                               \
-                       (g) = (tmp<<5)&0xFC00;                          \
-                       (b) = (tmp<<11)&0xF800;                         \
-                       buf += 2;                                       \
-               }                                                       \
-               break;                                                  \
-                                                                       \
-               case VIDEO_PALETTE_RGB555:                              \
-                       (r) = (buf[0]&0xF8)<<8;                         \
-                       (g) = ((buf[0] << 5 | buf[1] >> 3)&0xF8)<<8;    \
-                       (b) = ((buf[1] << 2 ) & 0xF8)<<8;               \
-                       buf += 2;                                       \
-                       break;                                          \
-                                                                       \
-               case VIDEO_PALETTE_RGB24:                               \
-                       (r) = buf[0] << 8; (g) = buf[1] << 8;           \
-                       (b) = buf[2] << 8;                              \
-                       buf += 3;                                       \
-                       break;                                          \
-                                                                       \
-               default:                                                \
-                       fprintf(stderr,                                 \
-                               "Format %d not yet supported\n",        \
-                               format);                                \
-       }                                                               \
-}
-
-int get_brightness_adj(unsigned char *image, long size, int *brightness) {
-  long i, tot = 0;
-  for (i=0;i<size*3;i++)
-    tot += image[i];
-  *brightness = (128 - tot/(size*3))/3;
-  return !((tot/(size*3)) >= 126 && (tot/(size*3)) <= 130);
-}
-
-int main(int argc, char ** argv)
-{
-  int fd = open(FILE, O_RDONLY), f;
-  struct video_capability cap;
-  struct video_window win;
-  struct video_picture vpic;
-
-  unsigned char *buffer, *src;
-  int bpp = 24, r, g, b;
-  unsigned int i, src_depth;
-
-  if (fd < 0) {
-    perror(FILE);
-    exit(1);
-  }
-
-  if (ioctl(fd, VIDIOCGCAP, &cap) < 0) {
-    perror("VIDIOGCAP");
-    fprintf(stderr, "(" FILE " not a video4linux device?)\n");
-    close(fd);
-    exit(1);
-  }
-
-  if (ioctl(fd, VIDIOCGWIN, &win) < 0) {
-    perror("VIDIOCGWIN");
-    close(fd);
-    exit(1);
-  }
-
-  if (ioctl(fd, VIDIOCGPICT, &vpic) < 0) {
-    perror("VIDIOCGPICT");
-    close(fd);
-    exit(1);
-  }
-
-  if (cap.type & VID_TYPE_MONOCHROME) {
-    vpic.depth=8;
-    vpic.palette=VIDEO_PALETTE_GREY;    /* 8bit grey */
-    if(ioctl(fd, VIDIOCSPICT, &vpic) < 0) {
-      vpic.depth=6;
-      if(ioctl(fd, VIDIOCSPICT, &vpic) < 0) {
-       vpic.depth=4;
-       if(ioctl(fd, VIDIOCSPICT, &vpic) < 0) {
-         fprintf(stderr, "Unable to find a supported capture format.\n");
-         close(fd);
-         exit(1);
-       }
-      }
-    }
-  } else {
-    vpic.depth=24;
-    vpic.palette=VIDEO_PALETTE_RGB24;
-
-    if(ioctl(fd, VIDIOCSPICT, &vpic) < 0) {
-      vpic.palette=VIDEO_PALETTE_RGB565;
-      vpic.depth=16;
-
-      if(ioctl(fd, VIDIOCSPICT, &vpic)==-1) {
-       vpic.palette=VIDEO_PALETTE_RGB555;
-       vpic.depth=15;
-
-       if(ioctl(fd, VIDIOCSPICT, &vpic)==-1) {
-         fprintf(stderr, "Unable to find a supported capture format.\n");
-         return -1;
-       }
-      }
-    }
-  }
-
-  buffer = malloc(win.width * win.height * bpp);
-  if (!buffer) {
-    fprintf(stderr, "Out of memory.\n");
-    exit(1);
-  }
-
-  do {
-    int newbright;
-    read(fd, buffer, win.width * win.height * bpp);
-    f = get_brightness_adj(buffer, win.width * win.height, &newbright);
-    if (f) {
-      vpic.brightness += (newbright << 8);
-      if(ioctl(fd, VIDIOCSPICT, &vpic)==-1) {
-       perror("VIDIOSPICT");
-       break;
-      }
-    }
-  } while (f);
-
-  fprintf(stdout, "P6\n%d %d 255\n", win.width, win.height);
-
-  src = buffer;
-
-  for (i = 0; i < win.width * win.height; i++) {
-    READ_VIDEO_PIXEL(src, vpic.palette, src_depth, r, g, b);
-    fputc(r>>8, stdout);
-    fputc(g>>8, stdout);
-    fputc(b>>8, stdout);
-  }
-
-  close(fd);
-  return 0;
-}
--------------------- 8< ---------------- 8< -----------------------------
+format (.ppm)  To produce .jpg output, you can use it like this:
+'v4lgrab | convert - c-qcam.jpg'
 
 
 10.0 --- Other Information
diff -r c875b3d2c5e5 -r 29fd5adfdc07 Documentation/video4linux/Zoran
--- a/Documentation/video4linux/Zoran   Mon Aug 07 17:39:11 2006 -0400
+++ b/Documentation/video4linux/Zoran   Mon Aug 07 18:15:57 2006 -0400
@@ -33,6 +33,21 @@ Norms: PAL, SECAM (720x576 @ 25 fps), NT
 Norms: PAL, SECAM (720x576 @ 25 fps), NTSC (720x480 @ 29.97 fps)
 Card number: 7
 
+AverMedia 6 Eyes AVS6EYES:
+* Zoran zr36067 PCI controller
+* Zoran zr36060 MJPEG codec
+* Samsung ks0127 TV decoder
+* Conexant bt866  TV encoder
+Drivers to use: videodev, i2c-core, i2c-algo-bit,
+               videocodec, ks0127, bt866, zr36060, zr36067
+Inputs/outputs: Six physical inputs. 1-6 are composite,
+               1-2, 3-4, 5-6 doubles as S-video,
+               1-3 triples as component.
+               One composite output.
+Norms: PAL, SECAM (720x576 @ 25 fps), NTSC (720x480 @ 29.97 fps)
+Card number: 8
+Not autodetected, card=8 is necessary.
+
 Linux Media Labs LML33:
 * Zoran zr36067 PCI controller
 * Zoran zr36060 MJPEG codec
@@ -192,6 +207,10 @@ was introduced in 1996, is used in the D
 was introduced in 1996, is used in the DC30 and DC30+ and
 can handle: PAL B/G/H/I, PAL N, PAL M, NTSC M, NTSC 44, PAL 60, SECAM,NTSC Comb
 
+Samsung ks0127 TV decoder
+is used in the AVS6EYES card and
+can handle: NTSC-M/N/44, PAL-M/N/B/G/H/I/D/K/L and SECAM
+
 ===========================
 
 1.2 What the TV encoder can do an what not
@@ -220,6 +239,10 @@ ITT mse3000 TV encoder
 ITT mse3000 TV encoder
 was introduced in 1991, is used in the DC10 old
 can generate: PAL , NTSC , SECAM
+
+Conexant bt866 TV encoder
+is used in AVS6EYES, and
+can generate: NTSC/PAL, PAL­M, PAL­N
 
 The adv717x, should be able to produce PAL N. But you find nothing PAL N
 specific in the registers. Seem that you have to reuse a other standard
diff -r c875b3d2c5e5 -r 29fd5adfdc07 Documentation/video4linux/bttv/CONTRIBUTORS
--- a/Documentation/video4linux/bttv/CONTRIBUTORS       Mon Aug 07 17:39:11 
2006 -0400
+++ b/Documentation/video4linux/bttv/CONTRIBUTORS       Mon Aug 07 18:15:57 
2006 -0400
@@ -1,4 +1,4 @@ Contributors to bttv:
-Contributors to bttv: 
+Contributors to bttv:
 
 Michael Chu <mmchu@xxxxxxxxx>
   AverMedia fix and more flexible card recognition
@@ -8,8 +8,8 @@ Alan Cox <alan@xxxxxxxxxx>
 
 Chris Kleitsch
   Hardware I2C
-  
-Gerd Knorr <kraxel@xxxxxxxxxxxxxxx> 
+
+Gerd Knorr <kraxel@xxxxxxxxxxxxxxx>
   Radio card (ITT sound processor)
 
 bigfoot <bigfoot@xxxxxxxxxxx>
@@ -18,7 +18,7 @@ Ragnar Hojland Espinosa <ragnar@xxxxxxxx
 
 
 + many more (please mail me if you are missing in this list and would
-             like to be mentioned)
+            like to be mentioned)
 
 
 
diff -r c875b3d2c5e5 -r 29fd5adfdc07 Documentation/video4linux/et61x251.txt
--- a/Documentation/video4linux/et61x251.txt    Mon Aug 07 17:39:11 2006 -0400
+++ b/Documentation/video4linux/et61x251.txt    Mon Aug 07 18:15:57 2006 -0400
@@ -1,9 +1,9 @@
 
-                       ET61X[12]51 PC Camera Controllers
-                                Driver for Linux
-                       =================================
-
-                               - Documentation -
+                      ET61X[12]51 PC Camera Controllers
+                               Driver for Linux
+                      =================================
+
+                              - Documentation -
 
 
 Index
@@ -156,46 +156,46 @@ Type:           short array (min = 0, ma
 Type:           short array (min = 0, max = 64)
 Syntax:         <-1|n[,...]>
 Description:    Specify V4L2 minor mode number:
-                -1 = use next available
-                 n = use minor number n
-                You can specify up to 64 cameras this way.
-                For example:
-                video_nr=-1,2,-1 would assign minor number 2 to the second
-                registered camera and use auto for the first one and for every
-                other camera.
+               -1 = use next available
+                n = use minor number n
+               You can specify up to 64 cameras this way.
+               For example:
+               video_nr=-1,2,-1 would assign minor number 2 to the second
+               registered camera and use auto for the first one and for every
+               other camera.
 Default:        -1
 -------------------------------------------------------------------------------
 Name:           force_munmap
 Type:           bool array (min = 0, max = 64)
 Syntax:         <0|1[,...]>
 Description:    Force the application to unmap previously mapped buffer memory
-                before calling any VIDIOC_S_CROP or VIDIOC_S_FMT ioctl's. Not
-                all the applications support this feature. This parameter is
-                specific for each detected camera.
-                0 = do not force memory unmapping
-                1 = force memory unmapping (save memory)
+               before calling any VIDIOC_S_CROP or VIDIOC_S_FMT ioctl's. Not
+               all the applications support this feature. This parameter is
+               specific for each detected camera.
+               0 = do not force memory unmapping
+               1 = force memory unmapping (save memory)
 Default:        0
 -------------------------------------------------------------------------------
 Name:           frame_timeout
 Type:           uint array (min = 0, max = 64)
 Syntax:         <n[,...]>
 Description:    Timeout for a video frame in seconds. This parameter is
-                specific for each detected camera. This parameter can be
-                changed at runtime thanks to the /sys filesystem interface.
+               specific for each detected camera. This parameter can be
+               changed at runtime thanks to the /sys filesystem interface.
 Default:        2
 -------------------------------------------------------------------------------
 Name:           debug
 Type:           ushort
 Syntax:         <n>
 Description:    Debugging information level, from 0 to 3:
-                0 = none (use carefully)
-                1 = critical errors
-                2 = significant informations
-                3 = more verbose messages
-                Level 3 is useful for testing only, when only one device
-                is used at the same time. It also shows some more informations
-                about the hardware being detected. This module parameter can be
-                changed at runtime thanks to the /sys filesystem interface.
+               0 = none (use carefully)
+               1 = critical errors
+               2 = significant informations
+               3 = more verbose messages
+               Level 3 is useful for testing only, when only one device
+               is used at the same time. It also shows some more informations
+               about the hardware being detected. This module parameter can be
+               changed at runtime thanks to the /sys filesystem interface.
 Default:        2
 -------------------------------------------------------------------------------
 
diff -r c875b3d2c5e5 -r 29fd5adfdc07 Documentation/video4linux/ibmcam.txt
--- a/Documentation/video4linux/ibmcam.txt      Mon Aug 07 17:39:11 2006 -0400
+++ b/Documentation/video4linux/ibmcam.txt      Mon Aug 07 18:15:57 2006 -0400
@@ -21,7 +21,7 @@ Supported controls:
 Supported controls:
 - by V4L: Contrast,  Brightness, Color, Hue
 - by driver options: frame rate, lighting conditions, video format,
-                     default picture settings, sharpness.
+                    default picture settings, sharpness.
 
 SUPPORTED CAMERAS:
 
@@ -191,66 +191,66 @@ init_model2_yb  Integer         0..255 [
 init_model2_yb  Integer         0..255 [0xa0]   init_model2_yb=200
 
 debug           You don't need this option unless you are a developer.
-                If you are a developer then you will see in the code
-                what values do what. 0=off.
+               If you are a developer then you will see in the code
+               what values do what. 0=off.
 
 flags           This is a bit mask, and you can combine any number of
-                bits to produce what you want. Usually you don't want
-                any of extra features this option provides:
-
-                FLAGS_RETRY_VIDIOCSYNC  1  This bit allows to retry failed
-                                           VIDIOCSYNC ioctls without failing.
-                                           Will work with xawtv, will not
-                                           with xrealproducer. Default is
-                                           not set.
-                FLAGS_MONOCHROME        2  Activates monochrome (b/w) mode.
-                FLAGS_DISPLAY_HINTS     4  Shows colored pixels which have
-                                           magic meaning to developers.
-                FLAGS_OVERLAY_STATS     8  Shows tiny numbers on screen,
-                                           useful only for debugging.
-                FLAGS_FORCE_TESTPATTERN 16 Shows blue screen with numbers.
-                FLAGS_SEPARATE_FRAMES   32 Shows each frame separately, as
-                                           it was received from the camera.
-                                           Default (not set) is to mix the
-                                           preceding frame in to compensate
-                                           for occasional loss of Isoc data
-                                           on high frame rates.
-                FLAGS_CLEAN_FRAMES      64 Forces "cleanup" of each frame
-                                           prior to use; relevant only if
-                                           FLAGS_SEPARATE_FRAMES is set.
-                                           Default is not to clean frames,
-                                           this is a little faster but may
-                                           produce flicker if frame rate is
-                                           too high and Isoc data gets lost.
-                FLAGS_NO_DECODING      128 This flag turns the video stream
-                                           decoder off, and dumps the raw
-                                           Isoc data from the camera into
-                                           the reading process. Useful to
-                                           developers, but not to users.
+               bits to produce what you want. Usually you don't want
+               any of extra features this option provides:
+
+               FLAGS_RETRY_VIDIOCSYNC  1  This bit allows to retry failed
+                                          VIDIOCSYNC ioctls without failing.
+                                          Will work with xawtv, will not
+                                          with xrealproducer. Default is
+                                          not set.
+               FLAGS_MONOCHROME        2  Activates monochrome (b/w) mode.
+               FLAGS_DISPLAY_HINTS     4  Shows colored pixels which have
+                                          magic meaning to developers.
+               FLAGS_OVERLAY_STATS     8  Shows tiny numbers on screen,
+                                          useful only for debugging.
+               FLAGS_FORCE_TESTPATTERN 16 Shows blue screen with numbers.
+               FLAGS_SEPARATE_FRAMES   32 Shows each frame separately, as
+                                          it was received from the camera.
+                                          Default (not set) is to mix the
+                                          preceding frame in to compensate
+                                          for occasional loss of Isoc data
+                                          on high frame rates.
+               FLAGS_CLEAN_FRAMES      64 Forces "cleanup" of each frame
+                                          prior to use; relevant only if
+                                          FLAGS_SEPARATE_FRAMES is set.
+                                          Default is not to clean frames,
+                                          this is a little faster but may
+                                          produce flicker if frame rate is
+                                          too high and Isoc data gets lost.
+               FLAGS_NO_DECODING      128 This flag turns the video stream
+                                          decoder off, and dumps the raw
+                                          Isoc data from the camera into
+                                          the reading process. Useful to
+                                          developers, but not to users.
 
 framerate       This setting controls frame rate of the camera. This is
-                an approximate setting (in terms of "worst" ... "best")
-                because camera changes frame rate depending on amount
-                of light available. Setting 0 is slowest, 6 is fastest.
-                Beware - fast settings are very demanding and may not
-                work well with all video sizes. Be conservative.
+               an approximate setting (in terms of "worst" ... "best")
+               because camera changes frame rate depending on amount
+               of light available. Setting 0 is slowest, 6 is fastest.
+               Beware - fast settings are very demanding and may not
+               work well with all video sizes. Be conservative.
 
 hue_correction  This highly optional setting allows to adjust the
-                hue of the image in a way slightly different from
-                what usual "hue" control does. Both controls affect
-                YUV colorspace: regular "hue" control adjusts only
-                U component, and this "hue_correction" option similarly
-                adjusts only V component. However usually it is enough
-                to tweak only U or V to compensate for colored light or
-                color temperature; this option simply allows more
-                complicated correction when and if it is necessary.
+               hue of the image in a way slightly different from
+               what usual "hue" control does. Both controls affect
+               YUV colorspace: regular "hue" control adjusts only
+               U component, and this "hue_correction" option similarly
+               adjusts only V component. However usually it is enough
+               to tweak only U or V to compensate for colored light or
+               color temperature; this option simply allows more
+               complicated correction when and if it is necessary.
 
 init_brightness These settings specify _initial_ values which will be
 init_contrast   used to set up the camera. If your V4L application has
 init_color      its own controls to adjust the picture then these
 init_hue        controls will be used too. These options allow you to
-                preconfigure the camera when it gets connected, before
-                any V4L application connects to it. Good for webcams.
+               preconfigure the camera when it gets connected, before
+               any V4L application connects to it. Good for webcams.
 
 init_model2_rg  These initial settings alter color balance of the
 init_model2_rg2 camera on hardware level. All four settings may be used
@@ -258,47 +258,47 @@ init_model2_yb  settings only apply to M
 init_model2_yb  settings only apply to Model 2 cameras.
 
 lighting        This option selects one of three hardware-defined
-                photosensitivity settings of the camera. 0=bright light,
-                1=Medium (default), 2=Low light. This setting affects
-                frame rate: the dimmer the lighting the lower the frame
-                rate (because longer exposition time is needed). The
-                Model 2 cameras allow values more than 2 for this option,
-                thus enabling extremely high sensitivity at cost of frame
-                rate, color saturation and imaging sensor noise.
+               photosensitivity settings of the camera. 0=bright light,
+               1=Medium (default), 2=Low light. This setting affects
+               frame rate: the dimmer the lighting the lower the frame
+               rate (because longer exposition time is needed). The
+               Model 2 cameras allow values more than 2 for this option,
+               thus enabling extremely high sensitivity at cost of frame
+               rate, color saturation and imaging sensor noise.
 
 sharpness       This option controls smoothing (noise reduction)
-                made by camera. Setting 0 is most smooth, setting 6
-                is most sharp. Be aware that CMOS sensor used in the
-                camera is pretty noisy, so if you choose 6 you will
-                be greeted with "snowy" image. Default is 4. Model 2
-                cameras do not support this feature.
+               made by camera. Setting 0 is most smooth, setting 6
+               is most sharp. Be aware that CMOS sensor used in the
+               camera is pretty noisy, so if you choose 6 you will
+               be greeted with "snowy" image. Default is 4. Model 2
+               cameras do not support this feature.
 
 size            This setting chooses one of several image sizes that are
-                supported by this driver. Cameras may support more, but
-                it's difficult to reverse-engineer all formats.
-                Following video sizes are supported:
-
-                size=0     128x96  (Model 1 only)
-                size=1     160x120
-                size=2     176x144
-                size=3     320x240 (Model 2 only)
-                size=4     352x240 (Model 2 only)
-                size=5     352x288
-                size=6     640x480 (Model 3 only)
-
-                The 352x288 is the native size of the Model 1 sensor
-                array, so it's the best resolution the camera can
-                yield. The best resolution of Model 2 is 176x144, and
-                larger images are produced by stretching the bitmap.
-                Model 3 has sensor with 640x480 grid, and it works too,
-                but the frame rate will be exceptionally low (1-2 FPS);
-                it may be still OK for some applications, like security.
-                Choose the image size you need. The smaller image can
-                support faster frame rate. Default is 352x288.
+               supported by this driver. Cameras may support more, but
+               it's difficult to reverse-engineer all formats.
+               Following video sizes are supported:
+
+               size=0     128x96  (Model 1 only)
+               size=1     160x120
+               size=2     176x144
+               size=3     320x240 (Model 2 only)
+               size=4     352x240 (Model 2 only)
+               size=5     352x288
+               size=6     640x480 (Model 3 only)
+
+               The 352x288 is the native size of the Model 1 sensor
+               array, so it's the best resolution the camera can
+               yield. The best resolution of Model 2 is 176x144, and
+               larger images are produced by stretching the bitmap.
+               Model 3 has sensor with 640x480 grid, and it works too,
+               but the frame rate will be exceptionally low (1-2 FPS);
+               it may be still OK for some applications, like security.
+               Choose the image size you need. The smaller image can
+               support faster frame rate. Default is 352x288.
 
 For more information and the Troubleshooting FAQ visit this URL:
 
-                http://www.linux-usb.org/ibmcam/
+               http://www.linux-usb.org/ibmcam/
 
 WHAT NEEDS TO BE DONE:
 
diff -r c875b3d2c5e5 -r 29fd5adfdc07 Documentation/video4linux/ov511.txt
--- a/Documentation/video4linux/ov511.txt       Mon Aug 07 17:39:11 2006 -0400
+++ b/Documentation/video4linux/ov511.txt       Mon Aug 07 18:15:57 2006 -0400
@@ -81,7 +81,7 @@ MODULE PARAMETERS:
   TYPE: integer (Boolean)
   DEFAULT: 1
   DESC: Brightness is normally under automatic control and can't be set
-        manually by the video app. Set to 0 for manual control.
+       manually by the video app. Set to 0 for manual control.
 
   NAME: autogain
   TYPE: integer (Boolean)
@@ -97,13 +97,13 @@ MODULE PARAMETERS:
   TYPE: integer (0-6)
   DEFAULT: 3
   DESC: Sets the threshold for printing debug messages. The higher the value,
-        the more is printed. The levels are cumulative, and are as follows:
-          0=no debug messages
-          1=init/detection/unload and other significant messages
-          2=some warning messages
-          3=config/control function calls
-          4=most function calls and data parsing messages
-          5=highly repetitive mesgs
+       the more is printed. The levels are cumulative, and are as follows:
+         0=no debug messages
+         1=init/detection/unload and other significant messages
+         2=some warning messages
+         3=config/control function calls
+         4=most function calls and data parsing messages
+         5=highly repetitive mesgs
 
   NAME: snapshot
   TYPE: integer (Boolean)
@@ -116,24 +116,24 @@ MODULE PARAMETERS:
   TYPE: integer (1-4 for OV511, 1-31 for OV511+)
   DEFAULT: 1
   DESC: Number of cameras allowed to stream simultaneously on a single bus.
-        Values higher than 1 reduce the data rate of each camera, allowing two
-        or more to be used at once. If you have a complicated setup involving
-        both OV511 and OV511+ cameras, trial-and-error may be necessary for
-        finding the optimum setting.
+       Values higher than 1 reduce the data rate of each camera, allowing two
+       or more to be used at once. If you have a complicated setup involving
+       both OV511 and OV511+ cameras, trial-and-error may be necessary for
+       finding the optimum setting.
 
   NAME: compress
   TYPE: integer (Boolean)
   DEFAULT: 0
   DESC: Set this to 1 to turn on the camera's compression engine. This can
-        potentially increase the frame rate at the expense of quality, if you
-        have a fast CPU. You must load the proper compression module for your
-        camera before starting your application (ov511_decomp or ov518_decomp).
+       potentially increase the frame rate at the expense of quality, if you
+       have a fast CPU. You must load the proper compression module for your
+       camera before starting your application (ov511_decomp or ov518_decomp).
 
   NAME: testpat
   TYPE: integer (Boolean)
   DEFAULT: 0
   DESC: This configures the camera's sensor to transmit a colored test-pattern
-        instead of an image. This does not work correctly yet.
+       instead of an image. This does not work correctly yet.
 
   NAME: dumppix
   TYPE: integer (0-2)
diff -r c875b3d2c5e5 -r 29fd5adfdc07 Documentation/video4linux/sn9c102.txt
--- a/Documentation/video4linux/sn9c102.txt     Mon Aug 07 17:39:11 2006 -0400
+++ b/Documentation/video4linux/sn9c102.txt     Mon Aug 07 18:15:57 2006 -0400
@@ -1,9 +1,9 @@
 
-                         SN9C10x PC Camera Controllers
-                                Driver for Linux
-                         =============================
-
-                               - Documentation -
+                        SN9C10x PC Camera Controllers
+                               Driver for Linux
+                        =============================
+
+                              - Documentation -
 
 
 Index
@@ -176,46 +176,46 @@ Type:           short array (min = 0, ma
 Type:           short array (min = 0, max = 64)
 Syntax:         <-1|n[,...]>
 Description:    Specify V4L2 minor mode number:
-                -1 = use next available
-                 n = use minor number n
-                You can specify up to 64 cameras this way.
-                For example:
-                video_nr=-1,2,-1 would assign minor number 2 to the second
-                recognized camera and use auto for the first one and for every
-                other camera.
+               -1 = use next available
+                n = use minor number n
+               You can specify up to 64 cameras this way.
+               For example:
+               video_nr=-1,2,-1 would assign minor number 2 to the second
+               recognized camera and use auto for the first one and for every
+               other camera.
 Default:        -1
 -------------------------------------------------------------------------------
 Name:           force_munmap
 Type:           bool array (min = 0, max = 64)
 Syntax:         <0|1[,...]>
 Description:    Force the application to unmap previously mapped buffer memory
-                before calling any VIDIOC_S_CROP or VIDIOC_S_FMT ioctl's. Not
-                all the applications support this feature. This parameter is
-                specific for each detected camera.
-                0 = do not force memory unmapping
-                1 = force memory unmapping (save memory)
+               before calling any VIDIOC_S_CROP or VIDIOC_S_FMT ioctl's. Not
+               all the applications support this feature. This parameter is
+               specific for each detected camera.
+               0 = do not force memory unmapping
+               1 = force memory unmapping (save memory)
 Default:        0
 -------------------------------------------------------------------------------
 Name:           frame_timeout
 Type:           uint array (min = 0, max = 64)
 Syntax:         <n[,...]>
 Description:    Timeout for a video frame in seconds. This parameter is
-                specific for each detected camera. This parameter can be
-                changed at runtime thanks to the /sys filesystem interface.
+               specific for each detected camera. This parameter can be
+               changed at runtime thanks to the /sys filesystem interface.
 Default:        2
 -------------------------------------------------------------------------------
 Name:           debug
 Type:           ushort
 Syntax:         <n>
 Description:    Debugging information level, from 0 to 3:
-                0 = none (use carefully)
-                1 = critical errors
-                2 = significant informations
-                3 = more verbose messages
-                Level 3 is useful for testing only, when only one device
-                is used. It also shows some more informations about the
-                hardware being detected. This parameter can be changed at
-                runtime thanks to the /sys filesystem interface.
+               0 = none (use carefully)
+               1 = critical errors
+               2 = significant informations
+               3 = more verbose messages
+               Level 3 is useful for testing only, when only one device
+               is used. It also shows some more informations about the
+               hardware being detected. This parameter can be changed at
+               runtime thanks to the /sys filesystem interface.
 Default:        2
 -------------------------------------------------------------------------------
 
@@ -280,24 +280,24 @@ 0x04    0xC4          Frame synchronisat
 0x04    0xC4          Frame synchronisation pattern.
 0x05    0x96          Frame synchronisation pattern.
 0x06    0xXX          Unknown meaning. The exact value depends on the chip;
-                      possible values are 0x00, 0x01 and 0x20.
+                     possible values are 0x00, 0x01 and 0x20.
 0x07    0xXX          Variable value, whose bits are ff00uzzc, where ff is a
-                      frame counter, u is unknown, zz is a size indicator
-                      (00 = VGA, 01 = SIF, 10 = QSIF) and c stands for
-                      "compression enabled" (1 = yes, 0 = no).
+                     frame counter, u is unknown, zz is a size indicator
+                     (00 = VGA, 01 = SIF, 10 = QSIF) and c stands for
+                     "compression enabled" (1 = yes, 0 = no).
 0x08    0xXX          Brightness sum inside Auto-Exposure area (low-byte).
 0x09    0xXX          Brightness sum inside Auto-Exposure area (high-byte).
-                      For a pure white image, this number will be equal to 500
-                      times the area of the specified AE area. For images
-                      that are not pure white, the value scales down according
-                      to relative whiteness.
+                     For a pure white image, this number will be equal to 500
+                     times the area of the specified AE area. For images
+                     that are not pure white, the value scales down according
+                     to relative whiteness.
 0x0A    0xXX          Brightness sum outside Auto-Exposure area (low-byte).
 0x0B    0xXX          Brightness sum outside Auto-Exposure area (high-byte).
-                      For a pure white image, this number will be equal to 125
-                      times the area outside of the specified AE area. For
-                      images that are not pure white, the value scales down
-                      according to relative whiteness.
-                      according to relative whiteness.
+                     For a pure white image, this number will be equal to 125
+                     times the area outside of the specified AE area. For
+                     images that are not pure white, the value scales down
+                     according to relative whiteness.
+                     according to relative whiteness.
 
 The following bytes are used by the SN9C103 bridge only:
 
diff -r c875b3d2c5e5 -r 29fd5adfdc07 Documentation/video4linux/w9968cf.txt
--- a/Documentation/video4linux/w9968cf.txt     Mon Aug 07 17:39:11 2006 -0400
+++ b/Documentation/video4linux/w9968cf.txt     Mon Aug 07 18:15:57 2006 -0400
@@ -1,9 +1,9 @@
 
-                   W996[87]CF JPEG USB Dual Mode Camera Chip
-                     Driver for Linux 2.6 (basic version)
-                   =========================================
-
-                               - Documentation -
+                  W996[87]CF JPEG USB Dual Mode Camera Chip
+                    Driver for Linux 2.6 (basic version)
+                  =========================================
+
+                              - Documentation -
 
 
 Index
@@ -188,57 +188,57 @@ Type:            bool
 Type:            bool
 Syntax:          <0|1>
 Description:     Automatic 'ovcamchip' module loading: 0 disabled, 1 enabled.
-                 If enabled, 'insmod' searches for the required 'ovcamchip'
-                 module in the system, according to its configuration, and
-                 loads that module automatically. This action is performed as
-                 once soon as the 'w9968cf' module is loaded into memory.
+                If enabled, 'insmod' searches for the required 'ovcamchip'
+                module in the system, according to its configuration, and
+                loads that module automatically. This action is performed as
+                once soon as the 'w9968cf' module is loaded into memory.
 Default:         1
 Note:            The kernel must be compiled with the CONFIG_KMOD option
-                 enabled for the 'ovcamchip' module to be loaded and for
-                 this parameter to be present.
+                enabled for the 'ovcamchip' module to be loaded and for
+                this parameter to be present.
 -------------------------------------------------------------------------------
 Name:           simcams
 Type:           int
 Syntax:         <n>
 Description:    Number of cameras allowed to stream simultaneously.
-                n may vary from 0 to 32.
+               n may vary from 0 to 32.
 Default:        32
 -------------------------------------------------------------------------------
 Name:           video_nr
 Type:           int array (min = 0, max = 32)
 Syntax:         <-1|n[,...]>
 Description:    Specify V4L minor mode number.
-                -1 = use next available
-                 n = use minor number n
-                You can specify up to 32 cameras this way.
-                For example:
-                video_nr=-1,2,-1 would assign minor number 2 to the second
-                recognized camera and use auto for the first one and for every
-                other camera.
+               -1 = use next available
+                n = use minor number n
+               You can specify up to 32 cameras this way.
+               For example:
+               video_nr=-1,2,-1 would assign minor number 2 to the second
+               recognized camera and use auto for the first one and for every
+               other camera.
 Default:        -1
 -------------------------------------------------------------------------------
 Name:           packet_size
 Type:           int array (min = 0, max = 32)
 Syntax:         <n[,...]>
 Description:    Specify the maximum data payload size in bytes for alternate
-                settings, for each device. n is scaled between 63 and 1023.
+               settings, for each device. n is scaled between 63 and 1023.
 Default:        1023
 -------------------------------------------------------------------------------
 Name:           max_buffers
 Type:           int array (min = 0, max = 32)
 Syntax:         <n[,...]>
 Description:    For advanced users.
-                Specify the maximum number of video frame buffers to allocate
-                for each device, from 2 to 32.
+               Specify the maximum number of video frame buffers to allocate
+               for each device, from 2 to 32.
 Default:        2
 -------------------------------------------------------------------------------
 Name:           double_buffer
 Type:           bool array (min = 0, max = 32)
 Syntax:         <0|1[,...]>
 Description:    Hardware double buffering: 0 disabled, 1 enabled.
-                It should be enabled if you want smooth video output: if you
-                obtain out of sync. video, disable it, or try to
-                decrease the 'clockdiv' module parameter value.
+               It should be enabled if you want smooth video output: if you
+               obtain out of sync. video, disable it, or try to
+               decrease the 'clockdiv' module parameter value.
 Default:        1 for every device.
 -------------------------------------------------------------------------------
 Name:           clamping
@@ -251,9 +251,9 @@ Type:           int array (min = 0, max 
 Type:           int array (min = 0, max = 32)
 Syntax:         <0|1|2[,...]>
 Description:    Video filter type.
-                0 none, 1 (1-2-1) 3-tap filter, 2 (2-3-6-3-2) 5-tap filter.
-                The filter is used to reduce noise and aliasing artifacts
-                produced by the CCD or CMOS image sensor.
+               0 none, 1 (1-2-1) 3-tap filter, 2 (2-3-6-3-2) 5-tap filter.
+               The filter is used to reduce noise and aliasing artifacts
+               produced by the CCD or CMOS image sensor.
 Default:        0 for every device.
 -------------------------------------------------------------------------------
 Name:           largeview
@@ -266,9 +266,9 @@ Type:           bool array (min = 0, max
 Type:           bool array (min = 0, max = 32)
 Syntax:         <0|1[,...]>
 Description:    Software scaling (for non-compressed video only):
-                0 disabled, 1 enabled.
-                Disable it if you have a slow CPU or you don't have enough
-                memory.
+               0 disabled, 1 enabled.
+               Disable it if you have a slow CPU or you don't have enough
+               memory.
 Default:        0 for every device.
 Note:           If 'w9968cf-vpp' is not present, this parameter is set to 0.
 -------------------------------------------------------------------------------
@@ -276,36 +276,36 @@ Type:           int array (min = 0, max 
 Type:           int array (min = 0, max = 32)
 Syntax:         <0|1|2[,...]>
 Description:    Software video decompression:
-                0 = disables decompression
-                    (doesn't allow formats needing decompression).
-                1 = forces decompression
-                    (allows formats needing decompression only).
-                2 = allows any permitted formats.
-                Formats supporting (de)compressed video are YUV422P and
-                YUV420P/YUV420 in any resolutions where width and height are
-                multiples of 16.
+               0 = disables decompression
+                   (doesn't allow formats needing decompression).
+               1 = forces decompression
+                   (allows formats needing decompression only).
+               2 = allows any permitted formats.
+               Formats supporting (de)compressed video are YUV422P and
+               YUV420P/YUV420 in any resolutions where width and height are
+               multiples of 16.
 Default:        2 for every device.
 Note:           If 'w9968cf-vpp' is not present, forcing decompression is not
-                allowed; in this case this parameter is set to 2.
+               allowed; in this case this parameter is set to 2.
 -------------------------------------------------------------------------------
 Name:           force_palette
 Type:           int array (min = 0, max = 32)
 Syntax:         <0|9|10|13|15|8|7|1|6|3|4|5[,...]>
 Description:    Force picture palette.
-                In order:
-                 0 = Off - allows any of the following formats:
-                 9 = UYVY    16 bpp - Original video, compression disabled
-                10 = YUV420  12 bpp - Original video, compression enabled
-                13 = YUV422P 16 bpp - Original video, compression enabled
-                15 = YUV420P 12 bpp - Original video, compression enabled
-                 8 = YUVY    16 bpp - Software conversion from UYVY
-                 7 = YUV422  16 bpp - Software conversion from UYVY
-                 1 = GREY     8 bpp - Software conversion from UYVY
-                 6 = RGB555  16 bpp - Software conversion from UYVY
-                 3 = RGB565  16 bpp - Software conversion from UYVY
-                 4 = RGB24   24 bpp - Software conversion from UYVY
-                 5 = RGB32   32 bpp - Software conversion from UYVY
-                When not 0, this parameter will override 'decompression'.
+               In order:
+                0 = Off - allows any of the following formats:
+                9 = UYVY    16 bpp - Original video, compression disabled
+               10 = YUV420  12 bpp - Original video, compression enabled
+               13 = YUV422P 16 bpp - Original video, compression enabled
+               15 = YUV420P 12 bpp - Original video, compression enabled
+                8 = YUVY    16 bpp - Software conversion from UYVY
+                7 = YUV422  16 bpp - Software conversion from UYVY
+                1 = GREY     8 bpp - Software conversion from UYVY
+                6 = RGB555  16 bpp - Software conversion from UYVY
+                3 = RGB565  16 bpp - Software conversion from UYVY
+                4 = RGB24   24 bpp - Software conversion from UYVY
+                5 = RGB32   32 bpp - Software conversion from UYVY
+               When not 0, this parameter will override 'decompression'.
 Default:        0 for every device. Initial palette is 9 (UYVY).
 Note:           If 'w9968cf-vpp' is not present, this parameter is set to 9.
 -------------------------------------------------------------------------------
@@ -313,77 +313,77 @@ Type:           bool array (min = 0, max
 Type:           bool array (min = 0, max = 32)
 Syntax:         <0|1[,...]>
 Description:    Read RGB video data instead of BGR:
-                1 = use RGB component ordering.
-                0 = use BGR component ordering.
-                This parameter has effect when using RGBX palettes only.
+               1 = use RGB component ordering.
+               0 = use BGR component ordering.
+               This parameter has effect when using RGBX palettes only.
 Default:        0 for every device.
 -------------------------------------------------------------------------------
 Name:           autobright
 Type:           bool array (min = 0, max = 32)
 Syntax:         <0|1[,...]>
 Description:    Image sensor automatically changes brightness:
-                0 = no, 1 = yes
+               0 = no, 1 = yes
 Default:        0 for every device.
 -------------------------------------------------------------------------------
 Name:           autoexp
 Type:           bool array (min = 0, max = 32)
 Syntax:         <0|1[,...]>
 Description:    Image sensor automatically changes exposure:
-                0 = no, 1 = yes
+               0 = no, 1 = yes
 Default:        1 for every device.
 -------------------------------------------------------------------------------
 Name:           lightfreq
 Type:           int array (min = 0, max = 32)
 Syntax:         <50|60[,...]>
 Description:    Light frequency in Hz:
-                50 for European and Asian lighting, 60 for American lighting.
+               50 for European and Asian lighting, 60 for American lighting.
 Default:        50 for every device.
 -------------------------------------------------------------------------------
 Name:           bandingfilter
 Type:           bool array (min = 0, max = 32)
 Syntax:         <0|1[,...]>
 Description:    Banding filter to reduce effects of fluorescent
-                lighting:
-                0 disabled, 1 enabled.
-                This filter tries to reduce the pattern of horizontal
-                light/dark bands caused by some (usually fluorescent) lighting.
+               lighting:
+               0 disabled, 1 enabled.
+               This filter tries to reduce the pattern of horizontal
+               light/dark bands caused by some (usually fluorescent) lighting.
 Default:        0 for every device.
 -------------------------------------------------------------------------------
 Name:           clockdiv
 Type:           int array (min = 0, max = 32)
 Syntax:         <-1|n[,...]>
 Description:    Force pixel clock divisor to a specific value (for experts):
-                n may vary from 0 to 127.
-                -1 for automatic value.
-                See also the 'double_buffer' module parameter.
+               n may vary from 0 to 127.
+               -1 for automatic value.
+               See also the 'double_buffer' module parameter.
 Default:        -1 for every device.
 -------------------------------------------------------------------------------
 Name:           backlight
 Type:           bool array (min = 0, max = 32)
 Syntax:         <0|1[,...]>
 Description:    Objects are lit from behind:
-                0 = no, 1 = yes
+               0 = no, 1 = yes
 Default:        0 for every device.
 -------------------------------------------------------------------------------
 Name:           mirror
 Type:           bool array (min = 0, max = 32)
 Syntax:         <0|1[,...]>
 Description:    Reverse image horizontally:
-                0 = no, 1 = yes
+               0 = no, 1 = yes
 Default:        0 for every device.
 -------------------------------------------------------------------------------
 Name:           monochrome
 Type:           bool array (min = 0, max = 32)
 Syntax:         <0|1[,...]>
 Description:    The image sensor is monochrome:
-                0 = no, 1 = yes
+               0 = no, 1 = yes
 Default:        0 for every device.
 -------------------------------------------------------------------------------
 Name:           brightness
 Type:           long array (min = 0, max = 32)
 Syntax:         <n[,...]>
 Description:    Set picture brightness (0-65535).
-                This parameter has no effect if 'autobright' is enabled.
+               This parameter has no effect if 'autobright' is enabled.
 Default:        31000 for every device.
 -------------------------------------------------------------------------------
 Name:           hue
@@ -414,23 +414,23 @@ Type:           int
 Type:           int
 Syntax:         <n>
 Description:    Debugging information level, from 0 to 6:
-                0 = none (use carefully)
-                1 = critical errors
-                2 = significant informations
-                3 = configuration or general messages
-                4 = warnings
-                5 = called functions
-                6 = function internals
-                Level 5 and 6 are useful for testing only, when only one
-                device is used.
+               0 = none (use carefully)
+               1 = critical errors
+               2 = significant informations
+               3 = configuration or general messages
+               4 = warnings
+               5 = called functions
+               6 = function internals
+               Level 5 and 6 are useful for testing only, when only one
+               device is used.
 Default:        2
 -------------------------------------------------------------------------------
 Name:           specific_debug
 Type:           bool
 Syntax:         <0|1>
 Description:    Enable or disable specific debugging messages:
-                0 = print messages concerning every level <= 'debug' level.
-                1 = print messages concerning the level indicated by 'debug'.
+               0 = print messages concerning every level <= 'debug' level.
+               1 = print messages concerning the level indicated by 'debug'.
 Default:        0
 -------------------------------------------------------------------------------
 
diff -r c875b3d2c5e5 -r 29fd5adfdc07 Documentation/video4linux/zc0301.txt
--- a/Documentation/video4linux/zc0301.txt      Mon Aug 07 17:39:11 2006 -0400
+++ b/Documentation/video4linux/zc0301.txt      Mon Aug 07 18:15:57 2006 -0400
@@ -1,9 +1,9 @@
 
-                    ZC0301 Image Processor and Control Chip
-                                Driver for Linux
-                    =======================================
-
-                               - Documentation -
+             ZC0301 and ZC0301P Image Processor and Control Chip
+                               Driver for Linux
+             ===================================================
+
+                              - Documentation -
 
 
 Index
@@ -51,13 +51,13 @@ Foundation, Inc., 675 Mass Ave, Cambridg
 
 4. Overview and features
 ========================
-This driver supports the video interface of the devices mounting the ZC0301
-Image Processor and Control Chip.
+This driver supports the video interface of the devices mounting the ZC0301 or
+ZC0301P Image Processors and Control Chips.
 
 The driver relies on the Video4Linux2 and USB core modules. It has been
 designed to run properly on SMP systems as well.
 
-The latest version of the ZC0301 driver can be found at the following URL:
+The latest version of the ZC0301[P] driver can be found at the following URL:
 http://www.linux-projects.org/
 
 Some of the features of the driver are:
@@ -117,7 +117,7 @@ supported by the USB Audio driver thanks
 
 And finally:
 
-       # USB Multimedia devices
+       # V4L USB devices
        #
        CONFIG_USB_ZC0301=m
 
@@ -146,46 +146,46 @@ Type:           short array (min = 0, ma
 Type:           short array (min = 0, max = 64)
 Syntax:         <-1|n[,...]>
 Description:    Specify V4L2 minor mode number:
-                -1 = use next available
-                 n = use minor number n
-                You can specify up to 64 cameras this way.
-                For example:
-                video_nr=-1,2,-1 would assign minor number 2 to the second
-                registered camera and use auto for the first one and for every
-                other camera.
+               -1 = use next available
+                n = use minor number n
+               You can specify up to 64 cameras this way.
+               For example:
+               video_nr=-1,2,-1 would assign minor number 2 to the second
+               registered camera and use auto for the first one and for every
+               other camera.
 Default:        -1
 -------------------------------------------------------------------------------
 Name:           force_munmap
 Type:           bool array (min = 0, max = 64)
 Syntax:         <0|1[,...]>
 Description:    Force the application to unmap previously mapped buffer memory
-                before calling any VIDIOC_S_CROP or VIDIOC_S_FMT ioctl's. Not
-                all the applications support this feature. This parameter is
-                specific for each detected camera.
-                0 = do not force memory unmapping
-                1 = force memory unmapping (save memory)
+               before calling any VIDIOC_S_CROP or VIDIOC_S_FMT ioctl's. Not
+               all the applications support this feature. This parameter is
+               specific for each detected camera.
+               0 = do not force memory unmapping
+               1 = force memory unmapping (save memory)
 Default:        0
 -------------------------------------------------------------------------------
 Name:           frame_timeout
 Type:           uint array (min = 0, max = 64)
 Syntax:         <n[,...]>
 Description:    Timeout for a video frame in seconds. This parameter is
-                specific for each detected camera. This parameter can be
-                changed at runtime thanks to the /sys filesystem interface.
+               specific for each detected camera. This parameter can be
+               changed at runtime thanks to the /sys filesystem interface.
 Default:        2
 -------------------------------------------------------------------------------
 Name:           debug
 Type:           ushort
 Syntax:         <n>
 Description:    Debugging information level, from 0 to 3:
-                0 = none (use carefully)
-                1 = critical errors
-                2 = significant informations
-                3 = more verbose messages
-                Level 3 is useful for testing only, when only one device
-                is used at the same time. It also shows some more informations
-                about the hardware being detected. This module parameter can be
-                changed at runtime thanks to the /sys filesystem interface.
+               0 = none (use carefully)
+               1 = critical errors
+               2 = significant informations
+               3 = more verbose messages
+               Level 3 is useful for testing only, when only one device
+               is used at the same time. It also shows some more informations
+               about the hardware being detected. This module parameter can be
+               changed at runtime thanks to the /sys filesystem interface.
 Default:        2
 -------------------------------------------------------------------------------
 
@@ -204,11 +204,25 @@ 0x041e     0x4017
 0x041e     0x4017
 0x041e     0x401c
 0x041e     0x401e
+0x041e     0x401f
+0x041e     0x4022
 0x041e     0x4034
 0x041e     0x4035
+0x041e     0x4036
+0x041e     0x403a
+0x0458     0x7007
+0x0458     0x700C
+0x0458     0x700f
+0x046d     0x08ae
+0x055f     0xd003
+0x055f     0xd004
 0x046d     0x08ae
 0x0ac8     0x0301
+0x0ac8     0x301b
+0x0ac8     0x303b
+0x10fd     0x0128
 0x10fd     0x8050
+0x10fd     0x804e
 
 The list above does not imply that all those devices work with this driver: up
 until now only the ones that mount the following image sensors are supported;
@@ -217,6 +231,7 @@ Model       Manufacturer
 Model       Manufacturer
 -----       ------------
 PAS202BCB   PixArt Imaging, Inc.
+PB-0330     Photobit Corporation
 
 
 9. Notes for V4L2 application developers
@@ -250,5 +265,6 @@ 11. Credits
   been taken from the documentation of the ZC030x Video4Linux1 driver written
   by Andrew Birkett <andy@xxxxxxxxxx>;
 - The initialization values of the ZC0301 controller connected to the PAS202BCB
-  image sensor have been taken from the SPCA5XX driver maintained by
-  Michel Xhaard <mxhaard@xxxxxxxx>.
+  and PB-0330 image sensors have been taken from the SPCA5XX driver maintained
+  by Michel Xhaard <mxhaard@xxxxxxxx>;
+- Stanislav Lechev donated one camera.
diff -r c875b3d2c5e5 -r 29fd5adfdc07 Documentation/vm/page_migration
--- a/Documentation/vm/page_migration   Mon Aug 07 17:39:11 2006 -0400
+++ b/Documentation/vm/page_migration   Mon Aug 07 18:15:57 2006 -0400
@@ -26,8 +26,13 @@ Manual migration is useful if for exampl
 Manual migration is useful if for example the scheduler has relocated
 a process to a processor on a distant node. A batch scheduler or an
 administrator may detect the situation and move the pages of the process
-nearer to the new processor. At some point in the future we may have
-some mechanism in the scheduler that will automatically move the pages.
+nearer to the new processor. The kernel itself does only provide
+manual page migration support. Automatic page migration may be implemented
+through user space processes that move pages. A special function call
+"move_pages" allows the moving of individual pages within a process.
+A NUMA profiler may f.e. obtain a log showing frequent off node
+accesses and may use the result to move pages to more advantageous
+locations.
 
 Larger installations usually partition the system using cpusets into
 sections of nodes. Paul Jackson has equipped cpusets with the ability to
@@ -62,22 +67,14 @@ 1. Remove pages from the LRU.
    It also prevents the swapper or other scans to encounter
    the page.
 
-2. Generate a list of newly allocates page. These pages will contain the
-   contents of the pages from the first list after page migration is
-   complete.
+2. We need to have a function of type new_page_t that can be
+   passed to migrate_pages(). This function should figure out
+   how to allocate the correct new page given the old page.
 
 3. The migrate_pages() function is called which attempts
-   to do the migration. It returns the moved pages in the
-   list specified as the third parameter and the failed
-   migrations in the fourth parameter. The first parameter
-   will contain the pages that could still be retried.
-
-4. The leftover pages of various types are returned
-   to the LRU using putback_to_lru_pages() or otherwise
-   disposed of. The pages will still have the refcount as
-   increased by isolate_lru_pages() if putback_to_lru_pages() is not
-   used! The kernel may want to handle the various cases of failures in
-   different ways.
+   to do the migration. It will call the function to allocate
+   the new page for each page that is considered for
+   moving.
 
 B. How migrate_pages() works
 ----------------------------
@@ -93,83 +90,58 @@ 1. Lock the page to be migrated
 
 2. Insure that writeback is complete.
 
-3. Make sure that the page has assigned swap cache entry if
-   it is an anonyous page. The swap cache reference is necessary
-   to preserve the information contain in the page table maps while
-   page migration occurs.
-
-4. Prep the new page that we want to move to. It is locked
+3. Prep the new page that we want to move to. It is locked
    and set to not being uptodate so that all accesses to the new
    page immediately lock while the move is in progress.
 
-5. All the page table references to the page are either dropped (file
-   backed pages) or converted to swap references (anonymous pages).
-   This should decrease the reference count.
+4. The new page is prepped with some settings from the old page so that
+   accesses to the new page will discover a page with the correct settings.
+
+5. All the page table references to the page are converted
+   to migration entries or dropped (nonlinear vmas).
+   This decrease the mapcount of a page. If the resulting
+   mapcount is not zero then we do not migrate the page.
+   All user space processes that attempt to access the page
+   will now wait on the page lock.
 
 6. The radix tree lock is taken. This will cause all processes trying
-   to reestablish a pte to block on the radix tree spinlock.
+   to access the page via the mapping to block on the radix tree spinlock.
 
 7. The refcount of the page is examined and we back out if references remain
    otherwise we know that we are the only one referencing this page.
 
 8. The radix tree is checked and if it does not contain the pointer to this
-   page then we back out because someone else modified the mapping first.
+   page then we back out because someone else modified the radix tree.
 
-9. The mapping is checked. If the mapping is gone then a truncate action may
-   be in progress and we back out.
+9. The radix tree is changed to point to the new page.
 
-10. The new page is prepped with some settings from the old page so that
-   accesses to the new page will be discovered to have the correct settings.
+10. The reference count of the old page is dropped because the radix tree
+    reference is gone. A reference to the new page is established because
+    the new page is referenced to by the radix tree.
 
-11. The radix tree is changed to point to the new page.
+11. The radix tree lock is dropped. With that lookups in the mapping
+    become possible again. Processes will move from spinning on the tree_lock
+    to sleeping on the locked new page.
 
-12. The reference count of the old page is dropped because the radix tree
-    reference is gone.
+12. The page contents are copied to the new page.
 
-13. The radix tree lock is dropped. With that lookups become possible again
-    and other processes will move from spinning on the tree lock to sleeping on
-    the locked new page.
+13. The remaining page flags are copied to the new page.
 
-14. The page contents are copied to the new page.
+14. The old page flags are cleared to indicate that the page does
+    not provide any information anymore.
 
-15. The remaining page flags are copied to the new page.
+15. Queued up writeback on the new page is triggered.
 
-16. The old page flags are cleared to indicate that the page does
-    not use any information anymore.
-
-17. Queued up writeback on the new page is triggered.
-
-18. If swap pte's were generated for the page then replace them with real
-    ptes. This will reenable access for processes not blocked by the page lock.
+16. If migration entries were page then replace them with real ptes. Doing
+    so will enable access for user space processes not already waiting for
+    the page lock.
 
 19. The page locks are dropped from the old and new page.
-    Processes waiting on the page lock can continue.
+    Processes waiting on the page lock will redo their page faults
+    and will reach the new page.
 
 20. The new page is moved to the LRU and can be scanned by the swapper
     etc again.
 
-TODO list
----------
+Christoph Lameter, May 8, 2006.
 
-- Page migration requires the use of swap handles to preserve the
-  information of the anonymous page table entries. This means that swap
-  space is reserved but never used. The maximum number of swap handles used
-  is determined by CHUNK_SIZE (see mm/mempolicy.c) per ongoing migration.
-  Reservation of pages could be avoided by having a special type of swap
-  handle that does not require swap space and that would only track the page
-  references. Something like that was proposed by Marcelo Tosatti in the
-  past (search for migration cache on lkml or linux-mm@xxxxxxxxx).
-
-- Page migration unmaps ptes for file backed pages and requires page
-  faults to reestablish these ptes. This could be optimized by somehow
-  recording the references before migration and then reestablish them later.
-  However, there are several locking challenges that have to be overcome
-  before this is possible.
-
-- Page migration generates read ptes for anonymous pages. Dirty page
-  faults are required to make the pages writable again. It may be possible
-  to generate a pte marked dirty if it is known that the page is dirty and
-  that this process has the only reference to that page.
-
-Christoph Lameter, March 8, 2006.
-
diff -r c875b3d2c5e5 -r 29fd5adfdc07 Documentation/watchdog/pcwd-watchdog.txt
--- a/Documentation/watchdog/pcwd-watchdog.txt  Mon Aug 07 17:39:11 2006 -0400
+++ b/Documentation/watchdog/pcwd-watchdog.txt  Mon Aug 07 18:15:57 2006 -0400
@@ -22,78 +22,9 @@
  to run the program with an "&" to run it in the background!)
 
  If you want to write a program to be compatible with the PC Watchdog
- driver, simply do the following:
+ driver, simply use of modify the watchdog test program:
+ Documentation/watchdog/src/watchdog-test.c
 
--- Snippet of code --
-/*
- * Watchdog Driver Test Program
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <sys/ioctl.h>
-#include <linux/types.h>
-#include <linux/watchdog.h>
-
-int fd;
-
-/*
- * This function simply sends an IOCTL to the driver, which in turn ticks
- * the PC Watchdog card to reset its internal timer so it doesn't trigger
- * a computer reset.
- */
-void keep_alive(void)
-{
-    int dummy;
-
-    ioctl(fd, WDIOC_KEEPALIVE, &dummy);
-}
-
-/*
- * The main program.  Run the program with "-d" to disable the card,
- * or "-e" to enable the card.
- */
-int main(int argc, char *argv[])
-{
-    fd = open("/dev/watchdog", O_WRONLY);
-
-    if (fd == -1) {
-       fprintf(stderr, "Watchdog device not enabled.\n");
-       fflush(stderr);
-       exit(-1);
-    }
-
-    if (argc > 1) {
-       if (!strncasecmp(argv[1], "-d", 2)) {
-           ioctl(fd, WDIOC_SETOPTIONS, WDIOS_DISABLECARD);
-           fprintf(stderr, "Watchdog card disabled.\n");
-           fflush(stderr);
-           exit(0);
-       } else if (!strncasecmp(argv[1], "-e", 2)) {
-           ioctl(fd, WDIOC_SETOPTIONS, WDIOS_ENABLECARD);
-           fprintf(stderr, "Watchdog card enabled.\n");
-           fflush(stderr);
-           exit(0);
-       } else {
-           fprintf(stderr, "-d to disable, -e to enable.\n");
-           fprintf(stderr, "run by itself to tick the card.\n");
-           fflush(stderr);
-           exit(0);
-       }
-    } else {
-       fprintf(stderr, "Watchdog Ticking Away!\n");
-       fflush(stderr);
-    }
-
-    while(1) {
-       keep_alive();
-       sleep(1);
-    }
-}
--- End snippet --
 
  Other IOCTL functions include:
 
diff -r c875b3d2c5e5 -r 29fd5adfdc07 Documentation/watchdog/watchdog-api.txt
--- a/Documentation/watchdog/watchdog-api.txt   Mon Aug 07 17:39:11 2006 -0400
+++ b/Documentation/watchdog/watchdog-api.txt   Mon Aug 07 18:15:57 2006 -0400
@@ -34,22 +34,7 @@ the watchdog is pinged within a certain 
 the watchdog is pinged within a certain time, this time is called the
 timeout or margin.  The simplest way to ping the watchdog is to write
 some data to the device.  So a very simple watchdog daemon would look
-like this:
-
-#include <stdlib.h>
-#include <fcntl.h>
-
-int main(int argc, const char *argv[]) {
-       int fd=open("/dev/watchdog",O_WRONLY);
-       if (fd==-1) {
-               perror("watchdog");
-               exit(1);
-       }
-       while(1) {
-               write(fd, "\0", 1);
-               sleep(10);
-       }
-}
+like this source file:  see Documentation/watchdog/src/watchdog-simple.c
 
 A more advanced driver could for example check that a HTTP server is
 still responding before doing the write call to ping the watchdog.
@@ -110,7 +95,40 @@ current timeout using the GETTIMEOUT ioc
     ioctl(fd, WDIOC_GETTIMEOUT, &timeout);
     printf("The timeout was is %d seconds\n", timeout);
 
-Envinronmental monitoring:
+Pretimeouts:
+
+Some watchdog timers can be set to have a trigger go off before the
+actual time they will reset the system.  This can be done with an NMI,
+interrupt, or other mechanism.  This allows Linux to record useful
+information (like panic information and kernel coredumps) before it
+resets.
+
+    pretimeout = 10;
+    ioctl(fd, WDIOC_SETPRETIMEOUT, &pretimeout);
+
+Note that the pretimeout is the number of seconds before the time
+when the timeout will go off.  It is not the number of seconds until
+the pretimeout.  So, for instance, if you set the timeout to 60 seconds
+and the pretimeout to 10 seconds, the pretimout will go of in 50
+seconds.  Setting a pretimeout to zero disables it.
+
+There is also a get function for getting the pretimeout:
+
+    ioctl(fd, WDIOC_GETPRETIMEOUT, &timeout);
+    printf("The pretimeout was is %d seconds\n", timeout);
+
+Not all watchdog drivers will support a pretimeout.
+
+Get the number of seconds before reboot:
+
+Some watchdog drivers have the ability to report the remaining time
+before the system will reboot. The WDIOC_GETTIMELEFT is the ioctl
+that returns the number of seconds before reboot.
+
+    ioctl(fd, WDIOC_GETTIMELEFT, &timeleft);
+    printf("The timeout was is %d seconds\n", timeleft);
+
+Environmental monitoring:
 
 All watchdog drivers are required return more information about the system,
 some do temperature, fan and power level monitoring, some can tell you
@@ -168,6 +186,10 @@ The watchdog saw a keepalive ping since 
 The watchdog saw a keepalive ping since it was last queried.
 
        WDIOF_SETTIMEOUT        Can set/get the timeout
+
+The watchdog can do pretimeouts.
+
+       WDIOF_PRETIMEOUT        Pretimeout (in seconds), get/set
 
 
 For those drivers that return any bits set in the option field, the
diff -r c875b3d2c5e5 -r 29fd5adfdc07 Documentation/watchdog/watchdog.txt
--- a/Documentation/watchdog/watchdog.txt       Mon Aug 07 17:39:11 2006 -0400
+++ b/Documentation/watchdog/watchdog.txt       Mon Aug 07 18:15:57 2006 -0400
@@ -65,28 +65,7 @@ Minor numbers are however allocated for 
 Minor numbers are however allocated for it.
 
 
-Example Watchdog Driver
------------------------
-
-#include <stdio.h>
-#include <unistd.h>
-#include <fcntl.h>
-
-int main(int argc, const char *argv[])
-{
-       int fd=open("/dev/watchdog",O_WRONLY);
-       if(fd==-1)
-       {
-               perror("watchdog");
-               exit(1);
-       }
-       while(1)
-       {
-               write(fd,"\0",1);
-               fsync(fd);
-               sleep(10);
-       }
-}
+Example Watchdog Driver:  see Documentation/watchdog/src/watchdog-simple.c
 
 
 Contact Information
diff -r c875b3d2c5e5 -r 29fd5adfdc07 Documentation/x86_64/boot-options.txt
--- a/Documentation/x86_64/boot-options.txt     Mon Aug 07 17:39:11 2006 -0400
+++ b/Documentation/x86_64/boot-options.txt     Mon Aug 07 18:15:57 2006 -0400
@@ -205,6 +205,27 @@ IOMMU
   pages  Prereserve that many 128K pages for the software IO bounce buffering.
   force  Force all IO through the software TLB.
 
+  calgary=[64k,128k,256k,512k,1M,2M,4M,8M]
+  calgary=[translate_empty_slots]
+  calgary=[disable=<PCI bus number>]
+
+    64k,...,8M - Set the size of each PCI slot's translation table
+    when using the Calgary IOMMU. This is the size of the translation
+    table itself in main memory. The smallest table, 64k, covers an IO
+    space of 32MB; the largest, 8MB table, can cover an IO space of
+    4GB. Normally the kernel will make the right choice by itself.
+
+    translate_empty_slots - Enable translation even on slots that have
+    no devices attached to them, in case a device will be hotplugged
+    in the future.
+
+    disable=<PCI bus number> - Disable translation on a given PHB. For
+    example, the built-in graphics adapter resides on the first bridge
+    (PCI bus number 0); if translation (isolation) is enabled on this
+    bridge, X servers that access the hardware directly from user
+    space might stop working. Use this option if you have devices that
+    are accessed from userspace directly on some PCI host bridge.
+
 Debugging
 
   oops=panic Always panic on oopses. Default is to just kill the process,
diff -r c875b3d2c5e5 -r 29fd5adfdc07 MAINTAINERS
--- a/MAINTAINERS       Mon Aug 07 17:39:11 2006 -0400
+++ b/MAINTAINERS       Mon Aug 07 18:15:57 2006 -0400
@@ -1118,6 +1118,11 @@ W:       http://www.lm-sensors.nu/
 W:     http://www.lm-sensors.nu/
 S:     Maintained
 
+HARDWARE RANDOM NUMBER GENERATOR CORE
+P:     Michael Buesch
+M:     mb@xxxxxxxxx
+S:     Maintained
+
 HARD DRIVE ACTIVE PROTECTION SYSTEM (HDAPS) DRIVER
 P:     Robert Love
 M:     rlove@xxxxxxxxx
@@ -1396,7 +1401,8 @@ S:        Supported
 
 INPUT (KEYBOARD, MOUSE, JOYSTICK) DRIVERS
 P:     Dmitry Torokhov
-M:     dtor_core@xxxxxxxxxxxxx
+M:     dmitry.torokhov@xxxxxxxxx
+M:     dtor@xxxxxxx
 L:     linux-input@xxxxxxxxxxxxxxxxxxxxxxxx
 L:     linux-joystick@xxxxxxxxxxxxxxxxxxxxxxxx
 T:     git kernel.org:/pub/scm/linux/kernel/git/dtor/input.git
@@ -1434,6 +1440,11 @@ INTEL IA32 MICROCODE UPDATE SUPPORT
 INTEL IA32 MICROCODE UPDATE SUPPORT
 P:     Tigran Aivazian
 M:     tigran@xxxxxxxxxxx
+S:     Maintained
+
+INTEL IXP4XX RANDOM NUMBER GENERATOR SUPPORT
+P:     Deepak Saxena
+M:     dsaxena@xxxxxxxxxxx
 S:     Maintained
 
 INTEL PRO/100 ETHERNET SUPPORT
@@ -2725,6 +2736,11 @@ M:       hch@xxxxxxxxxxxxx
 M:     hch@xxxxxxxxxxxxx
 S:     Maintained
 
+TI OMAP RANDOM NUMBER GENERATOR SUPPORT
+P:     Deepak Saxena
+M:     dsaxena@xxxxxxxxxxx
+S:     Maintained
+
 TI PARALLEL LINK CABLE DRIVER
 P:     Romain Lievin
 M:     roms@xxxxxxxxxxxxxx
diff -r c875b3d2c5e5 -r 29fd5adfdc07 Makefile
--- a/Makefile  Mon Aug 07 17:39:11 2006 -0400
+++ b/Makefile  Mon Aug 07 18:15:57 2006 -0400
@@ -71,7 +71,7 @@ endif
 # In both cases the working directory must be the root of the kernel src.
 # 1) O=
 # Use "make O=dir/to/store/output/files/"
-# 
+#
 # 2) Set KBUILD_OUTPUT
 # Set the environment variable KBUILD_OUTPUT to point to the directory
 # where the output files shall be placed.
@@ -178,18 +178,20 @@ CROSS_COMPILE     ?=
 # Architecture as present in compile.h
 UTS_MACHINE := $(ARCH)
 
+KCONFIG_CONFIG ?= .config
+
 # SHELL used by kbuild
 CONFIG_SHELL := $(shell if [ -x "$$BASH" ]; then echo $$BASH; \
          else if [ -x /bin/bash ]; then echo /bin/bash; \
          else echo sh; fi ; fi)
 
-HOSTCC         = gcc
-HOSTCXX        = g++
-HOSTCFLAGS     = -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer
-HOSTCXXFLAGS   = -O2
-
-#      Decide whether to build built-in, modular, or both.
-#      Normally, just do built-in.
+HOSTCC       = gcc
+HOSTCXX      = g++
+HOSTCFLAGS   = -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer
+HOSTCXXFLAGS = -O2
+
+# Decide whether to build built-in, modular, or both.
+# Normally, just do built-in.
 
 KBUILD_MODULES :=
 KBUILD_BUILTIN := 1
@@ -197,7 +199,7 @@ KBUILD_BUILTIN := 1
 #      If we have only "make modules", don't compile built-in objects.
 #      When we're building modules with modversions, we need to consider
 #      the built-in objects during the descend as well, in order to
-#      make sure the checksums are uptodate before we record them.
+#      make sure the checksums are up to date before we record them.
 
 ifeq ($(MAKECMDGOALS),modules)
   KBUILD_BUILTIN := $(if $(CONFIG_MODVERSIONS),1)
@@ -230,7 +232,7 @@ export KBUILD_CHECKSRC KBUILD_SRC KBUILD
 #
 # If $(quiet) is empty, the whole command will be printed.
 # If it is set to "quiet_", only the short version will be printed. 
-# If it is set to "silent_", nothing wil be printed at all, since
+# If it is set to "silent_", nothing will be printed at all, since
 # the variable $(silent_cmd_cc_o_c) doesn't exist.
 #
 # A simple variant is to prefix commands with $(Q) - that's useful
@@ -265,10 +267,9 @@ MAKEFLAGS += --include-dir=$(srctree)
 # We need some generic definitions
 include  $(srctree)/scripts/Kbuild.include
 
-# For maximum performance (+ possibly random breakage, uncomment
-# the following)
-
-#MAKEFLAGS += -rR
+# Do not use make's built-in rules and variables
+# This increases performance and avoid hard-to-debug behavour
+MAKEFLAGS += -rR
 
 # Make variables (CC, etc...)
 
@@ -305,21 +306,21 @@ LINUXINCLUDE    := -Iinclude \
 
 CPPFLAGS        := -D__KERNEL__ $(LINUXINCLUDE)
 
-CFLAGS                 := -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs \
-                  -fno-strict-aliasing -fno-common
-AFLAGS         := -D__ASSEMBLY__
-
-# Read KERNELRELEASE from .kernelrelease (if it exists)
-KERNELRELEASE = $(shell cat .kernelrelease 2> /dev/null)
+CFLAGS          := -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs \
+                   -fno-strict-aliasing -fno-common
+AFLAGS          := -D__ASSEMBLY__
+
+# Read KERNELRELEASE from include/config/kernel.release (if it exists)
+KERNELRELEASE = $(shell cat include/config/kernel.release 2> /dev/null)
 KERNELVERSION = $(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)
 
-export VERSION PATCHLEVEL SUBLEVEL KERNELRELEASE KERNELVERSION \
-       ARCH CONFIG_SHELL HOSTCC HOSTCFLAGS CROSS_COMPILE AS LD CC \
-       CPP AR NM STRIP OBJCOPY OBJDUMP MAKE AWK GENKSYMS PERL UTS_MACHINE \
-       HOSTCXX HOSTCXXFLAGS LDFLAGS_MODULE CHECK CHECKFLAGS
+export VERSION PATCHLEVEL SUBLEVEL KERNELRELEASE KERNELVERSION
+export ARCH CONFIG_SHELL HOSTCC HOSTCFLAGS CROSS_COMPILE AS LD CC
+export CPP AR NM STRIP OBJCOPY OBJDUMP MAKE AWK GENKSYMS PERL UTS_MACHINE
+export HOSTCXX HOSTCXXFLAGS LDFLAGS_MODULE CHECK CHECKFLAGS
 
 export CPPFLAGS NOSTDINC_FLAGS LINUXINCLUDE OBJCOPYFLAGS LDFLAGS
-export CFLAGS CFLAGS_KERNEL CFLAGS_MODULE 
+export CFLAGS CFLAGS_KERNEL CFLAGS_MODULE
 export AFLAGS AFLAGS_KERNEL AFLAGS_MODULE
 
 # When compiling out-of-tree modules, put MODVERDIR in the module
@@ -357,12 +358,13 @@ endif
 # catch them early, and hand them over to scripts/kconfig/Makefile
 # It is allowed to specify more targets when calling make, including
 # mixing *config targets and build targets.
-# For example 'make oldconfig all'. 
+# For example 'make oldconfig all'.
 # Detect when mixed targets is specified, and make a second invocation
 # of make so .config is not included in this case either (for *config).
 
 no-dot-config-targets := clean mrproper distclean \
-                        cscope TAGS tags help %docs check%
+                        cscope TAGS tags help %docs check% \
+                        kernelrelease kernelversion
 
 config-targets := 0
 mixed-targets  := 0
@@ -404,9 +406,8 @@ export KBUILD_DEFCONFIG
 export KBUILD_DEFCONFIG
 
 config %config: scripts_basic outputmakefile FORCE
-       $(Q)mkdir -p include/linux
+       $(Q)mkdir -p include/linux include/config
        $(Q)$(MAKE) $(build)=scripts/kconfig $@
-       $(Q)$(MAKE) -C $(srctree) KBUILD_SRC= .kernelrelease
 
 else
 # ===========================================================================
@@ -416,12 +417,10 @@ ifeq ($(KBUILD_EXTMOD),)
 ifeq ($(KBUILD_EXTMOD),)
 # Additional helpers built in scripts/
 # Carefully list dependencies so we do not try to build scripts twice
-# in parrallel
+# in parallel
 PHONY += scripts
-scripts: scripts_basic include/config/MARKER
+scripts: scripts_basic include/config/auto.conf
        $(Q)$(MAKE) $(build)=$(@)
-
-scripts_basic: include/linux/autoconf.h
 
 # Objects we will link into vmlinux / subdirs we need to visit
 init-y         := init/
@@ -436,31 +435,32 @@ ifeq ($(dot-config),1)
 
 # Read in dependencies to all Kconfig* files, make sure to run
 # oldconfig if changes are detected.
--include .kconfig.d
-
-include .config
-
-# If .config needs to be updated, it will be done via the dependency
-# that autoconf has on .config.
+-include include/config/auto.conf.cmd
+-include include/config/auto.conf
+
 # To avoid any implicit rule to kick in, define an empty command
-.config .kconfig.d: ;
-
-# If .config is newer than include/linux/autoconf.h, someone tinkered
+$(KCONFIG_CONFIG) include/config/auto.conf.cmd: ;
+
+# If .config is newer than include/config/auto.conf, someone tinkered
 # with it and forgot to run make oldconfig.
-# If kconfig.d is missing then we are probarly in a cleaned tree so
+# if auto.conf.cmd is missing then we are probably in a cleaned tree so
 # we execute the config step to be sure to catch updated Kconfig files
-include/linux/autoconf.h: .kconfig.d .config
-       $(Q)mkdir -p include/linux
+include/config/auto.conf: $(KCONFIG_CONFIG) include/config/auto.conf.cmd
+ifeq ($(KBUILD_EXTMOD),)
        $(Q)$(MAKE) -f $(srctree)/Makefile silentoldconfig
 else
+       $(error kernel configuration not valid - run 'make prepare' in 
$(srctree) to update it)
+endif
+
+else
 # Dummy target needed, because used as prerequisite
-include/linux/autoconf.h: ;
+include/config/auto.conf: ;
 endif
 
 # The all: target is the default when no target is given on the
 # command line.
 # This allow a user to issue only 'make' to build a kernel including modules
-# Defaults vmlinux but it is usually overriden in the arch makefile
+# Defaults vmlinux but it is usually overridden in the arch makefile
 all: vmlinux
 
 ifdef CONFIG_CC_OPTIMIZE_FOR_SIZE
@@ -492,11 +492,11 @@ CHECKFLAGS     += $(NOSTDINC_FLAGS)
 # warn about C99 declaration after statement
 CFLAGS += $(call cc-option,-Wdeclaration-after-statement,)
 
-# disable pointer signedness warnings in gcc 4.0
+# disable pointer signed / unsigned warnings in gcc 4.0
 CFLAGS += $(call cc-option,-Wno-pointer-sign,)
 
 # Default kernel image to build when no specific target is given.
-# KBUILD_IMAGE may be overruled on the commandline or
+# KBUILD_IMAGE may be overruled on the command line or
 # set in the environment
 # Also any assignments in arch/$(ARCH)/Makefile take precedence over
 # this default value
@@ -510,11 +510,28 @@ export    INSTALL_PATH ?= /boot
 #
 # INSTALL_MOD_PATH specifies a prefix to MODLIB for module directory
 # relocations required by build roots.  This is not defined in the
-# makefile but the arguement can be passed to make if needed.
+# makefile but the argument can be passed to make if needed.
 #
 
 MODLIB = $(INSTALL_MOD_PATH)/lib/modules/$(KERNELRELEASE)
 export MODLIB
+
+#
+#  INSTALL_MOD_STRIP, if defined, will cause modules to be
+#  stripped after they are installed.  If INSTALL_MOD_STRIP is '1', then
+#  the default option --strip-debug will be used.  Otherwise,
+#  INSTALL_MOD_STRIP will used as the options to the strip command.
+
+ifdef INSTALL_MOD_STRIP
+ifeq ($(INSTALL_MOD_STRIP),1)
+mod_strip_cmd = $STRIP) --strip-debug
+else
+mod_strip_cmd = $(STRIP) $(INSTALL_MOD_STRIP)
+endif # INSTALL_MOD_STRIP=1
+else
+mod_strip_cmd = true
+endif # INSTALL_MOD_STRIP
+export mod_strip_cmd
 
 
 ifeq ($(KBUILD_EXTMOD),)
@@ -539,7 +556,7 @@ libs-y              := $(libs-y1) $(libs-y2)
 
 # Build vmlinux
 # ---------------------------------------------------------------------------
-# vmlinux is build from the objects selected by $(vmlinux-init) and
+# vmlinux is built from the objects selected by $(vmlinux-init) and
 # $(vmlinux-main). Most are built-in.o files from top-level directories
 # in the kernel tree, others are specified in arch/$(ARCH)Makefile.
 # Ordering when linking is important, and $(vmlinux-init) must be first.
@@ -590,7 +607,7 @@ quiet_cmd_vmlinux_version = GEN     .ver
        $(MAKE) $(build)=init
 
 # Generate System.map
-quiet_cmd_sysmap = SYSMAP 
+quiet_cmd_sysmap = SYSMAP
       cmd_sysmap = $(CONFIG_SHELL) $(srctree)/scripts/mksysmap
 
 # Link of vmlinux
@@ -719,7 +736,7 @@ PHONY += $(vmlinux-dirs)
        $(Q)$(MAKE) $(build)=$@
 
 # Build the kernel release string
-# The KERNELRELEASE is stored in a file named .kernelrelease
+# The KERNELRELEASE is stored in a file named include/config/kernel.release
 # to be used when executing for example make install or make modules_install
 #
 # Take the contents of any files called localversion* and the config
@@ -737,10 +754,10 @@ localver = $(subst $(space),, \
 localver = $(subst $(space),, \
           $(shell cat /dev/null $(_localver)) \
           $(patsubst "%",%,$(CONFIG_LOCALVERSION)))
-              
+
 # If CONFIG_LOCALVERSION_AUTO is set scripts/setlocalversion is called
 # and if the SCM is know a tag from the SCM is appended.
-# The appended tag is determinded by the SCM used.
+# The appended tag is determined by the SCM used.
 #
 # Currently, only git is supported.
 # Other SCMs can edit scripts/setlocalversion and add the appropriate
@@ -753,9 +770,9 @@ endif
 
 localver-full = $(localver)$(localver-auto)
 
-# Store (new) KERNELRELASE string in .kernelrelease
+# Store (new) KERNELRELASE string in include/config/kernel.release
 kernelrelease = $(KERNELVERSION)$(localver-full)
-.kernelrelease: FORCE
+include/config/kernel.release: include/config/auto.conf FORCE
        $(Q)rm -f $@
        $(Q)echo $(kernelrelease) > $@
 
@@ -776,10 +793,10 @@ PHONY += prepare-all
 # and if so do:
 # 1) Check that make has not been executed in the kernel src $(srctree)
 # 2) Create the include2 directory, used for the second asm symlink
-prepare3: .kernelrelease
+prepare3: include/config/kernel.release
 ifneq ($(KBUILD_SRC),)
        @echo '  Using $(srctree) as source for kernel'
-       $(Q)if [ -f $(srctree)/.config ]; then \
+       $(Q)if [ -f $(srctree)/.config -o -d $(srctree)/include/config ]; then \
                echo "  $(srctree) is not clean, please run 'make mrproper'";\
                echo "  in the '$(srctree)' directory.";\
                /bin/false; \
@@ -792,7 +809,7 @@ prepare2: prepare3 outputmakefile
 prepare2: prepare3 outputmakefile
 
 prepare1: prepare2 include/linux/version.h include/asm \
-                   include/config/MARKER
+                   include/config/auto.conf
 ifneq ($(KBUILD_MODULES),)
        $(Q)mkdir -p $(MODVERDIR)
        $(Q)rm -f $(MODVERDIR)/*
@@ -806,26 +823,19 @@ prepare0: archprepare FORCE
 # All the preparing..
 prepare prepare-all: prepare0
 
-#      Leave this as default for preprocessing vmlinux.lds.S, which is now
-#      done in arch/$(ARCH)/kernel/Makefile
+# Leave this as default for preprocessing vmlinux.lds.S, which is now
+# done in arch/$(ARCH)/kernel/Makefile
 
 export CPPFLAGS_vmlinux.lds += -P -C -U$(ARCH)
 
-#      FIXME: The asm symlink changes when $(ARCH) changes. That's
-#      hard to detect, but I suppose "make mrproper" is a good idea
-#      before switching between archs anyway.
+# FIXME: The asm symlink changes when $(ARCH) changes. That's
+# hard to detect, but I suppose "make mrproper" is a good idea
+# before switching between archs anyway.
 
 include/asm:
        @echo '  SYMLINK $@ -> include/asm-$(ARCH)'
        $(Q)if [ ! -d include ]; then mkdir -p include; fi;
        @ln -fsn asm-$(ARCH) $@
-
-#      Split autoconf.h into include/linux/config/*
-
-include/config/MARKER: scripts/basic/split-include include/linux/autoconf.h
-       @echo '  SPLIT   include/linux/autoconf.h -> include/config/*'
-       @scripts/basic/split-include include/linux/autoconf.h include/config
-       @touch $@
 
 # Generate some files
 # ---------------------------------------------------------------------------
@@ -846,7 +856,7 @@ define filechk_version.h
        )
 endef
 
-include/linux/version.h: $(srctree)/Makefile .config .kernelrelease FORCE
+include/linux/version.h: $(srctree)/Makefile include/config/kernel.release 
FORCE
        $(call filechk,version.h)
 
 # ---------------------------------------------------------------------------
@@ -860,7 +870,7 @@ depend dep:
 
 ifdef CONFIG_MODULES
 
-#      By default, build modules as well
+# By default, build modules as well
 
 all: modules
 
@@ -942,7 +952,7 @@ MRPROPER_DIRS  += include/config include
 MRPROPER_DIRS  += include/config include2
 MRPROPER_FILES += .config .config.old include/asm .version .old_version \
                   include/linux/autoconf.h include/linux/version.h \
-                 .kernelrelease Module.symvers tags TAGS cscope*
+                 Module.symvers tags TAGS cscope*
 
 # clean - Delete most, but leave enough to build external modules
 #
@@ -958,8 +968,9 @@ clean: archclean $(clean-dirs)
        $(call cmd,rmdirs)
        $(call cmd,rmfiles)
        @find . $(RCS_FIND_IGNORE) \
-               \( -name '*.[oas]' -o -name '*.ko' -o -name '.*.cmd' \
-               -o -name '.*.d' -o -name '.*.tmp' -o -name '*.mod.c' \) \
+               \( -name '*.[oas]' -o -name '*.ko' -o -name '.*.cmd' \
+               -o -name '.*.d' -o -name '.*.tmp' -o -name '*.mod.c' \
+               -o -name '*.symtypes' \) \
                -type f -print | xargs rm -f
 
 # mrproper - Delete all generated files, including .config
@@ -982,9 +993,9 @@ PHONY += distclean
 
 distclean: mrproper
        @find $(srctree) $(RCS_FIND_IGNORE) \
-               \( -name '*.orig' -o -name '*.rej' -o -name '*~' \
+               \( -name '*.orig' -o -name '*.rej' -o -name '*~' \
                -o -name '*.bak' -o -name '#*#' -o -name '.*.orig' \
-               -o -name '.*.rej' -o -size 0 \
+               -o -name '.*.rej' -o -size 0 \
                -o -name '*%' -o -name '.*.cmd' -o -name 'core' \) \
                -type f -print | xargs rm -f
 
@@ -994,9 +1005,9 @@ distclean: mrproper
 # rpm target kept for backward compatibility
 package-dir    := $(srctree)/scripts/package
 
-%pkg: FORCE
+%pkg: include/config/kernel.release FORCE
        $(Q)$(MAKE) $(build)=$(package-dir) $@
-rpm: FORCE
+rpm: include/config/kernel.release FORCE
        $(Q)$(MAKE) $(build)=$(package-dir) $@
 
 
@@ -1077,7 +1088,7 @@ else # KBUILD_EXTMOD
 # make M=dir modules   Make all modules in specified dir
 # make M=dir          Same as 'make M=dir modules'
 # make M=dir modules_install
-#                      Install the modules build in the module directory
+#                      Install the modules built in the module directory
 #                      Assumes install directory is already created
 
 # We are always building modules
@@ -1136,7 +1147,7 @@ clean: $(clean-dirs)
 clean: $(clean-dirs)
        $(call cmd,rmdirs)
        @find $(KBUILD_EXTMOD) $(RCS_FIND_IGNORE) \
-               \( -name '*.[oas]' -o -name '*.ko' -o -name '.*.cmd' \
+               \( -name '*.[oas]' -o -name '*.ko' -o -name '.*.cmd' \
                -o -name '.*.d' -o -name '.*.tmp' -o -name '*.mod.c' \) \
                -type f -print | xargs rm -f
 
@@ -1175,31 +1186,41 @@ ALLINCLUDE_ARCHS := $(ARCH)
 ALLINCLUDE_ARCHS := $(ARCH)
 endif
 else
-#Allow user to specify only ALLSOURCE_PATHS on the command line, keeping 
existing behaviour.
+#Allow user to specify only ALLSOURCE_PATHS on the command line, keeping 
existing behavour.
 ALLINCLUDE_ARCHS := $(ALLSOURCE_ARCHS)
 endif
 
 ALLSOURCE_ARCHS := $(ARCH)
 
-define all-sources
-       ( find $(__srctree) $(RCS_FIND_IGNORE) \
+define find-sources
+        ( find $(__srctree) $(RCS_FIND_IGNORE) \
               \( -name include -o -name arch \) -prune -o \
-              -name '*.[chS]' -print; \
+              -name $1 -print; \
          for ARCH in $(ALLSOURCE_ARCHS) ; do \
               find $(__srctree)arch/$${ARCH} $(RCS_FIND_IGNORE) \
-                   -name '*.[chS]' -print; \
+                   -name $1 -print; \
          done ; \
          find $(__srctree)security/selinux/include $(RCS_FIND_IGNORE) \
-              -name '*.[chS]' -print; \
+              -name $1 -print; \
          find $(__srctree)include $(RCS_FIND_IGNORE) \
               \( -name config -o -name 'asm-*' \) -prune \
-              -o -name '*.[chS]' -print; \
+              -o -name $1 -print; \
          for ARCH in $(ALLINCLUDE_ARCHS) ; do \
               find $(__srctree)include/asm-$${ARCH} $(RCS_FIND_IGNORE) \
-                   -name '*.[chS]' -print; \
+                   -name $1 -print; \
          done ; \
          find $(__srctree)include/asm-generic $(RCS_FIND_IGNORE) \
-              -name '*.[chS]' -print )
+              -name $1 -print )
+endef
+
+define all-sources
+       $(call find-sources,'*.[chS]')
+endef
+define all-kconfigs
+       $(call find-sources,'Kconfig*')
+endef
+define all-defconfigs
+       $(call find-sources,'defconfig')
 endef
 
 quiet_cmd_cscope-file = FILELST cscope.files
@@ -1219,7 +1240,13 @@ define cmd_TAGS
                 echo "-I __initdata,__exitdata,__acquires,__releases  \
                       -I EXPORT_SYMBOL,EXPORT_SYMBOL_GPL              \
                       --extra=+f --c-kinds=+px"`;                     \
-                $(all-sources) | xargs etags $$ETAGSF -a
+                $(all-sources) | xargs etags $$ETAGSF -a;             \
+       if test "x$$ETAGSF" = x; then                                 \
+               $(all-kconfigs) | xargs etags -a                      \
+               --regex='/^config[ \t]+\([a-zA-Z0-9_]+\)/\1/';        \
+               $(all-defconfigs) | xargs etags -a                    \
+               --regex='/^#?[ \t]?\(CONFIG_[a-zA-Z0-9_]+\)/\1/';     \
+       fi
 endef
 
 TAGS: FORCE
@@ -1259,14 +1286,14 @@ endif #ifeq ($(config-targets),1)
 endif #ifeq ($(config-targets),1)
 endif #ifeq ($(mixed-targets),1)
 
-PHONY += checkstack
+PHONY += checkstack kernelrelease kernelversion
 checkstack:
        $(OBJDUMP) -d vmlinux $$(find . -name '*.ko') | \
        $(PERL) $(src)/scripts/checkstack.pl $(ARCH)
 
 kernelrelease:
-       $(if $(wildcard .kernelrelease), $(Q)echo $(KERNELRELEASE), \
-       $(error kernelrelease not valid - run 'make *config' to update it))
+       $(if $(wildcard include/config/kernel.release), $(Q)echo 
$(KERNELRELEASE), \
+       $(error kernelrelease not valid - run 'make prepare' to update it))
 kernelversion:
        @echo $(KERNELVERSION)
 
@@ -1301,6 +1328,8 @@ endif
        $(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@)
 %.o: %.S prepare scripts FORCE
        $(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@)
+%.symtypes: %.c prepare scripts FORCE
+       $(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@)
 
 # Modules
 / %/: prepare scripts FORCE
diff -r c875b3d2c5e5 -r 29fd5adfdc07 arch/alpha/kernel/alpha_ksyms.c
--- a/arch/alpha/kernel/alpha_ksyms.c   Mon Aug 07 17:39:11 2006 -0400
+++ b/arch/alpha/kernel/alpha_ksyms.c   Mon Aug 07 18:15:57 2006 -0400
@@ -53,10 +53,6 @@ extern void __remqu (void);
 extern void __remqu (void);
 
 EXPORT_SYMBOL(alpha_mv);
-EXPORT_SYMBOL(enable_irq);
-EXPORT_SYMBOL(disable_irq);
-EXPORT_SYMBOL(disable_irq_nosync);
-EXPORT_SYMBOL(probe_irq_mask);
 EXPORT_SYMBOL(screen_info);
 EXPORT_SYMBOL(perf_irq);
 EXPORT_SYMBOL(callback_getenv);
@@ -68,19 +64,13 @@ EXPORT_SYMBOL(alpha_using_srm);
 
 /* platform dependent support */
 EXPORT_SYMBOL(strcat);
-EXPORT_SYMBOL(strcmp);
 EXPORT_SYMBOL(strcpy);
 EXPORT_SYMBOL(strlen);
-EXPORT_SYMBOL(strncmp);
 EXPORT_SYMBOL(strncpy);
-EXPORT_SYMBOL(strnlen);
 EXPORT_SYMBOL(strncat);
-EXPORT_SYMBOL(strstr);
 EXPORT_SYMBOL(strchr);
 EXPORT_SYMBOL(strrchr);
-EXPORT_SYMBOL(memcmp);
 EXPORT_SYMBOL(memmove);
-EXPORT_SYMBOL(memscan);
 EXPORT_SYMBOL(__memcpy);
 EXPORT_SYMBOL(__memset);
 EXPORT_SYMBOL(__memsetw);
@@ -122,11 +112,9 @@ EXPORT_SYMBOL(alpha_write_fp_reg_s);
 
 /* In-kernel system calls.  */
 EXPORT_SYMBOL(kernel_thread);
-EXPORT_SYMBOL(sys_open);
 EXPORT_SYMBOL(sys_dup);
 EXPORT_SYMBOL(sys_exit);
 EXPORT_SYMBOL(sys_write);
-EXPORT_SYMBOL(sys_read);
 EXPORT_SYMBOL(sys_lseek);
 EXPORT_SYMBOL(execve);
 EXPORT_SYMBOL(sys_setsid);
diff -r c875b3d2c5e5 -r 29fd5adfdc07 arch/alpha/kernel/irq.c
--- a/arch/alpha/kernel/irq.c   Mon Aug 07 17:39:11 2006 -0400
+++ b/arch/alpha/kernel/irq.c   Mon Aug 07 18:15:57 2006 -0400
@@ -49,15 +49,15 @@ select_smp_affinity(unsigned int irq)
        static int last_cpu;
        int cpu = last_cpu + 1;
 
-       if (!irq_desc[irq].handler->set_affinity || irq_user_affinity[irq])
+       if (!irq_desc[irq].chip->set_affinity || irq_user_affinity[irq])
                return 1;
 
        while (!cpu_possible(cpu))
                cpu = (cpu < (NR_CPUS-1) ? cpu + 1 : 0);
        last_cpu = cpu;
 
-       irq_affinity[irq] = cpumask_of_cpu(cpu);
-       irq_desc[irq].handler->set_affinity(irq, cpumask_of_cpu(cpu));
+       irq_desc[irq].affinity = cpumask_of_cpu(cpu);
+       irq_desc[irq].chip->set_affinity(irq, cpumask_of_cpu(cpu));
        return 0;
 }
 #endif /* CONFIG_SMP */
@@ -93,7 +93,7 @@ show_interrupts(struct seq_file *p, void
                for_each_online_cpu(j)
                        seq_printf(p, "%10u ", kstat_cpu(j).irqs[irq]);
 #endif
-               seq_printf(p, " %14s", irq_desc[irq].handler->typename);
+               seq_printf(p, " %14s", irq_desc[irq].chip->typename);
                seq_printf(p, "  %c%s",
                        (action->flags & SA_INTERRUPT)?'+':' ',
                        action->name);
diff -r c875b3d2c5e5 -r 29fd5adfdc07 arch/alpha/kernel/irq_alpha.c
--- a/arch/alpha/kernel/irq_alpha.c     Mon Aug 07 17:39:11 2006 -0400
+++ b/arch/alpha/kernel/irq_alpha.c     Mon Aug 07 18:15:57 2006 -0400
@@ -233,7 +233,7 @@ init_rtc_irq(void)
 init_rtc_irq(void)
 {
        irq_desc[RTC_IRQ].status = IRQ_DISABLED;
-       irq_desc[RTC_IRQ].handler = &rtc_irq_type;
+       irq_desc[RTC_IRQ].chip = &rtc_irq_type;
        setup_irq(RTC_IRQ, &timer_irqaction);
 }
 
diff -r c875b3d2c5e5 -r 29fd5adfdc07 arch/alpha/kernel/irq_i8259.c
--- a/arch/alpha/kernel/irq_i8259.c     Mon Aug 07 17:39:11 2006 -0400
+++ b/arch/alpha/kernel/irq_i8259.c     Mon Aug 07 18:15:57 2006 -0400
@@ -109,7 +109,7 @@ init_i8259a_irqs(void)
 
        for (i = 0; i < 16; i++) {
                irq_desc[i].status = IRQ_DISABLED;
-               irq_desc[i].handler = &i8259a_irq_type;
+               irq_desc[i].chip = &i8259a_irq_type;
        }
 
        setup_irq(2, &cascade);
diff -r c875b3d2c5e5 -r 29fd5adfdc07 arch/alpha/kernel/irq_pyxis.c
--- a/arch/alpha/kernel/irq_pyxis.c     Mon Aug 07 17:39:11 2006 -0400
+++ b/arch/alpha/kernel/irq_pyxis.c     Mon Aug 07 18:15:57 2006 -0400
@@ -120,7 +120,7 @@ init_pyxis_irqs(unsigned long ignore_mas
                if ((ignore_mask >> i) & 1)
                        continue;
                irq_desc[i].status = IRQ_DISABLED | IRQ_LEVEL;
-               irq_desc[i].handler = &pyxis_irq_type;
+               irq_desc[i].chip = &pyxis_irq_type;
        }
 
        setup_irq(16+7, &isa_cascade_irqaction);
diff -r c875b3d2c5e5 -r 29fd5adfdc07 arch/alpha/kernel/irq_srm.c
--- a/arch/alpha/kernel/irq_srm.c       Mon Aug 07 17:39:11 2006 -0400
+++ b/arch/alpha/kernel/irq_srm.c       Mon Aug 07 18:15:57 2006 -0400
@@ -67,7 +67,7 @@ init_srm_irqs(long max, unsigned long ig
                if (i < 64 && ((ignore_mask >> i) & 1))
                        continue;
                irq_desc[i].status = IRQ_DISABLED | IRQ_LEVEL;
-               irq_desc[i].handler = &srm_irq_type;
+               irq_desc[i].chip = &srm_irq_type;
        }
 }
 
diff -r c875b3d2c5e5 -r 29fd5adfdc07 arch/alpha/kernel/osf_sys.c
--- a/arch/alpha/kernel/osf_sys.c       Mon Aug 07 17:39:11 2006 -0400
+++ b/arch/alpha/kernel/osf_sys.c       Mon Aug 07 18:15:57 2006 -0400
@@ -244,7 +244,7 @@ do_osf_statfs(struct dentry * dentry, st
              unsigned long bufsiz)
 {
        struct kstatfs linux_stat;
-       int error = vfs_statfs(dentry->d_inode->i_sb, &linux_stat);
+       int error = vfs_statfs(dentry, &linux_stat);
        if (!error)
                error = linux_to_osf_statfs(&linux_stat, buffer, bufsiz);
        return error;   
diff -r c875b3d2c5e5 -r 29fd5adfdc07 arch/alpha/kernel/pci.c
--- a/arch/alpha/kernel/pci.c   Mon Aug 07 17:39:11 2006 -0400
+++ b/arch/alpha/kernel/pci.c   Mon Aug 07 18:15:57 2006 -0400
@@ -124,12 +124,12 @@ DECLARE_PCI_FIXUP_FINAL(PCI_ANY_ID, PCI_
 
 void
 pcibios_align_resource(void *data, struct resource *res,
-                      unsigned long size, unsigned long align)
+                      resource_size_t size, resource_size_t align)
 {
        struct pci_dev *dev = data;
        struct pci_controller *hose = dev->sysdata;
        unsigned long alignto;
-       unsigned long start = res->start;
+       resource_size_t start = res->start;
 
        if (res->flags & IORESOURCE_IO) {
                /* Make sure we start at our min on all hoses */
diff -r c875b3d2c5e5 -r 29fd5adfdc07 arch/alpha/kernel/setup.c
--- a/arch/alpha/kernel/setup.c Mon Aug 07 17:39:11 2006 -0400
+++ b/arch/alpha/kernel/setup.c Mon Aug 07 18:15:57 2006 -0400
@@ -481,7 +481,7 @@ register_cpus(void)
                struct cpu *p = kzalloc(sizeof(*p), GFP_KERNEL);
                if (!p)
                        return -ENOMEM;
-               register_cpu(p, i, NULL);
+               register_cpu(p, i);
        }
        return 0;
 }
diff -r c875b3d2c5e5 -r 29fd5adfdc07 arch/alpha/kernel/signal.c
--- a/arch/alpha/kernel/signal.c        Mon Aug 07 17:39:11 2006 -0400
+++ b/arch/alpha/kernel/signal.c        Mon Aug 07 18:15:57 2006 -0400
@@ -375,7 +375,7 @@ static inline void __user *
 static inline void __user *
 get_sigframe(struct k_sigaction *ka, unsigned long sp, size_t frame_size)
 {
-       if ((ka->sa.sa_flags & SA_ONSTACK) != 0 && ! on_sig_stack(sp))
+       if ((ka->sa.sa_flags & SA_ONSTACK) != 0 && ! sas_ss_flags(sp))
                sp = current->sas_ss_sp + current->sas_ss_size;
 
        return (void __user *)((sp - frame_size) & -32ul);
diff -r c875b3d2c5e5 -r 29fd5adfdc07 arch/alpha/kernel/sys_alcor.c
--- a/arch/alpha/kernel/sys_alcor.c     Mon Aug 07 17:39:11 2006 -0400
+++ b/arch/alpha/kernel/sys_alcor.c     Mon Aug 07 18:15:57 2006 -0400
@@ -144,7 +144,7 @@ alcor_init_irq(void)
                if (i >= 16+20 && i <= 16+30)
                        continue;
                irq_desc[i].status = IRQ_DISABLED | IRQ_LEVEL;
-               irq_desc[i].handler = &alcor_irq_type;
+               irq_desc[i].chip = &alcor_irq_type;
        }
        i8259a_irq_type.ack = alcor_isa_mask_and_ack_irq;
 
diff -r c875b3d2c5e5 -r 29fd5adfdc07 arch/alpha/kernel/sys_cabriolet.c
--- a/arch/alpha/kernel/sys_cabriolet.c Mon Aug 07 17:39:11 2006 -0400
+++ b/arch/alpha/kernel/sys_cabriolet.c Mon Aug 07 18:15:57 2006 -0400
@@ -124,7 +124,7 @@ common_init_irq(void (*srm_dev_int)(unsi
 
                for (i = 16; i < 35; ++i) {
                        irq_desc[i].status = IRQ_DISABLED | IRQ_LEVEL;
-                       irq_desc[i].handler = &cabriolet_irq_type;
+                       irq_desc[i].chip = &cabriolet_irq_type;
                }
        }
 
diff -r c875b3d2c5e5 -r 29fd5adfdc07 arch/alpha/kernel/sys_dp264.c
--- a/arch/alpha/kernel/sys_dp264.c     Mon Aug 07 17:39:11 2006 -0400
+++ b/arch/alpha/kernel/sys_dp264.c     Mon Aug 07 18:15:57 2006 -0400
@@ -300,7 +300,7 @@ init_tsunami_irqs(struct hw_interrupt_ty
        long i;
        for (i = imin; i <= imax; ++i) {
                irq_desc[i].status = IRQ_DISABLED | IRQ_LEVEL;
-               irq_desc[i].handler = ops;
+               irq_desc[i].chip = ops;
        }
 }
 
diff -r c875b3d2c5e5 -r 29fd5adfdc07 arch/alpha/kernel/sys_eb64p.c
--- a/arch/alpha/kernel/sys_eb64p.c     Mon Aug 07 17:39:11 2006 -0400
+++ b/arch/alpha/kernel/sys_eb64p.c     Mon Aug 07 18:15:57 2006 -0400
@@ -137,7 +137,7 @@ eb64p_init_irq(void)
 
        for (i = 16; i < 32; ++i) {
                irq_desc[i].status = IRQ_DISABLED | IRQ_LEVEL;
-               irq_desc[i].handler = &eb64p_irq_type;
+               irq_desc[i].chip = &eb64p_irq_type;
        }               
 
        common_init_isa_dma();
diff -r c875b3d2c5e5 -r 29fd5adfdc07 arch/alpha/kernel/sys_eiger.c
--- a/arch/alpha/kernel/sys_eiger.c     Mon Aug 07 17:39:11 2006 -0400
+++ b/arch/alpha/kernel/sys_eiger.c     Mon Aug 07 18:15:57 2006 -0400
@@ -154,7 +154,7 @@ eiger_init_irq(void)
 
        for (i = 16; i < 128; ++i) {
                irq_desc[i].status = IRQ_DISABLED | IRQ_LEVEL;
-               irq_desc[i].handler = &eiger_irq_type;
+               irq_desc[i].chip = &eiger_irq_type;
        }
 }
 
diff -r c875b3d2c5e5 -r 29fd5adfdc07 arch/alpha/kernel/sys_jensen.c
--- a/arch/alpha/kernel/sys_jensen.c    Mon Aug 07 17:39:11 2006 -0400
+++ b/arch/alpha/kernel/sys_jensen.c    Mon Aug 07 18:15:57 2006 -0400
@@ -206,11 +206,11 @@ jensen_init_irq(void)
 {
        init_i8259a_irqs();
 
-       irq_desc[1].handler = &jensen_local_irq_type;
-       irq_desc[4].handler = &jensen_local_irq_type;
-       irq_desc[3].handler = &jensen_local_irq_type;
-       irq_desc[7].handler = &jensen_local_irq_type;
-       irq_desc[9].handler = &jensen_local_irq_type;
+       irq_desc[1].chip = &jensen_local_irq_type;
+       irq_desc[4].chip = &jensen_local_irq_type;
+       irq_desc[3].chip = &jensen_local_irq_type;
+       irq_desc[7].chip = &jensen_local_irq_type;
+       irq_desc[9].chip = &jensen_local_irq_type;
 
        common_init_isa_dma();
 }
diff -r c875b3d2c5e5 -r 29fd5adfdc07 arch/alpha/kernel/sys_marvel.c
--- a/arch/alpha/kernel/sys_marvel.c    Mon Aug 07 17:39:11 2006 -0400
+++ b/arch/alpha/kernel/sys_marvel.c    Mon Aug 07 18:15:57 2006 -0400
@@ -303,7 +303,7 @@ init_io7_irqs(struct io7 *io7,
        /* Set up the lsi irqs.  */
        for (i = 0; i < 128; ++i) {
                irq_desc[base + i].status = IRQ_DISABLED | IRQ_LEVEL;
-               irq_desc[base + i].handler = lsi_ops;
+               irq_desc[base + i].chip = lsi_ops;
        }
 
        /* Disable the implemented irqs in hardware.  */
@@ -317,7 +317,7 @@ init_io7_irqs(struct io7 *io7,
        /* Set up the msi irqs.  */
        for (i = 128; i < (128 + 512); ++i) {
                irq_desc[base + i].status = IRQ_DISABLED | IRQ_LEVEL;
-               irq_desc[base + i].handler = msi_ops;
+               irq_desc[base + i].chip = msi_ops;
        }
 
        for (i = 0; i < 16; ++i)
@@ -335,7 +335,7 @@ marvel_init_irq(void)
        /* Reserve the legacy irqs.  */
        for (i = 0; i < 16; ++i) {
                irq_desc[i].status = IRQ_DISABLED;
-               irq_desc[i].handler = &marvel_legacy_irq_type;
+               irq_desc[i].chip = &marvel_legacy_irq_type;
        }
 
        /* Init the io7 irqs.  */
diff -r c875b3d2c5e5 -r 29fd5adfdc07 arch/alpha/kernel/sys_mikasa.c
--- a/arch/alpha/kernel/sys_mikasa.c    Mon Aug 07 17:39:11 2006 -0400
+++ b/arch/alpha/kernel/sys_mikasa.c    Mon Aug 07 18:15:57 2006 -0400
@@ -117,7 +117,7 @@ mikasa_init_irq(void)
 
        for (i = 16; i < 32; ++i) {
                irq_desc[i].status = IRQ_DISABLED | IRQ_LEVEL;
-               irq_desc[i].handler = &mikasa_irq_type;
+               irq_desc[i].chip = &mikasa_irq_type;
        }
 
        init_i8259a_irqs();
diff -r c875b3d2c5e5 -r 29fd5adfdc07 arch/alpha/kernel/sys_noritake.c
--- a/arch/alpha/kernel/sys_noritake.c  Mon Aug 07 17:39:11 2006 -0400
+++ b/arch/alpha/kernel/sys_noritake.c  Mon Aug 07 18:15:57 2006 -0400
@@ -139,7 +139,7 @@ noritake_init_irq(void)
 
        for (i = 16; i < 48; ++i) {
                irq_desc[i].status = IRQ_DISABLED | IRQ_LEVEL;
-               irq_desc[i].handler = &noritake_irq_type;
+               irq_desc[i].chip = &noritake_irq_type;
        }
 
        init_i8259a_irqs();
diff -r c875b3d2c5e5 -r 29fd5adfdc07 arch/alpha/kernel/sys_rawhide.c
--- a/arch/alpha/kernel/sys_rawhide.c   Mon Aug 07 17:39:11 2006 -0400
+++ b/arch/alpha/kernel/sys_rawhide.c   Mon Aug 07 18:15:57 2006 -0400
@@ -180,7 +180,7 @@ rawhide_init_irq(void)
 
        for (i = 16; i < 128; ++i) {
                irq_desc[i].status = IRQ_DISABLED | IRQ_LEVEL;
-               irq_desc[i].handler = &rawhide_irq_type;
+               irq_desc[i].chip = &rawhide_irq_type;
        }
 
        init_i8259a_irqs();
diff -r c875b3d2c5e5 -r 29fd5adfdc07 arch/alpha/kernel/sys_rx164.c
--- a/arch/alpha/kernel/sys_rx164.c     Mon Aug 07 17:39:11 2006 -0400
+++ b/arch/alpha/kernel/sys_rx164.c     Mon Aug 07 18:15:57 2006 -0400
@@ -117,7 +117,7 @@ rx164_init_irq(void)
        rx164_update_irq_hw(0);
        for (i = 16; i < 40; ++i) {
                irq_desc[i].status = IRQ_DISABLED | IRQ_LEVEL;
-               irq_desc[i].handler = &rx164_irq_type;
+               irq_desc[i].chip = &rx164_irq_type;
        }
 
        init_i8259a_irqs();
diff -r c875b3d2c5e5 -r 29fd5adfdc07 arch/alpha/kernel/sys_sable.c
--- a/arch/alpha/kernel/sys_sable.c     Mon Aug 07 17:39:11 2006 -0400
+++ b/arch/alpha/kernel/sys_sable.c     Mon Aug 07 18:15:57 2006 -0400
@@ -537,7 +537,7 @@ sable_lynx_init_irq(int nr_irqs)
 
        for (i = 0; i < nr_irqs; ++i) {
                irq_desc[i].status = IRQ_DISABLED | IRQ_LEVEL;
-               irq_desc[i].handler = &sable_lynx_irq_type;
+               irq_desc[i].chip = &sable_lynx_irq_type;
        }
 
        common_init_isa_dma();
diff -r c875b3d2c5e5 -r 29fd5adfdc07 arch/alpha/kernel/sys_takara.c
--- a/arch/alpha/kernel/sys_takara.c    Mon Aug 07 17:39:11 2006 -0400
+++ b/arch/alpha/kernel/sys_takara.c    Mon Aug 07 18:15:57 2006 -0400
@@ -154,7 +154,7 @@ takara_init_irq(void)
 
        for (i = 16; i < 128; ++i) {
                irq_desc[i].status = IRQ_DISABLED | IRQ_LEVEL;
-               irq_desc[i].handler = &takara_irq_type;
+               irq_desc[i].chip = &takara_irq_type;
        }
 
        common_init_isa_dma();
diff -r c875b3d2c5e5 -r 29fd5adfdc07 arch/alpha/kernel/sys_titan.c
--- a/arch/alpha/kernel/sys_titan.c     Mon Aug 07 17:39:11 2006 -0400
+++ b/arch/alpha/kernel/sys_titan.c     Mon Aug 07 18:15:57 2006 -0400
@@ -189,7 +189,7 @@ init_titan_irqs(struct hw_interrupt_type
        long i;
        for (i = imin; i <= imax; ++i) {
                irq_desc[i].status = IRQ_DISABLED | IRQ_LEVEL;
-               irq_desc[i].handler = ops;
+               irq_desc[i].chip = ops;
        }
 }
 
diff -r c875b3d2c5e5 -r 29fd5adfdc07 arch/alpha/kernel/sys_wildfire.c
--- a/arch/alpha/kernel/sys_wildfire.c  Mon Aug 07 17:39:11 2006 -0400
+++ b/arch/alpha/kernel/sys_wildfire.c  Mon Aug 07 18:15:57 2006 -0400
@@ -199,14 +199,14 @@ wildfire_init_irq_per_pca(int qbbno, int
                if (i == 2)
                        continue;
                irq_desc[i+irq_bias].status = IRQ_DISABLED | IRQ_LEVEL;
-               irq_desc[i+irq_bias].handler = &wildfire_irq_type;
+               irq_desc[i+irq_bias].chip = &wildfire_irq_type;
        }
 
        irq_desc[36+irq_bias].status = IRQ_DISABLED | IRQ_LEVEL;
-       irq_desc[36+irq_bias].handler = &wildfire_irq_type;
+       irq_desc[36+irq_bias].chip = &wildfire_irq_type;
        for (i = 40; i < 64; ++i) {
                irq_desc[i+irq_bias].status = IRQ_DISABLED | IRQ_LEVEL;
-               irq_desc[i+irq_bias].handler = &wildfire_irq_type;
+               irq_desc[i+irq_bias].chip = &wildfire_irq_type;
        }
 
        setup_irq(32+irq_bias, &isa_enable);    
diff -r c875b3d2c5e5 -r 29fd5adfdc07 arch/alpha/oprofile/common.c
--- a/arch/alpha/oprofile/common.c      Mon Aug 07 17:39:11 2006 -0400
+++ b/arch/alpha/oprofile/common.c      Mon Aug 07 18:15:57 2006 -0400
@@ -112,7 +112,7 @@ op_axp_create_files(struct super_block *
 
        for (i = 0; i < model->num_counters; ++i) {
                struct dentry *dir;
-               char buf[3];
+               char buf[4];
 
                snprintf(buf, sizeof buf, "%d", i);
                dir = oprofilefs_mkdir(sb, root, buf);
diff -r c875b3d2c5e5 -r 29fd5adfdc07 arch/arm/Kconfig
--- a/arch/arm/Kconfig  Mon Aug 07 17:39:11 2006 -0400
+++ b/arch/arm/Kconfig  Mon Aug 07 18:15:57 2006 -0400
@@ -188,23 +188,27 @@ config ARCH_IMX
 
 config ARCH_IOP3XX
        bool "IOP3xx-based"
+       depends on MMU
        select PCI
        help
          Support for Intel's IOP3XX (XScale) family of processors.
 
 config ARCH_IXP4XX
        bool "IXP4xx-based"
+       depends on MMU
        help
          Support for Intel's IXP4XX (XScale) family of processors.
 
 config ARCH_IXP2000
        bool "IXP2400/2800-based"
+       depends on MMU
        select PCI
        help
          Support for Intel's IXP2400/2800 (XScale) family of processors.
 
 config ARCH_IXP23XX
        bool "IXP23XX-based"
+       depends on MMU
        select PCI
        help
          Support for Intel's IXP23xx (XScale) family of processors.
@@ -229,6 +233,7 @@ config ARCH_PNX4008
 
 config ARCH_PXA
        bool "PXA2xx-based"
+       depends on MMU
        select ARCH_MTD_XIP
        help
          Support for Intel's PXA2XX processor line.
@@ -253,7 +258,7 @@ config ARCH_SA1100
          Support for StrongARM 11x0 based boards.
 
 config ARCH_S3C2410
-       bool "Samsung S3C2410"
+       bool "Samsung S3C2410, S3C2412, S3C2413, S3C2440, S3C2442"
        help
          Samsung S3C2410X CPU based systems, such as the Simtec Electronics
          BAST (<http://www.simtec.co.uk/products/EB110ITX/>), the IPAQ 1940 or
@@ -339,6 +344,10 @@ config XSCALE_PMU
        depends on CPU_XSCALE && !XSCALE_PMU_TIMER
        default y
 
+if !MMU
+source "arch/arm/Kconfig-nommu"
+endif
+
 endmenu
 
 source "arch/arm/common/Kconfig"
@@ -372,7 +381,7 @@ config ISA_DMA_API
        bool
 
 config PCI
-       bool "PCI support" if ARCH_INTEGRATOR_AP || ARCH_VERSATILE_PB
+       bool "PCI support" if ARCH_INTEGRATOR_AP || ARCH_VERSATILE_PB || 
ARCH_IXP4XX
        help
          Find out whether you have a PCI motherboard. PCI is the name of a
          bus system, i.e. the way the CPU talks to the other stuff inside
diff -r c875b3d2c5e5 -r 29fd5adfdc07 arch/arm/Makefile
--- a/arch/arm/Makefile Mon Aug 07 17:39:11 2006 -0400
+++ b/arch/arm/Makefile Mon Aug 07 18:15:57 2006 -0400
@@ -177,7 +177,7 @@ boot := arch/arm/boot
 #      them changed.  We use .arch to indicate when they were updated
 #      last, otherwise make uses the target directory mtime.
 
-include/asm-arm/.arch: $(wildcard include/config/arch/*.h) 
include/config/MARKER
+include/asm-arm/.arch: $(wildcard include/config/arch/*.h) 
include/config/auto.conf
        @echo '  SYMLINK include/asm-arm/arch -> include/asm-arm/$(INCDIR)'
 ifneq ($(KBUILD_SRC),)
        $(Q)mkdir -p include/asm-arm
diff -r c875b3d2c5e5 -r 29fd5adfdc07 arch/arm/boot/compressed/head-at91rm9200.S
--- a/arch/arm/boot/compressed/head-at91rm9200.S        Mon Aug 07 17:39:11 
2006 -0400
+++ b/arch/arm/boot/compressed/head-at91rm9200.S        Mon Aug 07 18:15:57 
2006 -0400
@@ -61,6 +61,12 @@
                cmp     r7, r3
                beq     99f
 
+               @ Ajeco 1ARM : 1075
+               mov     r3,     #(MACH_TYPE_ONEARM & 0xff)
+               orr     r3, r3, #(MACH_TYPE_ONEARM & 0xff00)
+               cmp     r7, r3
+               beq     99f
+
                @ Unknown board, use the AT91RM9200DK board
                @ mov   r7, #MACH_TYPE_AT91RM9200
                mov     r7,     #(MACH_TYPE_AT91RM9200DK & 0xff)
diff -r c875b3d2c5e5 -r 29fd5adfdc07 arch/arm/boot/compressed/ll_char_wr.S
--- a/arch/arm/boot/compressed/ll_char_wr.S     Mon Aug 07 17:39:11 2006 -0400
+++ b/arch/arm/boot/compressed/ll_char_wr.S     Mon Aug 07 18:15:57 2006 -0400
@@ -77,7 +77,7 @@ Lrow4bpplp:
        subne   r1, r1, #1
        ldrneb  r7, [r6, r1]
        bne     Lrow4bpplp
-       LOADREGS(fd, sp!, {r4 - r7, pc})
+       ldmfd   sp!, {r4 - r7, pc}
 
 @
 @ Smashable regs: {r0 - r3}, [r4], {r5 - r7}, (r8 - fp), [ip], (sp), {lr}, (pc)
@@ -105,7 +105,7 @@ Lrow8bpplp:
        subne   r1, r1, #1
        ldrneb  r7, [r6, r1]
        bne     Lrow8bpplp
-       LOADREGS(fd, sp!, {r4 - r7, pc})
+       ldmfd   sp!, {r4 - r7, pc}
 
 @
 @ Smashable regs: {r0 - r3}, [r4], {r5, r6}, [r7], (r8 - fp), [ip], (sp), 
[lr], (pc)
@@ -127,7 +127,7 @@ Lrow1bpp:
        strb    r7, [r0], r5
        mov     r7, r7, lsr #8
        strb    r7, [r0], r5
-       LOADREGS(fd, sp!, {r4 - r7, pc})
+       ldmfd   sp!, {r4 - r7, pc}
 
        .bss
 ENTRY(con_charconvtable)
diff -r c875b3d2c5e5 -r 29fd5adfdc07 arch/arm/common/locomo.c
--- a/arch/arm/common/locomo.c  Mon Aug 07 17:39:11 2006 -0400
+++ b/arch/arm/common/locomo.c  Mon Aug 07 18:15:57 2006 -0400
@@ -629,21 +629,6 @@ static int locomo_resume(struct platform
 #endif
 
 
-#define LCM_ALC_EN     0x8000
-
-void frontlight_set(struct locomo *lchip, int duty, int vr, int bpwf)
-{
-       unsigned long flags;
-
-       spin_lock_irqsave(&lchip->lock, flags);
-       locomo_writel(bpwf, lchip->base + LOCOMO_FRONTLIGHT + LOCOMO_ALS);
-       udelay(100);
-       locomo_writel(duty, lchip->base + LOCOMO_FRONTLIGHT + LOCOMO_ALD);
-       locomo_writel(bpwf | LCM_ALC_EN, lchip->base + LOCOMO_FRONTLIGHT + 
LOCOMO_ALS);
-       spin_unlock_irqrestore(&lchip->lock, flags);
-}
-
-
 /**
  *     locomo_probe - probe for a single LoCoMo chip.
  *     @phys_addr: physical address of device.
@@ -698,13 +683,9 @@ __locomo_probe(struct device *me, struct
                        , lchip->base + LOCOMO_GPD);
        locomo_writel(0, lchip->base + LOCOMO_GIE);
 
-       /* FrontLight */
+       /* Frontlight */
        locomo_writel(0, lchip->base + LOCOMO_FRONTLIGHT + LOCOMO_ALS);
        locomo_writel(0, lchip->base + LOCOMO_FRONTLIGHT + LOCOMO_ALD);
-
-       /* Same constants can be used for collie and poodle
-          (depending on CONFIG options in original sharp code)? */
-       frontlight_set(lchip, 163, 0, 148);
 
        /* Longtime timer */
        locomo_writel(0, lchip->base + LOCOMO_LTINT);
@@ -1063,6 +1044,30 @@ void locomo_m62332_senddata(struct locom
 }
 
 /*
+ *     Frontlight control
+ */
+
+static struct locomo *locomo_chip_driver(struct locomo_dev *ldev);
+
+void locomo_frontlight_set(struct locomo_dev *dev, int duty, int vr, int bpwf)
+{
+       unsigned long flags;
+       struct locomo *lchip = locomo_chip_driver(dev);
+
+       if (vr)
+               locomo_gpio_write(dev, LOCOMO_GPIO_FL_VR, 1);
+       else
+               locomo_gpio_write(dev, LOCOMO_GPIO_FL_VR, 0);
+
+       spin_lock_irqsave(&lchip->lock, flags);
+       locomo_writel(bpwf, lchip->base + LOCOMO_FRONTLIGHT + LOCOMO_ALS);
+       udelay(100);
+       locomo_writel(duty, lchip->base + LOCOMO_FRONTLIGHT + LOCOMO_ALD);
+       locomo_writel(bpwf | LOCOMO_ALC_EN, lchip->base + LOCOMO_FRONTLIGHT + 
LOCOMO_ALS);
+       spin_unlock_irqrestore(&lchip->lock, flags);
+}
+
+/*
  *     LoCoMo "Register Access Bus."
  *
  *     We model this as a regular bus type, and hang devices directly
diff -r c875b3d2c5e5 -r 29fd5adfdc07 arch/arm/configs/s3c2410_defconfig
--- a/arch/arm/configs/s3c2410_defconfig        Mon Aug 07 17:39:11 2006 -0400
+++ b/arch/arm/configs/s3c2410_defconfig        Mon Aug 07 18:15:57 2006 -0400
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.17
-# Tue Jun 20 18:57:01 2006
+# Linux kernel version: 2.6.17-git9
+# Sun Jun 25 23:56:32 2006
 #
 CONFIG_ARM=y
 CONFIG_MMU=y
@@ -49,7 +49,6 @@ CONFIG_SLAB=y
 # CONFIG_TINY_SHMEM is not set
 CONFIG_BASE_SMALL=0
 # CONFIG_SLOB is not set
-CONFIG_OBSOLETE_INTERMODULE=y
 
 #
 # Loadable module support
@@ -81,18 +80,26 @@ CONFIG_DEFAULT_IOSCHED="anticipatory"
 #
 # System Type
 #
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91RM9200 is not set
 # CONFIG_ARCH_CLPS7500 is not set
 # CONFIG_ARCH_CLPS711X is not set
 # CONFIG_ARCH_CO285 is not set
 # CONFIG_ARCH_EBSA110 is not set
 # CONFIG_ARCH_EP93XX is not set
 # CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IMX is not set
 # CONFIG_ARCH_IOP3XX is not set
 # CONFIG_ARCH_IXP4XX is not set
 # CONFIG_ARCH_IXP2000 is not set
 # CONFIG_ARCH_IXP23XX is not set
 # CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_PNX4008 is not set
 # CONFIG_ARCH_PXA is not set
 # CONFIG_ARCH_RPC is not set
 # CONFIG_ARCH_SA1100 is not set
@@ -100,14 +107,6 @@ CONFIG_ARCH_S3C2410=y
 # CONFIG_ARCH_SHARK is not set
 # CONFIG_ARCH_LH7A40X is not set
 # CONFIG_ARCH_OMAP is not set
-# CONFIG_ARCH_VERSATILE is not set
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_AT91RM9200 is not set
-# CONFIG_ARCH_PNX4008 is not set
-# CONFIG_ARCH_NETX is not set
 
 #
 # S3C24XX Implementations
@@ -123,11 +122,14 @@ CONFIG_ARCH_S3C2440=y
 CONFIG_ARCH_S3C2440=y
 CONFIG_SMDK2440_CPU2440=y
 CONFIG_SMDK2440_CPU2442=y
+CONFIG_MACH_SMDK2413=y
 CONFIG_MACH_VR1000=y
 CONFIG_MACH_RX3715=y
 CONFIG_MACH_OTOM=y
 CONFIG_MACH_NEXCODER_2440=y
+CONFIG_S3C2410_CLOCK=y
 CONFIG_CPU_S3C2410=y
+CONFIG_CPU_S3C2412=y
 CONFIG_CPU_S3C244X=y
 CONFIG_CPU_S3C2440=y
 CONFIG_CPU_S3C2442=y
@@ -153,8 +155,11 @@ CONFIG_S3C2410_LOWLEVEL_UART_PORT=0
 #
 CONFIG_CPU_32=y
 CONFIG_CPU_ARM920T=y
+CONFIG_CPU_ARM926T=y
 CONFIG_CPU_32v4=y
+CONFIG_CPU_32v5=y
 CONFIG_CPU_ABRT_EV4T=y
+CONFIG_CPU_ABRT_EV5TJ=y
 CONFIG_CPU_CACHE_V4WT=y
 CONFIG_CPU_CACHE_VIVT=y
 CONFIG_CPU_COPY_V4WB=y
@@ -167,6 +172,7 @@ CONFIG_CPU_TLB_V4WBI=y
 # CONFIG_CPU_ICACHE_DISABLE is not set
 # CONFIG_CPU_DCACHE_DISABLE is not set
 # CONFIG_CPU_DCACHE_WRITETHROUGH is not set
+# CONFIG_CPU_CACHE_ROUND_ROBIN is not set
 
 #
 # Bus support
@@ -214,6 +220,7 @@ CONFIG_FPE_NWFPE=y
 CONFIG_FPE_NWFPE=y
 # CONFIG_FPE_NWFPE_XP is not set
 # CONFIG_FPE_FASTFPE is not set
+# CONFIG_VFP is not set
 
 #
 # Userspace binary formats
@@ -242,6 +249,8 @@ CONFIG_NET=y
 # CONFIG_NETDEBUG is not set
 # CONFIG_PACKET is not set
 CONFIG_UNIX=y
+CONFIG_XFRM=y
+# CONFIG_XFRM_USER is not set
 # CONFIG_NET_KEY is not set
 CONFIG_INET=y
 # CONFIG_IP_MULTICAST is not set
@@ -260,6 +269,8 @@ CONFIG_IP_PNP_BOOTP=y
 # CONFIG_INET_IPCOMP is not set
 # CONFIG_INET_XFRM_TUNNEL is not set
 # CONFIG_INET_TUNNEL is not set
+CONFIG_INET_XFRM_MODE_TRANSPORT=y
+CONFIG_INET_XFRM_MODE_TUNNEL=y
 CONFIG_INET_DIAG=y
 CONFIG_INET_TCP_DIAG=y
 # CONFIG_TCP_CONG_ADVANCED is not set
@@ -267,6 +278,7 @@ CONFIG_TCP_CONG_BIC=y
 # CONFIG_IPV6 is not set
 # CONFIG_INET6_XFRM_TUNNEL is not set
 # CONFIG_INET6_TUNNEL is not set
+# CONFIG_NETWORK_SECMARK is not set
 # CONFIG_NETFILTER is not set
 
 #
@@ -321,6 +333,7 @@ CONFIG_PREVENT_FIRMWARE_BUILD=y
 CONFIG_PREVENT_FIRMWARE_BUILD=y
 # CONFIG_FW_LOADER is not set
 # CONFIG_DEBUG_DRIVER is not set
+# CONFIG_SYS_HYPERVISOR is not set
 
 #
 # Connector - unified userspace <-> kernelspace linker
@@ -408,10 +421,12 @@ CONFIG_MTD_BAST_MAXSIZE=4
 #
 CONFIG_MTD_NAND=y
 # CONFIG_MTD_NAND_VERIFY_WRITE is not set
+# CONFIG_MTD_NAND_ECC_SMC is not set
 CONFIG_MTD_NAND_IDS=y
 CONFIG_MTD_NAND_S3C2410=y
 # CONFIG_MTD_NAND_S3C2410_DEBUG is not set
 # CONFIG_MTD_NAND_S3C2410_HWECC is not set
+# CONFIG_MTD_NAND_S3C2410_CLKSTOP is not set
 # CONFIG_MTD_NAND_DISKONCHIP is not set
 # CONFIG_MTD_NAND_NANDSIM is not set
 
@@ -425,8 +440,8 @@ CONFIG_MTD_NAND_S3C2410=y
 #
 CONFIG_PARPORT=y
 # CONFIG_PARPORT_PC is not set
-# CONFIG_PARPORT_ARC is not set
 # CONFIG_PARPORT_GSC is not set
+# CONFIG_PARPORT_AX88796 is not set
 CONFIG_PARPORT_1284=y
 
 #
@@ -735,6 +750,7 @@ CONFIG_I2C_ALGOBIT=m
 #
 # CONFIG_I2C_ELEKTOR is not set
 CONFIG_I2C_ISA=m
+# CONFIG_I2C_OCORES is not set
 # CONFIG_I2C_PARPORT is not set
 # CONFIG_I2C_PARPORT_LIGHT is not set
 CONFIG_I2C_S3C2410=y
@@ -765,13 +781,13 @@ CONFIG_SENSORS_EEPROM=m
 #
 # Dallas's 1-wire bus
 #
-# CONFIG_W1 is not set
 
 #
 # Hardware Monitoring support
 #
 CONFIG_HWMON=y
 CONFIG_HWMON_VID=m
+# CONFIG_SENSORS_ABITUGURU is not set
 # CONFIG_SENSORS_ADM1021 is not set
 # CONFIG_SENSORS_ADM1025 is not set
 # CONFIG_SENSORS_ADM1026 is not set
@@ -799,8 +815,10 @@ CONFIG_SENSORS_LM85=m
 # CONFIG_SENSORS_MAX1619 is not set
 # CONFIG_SENSORS_PC87360 is not set
 # CONFIG_SENSORS_SMSC47M1 is not set
+# CONFIG_SENSORS_SMSC47M192 is not set
 # CONFIG_SENSORS_SMSC47B397 is not set
 # CONFIG_SENSORS_W83781D is not set
+# CONFIG_SENSORS_W83791D is not set
 # CONFIG_SENSORS_W83792D is not set
 # CONFIG_SENSORS_W83L785TS is not set
 # CONFIG_SENSORS_W83627HF is not set
@@ -845,6 +863,7 @@ CONFIG_FB_CFB_IMAGEBLIT=y
 CONFIG_FB_CFB_IMAGEBLIT=y
 # CONFIG_FB_MACMODES is not set
 CONFIG_FB_FIRMWARE_EDID=y
+# CONFIG_FB_BACKLIGHT is not set
 CONFIG_FB_MODE_HELPERS=y
 # CONFIG_FB_TILEBLITTING is not set
 # CONFIG_FB_S1D13XXX is not set
@@ -976,10 +995,12 @@ CONFIG_USB_MON=y
 # CONFIG_USB_LEGOTOWER is not set
 # CONFIG_USB_LCD is not set
 # CONFIG_USB_LED is not set
+# CONFIG_USB_CY7C63 is not set
 # CONFIG_USB_CYTHERM is not set
 # CONFIG_USB_PHIDGETKIT is not set
 # CONFIG_USB_PHIDGETSERVO is not set
 # CONFIG_USB_IDMOUSE is not set
+# CONFIG_USB_APPLEDISPLAY is not set
 # CONFIG_USB_LD is not set
 # CONFIG_USB_TEST is not set
 
@@ -1024,6 +1045,7 @@ CONFIG_FS_MBCACHE=y
 # CONFIG_MINIX_FS is not set
 CONFIG_ROMFS_FS=y
 CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
 # CONFIG_QUOTA is not set
 CONFIG_DNOTIFY=y
 # CONFIG_AUTOFS_FS is not set
diff -r c875b3d2c5e5 -r 29fd5adfdc07 arch/arm/kernel/Makefile
--- a/arch/arm/kernel/Makefile  Mon Aug 07 17:39:11 2006 -0400
+++ b/arch/arm/kernel/Makefile  Mon Aug 07 18:15:57 2006 -0400
@@ -22,6 +22,9 @@ obj-$(CONFIG_SMP)             += smp.o
 obj-$(CONFIG_SMP)              += smp.o
 obj-$(CONFIG_OABI_COMPAT)      += sys_oabi-compat.o
 
+obj-$(CONFIG_CRUNCH)           += crunch.o crunch-bits.o
+AFLAGS_crunch-bits.o           := -Wa,-mcpu=ep9312
+
 obj-$(CONFIG_IWMMXT)           += iwmmxt.o
 AFLAGS_iwmmxt.o                        := -Wa,-mcpu=iwmmxt
 
diff -r c875b3d2c5e5 -r 29fd5adfdc07 arch/arm/kernel/armksyms.c
--- a/arch/arm/kernel/armksyms.c        Mon Aug 07 17:39:11 2006 -0400
+++ b/arch/arm/kernel/armksyms.c        Mon Aug 07 18:15:57 2006 -0400
@@ -109,11 +109,13 @@ EXPORT_SYMBOL(__memzero);
 EXPORT_SYMBOL(__memzero);
 
        /* user mem (segment) */
-EXPORT_SYMBOL(__arch_copy_from_user);
-EXPORT_SYMBOL(__arch_copy_to_user);
-EXPORT_SYMBOL(__arch_clear_user);
-EXPORT_SYMBOL(__arch_strnlen_user);
-EXPORT_SYMBOL(__arch_strncpy_from_user);
+EXPORT_SYMBOL(__strnlen_user);
+EXPORT_SYMBOL(__strncpy_from_user);
+
+#ifdef CONFIG_MMU
+EXPORT_SYMBOL(__copy_from_user);
+EXPORT_SYMBOL(__copy_to_user);
+EXPORT_SYMBOL(__clear_user);
 
 EXPORT_SYMBOL(__get_user_1);
 EXPORT_SYMBOL(__get_user_2);
@@ -123,6 +125,7 @@ EXPORT_SYMBOL(__put_user_2);
 EXPORT_SYMBOL(__put_user_2);
 EXPORT_SYMBOL(__put_user_4);
 EXPORT_SYMBOL(__put_user_8);
+#endif
 
        /* crypto hash */
 EXPORT_SYMBOL(sha_transform);
diff -r c875b3d2c5e5 -r 29fd5adfdc07 arch/arm/kernel/asm-offsets.c
--- a/arch/arm/kernel/asm-offsets.c     Mon Aug 07 17:39:11 2006 -0400
+++ b/arch/arm/kernel/asm-offsets.c     Mon Aug 07 18:15:57 2006 -0400
@@ -60,6 +60,9 @@ int main(void)
 #ifdef CONFIG_IWMMXT
   DEFINE(TI_IWMMXT_STATE,      offsetof(struct thread_info, fpstate.iwmmxt));
 #endif
+#ifdef CONFIG_CRUNCH
+  DEFINE(TI_CRUNCH_STATE,      offsetof(struct thread_info, crunchstate));
+#endif
   BLANK();
   DEFINE(S_R0,                 offsetof(struct pt_regs, ARM_r0));
   DEFINE(S_R1,                 offsetof(struct pt_regs, ARM_r1));
diff -r c875b3d2c5e5 -r 29fd5adfdc07 arch/arm/kernel/bios32.c
--- a/arch/arm/kernel/bios32.c  Mon Aug 07 17:39:11 2006 -0400
+++ b/arch/arm/kernel/bios32.c  Mon Aug 07 18:15:57 2006 -0400
@@ -304,7 +304,7 @@ static void __devinit
 static void __devinit
 pdev_fixup_device_resources(struct pci_sys_data *root, struct pci_dev *dev)
 {
-       unsigned long offset;
+       resource_size_t offset;
        int i;
 
        for (i = 0; i < PCI_NUM_RESOURCES; i++) {
@@ -634,9 +634,9 @@ char * __init pcibios_setup(char *str)
  * which might be mirrored at 0x0100-0x03ff..
  */
 void pcibios_align_resource(void *data, struct resource *res,
-                           unsigned long size, unsigned long align)
-{
-       unsigned long start = res->start;
+                           resource_size_t size, resource_size_t align)
+{
+       resource_size_t start = res->start;
 
        if (res->flags & IORESOURCE_IO && start & 0x300)
                start = (start + 0x3ff) & ~0x3ff;
@@ -702,7 +702,6 @@ int pci_mmap_page_range(struct pci_dev *
        /*
         * Mark this as IO
         */
-       vma->vm_flags |= VM_SHM | VM_LOCKED | VM_IO;
        vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot);
 
        if (remap_pfn_range(vma, vma->vm_start, phys,
diff -r c875b3d2c5e5 -r 29fd5adfdc07 arch/arm/kernel/entry-armv.S
--- a/arch/arm/kernel/entry-armv.S      Mon Aug 07 17:39:11 2006 -0400
+++ b/arch/arm/kernel/entry-armv.S      Mon Aug 07 18:15:57 2006 -0400
@@ -492,9 +492,15 @@ call_fpe:
        b       do_fpe                          @ CP#1 (FPE)
        b       do_fpe                          @ CP#2 (FPE)
        mov     pc, lr                          @ CP#3
+#ifdef CONFIG_CRUNCH
+       b       crunch_task_enable              @ CP#4 (MaverickCrunch)
+       b       crunch_task_enable              @ CP#5 (MaverickCrunch)
+       b       crunch_task_enable              @ CP#6 (MaverickCrunch)
+#else
        mov     pc, lr                          @ CP#4
        mov     pc, lr                          @ CP#5
        mov     pc, lr                          @ CP#6
+#endif
        mov     pc, lr                          @ CP#7
        mov     pc, lr                          @ CP#8
        mov     pc, lr                          @ CP#9
diff -r c875b3d2c5e5 -r 29fd5adfdc07 arch/arm/kernel/entry-common.S
--- a/arch/arm/kernel/entry-common.S    Mon Aug 07 17:39:11 2006 -0400
+++ b/arch/arm/kernel/entry-common.S    Mon Aug 07 18:15:57 2006 -0400
@@ -340,7 +340,7 @@ sys_mmap2:
                streq   r5, [sp, #4]
                beq     do_mmap2
                mov     r0, #-EINVAL
-               RETINSTR(mov,pc, lr)
+               mov     pc, lr
 #else
                str     r5, [sp, #4]
                b       do_mmap2
diff -r c875b3d2c5e5 -r 29fd5adfdc07 arch/arm/kernel/head-nommu.S
--- a/arch/arm/kernel/head-nommu.S      Mon Aug 07 17:39:11 2006 -0400
+++ b/arch/arm/kernel/head-nommu.S      Mon Aug 07 18:15:57 2006 -0400
@@ -39,7 +39,7 @@
        __INIT
        .type   stext, %function
 ENTRY(stext)
-       msr     cpsr_c, #PSR_F_BIT | PSR_I_BIT | MODE_SVC @ ensure svc mode
+       msr     cpsr_c, #PSR_F_BIT | PSR_I_BIT | SVC_MODE @ ensure svc mode
                                                @ and irqs disabled
        mrc     p15, 0, r9, c0, c0              @ get processor id
        bl      __lookup_processor_type         @ r5=procinfo r9=cpuid
diff -r c875b3d2c5e5 -r 29fd5adfdc07 arch/arm/kernel/head.S
--- a/arch/arm/kernel/head.S    Mon Aug 07 17:39:11 2006 -0400
+++ b/arch/arm/kernel/head.S    Mon Aug 07 18:15:57 2006 -0400
@@ -71,7 +71,7 @@
        __INIT
        .type   stext, %function
 ENTRY(stext)
-       msr     cpsr_c, #PSR_F_BIT | PSR_I_BIT | MODE_SVC @ ensure svc mode
+       msr     cpsr_c, #PSR_F_BIT | PSR_I_BIT | SVC_MODE @ ensure svc mode
                                                @ and irqs disabled
        mrc     p15, 0, r9, c0, c0              @ get processor id
        bl      __lookup_processor_type         @ r5=procinfo r9=cpuid
@@ -104,7 +104,7 @@ ENTRY(secondary_startup)
         * the processor type - there is no need to check the machine type
         * as it has already been validated by the primary processor.
         */
-       msr     cpsr_c, #PSR_F_BIT | PSR_I_BIT | MODE_SVC
+       msr     cpsr_c, #PSR_F_BIT | PSR_I_BIT | SVC_MODE
        mrc     p15, 0, r9, c0, c0              @ get processor id
        bl      __lookup_processor_type
        movs    r10, r5                         @ invalid processor?
diff -r c875b3d2c5e5 -r 29fd5adfdc07 arch/arm/kernel/irq.c
--- a/arch/arm/kernel/irq.c     Mon Aug 07 17:39:11 2006 -0400
+++ b/arch/arm/kernel/irq.c     Mon Aug 07 18:15:57 2006 -0400
@@ -52,7 +52,7 @@
  */
 #define MAX_IRQ_CNT    100000
 
-static int noirqdebug;
+static int noirqdebug __read_mostly;
 static volatile unsigned long irq_err_count;
 static DEFINE_SPINLOCK(irq_controller_lock);
 static LIST_HEAD(irq_pending);
@@ -81,7 +81,7 @@ irqreturn_t no_action(int irq, void *dev
 
 void do_bad_IRQ(unsigned int irq, struct irqdesc *desc, struct pt_regs *regs)
 {
-       irq_err_count += 1;
+       irq_err_count++;
        printk(KERN_ERR "IRQ: spurious interrupt %d\n", irq);
 }
 
diff -r c875b3d2c5e5 -r 29fd5adfdc07 arch/arm/kernel/iwmmxt.S
--- a/arch/arm/kernel/iwmmxt.S  Mon Aug 07 17:39:11 2006 -0400
+++ b/arch/arm/kernel/iwmmxt.S  Mon Aug 07 18:15:57 2006 -0400
@@ -273,7 +273,7 @@ 1:  @ this task owns Concan regs -- load 
  *
  * r0 = previous task_struct pointer (must be preserved)
  * r1 = previous thread_info pointer
- * r2 = next thread_info.cpu_domain pointer (must be preserved)
+ * r2 = next thread_info pointer (must be preserved)
  *
  * Called only from __switch_to with task preemption disabled.
  * No need to care about preserving r4 and above.
diff -r c875b3d2c5e5 -r 29fd5adfdc07 arch/arm/kernel/ptrace.c
--- a/arch/arm/kernel/ptrace.c  Mon Aug 07 17:39:11 2006 -0400
+++ b/arch/arm/kernel/ptrace.c  Mon Aug 07 18:15:57 2006 -0400
@@ -634,6 +634,32 @@ static int ptrace_setwmmxregs(struct tas
 
 #endif
 
+#ifdef CONFIG_CRUNCH
+/*
+ * Get the child Crunch state.
+ */
+static int ptrace_getcrunchregs(struct task_struct *tsk, void __user *ufp)
+{
+       struct thread_info *thread = task_thread_info(tsk);
+
+       crunch_task_disable(thread);  /* force it to ram */
+       return copy_to_user(ufp, &thread->crunchstate, CRUNCH_SIZE)
+               ? -EFAULT : 0;
+}
+
+/*
+ * Set the child Crunch state.
+ */
+static int ptrace_setcrunchregs(struct task_struct *tsk, void __user *ufp)
+{
+       struct thread_info *thread = task_thread_info(tsk);
+
+       crunch_task_release(thread);  /* force a reload */
+       return copy_from_user(&thread->crunchstate, ufp, CRUNCH_SIZE)
+               ? -EFAULT : 0;
+}
+#endif
+
 long arch_ptrace(struct task_struct *child, long request, long addr, long data)
 {
        unsigned long tmp;
@@ -765,6 +791,16 @@ long arch_ptrace(struct task_struct *chi
                        child->ptrace_message = data;
                        break;
 
+#ifdef CONFIG_CRUNCH
+               case PTRACE_GETCRUNCHREGS:
+                       ret = ptrace_getcrunchregs(child, (void __user *)data);
+                       break;
+
+               case PTRACE_SETCRUNCHREGS:
+                       ret = ptrace_setcrunchregs(child, (void __user *)data);
+                       break;
+#endif
+
                default:
                        ret = ptrace_request(child, request, addr, data);
                        break;
diff -r c875b3d2c5e5 -r 29fd5adfdc07 arch/arm/kernel/setup.c
--- a/arch/arm/kernel/setup.c   Mon Aug 07 17:39:11 2006 -0400
+++ b/arch/arm/kernel/setup.c   Mon Aug 07 18:15:57 2006 -0400
@@ -119,9 +119,24 @@ DEFINE_PER_CPU(struct cpuinfo_arm, cpu_d
  * Standard memory resources
  */
 static struct resource mem_res[] = {
-       { "Video RAM",   0,     0,     IORESOURCE_MEM                   },
-       { "Kernel text", 0,     0,     IORESOURCE_MEM                   },
-       { "Kernel data", 0,     0,     IORESOURCE_MEM                   }
+       {
+               .name = "Video RAM",
+               .start = 0,
+               .end = 0,
+               .flags = IORESOURCE_MEM
+       },
+       {
+               .name = "Kernel text",
+               .start = 0,
+               .end = 0,
+               .flags = IORESOURCE_MEM
+       },
+       {
+               .name = "Kernel data",
+               .start = 0,
+               .end = 0,
+               .flags = IORESOURCE_MEM
+       }
 };
 
 #define video_ram   mem_res[0]
@@ -129,9 +144,24 @@ static struct resource mem_res[] = {
 #define kernel_data mem_res[2]
 
 static struct resource io_res[] = {
-       { "reserved",    0x3bc, 0x3be, IORESOURCE_IO | IORESOURCE_BUSY },
-       { "reserved",    0x378, 0x37f, IORESOURCE_IO | IORESOURCE_BUSY },
-       { "reserved",    0x278, 0x27f, IORESOURCE_IO | IORESOURCE_BUSY }
+       {
+               .name = "reserved",
+               .start = 0x3bc,
+               .end = 0x3be,
+               .flags = IORESOURCE_IO | IORESOURCE_BUSY
+       },
+       {
+               .name = "reserved",
+               .start = 0x378,
+               .end = 0x37f,
+               .flags = IORESOURCE_IO | IORESOURCE_BUSY
+       },
+       {
+               .name = "reserved",
+               .start = 0x278,
+               .end = 0x27f,
+               .flags = IORESOURCE_IO | IORESOURCE_BUSY
+       }
 };
 
 #define lp0 io_res[0]
@@ -808,7 +838,7 @@ static int __init topology_init(void)
        int cpu;
 
        for_each_possible_cpu(cpu)
-               register_cpu(&per_cpu(cpu_data, cpu).cpu, cpu, NULL);
+               register_cpu(&per_cpu(cpu_data, cpu).cpu, cpu);
 
        return 0;
 }
diff -r c875b3d2c5e5 -r 29fd5adfdc07 arch/arm/kernel/signal.c
--- a/arch/arm/kernel/signal.c  Mon Aug 07 17:39:11 2006 -0400
+++ b/arch/arm/kernel/signal.c  Mon Aug 07 18:15:57 2006 -0400
@@ -132,18 +132,38 @@ sys_sigaction(int sig, const struct old_
        return ret;
 }
 
+#ifdef CONFIG_CRUNCH
+static int preserve_crunch_context(struct crunch_sigframe *frame)
+{
+       char kbuf[sizeof(*frame) + 8];
+       struct crunch_sigframe *kframe;
+
+       /* the crunch context must be 64 bit aligned */
+       kframe = (struct crunch_sigframe *)((unsigned long)(kbuf + 8) & ~7);
+       kframe->magic = CRUNCH_MAGIC;
+       kframe->size = CRUNCH_STORAGE_SIZE;
+       crunch_task_copy(current_thread_info(), &kframe->storage);
+       return __copy_to_user(frame, kframe, sizeof(*frame));
+}
+
+static int restore_crunch_context(struct crunch_sigframe *frame)
+{
+       char kbuf[sizeof(*frame) + 8];
+       struct crunch_sigframe *kframe;
+
+       /* the crunch context must be 64 bit aligned */
+       kframe = (struct crunch_sigframe *)((unsigned long)(kbuf + 8) & ~7);
+       if (__copy_from_user(kframe, frame, sizeof(*frame)))
+               return -1;
+       if (kframe->magic != CRUNCH_MAGIC ||
+           kframe->size != CRUNCH_STORAGE_SIZE)
+               return -1;
+       crunch_task_restore(current_thread_info(), &kframe->storage);
+       return 0;
+}
+#endif
+
 #ifdef CONFIG_IWMMXT
-
-/* iwmmxt_area is 0x98 bytes long, preceeded by 8 bytes of signature */
-#define IWMMXT_STORAGE_SIZE    (0x98 + 8)
-#define IWMMXT_MAGIC0          0x12ef842a
-#define IWMMXT_MAGIC1          0x1c07ca71
-
-struct iwmmxt_sigframe {
-       unsigned long   magic0;
-       unsigned long   magic1;
-       unsigned long   storage[0x98/4];
-};
 
 static int preserve_iwmmxt_context(struct iwmmxt_sigframe *frame)
 {
@@ -152,8 +172,8 @@ static int preserve_iwmmxt_context(struc
 
        /* the iWMMXt context must be 64 bit aligned */
        kframe = (struct iwmmxt_sigframe *)((unsigned long)(kbuf + 8) & ~7);
-       kframe->magic0 = IWMMXT_MAGIC0;
-       kframe->magic1 = IWMMXT_MAGIC1;
+       kframe->magic = IWMMXT_MAGIC;
+       kframe->size = IWMMXT_STORAGE_SIZE;
        iwmmxt_task_copy(current_thread_info(), &kframe->storage);
        return __copy_to_user(frame, kframe, sizeof(*frame));
 }
@@ -167,8 +187,8 @@ static int restore_iwmmxt_context(struct
        kframe = (struct iwmmxt_sigframe *)((unsigned long)(kbuf + 8) & ~7);
        if (__copy_from_user(kframe, frame, sizeof(*frame)))
                return -1;
-       if (kframe->magic0 != IWMMXT_MAGIC0 ||
-           kframe->magic1 != IWMMXT_MAGIC1)
+       if (kframe->magic != IWMMXT_MAGIC ||
+           kframe->size != IWMMXT_STORAGE_SIZE)
                return -1;
        iwmmxt_task_restore(current_thread_info(), &kframe->storage);
        return 0;
@@ -177,70 +197,65 @@ static int restore_iwmmxt_context(struct
 #endif
 
 /*
- * Auxiliary signal frame.  This saves stuff like FP state.
- * The layout of this structure is not part of the user ABI.
- */
-struct aux_sigframe {
-#ifdef CONFIG_IWMMXT
-       struct iwmmxt_sigframe  iwmmxt;
-#endif
-#ifdef CONFIG_VFP
-       union vfp_state         vfp;
-#endif
-};
-
-/*
  * Do a signal return; undo the signal stack.  These are aligned to 64-bit.
  */
 struct sigframe {
-       struct sigcontext sc;
-       unsigned long extramask[_NSIG_WORDS-1];
-       unsigned long retcode[2];
-       struct aux_sigframe aux __attribute__((aligned(8)));
-};
-
-struct rt_sigframe {
-       struct siginfo __user *pinfo;
-       void __user *puc;
-       struct siginfo info;
        struct ucontext uc;
        unsigned long retcode[2];
-       struct aux_sigframe aux __attribute__((aligned(8)));
 };
 
-static int
-restore_sigcontext(struct pt_regs *regs, struct sigcontext __user *sc,
-                  struct aux_sigframe __user *aux)
-{
-       int err = 0;
-
-       __get_user_error(regs->ARM_r0, &sc->arm_r0, err);
-       __get_user_error(regs->ARM_r1, &sc->arm_r1, err);
-       __get_user_error(regs->ARM_r2, &sc->arm_r2, err);
-       __get_user_error(regs->ARM_r3, &sc->arm_r3, err);
-       __get_user_error(regs->ARM_r4, &sc->arm_r4, err);
-       __get_user_error(regs->ARM_r5, &sc->arm_r5, err);
-       __get_user_error(regs->ARM_r6, &sc->arm_r6, err);
-       __get_user_error(regs->ARM_r7, &sc->arm_r7, err);
-       __get_user_error(regs->ARM_r8, &sc->arm_r8, err);
-       __get_user_error(regs->ARM_r9, &sc->arm_r9, err);
-       __get_user_error(regs->ARM_r10, &sc->arm_r10, err);
-       __get_user_error(regs->ARM_fp, &sc->arm_fp, err);
-       __get_user_error(regs->ARM_ip, &sc->arm_ip, err);
-       __get_user_error(regs->ARM_sp, &sc->arm_sp, err);
-       __get_user_error(regs->ARM_lr, &sc->arm_lr, err);
-       __get_user_error(regs->ARM_pc, &sc->arm_pc, err);
-       __get_user_error(regs->ARM_cpsr, &sc->arm_cpsr, err);
+struct rt_sigframe {
+       struct siginfo info;
+       struct sigframe sig;
+};
+
+static int restore_sigframe(struct pt_regs *regs, struct sigframe __user *sf)
+{
+       struct aux_sigframe __user *aux;
+       sigset_t set;
+       int err;
+
+       err = __copy_from_user(&set, &sf->uc.uc_sigmask, sizeof(set));
+       if (err == 0) {
+               sigdelsetmask(&set, ~_BLOCKABLE);
+               spin_lock_irq(&current->sighand->siglock);
+               current->blocked = set;
+               recalc_sigpending();
+               spin_unlock_irq(&current->sighand->siglock);
+       }
+
+       __get_user_error(regs->ARM_r0, &sf->uc.uc_mcontext.arm_r0, err);
+       __get_user_error(regs->ARM_r1, &sf->uc.uc_mcontext.arm_r1, err);
+       __get_user_error(regs->ARM_r2, &sf->uc.uc_mcontext.arm_r2, err);
+       __get_user_error(regs->ARM_r3, &sf->uc.uc_mcontext.arm_r3, err);
+       __get_user_error(regs->ARM_r4, &sf->uc.uc_mcontext.arm_r4, err);
+       __get_user_error(regs->ARM_r5, &sf->uc.uc_mcontext.arm_r5, err);
+       __get_user_error(regs->ARM_r6, &sf->uc.uc_mcontext.arm_r6, err);
+       __get_user_error(regs->ARM_r7, &sf->uc.uc_mcontext.arm_r7, err);
+       __get_user_error(regs->ARM_r8, &sf->uc.uc_mcontext.arm_r8, err);
+       __get_user_error(regs->ARM_r9, &sf->uc.uc_mcontext.arm_r9, err);
+       __get_user_error(regs->ARM_r10, &sf->uc.uc_mcontext.arm_r10, err);
+       __get_user_error(regs->ARM_fp, &sf->uc.uc_mcontext.arm_fp, err);
+       __get_user_error(regs->ARM_ip, &sf->uc.uc_mcontext.arm_ip, err);
+       __get_user_error(regs->ARM_sp, &sf->uc.uc_mcontext.arm_sp, err);
+       __get_user_error(regs->ARM_lr, &sf->uc.uc_mcontext.arm_lr, err);
+       __get_user_error(regs->ARM_pc, &sf->uc.uc_mcontext.arm_pc, err);
+       __get_user_error(regs->ARM_cpsr, &sf->uc.uc_mcontext.arm_cpsr, err);
 
        err |= !valid_user_regs(regs);
 
+       aux = (struct aux_sigframe __user *) sf->uc.uc_regspace;
+#ifdef CONFIG_CRUNCH
+       if (err == 0)
+               err |= restore_crunch_context(&aux->crunch);
+#endif
 #ifdef CONFIG_IWMMXT
        if (err == 0 && test_thread_flag(TIF_USING_IWMMXT))
                err |= restore_iwmmxt_context(&aux->iwmmxt);
 #endif
 #ifdef CONFIG_VFP
 //     if (err == 0)
-//             err |= vfp_restore_state(&aux->vfp);
+//             err |= vfp_restore_state(&sf->aux.vfp);
 #endif
 
        return err;
@@ -249,7 +264,6 @@ asmlinkage int sys_sigreturn(struct pt_r
 asmlinkage int sys_sigreturn(struct pt_regs *regs)
 {
        struct sigframe __user *frame;
-       sigset_t set;
 
        /* Always make any pending restarted system calls return -EINTR */
        current_thread_info()->restart_block.fn = do_no_restart_syscall;
@@ -266,19 +280,8 @@ asmlinkage int sys_sigreturn(struct pt_r
 
        if (!access_ok(VERIFY_READ, frame, sizeof (*frame)))
                goto badframe;
-       if (__get_user(set.sig[0], &frame->sc.oldmask)
-           || (_NSIG_WORDS > 1
-               && __copy_from_user(&set.sig[1], &frame->extramask,
-                                   sizeof(frame->extramask))))
-               goto badframe;
-
-       sigdelsetmask(&set, ~_BLOCKABLE);
-       spin_lock_irq(&current->sighand->siglock);
-       current->blocked = set;
-       recalc_sigpending();
-       spin_unlock_irq(&current->sighand->siglock);
-
-       if (restore_sigcontext(regs, &frame->sc, &frame->aux))
+
+       if (restore_sigframe(regs, frame))
                goto badframe;
 
        /* Send SIGTRAP if we're single-stepping */
@@ -297,7 +300,6 @@ asmlinkage int sys_rt_sigreturn(struct p
 asmlinkage int sys_rt_sigreturn(struct pt_regs *regs)
 {
        struct rt_sigframe __user *frame;
-       sigset_t set;
 
        /* Always make any pending restarted system calls return -EINTR */
        current_thread_info()->restart_block.fn = do_no_restart_syscall;
@@ -314,19 +316,11 @@ asmlinkage int sys_rt_sigreturn(struct p
 
        if (!access_ok(VERIFY_READ, frame, sizeof (*frame)))
                goto badframe;
-       if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set)))
+
+       if (restore_sigframe(regs, &frame->sig))
                goto badframe;
 
-       sigdelsetmask(&set, ~_BLOCKABLE);
-       spin_lock_irq(&current->sighand->siglock);
-       current->blocked = set;
-       recalc_sigpending();
-       spin_unlock_irq(&current->sighand->siglock);
-
-       if (restore_sigcontext(regs, &frame->uc.uc_mcontext, &frame->aux))
-               goto badframe;
-
-       if (do_sigaltstack(&frame->uc.uc_stack, NULL, regs->ARM_sp) == -EFAULT)
+       if (do_sigaltstack(&frame->sig.uc.uc_stack, NULL, regs->ARM_sp) == 
-EFAULT)
                goto badframe;
 
        /* Send SIGTRAP if we're single-stepping */
@@ -343,42 +337,50 @@ badframe:
 }
 
 static int
-setup_sigcontext(struct sigcontext __user *sc, struct aux_sigframe __user *aux,
-                struct pt_regs *regs, unsigned long mask)
-{
+setup_sigframe(struct sigframe __user *sf, struct pt_regs *regs, sigset_t *set)
+{
+       struct aux_sigframe __user *aux;
        int err = 0;
 
-       __put_user_error(regs->ARM_r0, &sc->arm_r0, err);
-       __put_user_error(regs->ARM_r1, &sc->arm_r1, err);
-       __put_user_error(regs->ARM_r2, &sc->arm_r2, err);
-       __put_user_error(regs->ARM_r3, &sc->arm_r3, err);
-       __put_user_error(regs->ARM_r4, &sc->arm_r4, err);
-       __put_user_error(regs->ARM_r5, &sc->arm_r5, err);
-       __put_user_error(regs->ARM_r6, &sc->arm_r6, err);
-       __put_user_error(regs->ARM_r7, &sc->arm_r7, err);
-       __put_user_error(regs->ARM_r8, &sc->arm_r8, err);
-       __put_user_error(regs->ARM_r9, &sc->arm_r9, err);
-       __put_user_error(regs->ARM_r10, &sc->arm_r10, err);
-       __put_user_error(regs->ARM_fp, &sc->arm_fp, err);
-       __put_user_error(regs->ARM_ip, &sc->arm_ip, err);
-       __put_user_error(regs->ARM_sp, &sc->arm_sp, err);
-       __put_user_error(regs->ARM_lr, &sc->arm_lr, err);
-       __put_user_error(regs->ARM_pc, &sc->arm_pc, err);
-       __put_user_error(regs->ARM_cpsr, &sc->arm_cpsr, err);
-
-       __put_user_error(current->thread.trap_no, &sc->trap_no, err);
-       __put_user_error(current->thread.error_code, &sc->error_code, err);
-       __put_user_error(current->thread.address, &sc->fault_address, err);
-       __put_user_error(mask, &sc->oldmask, err);
-
+       __put_user_error(regs->ARM_r0, &sf->uc.uc_mcontext.arm_r0, err);
+       __put_user_error(regs->ARM_r1, &sf->uc.uc_mcontext.arm_r1, err);
+       __put_user_error(regs->ARM_r2, &sf->uc.uc_mcontext.arm_r2, err);
+       __put_user_error(regs->ARM_r3, &sf->uc.uc_mcontext.arm_r3, err);
+       __put_user_error(regs->ARM_r4, &sf->uc.uc_mcontext.arm_r4, err);
+       __put_user_error(regs->ARM_r5, &sf->uc.uc_mcontext.arm_r5, err);
+       __put_user_error(regs->ARM_r6, &sf->uc.uc_mcontext.arm_r6, err);
+       __put_user_error(regs->ARM_r7, &sf->uc.uc_mcontext.arm_r7, err);
+       __put_user_error(regs->ARM_r8, &sf->uc.uc_mcontext.arm_r8, err);
+       __put_user_error(regs->ARM_r9, &sf->uc.uc_mcontext.arm_r9, err);
+       __put_user_error(regs->ARM_r10, &sf->uc.uc_mcontext.arm_r10, err);
+       __put_user_error(regs->ARM_fp, &sf->uc.uc_mcontext.arm_fp, err);
+       __put_user_error(regs->ARM_ip, &sf->uc.uc_mcontext.arm_ip, err);
+       __put_user_error(regs->ARM_sp, &sf->uc.uc_mcontext.arm_sp, err);
+       __put_user_error(regs->ARM_lr, &sf->uc.uc_mcontext.arm_lr, err);
+       __put_user_error(regs->ARM_pc, &sf->uc.uc_mcontext.arm_pc, err);
+       __put_user_error(regs->ARM_cpsr, &sf->uc.uc_mcontext.arm_cpsr, err);
+
+       __put_user_error(current->thread.trap_no, &sf->uc.uc_mcontext.trap_no, 
err);
+       __put_user_error(current->thread.error_code, 
&sf->uc.uc_mcontext.error_code, err);
+       __put_user_error(current->thread.address, 
&sf->uc.uc_mcontext.fault_address, err);
+       __put_user_error(set->sig[0], &sf->uc.uc_mcontext.oldmask, err);
+
+       err |= __copy_to_user(&sf->uc.uc_sigmask, set, sizeof(*set));
+
+       aux = (struct aux_sigframe __user *) sf->uc.uc_regspace;
+#ifdef CONFIG_CRUNCH
+       if (err == 0)
+               err |= preserve_crunch_context(&aux->crunch);
+#endif
 #ifdef CONFIG_IWMMXT
        if (err == 0 && test_thread_flag(TIF_USING_IWMMXT))
                err |= preserve_iwmmxt_context(&aux->iwmmxt);
 #endif
 #ifdef CONFIG_VFP
 //     if (err == 0)
-//             err |= vfp_save_state(&aux->vfp);
-#endif
+//             err |= vfp_save_state(&sf->aux.vfp);
+#endif
+       __put_user_error(0, &aux->end_magic, err);
 
        return err;
 }
@@ -487,13 +489,12 @@ setup_frame(int usig, struct k_sigaction
        if (!frame)
                return 1;
 
-       err |= setup_sigcontext(&frame->sc, &frame->aux, regs, set->sig[0]);
-
-       if (_NSIG_WORDS > 1) {
-               err |= __copy_to_user(frame->extramask, &set->sig[1],
-                                     sizeof(frame->extramask));
-       }
-
+       /*
+        * Set uc.uc_flags to a value which sc.trap_no would never have.
+        */
+       __put_user_error(0x5ac3c35a, &frame->uc.uc_flags, err);
+
+       err |= setup_sigframe(frame, regs, set);
        if (err == 0)
                err = setup_return(regs, ka, frame->retcode, frame, usig);
 
@@ -511,25 +512,20 @@ setup_rt_frame(int usig, struct k_sigact
        if (!frame)
                return 1;
 
-       __put_user_error(&frame->info, &frame->pinfo, err);
-       __put_user_error(&frame->uc, &frame->puc, err);
        err |= copy_siginfo_to_user(&frame->info, info);
 
-       __put_user_error(0, &frame->uc.uc_flags, err);
-       __put_user_error(NULL, &frame->uc.uc_link, err);
+       __put_user_error(0, &frame->sig.uc.uc_flags, err);
+       __put_user_error(NULL, &frame->sig.uc.uc_link, err);
 
        memset(&stack, 0, sizeof(stack));
        stack.ss_sp = (void __user *)current->sas_ss_sp;
        stack.ss_flags = sas_ss_flags(regs->ARM_sp);
        stack.ss_size = current->sas_ss_size;
-       err |= __copy_to_user(&frame->uc.uc_stack, &stack, sizeof(stack));
-
-       err |= setup_sigcontext(&frame->uc.uc_mcontext, &frame->aux,
-                               regs, set->sig[0]);
-       err |= __copy_to_user(&frame->uc.uc_sigmask, set, sizeof(*set));
-
+       err |= __copy_to_user(&frame->sig.uc.uc_stack, &stack, sizeof(stack));
+
+       err |= setup_sigframe(&frame->sig, regs, set);
        if (err == 0)
-               err = setup_return(regs, ka, frame->retcode, frame, usig);
+               err = setup_return(regs, ka, frame->sig.retcode, frame, usig);
 
        if (err == 0) {
                /*
@@ -538,7 +534,7 @@ setup_rt_frame(int usig, struct k_sigact
                 *   -- Peter Maydell <pmaydell@xxxxxxxxxxxxxxxxxxxxxx> 
2000-12-06
                 */
                regs->ARM_r1 = (unsigned long)&frame->info;
-               regs->ARM_r2 = (unsigned long)&frame->uc;
+               regs->ARM_r2 = (unsigned long)&frame->sig.uc;
        }
 
        return err;
@@ -687,7 +683,7 @@ static int do_signal(sigset_t *oldset, s
                                 * syscall solves that issue and works for
                                 * all those cases.
                                 */
-                               swival = swival - __NR_SYSCAll_BASE + 
__NR_OABI_SYSCALL_BASE;
+                               swival = swival - __NR_SYSCALL_BASE + 
__NR_OABI_SYSCALL_BASE;
 
                                put_user(regs->ARM_pc, &usp[0]);
                                /* swi __NR_restart_syscall */
diff -r c875b3d2c5e5 -r 29fd5adfdc07 arch/arm/kernel/vmlinux.lds.S
--- a/arch/arm/kernel/vmlinux.lds.S     Mon Aug 07 17:39:11 2006 -0400
+++ b/arch/arm/kernel/vmlinux.lds.S     Mon Aug 07 18:15:57 2006 -0400
@@ -80,6 +80,10 @@ SECTIONS
                *(.exit.text)
                *(.exit.data)
                *(.exitcall.exit)
+#ifndef CONFIG_MMU
+               *(.fixup)
+               *(__ex_table)
+#endif
        }
 
        .text : {                       /* Real text segment            */
@@ -87,7 +91,9 @@ SECTIONS
                        *(.text)
                        SCHED_TEXT
                        LOCK_TEXT
+#ifdef CONFIG_MMU
                        *(.fixup)
+#endif
                        *(.gnu.warning)
                        *(.rodata)
                        *(.rodata.*)
@@ -142,7 +148,9 @@ SECTIONS
                 */
                . = ALIGN(32);
                __start___ex_table = .;
+#ifdef CONFIG_MMU
                *(__ex_table)
+#endif
                __stop___ex_table = .;
 
                /*
diff -r c875b3d2c5e5 -r 29fd5adfdc07 arch/arm/lib/Makefile
--- a/arch/arm/lib/Makefile     Mon Aug 07 17:39:11 2006 -0400
+++ b/arch/arm/lib/Makefile     Mon Aug 07 18:15:57 2006 -0400
@@ -6,27 +6,30 @@
 
 lib-y          := backtrace.o changebit.o csumipv6.o csumpartial.o   \
                   csumpartialcopy.o csumpartialcopyuser.o clearbit.o \
-                  copy_page.o delay.o findbit.o memchr.o memcpy.o    \
+                  delay.o findbit.o memchr.o memcpy.o                \
                   memmove.o memset.o memzero.o setbit.o              \
                   strncpy_from_user.o strnlen_user.o                 \
                   strchr.o strrchr.o                                 \
                   testchangebit.o testclearbit.o testsetbit.o        \
-                  getuser.o putuser.o clear_user.o                   \
                   ashldi3.o ashrdi3.o lshrdi3.o muldi3.o             \
                   ucmpdi2.o lib1funcs.o div64.o sha1.o               \
                   io-readsb.o io-writesb.o io-readsl.o io-writesl.o
 
+mmu-y  := clear_user.o copy_page.o getuser.o putuser.o
+
 # the code in uaccess.S is not preemption safe and
 # probably faster on ARMv3 only
 ifeq ($(CONFIG_PREEMPT),y)
-  lib-y        += copy_from_user.o copy_to_user.o
+  mmu-y        += copy_from_user.o copy_to_user.o
 else
 ifneq ($(CONFIG_CPU_32v3),y)
-  lib-y        += copy_from_user.o copy_to_user.o
+  mmu-y        += copy_from_user.o copy_to_user.o
 else
-  lib-y        += uaccess.o
+  mmu-y        += uaccess.o
 endif
 endif
+
+lib-$(CONFIG_MMU) += $(mmu-y)
 
 ifeq ($(CONFIG_CPU_32v3),y)
   lib-y        += io-readsw-armv3.o io-writesw-armv3.o
diff -r c875b3d2c5e5 -r 29fd5adfdc07 arch/arm/lib/backtrace.S
--- a/arch/arm/lib/backtrace.S  Mon Aug 07 17:39:11 2006 -0400
+++ b/arch/arm/lib/backtrace.S  Mon Aug 07 18:15:57 2006 -0400
@@ -41,7 +41,7 @@ ENTRY(c_backtrace)
                movne   r0, #0
                movs    frame, r0
 1:             moveq   r0, #-2
-               LOADREGS(eqfd, sp!, {r4 - r8, pc})
+               ldmeqfd sp!, {r4 - r8, pc}
 
 2:             stmfd   sp!, {pc}               @ calculate offset of PC in 
STMIA instruction
                ldr     r0, [sp], #4
@@ -85,7 +85,7 @@ 1006:         ldr     r1, [save, #4]          @ Get 'stmia 
                 * A zero next framepointer means we're done.
                 */
                teq     next, #0
-               LOADREGS(eqfd, sp!, {r4 - r8, pc})
+               ldmeqfd sp!, {r4 - r8, pc}
 
                /*
                 * The next framepointer must be above the
@@ -97,16 +97,13 @@ 1006:               ldr     r1, [save, #4]          @ Get 
'stmia 
                b       1007f
 
 /*
- * Fixup for LDMDB
+ * Fixup for LDMDB.  Note that this must not be in the fixup section.
  */
-               .section .fixup,"ax"
-               .align  0
 1007:          ldr     r0, =.Lbad
                mov     r1, frame
                bl      printk
-               LOADREGS(fd, sp!, {r4 - r8, pc})
+               ldmfd   sp!, {r4 - r8, pc}
                .ltorg
-               .previous
                
                .section __ex_table,"a"
                .align  3
@@ -145,7 +142,7 @@ 2:          subs    reg, reg, #1
                adrne   r0, .Lcr
                blne    printk
                mov     r0, stack
-               LOADREGS(fd, sp!, {instr, reg, stack, r7, r8, pc})
+               ldmfd   sp!, {instr, reg, stack, r7, r8, pc}
 
 .Lfp:          .asciz  " r%d = %08X%c"
 .Lcr:          .asciz  "\n"
diff -r c875b3d2c5e5 -r 29fd5adfdc07 arch/arm/lib/clear_user.S
--- a/arch/arm/lib/clear_user.S Mon Aug 07 17:39:11 2006 -0400
+++ b/arch/arm/lib/clear_user.S Mon Aug 07 18:15:57 2006 -0400
@@ -12,13 +12,13 @@
 
                .text
 
-/* Prototype: int __arch_clear_user(void *addr, size_t sz)
+/* Prototype: int __clear_user(void *addr, size_t sz)
  * Purpose  : clear some user memory
  * Params   : addr - user memory address to clear
  *          : sz   - number of bytes to clear
  * Returns  : number of bytes NOT cleared
  */
-ENTRY(__arch_clear_user)
+ENTRY(__clear_user)
                stmfd   sp!, {r1, lr}
                mov     r2, #0
                cmp     r1, #4
@@ -43,10 +43,10 @@ USER(               strnebt r2, [r0], #1)
                tst     r1, #1                  @ x1 x0 x1 x0 x1 x0 x1
 USER(          strnebt r2, [r0], #1)
                mov     r0, #0
-               LOADREGS(fd,sp!, {r1, pc})
+               ldmfd   sp!, {r1, pc}
 
                .section .fixup,"ax"
                .align  0
-9001:          LOADREGS(fd,sp!, {r0, pc})
+9001:          ldmfd   sp!, {r0, pc}
                .previous
 
diff -r c875b3d2c5e5 -r 29fd5adfdc07 arch/arm/lib/copy_from_user.S
--- a/arch/arm/lib/copy_from_user.S     Mon Aug 07 17:39:11 2006 -0400
+++ b/arch/arm/lib/copy_from_user.S     Mon Aug 07 18:15:57 2006 -0400
@@ -16,7 +16,7 @@
 /*
  * Prototype:
  *
- *     size_t __arch_copy_from_user(void *to, const void *from, size_t n)
+ *     size_t __copy_from_user(void *to, const void *from, size_t n)
  *
  * Purpose:
  *
@@ -83,7 +83,7 @@ 100:  ldr\cond\()bt \reg, [\ptr], #1
 
        .text
 
-ENTRY(__arch_copy_from_user)
+ENTRY(__copy_from_user)
 
 #include "copy_template.S"
 
diff -r c875b3d2c5e5 -r 29fd5adfdc07 arch/arm/lib/copy_page.S
--- a/arch/arm/lib/copy_page.S  Mon Aug 07 17:39:11 2006 -0400
+++ b/arch/arm/lib/copy_page.S  Mon Aug 07 18:15:57 2006 -0400
@@ -43,4 +43,4 @@ 2:            stmia   r0!, {r3, r4, ip, lr}           @       
4
                bgt     1b                              @       1
        PLD(    ldmeqia r1!, {r3, r4, ip, lr}   )
        PLD(    beq     2b                      )
-               LOADREGS(fd, sp!, {r4, pc})             @       3
+               ldmfd   sp!, {r4, pc}                   @       3
diff -r c875b3d2c5e5 -r 29fd5adfdc07 arch/arm/lib/copy_to_user.S
--- a/arch/arm/lib/copy_to_user.S       Mon Aug 07 17:39:11 2006 -0400
+++ b/arch/arm/lib/copy_to_user.S       Mon Aug 07 18:15:57 2006 -0400
@@ -16,7 +16,7 @@
 /*
  * Prototype:
  *
- *     size_t __arch_copy_to_user(void *to, const void *from, size_t n)
+ *     size_t __copy_to_user(void *to, const void *from, size_t n)
  *
  * Purpose:
  *
@@ -86,7 +86,7 @@ 100:  str\cond\()bt \reg, [\ptr], #1
 
        .text
 
-ENTRY(__arch_copy_to_user)
+ENTRY(__copy_to_user)
 
 #include "copy_template.S"
 
diff -r c875b3d2c5e5 -r 29fd5adfdc07 arch/arm/lib/csumipv6.S
--- a/arch/arm/lib/csumipv6.S   Mon Aug 07 17:39:11 2006 -0400
+++ b/arch/arm/lib/csumipv6.S   Mon Aug 07 18:15:57 2006 -0400
@@ -28,5 +28,5 @@ ENTRY(__csum_ipv6_magic)
                adcs    r0, r0, r3
                adcs    r0, r0, r2
                adcs    r0, r0, #0
-               LOADREGS(fd, sp!, {pc})
+               ldmfd   sp!, {pc}
 
diff -r c875b3d2c5e5 -r 29fd5adfdc07 arch/arm/lib/delay.S
--- a/arch/arm/lib/delay.S      Mon Aug 07 17:39:11 2006 -0400
+++ b/arch/arm/lib/delay.S      Mon Aug 07 18:15:57 2006 -0400
@@ -31,7 +31,7 @@ ENTRY(__const_udelay)                         @ 0 <= r0 <= 0x
                mov     r2, r2, lsr #10         @ max = 0x00007fff
                mul     r0, r2, r0              @ max = 2^32-1
                movs    r0, r0, lsr #6
-               RETINSTR(moveq,pc,lr)
+               moveq   pc, lr
 
 /*
  * loops = r0 * HZ * loops_per_jiffy / 1000000
@@ -43,20 +43,20 @@ ENTRY(__delay)
 ENTRY(__delay)
                subs    r0, r0, #1
 #if 0
-               RETINSTR(movls,pc,lr)
+               movls   pc, lr
                subs    r0, r0, #1
-               RETINSTR(movls,pc,lr)
+               movls   pc, lr
                subs    r0, r0, #1
-               RETINSTR(movls,pc,lr)
+               movls   pc, lr
                subs    r0, r0, #1
-               RETINSTR(movls,pc,lr)
+               movls   pc, lr
                subs    r0, r0, #1
-               RETINSTR(movls,pc,lr)
+               movls   pc, lr
                subs    r0, r0, #1
-               RETINSTR(movls,pc,lr)
+               movls   pc, lr
                subs    r0, r0, #1
-               RETINSTR(movls,pc,lr)
+               movls   pc, lr
                subs    r0, r0, #1
 #endif
                bhi     __delay
-               RETINSTR(mov,pc,lr)
+               mov     pc, lr
diff -r c875b3d2c5e5 -r 29fd5adfdc07 arch/arm/lib/ecard.S
--- a/arch/arm/lib/ecard.S      Mon Aug 07 17:39:11 2006 -0400
+++ b/arch/arm/lib/ecard.S      Mon Aug 07 18:15:57 2006 -0400
@@ -29,7 +29,7 @@ ENTRY(ecard_loader_read)
                CPSR2SPSR(r0)
                mov     lr, pc
                mov     pc, r2
-               LOADREGS(fd, sp!, {r4 - r12, pc})
+               ldmfd   sp!, {r4 - r12, pc}
 
 @ Purpose: call an expansion card loader to reset the card
 @ Proto  : void read_loader(int card_base, char *loader);
@@ -41,5 +41,5 @@ ENTRY(ecard_loader_reset)
                CPSR2SPSR(r0)
                mov     lr, pc
                add     pc, r1, #8
-               LOADREGS(fd, sp!, {r4 - r12, pc})
+               ldmfd   sp!, {r4 - r12, pc}
 
diff -r c875b3d2c5e5 -r 29fd5adfdc07 arch/arm/lib/findbit.S
--- a/arch/arm/lib/findbit.S    Mon Aug 07 17:39:11 2006 -0400
+++ b/arch/arm/lib/findbit.S    Mon Aug 07 18:15:57 2006 -0400
@@ -32,7 +32,7 @@ 2:            cmp     r2, r1                  @ any more?
 2:             cmp     r2, r1                  @ any more?
                blo     1b
 3:             mov     r0, r1                  @ no free bits
-               RETINSTR(mov,pc,lr)
+               mov     pc, lr
 
 /*
  * Purpose  : Find next 'zero' bit
@@ -66,7 +66,7 @@ 2:            cmp     r2, r1                  @ any more?
 2:             cmp     r2, r1                  @ any more?
                blo     1b
 3:             mov     r0, r1                  @ no free bits
-               RETINSTR(mov,pc,lr)
+               mov     pc, lr
 
 /*
  * Purpose  : Find next 'one' bit
@@ -98,7 +98,7 @@ 2:            cmp     r2, r1                  @ any more?
 2:             cmp     r2, r1                  @ any more?
                blo     1b
 3:             mov     r0, r1                  @ no free bits
-               RETINSTR(mov,pc,lr)
+               mov     pc, lr
 
 ENTRY(_find_next_zero_bit_be)
                teq     r1, #0
@@ -126,7 +126,7 @@ 2:          cmp     r2, r1                  @ any more?
 2:             cmp     r2, r1                  @ any more?
                blo     1b
 3:             mov     r0, r1                  @ no free bits
-               RETINSTR(mov,pc,lr)
+               mov     pc, lr
 
 ENTRY(_find_next_bit_be)
                teq     r1, #0
@@ -164,5 +164,5 @@ ENTRY(_find_next_bit_be)
                addeq   r2, r2, #1
                mov     r0, r2
 #endif
-               RETINSTR(mov,pc,lr)
+               mov     pc, lr
 
diff -r c875b3d2c5e5 -r 29fd5adfdc07 arch/arm/lib/io-readsb.S
--- a/arch/arm/lib/io-readsb.S  Mon Aug 07 17:39:11 2006 -0400
+++ b/arch/arm/lib/io-readsb.S  Mon Aug 07 18:15:57 2006 -0400
@@ -72,7 +72,7 @@ ENTRY(__raw_readsb)
                bpl     .Linsb_16_lp
 
                tst     r2, #15
-               LOADREGS(eqfd, sp!, {r4 - r6, pc})
+               ldmeqfd sp!, {r4 - r6, pc}
 
 .Linsb_no_16:  tst     r2, #8
                beq     .Linsb_no_8
@@ -109,7 +109,7 @@ ENTRY(__raw_readsb)
                str     r3, [r1], #4
 
 .Linsb_no_4:   ands    r2, r2, #3
-               LOADREGS(eqfd, sp!, {r4 - r6, pc})
+               ldmeqfd sp!, {r4 - r6, pc}
 
                cmp     r2, #2
                ldrb    r3, [r0]
@@ -119,4 +119,4 @@ ENTRY(__raw_readsb)
                ldrgtb  r3, [r0]
                strgtb  r3, [r1]
 
-               LOADREGS(fd, sp!, {r4 - r6, pc})
+               ldmfd   sp!, {r4 - r6, pc}
diff -r c875b3d2c5e5 -r 29fd5adfdc07 arch/arm/lib/io-readsw-armv3.S
--- a/arch/arm/lib/io-readsw-armv3.S    Mon Aug 07 17:39:11 2006 -0400
+++ b/arch/arm/lib/io-readsw-armv3.S    Mon Aug 07 18:15:57 2006 -0400
@@ -28,7 +28,7 @@
                strb    r3, [r1], #1
 
                subs    r2, r2, #1
-               RETINSTR(moveq, pc, lr)
+               moveq   pc, lr
 
 ENTRY(__raw_readsw)
                teq     r2, #0          @ do we have to check for the zero len?
@@ -69,7 +69,7 @@ ENTRY(__raw_readsw)
                bpl     .Linsw_8_lp
 
                tst     r2, #7
-               LOADREGS(eqfd, sp!, {r4, r5, r6, pc})
+               ldmeqfd sp!, {r4, r5, r6, pc}
 
 .Lno_insw_8:   tst     r2, #4
                beq     .Lno_insw_4
@@ -102,6 +102,6 @@ ENTRY(__raw_readsw)
                movne   r3, r3, lsr #8
                strneb  r3, [r1]
 
-               LOADREGS(fd, sp!, {r4, r5, r6, pc})
+               ldmfd   sp!, {r4, r5, r6, pc}
 
 
diff -r c875b3d2c5e5 -r 29fd5adfdc07 arch/arm/lib/io-writesb.S
--- a/arch/arm/lib/io-writesb.S Mon Aug 07 17:39:11 2006 -0400
+++ b/arch/arm/lib/io-writesb.S Mon Aug 07 18:15:57 2006 -0400
@@ -64,7 +64,7 @@ ENTRY(__raw_writesb)
                bpl     .Loutsb_16_lp
 
                tst     r2, #15
-               LOADREGS(eqfd, sp!, {r4, r5, pc})
+               ldmeqfd sp!, {r4, r5, pc}
 
 .Loutsb_no_16: tst     r2, #8
                beq     .Loutsb_no_8
@@ -80,7 +80,7 @@ ENTRY(__raw_writesb)
                outword r3
 
 .Loutsb_no_4:  ands    r2, r2, #3
-               LOADREGS(eqfd, sp!, {r4, r5, pc})
+               ldmeqfd sp!, {r4, r5, pc}
 
                cmp     r2, #2
                ldrb    r3, [r1], #1
@@ -90,4 +90,4 @@ ENTRY(__raw_writesb)
                ldrgtb  r3, [r1]
                strgtb  r3, [r0]
 
-               LOADREGS(fd, sp!, {r4, r5, pc})
+               ldmfd   sp!, {r4, r5, pc}
diff -r c875b3d2c5e5 -r 29fd5adfdc07 arch/arm/lib/io-writesw-armv3.S
--- a/arch/arm/lib/io-writesw-armv3.S   Mon Aug 07 17:39:11 2006 -0400
+++ b/arch/arm/lib/io-writesw-armv3.S   Mon Aug 07 18:15:57 2006 -0400
@@ -29,7 +29,7 @@
                orr     r3, r3, r3, lsl #16
                str     r3, [r0]
                subs    r2, r2, #1
-               RETINSTR(moveq, pc, lr)
+               moveq   pc, lr
 
 ENTRY(__raw_writesw)
                teq     r2, #0          @ do we have to check for the zero len?
@@ -80,7 +80,7 @@ ENTRY(__raw_writesw)
                bpl     .Loutsw_8_lp
 
                tst     r2, #7
-               LOADREGS(eqfd, sp!, {r4, r5, r6, pc})
+               ldmeqfd sp!, {r4, r5, r6, pc}
 
 .Lno_outsw_8:  tst     r2, #4
                beq     .Lno_outsw_4
@@ -124,4 +124,4 @@ ENTRY(__raw_writesw)
                orrne   ip, ip, ip, lsr #16
                strne   ip, [r0]
 
-               LOADREGS(fd, sp!, {r4, r5, r6, pc})
+               ldmfd   sp!, {r4, r5, r6, pc}
diff -r c875b3d2c5e5 -r 29fd5adfdc07 arch/arm/lib/memchr.S
--- a/arch/arm/lib/memchr.S     Mon Aug 07 17:39:11 2006 -0400
+++ b/arch/arm/lib/memchr.S     Mon Aug 07 18:15:57 2006 -0400
@@ -22,4 +22,4 @@ 1:    subs    r2, r2, #1
        bne     1b
        sub     r0, r0, #1
 2:     movne   r0, #0
-       RETINSTR(mov,pc,lr)
+       mov     pc, lr
diff -r c875b3d2c5e5 -r 29fd5adfdc07 arch/arm/lib/memset.S
--- a/arch/arm/lib/memset.S     Mon Aug 07 17:39:11 2006 -0400
+++ b/arch/arm/lib/memset.S     Mon Aug 07 18:15:57 2006 -0400
@@ -53,7 +53,7 @@ 2:    subs    r2, r2, #64
        stmgeia r0!, {r1, r3, ip, lr}
        stmgeia r0!, {r1, r3, ip, lr}
        bgt     2b
-       LOADREGS(eqfd, sp!, {pc})       @ Now <64 bytes to go.
+       ldmeqfd sp!, {pc}               @ Now <64 bytes to go.
 /*
  * No need to correct the count; we're only testing bits from now on
  */
@@ -77,4 +77,4 @@ 5:    tst     r2, #2
        strneb  r1, [r0], #1
        tst     r2, #1
        strneb  r1, [r0], #1
-       RETINSTR(mov,pc,lr)
+       mov     pc, lr
diff -r c875b3d2c5e5 -r 29fd5adfdc07 arch/arm/lib/memzero.S
--- a/arch/arm/lib/memzero.S    Mon Aug 07 17:39:11 2006 -0400
+++ b/arch/arm/lib/memzero.S    Mon Aug 07 18:15:57 2006 -0400
@@ -53,7 +53,7 @@ 3:    subs    r1, r1, #64             @ 1 write 32 bytes 
        stmgeia r0!, {r2, r3, ip, lr}   @ 4
        stmgeia r0!, {r2, r3, ip, lr}   @ 4
        bgt     3b                      @ 1
-       LOADREGS(eqfd, sp!, {pc})       @ 1/2 quick exit
+       ldmeqfd sp!, {pc}               @ 1/2 quick exit
 /*
  * No need to correct the count; we're only testing bits from now on
  */
@@ -77,4 +77,4 @@ 5:    tst     r1, #2                  @ 1 2 bytes or more?
        strneb  r2, [r0], #1            @ 1
        tst     r1, #1                  @ 1 a byte left over
        strneb  r2, [r0], #1            @ 1
-       RETINSTR(mov,pc,lr)             @ 1
+       mov     pc, lr                  @ 1
diff -r c875b3d2c5e5 -r 29fd5adfdc07 arch/arm/lib/strchr.S
--- a/arch/arm/lib/strchr.S     Mon Aug 07 17:39:11 2006 -0400
+++ b/arch/arm/lib/strchr.S     Mon Aug 07 18:15:57 2006 -0400
@@ -23,4 +23,4 @@ 1:            ldrb    r2, [r0], #1
                teq     r2, r1
                movne   r0, #0
                subeq   r0, r0, #1
-               RETINSTR(mov,pc,lr)
+               mov     pc, lr
diff -r c875b3d2c5e5 -r 29fd5adfdc07 arch/arm/lib/strncpy_from_user.S
--- a/arch/arm/lib/strncpy_from_user.S  Mon Aug 07 17:39:11 2006 -0400
+++ b/arch/arm/lib/strncpy_from_user.S  Mon Aug 07 18:15:57 2006 -0400
@@ -20,8 +20,7 @@
  * returns the number of characters copied (strlen of copied string),
  *  -EFAULT on exception, or "len" if we fill the whole buffer
  */
-ENTRY(__arch_strncpy_from_user)
-       save_lr
+ENTRY(__strncpy_from_user)
        mov     ip, r1
 1:     subs    r2, r2, #1
 USER(  ldrplbt r3, [r1], #1)
@@ -31,13 +30,13 @@ USER(       ldrplbt r3, [r1], #1)
        bne     1b
        sub     r1, r1, #1      @ take NUL character out of count
 2:     sub     r0, r1, ip
-       restore_pc
+       mov     pc, lr
 
        .section .fixup,"ax"
        .align  0
 9001:  mov     r3, #0
        strb    r3, [r0, #0]    @ null terminate
        mov     r0, #-EFAULT
-       restore_pc
+       mov     pc, lr
        .previous
 
diff -r c875b3d2c5e5 -r 29fd5adfdc07 arch/arm/lib/strnlen_user.S
--- a/arch/arm/lib/strnlen_user.S       Mon Aug 07 17:39:11 2006 -0400
+++ b/arch/arm/lib/strnlen_user.S       Mon Aug 07 18:15:57 2006 -0400
@@ -14,14 +14,13 @@
        .text
        .align  5
 
-/* Prototype: unsigned long __arch_strnlen_user(const char *str, long n)
+/* Prototype: unsigned long __strnlen_user(const char *str, long n)
  * Purpose  : get length of a string in user memory
  * Params   : str - address of string in user memory
  * Returns  : length of string *including terminator*
  *           or zero on exception, or n + 1 if too long
  */
-ENTRY(__arch_strnlen_user)
-       save_lr
+ENTRY(__strnlen_user)
        mov     r2, r0
 1:
 USER(  ldrbt   r3, [r0], #1)
@@ -31,10 +30,10 @@ USER(       ldrbt   r3, [r0], #1)
        bne     1b
        add     r0, r0, #1
 2:     sub     r0, r0, r2
-       restore_pc
+       mov     pc, lr
 
        .section .fixup,"ax"
        .align  0
 9001:  mov     r0, #0
-       restore_pc
+       mov     pc, lr
        .previous
diff -r c875b3d2c5e5 -r 29fd5adfdc07 arch/arm/lib/strrchr.S
--- a/arch/arm/lib/strrchr.S    Mon Aug 07 17:39:11 2006 -0400
+++ b/arch/arm/lib/strrchr.S    Mon Aug 07 18:15:57 2006 -0400
@@ -22,4 +22,4 @@ 1:            ldrb    r2, [r0], #1
                teq     r2, #0
                bne     1b
                mov     r0, r3
-               RETINSTR(mov,pc,lr)
+               mov     pc, lr
diff -r c875b3d2c5e5 -r 29fd5adfdc07 arch/arm/lib/uaccess.S
--- a/arch/arm/lib/uaccess.S    Mon Aug 07 17:39:11 2006 -0400
+++ b/arch/arm/lib/uaccess.S    Mon Aug 07 18:15:57 2006 -0400
@@ -19,7 +19,7 @@
 
 #define PAGE_SHIFT 12
 
-/* Prototype: int __arch_copy_to_user(void *to, const char *from, size_t n)
+/* Prototype: int __copy_to_user(void *to, const char *from, size_t n)
  * Purpose  : copy a block to user memory from kernel memory
  * Params   : to   - user memory
  *          : from - kernel memory
@@ -39,7 +39,7 @@ USER(         strgtbt r3, [r0], #1)                   @ May 
fau
                sub     r2, r2, ip
                b       .Lc2u_dest_aligned
 
-ENTRY(__arch_copy_to_user)
+ENTRY(__copy_to_user)
                stmfd   sp!, {r2, r4 - r7, lr}
                cmp     r2, #4
                blt     .Lc2u_not_enough
@@ -105,7 +105,7 @@ USER(               strgtbt r3, [r0], #1)                   
@ May fau
                movs    ip, r2
                bne     .Lc2u_nowords
 .Lc2u_finished:        mov     r0, #0
-               LOADREGS(fd,sp!,{r2, r4 - r7, pc})
+               ldmfd   sp!, {r2, r4 - r7, pc}
 
 .Lc2u_src_not_aligned:
                bic     r1, r1, #3
@@ -280,10 +280,10 @@ USER(             strgtbt r3, [r0], #1)                   
@ May fau
 
                .section .fixup,"ax"
                .align  0
-9001:          LOADREGS(fd,sp!, {r0, r4 - r7, pc})
+9001:          ldmfd   sp!, {r0, r4 - r7, pc}
                .previous
 
-/* Prototype: unsigned long __arch_copy_from_user(void *to,const void 
*from,unsigned long n);
+/* Prototype: unsigned long __copy_from_user(void *to,const void 
*from,unsigned long n);
  * Purpose  : copy a block from user memory to kernel memory
  * Params   : to   - kernel memory
  *          : from - user memory
@@ -302,7 +302,7 @@ USER(               ldrgtbt r3, [r1], #1)                   
@ May fau
                sub     r2, r2, ip
                b       .Lcfu_dest_aligned
 
-ENTRY(__arch_copy_from_user)
+ENTRY(__copy_from_user)
                stmfd   sp!, {r0, r2, r4 - r7, lr}
                cmp     r2, #4
                blt     .Lcfu_not_enough
@@ -369,7 +369,7 @@ USER(               ldrgtbt r3, [r1], #1)                   
@ May fau
                bne     .Lcfu_nowords
 .Lcfu_finished:        mov     r0, #0
                add     sp, sp, #8
-               LOADREGS(fd,sp!,{r4 - r7, pc})
+               ldmfd   sp!, {r4 - r7, pc}
 
 .Lcfu_src_not_aligned:
                bic     r1, r1, #3
@@ -556,6 +556,6 @@ 9001:               ldr     r2, [sp], #4                    
@ void *to
                movne   r1, r4
                blne    __memzero
                mov     r0, r4
-               LOADREGS(fd,sp!, {r4 - r7, pc})
+               ldmfd   sp!, {r4 - r7, pc}
                .previous
 
diff -r c875b3d2c5e5 -r 29fd5adfdc07 arch/arm/mach-at91rm9200/Kconfig
--- a/arch/arm/mach-at91rm9200/Kconfig  Mon Aug 07 17:39:11 2006 -0400
+++ b/arch/arm/mach-at91rm9200/Kconfig  Mon Aug 07 18:15:57 2006 -0400
@@ -3,6 +3,12 @@ menu "AT91RM9200 Implementations"
 menu "AT91RM9200 Implementations"
 
 comment "AT91RM9200 Board Type"
+
+config MACH_ONEARM
+       bool "Ajeco 1ARM Single Board Computer"
+       depends on ARCH_AT91RM9200
+       help
+         Select this if you are using Ajeco's 1ARM Single Board Computer
 
 config ARCH_AT91RM9200DK
        bool "Atmel AT91RM9200-DK Development board"
diff -r c875b3d2c5e5 -r 29fd5adfdc07 arch/arm/mach-at91rm9200/Makefile
--- a/arch/arm/mach-at91rm9200/Makefile Mon Aug 07 17:39:11 2006 -0400
+++ b/arch/arm/mach-at91rm9200/Makefile Mon Aug 07 18:15:57 2006 -0400
@@ -10,6 +10,7 @@ obj-$(CONFIG_PM)              += pm.o
 obj-$(CONFIG_PM)               += pm.o
 
 # Board-specific support
+obj-$(CONFIG_MACH_ONEARM)      += board-1arm.o
 obj-$(CONFIG_ARCH_AT91RM9200DK)        += board-dk.o
 obj-$(CONFIG_MACH_AT91RM9200EK)        += board-ek.o
 obj-$(CONFIG_MACH_CSB337)      += board-csb337.o
diff -r c875b3d2c5e5 -r 29fd5adfdc07 arch/arm/mach-ep93xx/Kconfig
--- a/arch/arm/mach-ep93xx/Kconfig      Mon Aug 07 17:39:11 2006 -0400
+++ b/arch/arm/mach-ep93xx/Kconfig      Mon Aug 07 18:15:57 2006 -0400
@@ -2,7 +2,18 @@ if ARCH_EP93XX
 
 menu "Cirrus EP93xx Implementation Options"
 
+config CRUNCH
+       bool "Support for MaverickCrunch"
+       help
+         Enable kernel support for MaverickCrunch.
+
 comment "EP93xx Platforms"
+
+config MACH_EDB9315
+       bool "Support Cirrus Logic EDB9315"
+       help
+         Say 'Y' here if you want your kernel to support the Cirrus
+         Logic EDB9315 Evaluation Board.
 
 config MACH_GESBC9312
        bool "Support Glomation GESBC-9312-sx"
diff -r c875b3d2c5e5 -r 29fd5adfdc07 arch/arm/mach-ep93xx/Makefile
--- a/arch/arm/mach-ep93xx/Makefile     Mon Aug 07 17:39:11 2006 -0400
+++ b/arch/arm/mach-ep93xx/Makefile     Mon Aug 07 18:15:57 2006 -0400
@@ -1,10 +1,11 @@
 #
 # Makefile for the linux kernel.
 #
-obj-y                  := core.o
+obj-y                  := core.o clock.o
 obj-m                  :=
 obj-n                  :=
 obj-                   :=
 
+obj-$(CONFIG_MACH_EDB9315)     += edb9315.o
 obj-$(CONFIG_MACH_GESBC9312)   += gesbc9312.o
 obj-$(CONFIG_MACH_TS72XX)      += ts72xx.o
diff -r c875b3d2c5e5 -r 29fd5adfdc07 arch/arm/mach-ep93xx/core.c
--- a/arch/arm/mach-ep93xx/core.c       Mon Aug 07 17:39:11 2006 -0400
+++ b/arch/arm/mach-ep93xx/core.c       Mon Aug 07 18:15:57 2006 -0400
@@ -433,9 +433,36 @@ static struct platform_device ep93xx_rtc
 };
 
 
+static struct resource ep93xx_ohci_resources[] = {
+       [0] = {
+               .start  = EP93XX_USB_PHYS_BASE,
+               .end    = EP93XX_USB_PHYS_BASE + 0x0fff,
+               .flags  = IORESOURCE_MEM,
+       },
+       [1] = {
+               .start  = IRQ_EP93XX_USB,
+               .end    = IRQ_EP93XX_USB,
+               .flags  = IORESOURCE_IRQ,
+       },
+};
+
+static struct platform_device ep93xx_ohci_device = {
+       .name           = "ep93xx-ohci",
+       .id             = -1,
+       .dev            = {
+               .dma_mask               = (void *)0xffffffff,
+               .coherent_dma_mask      = 0xffffffff,
+       },
+       .num_resources  = ARRAY_SIZE(ep93xx_ohci_resources),
+       .resource       = ep93xx_ohci_resources,
+};
+
+
 void __init ep93xx_init_devices(void)
 {
        unsigned int v;
+
+       ep93xx_clock_init();
 
        /*
         * Disallow access to MaverickCrunch initially.
@@ -450,4 +477,5 @@ void __init ep93xx_init_devices(void)
        amba_device_register(&uart3_device, &iomem_resource);
 
        platform_device_register(&ep93xx_rtc_device);
-}
+       platform_device_register(&ep93xx_ohci_device);
+}
diff -r c875b3d2c5e5 -r 29fd5adfdc07 arch/arm/mach-ep93xx/gesbc9312.c
--- a/arch/arm/mach-ep93xx/gesbc9312.c  Mon Aug 07 17:39:11 2006 -0400
+++ b/arch/arm/mach-ep93xx/gesbc9312.c  Mon Aug 07 18:15:57 2006 -0400
@@ -30,7 +30,7 @@ static struct physmap_flash_data gesbc93
 
 static struct resource gesbc9312_flash_resource = {
        .start          = 0x60000000,
-       .end            = 0x60800000,
+       .end            = 0x607fffff,
        .flags          = IORESOURCE_MEM,
 };
 
diff -r c875b3d2c5e5 -r 29fd5adfdc07 arch/arm/mach-ep93xx/ts72xx.c
--- a/arch/arm/mach-ep93xx/ts72xx.c     Mon Aug 07 17:39:11 2006 -0400
+++ b/arch/arm/mach-ep93xx/ts72xx.c     Mon Aug 07 18:15:57 2006 -0400
@@ -118,7 +118,7 @@ static struct physmap_flash_data ts72xx_
 
 static struct resource ts72xx_flash_resource = {
        .start          = TS72XX_NOR_PHYS_BASE,
-       .end            = TS72XX_NOR_PHYS_BASE + 0x01000000,
+       .end            = TS72XX_NOR_PHYS_BASE + 0x00ffffff,
        .flags          = IORESOURCE_MEM,
 };
 
diff -r c875b3d2c5e5 -r 29fd5adfdc07 arch/arm/mach-ixp2000/core.c
--- a/arch/arm/mach-ixp2000/core.c      Mon Aug 07 17:39:11 2006 -0400
+++ b/arch/arm/mach-ixp2000/core.c      Mon Aug 07 18:15:57 2006 -0400
@@ -302,6 +302,7 @@ void gpio_line_config(int line, int dire
        }
        local_irq_restore(flags);
 }
+EXPORT_SYMBOL(gpio_line_config);
 
 
 /*************************************************************************
diff -r c875b3d2c5e5 -r 29fd5adfdc07 arch/arm/mach-ixp23xx/espresso.c
--- a/arch/arm/mach-ixp23xx/espresso.c  Mon Aug 07 17:39:11 2006 -0400
+++ b/arch/arm/mach-ixp23xx/espresso.c  Mon Aug 07 18:15:57 2006 -0400
@@ -59,7 +59,7 @@ static struct physmap_flash_data espress
 
 static struct resource espresso_flash_resource = {
        .start          = 0x90000000,
-       .end            = 0x92000000,
+       .end            = 0x91ffffff,
        .flags          = IORESOURCE_MEM,
 };
 
diff -r c875b3d2c5e5 -r 29fd5adfdc07 arch/arm/mach-ixp23xx/ixdp2351.c
--- a/arch/arm/mach-ixp23xx/ixdp2351.c  Mon Aug 07 17:39:11 2006 -0400
+++ b/arch/arm/mach-ixp23xx/ixdp2351.c  Mon Aug 07 18:15:57 2006 -0400
@@ -304,7 +304,7 @@ static struct physmap_flash_data ixdp235
 
 static struct resource ixdp2351_flash_resource = {
        .start          = 0x90000000,
-       .end            = 0x94000000,
+       .end            = 0x93ffffff,
        .flags          = IORESOURCE_MEM,
 };
 
diff -r c875b3d2c5e5 -r 29fd5adfdc07 arch/arm/mach-ixp23xx/roadrunner.c
--- a/arch/arm/mach-ixp23xx/roadrunner.c        Mon Aug 07 17:39:11 2006 -0400
+++ b/arch/arm/mach-ixp23xx/roadrunner.c        Mon Aug 07 18:15:57 2006 -0400
@@ -143,7 +143,7 @@ static struct physmap_flash_data roadrun
 
 static struct resource roadrunner_flash_resource = {
        .start          = 0x90000000,
-       .end            = 0x94000000,
+       .end            = 0x93ffffff,
        .flags          = IORESOURCE_MEM,
 };
 
diff -r c875b3d2c5e5 -r 29fd5adfdc07 arch/arm/mach-ixp4xx/Kconfig
--- a/arch/arm/mach-ixp4xx/Kconfig      Mon Aug 07 17:39:11 2006 -0400
+++ b/arch/arm/mach-ixp4xx/Kconfig      Mon Aug 07 18:15:57 2006 -0400
@@ -35,7 +35,6 @@ config ARCH_ADI_COYOTE
 
 config ARCH_IXDP425
        bool "IXDP425"
-       select PCI
        help
          Say 'Y' here if you want your kernel to support Intel's 
          IXDP425 Development Platform (Also known as Richfield).  
@@ -43,7 +42,6 @@ config ARCH_IXDP425
 
 config MACH_IXDPG425
        bool "IXDPG425"
-       select PCI
        help
          Say 'Y' here if you want your kernel to support Intel's
          IXDPG425 Development Platform (Also known as Montajade).
@@ -51,7 +49,6 @@ config MACH_IXDPG425
 
 config MACH_IXDP465
        bool "IXDP465"
-       select PCI
        help
          Say 'Y' here if you want your kernel to support Intel's
          IXDP465 Development Platform (Also known as BMP).
diff -r c875b3d2c5e5 -r 29fd5adfdc07 arch/arm/mach-ixp4xx/Makefile
--- a/arch/arm/mach-ixp4xx/Makefile     Mon Aug 07 17:39:11 2006 -0400
+++ b/arch/arm/mach-ixp4xx/Makefile     Mon Aug 07 18:15:57 2006 -0400
@@ -2,13 +2,23 @@
 # Makefile for the linux kernel.
 #
 
+obj-pci-y      :=
+obj-pci-n      :=
+
+obj-pci-$(CONFIG_ARCH_IXDP4XX)         += ixdp425-pci.o
+obj-pci-$(CONFIG_MACH_IXDPG425)                += ixdpg425-pci.o
+obj-pci-$(CONFIG_ARCH_ADI_COYOTE)      += coyote-pci.o
+obj-pci-$(CONFIG_MACH_GTWX5715)                += gtwx5715-pci.o
+obj-pci-$(CONFIG_MACH_NSLU2)           += nslu2-pci.o
+obj-pci-$(CONFIG_MACH_NAS100D)         += nas100d-pci.o
+
 obj-y  += common.o
 
-obj-$(CONFIG_PCI)              += common-pci.o
-obj-$(CONFIG_ARCH_IXDP4XX)     += ixdp425-pci.o ixdp425-setup.o
-obj-$(CONFIG_MACH_IXDPG425)    += ixdpg425-pci.o coyote-setup.o
-obj-$(CONFIG_ARCH_ADI_COYOTE)  += coyote-pci.o coyote-setup.o
-obj-$(CONFIG_MACH_GTWX5715)    += gtwx5715-pci.o gtwx5715-setup.o
-obj-$(CONFIG_MACH_NSLU2)       += nslu2-pci.o nslu2-setup.o nslu2-power.o
-obj-$(CONFIG_MACH_NAS100D)     += nas100d-pci.o nas100d-setup.o nas100d-power.o
+obj-$(CONFIG_ARCH_IXDP4XX)     += ixdp425-setup.o
+obj-$(CONFIG_MACH_IXDPG425)    += coyote-setup.o
+obj-$(CONFIG_ARCH_ADI_COYOTE)  += coyote-setup.o
+obj-$(CONFIG_MACH_GTWX5715)    += gtwx5715-setup.o
+obj-$(CONFIG_MACH_NSLU2)       += nslu2-setup.o nslu2-power.o
+obj-$(CONFIG_MACH_NAS100D)     += nas100d-setup.o nas100d-power.o
 
+obj-$(CONFIG_PCI)              += $(obj-pci-$(CONFIG_PCI)) common-pci.o
diff -r c875b3d2c5e5 -r 29fd5adfdc07 arch/arm/mach-ixp4xx/nas100d-power.c
--- a/arch/arm/mach-ixp4xx/nas100d-power.c      Mon Aug 07 17:39:11 2006 -0400
+++ b/arch/arm/mach-ixp4xx/nas100d-power.c      Mon Aug 07 18:15:57 2006 -0400
@@ -20,10 +20,9 @@
 #include <linux/module.h>
 #include <linux/reboot.h>
 #include <linux/interrupt.h>
+#include <linux/reboot.h>
 
 #include <asm/mach-types.h>
-
-extern void ctrl_alt_del(void);
 
 static irqreturn_t nas100d_reset_handler(int irq, void *dev_id, struct pt_regs 
*regs)
 {
diff -r c875b3d2c5e5 -r 29fd5adfdc07 arch/arm/mach-ixp4xx/nslu2-power.c
--- a/arch/arm/mach-ixp4xx/nslu2-power.c        Mon Aug 07 17:39:11 2006 -0400
+++ b/arch/arm/mach-ixp4xx/nslu2-power.c        Mon Aug 07 18:15:57 2006 -0400
@@ -20,10 +20,9 @@
 #include <linux/module.h>
 #include <linux/reboot.h>
 #include <linux/interrupt.h>
+#include <linux/reboot.h>
 
 #include <asm/mach-types.h>
-
-extern void ctrl_alt_del(void);
 
 static irqreturn_t nslu2_power_handler(int irq, void *dev_id, struct pt_regs 
*regs)
 {
diff -r c875b3d2c5e5 -r 29fd5adfdc07 arch/arm/mach-omap1/board-ams-delta.c
--- a/arch/arm/mach-omap1/board-ams-delta.c     Mon Aug 07 17:39:11 2006 -0400
+++ b/arch/arm/mach-omap1/board-ams-delta.c     Mon Aug 07 18:15:57 2006 -0400
@@ -84,6 +84,15 @@ static struct omap_board_config_kernel a
        { OMAP_TAG_UART,        &ams_delta_uart_config },
 };
 
+static struct platform_device ams_delta_led_device = {
+       .name   = "ams-delta-led",
+       .id     = -1
+};
+
+static struct platform_device *ams_delta_devices[] __initdata = {
+       &ams_delta_led_device,
+};
+
 static void __init ams_delta_init(void)
 {
        iotable_init(ams_delta_io_desc, ARRAY_SIZE(ams_delta_io_desc));
@@ -94,6 +103,8 @@ static void __init ams_delta_init(void)
 
        /* Clear latch2 (NAND, LCD, modem enable) */
        ams_delta_latch2_write(~0, 0);
+
+       platform_add_devices(ams_delta_devices, ARRAY_SIZE(ams_delta_devices));
 }
 
 static void __init ams_delta_map_io(void)
diff -r c875b3d2c5e5 -r 29fd5adfdc07 arch/arm/mach-pxa/irq.c
--- a/arch/arm/mach-pxa/irq.c   Mon Aug 07 17:39:11 2006 -0400
+++ b/arch/arm/mach-pxa/irq.c   Mon Aug 07 18:15:57 2006 -0400
@@ -88,8 +88,8 @@ static int pxa_gpio_irq_type(unsigned in
 
        if (type == IRQT_PROBE) {
            /* Don't mess with enabled GPIOs using preconfigured edges or
-              GPIOs set to alternate function during probe */
-               if ((GPIO_IRQ_rising_edge[idx] | GPIO_IRQ_falling_edge[idx]) &
+              GPIOs set to alternate function or to output during probe */
+               if ((GPIO_IRQ_rising_edge[idx] | GPIO_IRQ_falling_edge[idx] | 
GPDR(gpio)) &
                    GPIO_bit(gpio))
                        return 0;
                if (GAFR(gpio) & (0x3 << (((gpio) & 0xf)*2)))
diff -r c875b3d2c5e5 -r 29fd5adfdc07 arch/arm/mach-pxa/sleep.S
--- a/arch/arm/mach-pxa/sleep.S Mon Aug 07 17:39:11 2006 -0400
+++ b/arch/arm/mach-pxa/sleep.S Mon Aug 07 18:15:57 2006 -0400
@@ -189,7 +189,7 @@ 20: b       20b                             @ loop waiting 
for sleep
        .data
        .align 5
 ENTRY(pxa_cpu_resume)
-       mov     r0, #PSR_I_BIT | PSR_F_BIT | MODE_SVC   @ set SVC, irqs off
+       mov     r0, #PSR_I_BIT | PSR_F_BIT | SVC_MODE   @ set SVC, irqs off
        msr     cpsr_c, r0
 
        ldr     r0, sleep_save_sp               @ stack phys addr
diff -r c875b3d2c5e5 -r 29fd5adfdc07 arch/arm/mach-s3c2410/Kconfig
--- a/arch/arm/mach-s3c2410/Kconfig     Mon Aug 07 17:39:11 2006 -0400
+++ b/arch/arm/mach-s3c2410/Kconfig     Mon Aug 07 18:15:57 2006 -0400
@@ -71,16 +71,22 @@ config ARCH_S3C2440
          Say Y here if you are using the SMDK2440.
 
 config SMDK2440_CPU2440
-       bool "SMDK2440 with S3C2440 cpu module"
+       bool "SMDK2440 with S3C2440 CPU module"
        depends on ARCH_S3C2440
        default y if ARCH_S3C2440
        select CPU_S3C2440
 
 config SMDK2440_CPU2442
-       bool "SMDM2440 with S3C2442 cpu module"
+       bool "SMDM2440 with S3C2442 CPU module"
        depends on ARCH_S3C2440
        select CPU_S3C2442
 
+config MACH_SMDK2413
+       bool "SMDK2413"
+       select CPU_S3C2412
+       select MACH_SMDK
+       help
+         Say Y here if you are using an SMDK2413
 
 config MACH_VR1000
        bool "Thorcom VR1000"
@@ -126,6 +132,20 @@ config CPU_S3C2410
        help
          Support for S3C2410 and S3C2410A family from the S3C24XX line
          of Samsung Mobile CPUs.
+
+# internal node to signify if we are only dealing with an S3C2412
+
+config CPU_S3C2412_ONLY
+       bool
+       depends on ARCH_S3C2410 && !CPU_S3C2400 && !CPU_S3C2410 && \
+                  !CPU_S3C2440 && !CPU_S3C2442 && CPU_S3C2412
+       default y if CPU_S3C2412
+
+config CPU_S3C2412
+       bool
+       depends on ARCH_S3C2410
+       help
+         Support for the S3C2412 and S3C2413 SoCs from the S3C24XX line
 
 config CPU_S3C244X
        bool
diff -r c875b3d2c5e5 -r 29fd5adfdc07 arch/arm/mach-s3c2410/Makefile
--- a/arch/arm/mach-s3c2410/Makefile    Mon Aug 07 17:39:11 2006 -0400
+++ b/arch/arm/mach-s3c2410/Makefile    Mon Aug 07 18:15:57 2006 -0400
@@ -24,6 +24,11 @@ obj-$(CONFIG_PM)        += pm.o sleep.o
 obj-$(CONFIG_PM)          += pm.o sleep.o
 obj-$(CONFIG_PM_SIMTEC)           += pm-simtec.o
 
+# S3C2412 support
+obj-$(CONFIG_CPU_S3C2412)  += s3c2412.o
+obj-$(CONFIG_CPU_S3C2412)  += s3c2412-clock.o
+
+#
 # S3C244X support
 
 obj-$(CONFIG_CPU_S3C244X)  += s3c244x.o
@@ -57,6 +62,7 @@ obj-$(CONFIG_ARCH_H1940)      += mach-h1940.o
 obj-$(CONFIG_ARCH_H1940)       += mach-h1940.o
 obj-$(CONFIG_MACH_N30)         += mach-n30.o
 obj-$(CONFIG_ARCH_SMDK2410)    += mach-smdk2410.o
+obj-$(CONFIG_MACH_SMDK2413)    += mach-smdk2413.o
 obj-$(CONFIG_ARCH_S3C2440)     += mach-smdk2440.o
 obj-$(CONFIG_MACH_VR1000)      += mach-vr1000.o usb-simtec.o
 obj-$(CONFIG_MACH_RX3715)      += mach-rx3715.o
diff -r c875b3d2c5e5 -r 29fd5adfdc07 arch/arm/mach-s3c2410/clock.c
--- a/arch/arm/mach-s3c2410/clock.c     Mon Aug 07 17:39:11 2006 -0400
+++ b/arch/arm/mach-s3c2410/clock.c     Mon Aug 07 18:15:57 2006 -0400
@@ -213,12 +213,17 @@ EXPORT_SYMBOL(clk_set_parent);
 
 /* base clocks */
 
-static struct clk clk_xtal = {
+struct clk clk_xtal = {
        .name           = "xtal",
        .id             = -1,
        .rate           = 0,
        .parent         = NULL,
        .ctrlbit        = 0,
+};
+
+struct clk clk_mpll = {
+       .name           = "mpll",
+       .id             = -1,
 };
 
 struct clk clk_upll = {
@@ -232,7 +237,7 @@ struct clk clk_f = {
        .name           = "fclk",
        .id             = -1,
        .rate           = 0,
-       .parent         = NULL,
+       .parent         = &clk_mpll,
        .ctrlbit        = 0,
 };
 
@@ -263,14 +268,14 @@ struct clk clk_usb_bus = {
 
 static int s3c24xx_dclk_enable(struct clk *clk, int enable)
 {
-       unsigned long dclkcon = __raw_readl(S3C2410_DCLKCON);
+       unsigned long dclkcon = __raw_readl(S3C24XX_DCLKCON);
 
        if (enable)
                dclkcon |= clk->ctrlbit;
        else
                dclkcon &= ~clk->ctrlbit;
 
-       __raw_writel(dclkcon, S3C2410_DCLKCON);
+       __raw_writel(dclkcon, S3C24XX_DCLKCON);
 
        return 0;
 }
@@ -289,7 +294,7 @@ static int s3c24xx_dclk_setparent(struct
 
        clk->parent = parent;
 
-       dclkcon = __raw_readl(S3C2410_DCLKCON);
+       dclkcon = __raw_readl(S3C24XX_DCLKCON);
 
        if (clk->ctrlbit == S3C2410_DCLKCON_DCLK0EN) {
                if (uclk)
@@ -303,7 +308,7 @@ static int s3c24xx_dclk_setparent(struct
                        dclkcon &= ~S3C2410_DCLKCON_DCLK1_UCLK;
        }
 
-       __raw_writel(dclkcon, S3C2410_DCLKCON);
+       __raw_writel(dclkcon, S3C24XX_DCLKCON);
 
        return 0;
 }
@@ -413,6 +418,7 @@ int __init s3c24xx_setup_clocks(unsigned
        clk_xtal.rate = xtal;
        clk_upll.rate = s3c2410_get_pll(__raw_readl(S3C2410_UPLLCON), xtal);
 
+       clk_mpll.rate = fclk;
        clk_h.rate = hclk;
        clk_p.rate = pclk;
        clk_f.rate = fclk;
@@ -424,6 +430,9 @@ int __init s3c24xx_setup_clocks(unsigned
        if (s3c24xx_register_clock(&clk_xtal) < 0)
                printk(KERN_ERR "failed to register master xtal\n");
 
+       if (s3c24xx_register_clock(&clk_mpll) < 0)
+               printk(KERN_ERR "failed to register mpll clock\n");
+
        if (s3c24xx_register_clock(&clk_upll) < 0)
                printk(KERN_ERR "failed to register upll clock\n");
 
diff -r c875b3d2c5e5 -r 29fd5adfdc07 arch/arm/mach-s3c2410/clock.h
--- a/arch/arm/mach-s3c2410/clock.h     Mon Aug 07 17:39:11 2006 -0400
+++ b/arch/arm/mach-s3c2410/clock.h     Mon Aug 07 18:15:57 2006 -0400
@@ -42,7 +42,9 @@ extern struct clk clk_f;
 extern struct clk clk_f;
 extern struct clk clk_h;
 extern struct clk clk_p;
+extern struct clk clk_mpll;
 extern struct clk clk_upll;
+extern struct clk clk_xtal;
 
 /* exports for arch/arm/mach-s3c2410
  *
diff -r c875b3d2c5e5 -r 29fd5adfdc07 arch/arm/mach-s3c2410/cpu.c
--- a/arch/arm/mach-s3c2410/cpu.c       Mon Aug 07 17:39:11 2006 -0400
+++ b/arch/arm/mach-s3c2410/cpu.c       Mon Aug 07 18:15:57 2006 -0400
@@ -44,6 +44,7 @@
 #include "clock.h"
 #include "s3c2400.h"
 #include "s3c2410.h"
+#include "s3c2412.h"
 #include "s3c244x.h"
 #include "s3c2440.h"
 #include "s3c2442.h"
@@ -62,6 +63,7 @@ struct cpu_table {
 
 static const char name_s3c2400[]  = "S3C2400";
 static const char name_s3c2410[]  = "S3C2410";
+static const char name_s3c2412[]  = "S3C2412";
 static const char name_s3c2440[]  = "S3C2440";
 static const char name_s3c2442[]  = "S3C2442";
 static const char name_s3c2410a[] = "S3C2410A";
@@ -112,6 +114,15 @@ static struct cpu_table cpu_ids[] __init
                .init_uarts     = s3c244x_init_uarts,
                .init           = s3c2442_init,
                .name           = name_s3c2442
+       },
+       {
+               .idcode         = 0x32412001,
+               .idmask         = 0xffffffff,
+               .map_io         = s3c2412_map_io,
+               .init_clocks    = s3c2412_init_clocks,
+               .init_uarts     = s3c2412_init_uarts,
+               .init           = s3c2412_init,
+               .name           = name_s3c2412,
        },
        {
                .idcode         = 0x0,   /* S3C2400 doesn't have an idcode */
@@ -171,6 +182,24 @@ void s3c24xx_set_board(struct s3c24xx_bo
 
 static struct cpu_table *cpu;
 
+static unsigned long s3c24xx_read_idcode_v5(void)
+{
+#if defined(CONFIG_CPU_S3C2412) || defined(CONFIG_CPU_S3C2413)
+       return __raw_readl(S3C2412_GSTATUS1);
+#else
+       return 1UL;     /* don't look like an 2400 */
+#endif
+}
+
+static unsigned long s3c24xx_read_idcode_v4(void)
+{
+#ifndef CONFIG_CPU_S3C2400
+       return __raw_readl(S3C2410_GSTATUS1);
+#else
+       return 0UL;
+#endif
+}
+
 void __init s3c24xx_init_io(struct map_desc *mach_desc, int size)
 {
        unsigned long idcode = 0x0;
@@ -178,9 +207,11 @@ void __init s3c24xx_init_io(struct map_d
        /* initialise the io descriptors we need for initialisation */
        iotable_init(s3c_iodesc, ARRAY_SIZE(s3c_iodesc));
 
-#ifndef CONFIG_CPU_S3C2400
-       idcode = __raw_readl(S3C2410_GSTATUS1);
-#endif
+       if (cpu_architecture() >= CPU_ARCH_ARMv5) {
+               idcode = s3c24xx_read_idcode_v5();
+       } else {
+               idcode = s3c24xx_read_idcode_v4();
+       }
 
        cpu = s3c_lookup_cpu(idcode);
 
diff -r c875b3d2c5e5 -r 29fd5adfdc07 arch/arm/mach-s3c2410/cpu.h
--- a/arch/arm/mach-s3c2410/cpu.h       Mon Aug 07 17:39:11 2006 -0400
+++ b/arch/arm/mach-s3c2410/cpu.h       Mon Aug 07 18:15:57 2006 -0400
@@ -74,5 +74,6 @@ extern struct sys_timer s3c24xx_timer;
 /* system device classes */
 
 extern struct sysdev_class s3c2410_sysclass;
+extern struct sysdev_class s3c2412_sysclass;
 extern struct sysdev_class s3c2440_sysclass;
 extern struct sysdev_class s3c2442_sysclass;
diff -r c875b3d2c5e5 -r 29fd5adfdc07 arch/arm/mach-s3c2410/irq.c
--- a/arch/arm/mach-s3c2410/irq.c       Mon Aug 07 17:39:11 2006 -0400
+++ b/arch/arm/mach-s3c2410/irq.c       Mon Aug 07 18:15:57 2006 -0400
@@ -191,12 +191,8 @@ static struct irqchip s3c_irq_chip = {
        .ack       = s3c_irq_ack,
        .mask      = s3c_irq_mask,
        .unmask    = s3c_irq_unmask,
-       .set_wake          = s3c_irq_wake
-};
-
-/* S3C2410_EINTMASK
- * S3C2410_EINTPEND
- */
+       .set_wake  = s3c_irq_wake
+};
 
 static void
 s3c_irqext_mask(unsigned int irqno)
@@ -205,9 +201,9 @@ s3c_irqext_mask(unsigned int irqno)
 
        irqno -= EXTINT_OFF;
 
-       mask = __raw_readl(S3C2410_EINTMASK);
+       mask = __raw_readl(S3C24XX_EINTMASK);
        mask |= ( 1UL << irqno);
-       __raw_writel(mask, S3C2410_EINTMASK);
+       __raw_writel(mask, S3C24XX_EINTMASK);
 
        if (irqno <= (IRQ_EINT7 - EXTINT_OFF)) {
                /* check to see if all need masking */
@@ -232,11 +228,11 @@ s3c_irqext_ack(unsigned int irqno)
        bit = 1UL << (irqno - EXTINT_OFF);
 
 
-       mask = __raw_readl(S3C2410_EINTMASK);
-
-       __raw_writel(bit, S3C2410_EINTPEND);
-
-       req = __raw_readl(S3C2410_EINTPEND);
+       mask = __raw_readl(S3C24XX_EINTMASK);
+
+       __raw_writel(bit, S3C24XX_EINTPEND);
+
+       req = __raw_readl(S3C24XX_EINTPEND);
        req &= ~mask;
 
        /* not sure if we should be acking the parent irq... */
@@ -257,9 +253,9 @@ s3c_irqext_unmask(unsigned int irqno)
 
        irqno -= EXTINT_OFF;
 
-       mask = __raw_readl(S3C2410_EINTMASK);
+       mask = __raw_readl(S3C24XX_EINTMASK);
        mask &= ~( 1UL << irqno);
-       __raw_writel(mask, S3C2410_EINTMASK);
+       __raw_writel(mask, S3C24XX_EINTMASK);
 
        s3c_irq_unmask((irqno <= (IRQ_EINT7 - EXTINT_OFF)) ? IRQ_EINT4t7 : 
IRQ_EINT8t23);
 }
@@ -275,28 +271,28 @@ s3c_irqext_type(unsigned int irq, unsign
        if ((irq >= IRQ_EINT0) && (irq <= IRQ_EINT3))
        {
                gpcon_reg = S3C2410_GPFCON;
-               extint_reg = S3C2410_EXTINT0;
+               extint_reg = S3C24XX_EXTINT0;
                gpcon_offset = (irq - IRQ_EINT0) * 2;
                extint_offset = (irq - IRQ_EINT0) * 4;
        }
        else if ((irq >= IRQ_EINT4) && (irq <= IRQ_EINT7))
        {
                gpcon_reg = S3C2410_GPFCON;
-               extint_reg = S3C2410_EXTINT0;
+               extint_reg = S3C24XX_EXTINT0;
                gpcon_offset = (irq - (EXTINT_OFF)) * 2;
                extint_offset = (irq - (EXTINT_OFF)) * 4;
        }
        else if ((irq >= IRQ_EINT8) && (irq <= IRQ_EINT15))
        {
                gpcon_reg = S3C2410_GPGCON;
-               extint_reg = S3C2410_EXTINT1;
+               extint_reg = S3C24XX_EXTINT1;
                gpcon_offset = (irq - IRQ_EINT8) * 2;
                extint_offset = (irq - IRQ_EINT8) * 4;
        }
        else if ((irq >= IRQ_EINT16) && (irq <= IRQ_EINT23))
        {
                gpcon_reg = S3C2410_GPGCON;
-               extint_reg = S3C2410_EXTINT2;
+               extint_reg = S3C24XX_EXTINT2;
                gpcon_offset = (irq - IRQ_EINT8) * 2;
                extint_offset = (irq - IRQ_EINT16) * 4;
        } else
@@ -572,6 +568,23 @@ s3c_irq_demux_uart2(unsigned int irq,
        s3c_irq_demux_uart(IRQ_S3CUART_RX2, regs);
 }
 
+static void
+s3c_irq_demux_extint(unsigned int irq,
+                    struct irqdesc *desc,
+                    struct pt_regs *regs)
+{
+       unsigned long eintpnd = __raw_readl(S3C24XX_EINTPEND);
+       unsigned long eintmsk = __raw_readl(S3C24XX_EINTMASK);
+
+       eintpnd &= ~eintmsk;
+
+       if (eintpnd) {
+               irq = fls(eintpnd);
+               irq += (IRQ_EINT4 - (4 + 1));
+
+               desc_handle_irq(irq, irq_desc + irq, regs);
+       }
+}
 
 /* s3c24xx_init_irq
  *
@@ -591,12 +604,12 @@ void __init s3c24xx_init_irq(void)
 
        last = 0;
        for (i = 0; i < 4; i++) {
-               pend = __raw_readl(S3C2410_EINTPEND);
+               pend = __raw_readl(S3C24XX_EINTPEND);
 
                if (pend == 0 || pend == last)
                        break;
 
-               __raw_writel(pend, S3C2410_EINTPEND);
+               __raw_writel(pend, S3C24XX_EINTPEND);
                printk("irq: clearing pending ext status %08x\n", (int)pend);
                last = pend;
        }
@@ -630,12 +643,14 @@ void __init s3c24xx_init_irq(void)
 
        irqdbf("s3c2410_init_irq: registering s3c2410 interrupt handlers\n");
 
-       for (irqno = IRQ_BATT_FLT; irqno <= IRQ_ADCPARENT; irqno++) {
+       for (irqno = IRQ_EINT4t7; irqno <= IRQ_ADCPARENT; irqno++) {
                /* set all the s3c2410 internal irqs */
 
                switch (irqno) {
                        /* deal with the special IRQs (cascaded) */
 
+               case IRQ_EINT4t7:
+               case IRQ_EINT8t23:
                case IRQ_UART0:
                case IRQ_UART1:
                case IRQ_UART2:
@@ -659,11 +674,13 @@ void __init s3c24xx_init_irq(void)
 
        /* setup the cascade irq handlers */
 
+       set_irq_chained_handler(IRQ_EINT4t7, s3c_irq_demux_extint);
+       set_irq_chained_handler(IRQ_EINT8t23, s3c_irq_demux_extint);
+
        set_irq_chained_handler(IRQ_UART0, s3c_irq_demux_uart0);
        set_irq_chained_handler(IRQ_UART1, s3c_irq_demux_uart1);
        set_irq_chained_handler(IRQ_UART2, s3c_irq_demux_uart2);
        set_irq_chained_handler(IRQ_ADCPARENT, s3c_irq_demux_adc);
-
 
        /* external interrupts */
 
diff -r c875b3d2c5e5 -r 29fd5adfdc07 arch/arm/mach-s3c2410/pm-simtec.c
--- a/arch/arm/mach-s3c2410/pm-simtec.c Mon Aug 07 17:39:11 2006 -0400
+++ b/arch/arm/mach-s3c2410/pm-simtec.c Mon Aug 07 18:15:57 2006 -0400
@@ -48,7 +48,8 @@ static __init int pm_simtec_init(void)
 
        /* check which machine we are running on */
 
-       if (!machine_is_bast() && !machine_is_vr1000() && !machine_is_anubis())
+       if (!machine_is_bast() && !machine_is_vr1000() &&
+           !machine_is_anubis() && !machine_is_osiris())
                return 0;
 
        printk(KERN_INFO "Simtec Board Power Manangement" COPYRIGHT "\n");
diff -r c875b3d2c5e5 -r 29fd5adfdc07 arch/arm/mach-s3c2410/s3c2410-clock.c
--- a/arch/arm/mach-s3c2410/s3c2410-clock.c     Mon Aug 07 17:39:11 2006 -0400
+++ b/arch/arm/mach-s3c2410/s3c2410-clock.c     Mon Aug 07 18:15:57 2006 -0400
@@ -182,7 +182,15 @@ static struct clk init_clocks[] = {
                .id             = -1,
                .parent         = &clk_p,
                .ctrlbit        = 0,
-       }
+       }, {
+               .name           = "usb-bus-host",
+               .id             = -1,
+               .parent         = &clk_usb_bus,
+       }, {
+               .name           = "usb-bus-gadget",
+               .id             = -1,
+               .parent         = &clk_usb_bus,
+       },
 };
 
 /* s3c2410_baseclk_add()
diff -r c875b3d2c5e5 -r 29fd5adfdc07 arch/arm/mach-s3c2410/s3c2410-gpio.c
--- a/arch/arm/mach-s3c2410/s3c2410-gpio.c      Mon Aug 07 17:39:11 2006 -0400
+++ b/arch/arm/mach-s3c2410/s3c2410-gpio.c      Mon Aug 07 18:15:57 2006 -0400
@@ -18,9 +18,6 @@
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * Changelog
- *     15-Jan-2006  LCVR  Splitted from gpio.c
  */
 
 #include <linux/kernel.h>
@@ -38,7 +35,7 @@ int s3c2410_gpio_irqfilter(unsigned int 
 int s3c2410_gpio_irqfilter(unsigned int pin, unsigned int on,
                           unsigned int config)
 {
-       void __iomem *reg = S3C2410_EINFLT0;
+       void __iomem *reg = S3C24XX_EINFLT0;
        unsigned long flags;
        unsigned long val;
 
@@ -47,7 +44,7 @@ int s3c2410_gpio_irqfilter(unsigned int 
 
        config &= 0xff;
 
-       pin -= S3C2410_GPG8_EINT16;
+       pin -= S3C2410_GPG8;
        reg += pin & ~3;
 
        local_irq_save(flags);
@@ -61,10 +58,10 @@ int s3c2410_gpio_irqfilter(unsigned int 
 
        /* update filter enable */
 
-       val = __raw_readl(S3C2410_EXTINT2);
+       val = __raw_readl(S3C24XX_EXTINT2);
        val &= ~(1 << ((pin * 4) + 3));
        val |= on << ((pin * 4) + 3);
-       __raw_writel(val, S3C2410_EXTINT2);
+       __raw_writel(val, S3C24XX_EXTINT2);
 
        local_irq_restore(flags);
 
@@ -75,7 +72,7 @@ EXPORT_SYMBOL(s3c2410_gpio_irqfilter);
 
 int s3c2410_gpio_getirq(unsigned int pin)
 {
-       if (pin < S3C2410_GPF0 || pin > S3C2410_GPG15_EINT23)
+       if (pin < S3C2410_GPF0 || pin > S3C2410_GPG15)
                return -1;      /* not valid interrupts */
 
        if (pin < S3C2410_GPG0 && pin > S3C2410_GPF7)
diff -r c875b3d2c5e5 -r 29fd5adfdc07 arch/arm/mach-s3c2410/s3c244x.c
--- a/arch/arm/mach-s3c2410/s3c244x.c   Mon Aug 07 17:39:11 2006 -0400
+++ b/arch/arm/mach-s3c2410/s3c244x.c   Mon Aug 07 18:15:57 2006 -0400
@@ -69,6 +69,7 @@ void __init s3c244x_map_io(struct map_de
 
        s3c_device_i2c.name  = "s3c2440-i2c";
        s3c_device_nand.name = "s3c2440-nand";
+       s3c_device_usbgadget.name = "s3c2440-usbgadget";
 }
 
 void __init s3c244x_init_clocks(int xtal)
diff -r c875b3d2c5e5 -r 29fd5adfdc07 arch/arm/mach-s3c2410/sleep.S
--- a/arch/arm/mach-s3c2410/sleep.S     Mon Aug 07 17:39:11 2006 -0400
+++ b/arch/arm/mach-s3c2410/sleep.S     Mon Aug 07 18:15:57 2006 -0400
@@ -128,7 +128,7 @@ s3c2410_sleep_save_phys:
        */
 
 ENTRY(s3c2410_cpu_resume)
-       mov     r0, #PSR_I_BIT | PSR_F_BIT | MODE_SVC
+       mov     r0, #PSR_I_BIT | PSR_F_BIT | SVC_MODE
        msr     cpsr_c, r0
 
        @@ load UART to allow us to print the two characters for
diff -r c875b3d2c5e5 -r 29fd5adfdc07 arch/arm/mach-sa1100/sleep.S
--- a/arch/arm/mach-sa1100/sleep.S      Mon Aug 07 17:39:11 2006 -0400
+++ b/arch/arm/mach-sa1100/sleep.S      Mon Aug 07 18:15:57 2006 -0400
@@ -177,7 +177,7 @@ 20: b       20b                     @ loop waiting for sleep
        .data
        .align 5
 ENTRY(sa1100_cpu_resume)
-       mov     r0, #PSR_F_BIT | PSR_I_BIT | MODE_SVC
+       mov     r0, #PSR_F_BIT | PSR_I_BIT | SVC_MODE
        msr     cpsr_c, r0                      @ set SVC, irqs off
 
        ldr     r0, sleep_save_sp               @ stack phys addr
diff -r c875b3d2c5e5 -r 29fd5adfdc07 arch/arm/mm/Kconfig
--- a/arch/arm/mm/Kconfig       Mon Aug 07 17:39:11 2006 -0400
+++ b/arch/arm/mm/Kconfig       Mon Aug 07 18:15:57 2006 -0400
@@ -15,8 +15,8 @@ config CPU_ARM610
        select CPU_32v3
        select CPU_CACHE_V3
        select CPU_CACHE_VIVT
-       select CPU_COPY_V3
-       select CPU_TLB_V3
+       select CPU_COPY_V3 if MMU
+       select CPU_TLB_V3 if MMU
        help
          The ARM610 is the successor to the ARM3 processor
          and was produced by VLSI Technology Inc.
@@ -31,8 +31,8 @@ config CPU_ARM710
        select CPU_32v3
        select CPU_CACHE_V3
        select CPU_CACHE_VIVT
-       select CPU_COPY_V3
-       select CPU_TLB_V3
+       select CPU_COPY_V3 if MMU
+       select CPU_TLB_V3 if MMU
        help
          A 32-bit RISC microprocessor based on the ARM7 processor core
          designed by Advanced RISC Machines Ltd. The ARM710 is the
@@ -50,8 +50,8 @@ config CPU_ARM720T
        select CPU_ABRT_LV4T
        select CPU_CACHE_V4
        select CPU_CACHE_VIVT
-       select CPU_COPY_V4WT
-       select CPU_TLB_V4WT
+       select CPU_COPY_V4WT if MMU
+       select CPU_TLB_V4WT if MMU
        help
          A 32-bit RISC processor with 8kByte Cache, Write Buffer and
          MMU built around an ARM7TDMI core.
@@ -61,15 +61,15 @@ config CPU_ARM720T
 
 # ARM920T
 config CPU_ARM920T
-       bool "Support ARM920T processor" if !ARCH_S3C2410
-       depends on ARCH_EP93XX || ARCH_INTEGRATOR || ARCH_S3C2410 || ARCH_IMX 
|| ARCH_AAEC2000 || ARCH_AT91RM9200
-       default y if ARCH_S3C2410 || ARCH_AT91RM9200
-       select CPU_32v4
-       select CPU_ABRT_EV4T
-       select CPU_CACHE_V4WT
-       select CPU_CACHE_VIVT
-       select CPU_COPY_V4WB
-       select CPU_TLB_V4WBI
+       bool "Support ARM920T processor"
+       depends on ARCH_EP93XX || ARCH_INTEGRATOR || CPU_S3C2410 || CPU_S3C2440 
|| CPU_S3C2442 || ARCH_IMX || ARCH_AAEC2000 || ARCH_AT91RM9200
+       default y if CPU_S3C2410 || CPU_S3C2440 || CPU_S3C2442 || 
ARCH_AT91RM9200
+       select CPU_32v4
+       select CPU_ABRT_EV4T
+       select CPU_CACHE_V4WT
+       select CPU_CACHE_VIVT
+       select CPU_COPY_V4WB if MMU
+       select CPU_TLB_V4WBI if MMU
        help
          The ARM920T is licensed to be produced by numerous vendors,
          and is used in the Maverick EP9312 and the Samsung S3C2410.
@@ -89,8 +89,8 @@ config CPU_ARM922T
        select CPU_ABRT_EV4T
        select CPU_CACHE_V4WT
        select CPU_CACHE_VIVT
-       select CPU_COPY_V4WB
-       select CPU_TLB_V4WBI
+       select CPU_COPY_V4WB if MMU
+       select CPU_TLB_V4WBI if MMU
        help
          The ARM922T is a version of the ARM920T, but with smaller
          instruction and data caches. It is used in Altera's
@@ -108,8 +108,8 @@ config CPU_ARM925T
        select CPU_ABRT_EV4T
        select CPU_CACHE_V4WT
        select CPU_CACHE_VIVT
-       select CPU_COPY_V4WB
-       select CPU_TLB_V4WBI
+       select CPU_COPY_V4WB if MMU
+       select CPU_TLB_V4WBI if MMU
        help
          The ARM925T is a mix between the ARM920T and ARM926T, but with
          different instruction and data caches. It is used in TI's OMAP
@@ -121,13 +121,13 @@ config CPU_ARM925T
 # ARM926T
 config CPU_ARM926T
        bool "Support ARM926T processor"
-       depends on ARCH_INTEGRATOR || ARCH_VERSATILE_PB || MACH_VERSATILE_AB || 
ARCH_OMAP730 || ARCH_OMAP16XX || MACH_REALVIEW_EB || ARCH_PNX4008 || ARCH_NETX
-       default y if ARCH_VERSATILE_PB || MACH_VERSATILE_AB || ARCH_OMAP730 || 
ARCH_OMAP16XX || ARCH_PNX4008 || ARCH_NETX
+       depends on ARCH_INTEGRATOR || ARCH_VERSATILE_PB || MACH_VERSATILE_AB || 
ARCH_OMAP730 || ARCH_OMAP16XX || MACH_REALVIEW_EB || ARCH_PNX4008 || ARCH_NETX 
|| CPU_S3C2412
+       default y if ARCH_VERSATILE_PB || MACH_VERSATILE_AB || ARCH_OMAP730 || 
ARCH_OMAP16XX || ARCH_PNX4008 || ARCH_NETX || CPU_S3C2412
        select CPU_32v5
        select CPU_ABRT_EV5TJ
        select CPU_CACHE_VIVT
-       select CPU_COPY_V4WB
-       select CPU_TLB_V4WBI
+       select CPU_COPY_V4WB if MMU
+       select CPU_TLB_V4WBI if MMU
        help
          This is a variant of the ARM920.  It has slightly different
          instruction sequences for cache and TLB operations.  Curiously,
@@ -144,8 +144,8 @@ config CPU_ARM1020
        select CPU_ABRT_EV4T
        select CPU_CACHE_V4WT
        select CPU_CACHE_VIVT
-       select CPU_COPY_V4WB
-       select CPU_TLB_V4WBI
+       select CPU_COPY_V4WB if MMU
+       select CPU_TLB_V4WBI if MMU
        help
          The ARM1020 is the 32K cached version of the ARM10 processor,
          with an addition of a floating-point unit.
@@ -161,8 +161,8 @@ config CPU_ARM1020E
        select CPU_ABRT_EV4T
        select CPU_CACHE_V4WT
        select CPU_CACHE_VIVT
-       select CPU_COPY_V4WB
-       select CPU_TLB_V4WBI
+       select CPU_COPY_V4WB if MMU
+       select CPU_TLB_V4WBI if MMU
        depends on n
 
 # ARM1022E
@@ -172,8 +172,8 @@ config CPU_ARM1022
        select CPU_32v5
        select CPU_ABRT_EV4T
        select CPU_CACHE_VIVT
-       select CPU_COPY_V4WB # can probably do better
-       select CPU_TLB_V4WBI
+       select CPU_COPY_V4WB if MMU # can probably do better
+       select CPU_TLB_V4WBI if MMU
        help
          The ARM1022E is an implementation of the ARMv5TE architecture
          based upon the ARM10 integer core with a 16KiB L1 Harvard cache,
@@ -189,8 +189,8 @@ config CPU_ARM1026
        select CPU_32v5
        select CPU_ABRT_EV5T # But need Jazelle, but EV5TJ ignores bit 10
        select CPU_CACHE_VIVT
-       select CPU_COPY_V4WB # can probably do better
-       select CPU_TLB_V4WBI
+       select CPU_COPY_V4WB if MMU # can probably do better
+       select CPU_TLB_V4WBI if MMU
        help
          The ARM1026EJ-S is an implementation of the ARMv5TEJ architecture
          based upon the ARM10 integer core.
@@ -207,8 +207,8 @@ config CPU_SA110
        select CPU_ABRT_EV4
        select CPU_CACHE_V4WB
        select CPU_CACHE_VIVT
-       select CPU_COPY_V4WB
-       select CPU_TLB_V4WB
+       select CPU_COPY_V4WB if MMU
+       select CPU_TLB_V4WB if MMU
        help
          The Intel StrongARM(R) SA-110 is a 32-bit microprocessor and
          is available at five speeds ranging from 100 MHz to 233 MHz.
@@ -227,7 +227,7 @@ config CPU_SA1100
        select CPU_ABRT_EV4
        select CPU_CACHE_V4WB
        select CPU_CACHE_VIVT
-       select CPU_TLB_V4WB
+       select CPU_TLB_V4WB if MMU
 
 # XScale
 config CPU_XSCALE
@@ -237,7 +237,7 @@ config CPU_XSCALE
        select CPU_32v5
        select CPU_ABRT_EV5T
        select CPU_CACHE_VIVT
-       select CPU_TLB_V4WBI
+       select CPU_TLB_V4WBI if MMU
 
 # XScale Core Version 3
 config CPU_XSC3
@@ -247,7 +247,7 @@ config CPU_XSC3
        select CPU_32v5
        select CPU_ABRT_EV5T
        select CPU_CACHE_VIVT
-       select CPU_TLB_V4WBI
+       select CPU_TLB_V4WBI if MMU
        select IO_36
 
 # ARMv6
@@ -258,8 +258,8 @@ config CPU_V6
        select CPU_ABRT_EV6
        select CPU_CACHE_V6
        select CPU_CACHE_VIPT
-       select CPU_COPY_V6
-       select CPU_TLB_V6
+       select CPU_COPY_V6 if MMU
+       select CPU_TLB_V6 if MMU
 
 # ARMv6k
 config CPU_32v6K
@@ -277,17 +277,17 @@ config CPU_32v6K
 # This defines the compiler instruction set which depends on the machine type.
 config CPU_32v3
        bool
-       select TLS_REG_EMUL if SMP
+       select TLS_REG_EMUL if SMP || !MMU
        select NEEDS_SYSCALL_FOR_CMPXCHG if SMP
 
 config CPU_32v4
        bool
-       select TLS_REG_EMUL if SMP
+       select TLS_REG_EMUL if SMP || !MMU
        select NEEDS_SYSCALL_FOR_CMPXCHG if SMP
 
 config CPU_32v5
        bool
-       select TLS_REG_EMUL if SMP
+       select TLS_REG_EMUL if SMP || !MMU
        select NEEDS_SYSCALL_FOR_CMPXCHG if SMP
 
 config CPU_32v6
@@ -334,6 +334,7 @@ config CPU_CACHE_VIPT
 config CPU_CACHE_VIPT
        bool
 
+if MMU
 # The copy-page model
 config CPU_COPY_V3
        bool
@@ -371,6 +372,8 @@ config CPU_TLB_V4WBI
 
 config CPU_TLB_V6
        bool
+
+endif
 
 #
 # CPU supports 36-bit I/O
diff -r c875b3d2c5e5 -r 29fd5adfdc07 arch/arm/mm/Makefile
--- a/arch/arm/mm/Makefile      Mon Aug 07 17:39:11 2006 -0400
+++ b/arch/arm/mm/Makefile      Mon Aug 07 18:15:57 2006 -0400
@@ -2,9 +2,15 @@
 # Makefile for the linux arm-specific parts of the memory manager.
 #
 
-obj-y                          := consistent.o extable.o fault-armv.o \
-                                  fault.o flush.o init.o ioremap.o mmap.o \
+obj-y                          := consistent.o extable.o fault.o init.o \
+                                  iomap.o
+
+obj-$(CONFIG_MMU)              += fault-armv.o flush.o ioremap.o mmap.o \
                                   mm-armv.o
+
+ifneq ($(CONFIG_MMU),y)
+obj-y                          += nommu.o
+endif
 
 obj-$(CONFIG_MODULES)          += proc-syms.o
 
diff -r c875b3d2c5e5 -r 29fd5adfdc07 arch/arm/mm/copypage-v3.S
--- a/arch/arm/mm/copypage-v3.S Mon Aug 07 17:39:11 2006 -0400
+++ b/arch/arm/mm/copypage-v3.S Mon Aug 07 18:15:57 2006 -0400
@@ -35,7 +35,7 @@ 1:    stmia   r0!, {r3, r4, ip, lr}           @       4
        stmia   r0!, {r3, r4, ip, lr}           @       4
        ldmneia r1!, {r3, r4, ip, lr}           @       4
        bne     1b                              @       1
-       LOADREGS(fd, sp!, {r4, pc})             @       3
+       ldmfd   sp!, {r4, pc}                   @       3
 
        .align  5
 /*
diff -r c875b3d2c5e5 -r 29fd5adfdc07 arch/arm/mm/init.c
--- a/arch/arm/mm/init.c        Mon Aug 07 17:39:11 2006 -0400
+++ b/arch/arm/mm/init.c        Mon Aug 07 18:15:57 2006 -0400
@@ -25,8 +25,6 @@
 
 #include <asm/mach/arch.h>
 #include <asm/mach/map.h>
-
-#define TABLE_SIZE     (2 * PTRS_PER_PTE * sizeof(pte_t))
 
 DEFINE_PER_CPU(struct mmu_gather, mmu_gathers);
 
diff -r c875b3d2c5e5 -r 29fd5adfdc07 arch/arm/mm/ioremap.c
--- a/arch/arm/mm/ioremap.c     Mon Aug 07 17:39:11 2006 -0400
+++ b/arch/arm/mm/ioremap.c     Mon Aug 07 18:15:57 2006 -0400
@@ -176,50 +176,3 @@ void __iounmap(void __iomem *addr)
        vunmap((void *)(PAGE_MASK & (unsigned long)addr));
 }
 EXPORT_SYMBOL(__iounmap);
-
-#ifdef __io
-void __iomem *ioport_map(unsigned long port, unsigned int nr)
-{
-       return __io(port);
-}
-EXPORT_SYMBOL(ioport_map);
-
-void ioport_unmap(void __iomem *addr)
-{
-}
-EXPORT_SYMBOL(ioport_unmap);
-#endif
-
-#ifdef CONFIG_PCI
-#include <linux/pci.h>
-#include <linux/ioport.h>
-
-void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long maxlen)
-{
-       unsigned long start = pci_resource_start(dev, bar);
-       unsigned long len   = pci_resource_len(dev, bar);
-       unsigned long flags = pci_resource_flags(dev, bar);
-
-       if (!len || !start)
-               return NULL;
-       if (maxlen && len > maxlen)
-               len = maxlen;
-       if (flags & IORESOURCE_IO)
-               return ioport_map(start, len);
-       if (flags & IORESOURCE_MEM) {
-               if (flags & IORESOURCE_CACHEABLE)
-                       return ioremap(start, len);
-               return ioremap_nocache(start, len);
-       }
-       return NULL;
-}
-EXPORT_SYMBOL(pci_iomap);
-
-void pci_iounmap(struct pci_dev *dev, void __iomem *addr)
-{
-       if ((unsigned long)addr >= VMALLOC_START &&
-           (unsigned long)addr < VMALLOC_END)
-               iounmap(addr);
-}
-EXPORT_SYMBOL(pci_iounmap);
-#endif
diff -r c875b3d2c5e5 -r 29fd5adfdc07 arch/arm/mm/proc-arm1020.S
--- a/arch/arm/mm/proc-arm1020.S        Mon Aug 07 17:39:11 2006 -0400
+++ b/arch/arm/mm/proc-arm1020.S        Mon Aug 07 18:15:57 2006 -0400
@@ -3,6 +3,7 @@
  *
  *  Copyright (C) 2000 ARM Limited
  *  Copyright (C) 2000 Deep Blue Solutions Ltd.
+ *  hacked for non-paged-MM by Hyok S. Choi, 2003.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -101,7 +102,9 @@ ENTRY(cpu_arm1020_reset)
        mov     ip, #0
        mcr     p15, 0, ip, c7, c7, 0           @ invalidate I,D caches
        mcr     p15, 0, ip, c7, c10, 4          @ drain WB
+#ifdef CONFIG_MMU
        mcr     p15, 0, ip, c8, c7, 0           @ invalidate I & D TLBs
+#endif
        mrc     p15, 0, ip, c1, c0, 0           @ ctrl register
        bic     ip, ip, #0x000f                 @ ............wcam
        bic     ip, ip, #0x1100                 @ ...i...s........
@@ -359,6 +362,7 @@ 1:  mcr     p15, 0, r0, c7, c10, 1          @ clean D
  */
        .align  5
 ENTRY(cpu_arm1020_switch_mm)
+#ifdef CONFIG_MMU
 #ifndef CONFIG_CPU_DCACHE_DISABLE
        mcr     p15, 0, r3, c7, c10, 4
        mov     r1, #0xF                        @ 16 segments
@@ -383,6 +387,7 @@ 2:  mov     ip, r3, LSL #26                 @ shift up entr
        mcr     p15, 0, r1, c7, c10, 4          @ drain WB
        mcr     p15, 0, r0, c2, c0, 0           @ load page table pointer
        mcr     p15, 0, r1, c8, c7, 0           @ invalidate I & D TLBs
+#endif /* CONFIG_MMU */
        mov     pc, lr
         
 /*
@@ -392,6 +397,7 @@ 2:  mov     ip, r3, LSL #26                 @ shift up entr
  */
        .align  5
 ENTRY(cpu_arm1020_set_pte)
+#ifdef CONFIG_MMU
        str     r1, [r0], #-2048                @ linux version
 
        eor     r1, r1, #L_PTE_PRESENT | L_PTE_YOUNG | L_PTE_WRITE | L_PTE_DIRTY
@@ -421,6 +427,7 @@ ENTRY(cpu_arm1020_set_pte)
        mcr     p15, 0, r0, c7, c10, 1          @ clean D entry
 #endif
        mcr     p15, 0, r0, c7, c10, 4          @ drain WB
+#endif /* CONFIG_MMU */
        mov     pc, lr
 
        __INIT
@@ -430,7 +437,9 @@ __arm1020_setup:
        mov     r0, #0
        mcr     p15, 0, r0, c7, c7              @ invalidate I,D caches on v4
        mcr     p15, 0, r0, c7, c10, 4          @ drain write buffer on v4
+#ifdef CONFIG_MMU
        mcr     p15, 0, r0, c8, c7              @ invalidate I,D TLBs on v4
+#endif
        mrc     p15, 0, r0, c1, c0              @ get control register v4
        ldr     r5, arm1020_cr1_clear
        bic     r0, r0, r5
diff -r c875b3d2c5e5 -r 29fd5adfdc07 arch/arm/mm/proc-arm1020e.S
--- a/arch/arm/mm/proc-arm1020e.S       Mon Aug 07 17:39:11 2006 -0400
+++ b/arch/arm/mm/proc-arm1020e.S       Mon Aug 07 18:15:57 2006 -0400
@@ -3,6 +3,7 @@
  *
  *  Copyright (C) 2000 ARM Limited
  *  Copyright (C) 2000 Deep Blue Solutions Ltd.
+ *  hacked for non-paged-MM by Hyok S. Choi, 2003.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -101,7 +102,9 @@ ENTRY(cpu_arm1020e_reset)
        mov     ip, #0
        mcr     p15, 0, ip, c7, c7, 0           @ invalidate I,D caches
        mcr     p15, 0, ip, c7, c10, 4          @ drain WB
+#ifdef CONFIG_MMU
        mcr     p15, 0, ip, c8, c7, 0           @ invalidate I & D TLBs
+#endif
        mrc     p15, 0, ip, c1, c0, 0           @ ctrl register
        bic     ip, ip, #0x000f                 @ ............wcam
        bic     ip, ip, #0x1100                 @ ...i...s........
@@ -344,6 +347,7 @@ 1:  mcr     p15, 0, r0, c7, c10, 1          @ clean D
  */
        .align  5
 ENTRY(cpu_arm1020e_switch_mm)
+#ifdef CONFIG_MMU
 #ifndef CONFIG_CPU_DCACHE_DISABLE
        mcr     p15, 0, r3, c7, c10, 4
        mov     r1, #0xF                        @ 16 segments
@@ -367,6 +371,7 @@ 2:  mov     ip, r3, LSL #26                 @ shift up entr
        mcr     p15, 0, r1, c7, c10, 4          @ drain WB
        mcr     p15, 0, r0, c2, c0, 0           @ load page table pointer
        mcr     p15, 0, r1, c8, c7, 0           @ invalidate I & D TLBs
+#endif
        mov     pc, lr
         
 /*
@@ -376,6 +381,7 @@ 2:  mov     ip, r3, LSL #26                 @ shift up entr
  */
        .align  5
 ENTRY(cpu_arm1020e_set_pte)
+#ifdef CONFIG_MMU
        str     r1, [r0], #-2048                @ linux version
 
        eor     r1, r1, #L_PTE_PRESENT | L_PTE_YOUNG | L_PTE_WRITE | L_PTE_DIRTY
@@ -403,6 +409,7 @@ ENTRY(cpu_arm1020e_set_pte)
 #ifndef CONFIG_CPU_DCACHE_DISABLE
        mcr     p15, 0, r0, c7, c10, 1          @ clean D entry
 #endif
+#endif /* CONFIG_MMU */
        mov     pc, lr
 
        __INIT
@@ -412,7 +419,9 @@ __arm1020e_setup:
        mov     r0, #0
        mcr     p15, 0, r0, c7, c7              @ invalidate I,D caches on v4
        mcr     p15, 0, r0, c7, c10, 4          @ drain write buffer on v4
+#ifdef CONFIG_MMU
        mcr     p15, 0, r0, c8, c7              @ invalidate I,D TLBs on v4
+#endif
        mrc     p15, 0, r0, c1, c0              @ get control register v4
        ldr     r5, arm1020e_cr1_clear
        bic     r0, r0, r5
diff -r c875b3d2c5e5 -r 29fd5adfdc07 arch/arm/mm/proc-arm1022.S
--- a/arch/arm/mm/proc-arm1022.S        Mon Aug 07 17:39:11 2006 -0400
+++ b/arch/arm/mm/proc-arm1022.S        Mon Aug 07 18:15:57 2006 -0400
@@ -3,6 +3,7 @@
  *
  *  Copyright (C) 2000 ARM Limited
  *  Copyright (C) 2000 Deep Blue Solutions Ltd.
+ *  hacked for non-paged-MM by Hyok S. Choi, 2003.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -90,7 +91,9 @@ ENTRY(cpu_arm1022_reset)
        mov     ip, #0
        mcr     p15, 0, ip, c7, c7, 0           @ invalidate I,D caches
        mcr     p15, 0, ip, c7, c10, 4          @ drain WB
+#ifdef CONFIG_MMU
        mcr     p15, 0, ip, c8, c7, 0           @ invalidate I & D TLBs
+#endif
        mrc     p15, 0, ip, c1, c0, 0           @ ctrl register
        bic     ip, ip, #0x000f                 @ ............wcam
        bic     ip, ip, #0x1100                 @ ...i...s........
@@ -333,6 +336,7 @@ 1:  mcr     p15, 0, r0, c7, c10, 1          @ clean D
  */
        .align  5
 ENTRY(cpu_arm1022_switch_mm)
+#ifdef CONFIG_MMU
 #ifndef CONFIG_CPU_DCACHE_DISABLE
        mov     r1, #(CACHE_DSEGMENTS - 1) << 5 @ 16 segments
 1:     orr     r3, r1, #(CACHE_DENTRIES - 1) << 26 @ 64 entries
@@ -349,6 +353,7 @@ 2:  mcr     p15, 0, r3, c7, c14, 2          @ clean+i
        mcr     p15, 0, r1, c7, c10, 4          @ drain WB
        mcr     p15, 0, r0, c2, c0, 0           @ load page table pointer
        mcr     p15, 0, r1, c8, c7, 0           @ invalidate I & D TLBs
+#endif
        mov     pc, lr
         
 /*
@@ -358,6 +363,7 @@ 2:  mcr     p15, 0, r3, c7, c14, 2          @ clean+i
  */
        .align  5
 ENTRY(cpu_arm1022_set_pte)
+#ifdef CONFIG_MMU
        str     r1, [r0], #-2048                @ linux version
 
        eor     r1, r1, #L_PTE_PRESENT | L_PTE_YOUNG | L_PTE_WRITE | L_PTE_DIRTY
@@ -385,6 +391,7 @@ ENTRY(cpu_arm1022_set_pte)
 #ifndef CONFIG_CPU_DCACHE_DISABLE
        mcr     p15, 0, r0, c7, c10, 1          @ clean D entry
 #endif
+#endif /* CONFIG_MMU */
        mov     pc, lr
 
        __INIT
@@ -394,7 +401,9 @@ __arm1022_setup:
        mov     r0, #0
        mcr     p15, 0, r0, c7, c7              @ invalidate I,D caches on v4
        mcr     p15, 0, r0, c7, c10, 4          @ drain write buffer on v4
+#ifdef CONFIG_MMU
        mcr     p15, 0, r0, c8, c7              @ invalidate I,D TLBs on v4
+#endif
        mrc     p15, 0, r0, c1, c0              @ get control register v4
        ldr     r5, arm1022_cr1_clear
        bic     r0, r0, r5
diff -r c875b3d2c5e5 -r 29fd5adfdc07 arch/arm/mm/proc-arm1026.S
--- a/arch/arm/mm/proc-arm1026.S        Mon Aug 07 17:39:11 2006 -0400
+++ b/arch/arm/mm/proc-arm1026.S        Mon Aug 07 18:15:57 2006 -0400
@@ -3,6 +3,7 @@
  *
  *  Copyright (C) 2000 ARM Limited
  *  Copyright (C) 2000 Deep Blue Solutions Ltd.
+ *  hacked for non-paged-MM by Hyok S. Choi, 2003.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -90,7 +91,9 @@ ENTRY(cpu_arm1026_reset)
        mov     ip, #0
        mcr     p15, 0, ip, c7, c7, 0           @ invalidate I,D caches
        mcr     p15, 0, ip, c7, c10, 4          @ drain WB
+#ifdef CONFIG_MMU
        mcr     p15, 0, ip, c8, c7, 0           @ invalidate I & D TLBs
+#endif
        mrc     p15, 0, ip, c1, c0, 0           @ ctrl register
        bic     ip, ip, #0x000f                 @ ............wcam
        bic     ip, ip, #0x1100                 @ ...i...s........
@@ -327,6 +330,7 @@ 1:  mcr     p15, 0, r0, c7, c10, 1          @ clean D
  */
        .align  5
 ENTRY(cpu_arm1026_switch_mm)
+#ifdef CONFIG_MMU
        mov     r1, #0
 #ifndef CONFIG_CPU_DCACHE_DISABLE
 1:     mrc     p15, 0, r15, c7, c14, 3         @ test, clean, invalidate
@@ -338,6 +342,7 @@ 1:  mrc     p15, 0, r15, c7, c14, 3         @ test, 
        mcr     p15, 0, r1, c7, c10, 4          @ drain WB
        mcr     p15, 0, r0, c2, c0, 0           @ load page table pointer
        mcr     p15, 0, r1, c8, c7, 0           @ invalidate I & D TLBs
+#endif
        mov     pc, lr
         
 /*
@@ -347,6 +352,7 @@ 1:  mrc     p15, 0, r15, c7, c14, 3         @ test, 
  */
        .align  5
 ENTRY(cpu_arm1026_set_pte)
+#ifdef CONFIG_MMU
        str     r1, [r0], #-2048                @ linux version
 
        eor     r1, r1, #L_PTE_PRESENT | L_PTE_YOUNG | L_PTE_WRITE | L_PTE_DIRTY
@@ -374,6 +380,7 @@ ENTRY(cpu_arm1026_set_pte)
 #ifndef CONFIG_CPU_DCACHE_DISABLE
        mcr     p15, 0, r0, c7, c10, 1          @ clean D entry
 #endif
+#endif /* CONFIG_MMU */
        mov     pc, lr
 
 
@@ -384,8 +391,10 @@ __arm1026_setup:
        mov     r0, #0
        mcr     p15, 0, r0, c7, c7              @ invalidate I,D caches on v4
        mcr     p15, 0, r0, c7, c10, 4          @ drain write buffer on v4
+#ifdef CONFIG_MMU
        mcr     p15, 0, r0, c8, c7              @ invalidate I,D TLBs on v4
        mcr     p15, 0, r4, c2, c0              @ load page table pointer
+#endif
 #ifdef CONFIG_CPU_DCACHE_WRITETHROUGH
        mov     r0, #4                          @ explicitly disable writeback
        mcr     p15, 7, r0, c15, c0, 0
diff -r c875b3d2c5e5 -r 29fd5adfdc07 arch/arm/mm/proc-arm6_7.S
--- a/arch/arm/mm/proc-arm6_7.S Mon Aug 07 17:39:11 2006 -0400
+++ b/arch/arm/mm/proc-arm6_7.S Mon Aug 07 18:15:57 2006 -0400
@@ -2,6 +2,7 @@
  *  linux/arch/arm/mm/proc-arm6,7.S
  *
  *  Copyright (C) 1997-2000 Russell King
+ *  hacked for non-paged-MM by Hyok S. Choi, 2003.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License version 2 as
@@ -199,10 +200,12 @@ ENTRY(cpu_arm7_do_idle)
  */
 ENTRY(cpu_arm6_switch_mm)
 ENTRY(cpu_arm7_switch_mm)
+#ifdef CONFIG_MMU
                mov     r1, #0
                mcr     p15, 0, r1, c7, c0, 0           @ flush cache
                mcr     p15, 0, r0, c2, c0, 0           @ update page table ptr
                mcr     p15, 0, r1, c5, c0, 0           @ flush TLBs
+#endif
                mov     pc, lr
 
 /*
@@ -214,6 +217,7 @@ ENTRY(cpu_arm7_switch_mm)
                .align  5
 ENTRY(cpu_arm6_set_pte)
 ENTRY(cpu_arm7_set_pte)
+#ifdef CONFIG_MMU
                str     r1, [r0], #-2048                @ linux version
 
                eor     r1, r1, #L_PTE_PRESENT | L_PTE_YOUNG | L_PTE_WRITE | 
L_PTE_DIRTY
@@ -232,6 +236,7 @@ ENTRY(cpu_arm7_set_pte)
                movne   r2, #0
 
                str     r2, [r0]                        @ hardware version
+#endif /* CONFIG_MMU */
                mov     pc, lr
 
 /*
@@ -243,7 +248,9 @@ ENTRY(cpu_arm7_reset)
 ENTRY(cpu_arm7_reset)
                mov     r1, #0
                mcr     p15, 0, r1, c7, c0, 0           @ flush cache
+#ifdef CONFIG_MMU
                mcr     p15, 0, r1, c5, c0, 0           @ flush TLB
+#endif
                mov     r1, #0x30
                mcr     p15, 0, r1, c1, c0, 0           @ turn off MMU etc
                mov     pc, r0
@@ -253,19 +260,27 @@ ENTRY(cpu_arm7_reset)
                .type   __arm6_setup, #function
 __arm6_setup:  mov     r0, #0
                mcr     p15, 0, r0, c7, c0              @ flush caches on v3
+#ifdef CONFIG_MMU
                mcr     p15, 0, r0, c5, c0              @ flush TLBs on v3
                mov     r0, #0x3d                       @ . ..RS BLDP WCAM
                orr     r0, r0, #0x100                  @ . ..01 0011 1101
+#else
+               mov     r0, #0x3c                       @ . ..RS BLDP WCA.
+#endif
                mov     pc, lr
                .size   __arm6_setup, . - __arm6_setup
 
                .type   __arm7_setup, #function
 __arm7_setup:  mov     r0, #0
                mcr     p15, 0, r0, c7, c0              @ flush caches on v3
+#ifdef CONFIG_MMU
                mcr     p15, 0, r0, c5, c0              @ flush TLBs on v3
                mcr     p15, 0, r0, c3, c0              @ load domain access 
register
                mov     r0, #0x7d                       @ . ..RS BLDP WCAM
                orr     r0, r0, #0x100                  @ . ..01 0111 1101
+#else
+               mov     r0, #0x7c                       @ . ..RS BLDP WCA.
+#endif
                mov     pc, lr
                .size   __arm7_setup, . - __arm7_setup
 
diff -r c875b3d2c5e5 -r 29fd5adfdc07 arch/arm/mm/proc-arm720.S
--- a/arch/arm/mm/proc-arm720.S Mon Aug 07 17:39:11 2006 -0400
+++ b/arch/arm/mm/proc-arm720.S Mon Aug 07 18:15:57 2006 -0400
@@ -4,6 +4,7 @@
  *  Copyright (C) 2000 Steve Hill (sjhill@xxxxxxxx)
  *                     Rob Scott (rscott@xxxxxxxxxxxxxx)
  *  Copyright (C) 2000 ARM Limited, Deep Blue Solutions Ltd.
+ *  hacked for non-paged-MM by Hyok S. Choi, 2004.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -29,6 +30,7 @@
  *                     out of 'proc-arm6,7.S' per RMK discussion
  *   07-25-2000 SJH    Added idle function.
  *   08-25-2000        DBS     Updated for integration of ARM Ltd version.
+ *   04-20-2004 HSC    modified for non-paged memory management mode.
  */
 #include <linux/linkage.h>
 #include <linux/init.h>
@@ -75,10 +77,12 @@ ENTRY(cpu_arm720_do_idle)
  *          the new.
  */
 ENTRY(cpu_arm720_switch_mm)
+#ifdef CONFIG_MMU
                mov     r1, #0
                mcr     p15, 0, r1, c7, c7, 0           @ invalidate cache
                mcr     p15, 0, r0, c2, c0, 0           @ update page table ptr
                mcr     p15, 0, r1, c8, c7, 0           @ flush TLB (v4)
+#endif
                mov     pc, lr
 
 /*
@@ -89,6 +93,7 @@ ENTRY(cpu_arm720_switch_mm)
  */
                .align  5
 ENTRY(cpu_arm720_set_pte)
+#ifdef CONFIG_MMU
                str     r1, [r0], #-2048                @ linux version
 
                eor     r1, r1, #L_PTE_PRESENT | L_PTE_YOUNG | L_PTE_WRITE | 
L_PTE_DIRTY
@@ -107,6 +112,7 @@ ENTRY(cpu_arm720_set_pte)
                movne   r2, #0
 
                str     r2, [r0]                        @ hardware version
+#endif
                mov     pc, lr
 
 /*
@@ -117,7 +123,9 @@ ENTRY(cpu_arm720_reset)
 ENTRY(cpu_arm720_reset)
                mov     ip, #0
                mcr     p15, 0, ip, c7, c7, 0           @ invalidate cache
+#ifdef CONFIG_MMU
                mcr     p15, 0, ip, c8, c7, 0           @ flush TLB (v4)
+#endif
                mrc     p15, 0, ip, c1, c0, 0           @ get ctrl register
                bic     ip, ip, #0x000f                 @ ............wcam
                bic     ip, ip, #0x2100                 @ ..v....s........
@@ -130,7 +138,9 @@ __arm710_setup:
 __arm710_setup:
        mov     r0, #0
        mcr     p15, 0, r0, c7, c7, 0           @ invalidate caches
+#ifdef CONFIG_MMU
        mcr     p15, 0, r0, c8, c7, 0           @ flush TLB (v4)
+#endif
        mrc     p15, 0, r0, c1, c0              @ get control register
        ldr     r5, arm710_cr1_clear
        bic     r0, r0, r5
@@ -156,7 +166,9 @@ __arm720_setup:
 __arm720_setup:
        mov     r0, #0
        mcr     p15, 0, r0, c7, c7, 0           @ invalidate caches
+#ifdef CONFIG_MMU
        mcr     p15, 0, r0, c8, c7, 0           @ flush TLB (v4)
+#endif
        mrc     p15, 0, r0, c1, c0              @ get control register
        ldr     r5, arm720_cr1_clear
        bic     r0, r0, r5
diff -r c875b3d2c5e5 -r 29fd5adfdc07 arch/arm/mm/proc-arm920.S
--- a/arch/arm/mm/proc-arm920.S Mon Aug 07 17:39:11 2006 -0400
+++ b/arch/arm/mm/proc-arm920.S Mon Aug 07 18:15:57 2006 -0400
@@ -3,6 +3,7 @@
  *
  *  Copyright (C) 1999,2000 ARM Limited
  *  Copyright (C) 2000 Deep Blue Solutions Ltd.
+ *  hacked for non-paged-MM by Hyok S. Choi, 2003.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -97,7 +98,9 @@ ENTRY(cpu_arm920_reset)
        mov     ip, #0
        mcr     p15, 0, ip, c7, c7, 0           @ invalidate I,D caches
        mcr     p15, 0, ip, c7, c10, 4          @ drain WB
+#ifdef CONFIG_MMU
        mcr     p15, 0, ip, c8, c7, 0           @ invalidate I & D TLBs
+#endif
        mrc     p15, 0, ip, c1, c0, 0           @ ctrl register
        bic     ip, ip, #0x000f                 @ ............wcam
        bic     ip, ip, #0x1100                 @ ...i...s........
@@ -317,6 +320,7 @@ 1:  mcr     p15, 0, r0, c7, c10, 1          @ clean D
  */
        .align  5
 ENTRY(cpu_arm920_switch_mm)
+#ifdef CONFIG_MMU
        mov     ip, #0
 #ifdef CONFIG_CPU_DCACHE_WRITETHROUGH
        mcr     p15, 0, ip, c7, c6, 0           @ invalidate D cache
@@ -337,6 +341,7 @@ 2:  mcr     p15, 0, r3, c7, c14, 2          @ clean &
        mcr     p15, 0, ip, c7, c10, 4          @ drain WB
        mcr     p15, 0, r0, c2, c0, 0           @ load page table pointer
        mcr     p15, 0, ip, c8, c7, 0           @ invalidate I & D TLBs
+#endif
        mov     pc, lr
 
 /*
@@ -346,6 +351,7 @@ 2:  mcr     p15, 0, r3, c7, c14, 2          @ clean &
  */
        .align  5
 ENTRY(cpu_arm920_set_pte)
+#ifdef CONFIG_MMU
        str     r1, [r0], #-2048                @ linux version
 
        eor     r1, r1, #L_PTE_PRESENT | L_PTE_YOUNG | L_PTE_WRITE | L_PTE_DIRTY
@@ -372,6 +378,7 @@ ENTRY(cpu_arm920_set_pte)
        mov     r0, r0
        mcr     p15, 0, r0, c7, c10, 1          @ clean D entry
        mcr     p15, 0, r0, c7, c10, 4          @ drain WB
+#endif /* CONFIG_MMU */
        mov     pc, lr
 
        __INIT
@@ -381,7 +388,9 @@ __arm920_setup:
        mov     r0, #0
        mcr     p15, 0, r0, c7, c7              @ invalidate I,D caches on v4
        mcr     p15, 0, r0, c7, c10, 4          @ drain write buffer on v4
+#ifdef CONFIG_MMU
        mcr     p15, 0, r0, c8, c7              @ invalidate I,D TLBs on v4
+#endif
        mrc     p15, 0, r0, c1, c0              @ get control register v4
        ldr     r5, arm920_cr1_clear
        bic     r0, r0, r5
diff -r c875b3d2c5e5 -r 29fd5adfdc07 arch/arm/mm/proc-arm922.S
--- a/arch/arm/mm/proc-arm922.S Mon Aug 07 17:39:11 2006 -0400
+++ b/arch/arm/mm/proc-arm922.S Mon Aug 07 18:15:57 2006 -0400
@@ -4,6 +4,7 @@
  *  Copyright (C) 1999,2000 ARM Limited
  *  Copyright (C) 2000 Deep Blue Solutions Ltd.
  *  Copyright (C) 2001 Altera Corporation
+ *  hacked for non-paged-MM by Hyok S. Choi, 2003.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -99,7 +100,9 @@ ENTRY(cpu_arm922_reset)
        mov     ip, #0
        mcr     p15, 0, ip, c7, c7, 0           @ invalidate I,D caches
        mcr     p15, 0, ip, c7, c10, 4          @ drain WB
+#ifdef CONFIG_MMU
        mcr     p15, 0, ip, c8, c7, 0           @ invalidate I & D TLBs
+#endif
        mrc     p15, 0, ip, c1, c0, 0           @ ctrl register
        bic     ip, ip, #0x000f                 @ ............wcam
        bic     ip, ip, #0x1100                 @ ...i...s........
@@ -321,6 +324,7 @@ 1:  mcr     p15, 0, r0, c7, c10, 1          @ clean D
  */
        .align  5
 ENTRY(cpu_arm922_switch_mm)
+#ifdef CONFIG_MMU
        mov     ip, #0
 #ifdef CONFIG_CPU_DCACHE_WRITETHROUGH
        mcr     p15, 0, ip, c7, c6, 0           @ invalidate D cache
@@ -341,6 +345,7 @@ 2:  mcr     p15, 0, r3, c7, c14, 2          @ clean &
        mcr     p15, 0, ip, c7, c10, 4          @ drain WB
        mcr     p15, 0, r0, c2, c0, 0           @ load page table pointer
        mcr     p15, 0, ip, c8, c7, 0           @ invalidate I & D TLBs
+#endif
        mov     pc, lr
 
 /*
@@ -350,6 +355,7 @@ 2:  mcr     p15, 0, r3, c7, c14, 2          @ clean &
  */
        .align  5
 ENTRY(cpu_arm922_set_pte)
+#ifdef CONFIG_MMU
        str     r1, [r0], #-2048                @ linux version
 
        eor     r1, r1, #L_PTE_PRESENT | L_PTE_YOUNG | L_PTE_WRITE | L_PTE_DIRTY
@@ -376,6 +382,7 @@ ENTRY(cpu_arm922_set_pte)
        mov     r0, r0
        mcr     p15, 0, r0, c7, c10, 1          @ clean D entry
        mcr     p15, 0, r0, c7, c10, 4          @ drain WB
+#endif /* CONFIG_MMU */
        mov     pc, lr
 
        __INIT
@@ -385,7 +392,9 @@ __arm922_setup:
        mov     r0, #0
        mcr     p15, 0, r0, c7, c7              @ invalidate I,D caches on v4
        mcr     p15, 0, r0, c7, c10, 4          @ drain write buffer on v4
+#ifdef CONFIG_MMU
        mcr     p15, 0, r0, c8, c7              @ invalidate I,D TLBs on v4
+#endif
        mrc     p15, 0, r0, c1, c0              @ get control register v4
        ldr     r5, arm922_cr1_clear
        bic     r0, r0, r5
diff -r c875b3d2c5e5 -r 29fd5adfdc07 arch/arm/mm/proc-arm925.S
--- a/arch/arm/mm/proc-arm925.S Mon Aug 07 17:39:11 2006 -0400
+++ b/arch/arm/mm/proc-arm925.S Mon Aug 07 18:15:57 2006 -0400
@@ -8,6 +8,8 @@
  *
  *  Update for Linux-2.6 and cache flush improvements
  *  Copyright (C) 2004 Nokia Corporation by Tony Lindgren <tony@xxxxxxxxxxx>
+ *
+ *  hacked for non-paged-MM by Hyok S. Choi, 2004.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -122,7 +124,9 @@ ENTRY(cpu_arm925_reset)
        mov     ip, #0
        mcr     p15, 0, ip, c7, c7, 0           @ invalidate I,D caches
        mcr     p15, 0, ip, c7, c10, 4          @ drain WB
+#ifdef CONFIG_MMU
        mcr     p15, 0, ip, c8, c7, 0           @ invalidate I & D TLBs
+#endif
        mrc     p15, 0, ip, c1, c0, 0           @ ctrl register
        bic     ip, ip, #0x000f                 @ ............wcam
        bic     ip, ip, #0x1100                 @ ...i...s........
@@ -369,6 +373,7 @@ 1:  mcr     p15, 0, r0, c7, c10, 1          @ clean D
  */
        .align  5
 ENTRY(cpu_arm925_switch_mm)
+#ifdef CONFIG_MMU
        mov     ip, #0
 #ifdef CONFIG_CPU_DCACHE_WRITETHROUGH
        mcr     p15, 0, ip, c7, c6, 0           @ invalidate D cache
@@ -383,6 +388,7 @@ 2:  mcr     p15, 0, r3, c7, c14, 2          @ clean &
        mcr     p15, 0, ip, c7, c10, 4          @ drain WB
        mcr     p15, 0, r0, c2, c0, 0           @ load page table pointer
        mcr     p15, 0, ip, c8, c7, 0           @ invalidate I & D TLBs
+#endif
        mov     pc, lr
 
 /*
@@ -392,6 +398,7 @@ 2:  mcr     p15, 0, r3, c7, c14, 2          @ clean &
  */
        .align  5
 ENTRY(cpu_arm925_set_pte)
+#ifdef CONFIG_MMU
        str     r1, [r0], #-2048                @ linux version
 
        eor     r1, r1, #L_PTE_PRESENT | L_PTE_YOUNG | L_PTE_WRITE | L_PTE_DIRTY
@@ -420,6 +427,7 @@ ENTRY(cpu_arm925_set_pte)
        mcr     p15, 0, r0, c7, c10, 1          @ clean D entry
 #endif
        mcr     p15, 0, r0, c7, c10, 4          @ drain WB
+#endif /* CONFIG_MMU */
        mov     pc, lr
 
        __INIT
@@ -438,7 +446,9 @@ __arm925_setup:
        mov     r0, #0
        mcr     p15, 0, r0, c7, c7              @ invalidate I,D caches on v4
        mcr     p15, 0, r0, c7, c10, 4          @ drain write buffer on v4
+#ifdef CONFIG_MMU
        mcr     p15, 0, r0, c8, c7              @ invalidate I,D TLBs on v4
+#endif
 
 #ifdef CONFIG_CPU_DCACHE_WRITETHROUGH
        mov     r0, #4                          @ disable write-back on caches 
explicitly
diff -r c875b3d2c5e5 -r 29fd5adfdc07 arch/arm/mm/proc-arm926.S
--- a/arch/arm/mm/proc-arm926.S Mon Aug 07 17:39:11 2006 -0400
+++ b/arch/arm/mm/proc-arm926.S Mon Aug 07 18:15:57 2006 -0400
@@ -3,6 +3,7 @@
  *
  *  Copyright (C) 1999-2001 ARM Limited
  *  Copyright (C) 2000 Deep Blue Solutions Ltd.
+ *  hacked for non-paged-MM by Hyok S. Choi, 2003.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -85,7 +86,9 @@ ENTRY(cpu_arm926_reset)
        mov     ip, #0
        mcr     p15, 0, ip, c7, c7, 0           @ invalidate I,D caches
        mcr     p15, 0, ip, c7, c10, 4          @ drain WB
+#ifdef CONFIG_MMU
        mcr     p15, 0, ip, c8, c7, 0           @ invalidate I & D TLBs
+#endif
        mrc     p15, 0, ip, c1, c0, 0           @ ctrl register
        bic     ip, ip, #0x000f                 @ ............wcam
        bic     ip, ip, #0x1100                 @ ...i...s........
@@ -329,6 +332,7 @@ 1:  mcr     p15, 0, r0, c7, c10, 1          @ clean D
  */
        .align  5
 ENTRY(cpu_arm926_switch_mm)
+#ifdef CONFIG_MMU
        mov     ip, #0
 #ifdef CONFIG_CPU_DCACHE_WRITETHROUGH
        mcr     p15, 0, ip, c7, c6, 0           @ invalidate D cache
@@ -341,6 +345,7 @@ 1:  mrc     p15, 0, r15, c7, c14, 3         @ test,c
        mcr     p15, 0, ip, c7, c10, 4          @ drain WB
        mcr     p15, 0, r0, c2, c0, 0           @ load page table pointer
        mcr     p15, 0, ip, c8, c7, 0           @ invalidate I & D TLBs
+#endif
        mov     pc, lr
 
 /*
@@ -350,6 +355,7 @@ 1:  mrc     p15, 0, r15, c7, c14, 3         @ test,c
  */
        .align  5
 ENTRY(cpu_arm926_set_pte)
+#ifdef CONFIG_MMU
        str     r1, [r0], #-2048                @ linux version
 
        eor     r1, r1, #L_PTE_PRESENT | L_PTE_YOUNG | L_PTE_WRITE | L_PTE_DIRTY
@@ -378,6 +384,7 @@ ENTRY(cpu_arm926_set_pte)
        mcr     p15, 0, r0, c7, c10, 1          @ clean D entry
 #endif
        mcr     p15, 0, r0, c7, c10, 4          @ drain WB
+#endif
        mov     pc, lr

_______________________________________________
Xen-ppc-devel mailing list
Xen-ppc-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-ppc-devel

<Prev in Thread] Current Thread [Next in Thread>
  • [XenPPC] [linux-ppc-2.6] merge with linux-2.6.tip-xen.hg and building, Xen patchbot-linux-ppc-2 . 6 <=