changeset 923:4e798d7aa5f9

Move to 2.6.32 kernel, updating patches. (With a much less ugly fix for powerpc, and allowing arm to use more qemu -cpu options.)
author Rob Landley <rob@landley.net>
date Tue, 08 Dec 2009 08:36:10 -0600
parents 43efbc4c4838
children 42e327ee501e
files download.sh sources/patches/linux-2.6.25-rc1-noperl.patch sources/patches/linux-2.6.28-perl2.patch sources/patches/linux-2.6.28-perl3.patch sources/patches/linux-2.6.29-armv6-armv7-for-versatilepb.patch sources/patches/linux-dnsdomainname.patch sources/patches/linux-revertppcserial.patch sources/patches/squashfs-tools-4.0-uclibc-get_nprocs.patch sources/patches/uClibc-fixm68k.patch
diffstat 9 files changed, 53 insertions(+), 593 deletions(-) [+]
line wrap: on
line diff
--- a/download.sh	Tue Dec 08 05:37:27 2009 -0600
+++ b/download.sh	Tue Dec 08 08:36:10 2009 -0600
@@ -30,8 +30,8 @@
 # Building a cross compile toolchain requires linux headers, uClibc,
 # binutils, and gcc.
 
-URL=http://kernel.org/pub/linux/kernel/v2.6/linux-2.6.31.6.tar.bz2 \
-SHA1=00967b9eb7e2bd635425b684968761569a69479e \
+URL=http://kernel.org/pub/linux/kernel/v2.6/linux-2.6.32.tar.bz2 \
+SHA1=410b4fc818023bfef60064e973ff0ab46d3bfb19 \
 UNSTABLE=http://kernel.org/pub/linux/kernel/v2.6/testing/linux-2.6.32-rc7.tar.bz2 \
 download || dienow
 
--- a/sources/patches/linux-2.6.25-rc1-noperl.patch	Tue Dec 08 05:37:27 2009 -0600
+++ b/sources/patches/linux-2.6.25-rc1-noperl.patch	Tue Dec 08 08:36:10 2009 -0600
@@ -3,9 +3,6 @@
 Replace kernel/timeconst.pl with kernel/timeconst.sh. The new shell script
 is much simpler, about 1/4 the size, and runs on Red Hat 9 from 2003.
 
-Peter Anvin added this perl to 2.6.25. Before that, the kernel had never
-required perl to build.
-
 Signed-off-by: Rob Landley <rob@landley.net>
 --
 
@@ -17,7 +14,7 @@
 diff -ruN linux-2.6.30/kernel/Makefile linux-2.6.30.new/kernel/Makefile
 --- linux-2.6.30/kernel/Makefile	2009-06-09 22:05:27.000000000 -0500
 +++ linux-2.6.30.new/kernel/Makefile	2009-06-22 14:29:16.000000000 -0500
-@@ -127,7 +127,7 @@
+@@ -123,7 +123,7 @@
  $(obj)/time.o: $(obj)/timeconst.h
  
  quiet_cmd_timeconst  = TIMEC   $@
--- a/sources/patches/linux-2.6.28-perl2.patch	Tue Dec 08 05:37:27 2009 -0600
+++ b/sources/patches/linux-2.6.28-perl2.patch	Tue Dec 08 08:36:10 2009 -0600
@@ -8,10 +8,6 @@
 Signed-off-by: Rob Landley <rob@landley.net>
 ---
 
-Changes from previous version (http://lkml.org/lkml/2009/1/2/22):
-
-Updated for Mike Frysinger's Jan 2 commit adding asm/inline/volatile.
-
  scripts/Makefile.headersinst |    6 ++--
  scripts/headers_install.pl   |   49 ---------------------------------
  scripts/headers_install.sh   |   39 ++++++++++++++++++++++++++
@@ -43,7 +39,7 @@
 -
 -my ($readdir, $installdir, $arch, @files) = @ARGV;
 -
--my $unifdef = "scripts/unifdef -U__KERNEL__";
+-my $unifdef = "scripts/unifdef -U__KERNEL__ -D__EXPORTED_HEADERS__";
 -
 -foreach my $file (@files) {
 -	local *INFILE;
@@ -109,7 +105,7 @@
 +		-e 's@^#include <linux/compiler.h>@@' \
 +		-e 's/(^|[ \t])(inline|asm|volatile)([ \t(]|$)/\1__\2__\3/g' \
 +		"$INDIR/$i" |
-+	scripts/unifdef -U__KERNEL__ - > "$OUTDIR/$i"
++	scripts/unifdef -U__KERNEL__ -D__EXPORTED_HEADERS__ - > "$OUTDIR/$i"
 +done
 +
 +exit 0
--- a/sources/patches/linux-2.6.28-perl3.patch	Tue Dec 08 05:37:27 2009 -0600
+++ b/sources/patches/linux-2.6.28-perl3.patch	Tue Dec 08 08:36:10 2009 -0600
@@ -7,10 +7,6 @@
 Signed-off-by: Rob Landley <rob@landley.net>
 ---
 
-Changes from previous version (http://lkml.org/lkml/2009/1/2/24):
-
-None, just a rediff.
-
  arch/x86/kernel/cpu/Makefile      |    4 +--
  arch/x86/kernel/cpu/mkcapflags.pl |   32 ----------------------------
  arch/x86/kernel/cpu/mkcapflags.sh |   28 ++++++++++++++++++++++++
--- a/sources/patches/linux-2.6.29-armv6-armv7-for-versatilepb.patch	Tue Dec 08 05:37:27 2009 -0600
+++ b/sources/patches/linux-2.6.29-armv6-armv7-for-versatilepb.patch	Tue Dec 08 08:36:10 2009 -0600
@@ -1,8 +1,7 @@
-diff --git a/arch/arm/mach-versatile/Kconfig b/arch/arm/mach-versatile/Kconfig
-index c781f30..95096af 100644
---- a/arch/arm/mach-versatile/Kconfig
-+++ b/arch/arm/mach-versatile/Kconfig
-@@ -3,14 +3,12 @@ menu "Versatile platform type"
+diff -ru linux/arch/arm/mach-versatile/Kconfig linux2/arch/arm/mach-versatile/Kconfig
+--- linux/arch/arm/mach-versatile/Kconfig	2009-12-02 21:51:21.000000000 -0600
++++ linux2/arch/arm/mach-versatile/Kconfig	2009-12-08 04:29:50.000000000 -0600
+@@ -3,14 +3,12 @@
  
  config ARCH_VERSATILE_PB
  	bool "Support Versatile/PB platform"
@@ -17,11 +16,28 @@
  	help
  	  Include support for the ARM(R) Versatile/AP platform.
  
-diff --git a/arch/arm/mm/Kconfig b/arch/arm/mm/Kconfig
-index 2097956..2a64c95 100644
---- a/arch/arm/mm/Kconfig
-+++ b/arch/arm/mm/Kconfig
-@@ -170,7 +170,7 @@ config CPU_ARM925T
+diff -ru linux/arch/arm/mm/Kconfig linux2/arch/arm/mm/Kconfig
+--- linux/arch/arm/mm/Kconfig	2009-12-02 21:51:21.000000000 -0600
++++ linux2/arch/arm/mm/Kconfig	2009-12-08 04:29:50.000000000 -0600
+@@ -111,7 +111,7 @@
+ 
+ # ARM920T
+ config CPU_ARM920T
+-	bool "Support ARM920T processor" if ARCH_INTEGRATOR
++	bool "Support ARM920T processor" if ARCH_INTEGRATOR || ARCH_VERSATILE_PB || ARCH_VERSATILE_AB
+ 	select CPU_32v4T
+ 	select CPU_ABRT_EV4T
+ 	select CPU_PABRT_LEGACY
+@@ -129,7 +129,7 @@
+ 
+ # ARM922T
+ config CPU_ARM922T
+-	bool "Support ARM922T processor" if ARCH_INTEGRATOR
++	bool "Support ARM922T processor" if ARCH_INTEGRATOR || ARCH_VERSATILE_PB || ARCH_VERSATILE_AB
+ 	select CPU_32v4T
+ 	select CPU_ABRT_EV4T
+ 	select CPU_PABRT_LEGACY
+@@ -167,7 +167,7 @@
  
  # ARM926T
  config CPU_ARM926T
@@ -29,8 +45,8 @@
 +	bool "Support ARM926T processor" if ARCH_INTEGRATOR || MACH_REALVIEW_EB || ARCH_VERSATILE_PB || ARCH_VERSATILE_AB
  	select CPU_32v5
  	select CPU_ABRT_EV5TJ
- 	select CPU_PABRT_NOIFAR
-@@ -178,6 +178,7 @@ config CPU_ARM926T
+ 	select CPU_PABRT_LEGACY
+@@ -175,6 +175,7 @@
  	select CPU_CP15_MMU
  	select CPU_COPY_V4WB if MMU
  	select CPU_TLB_V4WBI if MMU
@@ -38,7 +54,7 @@
  	help
  	  This is a variant of the ARM920.  It has slightly different
  	  instruction sequences for cache and TLB operations.  Curiously,
-@@ -391,7 +392,7 @@ config CPU_FEROCEON_OLD_ID
+@@ -388,7 +389,7 @@
  
  # ARMv6
  config CPU_V6
@@ -46,8 +62,8 @@
 +	bool "Support ARM V6 processor" if ARCH_INTEGRATOR || MACH_REALVIEW_EB || MACH_REALVIEW_PBX || ARCH_VERSATILE_PB || ARCH_VERSATILE_AB
  	select CPU_32v6
  	select CPU_ABRT_EV6
- 	select CPU_PABRT_NOIFAR
-@@ -416,7 +417,7 @@ config CPU_32v6K
+ 	select CPU_PABRT_V6
+@@ -413,7 +414,7 @@
  
  # ARMv7
  config CPU_V7
--- a/sources/patches/linux-dnsdomainname.patch	Tue Dec 08 05:37:27 2009 -0600
+++ b/sources/patches/linux-dnsdomainname.patch	Tue Dec 08 08:36:10 2009 -0600
@@ -2,18 +2,18 @@
 # for a command at an absolute path, then runs it out of $PATH, but for us
 # /bin isn't necessarily in $PATH.
 
-diff -r 2684e5fca56c scripts/mkcompile_h
---- a/scripts/mkcompile_h	Tue Jan 13 14:53:16 2009 -0800
-+++ b/scripts/mkcompile_h	Fri Jan 16 02:26:34 2009 -0600
-@@ -65,9 +65,9 @@
+diff -ru linux.bak/scripts/mkcompile_h linux/scripts/mkcompile_h
+--- linux.bak/scripts/mkcompile_h	2009-12-05 15:06:52.000000000 -0600
++++ linux/scripts/mkcompile_h	2009-12-05 15:15:37.000000000 -0600
+@@ -67,9 +67,9 @@
    echo \#define LINUX_COMPILE_BY \"`whoami`\"
    echo \#define LINUX_COMPILE_HOST \"`hostname | $UTS_TRUNCATE`\"
  
 -  if [ -x /bin/dnsdomainname ]; then
 +  if [ ! -z "$(which dnsdomainname)" ]; then
-     echo \#define LINUX_COMPILE_DOMAIN \"`dnsdomainname | $UTS_TRUNCATE`\"
+     domain=`dnsdomainname 2> /dev/null`
 -  elif [ -x /bin/domainname ]; then
 +  elif [ ! -z "$(which domainname)" ]; then
-     echo \#define LINUX_COMPILE_DOMAIN \"`domainname | $UTS_TRUNCATE`\"
-   else
-     echo \#define LINUX_COMPILE_DOMAIN
+     domain=`domainname 2> /dev/null`
+   fi
+ 
--- a/sources/patches/linux-revertppcserial.patch	Tue Dec 08 05:37:27 2009 -0600
+++ b/sources/patches/linux-revertppcserial.patch	Tue Dec 08 08:36:10 2009 -0600
@@ -1,561 +1,12 @@
-Revert commit f751928e0ddf54ea4fe5546f35e99efc5b5d9938 which breaks
-CONFIG_SERIAL_PMACZILOG irq handling, and thus the PPC serial console panics
-as soon as init launches.
-
-See:
-  http://lists.ozlabs.org/pipermail/linuxppc-dev/2009-October/076727.html
-  http://lists.ozlabs.org/pipermail/linuxppc-dev/2009-October/077059.html
-
-diff -ru linux/drivers/serial/jsm/jsm_tty.c linux2/drivers/serial/jsm/jsm_tty.c
---- linux/drivers/serial/jsm/jsm_tty.c	2009-01-02 12:19:42.000000000 -0600
-+++ linux2/drivers/serial/jsm/jsm_tty.c	2009-10-21 18:03:31.000000000 -0500
-@@ -272,7 +272,7 @@
- 	jsm_printk(CLOSE, INFO, &channel->ch_bd->pci_dev, "start\n");
- 
- 	bd = channel->ch_bd;
--	ts = port->info->port.tty->termios;
-+	ts = channel->uart_port.info->port.tty->termios;
- 
- 	channel->ch_flags &= ~(CH_STOPI);
- 
 diff -ru linux/drivers/serial/serial_core.c linux2/drivers/serial/serial_core.c
---- linux/drivers/serial/serial_core.c	2009-01-02 12:19:42.000000000 -0600
-+++ linux2/drivers/serial/serial_core.c	2009-10-21 18:03:31.000000000 -0500
-@@ -50,7 +50,7 @@
- 
- #define HIGH_BITS_OFFSET	((sizeof(long)-sizeof(int))*8)
- 
--#define uart_users(state)	((state)->count + (state)->info.port.blocked_open)
-+#define uart_users(state)	((state)->count + ((state)->info ? (state)->info->port.blocked_open : 0))
- 
- #ifdef CONFIG_SERIAL_CORE_CONSOLE
- #define uart_console(port)	((port)->cons && (port)->cons->index == (port)->line)
-@@ -94,7 +94,7 @@
- 	struct uart_state *state = tty->driver_data;
- 	struct uart_port *port = state->port;
- 
--	if (!uart_circ_empty(&state->info.xmit) && state->info.xmit.buf &&
-+	if (!uart_circ_empty(&state->info->xmit) && state->info->xmit.buf &&
- 	    !tty->stopped && !tty->hw_stopped)
- 		port->ops->start_tx(port);
- }
+--- linux/drivers/serial/serial_core.c	2009-12-02 21:51:21.000000000 -0600
++++ linux2/drivers/serial/serial_core.c	2009-12-08 06:17:06.000000000 -0600
 @@ -113,7 +113,7 @@
  static void uart_tasklet_action(unsigned long data)
  {
  	struct uart_state *state = (struct uart_state *)data;
--	tty_wakeup(state->info.port.tty);
-+	tty_wakeup(state->info->port.tty);
+-	tty_wakeup(state->port.tty);
++	if (state->port.tty) tty_wakeup(state->port.tty);
  }
  
  static inline void
-@@ -139,7 +139,7 @@
-  */
- static int uart_startup(struct uart_state *state, int init_hw)
- {
--	struct uart_info *info = &state->info;
-+	struct uart_info *info = state->info;
- 	struct uart_port *port = state->port;
- 	unsigned long page;
- 	int retval = 0;
-@@ -212,15 +212,14 @@
-  */
- static void uart_shutdown(struct uart_state *state)
- {
--	struct uart_info *info = &state->info;
-+	struct uart_info *info = state->info;
- 	struct uart_port *port = state->port;
--	struct tty_struct *tty = info->port.tty;
- 
- 	/*
- 	 * Set the TTY IO error marker
- 	 */
--	if (tty)
--		set_bit(TTY_IO_ERROR, &tty->flags);
-+	if (info->port.tty)
-+		set_bit(TTY_IO_ERROR, &info->port.tty->flags);
- 
- 	if (info->flags & UIF_INITIALIZED) {
- 		info->flags &= ~UIF_INITIALIZED;
-@@ -228,7 +227,7 @@
- 		/*
- 		 * Turn off DTR and RTS early.
- 		 */
--		if (!tty || (tty->termios->c_cflag & HUPCL))
-+		if (!info->port.tty || (info->port.tty->termios->c_cflag & HUPCL))
- 			uart_clear_mctrl(port, TIOCM_DTR | TIOCM_RTS);
- 
- 		/*
-@@ -428,7 +427,7 @@
- static void
- uart_change_speed(struct uart_state *state, struct ktermios *old_termios)
- {
--	struct tty_struct *tty = state->info.port.tty;
-+	struct tty_struct *tty = state->info->port.tty;
- 	struct uart_port *port = state->port;
- 	struct ktermios *termios;
- 
-@@ -445,14 +444,14 @@
- 	 * Set flags based on termios cflag
- 	 */
- 	if (termios->c_cflag & CRTSCTS)
--		state->info.flags |= UIF_CTS_FLOW;
-+		state->info->flags |= UIF_CTS_FLOW;
- 	else
--		state->info.flags &= ~UIF_CTS_FLOW;
-+		state->info->flags &= ~UIF_CTS_FLOW;
- 
- 	if (termios->c_cflag & CLOCAL)
--		state->info.flags &= ~UIF_CHECK_CD;
-+		state->info->flags &= ~UIF_CHECK_CD;
- 	else
--		state->info.flags |= UIF_CHECK_CD;
-+		state->info->flags |= UIF_CHECK_CD;
- 
- 	port->ops->set_termios(port, termios, old_termios);
- }
-@@ -480,7 +479,7 @@
- {
- 	struct uart_state *state = tty->driver_data;
- 
--	return __uart_put_char(state->port, &state->info.xmit, ch);
-+	return __uart_put_char(state->port, &state->info->xmit, ch);
- }
- 
- static void uart_flush_chars(struct tty_struct *tty)
-@@ -501,13 +500,13 @@
- 	 * This means you called this function _after_ the port was
- 	 * closed.  No cookie for you.
- 	 */
--	if (!state) {
-+	if (!state || !state->info) {
- 		WARN_ON(1);
- 		return -EL3HLT;
- 	}
- 
- 	port = state->port;
--	circ = &state->info.xmit;
-+	circ = &state->info->xmit;
- 
- 	if (!circ->buf)
- 		return 0;
-@@ -538,7 +537,7 @@
- 	int ret;
- 
- 	spin_lock_irqsave(&state->port->lock, flags);
--	ret = uart_circ_chars_free(&state->info.xmit);
-+	ret = uart_circ_chars_free(&state->info->xmit);
- 	spin_unlock_irqrestore(&state->port->lock, flags);
- 	return ret;
- }
-@@ -550,7 +549,7 @@
- 	int ret;
- 
- 	spin_lock_irqsave(&state->port->lock, flags);
--	ret = uart_circ_chars_pending(&state->info.xmit);
-+	ret = uart_circ_chars_pending(&state->info->xmit);
- 	spin_unlock_irqrestore(&state->port->lock, flags);
- 	return ret;
- }
-@@ -565,7 +564,7 @@
- 	 * This means you called this function _after_ the port was
- 	 * closed.  No cookie for you.
- 	 */
--	if (!state) {
-+	if (!state || !state->info) {
- 		WARN_ON(1);
- 		return;
- 	}
-@@ -574,7 +573,7 @@
- 	pr_debug("uart_flush_buffer(%d) called\n", tty->index);
- 
- 	spin_lock_irqsave(&port->lock, flags);
--	uart_circ_clear(&state->info.xmit);
-+	uart_circ_clear(&state->info->xmit);
- 	if (port->ops->flush_buffer)
- 		port->ops->flush_buffer(port);
- 	spin_unlock_irqrestore(&port->lock, flags);
-@@ -838,15 +837,15 @@
- 	state->closing_wait    = closing_wait;
- 	if (new_serial.xmit_fifo_size)
- 		port->fifosize = new_serial.xmit_fifo_size;
--	if (state->info.port.tty)
--		state->info.port.tty->low_latency =
-+	if (state->info->port.tty)
-+		state->info->port.tty->low_latency =
- 			(port->flags & UPF_LOW_LATENCY) ? 1 : 0;
- 
-  check_and_exit:
- 	retval = 0;
- 	if (port->type == PORT_UNKNOWN)
- 		goto exit;
--	if (state->info.flags & UIF_INITIALIZED) {
-+	if (state->info->flags & UIF_INITIALIZED) {
- 		if (((old_flags ^ port->flags) & UPF_SPD_MASK) ||
- 		    old_custom_divisor != port->custom_divisor) {
- 			/*
-@@ -859,7 +858,7 @@
- 				printk(KERN_NOTICE
- 				       "%s sets custom speed on %s. This "
- 				       "is deprecated.\n", current->comm,
--				       tty_name(state->info.port.tty, buf));
-+				       tty_name(state->info->port.tty, buf));
- 			}
- 			uart_change_speed(state, NULL);
- 		}
-@@ -890,8 +889,8 @@
- 	 * interrupt happens).
- 	 */
- 	if (port->x_char ||
--	    ((uart_circ_chars_pending(&state->info.xmit) > 0) &&
--	     !state->info.port.tty->stopped && !state->info.port.tty->hw_stopped))
-+	    ((uart_circ_chars_pending(&state->info->xmit) > 0) &&
-+	     !state->info->port.tty->stopped && !state->info->port.tty->hw_stopped))
- 		result &= ~TIOCSER_TEMT;
- 
- 	return put_user(result, value);
-@@ -1018,7 +1017,7 @@
- 	port->ops->enable_ms(port);
- 	spin_unlock_irq(&port->lock);
- 
--	add_wait_queue(&state->info.delta_msr_wait, &wait);
-+	add_wait_queue(&state->info->delta_msr_wait, &wait);
- 	for (;;) {
- 		spin_lock_irq(&port->lock);
- 		memcpy(&cnow, &port->icount, sizeof(struct uart_icount));
-@@ -1046,7 +1045,7 @@
- 	}
- 
- 	current->state = TASK_RUNNING;
--	remove_wait_queue(&state->info.delta_msr_wait, &wait);
-+	remove_wait_queue(&state->info->delta_msr_wait, &wait);
- 
- 	return ret;
- }
-@@ -1242,7 +1241,7 @@
- 	 */
- 	if (!(old_termios->c_cflag & CLOCAL) &&
- 	    (tty->termios->c_cflag & CLOCAL))
--		wake_up_interruptible(&info->port.open_wait);
-+		wake_up_interruptible(&state->info->port.open_wait);
- #endif
- }
- 
-@@ -1304,7 +1303,7 @@
- 	 * At this point, we stop accepting input.  To do this, we
- 	 * disable the receive line status interrupts.
- 	 */
--	if (state->info.flags & UIF_INITIALIZED) {
-+	if (state->info->flags & UIF_INITIALIZED) {
- 		unsigned long flags;
- 		spin_lock_irqsave(&port->lock, flags);
- 		port->ops->stop_rx(port);
-@@ -1323,9 +1322,9 @@
- 	tty_ldisc_flush(tty);
- 
- 	tty->closing = 0;
--	state->info.port.tty = NULL;
-+	state->info->port.tty = NULL;
- 
--	if (state->info.port.blocked_open) {
-+	if (state->info->port.blocked_open) {
- 		if (state->close_delay)
- 			msleep_interruptible(state->close_delay);
- 	} else if (!uart_console(port)) {
-@@ -1335,8 +1334,8 @@
- 	/*
- 	 * Wake up anyone trying to open this port.
- 	 */
--	state->info.flags &= ~UIF_NORMAL_ACTIVE;
--	wake_up_interruptible(&state->info.port.open_wait);
-+	state->info->flags &= ~UIF_NORMAL_ACTIVE;
-+	wake_up_interruptible(&state->info->port.open_wait);
- 
-  done:
- 	mutex_unlock(&state->mutex);
-@@ -1410,20 +1409,19 @@
- static void uart_hangup(struct tty_struct *tty)
- {
- 	struct uart_state *state = tty->driver_data;
--	struct uart_info *info = &state->info;
- 
- 	BUG_ON(!kernel_locked());
- 	pr_debug("uart_hangup(%d)\n", state->port->line);
- 
- 	mutex_lock(&state->mutex);
--	if (info->flags & UIF_NORMAL_ACTIVE) {
-+	if (state->info && state->info->flags & UIF_NORMAL_ACTIVE) {
- 		uart_flush_buffer(tty);
- 		uart_shutdown(state);
- 		state->count = 0;
--		info->flags &= ~UIF_NORMAL_ACTIVE;
--		info->port.tty = NULL;
--		wake_up_interruptible(&info->port.open_wait);
--		wake_up_interruptible(&info->delta_msr_wait);
-+		state->info->flags &= ~UIF_NORMAL_ACTIVE;
-+		state->info->port.tty = NULL;
-+		wake_up_interruptible(&state->info->port.open_wait);
-+		wake_up_interruptible(&state->info->delta_msr_wait);
- 	}
- 	mutex_unlock(&state->mutex);
- }
-@@ -1436,7 +1434,7 @@
-  */
- static void uart_update_termios(struct uart_state *state)
- {
--	struct tty_struct *tty = state->info.port.tty;
-+	struct tty_struct *tty = state->info->port.tty;
- 	struct uart_port *port = state->port;
- 
- 	if (uart_console(port) && port->cons->cflag) {
-@@ -1471,7 +1469,7 @@
- uart_block_til_ready(struct file *filp, struct uart_state *state)
- {
- 	DECLARE_WAITQUEUE(wait, current);
--	struct uart_info *info = &state->info;
-+	struct uart_info *info = state->info;
- 	struct uart_port *port = state->port;
- 	unsigned int mctrl;
- 
-@@ -1565,6 +1563,28 @@
- 		ret = -ENXIO;
- 		goto err_unlock;
- 	}
-+
-+	/* BKL: RACE HERE - LEAK */
-+	/* We should move this into the uart_state structure and kill off
-+	   this whole complexity */
-+	if (!state->info) {
-+		state->info = kzalloc(sizeof(struct uart_info), GFP_KERNEL);
-+		if (state->info) {
-+			init_waitqueue_head(&state->info->port.open_wait);
-+			init_waitqueue_head(&state->info->delta_msr_wait);
-+
-+			/*
-+			 * Link the info into the other structures.
-+			 */
-+			state->port->info = state->info;
-+
-+			tasklet_init(&state->info->tlet, uart_tasklet_action,
-+				     (unsigned long)state);
-+		} else {
-+			ret = -ENOMEM;
-+			goto err_unlock;
-+		}
-+	}
- 	return state;
- 
-  err_unlock:
-@@ -1621,10 +1641,9 @@
- 	 * Any failures from here onwards should not touch the count.
- 	 */
- 	tty->driver_data = state;
--	state->port->info = &state->info;
- 	tty->low_latency = (state->port->flags & UPF_LOW_LATENCY) ? 1 : 0;
- 	tty->alt_speed = 0;
--	state->info.port.tty = tty;
-+	state->info->port.tty = tty;
- 
- 	/*
- 	 * If the port is in the middle of closing, bail out now.
-@@ -1657,8 +1676,8 @@
- 	/*
- 	 * If this is the first open to succeed, adjust things to suit.
- 	 */
--	if (retval == 0 && !(state->info.flags & UIF_NORMAL_ACTIVE)) {
--		state->info.flags |= UIF_NORMAL_ACTIVE;
-+	if (retval == 0 && !(state->info->flags & UIF_NORMAL_ACTIVE)) {
-+		state->info->flags |= UIF_NORMAL_ACTIVE;
- 
- 		uart_update_termios(state);
- 	}
-@@ -2009,11 +2028,11 @@
- 	}
- 	port->suspended = 1;
- 
--	if (state->info.flags & UIF_INITIALIZED) {
-+	if (state->info && state->info->flags & UIF_INITIALIZED) {
- 		const struct uart_ops *ops = port->ops;
- 		int tries;
- 
--		state->info.flags = (state->info.flags & ~UIF_INITIALIZED)
-+		state->info->flags = (state->info->flags & ~UIF_INITIALIZED)
- 				     | UIF_SUSPENDED;
- 
- 		spin_lock_irq(&port->lock);
-@@ -2088,15 +2107,15 @@
- 		/*
- 		 * If that's unset, use the tty termios setting.
- 		 */
--		if (state->info.port.tty && termios.c_cflag == 0)
--			termios = *state->info.port.tty->termios;
-+		if (state->info && state->info->port.tty && termios.c_cflag == 0)
-+			termios = *state->info->port.tty->termios;
- 
- 		uart_change_pm(state, 0);
- 		port->ops->set_termios(port, &termios, NULL);
- 		console_start(port->cons);
- 	}
- 
--	if (state->info.flags & UIF_SUSPENDED) {
-+	if (state->info && state->info->flags & UIF_SUSPENDED) {
- 		const struct uart_ops *ops = port->ops;
- 		int ret;
- 
-@@ -2111,7 +2130,7 @@
- 			ops->set_mctrl(port, port->mctrl);
- 			ops->start_tx(port);
- 			spin_unlock_irq(&port->lock);
--			state->info.flags |= UIF_INITIALIZED;
-+			state->info->flags |= UIF_INITIALIZED;
- 		} else {
- 			/*
- 			 * Failed to resume - maybe hardware went away?
-@@ -2121,7 +2140,7 @@
- 			uart_shutdown(state);
- 		}
- 
--		state->info.flags &= ~UIF_SUSPENDED;
-+		state->info->flags &= ~UIF_SUSPENDED;
- 	}
- 
- 	mutex_unlock(&state->mutex);
-@@ -2364,12 +2383,8 @@
- 
- 		state->close_delay     = 500;	/* .5 seconds */
- 		state->closing_wait    = 30000;	/* 30 seconds */
--		mutex_init(&state->mutex);
- 
--		tty_port_init(&state->info.port);
--		init_waitqueue_head(&state->info.delta_msr_wait);
--		tasklet_init(&state->info.tlet, uart_tasklet_action,
--			     (unsigned long)state);
-+		mutex_init(&state->mutex);
- 	}
- 
- 	retval = tty_register_driver(normal);
-@@ -2440,7 +2455,7 @@
- 	state->pm_state = -1;
- 
- 	port->cons = drv->cons;
--	port->info = &state->info;
-+	port->info = state->info;
- 
- 	/*
- 	 * If this port is a console, then the spinlock is already
-@@ -2512,11 +2527,18 @@
- 	 */
- 	tty_unregister_device(drv->tty_driver, port->line);
- 
--	info = &state->info;
-+	info = state->info;
- 	if (info && info->port.tty)
- 		tty_vhangup(info->port.tty);
- 
- 	/*
-+	 * All users of this port should now be disconnected from
-+	 * this driver, and the port shut down.  We should be the
-+	 * only thread fiddling with this port from now on.
-+	 */
-+	state->info = NULL;
-+
-+	/*
- 	 * Free the port IO and memory resources, if any.
- 	 */
- 	if (port->type != PORT_UNKNOWN)
-diff -ru linux/include/linux/serial_core.h linux2/include/linux/serial_core.h
---- linux/include/linux/serial_core.h	2009-01-02 12:19:42.000000000 -0600
-+++ linux2/include/linux/serial_core.h	2009-10-21 18:03:31.000000000 -0500
-@@ -316,13 +316,35 @@
- };
- 
- /*
-+ * This is the state information which is persistent across opens.
-+ * The low level driver must not to touch any elements contained
-+ * within.
-+ */
-+struct uart_state {
-+	unsigned int		close_delay;		/* msec */
-+	unsigned int		closing_wait;		/* msec */
-+
-+#define USF_CLOSING_WAIT_INF	(0)
-+#define USF_CLOSING_WAIT_NONE	(~0U)
-+
-+	int			count;
-+	int			pm_state;
-+	struct uart_info	*info;
-+	struct uart_port	*port;
-+
-+	struct mutex		mutex;
-+};
-+
-+#define UART_XMIT_SIZE	PAGE_SIZE
-+
-+typedef unsigned int __bitwise__ uif_t;
-+
-+/*
-  * This is the state information which is only valid when the port
-- * is open; it may be cleared the core driver once the device has
-+ * is open; it may be freed by the core driver once the device has
-  * been closed.  Either the low level driver or the core can modify
-  * stuff here.
-  */
--typedef unsigned int __bitwise__ uif_t;
--
- struct uart_info {
- 	struct tty_port		port;
- 	struct circ_buf		xmit;
-@@ -344,29 +366,6 @@
- 	wait_queue_head_t	delta_msr_wait;
- };
- 
--/*
-- * This is the state information which is persistent across opens.
-- * The low level driver must not to touch any elements contained
-- * within.
-- */
--struct uart_state {
--	unsigned int		close_delay;		/* msec */
--	unsigned int		closing_wait;		/* msec */
--
--#define USF_CLOSING_WAIT_INF	(0)
--#define USF_CLOSING_WAIT_NONE	(~0U)
--
--	int			count;
--	int			pm_state;
--	struct uart_info	info;
--	struct uart_port	*port;
--
--	struct mutex		mutex;
--};
--
--#define UART_XMIT_SIZE	PAGE_SIZE
--
--
- /* number of characters left in xmit buffer before we ask for more */
- #define WAKEUP_CHARS		256
- 
-@@ -440,13 +439,8 @@
- #define uart_circ_chars_free(circ)	\
- 	(CIRC_SPACE((circ)->head, (circ)->tail, UART_XMIT_SIZE))
- 
--static inline int uart_tx_stopped(struct uart_port *port)
--{
--	struct tty_struct *tty = port->info->port.tty;
--	if(tty->stopped || tty->hw_stopped)
--		return 1;
--	return 0;
--}
-+#define uart_tx_stopped(portp)		\
-+	((portp)->info->port.tty->stopped || (portp)->info->port.tty->hw_stopped)
- 
- /*
-  * The following are helper functions for the low level drivers.
-@@ -457,7 +451,7 @@
- #ifdef SUPPORT_SYSRQ
- 	if (port->sysrq) {
- 		if (ch && time_before(jiffies, port->sysrq)) {
--			handle_sysrq(ch, port->info->port.tty);
-+			handle_sysrq(ch, port->info ? port->info->port.tty : NULL);
- 			port->sysrq = 0;
- 			return 1;
- 		}
--- a/sources/patches/squashfs-tools-4.0-uclibc-get_nprocs.patch	Tue Dec 08 05:37:27 2009 -0600
+++ b/sources/patches/squashfs-tools-4.0-uclibc-get_nprocs.patch	Tue Dec 08 08:36:10 2009 -0600
@@ -1,3 +1,5 @@
+uclibc does not have get_nprocs() so build of squashfs host tool fails
+
 --- a/squashfs-tools/mksquashfs.c	Wed Dec  2 10:30:31 2009
 +++ b/squashfs-tools/mksquashfs.c	Wed Dec  2 10:31:34 2009
 @@ -3705,7 +3705,7 @@
--- a/sources/patches/uClibc-fixm68k.patch	Tue Dec 08 05:37:27 2009 -0600
+++ b/sources/patches/uClibc-fixm68k.patch	Tue Dec 08 08:36:10 2009 -0600
@@ -1,12 +1,14 @@
 --- uClibc/Rules.mak	2008-09-28 02:10:20.000000000 -0500
 +++ alt-uClibc/Rules.mak	2008-09-30 16:56:19.000000000 -0500
-@@ -144,7 +144,9 @@
+@@ -144,7 +144,11 @@
  # Flags in OPTIMIZATION are used only for non-debug builds
  OPTIMIZATION:=
  # Use '-Os' optimization if available, else use -O2, allow Config to override
++ifneq ($(TARGET_ARCH),alpha)
 +ifneq ($(TARGET_ARCH),m68k)
  OPTIMIZATION+=$(call check_gcc,-Os,-O2)
 +endif
++endif
  # Use the gcc 3.4 -funit-at-a-time optimization when available
  OPTIMIZATION+=$(call check_gcc,-funit-at-a-time,)