Merge git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/v4l-dvb

* git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/v4l-dvb: (98 commits)
  V4L/DVB (8549): mxl5007: Fix an error at include file
  V4L/DVB (8548): pwc: Fix compilation
  V4L/DVB (8546): add tuner-3036 and dpc7146 drivers to feature-removal-schedule.txt
  V4L/DVB (8546): saa7146: fix read from uninitialized memory
  V4L/DVB (8544): gspca: probe/open race.
  V4L/DVB (8543): em28xx: Rename #define for Compro VideoMate ForYou/Stereo
  V4L/DVB (8542): em28xx: AMD ATI TV Wonder HD 600 entry at cards struct is duplicated
  V4L/DVB (8541): em28xx: HVR-950 entry is duplicated.
  V4L/DVB (8540): em28xx-cards: Add Compro VideoMate ForYou/Stereo model
  V4L/DVB (8539): em28xx-cards: New supported IDs for analog models
  V4L/DVB (8538): em28xx-cards: Add GrabBeeX+ USB2800 model
  V4L/DVB (8534): remove select's of FW_LOADER
  V4L/DVB (8522): videodev2: Fix merge conflict
  V4L/DVB (8532): mxl5007t: remove excessive locks
  V4L/DVB (8531): mxl5007t: move i2c gate handling outside of mutex protected code blocks
  V4L/DVB (8530): au0828: add support for new revision of HVR950Q
  V4L/DVB (8529): mxl5007t: enable _init and _sleep power management functionality
  V4L/DVB (8528): add support for MaxLinear MxL5007T silicon tuner
  V4L/DVB (8526): saa7146: fix VIDIOC_ENUM_FMT
  V4L/DVB (8525): fix a few assorted spelling mistakes.
  ...
diff --git a/Documentation/SubmittingPatches b/Documentation/SubmittingPatches
index 118ca6e..f79ad9f 100644
--- a/Documentation/SubmittingPatches
+++ b/Documentation/SubmittingPatches
@@ -528,7 +528,33 @@
 references.
 
 
+16) Sending "git pull" requests  (from Linus emails)
 
+Please write the git repo address and branch name alone on the same line
+so that I can't even by mistake pull from the wrong branch, and so
+that a triple-click just selects the whole thing.
+
+So the proper format is something along the lines of:
+
+	"Please pull from
+
+		git://jdelvare.pck.nerim.net/jdelvare-2.6 i2c-for-linus
+
+	 to get these changes:"
+
+so that I don't have to hunt-and-peck for the address and inevitably
+get it wrong (actually, I've only gotten it wrong a few times, and
+checking against the diffstat tells me when I get it wrong, but I'm
+just a lot more comfortable when I don't have to "look for" the right
+thing to pull, and double-check that I have the right branch-name).
+
+
+Please use "git diff -M --stat --summary" to generate the diffstat:
+the -M enables rename detection, and the summary enables a summary of
+new/deleted or renamed files.
+
+With rename detection, the statistics are rather different [...]
+because git will notice that a fair number of the changes are renames.
 
 -----------------------------------
 SECTION 2 - HINTS, TIPS, AND TRICKS
diff --git a/Documentation/i2c/upgrading-clients b/Documentation/i2c/upgrading-clients
new file mode 100644
index 0000000..9a45f9b
--- /dev/null
+++ b/Documentation/i2c/upgrading-clients
@@ -0,0 +1,281 @@
+Upgrading I2C Drivers to the new 2.6 Driver Model
+=================================================
+
+Ben Dooks <ben-linux@fluff.org>
+
+Introduction
+------------
+
+This guide outlines how to alter existing Linux 2.6 client drivers from
+the old to the new new binding methods.
+
+
+Example old-style driver
+------------------------
+
+
+struct example_state {
+	struct i2c_client	client;
+	....
+};
+
+static struct i2c_driver example_driver;
+
+static unsigned short ignore[] = { I2C_CLIENT_END };
+static unsigned short normal_addr[] = { OUR_ADDR, I2C_CLIENT_END };
+
+I2C_CLIENT_INSMOD;
+
+static int example_attach(struct i2c_adapter *adap, int addr, int kind)
+{
+	struct example_state *state;
+	struct device *dev = &adap->dev;  /* to use for dev_ reports */
+	int ret;
+
+	state = kzalloc(sizeof(struct example_state), GFP_KERNEL);
+	if (state == NULL) {
+		dev_err(dev, "failed to create our state\n");
+		return -ENOMEM;
+	}
+
+	example->client.addr    = addr;
+	example->client.flags   = 0;
+	example->client.adapter = adap;
+
+	i2c_set_clientdata(&state->i2c_client, state);
+	strlcpy(client->i2c_client.name, "example", I2C_NAME_SIZE);
+
+	ret = i2c_attach_client(&state->i2c_client);
+	if (ret < 0) {
+		dev_err(dev, "failed to attach client\n");
+		kfree(state);
+		return ret;
+	}
+
+	dev = &state->i2c_client.dev;
+
+	/* rest of the initialisation goes here. */
+
+	dev_info(dev, "example client created\n");
+
+	return 0;
+}
+
+static int __devexit example_detach(struct i2c_client *client)
+{
+	struct example_state *state = i2c_get_clientdata(client);
+
+	i2c_detach_client(client);
+	kfree(state);
+	return 0;
+}
+
+static int example_attach_adapter(struct i2c_adapter *adap)
+{
+	return i2c_probe(adap, &addr_data, example_attach);
+}
+
+static struct i2c_driver example_driver = {
+ 	.driver		= {
+		.owner		= THIS_MODULE,
+		.name		= "example",
+	},
+	.attach_adapter = example_attach_adapter,
+	.detach_client	= __devexit_p(example_detach),
+	.suspend	= example_suspend,
+	.resume		= example_resume,
+};
+
+
+Updating the client
+-------------------
+
+The new style binding model will check against a list of supported
+devices and their associated address supplied by the code registering
+the busses. This means that the driver .attach_adapter and
+.detach_adapter methods can be removed, along with the addr_data,
+as follows:
+
+- static struct i2c_driver example_driver;
+
+- static unsigned short ignore[] = { I2C_CLIENT_END };
+- static unsigned short normal_addr[] = { OUR_ADDR, I2C_CLIENT_END };
+
+- I2C_CLIENT_INSMOD;
+
+- static int example_attach_adapter(struct i2c_adapter *adap)
+- {
+- 	return i2c_probe(adap, &addr_data, example_attach);
+- }
+
+ static struct i2c_driver example_driver = {
+-	.attach_adapter = example_attach_adapter,
+-	.detach_client	= __devexit_p(example_detach),
+ }
+
+Add the probe and remove methods to the i2c_driver, as so:
+
+ static struct i2c_driver example_driver = {
++	.probe		= example_probe,
++	.remove		= __devexit_p(example_remove),
+ }
+
+Change the example_attach method to accept the new parameters
+which include the i2c_client that it will be working with:
+
+- static int example_attach(struct i2c_adapter *adap, int addr, int kind)
++ static int example_probe(struct i2c_client *client,
++			   const struct i2c_device_id *id)
+
+Change the name of example_attach to example_probe to align it with the
+i2c_driver entry names. The rest of the probe routine will now need to be
+changed as the i2c_client has already been setup for use.
+
+The necessary client fields have already been setup before
+the probe function is called, so the following client setup
+can be removed:
+
+-	example->client.addr    = addr;
+-	example->client.flags   = 0;
+-	example->client.adapter = adap;
+-
+-	strlcpy(client->i2c_client.name, "example", I2C_NAME_SIZE);
+
+The i2c_set_clientdata is now:
+
+-	i2c_set_clientdata(&state->client, state);
++	i2c_set_clientdata(client, state);
+
+The call to i2c_attach_client is no longer needed, if the probe
+routine exits successfully, then the driver will be automatically
+attached by the core. Change the probe routine as so:
+
+-	ret = i2c_attach_client(&state->i2c_client);
+-	if (ret < 0) {
+-		dev_err(dev, "failed to attach client\n");
+-		kfree(state);
+-		return ret;
+-	}
+
+
+Remove the storage of 'struct i2c_client' from the 'struct example_state'
+as we are provided with the i2c_client in our example_probe. Instead we
+store a pointer to it for when it is needed.
+
+struct example_state {
+-	struct i2c_client	client;
++	struct i2c_client	*client;
+
+the new i2c client as so:
+
+-	struct device *dev = &adap->dev;  /* to use for dev_ reports */
++ 	struct device *dev = &i2c_client->dev;  /* to use for dev_ reports */
+
+And remove the change after our client is attached, as the driver no
+longer needs to register a new client structure with the core:
+
+-	dev = &state->i2c_client.dev;
+
+In the probe routine, ensure that the new state has the client stored
+in it:
+
+static int example_probe(struct i2c_client *i2c_client,
+			 const struct i2c_device_id *id)
+{
+	struct example_state *state;
+ 	struct device *dev = &i2c_client->dev;
+	int ret;
+
+	state = kzalloc(sizeof(struct example_state), GFP_KERNEL);
+	if (state == NULL) {
+		dev_err(dev, "failed to create our state\n");
+		return -ENOMEM;
+	}
+
++	state->client = i2c_client;
+
+Update the detach method, by changing the name to _remove and
+to delete the i2c_detach_client call. It is possible that you
+can also remove the ret variable as it is not not needed for
+any of the core functions.
+
+- static int __devexit example_detach(struct i2c_client *client)
++ static int __devexit example_remove(struct i2c_client *client)
+{
+	struct example_state *state = i2c_get_clientdata(client);
+
+-	i2c_detach_client(client);
+
+And finally ensure that we have the correct ID table for the i2c-core
+and other utilities:
+
++ struct i2c_device_id example_idtable[] = {
++       { "example", 0 },
++       { }
++};
++
++MODULE_DEVICE_TABLE(i2c, example_idtable);
+
+static struct i2c_driver example_driver = {
+ 	.driver		= {
+		.owner		= THIS_MODULE,
+		.name		= "example",
+	},
++	.id_table	= example_ids,
+
+
+Our driver should now look like this:
+
+struct example_state {
+	struct i2c_client	*client;
+	....
+};
+
+static int example_probe(struct i2c_client *client,
+		     	 const struct i2c_device_id *id)
+{
+	struct example_state *state;
+	struct device *dev = &client->dev;
+
+	state = kzalloc(sizeof(struct example_state), GFP_KERNEL);
+	if (state == NULL) {
+		dev_err(dev, "failed to create our state\n");
+		return -ENOMEM;
+	}
+
+	state->client = client;
+	i2c_set_clientdata(client, state);
+
+	/* rest of the initialisation goes here. */
+
+	dev_info(dev, "example client created\n");
+
+	return 0;
+}
+
+static int __devexit example_remove(struct i2c_client *client)
+{
+	struct example_state *state = i2c_get_clientdata(client);
+
+	kfree(state);
+	return 0;
+}
+
+static struct i2c_device_id example_idtable[] = {
+	{ "example", 0 },
+	{ }
+};
+
+MODULE_DEVICE_TABLE(i2c, example_idtable);
+
+static struct i2c_driver example_driver = {
+ 	.driver		= {
+		.owner		= THIS_MODULE,
+		.name		= "example",
+	},
+	.id_table	= example_idtable,
+	.probe		= example_probe,
+	.remove		= __devexit_p(example_remove),
+	.suspend	= example_suspend,
+	.resume		= example_resume,
+};
diff --git a/Makefile b/Makefile
index 40f24810..baee3d4 100644
--- a/Makefile
+++ b/Makefile
@@ -206,7 +206,11 @@
 endif
 
 # Where to locate arch specific headers
-hdr-arch       := $(SRCARCH)
+ifeq ($(ARCH),sparc64)
+       hdr-arch  := sparc
+else
+       hdr-arch  := $(SRCARCH)
+endif
 
 KCONFIG_CONFIG	?= .config
 
diff --git a/arch/sparc/Kconfig b/arch/sparc/Kconfig
index 375de7c..a214002 100644
--- a/arch/sparc/Kconfig
+++ b/arch/sparc/Kconfig
@@ -68,6 +68,7 @@
 	select HAVE_IDE
 	select HAVE_OPROFILE
 	select HAVE_ARCH_KGDB if !SMP
+	select HAVE_ARCH_TRACEHOOK
 
 # Identify this as a Sparc32 build
 config SPARC32
diff --git a/arch/sparc/include/asm/Kbuild b/arch/sparc/include/asm/Kbuild
new file mode 100644
index 0000000..a5f0ce7
--- /dev/null
+++ b/arch/sparc/include/asm/Kbuild
@@ -0,0 +1,45 @@
+# User exported sparc header files
+include include/asm-generic/Kbuild.asm
+
+header-y += ipcbuf_32.h
+header-y += ipcbuf_64.h
+header-y += posix_types_32.h
+header-y += posix_types_64.h
+header-y += ptrace_32.h
+header-y += ptrace_64.h
+header-y += sigcontext_32.h
+header-y += sigcontext_64.h
+header-y += siginfo_32.h
+header-y += siginfo_64.h
+header-y += signal_32.h
+header-y += signal_64.h
+header-y += stat_32.h
+header-y += stat_64.h
+header-y += statfs_32.h
+header-y += statfs_64.h
+header-y += unistd_32.h
+header-y += unistd_64.h
+
+header-y += apc.h
+header-y += asi.h
+header-y += bpp.h
+header-y += display7seg.h
+header-y += envctrl.h
+header-y += fbio.h
+header-y += jsflash.h
+header-y += openprom.h
+header-y += openprom_32.h
+header-y += openprom_64.h
+header-y += openpromio.h
+header-y += perfctr.h
+header-y += psrcompat.h
+header-y += psr.h
+header-y += pstate.h
+header-y += reg.h
+header-y += reg_32.h
+header-y += reg_64.h
+header-y += traps.h
+header-y += uctx.h
+header-y += utrap.h
+header-y += vfc_ioctls.h
+header-y += watchdog.h
diff --git a/include/asm-sparc/agp.h b/arch/sparc/include/asm/agp.h
similarity index 100%
rename from include/asm-sparc/agp.h
rename to arch/sparc/include/asm/agp.h
diff --git a/include/asm-sparc/apb.h b/arch/sparc/include/asm/apb.h
similarity index 100%
rename from include/asm-sparc/apb.h
rename to arch/sparc/include/asm/apb.h
diff --git a/include/asm-sparc/apc.h b/arch/sparc/include/asm/apc.h
similarity index 100%
rename from include/asm-sparc/apc.h
rename to arch/sparc/include/asm/apc.h
diff --git a/include/asm-sparc/asi.h b/arch/sparc/include/asm/asi.h
similarity index 100%
rename from include/asm-sparc/asi.h
rename to arch/sparc/include/asm/asi.h
diff --git a/include/asm-sparc/asmmacro.h b/arch/sparc/include/asm/asmmacro.h
similarity index 100%
rename from include/asm-sparc/asmmacro.h
rename to arch/sparc/include/asm/asmmacro.h
diff --git a/include/asm-sparc/atomic.h b/arch/sparc/include/asm/atomic.h
similarity index 65%
rename from include/asm-sparc/atomic.h
rename to arch/sparc/include/asm/atomic.h
index 66d8166..8ff83d8 100644
--- a/include/asm-sparc/atomic.h
+++ b/arch/sparc/include/asm/atomic.h
@@ -1,8 +1,8 @@
 #ifndef ___ASM_SPARC_ATOMIC_H
 #define ___ASM_SPARC_ATOMIC_H
 #if defined(__sparc__) && defined(__arch64__)
-#include <asm-sparc/atomic_64.h>
+#include <asm/atomic_64.h>
 #else
-#include <asm-sparc/atomic_32.h>
+#include <asm/atomic_32.h>
 #endif
 #endif
diff --git a/include/asm-sparc/atomic_32.h b/arch/sparc/include/asm/atomic_32.h
similarity index 100%
rename from include/asm-sparc/atomic_32.h
rename to arch/sparc/include/asm/atomic_32.h
diff --git a/include/asm-sparc/atomic_64.h b/arch/sparc/include/asm/atomic_64.h
similarity index 100%
rename from include/asm-sparc/atomic_64.h
rename to arch/sparc/include/asm/atomic_64.h
diff --git a/include/asm-sparc/auxio.h b/arch/sparc/include/asm/auxio.h
similarity index 65%
rename from include/asm-sparc/auxio.h
rename to arch/sparc/include/asm/auxio.h
index 24c6f3c..13dc67f 100644
--- a/include/asm-sparc/auxio.h
+++ b/arch/sparc/include/asm/auxio.h
@@ -1,8 +1,8 @@
 #ifndef ___ASM_SPARC_AUXIO_H
 #define ___ASM_SPARC_AUXIO_H
 #if defined(__sparc__) && defined(__arch64__)
-#include <asm-sparc/auxio_64.h>
+#include <asm/auxio_64.h>
 #else
-#include <asm-sparc/auxio_32.h>
+#include <asm/auxio_32.h>
 #endif
 #endif
diff --git a/include/asm-sparc/auxio_32.h b/arch/sparc/include/asm/auxio_32.h
similarity index 96%
rename from include/asm-sparc/auxio_32.h
rename to arch/sparc/include/asm/auxio_32.h
index 4db8f23..e03e088 100644
--- a/include/asm-sparc/auxio_32.h
+++ b/arch/sparc/include/asm/auxio_32.h
@@ -36,7 +36,7 @@
  * understand the hardware you are querying!
  */
 extern void set_auxio(unsigned char bits_on, unsigned char bits_off);
-extern unsigned char get_auxio(void); /* .../asm-sparc/floppy.h */
+extern unsigned char get_auxio(void); /* .../asm/floppy.h */
 
 /*
  * The following routines are provided for driver-compatibility
diff --git a/include/asm-sparc/auxio_64.h b/arch/sparc/include/asm/auxio_64.h
similarity index 100%
rename from include/asm-sparc/auxio_64.h
rename to arch/sparc/include/asm/auxio_64.h
diff --git a/include/asm-sparc/auxvec.h b/arch/sparc/include/asm/auxvec.h
similarity index 100%
rename from include/asm-sparc/auxvec.h
rename to arch/sparc/include/asm/auxvec.h
diff --git a/include/asm-sparc/backoff.h b/arch/sparc/include/asm/backoff.h
similarity index 100%
rename from include/asm-sparc/backoff.h
rename to arch/sparc/include/asm/backoff.h
diff --git a/include/asm-sparc/bbc.h b/arch/sparc/include/asm/bbc.h
similarity index 100%
rename from include/asm-sparc/bbc.h
rename to arch/sparc/include/asm/bbc.h
diff --git a/include/asm-sparc/bitext.h b/arch/sparc/include/asm/bitext.h
similarity index 100%
rename from include/asm-sparc/bitext.h
rename to arch/sparc/include/asm/bitext.h
diff --git a/include/asm-sparc/bitops.h b/arch/sparc/include/asm/bitops.h
similarity index 65%
rename from include/asm-sparc/bitops.h
rename to arch/sparc/include/asm/bitops.h
index 1a2949d..b1edd94 100644
--- a/include/asm-sparc/bitops.h
+++ b/arch/sparc/include/asm/bitops.h
@@ -1,8 +1,8 @@
 #ifndef ___ASM_SPARC_BITOPS_H
 #define ___ASM_SPARC_BITOPS_H
 #if defined(__sparc__) && defined(__arch64__)
-#include <asm-sparc/bitops_64.h>
+#include <asm/bitops_64.h>
 #else
-#include <asm-sparc/bitops_32.h>
+#include <asm/bitops_32.h>
 #endif
 #endif
diff --git a/include/asm-sparc/bitops_32.h b/arch/sparc/include/asm/bitops_32.h
similarity index 100%
rename from include/asm-sparc/bitops_32.h
rename to arch/sparc/include/asm/bitops_32.h
diff --git a/include/asm-sparc/bitops_64.h b/arch/sparc/include/asm/bitops_64.h
similarity index 100%
rename from include/asm-sparc/bitops_64.h
rename to arch/sparc/include/asm/bitops_64.h
diff --git a/include/asm-sparc/bpp.h b/arch/sparc/include/asm/bpp.h
similarity index 100%
rename from include/asm-sparc/bpp.h
rename to arch/sparc/include/asm/bpp.h
diff --git a/include/asm-sparc/btfixup.h b/arch/sparc/include/asm/btfixup.h
similarity index 98%
rename from include/asm-sparc/btfixup.h
rename to arch/sparc/include/asm/btfixup.h
index 08277e6..797722c 100644
--- a/include/asm-sparc/btfixup.h
+++ b/arch/sparc/include/asm/btfixup.h
@@ -1,5 +1,5 @@
 /*
- *  asm-sparc/btfixup.h:    Macros for boot time linking.
+ *  asm/btfixup.h:    Macros for boot time linking.
  *
  *  Copyright (C) 1998 Jakub Jelinek (jj@sunsite.mff.cuni.cz)
  */
diff --git a/include/asm-sparc/bug.h b/arch/sparc/include/asm/bug.h
similarity index 100%
rename from include/asm-sparc/bug.h
rename to arch/sparc/include/asm/bug.h
diff --git a/include/asm-sparc/bugs.h b/arch/sparc/include/asm/bugs.h
similarity index 86%
rename from include/asm-sparc/bugs.h
rename to arch/sparc/include/asm/bugs.h
index 2dfc07b..e179bc1 100644
--- a/include/asm-sparc/bugs.h
+++ b/arch/sparc/include/asm/bugs.h
@@ -1,4 +1,4 @@
-/* include/asm-sparc/bugs.h:  Sparc probes for various bugs.
+/* include/asm/bugs.h:  Sparc probes for various bugs.
  *
  * Copyright (C) 1996, 2007 David S. Miller (davem@davemloft.net)
  */
diff --git a/include/asm-sparc/byteorder.h b/arch/sparc/include/asm/byteorder.h
similarity index 100%
rename from include/asm-sparc/byteorder.h
rename to arch/sparc/include/asm/byteorder.h
diff --git a/include/asm-sparc/cache.h b/arch/sparc/include/asm/cache.h
similarity index 100%
rename from include/asm-sparc/cache.h
rename to arch/sparc/include/asm/cache.h
diff --git a/include/asm-sparc/cacheflush.h b/arch/sparc/include/asm/cacheflush.h
similarity index 64%
rename from include/asm-sparc/cacheflush.h
rename to arch/sparc/include/asm/cacheflush.h
index 2b6a379..0491680 100644
--- a/include/asm-sparc/cacheflush.h
+++ b/arch/sparc/include/asm/cacheflush.h
@@ -1,8 +1,8 @@
 #ifndef ___ASM_SPARC_CACHEFLUSH_H
 #define ___ASM_SPARC_CACHEFLUSH_H
 #if defined(__sparc__) && defined(__arch64__)
-#include <asm-sparc/cacheflush_64.h>
+#include <asm/cacheflush_64.h>
 #else
-#include <asm-sparc/cacheflush_32.h>
+#include <asm/cacheflush_32.h>
 #endif
 #endif
diff --git a/include/asm-sparc/cacheflush_32.h b/arch/sparc/include/asm/cacheflush_32.h
similarity index 100%
rename from include/asm-sparc/cacheflush_32.h
rename to arch/sparc/include/asm/cacheflush_32.h
diff --git a/include/asm-sparc/cacheflush_64.h b/arch/sparc/include/asm/cacheflush_64.h
similarity index 100%
rename from include/asm-sparc/cacheflush_64.h
rename to arch/sparc/include/asm/cacheflush_64.h
diff --git a/include/asm-sparc/chafsr.h b/arch/sparc/include/asm/chafsr.h
similarity index 100%
rename from include/asm-sparc/chafsr.h
rename to arch/sparc/include/asm/chafsr.h
diff --git a/include/asm-sparc/checksum.h b/arch/sparc/include/asm/checksum.h
similarity index 64%
rename from include/asm-sparc/checksum.h
rename to arch/sparc/include/asm/checksum.h
index 4e3553d..7ac0d74 100644
--- a/include/asm-sparc/checksum.h
+++ b/arch/sparc/include/asm/checksum.h
@@ -1,8 +1,8 @@
 #ifndef ___ASM_SPARC_CHECKSUM_H
 #define ___ASM_SPARC_CHECKSUM_H
 #if defined(__sparc__) && defined(__arch64__)
-#include <asm-sparc/checksum_64.h>
+#include <asm/checksum_64.h>
 #else
-#include <asm-sparc/checksum_32.h>
+#include <asm/checksum_32.h>
 #endif
 #endif
diff --git a/include/asm-sparc/checksum_32.h b/arch/sparc/include/asm/checksum_32.h
similarity index 100%
rename from include/asm-sparc/checksum_32.h
rename to arch/sparc/include/asm/checksum_32.h
diff --git a/include/asm-sparc/checksum_64.h b/arch/sparc/include/asm/checksum_64.h
similarity index 100%
rename from include/asm-sparc/checksum_64.h
rename to arch/sparc/include/asm/checksum_64.h
diff --git a/include/asm-sparc/chmctrl.h b/arch/sparc/include/asm/chmctrl.h
similarity index 100%
rename from include/asm-sparc/chmctrl.h
rename to arch/sparc/include/asm/chmctrl.h
diff --git a/include/asm-sparc/clock.h b/arch/sparc/include/asm/clock.h
similarity index 100%
rename from include/asm-sparc/clock.h
rename to arch/sparc/include/asm/clock.h
diff --git a/include/asm-sparc/cmt.h b/arch/sparc/include/asm/cmt.h
similarity index 100%
rename from include/asm-sparc/cmt.h
rename to arch/sparc/include/asm/cmt.h
diff --git a/include/asm-sparc/compat.h b/arch/sparc/include/asm/compat.h
similarity index 100%
rename from include/asm-sparc/compat.h
rename to arch/sparc/include/asm/compat.h
diff --git a/include/asm-sparc/compat_signal.h b/arch/sparc/include/asm/compat_signal.h
similarity index 100%
rename from include/asm-sparc/compat_signal.h
rename to arch/sparc/include/asm/compat_signal.h
diff --git a/include/asm-sparc/contregs.h b/arch/sparc/include/asm/contregs.h
similarity index 100%
rename from include/asm-sparc/contregs.h
rename to arch/sparc/include/asm/contregs.h
diff --git a/include/asm-sparc/cpudata.h b/arch/sparc/include/asm/cpudata.h
similarity index 65%
rename from include/asm-sparc/cpudata.h
rename to arch/sparc/include/asm/cpudata.h
index b76fac0..b5976de 100644
--- a/include/asm-sparc/cpudata.h
+++ b/arch/sparc/include/asm/cpudata.h
@@ -1,8 +1,8 @@
 #ifndef ___ASM_SPARC_CPUDATA_H
 #define ___ASM_SPARC_CPUDATA_H
 #if defined(__sparc__) && defined(__arch64__)
-#include <asm-sparc/cpudata_64.h>
+#include <asm/cpudata_64.h>
 #else
-#include <asm-sparc/cpudata_32.h>
+#include <asm/cpudata_32.h>
 #endif
 #endif
diff --git a/include/asm-sparc/cpudata_32.h b/arch/sparc/include/asm/cpudata_32.h
similarity index 88%
rename from include/asm-sparc/cpudata_32.h
rename to arch/sparc/include/asm/cpudata_32.h
index a2c4d51..31d48a0 100644
--- a/include/asm-sparc/cpudata_32.h
+++ b/arch/sparc/include/asm/cpudata_32.h
@@ -2,7 +2,7 @@
  *
  * Copyright (C) 2004 Keith M Wesolowski (wesolows@foobazco.org)
  *
- * Based on include/asm-sparc64/cpudata.h and Linux 2.4 smp.h
+ * Based on include/asm/cpudata.h and Linux 2.4 smp.h
  * both (C) David S. Miller.
  */
 
diff --git a/include/asm-sparc/cpudata_64.h b/arch/sparc/include/asm/cpudata_64.h
similarity index 100%
rename from include/asm-sparc/cpudata_64.h
rename to arch/sparc/include/asm/cpudata_64.h
diff --git a/include/asm-sparc/cputime.h b/arch/sparc/include/asm/cputime.h
similarity index 100%
rename from include/asm-sparc/cputime.h
rename to arch/sparc/include/asm/cputime.h
diff --git a/include/asm-sparc/current.h b/arch/sparc/include/asm/current.h
similarity index 96%
rename from include/asm-sparc/current.h
rename to arch/sparc/include/asm/current.h
index 8a1d9d6..10a0df5 100644
--- a/include/asm-sparc/current.h
+++ b/arch/sparc/include/asm/current.h
@@ -1,4 +1,4 @@
-/* include/asm-sparc/current.h
+/* include/asm/current.h
  *
  * Copyright (C) 1999 IBM Deutschland Entwicklung GmbH, IBM Corporation
  * Copyright (C) 2002 Pete Zaitcev (zaitcev@yahoo.com)
diff --git a/include/asm-sparc/cypress.h b/arch/sparc/include/asm/cypress.h
similarity index 100%
rename from include/asm-sparc/cypress.h
rename to arch/sparc/include/asm/cypress.h
diff --git a/include/asm-sparc/dcr.h b/arch/sparc/include/asm/dcr.h
similarity index 100%
rename from include/asm-sparc/dcr.h
rename to arch/sparc/include/asm/dcr.h
diff --git a/include/asm-sparc/dcu.h b/arch/sparc/include/asm/dcu.h
similarity index 100%
rename from include/asm-sparc/dcu.h
rename to arch/sparc/include/asm/dcu.h
diff --git a/include/asm-sparc/delay.h b/arch/sparc/include/asm/delay.h
similarity index 65%
rename from include/asm-sparc/delay.h
rename to arch/sparc/include/asm/delay.h
index 6210a3c..467caa2 100644
--- a/include/asm-sparc/delay.h
+++ b/arch/sparc/include/asm/delay.h
@@ -1,8 +1,8 @@
 #ifndef ___ASM_SPARC_DELAY_H
 #define ___ASM_SPARC_DELAY_H
 #if defined(__sparc__) && defined(__arch64__)
-#include <asm-sparc/delay_64.h>
+#include <asm/delay_64.h>
 #else
-#include <asm-sparc/delay_32.h>
+#include <asm/delay_32.h>
 #endif
 #endif
diff --git a/include/asm-sparc/delay_32.h b/arch/sparc/include/asm/delay_32.h
similarity index 100%
rename from include/asm-sparc/delay_32.h
rename to arch/sparc/include/asm/delay_32.h
diff --git a/include/asm-sparc/delay_64.h b/arch/sparc/include/asm/delay_64.h
similarity index 100%
rename from include/asm-sparc/delay_64.h
rename to arch/sparc/include/asm/delay_64.h
diff --git a/include/asm-sparc/device.h b/arch/sparc/include/asm/device.h
similarity index 100%
rename from include/asm-sparc/device.h
rename to arch/sparc/include/asm/device.h
diff --git a/include/asm-sparc/display7seg.h b/arch/sparc/include/asm/display7seg.h
similarity index 100%
rename from include/asm-sparc/display7seg.h
rename to arch/sparc/include/asm/display7seg.h
diff --git a/include/asm-sparc/div64.h b/arch/sparc/include/asm/div64.h
similarity index 100%
rename from include/asm-sparc/div64.h
rename to arch/sparc/include/asm/div64.h
diff --git a/include/asm-sparc/dma-mapping.h b/arch/sparc/include/asm/dma-mapping.h
similarity index 64%
rename from include/asm-sparc/dma-mapping.h
rename to arch/sparc/include/asm/dma-mapping.h
index 7483504..0f4150e 100644
--- a/include/asm-sparc/dma-mapping.h
+++ b/arch/sparc/include/asm/dma-mapping.h
@@ -1,8 +1,8 @@
 #ifndef ___ASM_SPARC_DMA_MAPPING_H
 #define ___ASM_SPARC_DMA_MAPPING_H
 #if defined(__sparc__) && defined(__arch64__)
-#include <asm-sparc/dma-mapping_64.h>
+#include <asm/dma-mapping_64.h>
 #else
-#include <asm-sparc/dma-mapping_32.h>
+#include <asm/dma-mapping_32.h>
 #endif
 #endif
diff --git a/include/asm-sparc/dma-mapping_32.h b/arch/sparc/include/asm/dma-mapping_32.h
similarity index 100%
rename from include/asm-sparc/dma-mapping_32.h
rename to arch/sparc/include/asm/dma-mapping_32.h
diff --git a/include/asm-sparc/dma-mapping_64.h b/arch/sparc/include/asm/dma-mapping_64.h
similarity index 100%
rename from include/asm-sparc/dma-mapping_64.h
rename to arch/sparc/include/asm/dma-mapping_64.h
diff --git a/include/asm-sparc/dma.h b/arch/sparc/include/asm/dma.h
similarity index 66%
rename from include/asm-sparc/dma.h
rename to arch/sparc/include/asm/dma.h
index 8cc69bf..aa1d90a 100644
--- a/include/asm-sparc/dma.h
+++ b/arch/sparc/include/asm/dma.h
@@ -1,8 +1,8 @@
 #ifndef ___ASM_SPARC_DMA_H
 #define ___ASM_SPARC_DMA_H
 #if defined(__sparc__) && defined(__arch64__)
-#include <asm-sparc/dma_64.h>
+#include <asm/dma_64.h>
 #else
-#include <asm-sparc/dma_32.h>
+#include <asm/dma_32.h>
 #endif
 #endif
diff --git a/include/asm-sparc/dma_32.h b/arch/sparc/include/asm/dma_32.h
similarity index 99%
rename from include/asm-sparc/dma_32.h
rename to arch/sparc/include/asm/dma_32.h
index 959d6c8..cf7189c 100644
--- a/include/asm-sparc/dma_32.h
+++ b/arch/sparc/include/asm/dma_32.h
@@ -1,4 +1,4 @@
-/* include/asm-sparc/dma.h
+/* include/asm/dma.h
  *
  * Copyright 1995 (C) David S. Miller (davem@davemloft.net)
  */
diff --git a/include/asm-sparc/dma_64.h b/arch/sparc/include/asm/dma_64.h
similarity index 99%
rename from include/asm-sparc/dma_64.h
rename to arch/sparc/include/asm/dma_64.h
index 9d4c024..46a8aec 100644
--- a/include/asm-sparc/dma_64.h
+++ b/arch/sparc/include/asm/dma_64.h
@@ -1,5 +1,5 @@
 /*
- * include/asm-sparc64/dma.h
+ * include/asm/dma.h
  *
  * Copyright 1996 (C) David S. Miller (davem@caip.rutgers.edu)
  */
diff --git a/include/asm-sparc/ebus.h b/arch/sparc/include/asm/ebus.h
similarity index 66%
rename from include/asm-sparc/ebus.h
rename to arch/sparc/include/asm/ebus.h
index a5da2d0..83a6d16 100644
--- a/include/asm-sparc/ebus.h
+++ b/arch/sparc/include/asm/ebus.h
@@ -1,8 +1,8 @@
 #ifndef ___ASM_SPARC_EBUS_H
 #define ___ASM_SPARC_EBUS_H
 #if defined(__sparc__) && defined(__arch64__)
-#include <asm-sparc/ebus_64.h>
+#include <asm/ebus_64.h>
 #else
-#include <asm-sparc/ebus_32.h>
+#include <asm/ebus_32.h>
 #endif
 #endif
diff --git a/include/asm-sparc/ebus_32.h b/arch/sparc/include/asm/ebus_32.h
similarity index 100%
rename from include/asm-sparc/ebus_32.h
rename to arch/sparc/include/asm/ebus_32.h
diff --git a/include/asm-sparc/ebus_64.h b/arch/sparc/include/asm/ebus_64.h
similarity index 100%
rename from include/asm-sparc/ebus_64.h
rename to arch/sparc/include/asm/ebus_64.h
diff --git a/include/asm-sparc/ecc.h b/arch/sparc/include/asm/ecc.h
similarity index 100%
rename from include/asm-sparc/ecc.h
rename to arch/sparc/include/asm/ecc.h
diff --git a/include/asm-sparc/eeprom.h b/arch/sparc/include/asm/eeprom.h
similarity index 100%
rename from include/asm-sparc/eeprom.h
rename to arch/sparc/include/asm/eeprom.h
diff --git a/include/asm-sparc/elf.h b/arch/sparc/include/asm/elf.h
similarity index 66%
rename from include/asm-sparc/elf.h
rename to arch/sparc/include/asm/elf.h
index f035c45..0a2816c 100644
--- a/include/asm-sparc/elf.h
+++ b/arch/sparc/include/asm/elf.h
@@ -1,8 +1,8 @@
 #ifndef ___ASM_SPARC_ELF_H
 #define ___ASM_SPARC_ELF_H
 #if defined(__sparc__) && defined(__arch64__)
-#include <asm-sparc/elf_64.h>
+#include <asm/elf_64.h>
 #else
-#include <asm-sparc/elf_32.h>
+#include <asm/elf_32.h>
 #endif
 #endif
diff --git a/include/asm-sparc/elf_32.h b/arch/sparc/include/asm/elf_32.h
similarity index 100%
rename from include/asm-sparc/elf_32.h
rename to arch/sparc/include/asm/elf_32.h
diff --git a/include/asm-sparc/elf_64.h b/arch/sparc/include/asm/elf_64.h
similarity index 100%
rename from include/asm-sparc/elf_64.h
rename to arch/sparc/include/asm/elf_64.h
diff --git a/include/asm-sparc/emergency-restart.h b/arch/sparc/include/asm/emergency-restart.h
similarity index 100%
rename from include/asm-sparc/emergency-restart.h
rename to arch/sparc/include/asm/emergency-restart.h
diff --git a/include/asm-sparc/envctrl.h b/arch/sparc/include/asm/envctrl.h
similarity index 100%
rename from include/asm-sparc/envctrl.h
rename to arch/sparc/include/asm/envctrl.h
diff --git a/include/asm-sparc/errno.h b/arch/sparc/include/asm/errno.h
similarity index 100%
rename from include/asm-sparc/errno.h
rename to arch/sparc/include/asm/errno.h
diff --git a/include/asm-sparc/estate.h b/arch/sparc/include/asm/estate.h
similarity index 100%
rename from include/asm-sparc/estate.h
rename to arch/sparc/include/asm/estate.h
diff --git a/include/asm-sparc/fb.h b/arch/sparc/include/asm/fb.h
similarity index 100%
rename from include/asm-sparc/fb.h
rename to arch/sparc/include/asm/fb.h
diff --git a/include/asm-sparc/fbio.h b/arch/sparc/include/asm/fbio.h
similarity index 100%
rename from include/asm-sparc/fbio.h
rename to arch/sparc/include/asm/fbio.h
diff --git a/include/asm-sparc/fcntl.h b/arch/sparc/include/asm/fcntl.h
similarity index 100%
rename from include/asm-sparc/fcntl.h
rename to arch/sparc/include/asm/fcntl.h
diff --git a/include/asm-sparc/fhc.h b/arch/sparc/include/asm/fhc.h
similarity index 100%
rename from include/asm-sparc/fhc.h
rename to arch/sparc/include/asm/fhc.h
diff --git a/include/asm-sparc/fixmap.h b/arch/sparc/include/asm/fixmap.h
similarity index 100%
rename from include/asm-sparc/fixmap.h
rename to arch/sparc/include/asm/fixmap.h
diff --git a/include/asm-sparc/floppy.h b/arch/sparc/include/asm/floppy.h
similarity index 65%
rename from include/asm-sparc/floppy.h
rename to arch/sparc/include/asm/floppy.h
index 6c628ba..faebd33 100644
--- a/include/asm-sparc/floppy.h
+++ b/arch/sparc/include/asm/floppy.h
@@ -1,8 +1,8 @@
 #ifndef ___ASM_SPARC_FLOPPY_H
 #define ___ASM_SPARC_FLOPPY_H
 #if defined(__sparc__) && defined(__arch64__)
-#include <asm-sparc/floppy_64.h>
+#include <asm/floppy_64.h>
 #else
-#include <asm-sparc/floppy_32.h>
+#include <asm/floppy_32.h>
 #endif
 #endif
diff --git a/include/asm-sparc/floppy_32.h b/arch/sparc/include/asm/floppy_32.h
similarity index 98%
rename from include/asm-sparc/floppy_32.h
rename to arch/sparc/include/asm/floppy_32.h
index acdd06e..ae3f00b 100644
--- a/include/asm-sparc/floppy_32.h
+++ b/arch/sparc/include/asm/floppy_32.h
@@ -1,4 +1,4 @@
-/* asm-sparc/floppy.h: Sparc specific parts of the Floppy driver.
+/* asm/floppy.h: Sparc specific parts of the Floppy driver.
  *
  * Copyright (C) 1995 David S. Miller (davem@davemloft.net)
  */
diff --git a/include/asm-sparc/floppy_64.h b/arch/sparc/include/asm/floppy_64.h
similarity index 100%
rename from include/asm-sparc/floppy_64.h
rename to arch/sparc/include/asm/floppy_64.h
diff --git a/include/asm-sparc/fpumacro.h b/arch/sparc/include/asm/fpumacro.h
similarity index 100%
rename from include/asm-sparc/fpumacro.h
rename to arch/sparc/include/asm/fpumacro.h
diff --git a/include/asm-sparc64/ftrace.h b/arch/sparc/include/asm/ftrace.h
similarity index 100%
rename from include/asm-sparc64/ftrace.h
rename to arch/sparc/include/asm/ftrace.h
diff --git a/include/asm-sparc/futex.h b/arch/sparc/include/asm/futex.h
similarity index 65%
rename from include/asm-sparc/futex.h
rename to arch/sparc/include/asm/futex.h
index c6a9f03..736335f 100644
--- a/include/asm-sparc/futex.h
+++ b/arch/sparc/include/asm/futex.h
@@ -1,8 +1,8 @@
 #ifndef ___ASM_SPARC_FUTEX_H
 #define ___ASM_SPARC_FUTEX_H
 #if defined(__sparc__) && defined(__arch64__)
-#include <asm-sparc/futex_64.h>
+#include <asm/futex_64.h>
 #else
-#include <asm-sparc/futex_32.h>
+#include <asm/futex_32.h>
 #endif
 #endif
diff --git a/include/asm-sparc/futex_32.h b/arch/sparc/include/asm/futex_32.h
similarity index 100%
rename from include/asm-sparc/futex_32.h
rename to arch/sparc/include/asm/futex_32.h
diff --git a/include/asm-sparc/futex_64.h b/arch/sparc/include/asm/futex_64.h
similarity index 100%
rename from include/asm-sparc/futex_64.h
rename to arch/sparc/include/asm/futex_64.h
diff --git a/include/asm-sparc/hardirq.h b/arch/sparc/include/asm/hardirq.h
similarity index 65%
rename from include/asm-sparc/hardirq.h
rename to arch/sparc/include/asm/hardirq.h
index 1564787..44d4e23 100644
--- a/include/asm-sparc/hardirq.h
+++ b/arch/sparc/include/asm/hardirq.h
@@ -1,8 +1,8 @@
 #ifndef ___ASM_SPARC_HARDIRQ_H
 #define ___ASM_SPARC_HARDIRQ_H
 #if defined(__sparc__) && defined(__arch64__)
-#include <asm-sparc/hardirq_64.h>
+#include <asm/hardirq_64.h>
 #else
-#include <asm-sparc/hardirq_32.h>
+#include <asm/hardirq_32.h>
 #endif
 #endif
diff --git a/include/asm-sparc/hardirq_32.h b/arch/sparc/include/asm/hardirq_32.h
similarity index 100%
rename from include/asm-sparc/hardirq_32.h
rename to arch/sparc/include/asm/hardirq_32.h
diff --git a/include/asm-sparc/hardirq_64.h b/arch/sparc/include/asm/hardirq_64.h
similarity index 100%
rename from include/asm-sparc/hardirq_64.h
rename to arch/sparc/include/asm/hardirq_64.h
diff --git a/include/asm-sparc/head.h b/arch/sparc/include/asm/head.h
similarity index 66%
rename from include/asm-sparc/head.h
rename to arch/sparc/include/asm/head.h
index 14652ab..be8f03f 100644
--- a/include/asm-sparc/head.h
+++ b/arch/sparc/include/asm/head.h
@@ -1,8 +1,8 @@
 #ifndef ___ASM_SPARC_HEAD_H
 #define ___ASM_SPARC_HEAD_H
 #if defined(__sparc__) && defined(__arch64__)
-#include <asm-sparc/head_64.h>
+#include <asm/head_64.h>
 #else
-#include <asm-sparc/head_32.h>
+#include <asm/head_32.h>
 #endif
 #endif
diff --git a/include/asm-sparc/head_32.h b/arch/sparc/include/asm/head_32.h
similarity index 100%
rename from include/asm-sparc/head_32.h
rename to arch/sparc/include/asm/head_32.h
diff --git a/include/asm-sparc/head_64.h b/arch/sparc/include/asm/head_64.h
similarity index 100%
rename from include/asm-sparc/head_64.h
rename to arch/sparc/include/asm/head_64.h
diff --git a/include/asm-sparc/highmem.h b/arch/sparc/include/asm/highmem.h
similarity index 100%
rename from include/asm-sparc/highmem.h
rename to arch/sparc/include/asm/highmem.h
diff --git a/include/asm-sparc/hugetlb.h b/arch/sparc/include/asm/hugetlb.h
similarity index 100%
rename from include/asm-sparc/hugetlb.h
rename to arch/sparc/include/asm/hugetlb.h
diff --git a/include/asm-sparc/hvtramp.h b/arch/sparc/include/asm/hvtramp.h
similarity index 100%
rename from include/asm-sparc/hvtramp.h
rename to arch/sparc/include/asm/hvtramp.h
diff --git a/include/asm-sparc/hw_irq.h b/arch/sparc/include/asm/hw_irq.h
similarity index 100%
rename from include/asm-sparc/hw_irq.h
rename to arch/sparc/include/asm/hw_irq.h
diff --git a/include/asm-sparc/hypervisor.h b/arch/sparc/include/asm/hypervisor.h
similarity index 100%
rename from include/asm-sparc/hypervisor.h
rename to arch/sparc/include/asm/hypervisor.h
diff --git a/include/asm-sparc/ide.h b/arch/sparc/include/asm/ide.h
similarity index 100%
rename from include/asm-sparc/ide.h
rename to arch/sparc/include/asm/ide.h
diff --git a/include/asm-sparc/idprom.h b/arch/sparc/include/asm/idprom.h
similarity index 100%
rename from include/asm-sparc/idprom.h
rename to arch/sparc/include/asm/idprom.h
diff --git a/include/asm-sparc/intr_queue.h b/arch/sparc/include/asm/intr_queue.h
similarity index 100%
rename from include/asm-sparc/intr_queue.h
rename to arch/sparc/include/asm/intr_queue.h
diff --git a/include/asm-sparc/io-unit.h b/arch/sparc/include/asm/io-unit.h
similarity index 100%
rename from include/asm-sparc/io-unit.h
rename to arch/sparc/include/asm/io-unit.h
diff --git a/include/asm-sparc/io.h b/arch/sparc/include/asm/io.h
similarity index 66%
rename from include/asm-sparc/io.h
rename to arch/sparc/include/asm/io.h
index fc9024d..a34b299 100644
--- a/include/asm-sparc/io.h
+++ b/arch/sparc/include/asm/io.h
@@ -1,8 +1,8 @@
 #ifndef ___ASM_SPARC_IO_H
 #define ___ASM_SPARC_IO_H
 #if defined(__sparc__) && defined(__arch64__)
-#include <asm-sparc/io_64.h>
+#include <asm/io_64.h>
 #else
-#include <asm-sparc/io_32.h>
+#include <asm/io_32.h>
 #endif
 #endif
diff --git a/include/asm-sparc/io_32.h b/arch/sparc/include/asm/io_32.h
similarity index 100%
rename from include/asm-sparc/io_32.h
rename to arch/sparc/include/asm/io_32.h
diff --git a/include/asm-sparc/io_64.h b/arch/sparc/include/asm/io_64.h
similarity index 100%
rename from include/asm-sparc/io_64.h
rename to arch/sparc/include/asm/io_64.h
diff --git a/include/asm-sparc/ioctl.h b/arch/sparc/include/asm/ioctl.h
similarity index 100%
rename from include/asm-sparc/ioctl.h
rename to arch/sparc/include/asm/ioctl.h
diff --git a/include/asm-sparc/ioctls.h b/arch/sparc/include/asm/ioctls.h
similarity index 100%
rename from include/asm-sparc/ioctls.h
rename to arch/sparc/include/asm/ioctls.h
diff --git a/include/asm-sparc/iommu.h b/arch/sparc/include/asm/iommu.h
similarity index 65%
rename from include/asm-sparc/iommu.h
rename to arch/sparc/include/asm/iommu.h
index 91b072b..e650965 100644
--- a/include/asm-sparc/iommu.h
+++ b/arch/sparc/include/asm/iommu.h
@@ -1,8 +1,8 @@
 #ifndef ___ASM_SPARC_IOMMU_H
 #define ___ASM_SPARC_IOMMU_H
 #if defined(__sparc__) && defined(__arch64__)
-#include <asm-sparc/iommu_64.h>
+#include <asm/iommu_64.h>
 #else
-#include <asm-sparc/iommu_32.h>
+#include <asm/iommu_32.h>
 #endif
 #endif
diff --git a/include/asm-sparc/iommu_32.h b/arch/sparc/include/asm/iommu_32.h
similarity index 100%
rename from include/asm-sparc/iommu_32.h
rename to arch/sparc/include/asm/iommu_32.h
diff --git a/include/asm-sparc/iommu_64.h b/arch/sparc/include/asm/iommu_64.h
similarity index 100%
rename from include/asm-sparc/iommu_64.h
rename to arch/sparc/include/asm/iommu_64.h
diff --git a/include/asm-sparc/ipcbuf.h b/arch/sparc/include/asm/ipcbuf.h
similarity index 65%
rename from include/asm-sparc/ipcbuf.h
rename to arch/sparc/include/asm/ipcbuf.h
index 037605d..17d6ef7 100644
--- a/include/asm-sparc/ipcbuf.h
+++ b/arch/sparc/include/asm/ipcbuf.h
@@ -1,8 +1,8 @@
 #ifndef ___ASM_SPARC_IPCBUF_H
 #define ___ASM_SPARC_IPCBUF_H
 #if defined(__sparc__) && defined(__arch64__)
-#include <asm-sparc/ipcbuf_64.h>
+#include <asm/ipcbuf_64.h>
 #else
-#include <asm-sparc/ipcbuf_32.h>
+#include <asm/ipcbuf_32.h>
 #endif
 #endif
diff --git a/include/asm-sparc/ipcbuf_32.h b/arch/sparc/include/asm/ipcbuf_32.h
similarity index 100%
rename from include/asm-sparc/ipcbuf_32.h
rename to arch/sparc/include/asm/ipcbuf_32.h
diff --git a/include/asm-sparc/ipcbuf_64.h b/arch/sparc/include/asm/ipcbuf_64.h
similarity index 100%
rename from include/asm-sparc/ipcbuf_64.h
rename to arch/sparc/include/asm/ipcbuf_64.h
diff --git a/include/asm-sparc/irq.h b/arch/sparc/include/asm/irq.h
similarity index 66%
rename from include/asm-sparc/irq.h
rename to arch/sparc/include/asm/irq.h
index 7af6bb4..3b44a6a 100644
--- a/include/asm-sparc/irq.h
+++ b/arch/sparc/include/asm/irq.h
@@ -1,8 +1,8 @@
 #ifndef ___ASM_SPARC_IRQ_H
 #define ___ASM_SPARC_IRQ_H
 #if defined(__sparc__) && defined(__arch64__)
-#include <asm-sparc/irq_64.h>
+#include <asm/irq_64.h>
 #else
-#include <asm-sparc/irq_32.h>
+#include <asm/irq_32.h>
 #endif
 #endif
diff --git a/include/asm-sparc/irq_32.h b/arch/sparc/include/asm/irq_32.h
similarity index 100%
rename from include/asm-sparc/irq_32.h
rename to arch/sparc/include/asm/irq_32.h
diff --git a/include/asm-sparc/irq_64.h b/arch/sparc/include/asm/irq_64.h
similarity index 100%
rename from include/asm-sparc/irq_64.h
rename to arch/sparc/include/asm/irq_64.h
diff --git a/include/asm-sparc/irq_regs.h b/arch/sparc/include/asm/irq_regs.h
similarity index 100%
rename from include/asm-sparc/irq_regs.h
rename to arch/sparc/include/asm/irq_regs.h
diff --git a/include/asm-sparc/irqflags.h b/arch/sparc/include/asm/irqflags.h
similarity index 64%
rename from include/asm-sparc/irqflags.h
rename to arch/sparc/include/asm/irqflags.h
index c6402b1..1e13863 100644
--- a/include/asm-sparc/irqflags.h
+++ b/arch/sparc/include/asm/irqflags.h
@@ -1,8 +1,8 @@
 #ifndef ___ASM_SPARC_IRQFLAGS_H
 #define ___ASM_SPARC_IRQFLAGS_H
 #if defined(__sparc__) && defined(__arch64__)
-#include <asm-sparc/irqflags_64.h>
+#include <asm/irqflags_64.h>
 #else
-#include <asm-sparc/irqflags_32.h>
+#include <asm/irqflags_32.h>
 #endif
 #endif
diff --git a/include/asm-sparc/irqflags_32.h b/arch/sparc/include/asm/irqflags_32.h
similarity index 96%
rename from include/asm-sparc/irqflags_32.h
rename to arch/sparc/include/asm/irqflags_32.h
index db398fb..0fca9d9 100644
--- a/include/asm-sparc/irqflags_32.h
+++ b/arch/sparc/include/asm/irqflags_32.h
@@ -1,5 +1,5 @@
 /*
- * include/asm-sparc/irqflags.h
+ * include/asm/irqflags.h
  *
  * IRQ flags handling
  *
diff --git a/include/asm-sparc/irqflags_64.h b/arch/sparc/include/asm/irqflags_64.h
similarity index 97%
rename from include/asm-sparc/irqflags_64.h
rename to arch/sparc/include/asm/irqflags_64.h
index 024fc54..bb42e59 100644
--- a/include/asm-sparc/irqflags_64.h
+++ b/arch/sparc/include/asm/irqflags_64.h
@@ -1,5 +1,5 @@
 /*
- * include/asm-sparc64/irqflags.h
+ * include/asm/irqflags.h
  *
  * IRQ flags handling
  *
diff --git a/include/asm-sparc/jsflash.h b/arch/sparc/include/asm/jsflash.h
similarity index 100%
rename from include/asm-sparc/jsflash.h
rename to arch/sparc/include/asm/jsflash.h
diff --git a/include/asm-sparc/kdebug.h b/arch/sparc/include/asm/kdebug.h
similarity index 65%
rename from include/asm-sparc/kdebug.h
rename to arch/sparc/include/asm/kdebug.h
index fe07d00..8d12581 100644
--- a/include/asm-sparc/kdebug.h
+++ b/arch/sparc/include/asm/kdebug.h
@@ -1,8 +1,8 @@
 #ifndef ___ASM_SPARC_KDEBUG_H
 #define ___ASM_SPARC_KDEBUG_H
 #if defined(__sparc__) && defined(__arch64__)
-#include <asm-sparc/kdebug_64.h>
+#include <asm/kdebug_64.h>
 #else
-#include <asm-sparc/kdebug_32.h>
+#include <asm/kdebug_32.h>
 #endif
 #endif
diff --git a/include/asm-sparc/kdebug_32.h b/arch/sparc/include/asm/kdebug_32.h
similarity index 100%
rename from include/asm-sparc/kdebug_32.h
rename to arch/sparc/include/asm/kdebug_32.h
diff --git a/include/asm-sparc/kdebug_64.h b/arch/sparc/include/asm/kdebug_64.h
similarity index 100%
rename from include/asm-sparc/kdebug_64.h
rename to arch/sparc/include/asm/kdebug_64.h
diff --git a/include/asm-sparc/kgdb.h b/arch/sparc/include/asm/kgdb.h
similarity index 100%
rename from include/asm-sparc/kgdb.h
rename to arch/sparc/include/asm/kgdb.h
diff --git a/include/asm-sparc/kmap_types.h b/arch/sparc/include/asm/kmap_types.h
similarity index 100%
rename from include/asm-sparc/kmap_types.h
rename to arch/sparc/include/asm/kmap_types.h
diff --git a/include/asm-sparc/kprobes.h b/arch/sparc/include/asm/kprobes.h
similarity index 100%
rename from include/asm-sparc/kprobes.h
rename to arch/sparc/include/asm/kprobes.h
diff --git a/include/asm-sparc/ldc.h b/arch/sparc/include/asm/ldc.h
similarity index 100%
rename from include/asm-sparc/ldc.h
rename to arch/sparc/include/asm/ldc.h
diff --git a/include/asm-sparc/linkage.h b/arch/sparc/include/asm/linkage.h
similarity index 100%
rename from include/asm-sparc/linkage.h
rename to arch/sparc/include/asm/linkage.h
diff --git a/include/asm-sparc/lmb.h b/arch/sparc/include/asm/lmb.h
similarity index 100%
rename from include/asm-sparc/lmb.h
rename to arch/sparc/include/asm/lmb.h
diff --git a/include/asm-sparc/local.h b/arch/sparc/include/asm/local.h
similarity index 100%
rename from include/asm-sparc/local.h
rename to arch/sparc/include/asm/local.h
diff --git a/include/asm-sparc/lsu.h b/arch/sparc/include/asm/lsu.h
similarity index 100%
rename from include/asm-sparc/lsu.h
rename to arch/sparc/include/asm/lsu.h
diff --git a/include/asm-sparc/machines.h b/arch/sparc/include/asm/machines.h
similarity index 100%
rename from include/asm-sparc/machines.h
rename to arch/sparc/include/asm/machines.h
diff --git a/include/asm-sparc/mbus.h b/arch/sparc/include/asm/mbus.h
similarity index 100%
rename from include/asm-sparc/mbus.h
rename to arch/sparc/include/asm/mbus.h
diff --git a/include/asm-sparc/mc146818rtc.h b/arch/sparc/include/asm/mc146818rtc.h
similarity index 64%
rename from include/asm-sparc/mc146818rtc.h
rename to arch/sparc/include/asm/mc146818rtc.h
index 9ab65c2..67ed9e3 100644
--- a/include/asm-sparc/mc146818rtc.h
+++ b/arch/sparc/include/asm/mc146818rtc.h
@@ -1,8 +1,8 @@
 #ifndef ___ASM_SPARC_MC146818RTC_H
 #define ___ASM_SPARC_MC146818RTC_H
 #if defined(__sparc__) && defined(__arch64__)
-#include <asm-sparc/mc146818rtc_64.h>
+#include <asm/mc146818rtc_64.h>
 #else
-#include <asm-sparc/mc146818rtc_32.h>
+#include <asm/mc146818rtc_32.h>
 #endif
 #endif
diff --git a/include/asm-sparc/mc146818rtc_32.h b/arch/sparc/include/asm/mc146818rtc_32.h
similarity index 100%
rename from include/asm-sparc/mc146818rtc_32.h
rename to arch/sparc/include/asm/mc146818rtc_32.h
diff --git a/include/asm-sparc/mc146818rtc_64.h b/arch/sparc/include/asm/mc146818rtc_64.h
similarity index 100%
rename from include/asm-sparc/mc146818rtc_64.h
rename to arch/sparc/include/asm/mc146818rtc_64.h
diff --git a/include/asm-sparc/mdesc.h b/arch/sparc/include/asm/mdesc.h
similarity index 100%
rename from include/asm-sparc/mdesc.h
rename to arch/sparc/include/asm/mdesc.h
diff --git a/include/asm-sparc/memreg.h b/arch/sparc/include/asm/memreg.h
similarity index 100%
rename from include/asm-sparc/memreg.h
rename to arch/sparc/include/asm/memreg.h
diff --git a/include/asm-sparc/mman.h b/arch/sparc/include/asm/mman.h
similarity index 100%
rename from include/asm-sparc/mman.h
rename to arch/sparc/include/asm/mman.h
diff --git a/include/asm-sparc/mmu.h b/arch/sparc/include/asm/mmu.h
similarity index 66%
rename from include/asm-sparc/mmu.h
rename to arch/sparc/include/asm/mmu.h
index ee66bf6..88fa313 100644
--- a/include/asm-sparc/mmu.h
+++ b/arch/sparc/include/asm/mmu.h
@@ -1,8 +1,8 @@
 #ifndef ___ASM_SPARC_MMU_H
 #define ___ASM_SPARC_MMU_H
 #if defined(__sparc__) && defined(__arch64__)
-#include <asm-sparc/mmu_64.h>
+#include <asm/mmu_64.h>
 #else
-#include <asm-sparc/mmu_32.h>
+#include <asm/mmu_32.h>
 #endif
 #endif
diff --git a/include/asm-sparc/mmu_32.h b/arch/sparc/include/asm/mmu_32.h
similarity index 100%
rename from include/asm-sparc/mmu_32.h
rename to arch/sparc/include/asm/mmu_32.h
diff --git a/include/asm-sparc/mmu_64.h b/arch/sparc/include/asm/mmu_64.h
similarity index 100%
rename from include/asm-sparc/mmu_64.h
rename to arch/sparc/include/asm/mmu_64.h
diff --git a/include/asm-sparc/mmu_context.h b/arch/sparc/include/asm/mmu_context.h
similarity index 64%
rename from include/asm-sparc/mmu_context.h
rename to arch/sparc/include/asm/mmu_context.h
index e14efb9..5531346 100644
--- a/include/asm-sparc/mmu_context.h
+++ b/arch/sparc/include/asm/mmu_context.h
@@ -1,8 +1,8 @@
 #ifndef ___ASM_SPARC_MMU_CONTEXT_H
 #define ___ASM_SPARC_MMU_CONTEXT_H
 #if defined(__sparc__) && defined(__arch64__)
-#include <asm-sparc/mmu_context_64.h>
+#include <asm/mmu_context_64.h>
 #else
-#include <asm-sparc/mmu_context_32.h>
+#include <asm/mmu_context_32.h>
 #endif
 #endif
diff --git a/include/asm-sparc/mmu_context_32.h b/arch/sparc/include/asm/mmu_context_32.h
similarity index 100%
rename from include/asm-sparc/mmu_context_32.h
rename to arch/sparc/include/asm/mmu_context_32.h
diff --git a/include/asm-sparc/mmu_context_64.h b/arch/sparc/include/asm/mmu_context_64.h
similarity index 100%
rename from include/asm-sparc/mmu_context_64.h
rename to arch/sparc/include/asm/mmu_context_64.h
diff --git a/include/asm-sparc/mmzone.h b/arch/sparc/include/asm/mmzone.h
similarity index 100%
rename from include/asm-sparc/mmzone.h
rename to arch/sparc/include/asm/mmzone.h
diff --git a/include/asm-sparc/module.h b/arch/sparc/include/asm/module.h
similarity index 65%
rename from include/asm-sparc/module.h
rename to arch/sparc/include/asm/module.h
index 516138f..e82cf9a 100644
--- a/include/asm-sparc/module.h
+++ b/arch/sparc/include/asm/module.h
@@ -1,8 +1,8 @@
 #ifndef ___ASM_SPARC_MODULE_H
 #define ___ASM_SPARC_MODULE_H
 #if defined(__sparc__) && defined(__arch64__)
-#include <asm-sparc/module_64.h>
+#include <asm/module_64.h>
 #else
-#include <asm-sparc/module_32.h>
+#include <asm/module_32.h>
 #endif
 #endif
diff --git a/include/asm-sparc/module_32.h b/arch/sparc/include/asm/module_32.h
similarity index 100%
rename from include/asm-sparc/module_32.h
rename to arch/sparc/include/asm/module_32.h
diff --git a/include/asm-sparc/module_64.h b/arch/sparc/include/asm/module_64.h
similarity index 100%
rename from include/asm-sparc/module_64.h
rename to arch/sparc/include/asm/module_64.h
diff --git a/include/asm-sparc/mostek.h b/arch/sparc/include/asm/mostek.h
similarity index 65%
rename from include/asm-sparc/mostek.h
rename to arch/sparc/include/asm/mostek.h
index 5b9f7fe..433be3e 100644
--- a/include/asm-sparc/mostek.h
+++ b/arch/sparc/include/asm/mostek.h
@@ -1,8 +1,8 @@
 #ifndef ___ASM_SPARC_MOSTEK_H
 #define ___ASM_SPARC_MOSTEK_H
 #if defined(__sparc__) && defined(__arch64__)
-#include <asm-sparc/mostek_64.h>
+#include <asm/mostek_64.h>
 #else
-#include <asm-sparc/mostek_32.h>
+#include <asm/mostek_32.h>
 #endif
 #endif
diff --git a/include/asm-sparc/mostek_32.h b/arch/sparc/include/asm/mostek_32.h
similarity index 100%
rename from include/asm-sparc/mostek_32.h
rename to arch/sparc/include/asm/mostek_32.h
diff --git a/include/asm-sparc/mostek_64.h b/arch/sparc/include/asm/mostek_64.h
similarity index 100%
rename from include/asm-sparc/mostek_64.h
rename to arch/sparc/include/asm/mostek_64.h
diff --git a/include/asm-sparc/mpmbox.h b/arch/sparc/include/asm/mpmbox.h
similarity index 100%
rename from include/asm-sparc/mpmbox.h
rename to arch/sparc/include/asm/mpmbox.h
diff --git a/include/asm-sparc/msgbuf.h b/arch/sparc/include/asm/msgbuf.h
similarity index 100%
rename from include/asm-sparc/msgbuf.h
rename to arch/sparc/include/asm/msgbuf.h
diff --git a/include/asm-sparc/msi.h b/arch/sparc/include/asm/msi.h
similarity index 100%
rename from include/asm-sparc/msi.h
rename to arch/sparc/include/asm/msi.h
diff --git a/include/asm-sparc/mutex.h b/arch/sparc/include/asm/mutex.h
similarity index 100%
rename from include/asm-sparc/mutex.h
rename to arch/sparc/include/asm/mutex.h
diff --git a/include/asm-sparc/mxcc.h b/arch/sparc/include/asm/mxcc.h
similarity index 100%
rename from include/asm-sparc/mxcc.h
rename to arch/sparc/include/asm/mxcc.h
diff --git a/include/asm-sparc/ns87303.h b/arch/sparc/include/asm/ns87303.h
similarity index 100%
rename from include/asm-sparc/ns87303.h
rename to arch/sparc/include/asm/ns87303.h
diff --git a/include/asm-sparc/obio.h b/arch/sparc/include/asm/obio.h
similarity index 100%
rename from include/asm-sparc/obio.h
rename to arch/sparc/include/asm/obio.h
diff --git a/include/asm-sparc/of_device.h b/arch/sparc/include/asm/of_device.h
similarity index 100%
rename from include/asm-sparc/of_device.h
rename to arch/sparc/include/asm/of_device.h
diff --git a/include/asm-sparc/of_platform.h b/arch/sparc/include/asm/of_platform.h
similarity index 64%
rename from include/asm-sparc/of_platform.h
rename to arch/sparc/include/asm/of_platform.h
index 851eb84..aa69977 100644
--- a/include/asm-sparc/of_platform.h
+++ b/arch/sparc/include/asm/of_platform.h
@@ -1,8 +1,8 @@
 #ifndef ___ASM_SPARC_OF_PLATFORM_H
 #define ___ASM_SPARC_OF_PLATFORM_H
 #if defined(__sparc__) && defined(__arch64__)
-#include <asm-sparc/of_platform_64.h>
+#include <asm/of_platform_64.h>
 #else
-#include <asm-sparc/of_platform_32.h>
+#include <asm/of_platform_32.h>
 #endif
 #endif
diff --git a/include/asm-sparc/of_platform_32.h b/arch/sparc/include/asm/of_platform_32.h
similarity index 90%
rename from include/asm-sparc/of_platform_32.h
rename to arch/sparc/include/asm/of_platform_32.h
index 3833435..723f7c9 100644
--- a/include/asm-sparc/of_platform_32.h
+++ b/arch/sparc/include/asm/of_platform_32.h
@@ -3,7 +3,7 @@
 /*
  *    Copyright (C) 2006 Benjamin Herrenschmidt, IBM Corp.
  *			 <benh@kernel.crashing.org>
- *    Modified for Sparc by merging parts of asm-sparc/of_device.h
+ *    Modified for Sparc by merging parts of asm/of_device.h
  *		by Stephen Rothwell
  *
  *  This program is free software; you can redistribute it and/or
diff --git a/include/asm-sparc/of_platform_64.h b/arch/sparc/include/asm/of_platform_64.h
similarity index 91%
rename from include/asm-sparc/of_platform_64.h
rename to arch/sparc/include/asm/of_platform_64.h
index 78aa032..4f66a5f 100644
--- a/include/asm-sparc/of_platform_64.h
+++ b/arch/sparc/include/asm/of_platform_64.h
@@ -3,7 +3,7 @@
 /*
  *    Copyright (C) 2006 Benjamin Herrenschmidt, IBM Corp.
  *			 <benh@kernel.crashing.org>
- *    Modified for Sparc by merging parts of asm-sparc/of_device.h
+ *    Modified for Sparc by merging parts of asm/of_device.h
  *		by Stephen Rothwell
  *
  *  This program is free software; you can redistribute it and/or
diff --git a/include/asm-sparc/openprom.h b/arch/sparc/include/asm/openprom.h
similarity index 64%
rename from include/asm-sparc/openprom.h
rename to arch/sparc/include/asm/openprom.h
index 8c349f0..aaeae905 100644
--- a/include/asm-sparc/openprom.h
+++ b/arch/sparc/include/asm/openprom.h
@@ -1,8 +1,8 @@
 #ifndef ___ASM_SPARC_OPENPROM_H
 #define ___ASM_SPARC_OPENPROM_H
 #if defined(__sparc__) && defined(__arch64__)
-#include <asm-sparc/openprom_64.h>
+#include <asm/openprom_64.h>
 #else
-#include <asm-sparc/openprom_32.h>
+#include <asm/openprom_32.h>
 #endif
 #endif
diff --git a/include/asm-sparc/openprom_32.h b/arch/sparc/include/asm/openprom_32.h
similarity index 100%
rename from include/asm-sparc/openprom_32.h
rename to arch/sparc/include/asm/openprom_32.h
diff --git a/include/asm-sparc/openprom_64.h b/arch/sparc/include/asm/openprom_64.h
similarity index 100%
rename from include/asm-sparc/openprom_64.h
rename to arch/sparc/include/asm/openprom_64.h
diff --git a/include/asm-sparc/openpromio.h b/arch/sparc/include/asm/openpromio.h
similarity index 100%
rename from include/asm-sparc/openpromio.h
rename to arch/sparc/include/asm/openpromio.h
diff --git a/include/asm-sparc/oplib.h b/arch/sparc/include/asm/oplib.h
similarity index 65%
rename from include/asm-sparc/oplib.h
rename to arch/sparc/include/asm/oplib.h
index e88d7c0..72e04e1 100644
--- a/include/asm-sparc/oplib.h
+++ b/arch/sparc/include/asm/oplib.h
@@ -1,8 +1,8 @@
 #ifndef ___ASM_SPARC_OPLIB_H
 #define ___ASM_SPARC_OPLIB_H
 #if defined(__sparc__) && defined(__arch64__)
-#include <asm-sparc/oplib_64.h>
+#include <asm/oplib_64.h>
 #else
-#include <asm-sparc/oplib_32.h>
+#include <asm/oplib_32.h>
 #endif
 #endif
diff --git a/include/asm-sparc/oplib_32.h b/arch/sparc/include/asm/oplib_32.h
similarity index 100%
rename from include/asm-sparc/oplib_32.h
rename to arch/sparc/include/asm/oplib_32.h
diff --git a/include/asm-sparc/oplib_64.h b/arch/sparc/include/asm/oplib_64.h
similarity index 100%
rename from include/asm-sparc/oplib_64.h
rename to arch/sparc/include/asm/oplib_64.h
diff --git a/include/asm-sparc/page.h b/arch/sparc/include/asm/page.h
similarity index 66%
rename from include/asm-sparc/page.h
rename to arch/sparc/include/asm/page.h
index f32f49f..f21de03 100644
--- a/include/asm-sparc/page.h
+++ b/arch/sparc/include/asm/page.h
@@ -1,8 +1,8 @@
 #ifndef ___ASM_SPARC_PAGE_H
 #define ___ASM_SPARC_PAGE_H
 #if defined(__sparc__) && defined(__arch64__)
-#include <asm-sparc/page_64.h>
+#include <asm/page_64.h>
 #else
-#include <asm-sparc/page_32.h>
+#include <asm/page_32.h>
 #endif
 #endif
diff --git a/include/asm-sparc/page_32.h b/arch/sparc/include/asm/page_32.h
similarity index 100%
rename from include/asm-sparc/page_32.h
rename to arch/sparc/include/asm/page_32.h
diff --git a/include/asm-sparc/page_64.h b/arch/sparc/include/asm/page_64.h
similarity index 100%
rename from include/asm-sparc/page_64.h
rename to arch/sparc/include/asm/page_64.h
diff --git a/include/asm-sparc/param.h b/arch/sparc/include/asm/param.h
similarity index 100%
rename from include/asm-sparc/param.h
rename to arch/sparc/include/asm/param.h
diff --git a/include/asm-sparc/parport.h b/arch/sparc/include/asm/parport.h
similarity index 100%
rename from include/asm-sparc/parport.h
rename to arch/sparc/include/asm/parport.h
diff --git a/include/asm-sparc/pbm.h b/arch/sparc/include/asm/pbm.h
similarity index 100%
rename from include/asm-sparc/pbm.h
rename to arch/sparc/include/asm/pbm.h
diff --git a/include/asm-sparc/pci.h b/arch/sparc/include/asm/pci.h
similarity index 66%
rename from include/asm-sparc/pci.h
rename to arch/sparc/include/asm/pci.h
index b807d52..6e14fd1 100644
--- a/include/asm-sparc/pci.h
+++ b/arch/sparc/include/asm/pci.h
@@ -1,8 +1,8 @@
 #ifndef ___ASM_SPARC_PCI_H
 #define ___ASM_SPARC_PCI_H
 #if defined(__sparc__) && defined(__arch64__)
-#include <asm-sparc/pci_64.h>
+#include <asm/pci_64.h>
 #else
-#include <asm-sparc/pci_32.h>
+#include <asm/pci_32.h>
 #endif
 #endif
diff --git a/include/asm-sparc/pci_32.h b/arch/sparc/include/asm/pci_32.h
similarity index 100%
rename from include/asm-sparc/pci_32.h
rename to arch/sparc/include/asm/pci_32.h
diff --git a/include/asm-sparc/pci_64.h b/arch/sparc/include/asm/pci_64.h
similarity index 100%
rename from include/asm-sparc/pci_64.h
rename to arch/sparc/include/asm/pci_64.h
diff --git a/include/asm-sparc/pcic.h b/arch/sparc/include/asm/pcic.h
similarity index 100%
rename from include/asm-sparc/pcic.h
rename to arch/sparc/include/asm/pcic.h
diff --git a/include/asm-sparc/percpu.h b/arch/sparc/include/asm/percpu.h
similarity index 65%
rename from include/asm-sparc/percpu.h
rename to arch/sparc/include/asm/percpu.h
index d98ed6c..bfb1d19 100644
--- a/include/asm-sparc/percpu.h
+++ b/arch/sparc/include/asm/percpu.h
@@ -1,8 +1,8 @@
 #ifndef ___ASM_SPARC_PERCPU_H
 #define ___ASM_SPARC_PERCPU_H
 #if defined(__sparc__) && defined(__arch64__)
-#include <asm-sparc/percpu_64.h>
+#include <asm/percpu_64.h>
 #else
-#include <asm-sparc/percpu_32.h>
+#include <asm/percpu_32.h>
 #endif
 #endif
diff --git a/include/asm-sparc/percpu_32.h b/arch/sparc/include/asm/percpu_32.h
similarity index 100%
rename from include/asm-sparc/percpu_32.h
rename to arch/sparc/include/asm/percpu_32.h
diff --git a/include/asm-sparc/percpu_64.h b/arch/sparc/include/asm/percpu_64.h
similarity index 100%
rename from include/asm-sparc/percpu_64.h
rename to arch/sparc/include/asm/percpu_64.h
diff --git a/include/asm-sparc/perfctr.h b/arch/sparc/include/asm/perfctr.h
similarity index 100%
rename from include/asm-sparc/perfctr.h
rename to arch/sparc/include/asm/perfctr.h
diff --git a/include/asm-sparc/pgalloc.h b/arch/sparc/include/asm/pgalloc.h
similarity index 65%
rename from include/asm-sparc/pgalloc.h
rename to arch/sparc/include/asm/pgalloc.h
index 7fa02b5..b6db1f7 100644
--- a/include/asm-sparc/pgalloc.h
+++ b/arch/sparc/include/asm/pgalloc.h
@@ -1,8 +1,8 @@
 #ifndef ___ASM_SPARC_PGALLOC_H
 #define ___ASM_SPARC_PGALLOC_H
 #if defined(__sparc__) && defined(__arch64__)
-#include <asm-sparc/pgalloc_64.h>
+#include <asm/pgalloc_64.h>
 #else
-#include <asm-sparc/pgalloc_32.h>
+#include <asm/pgalloc_32.h>
 #endif
 #endif
diff --git a/include/asm-sparc/pgalloc_32.h b/arch/sparc/include/asm/pgalloc_32.h
similarity index 100%
rename from include/asm-sparc/pgalloc_32.h
rename to arch/sparc/include/asm/pgalloc_32.h
diff --git a/include/asm-sparc/pgalloc_64.h b/arch/sparc/include/asm/pgalloc_64.h
similarity index 100%
rename from include/asm-sparc/pgalloc_64.h
rename to arch/sparc/include/asm/pgalloc_64.h
diff --git a/include/asm-sparc/pgtable.h b/arch/sparc/include/asm/pgtable.h
similarity index 65%
rename from include/asm-sparc/pgtable.h
rename to arch/sparc/include/asm/pgtable.h
index 63cdef5..59ba6f6 100644
--- a/include/asm-sparc/pgtable.h
+++ b/arch/sparc/include/asm/pgtable.h
@@ -1,8 +1,8 @@
 #ifndef ___ASM_SPARC_PGTABLE_H
 #define ___ASM_SPARC_PGTABLE_H
 #if defined(__sparc__) && defined(__arch64__)
-#include <asm-sparc/pgtable_64.h>
+#include <asm/pgtable_64.h>
 #else
-#include <asm-sparc/pgtable_32.h>
+#include <asm/pgtable_32.h>
 #endif
 #endif
diff --git a/include/asm-sparc/pgtable_32.h b/arch/sparc/include/asm/pgtable_32.h
similarity index 99%
rename from include/asm-sparc/pgtable_32.h
rename to arch/sparc/include/asm/pgtable_32.h
index 781bd46..08237fd 100644
--- a/include/asm-sparc/pgtable_32.h
+++ b/arch/sparc/include/asm/pgtable_32.h
@@ -1,7 +1,7 @@
 #ifndef _SPARC_PGTABLE_H
 #define _SPARC_PGTABLE_H
 
-/*  asm-sparc/pgtable.h:  Defines and functions used to work
+/*  asm/pgtable.h:  Defines and functions used to work
  *                        with Sparc page tables.
  *
  *  Copyright (C) 1995 David S. Miller (davem@caip.rutgers.edu)
diff --git a/include/asm-sparc/pgtable_64.h b/arch/sparc/include/asm/pgtable_64.h
similarity index 100%
rename from include/asm-sparc/pgtable_64.h
rename to arch/sparc/include/asm/pgtable_64.h
diff --git a/include/asm-sparc/pgtsrmmu.h b/arch/sparc/include/asm/pgtsrmmu.h
similarity index 100%
rename from include/asm-sparc/pgtsrmmu.h
rename to arch/sparc/include/asm/pgtsrmmu.h
diff --git a/include/asm-sparc/pgtsun4.h b/arch/sparc/include/asm/pgtsun4.h
similarity index 100%
rename from include/asm-sparc/pgtsun4.h
rename to arch/sparc/include/asm/pgtsun4.h
diff --git a/include/asm-sparc/pgtsun4c.h b/arch/sparc/include/asm/pgtsun4c.h
similarity index 100%
rename from include/asm-sparc/pgtsun4c.h
rename to arch/sparc/include/asm/pgtsun4c.h
diff --git a/include/asm-sparc/pil.h b/arch/sparc/include/asm/pil.h
similarity index 100%
rename from include/asm-sparc/pil.h
rename to arch/sparc/include/asm/pil.h
diff --git a/include/asm-sparc/poll.h b/arch/sparc/include/asm/poll.h
similarity index 100%
rename from include/asm-sparc/poll.h
rename to arch/sparc/include/asm/poll.h
diff --git a/include/asm-sparc/posix_types.h b/arch/sparc/include/asm/posix_types.h
similarity index 64%
rename from include/asm-sparc/posix_types.h
rename to arch/sparc/include/asm/posix_types.h
index 58c820d..03a0e09 100644
--- a/include/asm-sparc/posix_types.h
+++ b/arch/sparc/include/asm/posix_types.h
@@ -1,8 +1,8 @@
 #ifndef ___ASM_SPARC_POSIX_TYPES_H
 #define ___ASM_SPARC_POSIX_TYPES_H
 #if defined(__sparc__) && defined(__arch64__)
-#include <asm-sparc/posix_types_64.h>
+#include <asm/posix_types_64.h>
 #else
-#include <asm-sparc/posix_types_32.h>
+#include <asm/posix_types_32.h>
 #endif
 #endif
diff --git a/include/asm-sparc/posix_types_32.h b/arch/sparc/include/asm/posix_types_32.h
similarity index 100%
rename from include/asm-sparc/posix_types_32.h
rename to arch/sparc/include/asm/posix_types_32.h
diff --git a/include/asm-sparc/posix_types_64.h b/arch/sparc/include/asm/posix_types_64.h
similarity index 100%
rename from include/asm-sparc/posix_types_64.h
rename to arch/sparc/include/asm/posix_types_64.h
diff --git a/include/asm-sparc/processor.h b/arch/sparc/include/asm/processor.h
similarity index 64%
rename from include/asm-sparc/processor.h
rename to arch/sparc/include/asm/processor.h
index 11a66bb..9da9646 100644
--- a/include/asm-sparc/processor.h
+++ b/arch/sparc/include/asm/processor.h
@@ -1,8 +1,8 @@
 #ifndef ___ASM_SPARC_PROCESSOR_H
 #define ___ASM_SPARC_PROCESSOR_H
 #if defined(__sparc__) && defined(__arch64__)
-#include <asm-sparc/processor_64.h>
+#include <asm/processor_64.h>
 #else
-#include <asm-sparc/processor_32.h>
+#include <asm/processor_32.h>
 #endif
 #endif
diff --git a/include/asm-sparc/processor_32.h b/arch/sparc/include/asm/processor_32.h
similarity index 97%
rename from include/asm-sparc/processor_32.h
rename to arch/sparc/include/asm/processor_32.h
index 562c0d6..2ae67a2 100644
--- a/include/asm-sparc/processor_32.h
+++ b/arch/sparc/include/asm/processor_32.h
@@ -1,4 +1,4 @@
-/* include/asm-sparc/processor.h
+/* include/asm/processor.h
  *
  * Copyright (C) 1994 David S. Miller (davem@caip.rutgers.edu)
  */
@@ -114,6 +114,7 @@
 
 extern unsigned long get_wchan(struct task_struct *);
 
+#define task_pt_regs(tsk) ((tsk)->thread.kregs)
 #define KSTK_EIP(tsk)  ((tsk)->thread.kregs->pc)
 #define KSTK_ESP(tsk)  ((tsk)->thread.kregs->u_regs[UREG_FP])
 
diff --git a/include/asm-sparc/processor_64.h b/arch/sparc/include/asm/processor_64.h
similarity index 99%
rename from include/asm-sparc/processor_64.h
rename to arch/sparc/include/asm/processor_64.h
index 70d4280..137a6bd 100644
--- a/include/asm-sparc/processor_64.h
+++ b/arch/sparc/include/asm/processor_64.h
@@ -1,5 +1,5 @@
 /*
- * include/asm-sparc64/processor.h
+ * include/asm/processor.h
  *
  * Copyright (C) 1996 David S. Miller (davem@caip.rutgers.edu)
  */
diff --git a/include/asm-sparc/prom.h b/arch/sparc/include/asm/prom.h
similarity index 100%
rename from include/asm-sparc/prom.h
rename to arch/sparc/include/asm/prom.h
diff --git a/include/asm-sparc/psr.h b/arch/sparc/include/asm/psr.h
similarity index 100%
rename from include/asm-sparc/psr.h
rename to arch/sparc/include/asm/psr.h
diff --git a/include/asm-sparc/psrcompat.h b/arch/sparc/include/asm/psrcompat.h
similarity index 100%
rename from include/asm-sparc/psrcompat.h
rename to arch/sparc/include/asm/psrcompat.h
diff --git a/include/asm-sparc/pstate.h b/arch/sparc/include/asm/pstate.h
similarity index 100%
rename from include/asm-sparc/pstate.h
rename to arch/sparc/include/asm/pstate.h
diff --git a/include/asm-sparc/ptrace.h b/arch/sparc/include/asm/ptrace.h
similarity index 65%
rename from include/asm-sparc/ptrace.h
rename to arch/sparc/include/asm/ptrace.h
index f36ab6c..6dcbe2e 100644
--- a/include/asm-sparc/ptrace.h
+++ b/arch/sparc/include/asm/ptrace.h
@@ -1,8 +1,8 @@
 #ifndef ___ASM_SPARC_PTRACE_H
 #define ___ASM_SPARC_PTRACE_H
 #if defined(__sparc__) && defined(__arch64__)
-#include <asm-sparc/ptrace_64.h>
+#include <asm/ptrace_64.h>
 #else
-#include <asm-sparc/ptrace_32.h>
+#include <asm/ptrace_32.h>
 #endif
 #endif
diff --git a/include/asm-sparc/ptrace_32.h b/arch/sparc/include/asm/ptrace_32.h
similarity index 98%
rename from include/asm-sparc/ptrace_32.h
rename to arch/sparc/include/asm/ptrace_32.h
index 0401cc7..d43c88b 100644
--- a/include/asm-sparc/ptrace_32.h
+++ b/arch/sparc/include/asm/ptrace_32.h
@@ -74,6 +74,7 @@
 
 #define user_mode(regs) (!((regs)->psr & PSR_PS))
 #define instruction_pointer(regs) ((regs)->pc)
+#define user_stack_pointer(regs) ((regs)->u_regs[UREG_FP])
 unsigned long profile_pc(struct pt_regs *);
 extern void show_regs(struct pt_regs *);
 #endif
diff --git a/include/asm-sparc/ptrace_64.h b/arch/sparc/include/asm/ptrace_64.h
similarity index 98%
rename from include/asm-sparc/ptrace_64.h
rename to arch/sparc/include/asm/ptrace_64.h
index a682e66..ec6d45c 100644
--- a/include/asm-sparc/ptrace_64.h
+++ b/arch/sparc/include/asm/ptrace_64.h
@@ -146,6 +146,7 @@
 } while (0)
 #define user_mode(regs) (!((regs)->tstate & TSTATE_PRIV))
 #define instruction_pointer(regs) ((regs)->tpc)
+#define user_stack_pointer(regs) ((regs)->u_regs[UREG_FP])
 #define regs_return_value(regs) ((regs)->u_regs[UREG_I0])
 #ifdef CONFIG_SMP
 extern unsigned long profile_pc(struct pt_regs *);
diff --git a/include/asm-sparc/reboot.h b/arch/sparc/include/asm/reboot.h
similarity index 100%
rename from include/asm-sparc/reboot.h
rename to arch/sparc/include/asm/reboot.h
diff --git a/include/asm-sparc/reg.h b/arch/sparc/include/asm/reg.h
similarity index 66%
rename from include/asm-sparc/reg.h
rename to arch/sparc/include/asm/reg.h
index cb34b0a..0c16e19 100644
--- a/include/asm-sparc/reg.h
+++ b/arch/sparc/include/asm/reg.h
@@ -1,8 +1,8 @@
 #ifndef ___ASM_SPARC_REG_H
 #define ___ASM_SPARC_REG_H
 #if defined(__sparc__) && defined(__arch64__)
-#include <asm-sparc/reg_64.h>
+#include <asm/reg_64.h>
 #else
-#include <asm-sparc/reg_32.h>
+#include <asm/reg_32.h>
 #endif
 #endif
diff --git a/include/asm-sparc/reg_32.h b/arch/sparc/include/asm/reg_32.h
similarity index 97%
rename from include/asm-sparc/reg_32.h
rename to arch/sparc/include/asm/reg_32.h
index 42fecfc..1efb056 100644
--- a/include/asm-sparc/reg_32.h
+++ b/arch/sparc/include/asm/reg_32.h
@@ -1,5 +1,5 @@
 /*
- * linux/include/asm-sparc/reg.h
+ * linux/include/asm/reg.h
  * Layout of the registers as expected by gdb on the Sparc
  * we should replace the user.h definitions with those in
  * this file, we don't even use the other
diff --git a/include/asm-sparc/reg_64.h b/arch/sparc/include/asm/reg_64.h
similarity index 97%
rename from include/asm-sparc/reg_64.h
rename to arch/sparc/include/asm/reg_64.h
index eb24a07..6f277d7 100644
--- a/include/asm-sparc/reg_64.h
+++ b/arch/sparc/include/asm/reg_64.h
@@ -1,5 +1,5 @@
 /*
- * linux/asm-sparc64/reg.h
+ * linux/asm/reg.h
  * Layout of the registers as expected by gdb on the Sparc
  * we should replace the user.h definitions with those in
  * this file, we don't even use the other
diff --git a/include/asm-sparc/resource.h b/arch/sparc/include/asm/resource.h
similarity index 100%
rename from include/asm-sparc/resource.h
rename to arch/sparc/include/asm/resource.h
diff --git a/include/asm-sparc/ross.h b/arch/sparc/include/asm/ross.h
similarity index 100%
rename from include/asm-sparc/ross.h
rename to arch/sparc/include/asm/ross.h
diff --git a/include/asm-sparc/rtc.h b/arch/sparc/include/asm/rtc.h
similarity index 100%
rename from include/asm-sparc/rtc.h
rename to arch/sparc/include/asm/rtc.h
diff --git a/include/asm-sparc/rwsem-const.h b/arch/sparc/include/asm/rwsem-const.h
similarity index 100%
rename from include/asm-sparc/rwsem-const.h
rename to arch/sparc/include/asm/rwsem-const.h
diff --git a/include/asm-sparc/rwsem.h b/arch/sparc/include/asm/rwsem.h
similarity index 100%
rename from include/asm-sparc/rwsem.h
rename to arch/sparc/include/asm/rwsem.h
diff --git a/include/asm-sparc/sbi.h b/arch/sparc/include/asm/sbi.h
similarity index 100%
rename from include/asm-sparc/sbi.h
rename to arch/sparc/include/asm/sbi.h
diff --git a/include/asm-sparc/sbus.h b/arch/sparc/include/asm/sbus.h
similarity index 66%
rename from include/asm-sparc/sbus.h
rename to arch/sparc/include/asm/sbus.h
index 8f29a19..f82481a 100644
--- a/include/asm-sparc/sbus.h
+++ b/arch/sparc/include/asm/sbus.h
@@ -1,8 +1,8 @@
 #ifndef ___ASM_SPARC_SBUS_H
 #define ___ASM_SPARC_SBUS_H
 #if defined(__sparc__) && defined(__arch64__)
-#include <asm-sparc/sbus_64.h>
+#include <asm/sbus_64.h>
 #else
-#include <asm-sparc/sbus_32.h>
+#include <asm/sbus_32.h>
 #endif
 #endif
diff --git a/include/asm-sparc/sbus_32.h b/arch/sparc/include/asm/sbus_32.h
similarity index 100%
rename from include/asm-sparc/sbus_32.h
rename to arch/sparc/include/asm/sbus_32.h
diff --git a/include/asm-sparc/sbus_64.h b/arch/sparc/include/asm/sbus_64.h
similarity index 100%
rename from include/asm-sparc/sbus_64.h
rename to arch/sparc/include/asm/sbus_64.h
diff --git a/include/asm-sparc/scatterlist.h b/arch/sparc/include/asm/scatterlist.h
similarity index 64%
rename from include/asm-sparc/scatterlist.h
rename to arch/sparc/include/asm/scatterlist.h
index b1a0e31..ec21a45 100644
--- a/include/asm-sparc/scatterlist.h
+++ b/arch/sparc/include/asm/scatterlist.h
@@ -1,8 +1,8 @@
 #ifndef ___ASM_SPARC_SCATTERLIST_H
 #define ___ASM_SPARC_SCATTERLIST_H
 #if defined(__sparc__) && defined(__arch64__)
-#include <asm-sparc/scatterlist_64.h>
+#include <asm/scatterlist_64.h>
 #else
-#include <asm-sparc/scatterlist_32.h>
+#include <asm/scatterlist_32.h>
 #endif
 #endif
diff --git a/include/asm-sparc/scatterlist_32.h b/arch/sparc/include/asm/scatterlist_32.h
similarity index 100%
rename from include/asm-sparc/scatterlist_32.h
rename to arch/sparc/include/asm/scatterlist_32.h
diff --git a/include/asm-sparc/scatterlist_64.h b/arch/sparc/include/asm/scatterlist_64.h
similarity index 100%
rename from include/asm-sparc/scatterlist_64.h
rename to arch/sparc/include/asm/scatterlist_64.h
diff --git a/include/asm-sparc/scratchpad.h b/arch/sparc/include/asm/scratchpad.h
similarity index 100%
rename from include/asm-sparc/scratchpad.h
rename to arch/sparc/include/asm/scratchpad.h
diff --git a/include/asm-sparc/seccomp.h b/arch/sparc/include/asm/seccomp.h
similarity index 100%
rename from include/asm-sparc/seccomp.h
rename to arch/sparc/include/asm/seccomp.h
diff --git a/include/asm-sparc/sections.h b/arch/sparc/include/asm/sections.h
similarity index 64%
rename from include/asm-sparc/sections.h
rename to arch/sparc/include/asm/sections.h
index cbd0191..c7c69b0 100644
--- a/include/asm-sparc/sections.h
+++ b/arch/sparc/include/asm/sections.h
@@ -1,8 +1,8 @@
 #ifndef ___ASM_SPARC_SECTIONS_H
 #define ___ASM_SPARC_SECTIONS_H
 #if defined(__sparc__) && defined(__arch64__)
-#include <asm-sparc/sections_64.h>
+#include <asm/sections_64.h>
 #else
-#include <asm-sparc/sections_32.h>
+#include <asm/sections_32.h>
 #endif
 #endif
diff --git a/include/asm-sparc/sections_32.h b/arch/sparc/include/asm/sections_32.h
similarity index 100%
rename from include/asm-sparc/sections_32.h
rename to arch/sparc/include/asm/sections_32.h
diff --git a/include/asm-sparc/sections_64.h b/arch/sparc/include/asm/sections_64.h
similarity index 100%
rename from include/asm-sparc/sections_64.h
rename to arch/sparc/include/asm/sections_64.h
diff --git a/include/asm-sparc/sembuf.h b/arch/sparc/include/asm/sembuf.h
similarity index 100%
rename from include/asm-sparc/sembuf.h
rename to arch/sparc/include/asm/sembuf.h
diff --git a/include/asm-sparc/setup.h b/arch/sparc/include/asm/setup.h
similarity index 100%
rename from include/asm-sparc/setup.h
rename to arch/sparc/include/asm/setup.h
diff --git a/include/asm-sparc/sfafsr.h b/arch/sparc/include/asm/sfafsr.h
similarity index 100%
rename from include/asm-sparc/sfafsr.h
rename to arch/sparc/include/asm/sfafsr.h
diff --git a/include/asm-sparc/sfp-machine.h b/arch/sparc/include/asm/sfp-machine.h
similarity index 64%
rename from include/asm-sparc/sfp-machine.h
rename to arch/sparc/include/asm/sfp-machine.h
index c676fcc..4ebc382 100644
--- a/include/asm-sparc/sfp-machine.h
+++ b/arch/sparc/include/asm/sfp-machine.h
@@ -1,8 +1,8 @@
 #ifndef ___ASM_SPARC_SFP_MACHINE_H
 #define ___ASM_SPARC_SFP_MACHINE_H
 #if defined(__sparc__) && defined(__arch64__)
-#include <asm-sparc/sfp-machine_64.h>
+#include <asm/sfp-machine_64.h>
 #else
-#include <asm-sparc/sfp-machine_32.h>
+#include <asm/sfp-machine_32.h>
 #endif
 #endif
diff --git a/include/asm-sparc/sfp-machine_32.h b/arch/sparc/include/asm/sfp-machine_32.h
similarity index 100%
rename from include/asm-sparc/sfp-machine_32.h
rename to arch/sparc/include/asm/sfp-machine_32.h
diff --git a/include/asm-sparc/sfp-machine_64.h b/arch/sparc/include/asm/sfp-machine_64.h
similarity index 100%
rename from include/asm-sparc/sfp-machine_64.h
rename to arch/sparc/include/asm/sfp-machine_64.h
diff --git a/include/asm-sparc/shmbuf.h b/arch/sparc/include/asm/shmbuf.h
similarity index 100%
rename from include/asm-sparc/shmbuf.h
rename to arch/sparc/include/asm/shmbuf.h
diff --git a/include/asm-sparc/shmparam.h b/arch/sparc/include/asm/shmparam.h
similarity index 64%
rename from include/asm-sparc/shmparam.h
rename to arch/sparc/include/asm/shmparam.h
index 16fda7e..8bf0cfe 100644
--- a/include/asm-sparc/shmparam.h
+++ b/arch/sparc/include/asm/shmparam.h
@@ -1,8 +1,8 @@
 #ifndef ___ASM_SPARC_SHMPARAM_H
 #define ___ASM_SPARC_SHMPARAM_H
 #if defined(__sparc__) && defined(__arch64__)
-#include <asm-sparc/shmparam_64.h>
+#include <asm/shmparam_64.h>
 #else
-#include <asm-sparc/shmparam_32.h>
+#include <asm/shmparam_32.h>
 #endif
 #endif
diff --git a/include/asm-sparc/shmparam_32.h b/arch/sparc/include/asm/shmparam_32.h
similarity index 100%
rename from include/asm-sparc/shmparam_32.h
rename to arch/sparc/include/asm/shmparam_32.h
diff --git a/include/asm-sparc/shmparam_64.h b/arch/sparc/include/asm/shmparam_64.h
similarity index 100%
rename from include/asm-sparc/shmparam_64.h
rename to arch/sparc/include/asm/shmparam_64.h
diff --git a/include/asm-sparc/sigcontext.h b/arch/sparc/include/asm/sigcontext.h
similarity index 64%
rename from include/asm-sparc/sigcontext.h
rename to arch/sparc/include/asm/sigcontext.h
index 82fc7d5..e92de7e 100644
--- a/include/asm-sparc/sigcontext.h
+++ b/arch/sparc/include/asm/sigcontext.h
@@ -1,8 +1,8 @@
 #ifndef ___ASM_SPARC_SIGCONTEXT_H
 #define ___ASM_SPARC_SIGCONTEXT_H
 #if defined(__sparc__) && defined(__arch64__)
-#include <asm-sparc/sigcontext_64.h>
+#include <asm/sigcontext_64.h>
 #else
-#include <asm-sparc/sigcontext_32.h>
+#include <asm/sigcontext_32.h>
 #endif
 #endif
diff --git a/include/asm-sparc/sigcontext_32.h b/arch/sparc/include/asm/sigcontext_32.h
similarity index 100%
rename from include/asm-sparc/sigcontext_32.h
rename to arch/sparc/include/asm/sigcontext_32.h
diff --git a/include/asm-sparc/sigcontext_64.h b/arch/sparc/include/asm/sigcontext_64.h
similarity index 100%
rename from include/asm-sparc/sigcontext_64.h
rename to arch/sparc/include/asm/sigcontext_64.h
diff --git a/include/asm-sparc/siginfo.h b/arch/sparc/include/asm/siginfo.h
similarity index 65%
rename from include/asm-sparc/siginfo.h
rename to arch/sparc/include/asm/siginfo.h
index 2c9fccf..bd81f8d 100644
--- a/include/asm-sparc/siginfo.h
+++ b/arch/sparc/include/asm/siginfo.h
@@ -1,8 +1,8 @@
 #ifndef ___ASM_SPARC_SIGINFO_H
 #define ___ASM_SPARC_SIGINFO_H
 #if defined(__sparc__) && defined(__arch64__)
-#include <asm-sparc/siginfo_64.h>
+#include <asm/siginfo_64.h>
 #else
-#include <asm-sparc/siginfo_32.h>
+#include <asm/siginfo_32.h>
 #endif
 #endif
diff --git a/include/asm-sparc/siginfo_32.h b/arch/sparc/include/asm/siginfo_32.h
similarity index 100%
rename from include/asm-sparc/siginfo_32.h
rename to arch/sparc/include/asm/siginfo_32.h
diff --git a/include/asm-sparc/siginfo_64.h b/arch/sparc/include/asm/siginfo_64.h
similarity index 100%
rename from include/asm-sparc/siginfo_64.h
rename to arch/sparc/include/asm/siginfo_64.h
diff --git a/include/asm-sparc/signal.h b/arch/sparc/include/asm/signal.h
similarity index 65%
rename from include/asm-sparc/signal.h
rename to arch/sparc/include/asm/signal.h
index 36f5f9e..27ab05d 100644
--- a/include/asm-sparc/signal.h
+++ b/arch/sparc/include/asm/signal.h
@@ -1,8 +1,8 @@
 #ifndef ___ASM_SPARC_SIGNAL_H
 #define ___ASM_SPARC_SIGNAL_H
 #if defined(__sparc__) && defined(__arch64__)
-#include <asm-sparc/signal_64.h>
+#include <asm/signal_64.h>
 #else
-#include <asm-sparc/signal_32.h>
+#include <asm/signal_32.h>
 #endif
 #endif
diff --git a/include/asm-sparc/signal_32.h b/arch/sparc/include/asm/signal_32.h
similarity index 100%
rename from include/asm-sparc/signal_32.h
rename to arch/sparc/include/asm/signal_32.h
diff --git a/include/asm-sparc/signal_64.h b/arch/sparc/include/asm/signal_64.h
similarity index 100%
rename from include/asm-sparc/signal_64.h
rename to arch/sparc/include/asm/signal_64.h
diff --git a/include/asm-sparc/smp.h b/arch/sparc/include/asm/smp.h
similarity index 66%
rename from include/asm-sparc/smp.h
rename to arch/sparc/include/asm/smp.h
index 1f9dedf..b59672d 100644
--- a/include/asm-sparc/smp.h
+++ b/arch/sparc/include/asm/smp.h
@@ -1,8 +1,8 @@
 #ifndef ___ASM_SPARC_SMP_H
 #define ___ASM_SPARC_SMP_H
 #if defined(__sparc__) && defined(__arch64__)
-#include <asm-sparc/smp_64.h>
+#include <asm/smp_64.h>
 #else
-#include <asm-sparc/smp_32.h>
+#include <asm/smp_32.h>
 #endif
 #endif
diff --git a/include/asm-sparc/smp_32.h b/arch/sparc/include/asm/smp_32.h
similarity index 100%
rename from include/asm-sparc/smp_32.h
rename to arch/sparc/include/asm/smp_32.h
diff --git a/include/asm-sparc/smp_64.h b/arch/sparc/include/asm/smp_64.h
similarity index 100%
rename from include/asm-sparc/smp_64.h
rename to arch/sparc/include/asm/smp_64.h
diff --git a/include/asm-sparc/smpprim.h b/arch/sparc/include/asm/smpprim.h
similarity index 100%
rename from include/asm-sparc/smpprim.h
rename to arch/sparc/include/asm/smpprim.h
diff --git a/include/asm-sparc/socket.h b/arch/sparc/include/asm/socket.h
similarity index 100%
rename from include/asm-sparc/socket.h
rename to arch/sparc/include/asm/socket.h
diff --git a/include/asm-sparc/sockios.h b/arch/sparc/include/asm/sockios.h
similarity index 100%
rename from include/asm-sparc/sockios.h
rename to arch/sparc/include/asm/sockios.h
diff --git a/include/asm-sparc/sparsemem.h b/arch/sparc/include/asm/sparsemem.h
similarity index 100%
rename from include/asm-sparc/sparsemem.h
rename to arch/sparc/include/asm/sparsemem.h
diff --git a/include/asm-sparc/spinlock.h b/arch/sparc/include/asm/spinlock.h
similarity index 64%
rename from include/asm-sparc/spinlock.h
rename to arch/sparc/include/asm/spinlock.h
index 3b71c50..f276b00 100644
--- a/include/asm-sparc/spinlock.h
+++ b/arch/sparc/include/asm/spinlock.h
@@ -1,8 +1,8 @@
 #ifndef ___ASM_SPARC_SPINLOCK_H
 #define ___ASM_SPARC_SPINLOCK_H
 #if defined(__sparc__) && defined(__arch64__)
-#include <asm-sparc/spinlock_64.h>
+#include <asm/spinlock_64.h>
 #else
-#include <asm-sparc/spinlock_32.h>
+#include <asm/spinlock_32.h>
 #endif
 #endif
diff --git a/include/asm-sparc/spinlock_32.h b/arch/sparc/include/asm/spinlock_32.h
similarity index 100%
rename from include/asm-sparc/spinlock_32.h
rename to arch/sparc/include/asm/spinlock_32.h
diff --git a/include/asm-sparc/spinlock_64.h b/arch/sparc/include/asm/spinlock_64.h
similarity index 100%
rename from include/asm-sparc/spinlock_64.h
rename to arch/sparc/include/asm/spinlock_64.h
diff --git a/include/asm-sparc/spinlock_types.h b/arch/sparc/include/asm/spinlock_types.h
similarity index 100%
rename from include/asm-sparc/spinlock_types.h
rename to arch/sparc/include/asm/spinlock_types.h
diff --git a/include/asm-sparc/spitfire.h b/arch/sparc/include/asm/spitfire.h
similarity index 100%
rename from include/asm-sparc/spitfire.h
rename to arch/sparc/include/asm/spitfire.h
diff --git a/include/asm-sparc/sstate.h b/arch/sparc/include/asm/sstate.h
similarity index 100%
rename from include/asm-sparc/sstate.h
rename to arch/sparc/include/asm/sstate.h
diff --git a/include/asm-sparc/stacktrace.h b/arch/sparc/include/asm/stacktrace.h
similarity index 100%
rename from include/asm-sparc/stacktrace.h
rename to arch/sparc/include/asm/stacktrace.h
diff --git a/include/asm-sparc/starfire.h b/arch/sparc/include/asm/starfire.h
similarity index 100%
rename from include/asm-sparc/starfire.h
rename to arch/sparc/include/asm/starfire.h
diff --git a/include/asm-sparc/stat.h b/arch/sparc/include/asm/stat.h
similarity index 66%
rename from include/asm-sparc/stat.h
rename to arch/sparc/include/asm/stat.h
index 9fdcaf8..d815301 100644
--- a/include/asm-sparc/stat.h
+++ b/arch/sparc/include/asm/stat.h
@@ -1,8 +1,8 @@
 #ifndef ___ASM_SPARC_STAT_H
 #define ___ASM_SPARC_STAT_H
 #if defined(__sparc__) && defined(__arch64__)
-#include <asm-sparc/stat_64.h>
+#include <asm/stat_64.h>
 #else
-#include <asm-sparc/stat_32.h>
+#include <asm/stat_32.h>
 #endif
 #endif
diff --git a/include/asm-sparc/stat_32.h b/arch/sparc/include/asm/stat_32.h
similarity index 100%
rename from include/asm-sparc/stat_32.h
rename to arch/sparc/include/asm/stat_32.h
diff --git a/include/asm-sparc/stat_64.h b/arch/sparc/include/asm/stat_64.h
similarity index 100%
rename from include/asm-sparc/stat_64.h
rename to arch/sparc/include/asm/stat_64.h
diff --git a/include/asm-sparc/statfs.h b/arch/sparc/include/asm/statfs.h
similarity index 65%
rename from include/asm-sparc/statfs.h
rename to arch/sparc/include/asm/statfs.h
index a70cc52..5e937a7 100644
--- a/include/asm-sparc/statfs.h
+++ b/arch/sparc/include/asm/statfs.h
@@ -1,8 +1,8 @@
 #ifndef ___ASM_SPARC_STATFS_H
 #define ___ASM_SPARC_STATFS_H
 #if defined(__sparc__) && defined(__arch64__)
-#include <asm-sparc/statfs_64.h>
+#include <asm/statfs_64.h>
 #else
-#include <asm-sparc/statfs_32.h>
+#include <asm/statfs_32.h>
 #endif
 #endif
diff --git a/include/asm-sparc/statfs_32.h b/arch/sparc/include/asm/statfs_32.h
similarity index 100%
rename from include/asm-sparc/statfs_32.h
rename to arch/sparc/include/asm/statfs_32.h
diff --git a/include/asm-sparc/statfs_64.h b/arch/sparc/include/asm/statfs_64.h
similarity index 100%
rename from include/asm-sparc/statfs_64.h
rename to arch/sparc/include/asm/statfs_64.h
diff --git a/include/asm-sparc/string.h b/arch/sparc/include/asm/string.h
similarity index 65%
rename from include/asm-sparc/string.h
rename to arch/sparc/include/asm/string.h
index 14c04c7..98b72a0 100644
--- a/include/asm-sparc/string.h
+++ b/arch/sparc/include/asm/string.h
@@ -1,8 +1,8 @@
 #ifndef ___ASM_SPARC_STRING_H
 #define ___ASM_SPARC_STRING_H
 #if defined(__sparc__) && defined(__arch64__)
-#include <asm-sparc/string_64.h>
+#include <asm/string_64.h>
 #else
-#include <asm-sparc/string_32.h>
+#include <asm/string_32.h>
 #endif
 #endif
diff --git a/include/asm-sparc/string_32.h b/arch/sparc/include/asm/string_32.h
similarity index 100%
rename from include/asm-sparc/string_32.h
rename to arch/sparc/include/asm/string_32.h
diff --git a/include/asm-sparc/string_64.h b/arch/sparc/include/asm/string_64.h
similarity index 100%
rename from include/asm-sparc/string_64.h
rename to arch/sparc/include/asm/string_64.h
diff --git a/include/asm-sparc/sun4paddr.h b/arch/sparc/include/asm/sun4paddr.h
similarity index 100%
rename from include/asm-sparc/sun4paddr.h
rename to arch/sparc/include/asm/sun4paddr.h
diff --git a/include/asm-sparc/sun4prom.h b/arch/sparc/include/asm/sun4prom.h
similarity index 100%
rename from include/asm-sparc/sun4prom.h
rename to arch/sparc/include/asm/sun4prom.h
diff --git a/include/asm-sparc/sunbpp.h b/arch/sparc/include/asm/sunbpp.h
similarity index 98%
rename from include/asm-sparc/sunbpp.h
rename to arch/sparc/include/asm/sunbpp.h
index 92ee1a8..d81a02e 100644
--- a/include/asm-sparc/sunbpp.h
+++ b/arch/sparc/include/asm/sunbpp.h
@@ -1,5 +1,5 @@
 /*
- * include/asm-sparc/sunbpp.h
+ * include/asm/sunbpp.h
  */
 
 #ifndef _ASM_SPARC_SUNBPP_H
diff --git a/include/asm-sparc/swift.h b/arch/sparc/include/asm/swift.h
similarity index 100%
rename from include/asm-sparc/swift.h
rename to arch/sparc/include/asm/swift.h
diff --git a/arch/sparc/include/asm/syscall.h b/arch/sparc/include/asm/syscall.h
new file mode 100644
index 0000000..7486c60
--- /dev/null
+++ b/arch/sparc/include/asm/syscall.h
@@ -0,0 +1,120 @@
+#ifndef __ASM_SPARC_SYSCALL_H
+#define __ASM_SPARC_SYSCALL_H
+
+#include <linux/kernel.h>
+#include <linux/sched.h>
+#include <asm/ptrace.h>
+
+/* The system call number is given by the user in %g1 */
+static inline long syscall_get_nr(struct task_struct *task,
+				  struct pt_regs *regs)
+{
+	int syscall_p = pt_regs_is_syscall(regs);
+
+	return (syscall_p ? regs->u_regs[UREG_G1] : -1L);
+}
+
+static inline void syscall_rollback(struct task_struct *task,
+				    struct pt_regs *regs)
+{
+	/* XXX This needs some thought.  On Sparc we don't
+	 * XXX save away the original %o0 value somewhere.
+	 * XXX Instead we hold it in register %l5 at the top
+	 * XXX level trap frame and pass this down to the signal
+	 * XXX dispatch code which is the only place that value
+	 * XXX ever was needed.
+	 */
+}
+
+#ifdef CONFIG_SPARC32
+static inline bool syscall_has_error(struct pt_regs *regs)
+{
+	return (regs->psr & PSR_C) ? true : false;
+}
+static inline void syscall_set_error(struct pt_regs *regs)
+{
+	regs->psr |= PSR_C;
+}
+static inline void syscall_clear_error(struct pt_regs *regs)
+{
+	regs->psr &= ~PSR_C;
+}
+#else
+static inline bool syscall_has_error(struct pt_regs *regs)
+{
+	return (regs->tstate & (TSTATE_XCARRY | TSTATE_ICARRY)) ? true : false;
+}
+static inline void syscall_set_error(struct pt_regs *regs)
+{
+	regs->tstate |= (TSTATE_XCARRY | TSTATE_ICARRY);
+}
+static inline void syscall_clear_error(struct pt_regs *regs)
+{
+	regs->tstate &= ~(TSTATE_XCARRY | TSTATE_ICARRY);
+}
+#endif
+
+static inline long syscall_get_error(struct task_struct *task,
+				     struct pt_regs *regs)
+{
+	long val = regs->u_regs[UREG_I0];
+
+	return (syscall_has_error(regs) ? -val : 0);
+}
+
+static inline long syscall_get_return_value(struct task_struct *task,
+					    struct pt_regs *regs)
+{
+	long val = regs->u_regs[UREG_I0];
+
+	return val;
+}
+
+static inline void syscall_set_return_value(struct task_struct *task,
+					    struct pt_regs *regs,
+					    int error, long val)
+{
+	if (error) {
+		syscall_set_error(regs);
+		regs->u_regs[UREG_I0] = -error;
+	} else {
+		syscall_clear_error(regs);
+		regs->u_regs[UREG_I0] = val;
+	}
+}
+
+static inline void syscall_get_arguments(struct task_struct *task,
+					 struct pt_regs *regs,
+					 unsigned int i, unsigned int n,
+					 unsigned long *args)
+{
+	int zero_extend = 0;
+	unsigned int j;
+
+#ifdef CONFIG_SPARC64
+	if (test_tsk_thread_flag(task, TIF_32BIT))
+		zero_extend = 1;
+#endif
+
+	for (j = 0; j < n; j++) {
+		unsigned long val = regs->u_regs[UREG_I0 + i + j];
+
+		if (zero_extend)
+			args[j] = (u32) val;
+		else
+			args[j] = val;
+	}
+}
+
+static inline void syscall_set_arguments(struct task_struct *task,
+					 struct pt_regs *regs,
+					 unsigned int i, unsigned int n,
+					 const unsigned long *args)
+{
+	unsigned int j;
+
+	for (j = 0; j < n; j++)
+		regs->u_regs[UREG_I0 + i + j] = args[j];
+}
+
+#endif /* __ASM_SPARC_SYSCALL_H */
diff --git a/include/asm-sparc/syscalls.h b/arch/sparc/include/asm/syscalls.h
similarity index 100%
rename from include/asm-sparc/syscalls.h
rename to arch/sparc/include/asm/syscalls.h
diff --git a/include/asm-sparc/sysen.h b/arch/sparc/include/asm/sysen.h
similarity index 100%
rename from include/asm-sparc/sysen.h
rename to arch/sparc/include/asm/sysen.h
diff --git a/include/asm-sparc/system.h b/arch/sparc/include/asm/system.h
similarity index 65%
rename from include/asm-sparc/system.h
rename to arch/sparc/include/asm/system.h
index 15e2a3b..7944a7c 100644
--- a/include/asm-sparc/system.h
+++ b/arch/sparc/include/asm/system.h
@@ -1,8 +1,8 @@
 #ifndef ___ASM_SPARC_SYSTEM_H
 #define ___ASM_SPARC_SYSTEM_H
 #if defined(__sparc__) && defined(__arch64__)
-#include <asm-sparc/system_64.h>
+#include <asm/system_64.h>
 #else
-#include <asm-sparc/system_32.h>
+#include <asm/system_32.h>
 #endif
 #endif
diff --git a/include/asm-sparc/system_32.h b/arch/sparc/include/asm/system_32.h
similarity index 100%
rename from include/asm-sparc/system_32.h
rename to arch/sparc/include/asm/system_32.h
diff --git a/include/asm-sparc/system_64.h b/arch/sparc/include/asm/system_64.h
similarity index 100%
rename from include/asm-sparc/system_64.h
rename to arch/sparc/include/asm/system_64.h
diff --git a/include/asm-sparc/termbits.h b/arch/sparc/include/asm/termbits.h
similarity index 100%
rename from include/asm-sparc/termbits.h
rename to arch/sparc/include/asm/termbits.h
diff --git a/include/asm-sparc/termios.h b/arch/sparc/include/asm/termios.h
similarity index 100%
rename from include/asm-sparc/termios.h
rename to arch/sparc/include/asm/termios.h
diff --git a/include/asm-sparc/thread_info.h b/arch/sparc/include/asm/thread_info.h
similarity index 64%
rename from include/asm-sparc/thread_info.h
rename to arch/sparc/include/asm/thread_info.h
index 64155cf..122d7ac 100644
--- a/include/asm-sparc/thread_info.h
+++ b/arch/sparc/include/asm/thread_info.h
@@ -1,8 +1,8 @@
 #ifndef ___ASM_SPARC_THREAD_INFO_H
 #define ___ASM_SPARC_THREAD_INFO_H
 #if defined(__sparc__) && defined(__arch64__)
-#include <asm-sparc/thread_info_64.h>
+#include <asm/thread_info_64.h>
 #else
-#include <asm-sparc/thread_info_32.h>
+#include <asm/thread_info_32.h>
 #endif
 #endif
diff --git a/include/asm-sparc/thread_info_32.h b/arch/sparc/include/asm/thread_info_32.h
similarity index 94%
rename from include/asm-sparc/thread_info_32.h
rename to arch/sparc/include/asm/thread_info_32.h
index 2cf9db0..cbb892d 100644
--- a/include/asm-sparc/thread_info_32.h
+++ b/arch/sparc/include/asm/thread_info_32.h
@@ -130,7 +130,7 @@
  * thread information flag bit numbers
  */
 #define TIF_SYSCALL_TRACE	0	/* syscall trace active */
-/* flag bit 1 is available */
+#define TIF_NOTIFY_RESUME	1	/* callback before returning to user */
 #define TIF_SIGPENDING		2	/* signal pending */
 #define TIF_NEED_RESCHED	3	/* rescheduling necessary */
 #define TIF_RESTORE_SIGMASK	4	/* restore signal mask in do_signal() */
@@ -142,12 +142,17 @@
 
 /* as above, but as bit values */
 #define _TIF_SYSCALL_TRACE	(1<<TIF_SYSCALL_TRACE)
+#define _TIF_NOTIFY_RESUME	(1<<TIF_NOTIFY_RESUME)
 #define _TIF_SIGPENDING		(1<<TIF_SIGPENDING)
 #define _TIF_NEED_RESCHED	(1<<TIF_NEED_RESCHED)
 #define _TIF_RESTORE_SIGMASK	(1<<TIF_RESTORE_SIGMASK)
 #define _TIF_USEDFPU		(1<<TIF_USEDFPU)
 #define _TIF_POLLING_NRFLAG	(1<<TIF_POLLING_NRFLAG)
 
+#define _TIF_DO_NOTIFY_RESUME_MASK	(_TIF_NOTIFY_RESUME | \
+					 _TIF_SIGPENDING | \
+					 _TIF_RESTORE_SIGMASK)
+
 #endif /* __KERNEL__ */
 
 #endif /* _ASM_THREAD_INFO_H */
diff --git a/include/asm-sparc/thread_info_64.h b/arch/sparc/include/asm/thread_info_64.h
similarity index 96%
rename from include/asm-sparc/thread_info_64.h
rename to arch/sparc/include/asm/thread_info_64.h
index 960969d..c0a737d 100644
--- a/include/asm-sparc/thread_info_64.h
+++ b/arch/sparc/include/asm/thread_info_64.h
@@ -219,7 +219,7 @@
  *	 nop
  */
 #define TIF_SYSCALL_TRACE	0	/* syscall trace active */
-/* flags bit 1 is available */
+#define TIF_NOTIFY_RESUME	1	/* callback before returning to user */
 #define TIF_SIGPENDING		2	/* signal pending */
 #define TIF_NEED_RESCHED	3	/* rescheduling necessary */
 #define TIF_PERFCTR		4	/* performance counters active */
@@ -239,6 +239,7 @@
 #define TIF_POLLING_NRFLAG	14
 
 #define _TIF_SYSCALL_TRACE	(1<<TIF_SYSCALL_TRACE)
+#define _TIF_NOTIFY_RESUME	(1<<TIF_NOTIFY_RESUME)
 #define _TIF_SIGPENDING		(1<<TIF_SIGPENDING)
 #define _TIF_NEED_RESCHED	(1<<TIF_NEED_RESCHED)
 #define _TIF_PERFCTR		(1<<TIF_PERFCTR)
@@ -250,8 +251,9 @@
 #define _TIF_POLLING_NRFLAG	(1<<TIF_POLLING_NRFLAG)
 
 #define _TIF_USER_WORK_MASK	((0xff << TI_FLAG_WSAVED_SHIFT) | \
-				 (_TIF_SIGPENDING | \
-				  _TIF_NEED_RESCHED | _TIF_PERFCTR))
+				 _TIF_DO_NOTIFY_RESUME_MASK | \
+				 _TIF_NEED_RESCHED | _TIF_PERFCTR)
+#define _TIF_DO_NOTIFY_RESUME_MASK	(_TIF_NOTIFY_RESUME | _TIF_SIGPENDING)
 
 /*
  * Thread-synchronous status.
diff --git a/include/asm-sparc/timer.h b/arch/sparc/include/asm/timer.h
similarity index 65%
rename from include/asm-sparc/timer.h
rename to arch/sparc/include/asm/timer.h
index 475baa0..612fd27 100644
--- a/include/asm-sparc/timer.h
+++ b/arch/sparc/include/asm/timer.h
@@ -1,8 +1,8 @@
 #ifndef ___ASM_SPARC_TIMER_H
 #define ___ASM_SPARC_TIMER_H
 #if defined(__sparc__) && defined(__arch64__)
-#include <asm-sparc/timer_64.h>
+#include <asm/timer_64.h>
 #else
-#include <asm-sparc/timer_32.h>
+#include <asm/timer_32.h>
 #endif
 #endif
diff --git a/include/asm-sparc/timer_32.h b/arch/sparc/include/asm/timer_32.h
similarity index 100%
rename from include/asm-sparc/timer_32.h
rename to arch/sparc/include/asm/timer_32.h
diff --git a/include/asm-sparc/timer_64.h b/arch/sparc/include/asm/timer_64.h
similarity index 100%
rename from include/asm-sparc/timer_64.h
rename to arch/sparc/include/asm/timer_64.h
diff --git a/include/asm-sparc/timex.h b/arch/sparc/include/asm/timex.h
similarity index 65%
rename from include/asm-sparc/timex.h
rename to arch/sparc/include/asm/timex.h
index 01d9f19..70cc37b 100644
--- a/include/asm-sparc/timex.h
+++ b/arch/sparc/include/asm/timex.h
@@ -1,8 +1,8 @@
 #ifndef ___ASM_SPARC_TIMEX_H
 #define ___ASM_SPARC_TIMEX_H
 #if defined(__sparc__) && defined(__arch64__)
-#include <asm-sparc/timex_64.h>
+#include <asm/timex_64.h>
 #else
-#include <asm-sparc/timex_32.h>
+#include <asm/timex_32.h>
 #endif
 #endif
diff --git a/include/asm-sparc/timex_32.h b/arch/sparc/include/asm/timex_32.h
similarity index 88%
rename from include/asm-sparc/timex_32.h
rename to arch/sparc/include/asm/timex_32.h
index 71b45c9..b6ccdb0 100644
--- a/include/asm-sparc/timex_32.h
+++ b/arch/sparc/include/asm/timex_32.h
@@ -1,5 +1,5 @@
 /*
- * linux/include/asm-sparc/timex.h
+ * linux/include/asm/timex.h
  *
  * sparc architecture timex specifications
  */
diff --git a/include/asm-sparc/timex_64.h b/arch/sparc/include/asm/timex_64.h
similarity index 90%
rename from include/asm-sparc/timex_64.h
rename to arch/sparc/include/asm/timex_64.h
index c622535..18b30bc 100644
--- a/include/asm-sparc/timex_64.h
+++ b/arch/sparc/include/asm/timex_64.h
@@ -1,5 +1,5 @@
 /*
- * linux/include/asm-sparc64/timex.h
+ * linux/include/asm/timex.h
  *
  * sparc64 architecture timex specifications
  */
diff --git a/include/asm-sparc/tlb.h b/arch/sparc/include/asm/tlb.h
similarity index 66%
rename from include/asm-sparc/tlb.h
rename to arch/sparc/include/asm/tlb.h
index a821057..92d0393 100644
--- a/include/asm-sparc/tlb.h
+++ b/arch/sparc/include/asm/tlb.h
@@ -1,8 +1,8 @@
 #ifndef ___ASM_SPARC_TLB_H
 #define ___ASM_SPARC_TLB_H
 #if defined(__sparc__) && defined(__arch64__)
-#include <asm-sparc/tlb_64.h>
+#include <asm/tlb_64.h>
 #else
-#include <asm-sparc/tlb_32.h>
+#include <asm/tlb_32.h>
 #endif
 #endif
diff --git a/include/asm-sparc/tlb_32.h b/arch/sparc/include/asm/tlb_32.h
similarity index 100%
rename from include/asm-sparc/tlb_32.h
rename to arch/sparc/include/asm/tlb_32.h
diff --git a/include/asm-sparc/tlb_64.h b/arch/sparc/include/asm/tlb_64.h
similarity index 100%
rename from include/asm-sparc/tlb_64.h
rename to arch/sparc/include/asm/tlb_64.h
diff --git a/include/asm-sparc/tlbflush.h b/arch/sparc/include/asm/tlbflush.h
similarity index 64%
rename from include/asm-sparc/tlbflush.h
rename to arch/sparc/include/asm/tlbflush.h
index 6e6bc12..2c9629f 100644
--- a/include/asm-sparc/tlbflush.h
+++ b/arch/sparc/include/asm/tlbflush.h
@@ -1,8 +1,8 @@
 #ifndef ___ASM_SPARC_TLBFLUSH_H
 #define ___ASM_SPARC_TLBFLUSH_H
 #if defined(__sparc__) && defined(__arch64__)
-#include <asm-sparc/tlbflush_64.h>
+#include <asm/tlbflush_64.h>
 #else
-#include <asm-sparc/tlbflush_32.h>
+#include <asm/tlbflush_32.h>
 #endif
 #endif
diff --git a/include/asm-sparc/tlbflush_32.h b/arch/sparc/include/asm/tlbflush_32.h
similarity index 100%
rename from include/asm-sparc/tlbflush_32.h
rename to arch/sparc/include/asm/tlbflush_32.h
diff --git a/include/asm-sparc/tlbflush_64.h b/arch/sparc/include/asm/tlbflush_64.h
similarity index 100%
rename from include/asm-sparc/tlbflush_64.h
rename to arch/sparc/include/asm/tlbflush_64.h
diff --git a/include/asm-sparc/topology.h b/arch/sparc/include/asm/topology.h
similarity index 64%
rename from include/asm-sparc/topology.h
rename to arch/sparc/include/asm/topology.h
index ed13630..ee4f191 100644
--- a/include/asm-sparc/topology.h
+++ b/arch/sparc/include/asm/topology.h
@@ -1,8 +1,8 @@
 #ifndef ___ASM_SPARC_TOPOLOGY_H
 #define ___ASM_SPARC_TOPOLOGY_H
 #if defined(__sparc__) && defined(__arch64__)
-#include <asm-sparc/topology_64.h>
+#include <asm/topology_64.h>
 #else
-#include <asm-sparc/topology_32.h>
+#include <asm/topology_32.h>
 #endif
 #endif
diff --git a/include/asm-sparc/topology_32.h b/arch/sparc/include/asm/topology_32.h
similarity index 100%
rename from include/asm-sparc/topology_32.h
rename to arch/sparc/include/asm/topology_32.h
diff --git a/include/asm-sparc/topology_64.h b/arch/sparc/include/asm/topology_64.h
similarity index 100%
rename from include/asm-sparc/topology_64.h
rename to arch/sparc/include/asm/topology_64.h
diff --git a/include/asm-sparc/traps.h b/arch/sparc/include/asm/traps.h
similarity index 100%
rename from include/asm-sparc/traps.h
rename to arch/sparc/include/asm/traps.h
diff --git a/include/asm-sparc/tsb.h b/arch/sparc/include/asm/tsb.h
similarity index 100%
rename from include/asm-sparc/tsb.h
rename to arch/sparc/include/asm/tsb.h
diff --git a/include/asm-sparc/tsunami.h b/arch/sparc/include/asm/tsunami.h
similarity index 100%
rename from include/asm-sparc/tsunami.h
rename to arch/sparc/include/asm/tsunami.h
diff --git a/include/asm-sparc/ttable.h b/arch/sparc/include/asm/ttable.h
similarity index 100%
rename from include/asm-sparc/ttable.h
rename to arch/sparc/include/asm/ttable.h
diff --git a/include/asm-sparc/turbosparc.h b/arch/sparc/include/asm/turbosparc.h
similarity index 100%
rename from include/asm-sparc/turbosparc.h
rename to arch/sparc/include/asm/turbosparc.h
diff --git a/include/asm-sparc/types.h b/arch/sparc/include/asm/types.h
similarity index 100%
rename from include/asm-sparc/types.h
rename to arch/sparc/include/asm/types.h
diff --git a/include/asm-sparc/uaccess.h b/arch/sparc/include/asm/uaccess.h
similarity index 65%
rename from include/asm-sparc/uaccess.h
rename to arch/sparc/include/asm/uaccess.h
index 424facc..e88fbe5 100644
--- a/include/asm-sparc/uaccess.h
+++ b/arch/sparc/include/asm/uaccess.h
@@ -1,8 +1,8 @@
 #ifndef ___ASM_SPARC_UACCESS_H
 #define ___ASM_SPARC_UACCESS_H
 #if defined(__sparc__) && defined(__arch64__)
-#include <asm-sparc/uaccess_64.h>
+#include <asm/uaccess_64.h>
 #else
-#include <asm-sparc/uaccess_32.h>
+#include <asm/uaccess_32.h>
 #endif
 #endif
diff --git a/include/asm-sparc/uaccess_32.h b/arch/sparc/include/asm/uaccess_32.h
similarity index 100%
rename from include/asm-sparc/uaccess_32.h
rename to arch/sparc/include/asm/uaccess_32.h
diff --git a/include/asm-sparc/uaccess_64.h b/arch/sparc/include/asm/uaccess_64.h
similarity index 100%
rename from include/asm-sparc/uaccess_64.h
rename to arch/sparc/include/asm/uaccess_64.h
diff --git a/include/asm-sparc/uctx.h b/arch/sparc/include/asm/uctx.h
similarity index 100%
rename from include/asm-sparc/uctx.h
rename to arch/sparc/include/asm/uctx.h
diff --git a/include/asm-sparc/unaligned.h b/arch/sparc/include/asm/unaligned.h
similarity index 100%
rename from include/asm-sparc/unaligned.h
rename to arch/sparc/include/asm/unaligned.h
diff --git a/include/asm-sparc/unistd.h b/arch/sparc/include/asm/unistd.h
similarity index 65%
rename from include/asm-sparc/unistd.h
rename to arch/sparc/include/asm/unistd.h
index 3c26096..4207fb36 100644
--- a/include/asm-sparc/unistd.h
+++ b/arch/sparc/include/asm/unistd.h
@@ -1,8 +1,8 @@
 #ifndef ___ASM_SPARC_UNISTD_H
 #define ___ASM_SPARC_UNISTD_H
 #if defined(__sparc__) && defined(__arch64__)
-#include <asm-sparc/unistd_64.h>
+#include <asm/unistd_64.h>
 #else
-#include <asm-sparc/unistd_32.h>
+#include <asm/unistd_32.h>
 #endif
 #endif
diff --git a/include/asm-sparc/unistd_32.h b/arch/sparc/include/asm/unistd_32.h
similarity index 100%
rename from include/asm-sparc/unistd_32.h
rename to arch/sparc/include/asm/unistd_32.h
diff --git a/include/asm-sparc/unistd_64.h b/arch/sparc/include/asm/unistd_64.h
similarity index 100%
rename from include/asm-sparc/unistd_64.h
rename to arch/sparc/include/asm/unistd_64.h
diff --git a/include/asm-sparc/upa.h b/arch/sparc/include/asm/upa.h
similarity index 100%
rename from include/asm-sparc/upa.h
rename to arch/sparc/include/asm/upa.h
diff --git a/include/asm-sparc/user.h b/arch/sparc/include/asm/user.h
similarity index 100%
rename from include/asm-sparc/user.h
rename to arch/sparc/include/asm/user.h
diff --git a/include/asm-sparc/utrap.h b/arch/sparc/include/asm/utrap.h
similarity index 97%
rename from include/asm-sparc/utrap.h
rename to arch/sparc/include/asm/utrap.h
index 9da37ba..b10e527 100644
--- a/include/asm-sparc/utrap.h
+++ b/arch/sparc/include/asm/utrap.h
@@ -1,5 +1,5 @@
 /*
- * include/asm-sparc64/utrap.h
+ * include/asm/utrap.h
  *
  * Copyright (C) 1997 Jakub Jelinek (jj@sunsite.mff.cuni.cz)
  */
diff --git a/include/asm-sparc/vac-ops.h b/arch/sparc/include/asm/vac-ops.h
similarity index 100%
rename from include/asm-sparc/vac-ops.h
rename to arch/sparc/include/asm/vac-ops.h
diff --git a/include/asm-sparc/vaddrs.h b/arch/sparc/include/asm/vaddrs.h
similarity index 96%
rename from include/asm-sparc/vaddrs.h
rename to arch/sparc/include/asm/vaddrs.h
index a22fed5..541e137 100644
--- a/include/asm-sparc/vaddrs.h
+++ b/arch/sparc/include/asm/vaddrs.h
@@ -4,7 +4,7 @@
 #include <asm/head.h>
 
 /*
- * asm-sparc/vaddrs.h:  Here we define the virtual addresses at
+ * asm/vaddrs.h:  Here we define the virtual addresses at
  *                      which important things will be mapped.
  *
  * Copyright (C) 1995 David S. Miller (davem@caip.rutgers.edu)
diff --git a/include/asm-sparc/vfc_ioctls.h b/arch/sparc/include/asm/vfc_ioctls.h
similarity index 100%
rename from include/asm-sparc/vfc_ioctls.h
rename to arch/sparc/include/asm/vfc_ioctls.h
diff --git a/include/asm-sparc/vga.h b/arch/sparc/include/asm/vga.h
similarity index 100%
rename from include/asm-sparc/vga.h
rename to arch/sparc/include/asm/vga.h
diff --git a/include/asm-sparc/viking.h b/arch/sparc/include/asm/viking.h
similarity index 100%
rename from include/asm-sparc/viking.h
rename to arch/sparc/include/asm/viking.h
diff --git a/include/asm-sparc/vio.h b/arch/sparc/include/asm/vio.h
similarity index 100%
rename from include/asm-sparc/vio.h
rename to arch/sparc/include/asm/vio.h
diff --git a/include/asm-sparc/visasm.h b/arch/sparc/include/asm/visasm.h
similarity index 100%
rename from include/asm-sparc/visasm.h
rename to arch/sparc/include/asm/visasm.h
diff --git a/include/asm-sparc/watchdog.h b/arch/sparc/include/asm/watchdog.h
similarity index 100%
rename from include/asm-sparc/watchdog.h
rename to arch/sparc/include/asm/watchdog.h
diff --git a/include/asm-sparc/winmacro.h b/arch/sparc/include/asm/winmacro.h
similarity index 100%
rename from include/asm-sparc/winmacro.h
rename to arch/sparc/include/asm/winmacro.h
diff --git a/include/asm-sparc/xor.h b/arch/sparc/include/asm/xor.h
similarity index 66%
rename from include/asm-sparc/xor.h
rename to arch/sparc/include/asm/xor.h
index 35089a8..8ed591c 100644
--- a/include/asm-sparc/xor.h
+++ b/arch/sparc/include/asm/xor.h
@@ -1,8 +1,8 @@
 #ifndef ___ASM_SPARC_XOR_H
 #define ___ASM_SPARC_XOR_H
 #if defined(__sparc__) && defined(__arch64__)
-#include <asm-sparc/xor_64.h>
+#include <asm/xor_64.h>
 #else
-#include <asm-sparc/xor_32.h>
+#include <asm/xor_32.h>
 #endif
 #endif
diff --git a/include/asm-sparc/xor_32.h b/arch/sparc/include/asm/xor_32.h
similarity index 99%
rename from include/asm-sparc/xor_32.h
rename to arch/sparc/include/asm/xor_32.h
index f34b2cf..44bfa07 100644
--- a/include/asm-sparc/xor_32.h
+++ b/arch/sparc/include/asm/xor_32.h
@@ -1,5 +1,5 @@
 /*
- * include/asm-sparc/xor.h
+ * include/asm/xor.h
  *
  * Optimized RAID-5 checksumming functions for 32-bit Sparc.
  *
diff --git a/include/asm-sparc/xor_64.h b/arch/sparc/include/asm/xor_64.h
similarity index 98%
rename from include/asm-sparc/xor_64.h
rename to arch/sparc/include/asm/xor_64.h
index a023388..bee4bf4 100644
--- a/include/asm-sparc/xor_64.h
+++ b/arch/sparc/include/asm/xor_64.h
@@ -1,5 +1,5 @@
 /*
- * include/asm-sparc64/xor.h
+ * include/asm/xor.h
  *
  * High speed xor_block operation for RAID4/5 utilizing the
  * UltraSparc Visual Instruction Set and Niagara block-init
diff --git a/arch/sparc/kernel/entry.S b/arch/sparc/kernel/entry.S
index 2f96256..e8cdf71 100644
--- a/arch/sparc/kernel/entry.S
+++ b/arch/sparc/kernel/entry.S
@@ -1196,8 +1196,9 @@
 	be	1f
 	 nop
 
+	add	%sp, STACKFRAME_SZ, %o0
 	call	syscall_trace
-	 nop
+	 mov	1, %o1
 
 1:
 	/* We are returning to a signal handler. */
@@ -1287,8 +1288,12 @@
 	 mov	%i3, %o3
 
 linux_syscall_trace:
+	add	%sp, STACKFRAME_SZ, %o0
 	call	syscall_trace
-	 nop
+	 mov	0, %o1
+	cmp	%o0, 0
+	bne	3f
+	 mov	-ENOSYS, %o0
 	mov	%i0, %o0
 	mov	%i1, %o1
 	mov	%i2, %o2
@@ -1337,6 +1342,7 @@
 	call	%l7
 	 mov	%i5, %o5
 
+3:
 	st	%o0, [%sp + STACKFRAME_SZ + PT_I0]
 
 ret_sys_call:
@@ -1374,6 +1380,8 @@
 	 st	%l2, [%sp + STACKFRAME_SZ + PT_NPC]
 
 linux_syscall_trace2:
+	add	%sp, STACKFRAME_SZ, %o0
+	mov	1, %o1
 	call	syscall_trace
 	 add	%l1, 0x4, %l2			/* npc = npc+4 */
 	st	%l1, [%sp + STACKFRAME_SZ + PT_PC]
diff --git a/arch/sparc/kernel/ptrace.c b/arch/sparc/kernel/ptrace.c
index 81f3b92..20699c7 100644
--- a/arch/sparc/kernel/ptrace.c
+++ b/arch/sparc/kernel/ptrace.c
@@ -21,6 +21,7 @@
 #include <linux/signal.h>
 #include <linux/regset.h>
 #include <linux/elf.h>
+#include <linux/tracehook.h>
 
 #include <asm/pgtable.h>
 #include <asm/system.h>
@@ -450,21 +451,16 @@
 	return ret;
 }
 
-asmlinkage void syscall_trace(void)
+asmlinkage int syscall_trace(struct pt_regs *regs, int syscall_exit_p)
 {
-	if (!test_thread_flag(TIF_SYSCALL_TRACE))
-		return;
-	if (!(current->ptrace & PT_PTRACED))
-		return;
-	ptrace_notify(SIGTRAP | ((current->ptrace & PT_TRACESYSGOOD)
-				 ? 0x80 : 0));
-	/*
-	 * this isn't the same as continuing with a signal, but it will do
-	 * for normal use.  strace only continues with a signal if the
-	 * stopping signal is not SIGTRAP.  -brl
-	 */
-	if (current->exit_code) {
-		send_sig (current->exit_code, current, 1);
-		current->exit_code = 0;
+	int ret = 0;
+
+	if (test_thread_flag(TIF_SYSCALL_TRACE)) {
+		if (syscall_exit_p)
+			tracehook_report_syscall_exit(regs, 0);
+		else
+			ret = tracehook_report_syscall_entry(regs);
 	}
+
+	return ret;
 }
diff --git a/arch/sparc/kernel/rtrap.S b/arch/sparc/kernel/rtrap.S
index 891f460..4da2e1f 100644
--- a/arch/sparc/kernel/rtrap.S
+++ b/arch/sparc/kernel/rtrap.S
@@ -69,12 +69,13 @@
 
 	ld	[%curptr + TI_FLAGS], %g2
 signal_p:
-	andcc	%g2, (_TIF_SIGPENDING|_TIF_RESTORE_SIGMASK), %g0
+	andcc	%g2, _TIF_DO_NOTIFY_RESUME_MASK, %g0
 	bz,a	ret_trap_continue
 	 ld	[%sp + STACKFRAME_SZ + PT_PSR], %t_psr
 
+	mov	%g2, %o2
 	mov	%l5, %o1
-	call	do_signal
+	call	do_notify_resume
 	 add	%sp, STACKFRAME_SZ, %o0	! pt_regs ptr
 
 	/* Fall through. */
diff --git a/arch/sparc/kernel/signal.c b/arch/sparc/kernel/signal.c
index 3fd1df9..c94f91c 100644
--- a/arch/sparc/kernel/signal.c
+++ b/arch/sparc/kernel/signal.c
@@ -18,6 +18,7 @@
 #include <linux/smp.h>
 #include <linux/binfmts.h>	/* do_coredum */
 #include <linux/bitops.h>
+#include <linux/tracehook.h>
 
 #include <asm/uaccess.h>
 #include <asm/ptrace.h>
@@ -513,7 +514,7 @@
  * want to handle. Thus you cannot kill init even with a SIGKILL even by
  * mistake.
  */
-asmlinkage void do_signal(struct pt_regs * regs, unsigned long orig_i0)
+static void do_signal(struct pt_regs *regs, unsigned long orig_i0)
 {
 	struct k_sigaction ka;
 	int restart_syscall;
@@ -552,6 +553,8 @@
 		 */
 		if (test_thread_flag(TIF_RESTORE_SIGMASK))
 			clear_thread_flag(TIF_RESTORE_SIGMASK);
+
+		tracehook_signal_handler(signr, &info, &ka, regs, 0);
 		return;
 	}
 	if (restart_syscall &&
@@ -579,6 +582,17 @@
 	}
 }
 
+void do_notify_resume(struct pt_regs *regs, unsigned long orig_i0,
+		      unsigned long thread_info_flags)
+{
+	if (thread_info_flags & (_TIF_SIGPENDING | _TIF_RESTORE_SIGMASK))
+		do_signal(regs, orig_i0);
+	if (thread_info_flags & _TIF_NOTIFY_RESUME) {
+		clear_thread_flag(TIF_NOTIFY_RESUME);
+		tracehook_notify_resume(regs);
+	}
+}
+
 asmlinkage int
 do_sys_sigstack(struct sigstack __user *ssptr, struct sigstack __user *ossptr,
 		unsigned long sp)
diff --git a/arch/sparc64/Kconfig b/arch/sparc64/Kconfig
index 7c88263..923a989 100644
--- a/arch/sparc64/Kconfig
+++ b/arch/sparc64/Kconfig
@@ -17,6 +17,7 @@
 	select HAVE_LMB
 	select HAVE_ARCH_KGDB
 	select USE_GENERIC_SMP_HELPERS if SMP
+	select HAVE_ARCH_TRACEHOOK
 
 config GENERIC_TIME
 	bool
diff --git a/arch/sparc64/kernel/compat_audit.c b/arch/sparc64/kernel/compat_audit.c
index c197948..c831b0a 100644
--- a/arch/sparc64/kernel/compat_audit.c
+++ b/arch/sparc64/kernel/compat_audit.c
@@ -1,4 +1,4 @@
-#include <asm-sparc/unistd.h>
+#include <asm/unistd_32.h>
 
 unsigned sparc32_dir_class[] = {
 #include <asm-generic/audit_dir_write.h>
diff --git a/arch/sparc64/kernel/entry.h b/arch/sparc64/kernel/entry.h
index 32fbab6..fc294a2 100644
--- a/arch/sparc64/kernel/entry.h
+++ b/arch/sparc64/kernel/entry.h
@@ -22,8 +22,7 @@
 			     unsigned long orig_i0,
 			     unsigned long thread_info_flags);
 
-extern asmlinkage void syscall_trace(struct pt_regs *regs,
-				     int syscall_exit_p);
+extern asmlinkage int syscall_trace(struct pt_regs *regs, int syscall_exit_p);
 
 extern void bad_trap_tl1(struct pt_regs *regs, long lvl);
 
diff --git a/arch/sparc64/kernel/ptrace.c b/arch/sparc64/kernel/ptrace.c
index f6c9fc9..bd578cc 100644
--- a/arch/sparc64/kernel/ptrace.c
+++ b/arch/sparc64/kernel/ptrace.c
@@ -23,6 +23,7 @@
 #include <linux/audit.h>
 #include <linux/signal.h>
 #include <linux/regset.h>
+#include <linux/tracehook.h>
 #include <linux/compat.h>
 #include <linux/elf.h>
 
@@ -1049,8 +1050,10 @@
 	return ret;
 }
 
-asmlinkage void syscall_trace(struct pt_regs *regs, int syscall_exit_p)
+asmlinkage int syscall_trace(struct pt_regs *regs, int syscall_exit_p)
 {
+	int ret = 0;
+
 	/* do the secure computing check first */
 	secure_computing(regs->u_regs[UREG_G1]);
 
@@ -1064,27 +1067,14 @@
 		audit_syscall_exit(result, regs->u_regs[UREG_I0]);
 	}
 
-	if (!(current->ptrace & PT_PTRACED))
-		goto out;
-
-	if (!test_thread_flag(TIF_SYSCALL_TRACE))
-		goto out;
-
-	ptrace_notify(SIGTRAP | ((current->ptrace & PT_TRACESYSGOOD)
-				 ? 0x80 : 0));
-
-	/*
-	 * this isn't the same as continuing with a signal, but it will do
-	 * for normal use.  strace only continues with a signal if the
-	 * stopping signal is not SIGTRAP.  -brl
-	 */
-	if (current->exit_code) {
-		send_sig(current->exit_code, current, 1);
-		current->exit_code = 0;
+	if (test_thread_flag(TIF_SYSCALL_TRACE)) {
+		if (syscall_exit_p)
+			tracehook_report_syscall_exit(regs, 0);
+		else
+			ret = tracehook_report_syscall_entry(regs);
 	}
 
-out:
-	if (unlikely(current->audit_context) && !syscall_exit_p)
+	if (unlikely(current->audit_context) && !syscall_exit_p && !ret)
 		audit_syscall_entry((test_thread_flag(TIF_32BIT) ?
 				     AUDIT_ARCH_SPARC :
 				     AUDIT_ARCH_SPARC64),
@@ -1093,4 +1083,6 @@
 				    regs->u_regs[UREG_I1],
 				    regs->u_regs[UREG_I2],
 				    regs->u_regs[UREG_I3]);
+
+	return ret;
 }
diff --git a/arch/sparc64/kernel/rtrap.S b/arch/sparc64/kernel/rtrap.S
index c6fc695..97a993c 100644
--- a/arch/sparc64/kernel/rtrap.S
+++ b/arch/sparc64/kernel/rtrap.S
@@ -46,7 +46,7 @@
 		wrpr			%g0, RTRAP_PSTATE_IRQOFF, %pstate
 		ldx			[%g6 + TI_FLAGS], %l0
 
-1:		andcc			%l0, _TIF_SIGPENDING, %g0
+1:		andcc			%l0, _TIF_DO_NOTIFY_RESUME_MASK, %g0
 		be,pt			%xcc, __handle_user_windows_continue
 		 nop
 		mov			%l5, %o1
@@ -86,7 +86,7 @@
 		 wrpr			%g0, RTRAP_PSTATE, %pstate
 		wrpr			%g0, RTRAP_PSTATE_IRQOFF, %pstate
 		ldx			[%g6 + TI_FLAGS], %l0
-1:		andcc			%l0, _TIF_SIGPENDING, %g0
+1:		andcc			%l0, _TIF_DO_NOTIFY_RESUME_MASK, %g0
 
 		be,pt			%xcc, __handle_perfctrs_continue
 		 sethi			%hi(TSTATE_PEF), %o0
@@ -195,7 +195,7 @@
 		 andcc			%l1, %o0, %g0
 		andcc			%l0, _TIF_NEED_RESCHED, %g0
 		bne,pn			%xcc, __handle_preemption
-		 andcc			%l0, _TIF_SIGPENDING, %g0
+		 andcc			%l0, _TIF_DO_NOTIFY_RESUME_MASK, %g0
 		bne,pn			%xcc, __handle_signal
 __handle_signal_continue:
 		 ldub			[%g6 + TI_WSAVED], %o2
diff --git a/arch/sparc64/kernel/signal.c b/arch/sparc64/kernel/signal.c
index 9667e96..d1b8445 100644
--- a/arch/sparc64/kernel/signal.c
+++ b/arch/sparc64/kernel/signal.c
@@ -17,11 +17,13 @@
 #include <linux/errno.h>
 #include <linux/wait.h>
 #include <linux/ptrace.h>
+#include <linux/tracehook.h>
 #include <linux/unistd.h>
 #include <linux/mm.h>
 #include <linux/tty.h>
 #include <linux/binfmts.h>
 #include <linux/bitops.h>
+#include <linux/tracehook.h>
 
 #include <asm/uaccess.h>
 #include <asm/ptrace.h>
@@ -574,6 +576,8 @@
 		 * clear the TS_RESTORE_SIGMASK flag.
 		 */
 		current_thread_info()->status &= ~TS_RESTORE_SIGMASK;
+
+		tracehook_signal_handler(signr, &info, &ka, regs, 0);
 		return;
 	}
 	if (restart_syscall &&
@@ -605,4 +609,8 @@
 {
 	if (thread_info_flags & _TIF_SIGPENDING)
 		do_signal(regs, orig_i0);
+	if (thread_info_flags & _TIF_NOTIFY_RESUME) {
+		clear_thread_flag(TIF_NOTIFY_RESUME);
+		tracehook_notify_resume(regs);
+	}
 }
diff --git a/arch/sparc64/kernel/signal32.c b/arch/sparc64/kernel/signal32.c
index 97cdd1b..ba5b09a 100644
--- a/arch/sparc64/kernel/signal32.c
+++ b/arch/sparc64/kernel/signal32.c
@@ -19,6 +19,7 @@
 #include <linux/binfmts.h>
 #include <linux/compat.h>
 #include <linux/bitops.h>
+#include <linux/tracehook.h>
 
 #include <asm/uaccess.h>
 #include <asm/ptrace.h>
@@ -794,6 +795,8 @@
 		 * clear the TS_RESTORE_SIGMASK flag.
 		 */
 		current_thread_info()->status &= ~TS_RESTORE_SIGMASK;
+
+		tracehook_signal_handler(signr, &info, &ka, regs, 0);
 		return;
 	}
 	if (restart_syscall &&
diff --git a/arch/sparc64/kernel/syscalls.S b/arch/sparc64/kernel/syscalls.S
index db19ed6..a2f2427 100644
--- a/arch/sparc64/kernel/syscalls.S
+++ b/arch/sparc64/kernel/syscalls.S
@@ -162,6 +162,8 @@
 	add	%sp, PTREGS_OFF, %o0
 	call	syscall_trace
 	 clr	%o1
+	brnz,pn	%o0, 3f
+	 mov	-ENOSYS, %o0
 	srl	%i0, 0, %o0
 	srl	%i4, 0, %o4
 	srl	%i1, 0, %o1
@@ -173,6 +175,8 @@
 	add	%sp, PTREGS_OFF, %o0
 	call	syscall_trace
 	 clr	%o1
+	brnz,pn	%o0, 3f
+	 mov	-ENOSYS, %o0
 	mov	%i0, %o0
 	mov	%i1, %o1
 	mov	%i2, %o2
diff --git a/drivers/acpi/processor_idle.c b/drivers/acpi/processor_idle.c
index b7f2963..283c08f 100644
--- a/drivers/acpi/processor_idle.c
+++ b/drivers/acpi/processor_idle.c
@@ -1332,9 +1332,15 @@
 	if (!pr->flags.power_setup_done)
 		return -ENODEV;
 
-	/* Fall back to the default idle loop */
-	pm_idle = pm_idle_save;
-	synchronize_sched();	/* Relies on interrupts forcing exit from idle. */
+	/*
+	 * Fall back to the default idle loop, when pm_idle_save had
+	 * been initialized.
+	 */
+	if (pm_idle_save) {
+		pm_idle = pm_idle_save;
+		/* Relies on interrupts forcing exit from idle. */
+		synchronize_sched();
+	}
 
 	pr->flags.power = 0;
 	result = acpi_processor_get_power_info(pr);
@@ -1896,7 +1902,8 @@
 
 	/* Unregister the idle handler when processor #0 is removed. */
 	if (pr->id == 0) {
-		pm_idle = pm_idle_save;
+		if (pm_idle_save)
+			pm_idle = pm_idle_save;
 
 		/*
 		 * We are about to unload the current idle thread pm callback
diff --git a/drivers/base/memory.c b/drivers/base/memory.c
index 3ad49a0..af0d175 100644
--- a/drivers/base/memory.c
+++ b/drivers/base/memory.c
@@ -103,7 +103,8 @@
 /*
  * Show whether the section of memory is likely to be hot-removable
  */
-static ssize_t show_mem_removable(struct sys_device *dev, char *buf)
+static ssize_t show_mem_removable(struct sys_device *dev,
+			struct sysdev_attribute *attr, char *buf)
 {
 	unsigned long start_pfn;
 	int ret;
diff --git a/drivers/char/pcmcia/ipwireless/hardware.c b/drivers/char/pcmcia/ipwireless/hardware.c
index 929101e..7d500f8 100644
--- a/drivers/char/pcmcia/ipwireless/hardware.c
+++ b/drivers/char/pcmcia/ipwireless/hardware.c
@@ -30,11 +30,11 @@
 static void ipw_send_setup_packet(struct ipw_hardware *hw);
 static void handle_received_SETUP_packet(struct ipw_hardware *ipw,
 					 unsigned int address,
-					 unsigned char *data, int len,
+					 const unsigned char *data, int len,
 					 int is_last);
 static void ipwireless_setup_timer(unsigned long data);
 static void handle_received_CTRL_packet(struct ipw_hardware *hw,
-		unsigned int channel_idx, unsigned char *data, int len);
+		unsigned int channel_idx, const unsigned char *data, int len);
 
 /*#define TIMING_DIAGNOSTICS*/
 
@@ -79,8 +79,7 @@
 		timing_stats.last_report_time = jiffies;
 		if (!first)
 			printk(KERN_INFO IPWIRELESS_PCCARD_NAME
-			       ": %u us elapsed - read %lu bytes in %u us, "
-			       "wrote %lu bytes in %u us\n",
+			       ": %u us elapsed - read %lu bytes in %u us, wrote %lu bytes in %u us\n",
 			       jiffies_to_usecs(since),
 			       timing_stats.read_bytes,
 			       jiffies_to_usecs(timing_stats.read_time),
@@ -133,29 +132,17 @@
 #define NL_FOLLOWING_PACKET_HEADER_SIZE    1
 
 struct nl_first_packet_header {
-#if defined(__BIG_ENDIAN_BITFIELD)
-	unsigned char packet_rank:2;
-	unsigned char address:3;
-	unsigned char protocol:3;
-#else
 	unsigned char protocol:3;
 	unsigned char address:3;
 	unsigned char packet_rank:2;
-#endif
 	unsigned char length_lsb;
 	unsigned char length_msb;
 };
 
 struct nl_packet_header {
-#if defined(__BIG_ENDIAN_BITFIELD)
-	unsigned char packet_rank:2;
-	unsigned char address:3;
-	unsigned char protocol:3;
-#else
 	unsigned char protocol:3;
 	unsigned char address:3;
 	unsigned char packet_rank:2;
-#endif
 };
 
 /* Value of 'packet_rank' above */
@@ -227,15 +214,12 @@
 	unsigned short memreg_tx_new;	/* TX2 (new) Register (R/W) */
 };
 
-#define IODMADPR 0x00		/* DMA Data Port Register (R/W) */
-
 #define CARD_PRESENT_VALUE (0xBEEFCAFEUL)
 
 #define MEMTX_TX                       0x0001
 #define MEMRX_RX                       0x0001
 #define MEMRX_RX_DONE                  0x0001
 #define MEMRX_PCINTACKK                0x0001
-#define MEMRX_MEMSPURIOUSINT           0x0001
 
 #define NL_NUM_OF_PRIORITIES       3
 #define NL_NUM_OF_PROTOCOLS        3
@@ -245,7 +229,7 @@
 	unsigned int base_port;
 	short hw_version;
 	unsigned short ll_mtu;
-	spinlock_t spinlock;
+	spinlock_t lock;
 
 	int initializing;
 	int init_loops;
@@ -386,26 +370,52 @@
 			length < DUMP_MAX_BYTES ? length : DUMP_MAX_BYTES);
 }
 
-static int do_send_fragment(struct ipw_hardware *hw, const unsigned char *data,
+static void swap_packet_bitfield_to_le(unsigned char *data)
+{
+#ifdef __BIG_ENDIAN_BITFIELD
+	unsigned char tmp = *data, ret = 0;
+
+	/*
+	 * transform bits from aa.bbb.ccc to ccc.bbb.aa
+	 */
+	ret |= tmp & 0xc0 >> 6;
+	ret |= tmp & 0x38 >> 1;
+	ret |= tmp & 0x07 << 5;
+	*data = ret & 0xff;
+#endif
+}
+
+static void swap_packet_bitfield_from_le(unsigned char *data)
+{
+#ifdef __BIG_ENDIAN_BITFIELD
+	unsigned char tmp = *data, ret = 0;
+
+	/*
+	 * transform bits from ccc.bbb.aa to aa.bbb.ccc
+	 */
+	ret |= tmp & 0xe0 >> 5;
+	ret |= tmp & 0x1c << 1;
+	ret |= tmp & 0x03 << 6;
+	*data = ret & 0xff;
+#endif
+}
+
+static void do_send_fragment(struct ipw_hardware *hw, unsigned char *data,
 			    unsigned length)
 {
-	int i;
+	unsigned i;
 	unsigned long flags;
 
 	start_timing();
-
-	if (length == 0)
-		return 0;
-
-	if (length > hw->ll_mtu)
-		return -1;
+	BUG_ON(length > hw->ll_mtu);
 
 	if (ipwireless_debug)
 		dump_data_bytes("send", data, length);
 
-	spin_lock_irqsave(&hw->spinlock, flags);
+	spin_lock_irqsave(&hw->lock, flags);
 
 	hw->tx_ready = 0;
+	swap_packet_bitfield_to_le(data);
 
 	if (hw->hw_version == HW_VERSION_1) {
 		outw((unsigned short) length, hw->base_port + IODWR);
@@ -414,7 +424,7 @@
 			unsigned short d = data[i];
 			__le16 raw_data;
 
-			if (likely(i + 1 < length))
+			if (i + 1 < length)
 				d |= data[i + 1] << 8;
 			raw_data = cpu_to_le16(d);
 			outw(raw_data, hw->base_port + IODWR);
@@ -422,32 +432,30 @@
 
 		outw(DCR_TXDONE, hw->base_port + IODCR);
 	} else if (hw->hw_version == HW_VERSION_2) {
-		outw((unsigned short) length, hw->base_port + IODMADPR);
+		outw((unsigned short) length, hw->base_port);
 
 		for (i = 0; i < length; i += 2) {
 			unsigned short d = data[i];
 			__le16 raw_data;
 
-			if ((i + 1 < length))
+			if (i + 1 < length)
 				d |= data[i + 1] << 8;
 			raw_data = cpu_to_le16(d);
-			outw(raw_data, hw->base_port + IODMADPR);
+			outw(raw_data, hw->base_port);
 		}
 		while ((i & 3) != 2) {
-			outw((unsigned short) 0xDEAD, hw->base_port + IODMADPR);
+			outw((unsigned short) 0xDEAD, hw->base_port);
 			i += 2;
 		}
 		writew(MEMRX_RX, &hw->memory_info_regs->memreg_rx);
 	}
 
-	spin_unlock_irqrestore(&hw->spinlock, flags);
+	spin_unlock_irqrestore(&hw->lock, flags);
 
 	end_write_timing(length);
-
-	return 0;
 }
 
-static int do_send_packet(struct ipw_hardware *hw, struct ipw_tx_packet *packet)
+static void do_send_packet(struct ipw_hardware *hw, struct ipw_tx_packet *packet)
 {
 	unsigned short fragment_data_len;
 	unsigned short data_left = packet->length - packet->offset;
@@ -462,6 +470,10 @@
 	if (data_left < fragment_data_len)
 		fragment_data_len = data_left;
 
+	/*
+	 * hdr_first is now in machine bitfield order, which will be swapped
+	 * to le just before it goes to hw
+	 */
 	pkt.hdr_first.protocol = packet->protocol;
 	pkt.hdr_first.address = packet->dest_addr;
 	pkt.hdr_first.packet_rank = 0;
@@ -493,25 +505,23 @@
 		 */
 		unsigned long flags;
 
-		spin_lock_irqsave(&hw->spinlock, flags);
+		spin_lock_irqsave(&hw->lock, flags);
 		list_add(&packet->queue, &hw->tx_queue[0]);
 		hw->tx_queued++;
-		spin_unlock_irqrestore(&hw->spinlock, flags);
+		spin_unlock_irqrestore(&hw->lock, flags);
 	} else {
 		if (packet->packet_callback)
 			packet->packet_callback(packet->callback_data,
 					packet->length);
 		kfree(packet);
 	}
-
-	return 0;
 }
 
 static void ipw_setup_hardware(struct ipw_hardware *hw)
 {
 	unsigned long flags;
 
-	spin_lock_irqsave(&hw->spinlock, flags);
+	spin_lock_irqsave(&hw->lock, flags);
 	if (hw->hw_version == HW_VERSION_1) {
 		/* Reset RX FIFO */
 		outw(DCR_RXRESET, hw->base_port + IODCR);
@@ -530,7 +540,7 @@
 		csr |= 1;
 		writew(csr, &hw->memregs_CCR->reg_config_and_status);
 	}
-	spin_unlock_irqrestore(&hw->spinlock, flags);
+	spin_unlock_irqrestore(&hw->lock, flags);
 }
 
 /*
@@ -549,28 +559,23 @@
 	if (!packet) {
 		unsigned long flags;
 
-		/*
-		 * If this is the first fragment, then we will need to fetch a
-		 * packet to put it in.
-		 */
-		spin_lock_irqsave(&hw->spinlock, flags);
-		/* If we have one in our pool, then pull it out. */
+		spin_lock_irqsave(&hw->lock, flags);
 		if (!list_empty(&hw->rx_pool)) {
 			packet = list_first_entry(&hw->rx_pool,
 					struct ipw_rx_packet, queue);
-			list_del(&packet->queue);
 			hw->rx_pool_size--;
-			spin_unlock_irqrestore(&hw->spinlock, flags);
+			spin_unlock_irqrestore(&hw->lock, flags);
+			list_del(&packet->queue);
 		} else {
-			/* Otherwise allocate a new one. */
-			static int min_capacity = 256;
+			const int min_capacity =
+				ipwireless_ppp_mru(hw->network + 2);
 			int new_capacity;
 
-			spin_unlock_irqrestore(&hw->spinlock, flags);
+			spin_unlock_irqrestore(&hw->lock, flags);
 			new_capacity =
-			    minimum_free_space > min_capacity
-			    ? minimum_free_space
-			    : min_capacity;
+				(minimum_free_space > min_capacity
+				 ? minimum_free_space
+				 : min_capacity);
 			packet = kmalloc(sizeof(struct ipw_rx_packet)
 					+ new_capacity, GFP_ATOMIC);
 			if (!packet)
@@ -580,10 +585,6 @@
 		packet->length = 0;
 	}
 
-	/*
-	 * If this packet does not have sufficient capacity for the data we
-	 * want to add, then make it bigger.
-	 */
 	if (packet->length + minimum_free_space > packet->capacity) {
 		struct ipw_rx_packet *old_packet = packet;
 
@@ -610,13 +611,15 @@
 		kfree(packet);
 	else {
 		hw->rx_pool_size++;
-		list_add_tail(&packet->queue, &hw->rx_pool);
+		list_add(&packet->queue, &hw->rx_pool);
 	}
 }
 
 static void queue_received_packet(struct ipw_hardware *hw,
-				  unsigned int protocol, unsigned int address,
-				  unsigned char *data, int length, int is_last)
+				  unsigned int protocol,
+				  unsigned int address,
+				  const unsigned char *data, int length,
+				  int is_last)
 {
 	unsigned int channel_idx = address - 1;
 	struct ipw_rx_packet *packet = NULL;
@@ -658,9 +661,9 @@
 			packet = *assem;
 			*assem = NULL;
 			/* Count queued DATA bytes only */
-			spin_lock_irqsave(&hw->spinlock, flags);
+			spin_lock_irqsave(&hw->lock, flags);
 			hw->rx_bytes_queued += packet->length;
-			spin_unlock_irqrestore(&hw->spinlock, flags);
+			spin_unlock_irqrestore(&hw->lock, flags);
 		}
 	} else {
 		/* If it's a CTRL packet, don't assemble, just queue it. */
@@ -682,13 +685,13 @@
 	 * network layer.
 	 */
 	if (packet) {
-		spin_lock_irqsave(&hw->spinlock, flags);
+		spin_lock_irqsave(&hw->lock, flags);
 		list_add_tail(&packet->queue, &hw->rx_queue);
 		/* Block reception of incoming packets if queue is full. */
 		hw->blocking_rx =
-			hw->rx_bytes_queued >= IPWIRELESS_RX_QUEUE_SIZE;
+			(hw->rx_bytes_queued >= IPWIRELESS_RX_QUEUE_SIZE);
 
-		spin_unlock_irqrestore(&hw->spinlock, flags);
+		spin_unlock_irqrestore(&hw->lock, flags);
 		schedule_work(&hw->work_rx);
 	}
 }
@@ -702,7 +705,7 @@
 	    container_of(work_rx, struct ipw_hardware, work_rx);
 	unsigned long flags;
 
-	spin_lock_irqsave(&hw->spinlock, flags);
+	spin_lock_irqsave(&hw->lock, flags);
 	while (!list_empty(&hw->rx_queue)) {
 		struct ipw_rx_packet *packet =
 			list_first_entry(&hw->rx_queue,
@@ -720,7 +723,7 @@
 		if (packet->protocol == TL_PROTOCOLID_COM_DATA) {
 			if (hw->network != NULL) {
 				/* If the network hasn't been disconnected. */
-				spin_unlock_irqrestore(&hw->spinlock, flags);
+				spin_unlock_irqrestore(&hw->lock, flags);
 				/*
 				 * This must run unlocked due to tty processing
 				 * and mutex locking
@@ -731,7 +734,7 @@
 						(unsigned char *)packet
 						+ sizeof(struct ipw_rx_packet),
 						packet->length);
-				spin_lock_irqsave(&hw->spinlock, flags);
+				spin_lock_irqsave(&hw->lock, flags);
 			}
 			/* Count queued DATA bytes only */
 			hw->rx_bytes_queued -= packet->length;
@@ -755,15 +758,15 @@
 		if (hw->shutting_down)
 			break;
 	}
-	spin_unlock_irqrestore(&hw->spinlock, flags);
+	spin_unlock_irqrestore(&hw->lock, flags);
 }
 
 static void handle_received_CTRL_packet(struct ipw_hardware *hw,
 					unsigned int channel_idx,
-					unsigned char *data, int len)
+					const unsigned char *data, int len)
 {
-	struct ipw_control_packet_body *body =
-		(struct ipw_control_packet_body *) data;
+	const struct ipw_control_packet_body *body =
+		(const struct ipw_control_packet_body *) data;
 	unsigned int changed_mask;
 
 	if (len != sizeof(struct ipw_control_packet_body)) {
@@ -805,13 +808,13 @@
 }
 
 static void handle_received_packet(struct ipw_hardware *hw,
-				   union nl_packet *packet,
+				   const union nl_packet *packet,
 				   unsigned short len)
 {
 	unsigned int protocol = packet->hdr.protocol;
 	unsigned int address = packet->hdr.address;
 	unsigned int header_length;
-	unsigned char *data;
+	const unsigned char *data;
 	unsigned int data_len;
 	int is_last = packet->hdr.packet_rank & NL_LAST_PACKET;
 
@@ -850,7 +853,7 @@
 static void do_receive_packet(struct ipw_hardware *hw)
 {
 	unsigned len;
-	unsigned int i;
+	unsigned i;
 	unsigned char pkt[LL_MTU_MAX];
 
 	start_timing();
@@ -859,8 +862,7 @@
 		len = inw(hw->base_port + IODRR);
 		if (len > hw->ll_mtu) {
 			printk(KERN_INFO IPWIRELESS_PCCARD_NAME
-			       ": received a packet of %u bytes - "
-			       "longer than the MTU!\n", len);
+			       ": received a packet of %u bytes - longer than the MTU!\n", len);
 			outw(DCR_RXDONE | DCR_RXRESET, hw->base_port + IODCR);
 			return;
 		}
@@ -873,18 +875,17 @@
 			pkt[i + 1] = (unsigned char) (data >> 8);
 		}
 	} else {
-		len = inw(hw->base_port + IODMADPR);
+		len = inw(hw->base_port);
 		if (len > hw->ll_mtu) {
 			printk(KERN_INFO IPWIRELESS_PCCARD_NAME
-			       ": received a packet of %u bytes - "
-			       "longer than the MTU!\n", len);
+			       ": received a packet of %u bytes - longer than the MTU!\n", len);
 			writew(MEMRX_PCINTACKK,
 				&hw->memory_info_regs->memreg_pc_interrupt_ack);
 			return;
 		}
 
 		for (i = 0; i < len; i += 2) {
-			__le16 raw_data = inw(hw->base_port + IODMADPR);
+			__le16 raw_data = inw(hw->base_port);
 			unsigned short data = le16_to_cpu(raw_data);
 
 			pkt[i] = (unsigned char) data;
@@ -892,13 +893,15 @@
 		}
 
 		while ((i & 3) != 2) {
-			inw(hw->base_port + IODMADPR);
+			inw(hw->base_port);
 			i += 2;
 		}
 	}
 
 	acknowledge_data_read(hw);
 
+	swap_packet_bitfield_from_le(pkt);
+
 	if (ipwireless_debug)
 		dump_data_bytes("recv", pkt, len);
 
@@ -916,8 +919,7 @@
 	 * until setup is complete.
 	 */
 	return (hw->to_setup || hw->initializing
-			? PRIO_SETUP + 1 :
-			NL_NUM_OF_PRIORITIES);
+			? PRIO_SETUP + 1 : NL_NUM_OF_PRIORITIES);
 }
 
 /*
@@ -928,17 +930,17 @@
 	int received = 0;
 	unsigned long flags;
 
-	spin_lock_irqsave(&hw->spinlock, flags);
+	spin_lock_irqsave(&hw->lock, flags);
 	while (hw->rx_ready && !hw->blocking_rx) {
 		received = 1;
 		hw->rx_ready--;
-		spin_unlock_irqrestore(&hw->spinlock, flags);
+		spin_unlock_irqrestore(&hw->lock, flags);
 
 		do_receive_packet(hw);
 
-		spin_lock_irqsave(&hw->spinlock, flags);
+		spin_lock_irqsave(&hw->lock, flags);
 	}
-	spin_unlock_irqrestore(&hw->spinlock, flags);
+	spin_unlock_irqrestore(&hw->lock, flags);
 
 	return received;
 }
@@ -954,7 +956,7 @@
 	int more_to_send = 0;
 	unsigned long flags;
 
-	spin_lock_irqsave(&hw->spinlock, flags);
+	spin_lock_irqsave(&hw->lock, flags);
 	if (hw->tx_queued && hw->tx_ready) {
 		int priority;
 		struct ipw_tx_packet *packet = NULL;
@@ -975,17 +977,17 @@
 		}
 		if (!packet) {
 			hw->tx_queued = 0;
-			spin_unlock_irqrestore(&hw->spinlock, flags);
+			spin_unlock_irqrestore(&hw->lock, flags);
 			return 0;
 		}
 
-		spin_unlock_irqrestore(&hw->spinlock, flags);
+		spin_unlock_irqrestore(&hw->lock, flags);
 
 		/* Send */
 		do_send_packet(hw, packet);
 
 		/* Check if more to send */
-		spin_lock_irqsave(&hw->spinlock, flags);
+		spin_lock_irqsave(&hw->lock, flags);
 		for (priority = 0; priority < priority_limit; priority++)
 			if (!list_empty(&hw->tx_queue[priority])) {
 				more_to_send = 1;
@@ -995,7 +997,7 @@
 		if (!more_to_send)
 			hw->tx_queued = 0;
 	}
-	spin_unlock_irqrestore(&hw->spinlock, flags);
+	spin_unlock_irqrestore(&hw->lock, flags);
 
 	return more_to_send;
 }
@@ -1008,9 +1010,9 @@
 	struct ipw_hardware *hw = (struct ipw_hardware *) hw_;
 	unsigned long flags;
 
-	spin_lock_irqsave(&hw->spinlock, flags);
+	spin_lock_irqsave(&hw->lock, flags);
 	if (hw->shutting_down) {
-		spin_unlock_irqrestore(&hw->spinlock, flags);
+		spin_unlock_irqrestore(&hw->lock, flags);
 		return;
 	}
 
@@ -1019,7 +1021,7 @@
 		 * Initial setup data sent to hardware
 		 */
 		hw->to_setup = 2;
-		spin_unlock_irqrestore(&hw->spinlock, flags);
+		spin_unlock_irqrestore(&hw->lock, flags);
 
 		ipw_setup_hardware(hw);
 		ipw_send_setup_packet(hw);
@@ -1030,7 +1032,7 @@
 		int priority_limit = get_current_packet_priority(hw);
 		int again;
 
-		spin_unlock_irqrestore(&hw->spinlock, flags);
+		spin_unlock_irqrestore(&hw->lock, flags);
 
 		do {
 			again = send_pending_packet(hw, priority_limit);
@@ -1068,16 +1070,16 @@
 		/* Transmit complete. */
 		if (irqn & IR_TXINTR) {
 			ack |= IR_TXINTR;
-			spin_lock_irqsave(&hw->spinlock, flags);
+			spin_lock_irqsave(&hw->lock, flags);
 			hw->tx_ready = 1;
-			spin_unlock_irqrestore(&hw->spinlock, flags);
+			spin_unlock_irqrestore(&hw->lock, flags);
 		}
 		/* Received data */
 		if (irqn & IR_RXINTR) {
 			ack |= IR_RXINTR;
-			spin_lock_irqsave(&hw->spinlock, flags);
+			spin_lock_irqsave(&hw->lock, flags);
 			hw->rx_ready++;
-			spin_unlock_irqrestore(&hw->spinlock, flags);
+			spin_unlock_irqrestore(&hw->lock, flags);
 		}
 		if (ack != 0) {
 			outw(ack, hw->base_port + IOIR);
@@ -1128,9 +1130,8 @@
 			} else {
 				return IRQ_NONE;
 			}
-		} else {
+		} else
 			return IRQ_NONE;
-		}
 	}
 
 	/*
@@ -1149,9 +1150,9 @@
 		if (hw->serial_number_detected) {
 			if (memtx_serial != hw->last_memtx_serial) {
 				hw->last_memtx_serial = memtx_serial;
-				spin_lock_irqsave(&hw->spinlock, flags);
+				spin_lock_irqsave(&hw->lock, flags);
 				hw->rx_ready++;
-				spin_unlock_irqrestore(&hw->spinlock, flags);
+				spin_unlock_irqrestore(&hw->lock, flags);
 				rx = 1;
 			} else
 				/* Ignore 'Timer Recovery' duplicates. */
@@ -1166,18 +1167,18 @@
 				printk(KERN_DEBUG IPWIRELESS_PCCARD_NAME
 					": memreg_tx serial num detected\n");
 
-				spin_lock_irqsave(&hw->spinlock, flags);
+				spin_lock_irqsave(&hw->lock, flags);
 				hw->rx_ready++;
-				spin_unlock_irqrestore(&hw->spinlock, flags);
+				spin_unlock_irqrestore(&hw->lock, flags);
 			}
 			rx = 1;
 		}
 	}
 	if (memrxdone & MEMRX_RX_DONE) {
 		writew(0, &hw->memory_info_regs->memreg_rx_done);
-		spin_lock_irqsave(&hw->spinlock, flags);
+		spin_lock_irqsave(&hw->lock, flags);
 		hw->tx_ready = 1;
-		spin_unlock_irqrestore(&hw->spinlock, flags);
+		spin_unlock_irqrestore(&hw->lock, flags);
 		tx = 1;
 	}
 	if (tx)
@@ -1195,8 +1196,7 @@
 					": spurious interrupt - new_tx mode\n");
 			else {
 				printk(KERN_WARNING IPWIRELESS_PCCARD_NAME
-					": no valid memreg_tx value - "
-					"switching to the old memreg_tx\n");
+					": no valid memreg_tx value - switching to the old memreg_tx\n");
 				hw->memreg_tx =
 					&hw->memory_info_regs->memreg_tx_old;
 				try_mem_tx_old = 1;
@@ -1211,7 +1211,7 @@
 	return IRQ_HANDLED;
 }
 
-irqreturn_t ipwireless_interrupt(int irq, void *dev_id, struct pt_regs *regs)
+irqreturn_t ipwireless_interrupt(int irq, void *dev_id)
 {
 	struct ipw_hardware *hw = dev_id;
 
@@ -1226,9 +1226,9 @@
 	int priority_limit;
 	unsigned long flags;
 
-	spin_lock_irqsave(&hw->spinlock, flags);
+	spin_lock_irqsave(&hw->lock, flags);
 	priority_limit = get_current_packet_priority(hw);
-	spin_unlock_irqrestore(&hw->spinlock, flags);
+	spin_unlock_irqrestore(&hw->lock, flags);
 
 	while (send_pending_packet(hw, priority_limit));
 }
@@ -1238,10 +1238,10 @@
 {
 	unsigned long flags;
 
-	spin_lock_irqsave(&hw->spinlock, flags);
+	spin_lock_irqsave(&hw->lock, flags);
 	list_add_tail(&packet->queue, &hw->tx_queue[priority]);
 	hw->tx_queued++;
-	spin_unlock_irqrestore(&hw->spinlock, flags);
+	spin_unlock_irqrestore(&hw->lock, flags);
 
 	flush_packets_to_hw(hw);
 }
@@ -1291,21 +1291,20 @@
 }
 
 int ipwireless_send_packet(struct ipw_hardware *hw, unsigned int channel_idx,
-			    unsigned char *data, unsigned int length,
+			    const unsigned char *data, unsigned int length,
 			    void (*callback) (void *cb, unsigned int length),
 			    void *callback_data)
 {
 	struct ipw_tx_packet *packet;
 
-	packet = alloc_data_packet(length,
-			       (unsigned char) (channel_idx + 1),
-			       TL_PROTOCOLID_COM_DATA);
+	packet = alloc_data_packet(length, (channel_idx + 1),
+			TL_PROTOCOLID_COM_DATA);
 	if (!packet)
 		return -ENOMEM;
 	packet->packet_callback = callback;
 	packet->callback_data = callback_data;
-	memcpy((unsigned char *) packet +
-			sizeof(struct ipw_tx_packet), data, length);
+	memcpy((unsigned char *) packet + sizeof(struct ipw_tx_packet), data,
+			length);
 
 	send_packet(hw, PRIO_DATA, packet);
 	return 0;
@@ -1321,12 +1320,11 @@
 		protocolid = TL_PROTOCOLID_SETUP;
 
 	packet = alloc_ctrl_packet(sizeof(struct ipw_control_packet),
-			(unsigned char) (channel_idx + 1),
-			protocolid, line);
+			(channel_idx + 1), protocolid, line);
 	if (!packet)
 		return -ENOMEM;
 	packet->header.length = sizeof(struct ipw_control_packet_body);
-	packet->body.value = (unsigned char) (state == 0 ? 0 : 1);
+	packet->body.value = (state == 0 ? 0 : 1);
 	send_packet(hw, prio, &packet->header);
 	return 0;
 }
@@ -1504,8 +1502,7 @@
 	if (vers_no == TL_SETUP_VERSION)
 		__handle_setup_get_version_rsp(hw);
 	else
-		printk(KERN_ERR
-				IPWIRELESS_PCCARD_NAME
+		printk(KERN_ERR IPWIRELESS_PCCARD_NAME
 				": invalid hardware version no %u\n",
 				(unsigned int) vers_no);
 }
@@ -1528,10 +1525,10 @@
 
 static void handle_received_SETUP_packet(struct ipw_hardware *hw,
 					 unsigned int address,
-					 unsigned char *data, int len,
+					 const unsigned char *data, int len,
 					 int is_last)
 {
-	union ipw_setup_rx_msg *rx_msg = (union ipw_setup_rx_msg *) data;
+	const union ipw_setup_rx_msg *rx_msg = (const union ipw_setup_rx_msg *) data;
 
 	if (address != ADDR_SETUP_PROT) {
 		printk(KERN_INFO IPWIRELESS_PCCARD_NAME
@@ -1629,7 +1626,7 @@
 
 	INIT_LIST_HEAD(&hw->rx_queue);
 	INIT_LIST_HEAD(&hw->rx_pool);
-	spin_lock_init(&hw->spinlock);
+	spin_lock_init(&hw->lock);
 	tasklet_init(&hw->tasklet, ipwireless_do_tasklet, (unsigned long) hw);
 	INIT_WORK(&hw->work_rx, ipw_receive_data_work);
 	setup_timer(&hw->setup_timer, ipwireless_setup_timer,
@@ -1651,8 +1648,8 @@
 		enable_irq(hw->irq);
 	}
 	hw->base_port = base_port;
-	hw->hw_version = is_v2_card ? HW_VERSION_2 : HW_VERSION_1;
-	hw->ll_mtu = hw->hw_version == HW_VERSION_1 ? LL_MTU_V1 : LL_MTU_V2;
+	hw->hw_version = (is_v2_card ? HW_VERSION_2 : HW_VERSION_1);
+	hw->ll_mtu = (hw->hw_version == HW_VERSION_1 ? LL_MTU_V1 : LL_MTU_V2);
 	hw->memregs_CCR = (struct MEMCCR __iomem *)
 			((unsigned short __iomem *) attr_memory + 0x200);
 	hw->memory_info_regs = (struct MEMINFREG __iomem *) common_memory;
@@ -1695,10 +1692,10 @@
 		if (is_card_present(hw)) {
 			unsigned long flags;
 
-			spin_lock_irqsave(&hw->spinlock, flags);
+			spin_lock_irqsave(&hw->lock, flags);
 			hw->to_setup = 1;
 			hw->tx_ready = 1;
-			spin_unlock_irqrestore(&hw->spinlock, flags);
+			spin_unlock_irqrestore(&hw->lock, flags);
 			tasklet_schedule(&hw->tasklet);
 		}
 
diff --git a/drivers/char/pcmcia/ipwireless/hardware.h b/drivers/char/pcmcia/ipwireless/hardware.h
index 19ce5eb..90a8590 100644
--- a/drivers/char/pcmcia/ipwireless/hardware.h
+++ b/drivers/char/pcmcia/ipwireless/hardware.h
@@ -34,14 +34,14 @@
 
 struct ipw_hardware *ipwireless_hardware_create(void);
 void ipwireless_hardware_free(struct ipw_hardware *hw);
-irqreturn_t ipwireless_interrupt(int irq, void *dev_id, struct pt_regs *regs);
+irqreturn_t ipwireless_interrupt(int irq, void *dev_id);
 int ipwireless_set_DTR(struct ipw_hardware *hw, unsigned int channel_idx,
 		int state);
 int ipwireless_set_RTS(struct ipw_hardware *hw, unsigned int channel_idx,
 		int state);
 int ipwireless_send_packet(struct ipw_hardware *hw,
 			    unsigned int channel_idx,
-			    unsigned char *data,
+			    const unsigned char *data,
 			    unsigned int length,
 			    void (*packet_sent_callback) (void *cb,
 							  unsigned int length),
diff --git a/drivers/char/pcmcia/ipwireless/main.c b/drivers/char/pcmcia/ipwireless/main.c
index cc7dcea..5eca7a9 100644
--- a/drivers/char/pcmcia/ipwireless/main.c
+++ b/drivers/char/pcmcia/ipwireless/main.c
@@ -49,7 +49,7 @@
 /* Debug mode: more verbose, print sent/recv bytes */
 int ipwireless_debug;
 int ipwireless_loopback;
-int ipwireless_out_queue = 1;
+int ipwireless_out_queue = 10;
 
 module_param_named(debug, ipwireless_debug, int, 0);
 module_param_named(loopback, ipwireless_loopback, int, 0);
@@ -57,7 +57,7 @@
 MODULE_PARM_DESC(debug, "switch on debug messages [0]");
 MODULE_PARM_DESC(loopback,
 		"debug: enable ras_raw channel [0]");
-MODULE_PARM_DESC(out_queue, "debug: set size of outgoing queue [1]");
+MODULE_PARM_DESC(out_queue, "debug: set size of outgoing PPP queue [10]");
 
 /* Executes in process context. */
 static void signalled_reboot_work(struct work_struct *work_reboot)
@@ -88,8 +88,6 @@
 	unsigned short buf[64];
 	cisparse_t parse;
 	unsigned short cor_value;
-	win_req_t request_attr_memory;
-	win_req_t request_common_memory;
 	memreq_t memreq_attr_memory;
 	memreq_t memreq_common_memory;
 
@@ -188,6 +186,9 @@
 		goto exit0;
 	}
 
+	request_region(link->io.BasePort1, link->io.NumPorts1,
+			IPWIRELESS_PCCARD_NAME);
+
 	/* memory settings */
 
 	tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY;
@@ -214,16 +215,16 @@
 	}
 
 	if (parse.cftable_entry.mem.nwin > 0) {
-		request_common_memory.Attributes =
+		ipw->request_common_memory.Attributes =
 			WIN_DATA_WIDTH_16 | WIN_MEMORY_TYPE_CM | WIN_ENABLE;
-		request_common_memory.Base =
+		ipw->request_common_memory.Base =
 			parse.cftable_entry.mem.win[0].host_addr;
-		request_common_memory.Size = parse.cftable_entry.mem.win[0].len;
-		if (request_common_memory.Size < 0x1000)
-			request_common_memory.Size = 0x1000;
-		request_common_memory.AccessSpeed = 0;
+		ipw->request_common_memory.Size = parse.cftable_entry.mem.win[0].len;
+		if (ipw->request_common_memory.Size < 0x1000)
+			ipw->request_common_memory.Size = 0x1000;
+		ipw->request_common_memory.AccessSpeed = 0;
 
-		ret = pcmcia_request_window(&link, &request_common_memory,
+		ret = pcmcia_request_window(&link, &ipw->request_common_memory,
 				&ipw->handle_common_memory);
 
 		if (ret != CS_SUCCESS) {
@@ -246,16 +247,18 @@
 		ipw->is_v2_card =
 			parse.cftable_entry.mem.win[0].len == 0x100;
 
-		ipw->common_memory = ioremap(request_common_memory.Base,
-				request_common_memory.Size);
+		ipw->common_memory = ioremap(ipw->request_common_memory.Base,
+				ipw->request_common_memory.Size);
+		request_mem_region(ipw->request_common_memory.Base,
+				ipw->request_common_memory.Size, IPWIRELESS_PCCARD_NAME);
 
-		request_attr_memory.Attributes =
+		ipw->request_attr_memory.Attributes =
 			WIN_DATA_WIDTH_16 | WIN_MEMORY_TYPE_AM | WIN_ENABLE;
-		request_attr_memory.Base = 0;
-		request_attr_memory.Size = 0;	/* this used to be 0x1000 */
-		request_attr_memory.AccessSpeed = 0;
+		ipw->request_attr_memory.Base = 0;
+		ipw->request_attr_memory.Size = 0;	/* this used to be 0x1000 */
+		ipw->request_attr_memory.AccessSpeed = 0;
 
-		ret = pcmcia_request_window(&link, &request_attr_memory,
+		ret = pcmcia_request_window(&link, &ipw->request_attr_memory,
 				&ipw->handle_attr_memory);
 
 		if (ret != CS_SUCCESS) {
@@ -274,8 +277,10 @@
 			goto exit2;
 		}
 
-		ipw->attr_memory = ioremap(request_attr_memory.Base,
-				request_attr_memory.Size);
+		ipw->attr_memory = ioremap(ipw->request_attr_memory.Base,
+				ipw->request_attr_memory.Size);
+		request_mem_region(ipw->request_attr_memory.Base, ipw->request_attr_memory.Size,
+				IPWIRELESS_PCCARD_NAME);
 	}
 
 	INIT_WORK(&ipw->work_reboot, signalled_reboot_work);
@@ -311,14 +316,13 @@
 			(unsigned int) link->irq.AssignedIRQ);
 	if (ipw->attr_memory && ipw->common_memory)
 		printk(KERN_INFO IPWIRELESS_PCCARD_NAME
-				": attr memory 0x%08lx-0x%08lx, "
-				"common memory 0x%08lx-0x%08lx\n",
-				request_attr_memory.Base,
-				request_attr_memory.Base
-				+ request_attr_memory.Size - 1,
-				request_common_memory.Base,
-				request_common_memory.Base
-				+ request_common_memory.Size - 1);
+			": attr memory 0x%08lx-0x%08lx, common memory 0x%08lx-0x%08lx\n",
+			ipw->request_attr_memory.Base,
+			ipw->request_attr_memory.Base
+			+ ipw->request_attr_memory.Size - 1,
+			ipw->request_common_memory.Base,
+			ipw->request_common_memory.Base
+			+ ipw->request_common_memory.Size - 1);
 
 	ipw->network = ipwireless_network_create(ipw->hardware);
 	if (!ipw->network)
@@ -350,12 +354,16 @@
 	pcmcia_disable_device(link);
 exit3:
 	if (ipw->attr_memory) {
+		release_mem_region(ipw->request_attr_memory.Base,
+				ipw->request_attr_memory.Size);
 		iounmap(ipw->attr_memory);
 		pcmcia_release_window(ipw->handle_attr_memory);
 		pcmcia_disable_device(link);
 	}
 exit2:
 	if (ipw->common_memory) {
+		release_mem_region(ipw->request_common_memory.Base,
+				ipw->request_common_memory.Size);
 		iounmap(ipw->common_memory);
 		pcmcia_release_window(ipw->handle_common_memory);
 	}
@@ -367,19 +375,25 @@
 
 static void release_ipwireless(struct ipw_dev *ipw)
 {
-	struct pcmcia_device *link = ipw->link;
+	pcmcia_disable_device(ipw->link);
 
-	pcmcia_disable_device(link);
-
-	if (ipw->common_memory)
+	if (ipw->common_memory) {
+		release_mem_region(ipw->request_common_memory.Base,
+				ipw->request_common_memory.Size);
 		iounmap(ipw->common_memory);
-	if (ipw->attr_memory)
+	}
+	if (ipw->attr_memory) {
+		release_mem_region(ipw->request_attr_memory.Base,
+				ipw->request_attr_memory.Size);
 		iounmap(ipw->attr_memory);
+	}
 	if (ipw->common_memory)
 		pcmcia_release_window(ipw->handle_common_memory);
 	if (ipw->attr_memory)
 		pcmcia_release_window(ipw->handle_attr_memory);
-	pcmcia_disable_device(link);
+
+	/* Break the link with Card Services */
+	pcmcia_disable_device(ipw->link);
 }
 
 /*
@@ -437,10 +451,6 @@
 
 	release_ipwireless(ipw);
 
-	/* Break the link with Card Services */
-	if (link)
-		pcmcia_disable_device(link);
-
 	if (ipw->tty != NULL)
 		ipwireless_tty_free(ipw->tty);
 	if (ipw->network != NULL)
diff --git a/drivers/char/pcmcia/ipwireless/main.h b/drivers/char/pcmcia/ipwireless/main.h
index 1bfdcc8..0e0363a 100644
--- a/drivers/char/pcmcia/ipwireless/main.h
+++ b/drivers/char/pcmcia/ipwireless/main.h
@@ -45,10 +45,15 @@
 struct ipw_dev {
 	struct pcmcia_device *link;
 	int is_v2_card;
+
 	window_handle_t handle_attr_memory;
 	void __iomem *attr_memory;
+	win_req_t request_attr_memory;
+
 	window_handle_t handle_common_memory;
 	void __iomem *common_memory;
+	win_req_t request_common_memory;
+
 	dev_node_t nodes[2];
 	/* Reference to attribute memory, containing CIS data */
 	void *attribute_memory;
diff --git a/drivers/char/pcmcia/ipwireless/network.c b/drivers/char/pcmcia/ipwireless/network.c
index fe914d3..590762a 100644
--- a/drivers/char/pcmcia/ipwireless/network.c
+++ b/drivers/char/pcmcia/ipwireless/network.c
@@ -29,7 +29,6 @@
 #include "main.h"
 #include "tty.h"
 
-#define MAX_OUTGOING_PACKETS_QUEUED   ipwireless_out_queue
 #define MAX_ASSOCIATED_TTYS 2
 
 #define SC_RCV_BITS     (SC_RCV_B7_1|SC_RCV_B7_0|SC_RCV_ODDP|SC_RCV_EVNP)
@@ -46,7 +45,7 @@
 	/* Number of packets queued up in hardware module. */
 	int outgoing_packets_queued;
 	/* Spinlock to avoid interrupts during shutdown */
-	spinlock_t spinlock;
+	spinlock_t lock;
 	struct mutex close_lock;
 
 	/* PPP ioctl data, not actually used anywere */
@@ -68,20 +67,20 @@
 	struct ipw_network *network = callback_data;
 	unsigned long flags;
 
-	spin_lock_irqsave(&network->spinlock, flags);
+	spin_lock_irqsave(&network->lock, flags);
 	network->outgoing_packets_queued--;
 	if (network->ppp_channel != NULL) {
 		if (network->ppp_blocked) {
 			network->ppp_blocked = 0;
-			spin_unlock_irqrestore(&network->spinlock, flags);
+			spin_unlock_irqrestore(&network->lock, flags);
 			ppp_output_wakeup(network->ppp_channel);
 			if (ipwireless_debug)
-				printk(KERN_INFO IPWIRELESS_PCCARD_NAME
+				printk(KERN_DEBUG IPWIRELESS_PCCARD_NAME
 				       ": ppp unblocked\n");
 		} else
-			spin_unlock_irqrestore(&network->spinlock, flags);
+			spin_unlock_irqrestore(&network->lock, flags);
 	} else
-		spin_unlock_irqrestore(&network->spinlock, flags);
+		spin_unlock_irqrestore(&network->lock, flags);
 }
 
 /*
@@ -93,8 +92,8 @@
 	struct ipw_network *network = ppp_channel->private;
 	unsigned long flags;
 
-	spin_lock_irqsave(&network->spinlock, flags);
-	if (network->outgoing_packets_queued < MAX_OUTGOING_PACKETS_QUEUED) {
+	spin_lock_irqsave(&network->lock, flags);
+	if (network->outgoing_packets_queued < ipwireless_out_queue) {
 		unsigned char *buf;
 		static unsigned char header[] = {
 			PPP_ALLSTATIONS, /* 0xff */
@@ -103,7 +102,7 @@
 		int ret;
 
 		network->outgoing_packets_queued++;
-		spin_unlock_irqrestore(&network->spinlock, flags);
+		spin_unlock_irqrestore(&network->lock, flags);
 
 		/*
 		 * If we have the requested amount of headroom in the skb we
@@ -144,7 +143,9 @@
 		 * needs to be unblocked once we are ready to send.
 		 */
 		network->ppp_blocked = 1;
-		spin_unlock_irqrestore(&network->spinlock, flags);
+		spin_unlock_irqrestore(&network->lock, flags);
+		if (ipwireless_debug)
+			printk(KERN_DEBUG IPWIRELESS_PCCARD_NAME ": ppp blocked\n");
 		return 0;
 	}
 }
@@ -249,11 +250,11 @@
 				work_go_online);
 	unsigned long flags;
 
-	spin_lock_irqsave(&network->spinlock, flags);
+	spin_lock_irqsave(&network->lock, flags);
 	if (!network->ppp_channel) {
 		struct ppp_channel *channel;
 
-		spin_unlock_irqrestore(&network->spinlock, flags);
+		spin_unlock_irqrestore(&network->lock, flags);
 		channel = kzalloc(sizeof(struct ppp_channel), GFP_KERNEL);
 		if (!channel) {
 			printk(KERN_ERR IPWIRELESS_PCCARD_NAME
@@ -273,10 +274,10 @@
 		network->xaccm[3] = 0x60000000U;
 		network->raccm = ~0U;
 		ppp_register_channel(channel);
-		spin_lock_irqsave(&network->spinlock, flags);
+		spin_lock_irqsave(&network->lock, flags);
 		network->ppp_channel = channel;
 	}
-	spin_unlock_irqrestore(&network->spinlock, flags);
+	spin_unlock_irqrestore(&network->lock, flags);
 }
 
 static void do_go_offline(struct work_struct *work_go_offline)
@@ -287,16 +288,16 @@
 	unsigned long flags;
 
 	mutex_lock(&network->close_lock);
-	spin_lock_irqsave(&network->spinlock, flags);
+	spin_lock_irqsave(&network->lock, flags);
 	if (network->ppp_channel != NULL) {
 		struct ppp_channel *channel = network->ppp_channel;
 
 		network->ppp_channel = NULL;
-		spin_unlock_irqrestore(&network->spinlock, flags);
+		spin_unlock_irqrestore(&network->lock, flags);
 		mutex_unlock(&network->close_lock);
 		ppp_unregister_channel(channel);
 	} else {
-		spin_unlock_irqrestore(&network->spinlock, flags);
+		spin_unlock_irqrestore(&network->lock, flags);
 		mutex_unlock(&network->close_lock);
 	}
 }
@@ -381,18 +382,18 @@
 			 * the PPP layer.
 			 */
 			mutex_lock(&network->close_lock);
-			spin_lock_irqsave(&network->spinlock, flags);
+			spin_lock_irqsave(&network->lock, flags);
 			if (network->ppp_channel != NULL) {
 				struct sk_buff *skb;
 
-				spin_unlock_irqrestore(&network->spinlock,
+				spin_unlock_irqrestore(&network->lock,
 						flags);
 
 				/* Send the data to the ppp_generic module. */
 				skb = ipw_packet_received_skb(data, length);
 				ppp_input(network->ppp_channel, skb);
 			} else
-				spin_unlock_irqrestore(&network->spinlock,
+				spin_unlock_irqrestore(&network->lock,
 						flags);
 			mutex_unlock(&network->close_lock);
 		}
@@ -410,7 +411,7 @@
 	if (!network)
 		return NULL;
 
-	spin_lock_init(&network->spinlock);
+	spin_lock_init(&network->lock);
 	mutex_init(&network->close_lock);
 
 	network->hardware = hw;
@@ -478,10 +479,10 @@
 	int ret = -1;
 	unsigned long flags;
 
-	spin_lock_irqsave(&network->spinlock, flags);
+	spin_lock_irqsave(&network->lock, flags);
 	if (network->ppp_channel != NULL)
 		ret = ppp_channel_index(network->ppp_channel);
-	spin_unlock_irqrestore(&network->spinlock, flags);
+	spin_unlock_irqrestore(&network->lock, flags);
 
 	return ret;
 }
@@ -491,10 +492,15 @@
 	int ret = -1;
 	unsigned long flags;
 
-	spin_lock_irqsave(&network->spinlock, flags);
+	spin_lock_irqsave(&network->lock, flags);
 	if (network->ppp_channel != NULL)
 		ret = ppp_unit_number(network->ppp_channel);
-	spin_unlock_irqrestore(&network->spinlock, flags);
+	spin_unlock_irqrestore(&network->lock, flags);
 
 	return ret;
 }
+
+int ipwireless_ppp_mru(const struct ipw_network *network)
+{
+	return network->mru;
+}
diff --git a/drivers/char/pcmcia/ipwireless/network.h b/drivers/char/pcmcia/ipwireless/network.h
index ccacd26..561f765 100644
--- a/drivers/char/pcmcia/ipwireless/network.h
+++ b/drivers/char/pcmcia/ipwireless/network.h
@@ -48,5 +48,6 @@
 void ipwireless_ppp_close(struct ipw_network *net);
 int ipwireless_ppp_channel_index(struct ipw_network *net);
 int ipwireless_ppp_unit_number(struct ipw_network *net);
+int ipwireless_ppp_mru(const struct ipw_network *net);
 
 #endif
diff --git a/drivers/char/pcmcia/ipwireless/tty.c b/drivers/char/pcmcia/ipwireless/tty.c
index 42f3815..b141450 100644
--- a/drivers/char/pcmcia/ipwireless/tty.c
+++ b/drivers/char/pcmcia/ipwireless/tty.c
@@ -259,7 +259,7 @@
 	}
 
 	ret = ipwireless_send_packet(tty->hardware, IPW_CHANNEL_RAS,
-			       (unsigned char *) buf, count,
+			       buf, count,
 			       ipw_write_packet_sent_callback, tty);
 	if (ret == -1) {
 		mutex_unlock(&tty->ipw_tty_mutex);
diff --git a/drivers/cpuidle/cpuidle.c b/drivers/cpuidle/cpuidle.c
index 5405769..5ce07b5 100644
--- a/drivers/cpuidle/cpuidle.c
+++ b/drivers/cpuidle/cpuidle.c
@@ -94,7 +94,7 @@
  */
 void cpuidle_uninstall_idle_handler(void)
 {
-	if (enabled_devices && (pm_idle != pm_idle_old)) {
+	if (enabled_devices && pm_idle_old && (pm_idle != pm_idle_old)) {
 		pm_idle = pm_idle_old;
 		cpuidle_kick_cpus();
 	}
diff --git a/drivers/i2c/busses/i2c-bfin-twi.c b/drivers/i2c/busses/i2c-bfin-twi.c
index 48d084b..3c855ff 100644
--- a/drivers/i2c/busses/i2c-bfin-twi.c
+++ b/drivers/i2c/busses/i2c-bfin-twi.c
@@ -49,6 +49,8 @@
 	struct i2c_msg 		*pmsg;
 	int			msg_num;
 	int			cur_msg;
+	u16			saved_clkdiv;
+	u16			saved_control;
 	void __iomem		*regs_base;
 };
 
@@ -565,32 +567,43 @@
 	       I2C_FUNC_I2C;
 }
 
-
 static struct i2c_algorithm bfin_twi_algorithm = {
 	.master_xfer   = bfin_twi_master_xfer,
 	.smbus_xfer    = bfin_twi_smbus_xfer,
 	.functionality = bfin_twi_functionality,
 };
 
-
-static int i2c_bfin_twi_suspend(struct platform_device *dev, pm_message_t state)
+static int i2c_bfin_twi_suspend(struct platform_device *pdev, pm_message_t state)
 {
-	struct bfin_twi_iface *iface = platform_get_drvdata(dev);
+	struct bfin_twi_iface *iface = platform_get_drvdata(pdev);
+
+	iface->saved_clkdiv = read_CLKDIV(iface);
+	iface->saved_control = read_CONTROL(iface);
+
+	free_irq(iface->irq, iface);
 
 	/* Disable TWI */
-	write_CONTROL(iface, read_CONTROL(iface) & ~TWI_ENA);
-	SSYNC();
+	write_CONTROL(iface, iface->saved_control & ~TWI_ENA);
 
 	return 0;
 }
 
-static int i2c_bfin_twi_resume(struct platform_device *dev)
+static int i2c_bfin_twi_resume(struct platform_device *pdev)
 {
-	struct bfin_twi_iface *iface = platform_get_drvdata(dev);
+	struct bfin_twi_iface *iface = platform_get_drvdata(pdev);
 
-	/* Enable TWI */
-	write_CONTROL(iface, read_CONTROL(iface) | TWI_ENA);
-	SSYNC();
+	int rc = request_irq(iface->irq, bfin_twi_interrupt_entry,
+		IRQF_DISABLED, pdev->name, iface);
+	if (rc) {
+		dev_err(&pdev->dev, "Can't get IRQ %d !\n", iface->irq);
+		return -ENODEV;
+	}
+
+	/* Resume TWI interface clock as specified */
+	write_CLKDIV(iface, iface->saved_clkdiv);
+
+	/* Resume TWI */
+	write_CONTROL(iface, iface->saved_control);
 
 	return 0;
 }
diff --git a/drivers/i2c/busses/i2c-gpio.c b/drivers/i2c/busses/i2c-gpio.c
index 79b455a..32104ea 100644
--- a/drivers/i2c/busses/i2c-gpio.c
+++ b/drivers/i2c/busses/i2c-gpio.c
@@ -77,7 +77,7 @@
 	return gpio_get_value(pdata->scl_pin);
 }
 
-static int __init i2c_gpio_probe(struct platform_device *pdev)
+static int __devinit i2c_gpio_probe(struct platform_device *pdev)
 {
 	struct i2c_gpio_platform_data *pdata;
 	struct i2c_algo_bit_data *bit_data;
@@ -174,7 +174,7 @@
 	return ret;
 }
 
-static int __exit i2c_gpio_remove(struct platform_device *pdev)
+static int __devexit i2c_gpio_remove(struct platform_device *pdev)
 {
 	struct i2c_gpio_platform_data *pdata;
 	struct i2c_adapter *adap;
@@ -196,14 +196,15 @@
 		.name	= "i2c-gpio",
 		.owner	= THIS_MODULE,
 	},
-	.remove		= __exit_p(i2c_gpio_remove),
+	.probe		= i2c_gpio_probe,
+	.remove		= __devexit_p(i2c_gpio_remove),
 };
 
 static int __init i2c_gpio_init(void)
 {
 	int ret;
 
-	ret = platform_driver_probe(&i2c_gpio_driver, i2c_gpio_probe);
+	ret = platform_driver_register(&i2c_gpio_driver);
 	if (ret)
 		printk(KERN_ERR "i2c-gpio: probe failed: %d\n", ret);
 
diff --git a/drivers/i2c/busses/i2c-s3c2410.c b/drivers/i2c/busses/i2c-s3c2410.c
index 007390a..4864723 100644
--- a/drivers/i2c/busses/i2c-s3c2410.c
+++ b/drivers/i2c/busses/i2c-s3c2410.c
@@ -33,6 +33,7 @@
 #include <linux/err.h>
 #include <linux/platform_device.h>
 #include <linux/clk.h>
+#include <linux/cpufreq.h>
 
 #include <asm/hardware.h>
 #include <asm/irq.h>
@@ -64,6 +65,7 @@
 	unsigned int		tx_setup;
 
 	enum s3c24xx_i2c_state	state;
+	unsigned long		clkrate;
 
 	void __iomem		*regs;
 	struct clk		*clk;
@@ -71,6 +73,10 @@
 	struct resource		*irq;
 	struct resource		*ioarea;
 	struct i2c_adapter	adap;
+
+#ifdef CONFIG_CPU_FREQ
+	struct notifier_block	freq_transition;
+#endif
 };
 
 /* default platform data to use if not supplied in the platform_device
@@ -501,6 +507,9 @@
 	unsigned long timeout;
 	int ret;
 
+	if (!readl(i2c->regs + S3C2410_IICCON) & S3C2410_IICCON_IRQEN)
+		return -EIO;
+
 	ret = s3c24xx_i2c_set_master(i2c);
 	if (ret != 0) {
 		dev_err(i2c->dev, "cannot get bus (error %d)\n", ret);
@@ -636,27 +645,28 @@
 	return (diff >= -2 && diff <= 2);
 }
 
-/* s3c24xx_i2c_getdivisor
+/* s3c24xx_i2c_clockrate
  *
  * work out a divisor for the user requested frequency setting,
  * either by the requested frequency, or scanning the acceptable
  * range of frequencies until something is found
 */
 
-static int s3c24xx_i2c_getdivisor(struct s3c24xx_i2c *i2c,
-				  struct s3c2410_platform_i2c *pdata,
-				  unsigned long *iicon,
-				  unsigned int *got)
+static int s3c24xx_i2c_clockrate(struct s3c24xx_i2c *i2c, unsigned int *got)
 {
+	struct s3c2410_platform_i2c *pdata;
 	unsigned long clkin = clk_get_rate(i2c->clk);
-	
 	unsigned int divs, div1;
+	u32 iiccon;
 	int freq;
 	int start, end;
 
+	i2c->clkrate = clkin;
+
+	pdata = s3c24xx_i2c_get_platformdata(i2c->adap.dev.parent);
 	clkin /= 1000;		/* clkin now in KHz */
      
-	dev_dbg(i2c->dev,  "pdata %p, freq %lu %lu..%lu\n",
+	dev_dbg(i2c->dev, "pdata %p, freq %lu %lu..%lu\n",
 		 pdata, pdata->bus_freq, pdata->min_freq, pdata->max_freq);
 
 	if (pdata->bus_freq != 0) {
@@ -688,11 +698,79 @@
 
  found:
 	*got = freq;
-	*iicon |= (divs-1);
-	*iicon |= (div1 == 512) ? S3C2410_IICCON_TXDIV_512 : 0;
+
+	iiccon = readl(i2c->regs + S3C2410_IICCON);
+	iiccon &= ~(S3C2410_IICCON_SCALEMASK | S3C2410_IICCON_TXDIV_512);
+	iiccon |= (divs-1);
+
+	if (div1 == 512)
+		iiccon |= S3C2410_IICCON_TXDIV_512;
+
+	writel(iiccon, i2c->regs + S3C2410_IICCON);
+
 	return 0;
 }
 
+#ifdef CONFIG_CPU_FREQ
+
+#define freq_to_i2c(_n) container_of(_n, struct s3c24xx_i2c, freq_transition)
+
+static int s3c24xx_i2c_cpufreq_transition(struct notifier_block *nb,
+					  unsigned long val, void *data)
+{
+	struct s3c24xx_i2c *i2c = freq_to_i2c(nb);
+	unsigned long flags;
+	unsigned int got;
+	int delta_f;
+	int ret;
+
+	delta_f = clk_get_rate(i2c->clk) - i2c->clkrate;
+
+	/* if we're post-change and the input clock has slowed down
+	 * or at pre-change and the clock is about to speed up, then
+	 * adjust our clock rate. <0 is slow, >0 speedup.
+	 */
+
+	if ((val == CPUFREQ_POSTCHANGE && delta_f < 0) ||
+	    (val == CPUFREQ_PRECHANGE && delta_f > 0)) {
+		spin_lock_irqsave(&i2c->lock, flags);
+		ret = s3c24xx_i2c_clockrate(i2c, &got);
+		spin_unlock_irqrestore(&i2c->lock, flags);
+
+		if (ret < 0)
+			dev_err(i2c->dev, "cannot find frequency\n");
+		else
+			dev_info(i2c->dev, "setting freq %d\n", got);
+	}
+
+	return 0;
+}
+
+static inline int s3c24xx_i2c_register_cpufreq(struct s3c24xx_i2c *i2c)
+{
+	i2c->freq_transition.notifier_call = s3c24xx_i2c_cpufreq_transition;
+
+	return cpufreq_register_notifier(&i2c->freq_transition,
+					 CPUFREQ_TRANSITION_NOTIFIER);
+}
+
+static inline void s3c24xx_i2c_deregister_cpufreq(struct s3c24xx_i2c *i2c)
+{
+	cpufreq_unregister_notifier(&i2c->freq_transition,
+				    CPUFREQ_TRANSITION_NOTIFIER);
+}
+
+#else
+static inline int s3c24xx_i2c_register_cpufreq(struct s3c24xx_i2c *i2c)
+{
+	return 0;
+}
+
+static inline void s3c24xx_i2c_deregister_cpufreq(struct s3c24xx_i2c *i2c)
+{
+}
+#endif
+
 /* s3c24xx_i2c_init
  *
  * initialise the controller, set the IO lines and frequency 
@@ -719,9 +797,12 @@
 
 	dev_info(i2c->dev, "slave address 0x%02x\n", pdata->slave_addr);
 
+	writel(iicon, i2c->regs + S3C2410_IICCON);
+
 	/* we need to work out the divisors for the clock... */
 
-	if (s3c24xx_i2c_getdivisor(i2c, pdata, &iicon, &freq) != 0) {
+	if (s3c24xx_i2c_clockrate(i2c, &freq) != 0) {
+		writel(0, i2c->regs + S3C2410_IICCON);
 		dev_err(i2c->dev, "cannot meet bus frequency required\n");
 		return -EINVAL;
 	}
@@ -730,8 +811,6 @@
 
 	dev_info(i2c->dev, "bus frequency set to %d KHz\n", freq);
 	dev_dbg(i2c->dev, "S3C2410_IICCON=0x%02lx\n", iicon);
-	
-	writel(iicon, i2c->regs + S3C2410_IICCON);
 
 	/* check for s3c2440 i2c controller  */
 
@@ -752,9 +831,12 @@
 static int s3c24xx_i2c_probe(struct platform_device *pdev)
 {
 	struct s3c24xx_i2c *i2c = &s3c24xx_i2c;
+	struct s3c2410_platform_i2c *pdata;
 	struct resource *res;
 	int ret;
 
+	pdata = s3c24xx_i2c_get_platformdata(&pdev->dev);
+
 	/* find the clock and enable it */
 
 	i2c->dev = &pdev->dev;
@@ -832,10 +914,24 @@
 	dev_dbg(&pdev->dev, "irq resource %p (%lu)\n", res,
 		(unsigned long)res->start);
 
-	ret = i2c_add_adapter(&i2c->adap);
+	ret = s3c24xx_i2c_register_cpufreq(i2c);
+	if (ret < 0) {
+		dev_err(&pdev->dev, "failed to register cpufreq notifier\n");
+		goto err_irq;
+	}
+
+	/* Note, previous versions of the driver used i2c_add_adapter()
+	 * to add the bus at any number. We now pass the bus number via
+	 * the platform data, so if unset it will now default to always
+	 * being bus 0.
+	 */
+
+	i2c->adap.nr = pdata->bus_num;
+
+	ret = i2c_add_numbered_adapter(&i2c->adap);
 	if (ret < 0) {
 		dev_err(&pdev->dev, "failed to add bus to i2c core\n");
-		goto err_irq;
+		goto err_cpufreq;
 	}
 
 	platform_set_drvdata(pdev, i2c);
@@ -843,6 +939,9 @@
 	dev_info(&pdev->dev, "%s: S3C I2C adapter\n", i2c->adap.dev.bus_id);
 	return 0;
 
+ err_cpufreq:
+	s3c24xx_i2c_deregister_cpufreq(i2c);
+
  err_irq:
 	free_irq(i2c->irq->start, i2c);
 
@@ -870,6 +969,8 @@
 {
 	struct s3c24xx_i2c *i2c = platform_get_drvdata(pdev);
 
+	s3c24xx_i2c_deregister_cpufreq(i2c);
+
 	i2c_del_adapter(&i2c->adap);
 	free_irq(i2c->irq->start, i2c);
 
diff --git a/include/asm-arm/plat-s3c/iic.h b/include/asm-arm/plat-s3c/iic.h
index 71211c8..d08a1f2 100644
--- a/include/asm-arm/plat-s3c/iic.h
+++ b/include/asm-arm/plat-s3c/iic.h
@@ -21,6 +21,7 @@
 */
 
 struct s3c2410_platform_i2c {
+	int		bus_num;	/* bus number to use */
 	unsigned int	flags;
 	unsigned int	slave_addr;	/* slave address for controller */
 	unsigned long	bus_freq;	/* standard bus frequency */
diff --git a/include/asm-sparc/Kbuild b/include/asm-sparc/Kbuild
deleted file mode 100644
index 6cdaf9d..0000000
--- a/include/asm-sparc/Kbuild
+++ /dev/null
@@ -1 +0,0 @@
-# dummy file to avoid breaking make headers_install
diff --git a/include/asm-sparc64/Kbuild b/include/asm-sparc64/Kbuild
deleted file mode 100644
index 6cdaf9d..0000000
--- a/include/asm-sparc64/Kbuild
+++ /dev/null
@@ -1 +0,0 @@
-# dummy file to avoid breaking make headers_install
diff --git a/include/asm-sparc64/agp.h b/include/asm-sparc64/agp.h
deleted file mode 100644
index eb8d4b3..0000000
--- a/include/asm-sparc64/agp.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/agp.h>
diff --git a/include/asm-sparc64/apb.h b/include/asm-sparc64/apb.h
deleted file mode 100644
index 5e236ca..0000000
--- a/include/asm-sparc64/apb.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/apb.h>
diff --git a/include/asm-sparc64/asi.h b/include/asm-sparc64/asi.h
deleted file mode 100644
index 9b7110c..0000000
--- a/include/asm-sparc64/asi.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/asi.h>
diff --git a/include/asm-sparc64/atomic.h b/include/asm-sparc64/atomic.h
deleted file mode 100644
index f512682..0000000
--- a/include/asm-sparc64/atomic.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/atomic.h>
diff --git a/include/asm-sparc64/auxio.h b/include/asm-sparc64/auxio.h
deleted file mode 100644
index 46c9042..0000000
--- a/include/asm-sparc64/auxio.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/auxio.h>
diff --git a/include/asm-sparc64/auxvec.h b/include/asm-sparc64/auxvec.h
deleted file mode 100644
index 1f45c67..0000000
--- a/include/asm-sparc64/auxvec.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/auxvec.h>
diff --git a/include/asm-sparc64/backoff.h b/include/asm-sparc64/backoff.h
deleted file mode 100644
index 8ee26d9..0000000
--- a/include/asm-sparc64/backoff.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/backoff.h>
diff --git a/include/asm-sparc64/bbc.h b/include/asm-sparc64/bbc.h
deleted file mode 100644
index 06e8b63..0000000
--- a/include/asm-sparc64/bbc.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/bbc.h>
diff --git a/include/asm-sparc64/bitops.h b/include/asm-sparc64/bitops.h
deleted file mode 100644
index 2044043..0000000
--- a/include/asm-sparc64/bitops.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/bitops.h>
diff --git a/include/asm-sparc64/bpp.h b/include/asm-sparc64/bpp.h
deleted file mode 100644
index 514eee2..0000000
--- a/include/asm-sparc64/bpp.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/bpp.h>
diff --git a/include/asm-sparc64/bug.h b/include/asm-sparc64/bug.h
deleted file mode 100644
index 3433737..0000000
--- a/include/asm-sparc64/bug.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/bug.h>
diff --git a/include/asm-sparc64/bugs.h b/include/asm-sparc64/bugs.h
deleted file mode 100644
index 04ae9e2..0000000
--- a/include/asm-sparc64/bugs.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/bugs.h>
diff --git a/include/asm-sparc64/byteorder.h b/include/asm-sparc64/byteorder.h
deleted file mode 100644
index f672855..0000000
--- a/include/asm-sparc64/byteorder.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/byteorder.h>
diff --git a/include/asm-sparc64/cache.h b/include/asm-sparc64/cache.h
deleted file mode 100644
index fa9de5c..0000000
--- a/include/asm-sparc64/cache.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/cache.h>
diff --git a/include/asm-sparc64/cacheflush.h b/include/asm-sparc64/cacheflush.h
deleted file mode 100644
index cf5b6b3..0000000
--- a/include/asm-sparc64/cacheflush.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/cacheflush.h>
diff --git a/include/asm-sparc64/chafsr.h b/include/asm-sparc64/chafsr.h
deleted file mode 100644
index aaab975..0000000
--- a/include/asm-sparc64/chafsr.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/chafsr.h>
diff --git a/include/asm-sparc64/checksum.h b/include/asm-sparc64/checksum.h
deleted file mode 100644
index c3966c5..0000000
--- a/include/asm-sparc64/checksum.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/checksum.h>
diff --git a/include/asm-sparc64/chmctrl.h b/include/asm-sparc64/chmctrl.h
deleted file mode 100644
index eb757b4..0000000
--- a/include/asm-sparc64/chmctrl.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/chmctrl.h>
diff --git a/include/asm-sparc64/cmt.h b/include/asm-sparc64/cmt.h
deleted file mode 100644
index b19b445..0000000
--- a/include/asm-sparc64/cmt.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/cmt.h>
diff --git a/include/asm-sparc64/compat.h b/include/asm-sparc64/compat.h
deleted file mode 100644
index 8c155d2..0000000
--- a/include/asm-sparc64/compat.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/compat.h>
diff --git a/include/asm-sparc64/compat_signal.h b/include/asm-sparc64/compat_signal.h
deleted file mode 100644
index 7187dcc..0000000
--- a/include/asm-sparc64/compat_signal.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/compat_signal.h>
diff --git a/include/asm-sparc64/cpudata.h b/include/asm-sparc64/cpudata.h
deleted file mode 100644
index 3220e13..0000000
--- a/include/asm-sparc64/cpudata.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/cpudata.h>
diff --git a/include/asm-sparc64/cputime.h b/include/asm-sparc64/cputime.h
deleted file mode 100644
index 435f37a9..0000000
--- a/include/asm-sparc64/cputime.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/cputime.h>
diff --git a/include/asm-sparc64/current.h b/include/asm-sparc64/current.h
deleted file mode 100644
index a7904a7..0000000
--- a/include/asm-sparc64/current.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/current.h>
diff --git a/include/asm-sparc64/dcr.h b/include/asm-sparc64/dcr.h
deleted file mode 100644
index d67613b..0000000
--- a/include/asm-sparc64/dcr.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/dcr.h>
diff --git a/include/asm-sparc64/dcu.h b/include/asm-sparc64/dcu.h
deleted file mode 100644
index 28853f4..0000000
--- a/include/asm-sparc64/dcu.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/dcu.h>
diff --git a/include/asm-sparc64/delay.h b/include/asm-sparc64/delay.h
deleted file mode 100644
index 33dc558..0000000
--- a/include/asm-sparc64/delay.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/delay.h>
diff --git a/include/asm-sparc64/device.h b/include/asm-sparc64/device.h
deleted file mode 100644
index 4145c47..0000000
--- a/include/asm-sparc64/device.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/device.h>
diff --git a/include/asm-sparc64/display7seg.h b/include/asm-sparc64/display7seg.h
deleted file mode 100644
index e74f046..0000000
--- a/include/asm-sparc64/display7seg.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/display7seg.h>
diff --git a/include/asm-sparc64/div64.h b/include/asm-sparc64/div64.h
deleted file mode 100644
index 928c94f..0000000
--- a/include/asm-sparc64/div64.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/div64.h>
diff --git a/include/asm-sparc64/dma-mapping.h b/include/asm-sparc64/dma-mapping.h
deleted file mode 100644
index 380b7b6..0000000
--- a/include/asm-sparc64/dma-mapping.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/dma-mapping.h>
diff --git a/include/asm-sparc64/dma.h b/include/asm-sparc64/dma.h
deleted file mode 100644
index 2e36248..0000000
--- a/include/asm-sparc64/dma.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/dma.h>
diff --git a/include/asm-sparc64/ebus.h b/include/asm-sparc64/ebus.h
deleted file mode 100644
index d7d4761..0000000
--- a/include/asm-sparc64/ebus.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/ebus.h>
diff --git a/include/asm-sparc64/elf.h b/include/asm-sparc64/elf.h
deleted file mode 100644
index f256d94..0000000
--- a/include/asm-sparc64/elf.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/elf.h>
diff --git a/include/asm-sparc64/emergency-restart.h b/include/asm-sparc64/emergency-restart.h
deleted file mode 100644
index 2cac7b6..0000000
--- a/include/asm-sparc64/emergency-restart.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/emergency-restart.h>
diff --git a/include/asm-sparc64/envctrl.h b/include/asm-sparc64/envctrl.h
deleted file mode 100644
index a2cc0ca..0000000
--- a/include/asm-sparc64/envctrl.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/envctrl.h>
diff --git a/include/asm-sparc64/errno.h b/include/asm-sparc64/errno.h
deleted file mode 100644
index 9701fe0..0000000
--- a/include/asm-sparc64/errno.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/errno.h>
diff --git a/include/asm-sparc64/estate.h b/include/asm-sparc64/estate.h
deleted file mode 100644
index bedd0ef..0000000
--- a/include/asm-sparc64/estate.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/estate.h>
diff --git a/include/asm-sparc64/fb.h b/include/asm-sparc64/fb.h
deleted file mode 100644
index 1c2ac58..0000000
--- a/include/asm-sparc64/fb.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/fb.h>
diff --git a/include/asm-sparc64/fbio.h b/include/asm-sparc64/fbio.h
deleted file mode 100644
index c17edf8..0000000
--- a/include/asm-sparc64/fbio.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/fbio.h>
diff --git a/include/asm-sparc64/fcntl.h b/include/asm-sparc64/fcntl.h
deleted file mode 100644
index 8b1beae..0000000
--- a/include/asm-sparc64/fcntl.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/fcntl.h>
diff --git a/include/asm-sparc64/fhc.h b/include/asm-sparc64/fhc.h
deleted file mode 100644
index 73eb04c..0000000
--- a/include/asm-sparc64/fhc.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/fhc.h>
diff --git a/include/asm-sparc64/floppy.h b/include/asm-sparc64/floppy.h
deleted file mode 100644
index 2148781..0000000
--- a/include/asm-sparc64/floppy.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/floppy.h>
diff --git a/include/asm-sparc64/fpumacro.h b/include/asm-sparc64/fpumacro.h
deleted file mode 100644
index 30d6d0f..0000000
--- a/include/asm-sparc64/fpumacro.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/fpumacro.h>
diff --git a/include/asm-sparc64/futex.h b/include/asm-sparc64/futex.h
deleted file mode 100644
index 1ceb0bb..0000000
--- a/include/asm-sparc64/futex.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/futex.h>
diff --git a/include/asm-sparc64/hardirq.h b/include/asm-sparc64/hardirq.h
deleted file mode 100644
index 63dca3d..0000000
--- a/include/asm-sparc64/hardirq.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/hardirq.h>
diff --git a/include/asm-sparc64/head.h b/include/asm-sparc64/head.h
deleted file mode 100644
index 2254c09..0000000
--- a/include/asm-sparc64/head.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/head.h>
diff --git a/include/asm-sparc64/hugetlb.h b/include/asm-sparc64/hugetlb.h
deleted file mode 100644
index 21d8f0a..0000000
--- a/include/asm-sparc64/hugetlb.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/hugetlb.h>
diff --git a/include/asm-sparc64/hvtramp.h b/include/asm-sparc64/hvtramp.h
deleted file mode 100644
index fb46bfe..0000000
--- a/include/asm-sparc64/hvtramp.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/hvtramp.h>
diff --git a/include/asm-sparc64/hw_irq.h b/include/asm-sparc64/hw_irq.h
deleted file mode 100644
index 16920a2..0000000
--- a/include/asm-sparc64/hw_irq.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/hw_irq.h>
diff --git a/include/asm-sparc64/hypervisor.h b/include/asm-sparc64/hypervisor.h
deleted file mode 100644
index fe7e51a..0000000
--- a/include/asm-sparc64/hypervisor.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/hypervisor.h>
diff --git a/include/asm-sparc64/ide.h b/include/asm-sparc64/ide.h
deleted file mode 100644
index 7125317..0000000
--- a/include/asm-sparc64/ide.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/ide.h>
diff --git a/include/asm-sparc64/idprom.h b/include/asm-sparc64/idprom.h
deleted file mode 100644
index c22f9c3..0000000
--- a/include/asm-sparc64/idprom.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/idprom.h>
diff --git a/include/asm-sparc64/intr_queue.h b/include/asm-sparc64/intr_queue.h
deleted file mode 100644
index f722501..0000000
--- a/include/asm-sparc64/intr_queue.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/intr_queue.h>
diff --git a/include/asm-sparc64/io.h b/include/asm-sparc64/io.h
deleted file mode 100644
index 25ff258..0000000
--- a/include/asm-sparc64/io.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/io.h>
diff --git a/include/asm-sparc64/ioctl.h b/include/asm-sparc64/ioctl.h
deleted file mode 100644
index 18fc562..0000000
--- a/include/asm-sparc64/ioctl.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/ioctl.h>
diff --git a/include/asm-sparc64/ioctls.h b/include/asm-sparc64/ioctls.h
deleted file mode 100644
index dcd5540..0000000
--- a/include/asm-sparc64/ioctls.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/ioctls.h>
diff --git a/include/asm-sparc64/iommu.h b/include/asm-sparc64/iommu.h
deleted file mode 100644
index 76252bb..0000000
--- a/include/asm-sparc64/iommu.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/iommu.h>
diff --git a/include/asm-sparc64/ipcbuf.h b/include/asm-sparc64/ipcbuf.h
deleted file mode 100644
index 41dfaf1..0000000
--- a/include/asm-sparc64/ipcbuf.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/ipcbuf.h>
diff --git a/include/asm-sparc64/irq.h b/include/asm-sparc64/irq.h
deleted file mode 100644
index b2102e6..0000000
--- a/include/asm-sparc64/irq.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/irq.h>
diff --git a/include/asm-sparc64/irq_regs.h b/include/asm-sparc64/irq_regs.h
deleted file mode 100644
index 1e2b8a1..0000000
--- a/include/asm-sparc64/irq_regs.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/irq_regs.h>
diff --git a/include/asm-sparc64/irqflags.h b/include/asm-sparc64/irqflags.h
deleted file mode 100644
index 27b091f..0000000
--- a/include/asm-sparc64/irqflags.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/irqflags.h>
diff --git a/include/asm-sparc64/kdebug.h b/include/asm-sparc64/kdebug.h
deleted file mode 100644
index 78cfd5d..0000000
--- a/include/asm-sparc64/kdebug.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/kdebug.h>
diff --git a/include/asm-sparc64/kgdb.h b/include/asm-sparc64/kgdb.h
deleted file mode 100644
index aa6532f..0000000
--- a/include/asm-sparc64/kgdb.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/kgdb.h>
diff --git a/include/asm-sparc64/kmap_types.h b/include/asm-sparc64/kmap_types.h
deleted file mode 100644
index 276530c..0000000
--- a/include/asm-sparc64/kmap_types.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/kmap_types.h>
diff --git a/include/asm-sparc64/kprobes.h b/include/asm-sparc64/kprobes.h
deleted file mode 100644
index c55e43e..0000000
--- a/include/asm-sparc64/kprobes.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/kprobes.h>
diff --git a/include/asm-sparc64/ldc.h b/include/asm-sparc64/ldc.h
deleted file mode 100644
index 40f3f23..0000000
--- a/include/asm-sparc64/ldc.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/ldc.h>
diff --git a/include/asm-sparc64/linkage.h b/include/asm-sparc64/linkage.h
deleted file mode 100644
index 3ea4fd1..0000000
--- a/include/asm-sparc64/linkage.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/linkage.h>
diff --git a/include/asm-sparc64/lmb.h b/include/asm-sparc64/lmb.h
deleted file mode 100644
index 3d04981..0000000
--- a/include/asm-sparc64/lmb.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/lmb.h>
diff --git a/include/asm-sparc64/local.h b/include/asm-sparc64/local.h
deleted file mode 100644
index c11c530..0000000
--- a/include/asm-sparc64/local.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-generic/local.h>
diff --git a/include/asm-sparc64/lsu.h b/include/asm-sparc64/lsu.h
deleted file mode 100644
index 4e3d8b1..0000000
--- a/include/asm-sparc64/lsu.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/lsu.h>
diff --git a/include/asm-sparc64/mc146818rtc.h b/include/asm-sparc64/mc146818rtc.h
deleted file mode 100644
index 97842e6..0000000
--- a/include/asm-sparc64/mc146818rtc.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/mc146818rtc.h>
diff --git a/include/asm-sparc64/mdesc.h b/include/asm-sparc64/mdesc.h
deleted file mode 100644
index 165a193..0000000
--- a/include/asm-sparc64/mdesc.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/mdesc.h>
diff --git a/include/asm-sparc64/mman.h b/include/asm-sparc64/mman.h
deleted file mode 100644
index 17ddb17..0000000
--- a/include/asm-sparc64/mman.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/mman.h>
diff --git a/include/asm-sparc64/mmu.h b/include/asm-sparc64/mmu.h
deleted file mode 100644
index e677a64..0000000
--- a/include/asm-sparc64/mmu.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/mmu.h>
diff --git a/include/asm-sparc64/mmu_context.h b/include/asm-sparc64/mmu_context.h
deleted file mode 100644
index 877fee9..0000000
--- a/include/asm-sparc64/mmu_context.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/mmu_context.h>
diff --git a/include/asm-sparc64/mmzone.h b/include/asm-sparc64/mmzone.h
deleted file mode 100644
index 43a710f..0000000
--- a/include/asm-sparc64/mmzone.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/mmzone.h>
diff --git a/include/asm-sparc64/module.h b/include/asm-sparc64/module.h
deleted file mode 100644
index a9606db..0000000
--- a/include/asm-sparc64/module.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/module.h>
diff --git a/include/asm-sparc64/mostek.h b/include/asm-sparc64/mostek.h
deleted file mode 100644
index 95a752f..0000000
--- a/include/asm-sparc64/mostek.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/mostek.h>
diff --git a/include/asm-sparc64/msgbuf.h b/include/asm-sparc64/msgbuf.h
deleted file mode 100644
index 5b33cc9..0000000
--- a/include/asm-sparc64/msgbuf.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/msgbuf.h>
diff --git a/include/asm-sparc64/mutex.h b/include/asm-sparc64/mutex.h
deleted file mode 100644
index c0c0f8f..0000000
--- a/include/asm-sparc64/mutex.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/mutex.h>
diff --git a/include/asm-sparc64/ns87303.h b/include/asm-sparc64/ns87303.h
deleted file mode 100644
index 5f369d4..0000000
--- a/include/asm-sparc64/ns87303.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/ns87303.h>
diff --git a/include/asm-sparc64/of_device.h b/include/asm-sparc64/of_device.h
deleted file mode 100644
index a769fdb..0000000
--- a/include/asm-sparc64/of_device.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/of_device.h>
diff --git a/include/asm-sparc64/of_platform.h b/include/asm-sparc64/of_platform.h
deleted file mode 100644
index f7c427b..0000000
--- a/include/asm-sparc64/of_platform.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/of_platform.h>
diff --git a/include/asm-sparc64/openprom.h b/include/asm-sparc64/openprom.h
deleted file mode 100644
index acf4b23..0000000
--- a/include/asm-sparc64/openprom.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/openprom.h>
diff --git a/include/asm-sparc64/openpromio.h b/include/asm-sparc64/openpromio.h
deleted file mode 100644
index 122fabd..0000000
--- a/include/asm-sparc64/openpromio.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/openpromio.h>
diff --git a/include/asm-sparc64/oplib.h b/include/asm-sparc64/oplib.h
deleted file mode 100644
index d93e44e..0000000
--- a/include/asm-sparc64/oplib.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/oplib.h>
diff --git a/include/asm-sparc64/page.h b/include/asm-sparc64/page.h
deleted file mode 100644
index f46c1fb..0000000
--- a/include/asm-sparc64/page.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/page.h>
diff --git a/include/asm-sparc64/param.h b/include/asm-sparc64/param.h
deleted file mode 100644
index 40c6dc1..0000000
--- a/include/asm-sparc64/param.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/param.h>
diff --git a/include/asm-sparc64/parport.h b/include/asm-sparc64/parport.h
deleted file mode 100644
index b4e4ca8..0000000
--- a/include/asm-sparc64/parport.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/parport.h>
diff --git a/include/asm-sparc64/pci.h b/include/asm-sparc64/pci.h
deleted file mode 100644
index da54c4d..0000000
--- a/include/asm-sparc64/pci.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/pci.h>
diff --git a/include/asm-sparc64/percpu.h b/include/asm-sparc64/percpu.h
deleted file mode 100644
index 292729b..0000000
--- a/include/asm-sparc64/percpu.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/percpu.h>
diff --git a/include/asm-sparc64/perfctr.h b/include/asm-sparc64/perfctr.h
deleted file mode 100644
index 52073a9..0000000
--- a/include/asm-sparc64/perfctr.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/perfctr.h>
diff --git a/include/asm-sparc64/pgalloc.h b/include/asm-sparc64/pgalloc.h
deleted file mode 100644
index bec3164..0000000
--- a/include/asm-sparc64/pgalloc.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/pgalloc.h>
diff --git a/include/asm-sparc64/pgtable.h b/include/asm-sparc64/pgtable.h
deleted file mode 100644
index 9decbd9..0000000
--- a/include/asm-sparc64/pgtable.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/pgtable.h>
diff --git a/include/asm-sparc64/pil.h b/include/asm-sparc64/pil.h
deleted file mode 100644
index d805f33..0000000
--- a/include/asm-sparc64/pil.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/pil.h>
diff --git a/include/asm-sparc64/poll.h b/include/asm-sparc64/poll.h
deleted file mode 100644
index 8e2f31b..0000000
--- a/include/asm-sparc64/poll.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/poll.h>
diff --git a/include/asm-sparc64/posix_types.h b/include/asm-sparc64/posix_types.h
deleted file mode 100644
index 8cee992..0000000
--- a/include/asm-sparc64/posix_types.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/posix_types.h>
diff --git a/include/asm-sparc64/processor.h b/include/asm-sparc64/processor.h
deleted file mode 100644
index 21de6cc..0000000
--- a/include/asm-sparc64/processor.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/processor.h>
diff --git a/include/asm-sparc64/prom.h b/include/asm-sparc64/prom.h
deleted file mode 100644
index 5fa166e..0000000
--- a/include/asm-sparc64/prom.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/prom.h>
diff --git a/include/asm-sparc64/psrcompat.h b/include/asm-sparc64/psrcompat.h
deleted file mode 100644
index 587846f..0000000
--- a/include/asm-sparc64/psrcompat.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/psrcompat.h>
diff --git a/include/asm-sparc64/pstate.h b/include/asm-sparc64/pstate.h
deleted file mode 100644
index 3ccf0be..0000000
--- a/include/asm-sparc64/pstate.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/pstate.h>
diff --git a/include/asm-sparc64/ptrace.h b/include/asm-sparc64/ptrace.h
deleted file mode 100644
index 1a55b9f..0000000
--- a/include/asm-sparc64/ptrace.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/ptrace.h>
diff --git a/include/asm-sparc64/reboot.h b/include/asm-sparc64/reboot.h
deleted file mode 100644
index 0d72eb8..0000000
--- a/include/asm-sparc64/reboot.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/reboot.h>
diff --git a/include/asm-sparc64/reg.h b/include/asm-sparc64/reg.h
deleted file mode 100644
index 495bab2..0000000
--- a/include/asm-sparc64/reg.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/reg.h>
diff --git a/include/asm-sparc64/resource.h b/include/asm-sparc64/resource.h
deleted file mode 100644
index 46e3bc0..0000000
--- a/include/asm-sparc64/resource.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/resource.h>
diff --git a/include/asm-sparc64/rtc.h b/include/asm-sparc64/rtc.h
deleted file mode 100644
index e49a968..0000000
--- a/include/asm-sparc64/rtc.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/rtc.h>
diff --git a/include/asm-sparc64/rwsem-const.h b/include/asm-sparc64/rwsem-const.h
deleted file mode 100644
index 2a1de31..0000000
--- a/include/asm-sparc64/rwsem-const.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/rwsem-const.h>
diff --git a/include/asm-sparc64/rwsem.h b/include/asm-sparc64/rwsem.h
deleted file mode 100644
index 6943c56..0000000
--- a/include/asm-sparc64/rwsem.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/rwsem.h>
diff --git a/include/asm-sparc64/sbus.h b/include/asm-sparc64/sbus.h
deleted file mode 100644
index 0cab0e8..0000000
--- a/include/asm-sparc64/sbus.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/sbus.h>
diff --git a/include/asm-sparc64/scatterlist.h b/include/asm-sparc64/scatterlist.h
deleted file mode 100644
index b7fef95..0000000
--- a/include/asm-sparc64/scatterlist.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/scatterlist.h>
diff --git a/include/asm-sparc64/scratchpad.h b/include/asm-sparc64/scratchpad.h
deleted file mode 100644
index 23675f6..0000000
--- a/include/asm-sparc64/scratchpad.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/scratchpad.h>
diff --git a/include/asm-sparc64/seccomp.h b/include/asm-sparc64/seccomp.h
deleted file mode 100644
index f22f02a..0000000
--- a/include/asm-sparc64/seccomp.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/seccomp.h>
diff --git a/include/asm-sparc64/sections.h b/include/asm-sparc64/sections.h
deleted file mode 100644
index 721496f..0000000
--- a/include/asm-sparc64/sections.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/sections.h>
diff --git a/include/asm-sparc64/sembuf.h b/include/asm-sparc64/sembuf.h
deleted file mode 100644
index c55b952..0000000
--- a/include/asm-sparc64/sembuf.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/sembuf.h>
diff --git a/include/asm-sparc64/setup.h b/include/asm-sparc64/setup.h
deleted file mode 100644
index 7143d06..0000000
--- a/include/asm-sparc64/setup.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/setup.h>
diff --git a/include/asm-sparc64/sfafsr.h b/include/asm-sparc64/sfafsr.h
deleted file mode 100644
index 8036fc3..0000000
--- a/include/asm-sparc64/sfafsr.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/sfafsr.h>
diff --git a/include/asm-sparc64/sfp-machine.h b/include/asm-sparc64/sfp-machine.h
deleted file mode 100644
index 7bbc4fe..0000000
--- a/include/asm-sparc64/sfp-machine.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/sfp-machine.h>
diff --git a/include/asm-sparc64/shmbuf.h b/include/asm-sparc64/shmbuf.h
deleted file mode 100644
index 0c54a2d..0000000
--- a/include/asm-sparc64/shmbuf.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/shmbuf.h>
diff --git a/include/asm-sparc64/shmparam.h b/include/asm-sparc64/shmparam.h
deleted file mode 100644
index 5fa3a9b..0000000
--- a/include/asm-sparc64/shmparam.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/shmparam.h>
diff --git a/include/asm-sparc64/sigcontext.h b/include/asm-sparc64/sigcontext.h
deleted file mode 100644
index 5b16dcc..0000000
--- a/include/asm-sparc64/sigcontext.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/sigcontext.h>
diff --git a/include/asm-sparc64/siginfo.h b/include/asm-sparc64/siginfo.h
deleted file mode 100644
index 8ffd6eb..0000000
--- a/include/asm-sparc64/siginfo.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/siginfo.h>
diff --git a/include/asm-sparc64/signal.h b/include/asm-sparc64/signal.h
deleted file mode 100644
index 79705e5..0000000
--- a/include/asm-sparc64/signal.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/signal.h>
diff --git a/include/asm-sparc64/smp.h b/include/asm-sparc64/smp.h
deleted file mode 100644
index 5095a2c..0000000
--- a/include/asm-sparc64/smp.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/smp.h>
diff --git a/include/asm-sparc64/socket.h b/include/asm-sparc64/socket.h
deleted file mode 100644
index 13e0d5d..0000000
--- a/include/asm-sparc64/socket.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/socket.h>
diff --git a/include/asm-sparc64/sockios.h b/include/asm-sparc64/sockios.h
deleted file mode 100644
index 2cb4b64..0000000
--- a/include/asm-sparc64/sockios.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/sockios.h>
diff --git a/include/asm-sparc64/sparsemem.h b/include/asm-sparc64/sparsemem.h
deleted file mode 100644
index e681f22..0000000
--- a/include/asm-sparc64/sparsemem.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/sparsemem.h>
diff --git a/include/asm-sparc64/spinlock.h b/include/asm-sparc64/spinlock.h
deleted file mode 100644
index 0115b81..0000000
--- a/include/asm-sparc64/spinlock.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/spinlock.h>
diff --git a/include/asm-sparc64/spinlock_types.h b/include/asm-sparc64/spinlock_types.h
deleted file mode 100644
index 48d81c8..0000000
--- a/include/asm-sparc64/spinlock_types.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/spinlock_types.h>
diff --git a/include/asm-sparc64/spitfire.h b/include/asm-sparc64/spitfire.h
deleted file mode 100644
index 4430d2f..0000000
--- a/include/asm-sparc64/spitfire.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/spitfire.h>
diff --git a/include/asm-sparc64/sstate.h b/include/asm-sparc64/sstate.h
deleted file mode 100644
index 97720ce..0000000
--- a/include/asm-sparc64/sstate.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/sstate.h>
diff --git a/include/asm-sparc64/stacktrace.h b/include/asm-sparc64/stacktrace.h
deleted file mode 100644
index adc9b92c..0000000
--- a/include/asm-sparc64/stacktrace.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/stacktrace.h>
diff --git a/include/asm-sparc64/starfire.h b/include/asm-sparc64/starfire.h
deleted file mode 100644
index db97daa..0000000
--- a/include/asm-sparc64/starfire.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/starfire.h>
diff --git a/include/asm-sparc64/stat.h b/include/asm-sparc64/stat.h
deleted file mode 100644
index b108a86..0000000
--- a/include/asm-sparc64/stat.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/stat.h>
diff --git a/include/asm-sparc64/statfs.h b/include/asm-sparc64/statfs.h
deleted file mode 100644
index 5503d6a..0000000
--- a/include/asm-sparc64/statfs.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/statfs.h>
diff --git a/include/asm-sparc64/string.h b/include/asm-sparc64/string.h
deleted file mode 100644
index 5018cd8..0000000
--- a/include/asm-sparc64/string.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/string.h>
diff --git a/include/asm-sparc64/sunbpp.h b/include/asm-sparc64/sunbpp.h
deleted file mode 100644
index 9632be2..0000000
--- a/include/asm-sparc64/sunbpp.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/sunbpp.h>
diff --git a/include/asm-sparc64/syscalls.h b/include/asm-sparc64/syscalls.h
deleted file mode 100644
index 3477b16..0000000
--- a/include/asm-sparc64/syscalls.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/syscalls.h>
diff --git a/include/asm-sparc64/system.h b/include/asm-sparc64/system.h
deleted file mode 100644
index be2603c..0000000
--- a/include/asm-sparc64/system.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/system.h>
diff --git a/include/asm-sparc64/termbits.h b/include/asm-sparc64/termbits.h
deleted file mode 100644
index e03f975..0000000
--- a/include/asm-sparc64/termbits.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/termbits.h>
diff --git a/include/asm-sparc64/termios.h b/include/asm-sparc64/termios.h
deleted file mode 100644
index 940495e..0000000
--- a/include/asm-sparc64/termios.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/termios.h>
diff --git a/include/asm-sparc64/thread_info.h b/include/asm-sparc64/thread_info.h
deleted file mode 100644
index 92bed79..0000000
--- a/include/asm-sparc64/thread_info.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/thread_info.h>
diff --git a/include/asm-sparc64/timer.h b/include/asm-sparc64/timer.h
deleted file mode 100644
index 88026d8..0000000
--- a/include/asm-sparc64/timer.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/timer.h>
diff --git a/include/asm-sparc64/timex.h b/include/asm-sparc64/timex.h
deleted file mode 100644
index 8dd59ee..0000000
--- a/include/asm-sparc64/timex.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/timex.h>
diff --git a/include/asm-sparc64/tlb.h b/include/asm-sparc64/tlb.h
deleted file mode 100644
index ae92fce..0000000
--- a/include/asm-sparc64/tlb.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/tlb.h>
diff --git a/include/asm-sparc64/tlbflush.h b/include/asm-sparc64/tlbflush.h
deleted file mode 100644
index a43979a..0000000
--- a/include/asm-sparc64/tlbflush.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/tlbflush.h>
diff --git a/include/asm-sparc64/topology.h b/include/asm-sparc64/topology.h
deleted file mode 100644
index 46999b6..0000000
--- a/include/asm-sparc64/topology.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/topology.h>
diff --git a/include/asm-sparc64/tsb.h b/include/asm-sparc64/tsb.h
deleted file mode 100644
index 3677a30..0000000
--- a/include/asm-sparc64/tsb.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/tsb.h>
diff --git a/include/asm-sparc64/ttable.h b/include/asm-sparc64/ttable.h
deleted file mode 100644
index a550f1b..0000000
--- a/include/asm-sparc64/ttable.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/ttable.h>
diff --git a/include/asm-sparc64/types.h b/include/asm-sparc64/types.h
deleted file mode 100644
index cfbfad5..0000000
--- a/include/asm-sparc64/types.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/types.h>
diff --git a/include/asm-sparc64/uaccess.h b/include/asm-sparc64/uaccess.h
deleted file mode 100644
index 2872d22..0000000
--- a/include/asm-sparc64/uaccess.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/uaccess.h>
diff --git a/include/asm-sparc64/uctx.h b/include/asm-sparc64/uctx.h
deleted file mode 100644
index 9e1b579..0000000
--- a/include/asm-sparc64/uctx.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/uctx.h>
diff --git a/include/asm-sparc64/unaligned.h b/include/asm-sparc64/unaligned.h
deleted file mode 100644
index 19fbf95..0000000
--- a/include/asm-sparc64/unaligned.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/unaligned.h>
diff --git a/include/asm-sparc64/unistd.h b/include/asm-sparc64/unistd.h
deleted file mode 100644
index ad86e0b..0000000
--- a/include/asm-sparc64/unistd.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/unistd.h>
diff --git a/include/asm-sparc64/upa.h b/include/asm-sparc64/upa.h
deleted file mode 100644
index aab7293..0000000
--- a/include/asm-sparc64/upa.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/upa.h>
diff --git a/include/asm-sparc64/user.h b/include/asm-sparc64/user.h
deleted file mode 100644
index 29fc6e9..0000000
--- a/include/asm-sparc64/user.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/user.h>
diff --git a/include/asm-sparc64/utrap.h b/include/asm-sparc64/utrap.h
deleted file mode 100644
index b030a41..0000000
--- a/include/asm-sparc64/utrap.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/utrap.h>
diff --git a/include/asm-sparc64/vga.h b/include/asm-sparc64/vga.h
deleted file mode 100644
index fbf4d58..0000000
--- a/include/asm-sparc64/vga.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/vga.h>
diff --git a/include/asm-sparc64/vio.h b/include/asm-sparc64/vio.h
deleted file mode 100644
index 299b26a..0000000
--- a/include/asm-sparc64/vio.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/vio.h>
diff --git a/include/asm-sparc64/visasm.h b/include/asm-sparc64/visasm.h
deleted file mode 100644
index 837a122..0000000
--- a/include/asm-sparc64/visasm.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/visasm.h>
diff --git a/include/asm-sparc64/watchdog.h b/include/asm-sparc64/watchdog.h
deleted file mode 100644
index b0f2857..0000000
--- a/include/asm-sparc64/watchdog.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/watchdog.h>
diff --git a/include/asm-sparc64/xor.h b/include/asm-sparc64/xor.h
deleted file mode 100644
index ef187cc..0000000
--- a/include/asm-sparc64/xor.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-sparc/xor.h>
diff --git a/net/dccp/dccp.h b/net/dccp/dccp.h
index 743d85f..1c2e3ec 100644
--- a/net/dccp/dccp.h
+++ b/net/dccp/dccp.h
@@ -226,7 +226,7 @@
 
 extern void dccp_v4_send_check(struct sock *sk, int len, struct sk_buff *skb);
 
-extern int  dccp_retransmit_skb(struct sock *sk, struct sk_buff *skb);
+extern int  dccp_retransmit_skb(struct sock *sk);
 
 extern void dccp_send_ack(struct sock *sk);
 extern void dccp_reqsk_send_ack(struct sk_buff *sk, struct request_sock *rsk);
diff --git a/net/dccp/ipv4.c b/net/dccp/ipv4.c
index a835b88..882c5c4 100644
--- a/net/dccp/ipv4.c
+++ b/net/dccp/ipv4.c
@@ -196,8 +196,8 @@
 static void dccp_v4_err(struct sk_buff *skb, u32 info)
 {
 	const struct iphdr *iph = (struct iphdr *)skb->data;
-	const struct dccp_hdr *dh = (struct dccp_hdr *)(skb->data +
-							(iph->ihl << 2));
+	const u8 offset = iph->ihl << 2;
+	const struct dccp_hdr *dh = (struct dccp_hdr *)(skb->data + offset);
 	struct dccp_sock *dp;
 	struct inet_sock *inet;
 	const int type = icmp_hdr(skb)->type;
@@ -207,7 +207,8 @@
 	int err;
 	struct net *net = dev_net(skb->dev);
 
-	if (skb->len < (iph->ihl << 2) + 8) {
+	if (skb->len < offset + sizeof(*dh) ||
+	    skb->len < offset + __dccp_basic_hdr_len(dh)) {
 		ICMP_INC_STATS_BH(net, ICMP_MIB_INERRORS);
 		return;
 	}
@@ -238,7 +239,7 @@
 	dp = dccp_sk(sk);
 	seq = dccp_hdr_seq(dh);
 	if ((1 << sk->sk_state) & ~(DCCPF_REQUESTING | DCCPF_LISTEN) &&
-	    !between48(seq, dp->dccps_swl, dp->dccps_swh)) {
+	    !between48(seq, dp->dccps_awl, dp->dccps_awh)) {
 		NET_INC_STATS_BH(net, LINUX_MIB_OUTOFWINDOWICMPS);
 		goto out;
 	}
diff --git a/net/dccp/ipv6.c b/net/dccp/ipv6.c
index da50912..5e1ee0d 100644
--- a/net/dccp/ipv6.c
+++ b/net/dccp/ipv6.c
@@ -89,12 +89,19 @@
 {
 	struct ipv6hdr *hdr = (struct ipv6hdr *)skb->data;
 	const struct dccp_hdr *dh = (struct dccp_hdr *)(skb->data + offset);
+	struct dccp_sock *dp;
 	struct ipv6_pinfo *np;
 	struct sock *sk;
 	int err;
 	__u64 seq;
 	struct net *net = dev_net(skb->dev);
 
+	if (skb->len < offset + sizeof(*dh) ||
+	    skb->len < offset + __dccp_basic_hdr_len(dh)) {
+		ICMP6_INC_STATS_BH(__in6_dev_get(skb->dev), ICMP6_MIB_INERRORS);
+		return;
+	}
+
 	sk = inet6_lookup(net, &dccp_hashinfo,
 			&hdr->daddr, dh->dccph_dport,
 			&hdr->saddr, dh->dccph_sport, inet6_iif(skb));
@@ -116,6 +123,14 @@
 	if (sk->sk_state == DCCP_CLOSED)
 		goto out;
 
+	dp = dccp_sk(sk);
+	seq = dccp_hdr_seq(dh);
+	if ((1 << sk->sk_state) & ~(DCCPF_REQUESTING | DCCPF_LISTEN) &&
+	    !between48(seq, dp->dccps_awl, dp->dccps_awh)) {
+		NET_INC_STATS_BH(net, LINUX_MIB_OUTOFWINDOWICMPS);
+		goto out;
+	}
+
 	np = inet6_sk(sk);
 
 	if (type == ICMPV6_PKT_TOOBIG) {
@@ -168,7 +183,6 @@
 
 	icmpv6_err_convert(type, code, &err);
 
-	seq = dccp_hdr_seq(dh);
 	/* Might be for an request_sock */
 	switch (sk->sk_state) {
 		struct request_sock *req, **prev;
diff --git a/net/dccp/output.c b/net/dccp/output.c
index fe20068..d06945c 100644
--- a/net/dccp/output.c
+++ b/net/dccp/output.c
@@ -53,8 +53,11 @@
 					  dccp_packet_hdr_len(dcb->dccpd_type);
 		int err, set_ack = 1;
 		u64 ackno = dp->dccps_gsr;
-
-		dccp_inc_seqno(&dp->dccps_gss);
+		/*
+		 * Increment GSS here already in case the option code needs it.
+		 * Update GSS for real only if option processing below succeeds.
+		 */
+		dcb->dccpd_seq = ADD48(dp->dccps_gss, 1);
 
 		switch (dcb->dccpd_type) {
 		case DCCP_PKT_DATA:
@@ -66,6 +69,9 @@
 
 		case DCCP_PKT_REQUEST:
 			set_ack = 0;
+			/* Use ISS on the first (non-retransmitted) Request. */
+			if (icsk->icsk_retransmits == 0)
+				dcb->dccpd_seq = dp->dccps_iss;
 			/* fall through */
 
 		case DCCP_PKT_SYNC:
@@ -84,8 +90,6 @@
 			break;
 		}
 
-		dcb->dccpd_seq = dp->dccps_gss;
-
 		if (dccp_insert_options(sk, skb)) {
 			kfree_skb(skb);
 			return -EPROTO;
@@ -103,7 +107,7 @@
 		/* XXX For now we're using only 48 bits sequence numbers */
 		dh->dccph_x	= 1;
 
-		dp->dccps_awh = dp->dccps_gss;
+		dccp_update_gss(sk, dcb->dccpd_seq);
 		dccp_hdr_set_seq(dh, dp->dccps_gss);
 		if (set_ack)
 			dccp_hdr_set_ack(dccp_hdr_ack_bits(skb), ackno);
@@ -112,6 +116,11 @@
 		case DCCP_PKT_REQUEST:
 			dccp_hdr_request(skb)->dccph_req_service =
 							dp->dccps_service;
+			/*
+			 * Limit Ack window to ISS <= P.ackno <= GSS, so that
+			 * only Responses to Requests we sent are considered.
+			 */
+			dp->dccps_awl = dp->dccps_iss;
 			break;
 		case DCCP_PKT_RESET:
 			dccp_hdr_reset(skb)->dccph_reset_code =
@@ -284,14 +293,26 @@
 	}
 }
 
-int dccp_retransmit_skb(struct sock *sk, struct sk_buff *skb)
+/**
+ * dccp_retransmit_skb  -  Retransmit Request, Close, or CloseReq packets
+ * There are only four retransmittable packet types in DCCP:
+ * - Request  in client-REQUEST  state (sec. 8.1.1),
+ * - CloseReq in server-CLOSEREQ state (sec. 8.3),
+ * - Close    in   node-CLOSING  state (sec. 8.3),
+ * - Acks in client-PARTOPEN state (sec. 8.1.5, handled by dccp_delack_timer()).
+ * This function expects sk->sk_send_head to contain the original skb.
+ */
+int dccp_retransmit_skb(struct sock *sk)
 {
+	WARN_ON(sk->sk_send_head == NULL);
+
 	if (inet_csk(sk)->icsk_af_ops->rebuild_header(sk) != 0)
 		return -EHOSTUNREACH; /* Routing failure or similar. */
 
-	return dccp_transmit_skb(sk, (skb_cloned(skb) ?
-				      pskb_copy(skb, GFP_ATOMIC):
-				      skb_clone(skb, GFP_ATOMIC)));
+	/* this count is used to distinguish original and retransmitted skb */
+	inet_csk(sk)->icsk_retransmits++;
+
+	return dccp_transmit_skb(sk, skb_clone(sk->sk_send_head, GFP_ATOMIC));
 }
 
 struct sk_buff *dccp_make_response(struct sock *sk, struct dst_entry *dst,
@@ -437,19 +458,7 @@
 
 	dccp_sync_mss(sk, dst_mtu(dst));
 
-	/*
-	 * SWL and AWL are initially adjusted so that they are not less than
-	 * the initial Sequence Numbers received and sent, respectively:
-	 *	SWL := max(GSR + 1 - floor(W/4), ISR),
-	 *	AWL := max(GSS - W' + 1, ISS).
-	 * These adjustments MUST be applied only at the beginning of the
-	 * connection.
-	 */
-	dccp_update_gss(sk, dp->dccps_iss);
-	dccp_set_seqno(&dp->dccps_awl, max48(dp->dccps_awl, dp->dccps_iss));
-
-	/* S.GAR - greatest valid acknowledgement number received on a non-Sync;
-	 *         initialized to S.ISS (sec. 8.5)                            */
+	/* Initialise GAR as per 8.5; AWL/AWH are set in dccp_transmit_skb() */
 	dp->dccps_gar = dp->dccps_iss;
 
 	icsk->icsk_retransmits = 0;
diff --git a/net/dccp/timer.c b/net/dccp/timer.c
index 6a5b961..54b3c7e 100644
--- a/net/dccp/timer.c
+++ b/net/dccp/timer.c
@@ -99,21 +99,11 @@
 	}
 
 	/*
-	 * sk->sk_send_head has to have one skb with
-	 * DCCP_SKB_CB(skb)->dccpd_type set to one of the retransmittable DCCP
-	 * packet types. The only packets eligible for retransmission are:
-	 *	-- Requests in client-REQUEST  state (sec. 8.1.1)
-	 *	-- Acks     in client-PARTOPEN state (sec. 8.1.5)
-	 *	-- CloseReq in server-CLOSEREQ state (sec. 8.3)
-	 *	-- Close    in   node-CLOSING  state (sec. 8.3)                */
-	WARN_ON(sk->sk_send_head == NULL);
-
-	/*
 	 * More than than 4MSL (8 minutes) has passed, a RESET(aborted) was
 	 * sent, no need to retransmit, this sock is dead.
 	 */
 	if (dccp_write_timeout(sk))
-		goto out;
+		return;
 
 	/*
 	 * We want to know the number of packets retransmitted, not the
@@ -122,30 +112,28 @@
 	if (icsk->icsk_retransmits == 0)
 		DCCP_INC_STATS_BH(DCCP_MIB_TIMEOUTS);
 
-	if (dccp_retransmit_skb(sk, sk->sk_send_head) < 0) {
+	if (dccp_retransmit_skb(sk) != 0) {
 		/*
 		 * Retransmission failed because of local congestion,
 		 * do not backoff.
 		 */
-		if (icsk->icsk_retransmits == 0)
+		if (--icsk->icsk_retransmits == 0)
 			icsk->icsk_retransmits = 1;
 		inet_csk_reset_xmit_timer(sk, ICSK_TIME_RETRANS,
 					  min(icsk->icsk_rto,
 					      TCP_RESOURCE_PROBE_INTERVAL),
 					  DCCP_RTO_MAX);
-		goto out;
+		return;
 	}
 
 backoff:
 	icsk->icsk_backoff++;
-	icsk->icsk_retransmits++;
 
 	icsk->icsk_rto = min(icsk->icsk_rto << 1, DCCP_RTO_MAX);
 	inet_csk_reset_xmit_timer(sk, ICSK_TIME_RETRANS, icsk->icsk_rto,
 				  DCCP_RTO_MAX);
 	if (icsk->icsk_retransmits > sysctl_dccp_retries1)
 		__sk_dst_reset(sk);
-out:;
 }
 
 static void dccp_write_timer(unsigned long data)
diff --git a/net/ipv4/ipcomp.c b/net/ipv4/ipcomp.c
index a42b64d..38ccb6d 100644
--- a/net/ipv4/ipcomp.c
+++ b/net/ipv4/ipcomp.c
@@ -104,9 +104,7 @@
 
 static int ipcomp4_init_state(struct xfrm_state *x)
 {
-	int err;
-	struct ipcomp_data *ipcd;
-	struct xfrm_algo_desc *calg_desc;
+	int err = -EINVAL;
 
 	x->props.header_len = 0;
 	switch (x->props.mode) {
diff --git a/net/ipv6/ipcomp6.c b/net/ipv6/ipcomp6.c
index 0cfcea4..4545e43 100644
--- a/net/ipv6/ipcomp6.c
+++ b/net/ipv6/ipcomp6.c
@@ -134,9 +134,7 @@
 
 static int ipcomp6_init_state(struct xfrm_state *x)
 {
-	int err;
-	struct ipcomp_data *ipcd;
-	struct xfrm_algo_desc *calg_desc;
+	int err = -EINVAL;
 
 	x->props.header_len = 0;
 	switch (x->props.mode) {