m68k patches
svn path=/dists/sid/linux-2.6/; revision=13466
This commit is contained in:
parent
ada24e7925
commit
76b07b585b
|
@ -0,0 +1,88 @@
|
|||
From 612bfc9e630e3f7a4f3be1325eac28de8b8970af Mon Sep 17 00:00:00 2001
|
||||
From: Laurent Vivier <Laurent@lvivier.info>
|
||||
Date: Thu, 30 Oct 2008 21:17:47 +0100
|
||||
Subject: [PATCH 01/90] m68k: Add install target
|
||||
|
||||
This patch enables the use of "make install" on m68k architecture
|
||||
to copy kernel to /boot.
|
||||
|
||||
Signed-off-by: Laurent Vivier <Laurent@lvivier.info>
|
||||
Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
|
||||
---
|
||||
arch/m68k/Makefile | 3 ++
|
||||
arch/m68k/install.sh | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
2 files changed, 55 insertions(+), 0 deletions(-)
|
||||
create mode 100644 arch/m68k/install.sh
|
||||
|
||||
diff --git a/arch/m68k/Makefile b/arch/m68k/Makefile
|
||||
index 8133dbc..570d85c 100644
|
||||
--- a/arch/m68k/Makefile
|
||||
+++ b/arch/m68k/Makefile
|
||||
@@ -117,3 +117,6 @@ endif
|
||||
|
||||
archclean:
|
||||
rm -f vmlinux.gz vmlinux.bz2
|
||||
+
|
||||
+install:
|
||||
+ sh $(srctree)/arch/m68k/install.sh $(KERNELRELEASE) vmlinux.gz System.map "$(INSTALL_PATH)"
|
||||
diff --git a/arch/m68k/install.sh b/arch/m68k/install.sh
|
||||
new file mode 100644
|
||||
index 0000000..9c6bae6
|
||||
--- /dev/null
|
||||
+++ b/arch/m68k/install.sh
|
||||
@@ -0,0 +1,52 @@
|
||||
+#!/bin/sh
|
||||
+#
|
||||
+# This file is subject to the terms and conditions of the GNU General Public
|
||||
+# License. See the file "COPYING" in the main directory of this archive
|
||||
+# for more details.
|
||||
+#
|
||||
+# Copyright (C) 1995 by Linus Torvalds
|
||||
+#
|
||||
+# Adapted from code in arch/i386/boot/Makefile by H. Peter Anvin
|
||||
+#
|
||||
+# "make install" script for m68k architecture
|
||||
+#
|
||||
+# Arguments:
|
||||
+# $1 - kernel version
|
||||
+# $2 - kernel image file
|
||||
+# $3 - kernel map file
|
||||
+# $4 - default install path (blank if root directory)
|
||||
+#
|
||||
+
|
||||
+verify () {
|
||||
+ if [ ! -f "$1" ]; then
|
||||
+ echo "" 1>&2
|
||||
+ echo " *** Missing file: $1" 1>&2
|
||||
+ echo ' *** You need to run "make" before "make install".' 1>&2
|
||||
+ echo "" 1>&2
|
||||
+ exit 1
|
||||
+ fi
|
||||
+}
|
||||
+
|
||||
+# Make sure the files actually exist
|
||||
+verify "$2"
|
||||
+verify "$3"
|
||||
+
|
||||
+# User may have a custom install script
|
||||
+
|
||||
+if [ -x ~/bin/${CROSS_COMPILE}installkernel ]; then exec ~/bin/${CROSS_COMPILE}installkernel "$@"; fi
|
||||
+if [ -x /sbin/${CROSS_COMPILE}installkernel ]; then exec /sbin/${CROSS_COMPILE}installkernel "$@"; fi
|
||||
+
|
||||
+# Default install - same as make zlilo
|
||||
+
|
||||
+if [ -f $4/vmlinuz ]; then
|
||||
+ mv $4/vmlinuz $4/vmlinuz.old
|
||||
+fi
|
||||
+
|
||||
+if [ -f $4/System.map ]; then
|
||||
+ mv $4/System.map $4/System.old
|
||||
+fi
|
||||
+
|
||||
+cat $2 > $4/vmlinuz
|
||||
+cp $3 $4/System.map
|
||||
+
|
||||
+sync
|
||||
--
|
||||
1.6.2.3
|
||||
|
593
debian/patches/bugfix/m68k/2.6.29/0002-m68k-mac-Add-a-new-entry-in-mac_model-to-identify.patch
vendored
Normal file
593
debian/patches/bugfix/m68k/2.6.29/0002-m68k-mac-Add-a-new-entry-in-mac_model-to-identify.patch
vendored
Normal file
|
@ -0,0 +1,593 @@
|
|||
From 7ad93b42bd135641ddc2c298f030132aca7aeca3 Mon Sep 17 00:00:00 2001
|
||||
From: Laurent Vivier <Laurent@lvivier.info>
|
||||
Date: Thu, 6 Nov 2008 20:57:41 +0100
|
||||
Subject: [PATCH 02/90] m68k: mac - Add a new entry in mac_model to identify the floppy controller type.
|
||||
|
||||
This patch adds a field "floppy_type" which can take the following values:
|
||||
|
||||
MAC_FLOPPY_IWM for an IWM based mac
|
||||
MAC_FLOPPY_SWIM_ADDR1 for a SWIM based mac with controller at VIA1 + 0x1E000
|
||||
MAC_FLOPPY_SWIM_ADDR2 for a SWIM based mac with controller at VIA1 + 0x16000
|
||||
MAC_FLOPPY_IOP for an IOP based mac
|
||||
MAC_FLOPPY_AV for an AV based mac
|
||||
|
||||
Signed-off-by: Laurent Vivier <Laurent@lvivier.info>
|
||||
Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
|
||||
---
|
||||
arch/m68k/include/asm/macintosh.h | 7 ++
|
||||
arch/m68k/mac/config.c | 163 +++++++++++++++++++++++++------------
|
||||
2 files changed, 116 insertions(+), 54 deletions(-)
|
||||
|
||||
diff --git a/arch/m68k/include/asm/macintosh.h b/arch/m68k/include/asm/macintosh.h
|
||||
index 05309f7..50db359 100644
|
||||
--- a/arch/m68k/include/asm/macintosh.h
|
||||
+++ b/arch/m68k/include/asm/macintosh.h
|
||||
@@ -34,6 +34,7 @@ struct mac_model
|
||||
char scc_type;
|
||||
char ether_type;
|
||||
char nubus_type;
|
||||
+ char floppy_type;
|
||||
};
|
||||
|
||||
#define MAC_ADB_NONE 0
|
||||
@@ -71,6 +72,12 @@ struct mac_model
|
||||
#define MAC_NO_NUBUS 0
|
||||
#define MAC_NUBUS 1
|
||||
|
||||
+#define MAC_FLOPPY_IWM 0
|
||||
+#define MAC_FLOPPY_SWIM_ADDR1 1
|
||||
+#define MAC_FLOPPY_SWIM_ADDR2 2
|
||||
+#define MAC_FLOPPY_SWIM_IOP 3
|
||||
+#define MAC_FLOPPY_AV 4
|
||||
+
|
||||
/*
|
||||
* Gestalt numbers
|
||||
*/
|
||||
diff --git a/arch/m68k/mac/config.c b/arch/m68k/mac/config.c
|
||||
index 98b6bcf..3a1c0b2 100644
|
||||
--- a/arch/m68k/mac/config.c
|
||||
+++ b/arch/m68k/mac/config.c
|
||||
@@ -224,7 +224,8 @@ static struct mac_model mac_data_table[] = {
|
||||
.via_type = MAC_VIA_II,
|
||||
.scsi_type = MAC_SCSI_OLD,
|
||||
.scc_type = MAC_SCC_II,
|
||||
- .nubus_type = MAC_NUBUS
|
||||
+ .nubus_type = MAC_NUBUS,
|
||||
+ .floppy_type = MAC_FLOPPY_IWM
|
||||
},
|
||||
|
||||
/*
|
||||
@@ -239,7 +240,8 @@ static struct mac_model mac_data_table[] = {
|
||||
.via_type = MAC_VIA_II,
|
||||
.scsi_type = MAC_SCSI_OLD,
|
||||
.scc_type = MAC_SCC_II,
|
||||
- .nubus_type = MAC_NUBUS
|
||||
+ .nubus_type = MAC_NUBUS,
|
||||
+ .floppy_type = MAC_FLOPPY_IWM
|
||||
}, {
|
||||
.ident = MAC_MODEL_IIX,
|
||||
.name = "IIx",
|
||||
@@ -247,7 +249,8 @@ static struct mac_model mac_data_table[] = {
|
||||
.via_type = MAC_VIA_II,
|
||||
.scsi_type = MAC_SCSI_OLD,
|
||||
.scc_type = MAC_SCC_II,
|
||||
- .nubus_type = MAC_NUBUS
|
||||
+ .nubus_type = MAC_NUBUS,
|
||||
+ .floppy_type = MAC_FLOPPY_SWIM_ADDR2
|
||||
}, {
|
||||
.ident = MAC_MODEL_IICX,
|
||||
.name = "IIcx",
|
||||
@@ -255,7 +258,8 @@ static struct mac_model mac_data_table[] = {
|
||||
.via_type = MAC_VIA_II,
|
||||
.scsi_type = MAC_SCSI_OLD,
|
||||
.scc_type = MAC_SCC_II,
|
||||
- .nubus_type = MAC_NUBUS
|
||||
+ .nubus_type = MAC_NUBUS,
|
||||
+ .floppy_type = MAC_FLOPPY_SWIM_ADDR2
|
||||
}, {
|
||||
.ident = MAC_MODEL_SE30,
|
||||
.name = "SE/30",
|
||||
@@ -263,7 +267,8 @@ static struct mac_model mac_data_table[] = {
|
||||
.via_type = MAC_VIA_II,
|
||||
.scsi_type = MAC_SCSI_OLD,
|
||||
.scc_type = MAC_SCC_II,
|
||||
- .nubus_type = MAC_NUBUS
|
||||
+ .nubus_type = MAC_NUBUS,
|
||||
+ .floppy_type = MAC_FLOPPY_SWIM_ADDR2
|
||||
},
|
||||
|
||||
/*
|
||||
@@ -280,7 +285,8 @@ static struct mac_model mac_data_table[] = {
|
||||
.via_type = MAC_VIA_IIci,
|
||||
.scsi_type = MAC_SCSI_OLD,
|
||||
.scc_type = MAC_SCC_II,
|
||||
- .nubus_type = MAC_NUBUS
|
||||
+ .nubus_type = MAC_NUBUS,
|
||||
+ .floppy_type = MAC_FLOPPY_SWIM_ADDR2
|
||||
}, {
|
||||
.ident = MAC_MODEL_IIFX,
|
||||
.name = "IIfx",
|
||||
@@ -288,7 +294,8 @@ static struct mac_model mac_data_table[] = {
|
||||
.via_type = MAC_VIA_IIci,
|
||||
.scsi_type = MAC_SCSI_OLD,
|
||||
.scc_type = MAC_SCC_IOP,
|
||||
- .nubus_type = MAC_NUBUS
|
||||
+ .nubus_type = MAC_NUBUS,
|
||||
+ .floppy_type = MAC_FLOPPY_SWIM_IOP
|
||||
}, {
|
||||
.ident = MAC_MODEL_IISI,
|
||||
.name = "IIsi",
|
||||
@@ -296,7 +303,8 @@ static struct mac_model mac_data_table[] = {
|
||||
.via_type = MAC_VIA_IIci,
|
||||
.scsi_type = MAC_SCSI_OLD,
|
||||
.scc_type = MAC_SCC_II,
|
||||
- .nubus_type = MAC_NUBUS
|
||||
+ .nubus_type = MAC_NUBUS,
|
||||
+ .floppy_type = MAC_FLOPPY_SWIM_ADDR2
|
||||
}, {
|
||||
.ident = MAC_MODEL_IIVI,
|
||||
.name = "IIvi",
|
||||
@@ -304,7 +312,8 @@ static struct mac_model mac_data_table[] = {
|
||||
.via_type = MAC_VIA_IIci,
|
||||
.scsi_type = MAC_SCSI_OLD,
|
||||
.scc_type = MAC_SCC_II,
|
||||
- .nubus_type = MAC_NUBUS
|
||||
+ .nubus_type = MAC_NUBUS,
|
||||
+ .floppy_type = MAC_FLOPPY_SWIM_ADDR2
|
||||
}, {
|
||||
.ident = MAC_MODEL_IIVX,
|
||||
.name = "IIvx",
|
||||
@@ -312,7 +321,8 @@ static struct mac_model mac_data_table[] = {
|
||||
.via_type = MAC_VIA_IIci,
|
||||
.scsi_type = MAC_SCSI_OLD,
|
||||
.scc_type = MAC_SCC_II,
|
||||
- .nubus_type = MAC_NUBUS
|
||||
+ .nubus_type = MAC_NUBUS,
|
||||
+ .floppy_type = MAC_FLOPPY_SWIM_ADDR2
|
||||
},
|
||||
|
||||
/*
|
||||
@@ -326,7 +336,8 @@ static struct mac_model mac_data_table[] = {
|
||||
.via_type = MAC_VIA_IIci,
|
||||
.scsi_type = MAC_SCSI_OLD,
|
||||
.scc_type = MAC_SCC_II,
|
||||
- .nubus_type = MAC_NUBUS
|
||||
+ .nubus_type = MAC_NUBUS,
|
||||
+ .floppy_type = MAC_FLOPPY_SWIM_ADDR2
|
||||
}, {
|
||||
.ident = MAC_MODEL_CCL,
|
||||
.name = "Color Classic",
|
||||
@@ -334,7 +345,9 @@ static struct mac_model mac_data_table[] = {
|
||||
.via_type = MAC_VIA_IIci,
|
||||
.scsi_type = MAC_SCSI_OLD,
|
||||
.scc_type = MAC_SCC_II,
|
||||
- .nubus_type = MAC_NUBUS},
|
||||
+ .nubus_type = MAC_NUBUS,
|
||||
+ .floppy_type = MAC_FLOPPY_SWIM_ADDR2
|
||||
+ },
|
||||
|
||||
/*
|
||||
* Some Mac LC machines. Basically the same as the IIci, ADB like IIsi
|
||||
@@ -347,7 +360,8 @@ static struct mac_model mac_data_table[] = {
|
||||
.via_type = MAC_VIA_IIci,
|
||||
.scsi_type = MAC_SCSI_OLD,
|
||||
.scc_type = MAC_SCC_II,
|
||||
- .nubus_type = MAC_NUBUS
|
||||
+ .nubus_type = MAC_NUBUS,
|
||||
+ .floppy_type = MAC_FLOPPY_SWIM_ADDR2
|
||||
}, {
|
||||
.ident = MAC_MODEL_LCII,
|
||||
.name = "LC II",
|
||||
@@ -355,7 +369,8 @@ static struct mac_model mac_data_table[] = {
|
||||
.via_type = MAC_VIA_IIci,
|
||||
.scsi_type = MAC_SCSI_OLD,
|
||||
.scc_type = MAC_SCC_II,
|
||||
- .nubus_type = MAC_NUBUS
|
||||
+ .nubus_type = MAC_NUBUS,
|
||||
+ .floppy_type = MAC_FLOPPY_SWIM_ADDR2
|
||||
}, {
|
||||
.ident = MAC_MODEL_LCIII,
|
||||
.name = "LC III",
|
||||
@@ -363,7 +378,8 @@ static struct mac_model mac_data_table[] = {
|
||||
.via_type = MAC_VIA_IIci,
|
||||
.scsi_type = MAC_SCSI_OLD,
|
||||
.scc_type = MAC_SCC_II,
|
||||
- .nubus_type = MAC_NUBUS
|
||||
+ .nubus_type = MAC_NUBUS,
|
||||
+ .floppy_type = MAC_FLOPPY_SWIM_ADDR2
|
||||
},
|
||||
|
||||
/*
|
||||
@@ -383,7 +399,8 @@ static struct mac_model mac_data_table[] = {
|
||||
.via_type = MAC_VIA_QUADRA,
|
||||
.scsi_type = MAC_SCSI_QUADRA,
|
||||
.scc_type = MAC_SCC_QUADRA,
|
||||
- .nubus_type = MAC_NUBUS
|
||||
+ .nubus_type = MAC_NUBUS,
|
||||
+ .floppy_type = MAC_FLOPPY_SWIM_ADDR1
|
||||
}, {
|
||||
.ident = MAC_MODEL_Q605_ACC,
|
||||
.name = "Quadra 605",
|
||||
@@ -391,7 +408,8 @@ static struct mac_model mac_data_table[] = {
|
||||
.via_type = MAC_VIA_QUADRA,
|
||||
.scsi_type = MAC_SCSI_QUADRA,
|
||||
.scc_type = MAC_SCC_QUADRA,
|
||||
- .nubus_type = MAC_NUBUS
|
||||
+ .nubus_type = MAC_NUBUS,
|
||||
+ .floppy_type = MAC_FLOPPY_SWIM_ADDR1
|
||||
}, {
|
||||
.ident = MAC_MODEL_Q610,
|
||||
.name = "Quadra 610",
|
||||
@@ -400,7 +418,8 @@ static struct mac_model mac_data_table[] = {
|
||||
.scsi_type = MAC_SCSI_QUADRA,
|
||||
.scc_type = MAC_SCC_QUADRA,
|
||||
.ether_type = MAC_ETHER_SONIC,
|
||||
- .nubus_type = MAC_NUBUS
|
||||
+ .nubus_type = MAC_NUBUS,
|
||||
+ .floppy_type = MAC_FLOPPY_SWIM_ADDR1
|
||||
}, {
|
||||
.ident = MAC_MODEL_Q630,
|
||||
.name = "Quadra 630",
|
||||
@@ -410,7 +429,8 @@ static struct mac_model mac_data_table[] = {
|
||||
.ide_type = MAC_IDE_QUADRA,
|
||||
.scc_type = MAC_SCC_QUADRA,
|
||||
.ether_type = MAC_ETHER_SONIC,
|
||||
- .nubus_type = MAC_NUBUS
|
||||
+ .nubus_type = MAC_NUBUS,
|
||||
+ .floppy_type = MAC_FLOPPY_SWIM_ADDR1
|
||||
}, {
|
||||
.ident = MAC_MODEL_Q650,
|
||||
.name = "Quadra 650",
|
||||
@@ -419,7 +439,8 @@ static struct mac_model mac_data_table[] = {
|
||||
.scsi_type = MAC_SCSI_QUADRA,
|
||||
.scc_type = MAC_SCC_QUADRA,
|
||||
.ether_type = MAC_ETHER_SONIC,
|
||||
- .nubus_type = MAC_NUBUS
|
||||
+ .nubus_type = MAC_NUBUS,
|
||||
+ .floppy_type = MAC_FLOPPY_SWIM_ADDR1
|
||||
},
|
||||
/* The Q700 does have a NS Sonic */
|
||||
{
|
||||
@@ -430,7 +451,8 @@ static struct mac_model mac_data_table[] = {
|
||||
.scsi_type = MAC_SCSI_QUADRA2,
|
||||
.scc_type = MAC_SCC_QUADRA,
|
||||
.ether_type = MAC_ETHER_SONIC,
|
||||
- .nubus_type = MAC_NUBUS
|
||||
+ .nubus_type = MAC_NUBUS,
|
||||
+ .floppy_type = MAC_FLOPPY_SWIM_ADDR1
|
||||
}, {
|
||||
.ident = MAC_MODEL_Q800,
|
||||
.name = "Quadra 800",
|
||||
@@ -439,7 +461,8 @@ static struct mac_model mac_data_table[] = {
|
||||
.scsi_type = MAC_SCSI_QUADRA,
|
||||
.scc_type = MAC_SCC_QUADRA,
|
||||
.ether_type = MAC_ETHER_SONIC,
|
||||
- .nubus_type = MAC_NUBUS
|
||||
+ .nubus_type = MAC_NUBUS,
|
||||
+ .floppy_type = MAC_FLOPPY_SWIM_ADDR1
|
||||
}, {
|
||||
.ident = MAC_MODEL_Q840,
|
||||
.name = "Quadra 840AV",
|
||||
@@ -448,7 +471,8 @@ static struct mac_model mac_data_table[] = {
|
||||
.scsi_type = MAC_SCSI_QUADRA3,
|
||||
.scc_type = MAC_SCC_PSC,
|
||||
.ether_type = MAC_ETHER_MACE,
|
||||
- .nubus_type = MAC_NUBUS
|
||||
+ .nubus_type = MAC_NUBUS,
|
||||
+ .floppy_type = MAC_FLOPPY_AV
|
||||
}, {
|
||||
.ident = MAC_MODEL_Q900,
|
||||
.name = "Quadra 900",
|
||||
@@ -457,7 +481,8 @@ static struct mac_model mac_data_table[] = {
|
||||
.scsi_type = MAC_SCSI_QUADRA2,
|
||||
.scc_type = MAC_SCC_IOP,
|
||||
.ether_type = MAC_ETHER_SONIC,
|
||||
- .nubus_type = MAC_NUBUS
|
||||
+ .nubus_type = MAC_NUBUS,
|
||||
+ .floppy_type = MAC_FLOPPY_SWIM_IOP
|
||||
}, {
|
||||
.ident = MAC_MODEL_Q950,
|
||||
.name = "Quadra 950",
|
||||
@@ -466,7 +491,8 @@ static struct mac_model mac_data_table[] = {
|
||||
.scsi_type = MAC_SCSI_QUADRA2,
|
||||
.scc_type = MAC_SCC_IOP,
|
||||
.ether_type = MAC_ETHER_SONIC,
|
||||
- .nubus_type = MAC_NUBUS
|
||||
+ .nubus_type = MAC_NUBUS,
|
||||
+ .floppy_type = MAC_FLOPPY_SWIM_IOP
|
||||
},
|
||||
|
||||
/*
|
||||
@@ -480,7 +506,8 @@ static struct mac_model mac_data_table[] = {
|
||||
.via_type = MAC_VIA_IIci,
|
||||
.scsi_type = MAC_SCSI_OLD,
|
||||
.scc_type = MAC_SCC_II,
|
||||
- .nubus_type = MAC_NUBUS
|
||||
+ .nubus_type = MAC_NUBUS,
|
||||
+ .floppy_type = MAC_FLOPPY_SWIM_ADDR2
|
||||
}, {
|
||||
.ident = MAC_MODEL_P475,
|
||||
.name = "Performa 475",
|
||||
@@ -488,7 +515,8 @@ static struct mac_model mac_data_table[] = {
|
||||
.via_type = MAC_VIA_QUADRA,
|
||||
.scsi_type = MAC_SCSI_QUADRA,
|
||||
.scc_type = MAC_SCC_II,
|
||||
- .nubus_type = MAC_NUBUS
|
||||
+ .nubus_type = MAC_NUBUS,
|
||||
+ .floppy_type = MAC_FLOPPY_SWIM_ADDR1
|
||||
}, {
|
||||
.ident = MAC_MODEL_P475F,
|
||||
.name = "Performa 475",
|
||||
@@ -496,7 +524,8 @@ static struct mac_model mac_data_table[] = {
|
||||
.via_type = MAC_VIA_QUADRA,
|
||||
.scsi_type = MAC_SCSI_QUADRA,
|
||||
.scc_type = MAC_SCC_II,
|
||||
- .nubus_type = MAC_NUBUS
|
||||
+ .nubus_type = MAC_NUBUS,
|
||||
+ .floppy_type = MAC_FLOPPY_SWIM_ADDR1
|
||||
}, {
|
||||
.ident = MAC_MODEL_P520,
|
||||
.name = "Performa 520",
|
||||
@@ -504,7 +533,8 @@ static struct mac_model mac_data_table[] = {
|
||||
.via_type = MAC_VIA_IIci,
|
||||
.scsi_type = MAC_SCSI_OLD,
|
||||
.scc_type = MAC_SCC_II,
|
||||
- .nubus_type = MAC_NUBUS
|
||||
+ .nubus_type = MAC_NUBUS,
|
||||
+ .floppy_type = MAC_FLOPPY_SWIM_ADDR2
|
||||
}, {
|
||||
.ident = MAC_MODEL_P550,
|
||||
.name = "Performa 550",
|
||||
@@ -512,7 +542,8 @@ static struct mac_model mac_data_table[] = {
|
||||
.via_type = MAC_VIA_IIci,
|
||||
.scsi_type = MAC_SCSI_OLD,
|
||||
.scc_type = MAC_SCC_II,
|
||||
- .nubus_type = MAC_NUBUS
|
||||
+ .nubus_type = MAC_NUBUS,
|
||||
+ .floppy_type = MAC_FLOPPY_SWIM_ADDR2
|
||||
},
|
||||
/* These have the comm slot, and therefore the possibility of SONIC ethernet */
|
||||
{
|
||||
@@ -523,7 +554,8 @@ static struct mac_model mac_data_table[] = {
|
||||
.scsi_type = MAC_SCSI_QUADRA,
|
||||
.scc_type = MAC_SCC_II,
|
||||
.ether_type = MAC_ETHER_SONIC,
|
||||
- .nubus_type = MAC_NUBUS
|
||||
+ .nubus_type = MAC_NUBUS,
|
||||
+ .floppy_type = MAC_FLOPPY_SWIM_ADDR1
|
||||
}, {
|
||||
.ident = MAC_MODEL_P588,
|
||||
.name = "Performa 588",
|
||||
@@ -533,7 +565,8 @@ static struct mac_model mac_data_table[] = {
|
||||
.ide_type = MAC_IDE_QUADRA,
|
||||
.scc_type = MAC_SCC_II,
|
||||
.ether_type = MAC_ETHER_SONIC,
|
||||
- .nubus_type = MAC_NUBUS
|
||||
+ .nubus_type = MAC_NUBUS,
|
||||
+ .floppy_type = MAC_FLOPPY_SWIM_ADDR1
|
||||
}, {
|
||||
.ident = MAC_MODEL_TV,
|
||||
.name = "TV",
|
||||
@@ -541,7 +574,8 @@ static struct mac_model mac_data_table[] = {
|
||||
.via_type = MAC_VIA_QUADRA,
|
||||
.scsi_type = MAC_SCSI_OLD,
|
||||
.scc_type = MAC_SCC_II,
|
||||
- .nubus_type = MAC_NUBUS
|
||||
+ .nubus_type = MAC_NUBUS,
|
||||
+ .floppy_type = MAC_FLOPPY_SWIM_ADDR2
|
||||
}, {
|
||||
.ident = MAC_MODEL_P600,
|
||||
.name = "Performa 600",
|
||||
@@ -549,7 +583,8 @@ static struct mac_model mac_data_table[] = {
|
||||
.via_type = MAC_VIA_IIci,
|
||||
.scsi_type = MAC_SCSI_OLD,
|
||||
.scc_type = MAC_SCC_II,
|
||||
- .nubus_type = MAC_NUBUS
|
||||
+ .nubus_type = MAC_NUBUS,
|
||||
+ .floppy_type = MAC_FLOPPY_SWIM_ADDR2
|
||||
},
|
||||
|
||||
/*
|
||||
@@ -565,7 +600,8 @@ static struct mac_model mac_data_table[] = {
|
||||
.scsi_type = MAC_SCSI_QUADRA,
|
||||
.scc_type = MAC_SCC_QUADRA,
|
||||
.ether_type = MAC_ETHER_SONIC,
|
||||
- .nubus_type = MAC_NUBUS
|
||||
+ .nubus_type = MAC_NUBUS,
|
||||
+ .floppy_type = MAC_FLOPPY_SWIM_ADDR1
|
||||
}, {
|
||||
.ident = MAC_MODEL_C650,
|
||||
.name = "Centris 650",
|
||||
@@ -574,7 +610,8 @@ static struct mac_model mac_data_table[] = {
|
||||
.scsi_type = MAC_SCSI_QUADRA,
|
||||
.scc_type = MAC_SCC_QUADRA,
|
||||
.ether_type = MAC_ETHER_SONIC,
|
||||
- .nubus_type = MAC_NUBUS
|
||||
+ .nubus_type = MAC_NUBUS,
|
||||
+ .floppy_type = MAC_FLOPPY_SWIM_ADDR1
|
||||
}, {
|
||||
.ident = MAC_MODEL_C660,
|
||||
.name = "Centris 660AV",
|
||||
@@ -583,7 +620,8 @@ static struct mac_model mac_data_table[] = {
|
||||
.scsi_type = MAC_SCSI_QUADRA3,
|
||||
.scc_type = MAC_SCC_PSC,
|
||||
.ether_type = MAC_ETHER_MACE,
|
||||
- .nubus_type = MAC_NUBUS
|
||||
+ .nubus_type = MAC_NUBUS,
|
||||
+ .floppy_type = MAC_FLOPPY_AV
|
||||
},
|
||||
|
||||
/*
|
||||
@@ -599,7 +637,8 @@ static struct mac_model mac_data_table[] = {
|
||||
.via_type = MAC_VIA_QUADRA,
|
||||
.scsi_type = MAC_SCSI_OLD,
|
||||
.scc_type = MAC_SCC_QUADRA,
|
||||
- .nubus_type = MAC_NUBUS
|
||||
+ .nubus_type = MAC_NUBUS,
|
||||
+ .floppy_type = MAC_FLOPPY_SWIM_ADDR2
|
||||
}, {
|
||||
.ident = MAC_MODEL_PB145,
|
||||
.name = "PowerBook 145",
|
||||
@@ -607,7 +646,8 @@ static struct mac_model mac_data_table[] = {
|
||||
.via_type = MAC_VIA_QUADRA,
|
||||
.scsi_type = MAC_SCSI_OLD,
|
||||
.scc_type = MAC_SCC_QUADRA,
|
||||
- .nubus_type = MAC_NUBUS
|
||||
+ .nubus_type = MAC_NUBUS,
|
||||
+ .floppy_type = MAC_FLOPPY_SWIM_ADDR2
|
||||
}, {
|
||||
.ident = MAC_MODEL_PB150,
|
||||
.name = "PowerBook 150",
|
||||
@@ -616,7 +656,8 @@ static struct mac_model mac_data_table[] = {
|
||||
.scsi_type = MAC_SCSI_OLD,
|
||||
.ide_type = MAC_IDE_PB,
|
||||
.scc_type = MAC_SCC_QUADRA,
|
||||
- .nubus_type = MAC_NUBUS
|
||||
+ .nubus_type = MAC_NUBUS,
|
||||
+ .floppy_type = MAC_FLOPPY_SWIM_ADDR2
|
||||
}, {
|
||||
.ident = MAC_MODEL_PB160,
|
||||
.name = "PowerBook 160",
|
||||
@@ -624,7 +665,8 @@ static struct mac_model mac_data_table[] = {
|
||||
.via_type = MAC_VIA_QUADRA,
|
||||
.scsi_type = MAC_SCSI_OLD,
|
||||
.scc_type = MAC_SCC_QUADRA,
|
||||
- .nubus_type = MAC_NUBUS
|
||||
+ .nubus_type = MAC_NUBUS,
|
||||
+ .floppy_type = MAC_FLOPPY_SWIM_ADDR2
|
||||
}, {
|
||||
.ident = MAC_MODEL_PB165,
|
||||
.name = "PowerBook 165",
|
||||
@@ -632,7 +674,8 @@ static struct mac_model mac_data_table[] = {
|
||||
.via_type = MAC_VIA_QUADRA,
|
||||
.scsi_type = MAC_SCSI_OLD,
|
||||
.scc_type = MAC_SCC_QUADRA,
|
||||
- .nubus_type = MAC_NUBUS
|
||||
+ .nubus_type = MAC_NUBUS,
|
||||
+ .floppy_type = MAC_FLOPPY_SWIM_ADDR2
|
||||
}, {
|
||||
.ident = MAC_MODEL_PB165C,
|
||||
.name = "PowerBook 165c",
|
||||
@@ -640,7 +683,8 @@ static struct mac_model mac_data_table[] = {
|
||||
.via_type = MAC_VIA_QUADRA,
|
||||
.scsi_type = MAC_SCSI_OLD,
|
||||
.scc_type = MAC_SCC_QUADRA,
|
||||
- .nubus_type = MAC_NUBUS
|
||||
+ .nubus_type = MAC_NUBUS,
|
||||
+ .floppy_type = MAC_FLOPPY_SWIM_ADDR2
|
||||
}, {
|
||||
.ident = MAC_MODEL_PB170,
|
||||
.name = "PowerBook 170",
|
||||
@@ -648,7 +692,8 @@ static struct mac_model mac_data_table[] = {
|
||||
.via_type = MAC_VIA_QUADRA,
|
||||
.scsi_type = MAC_SCSI_OLD,
|
||||
.scc_type = MAC_SCC_QUADRA,
|
||||
- .nubus_type = MAC_NUBUS
|
||||
+ .nubus_type = MAC_NUBUS,
|
||||
+ .floppy_type = MAC_FLOPPY_SWIM_ADDR2
|
||||
}, {
|
||||
.ident = MAC_MODEL_PB180,
|
||||
.name = "PowerBook 180",
|
||||
@@ -656,7 +701,8 @@ static struct mac_model mac_data_table[] = {
|
||||
.via_type = MAC_VIA_QUADRA,
|
||||
.scsi_type = MAC_SCSI_OLD,
|
||||
.scc_type = MAC_SCC_QUADRA,
|
||||
- .nubus_type = MAC_NUBUS
|
||||
+ .nubus_type = MAC_NUBUS,
|
||||
+ .floppy_type = MAC_FLOPPY_SWIM_ADDR2
|
||||
}, {
|
||||
.ident = MAC_MODEL_PB180C,
|
||||
.name = "PowerBook 180c",
|
||||
@@ -664,7 +710,8 @@ static struct mac_model mac_data_table[] = {
|
||||
.via_type = MAC_VIA_QUADRA,
|
||||
.scsi_type = MAC_SCSI_OLD,
|
||||
.scc_type = MAC_SCC_QUADRA,
|
||||
- .nubus_type = MAC_NUBUS
|
||||
+ .nubus_type = MAC_NUBUS,
|
||||
+ .floppy_type = MAC_FLOPPY_SWIM_ADDR2
|
||||
}, {
|
||||
.ident = MAC_MODEL_PB190,
|
||||
.name = "PowerBook 190",
|
||||
@@ -673,7 +720,8 @@ static struct mac_model mac_data_table[] = {
|
||||
.scsi_type = MAC_SCSI_OLD,
|
||||
.ide_type = MAC_IDE_BABOON,
|
||||
.scc_type = MAC_SCC_QUADRA,
|
||||
- .nubus_type = MAC_NUBUS
|
||||
+ .nubus_type = MAC_NUBUS,
|
||||
+ .floppy_type = MAC_FLOPPY_SWIM_ADDR2
|
||||
}, {
|
||||
.ident = MAC_MODEL_PB520,
|
||||
.name = "PowerBook 520",
|
||||
@@ -682,7 +730,8 @@ static struct mac_model mac_data_table[] = {
|
||||
.scsi_type = MAC_SCSI_OLD,
|
||||
.scc_type = MAC_SCC_QUADRA,
|
||||
.ether_type = MAC_ETHER_SONIC,
|
||||
- .nubus_type = MAC_NUBUS
|
||||
+ .nubus_type = MAC_NUBUS,
|
||||
+ .floppy_type = MAC_FLOPPY_SWIM_ADDR2
|
||||
},
|
||||
|
||||
/*
|
||||
@@ -702,7 +751,8 @@ static struct mac_model mac_data_table[] = {
|
||||
.via_type = MAC_VIA_IIci,
|
||||
.scsi_type = MAC_SCSI_OLD,
|
||||
.scc_type = MAC_SCC_QUADRA,
|
||||
- .nubus_type = MAC_NUBUS
|
||||
+ .nubus_type = MAC_NUBUS,
|
||||
+ .floppy_type = MAC_FLOPPY_SWIM_ADDR2
|
||||
}, {
|
||||
.ident = MAC_MODEL_PB230,
|
||||
.name = "PowerBook Duo 230",
|
||||
@@ -710,7 +760,8 @@ static struct mac_model mac_data_table[] = {
|
||||
.via_type = MAC_VIA_IIci,
|
||||
.scsi_type = MAC_SCSI_OLD,
|
||||
.scc_type = MAC_SCC_QUADRA,
|
||||
- .nubus_type = MAC_NUBUS
|
||||
+ .nubus_type = MAC_NUBUS,
|
||||
+ .floppy_type = MAC_FLOPPY_SWIM_ADDR2
|
||||
}, {
|
||||
.ident = MAC_MODEL_PB250,
|
||||
.name = "PowerBook Duo 250",
|
||||
@@ -718,7 +769,8 @@ static struct mac_model mac_data_table[] = {
|
||||
.via_type = MAC_VIA_IIci,
|
||||
.scsi_type = MAC_SCSI_OLD,
|
||||
.scc_type = MAC_SCC_QUADRA,
|
||||
- .nubus_type = MAC_NUBUS
|
||||
+ .nubus_type = MAC_NUBUS,
|
||||
+ .floppy_type = MAC_FLOPPY_SWIM_ADDR2
|
||||
}, {
|
||||
.ident = MAC_MODEL_PB270C,
|
||||
.name = "PowerBook Duo 270c",
|
||||
@@ -726,7 +778,8 @@ static struct mac_model mac_data_table[] = {
|
||||
.via_type = MAC_VIA_IIci,
|
||||
.scsi_type = MAC_SCSI_OLD,
|
||||
.scc_type = MAC_SCC_QUADRA,
|
||||
- .nubus_type = MAC_NUBUS
|
||||
+ .nubus_type = MAC_NUBUS,
|
||||
+ .floppy_type = MAC_FLOPPY_SWIM_ADDR2
|
||||
}, {
|
||||
.ident = MAC_MODEL_PB280,
|
||||
.name = "PowerBook Duo 280",
|
||||
@@ -734,7 +787,8 @@ static struct mac_model mac_data_table[] = {
|
||||
.via_type = MAC_VIA_IIci,
|
||||
.scsi_type = MAC_SCSI_OLD,
|
||||
.scc_type = MAC_SCC_QUADRA,
|
||||
- .nubus_type = MAC_NUBUS
|
||||
+ .nubus_type = MAC_NUBUS,
|
||||
+ .floppy_type = MAC_FLOPPY_SWIM_ADDR2
|
||||
}, {
|
||||
.ident = MAC_MODEL_PB280C,
|
||||
.name = "PowerBook Duo 280c",
|
||||
@@ -742,7 +796,8 @@ static struct mac_model mac_data_table[] = {
|
||||
.via_type = MAC_VIA_IIci,
|
||||
.scsi_type = MAC_SCSI_OLD,
|
||||
.scc_type = MAC_SCC_QUADRA,
|
||||
- .nubus_type = MAC_NUBUS
|
||||
+ .nubus_type = MAC_NUBUS,
|
||||
+ .floppy_type = MAC_FLOPPY_SWIM_ADDR2
|
||||
},
|
||||
|
||||
/*
|
||||
--
|
||||
1.6.2.3
|
||||
|
1397
debian/patches/bugfix/m68k/2.6.29/0003-m68k-mac-Add-SWIM-floppy-support.patch
vendored
Normal file
1397
debian/patches/bugfix/m68k/2.6.29/0003-m68k-mac-Add-SWIM-floppy-support.patch
vendored
Normal file
File diff suppressed because it is too large
Load Diff
28
debian/patches/bugfix/m68k/2.6.29/0004-MAINTAINERS-Replace-dead-link-to-m68k-CVS-repositor.patch
vendored
Normal file
28
debian/patches/bugfix/m68k/2.6.29/0004-MAINTAINERS-Replace-dead-link-to-m68k-CVS-repositor.patch
vendored
Normal file
|
@ -0,0 +1,28 @@
|
|||
From 0e750aa47ab26236c15c1dc7a66ecf39148e67bc Mon Sep 17 00:00:00 2001
|
||||
From: Geert Uytterhoeven <geert@linux-m68k.org>
|
||||
Date: Mon, 24 Nov 2008 21:37:09 +0100
|
||||
Subject: [PATCH 04/90] MAINTAINERS: Replace dead link to m68k CVS repository by link to new git repository
|
||||
|
||||
CVS is dead, long live git!
|
||||
|
||||
Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
|
||||
---
|
||||
MAINTAINERS | 2 +-
|
||||
1 files changed, 1 insertions(+), 1 deletions(-)
|
||||
|
||||
diff --git a/MAINTAINERS b/MAINTAINERS
|
||||
index 5d460c9..38ec1da 100644
|
||||
--- a/MAINTAINERS
|
||||
+++ b/MAINTAINERS
|
||||
@@ -2832,7 +2832,7 @@ P: Roman Zippel
|
||||
M: zippel@linux-m68k.org
|
||||
L: linux-m68k@lists.linux-m68k.org
|
||||
W: http://www.linux-m68k.org/
|
||||
-W: http://linux-m68k-cvs.ubb.ca/
|
||||
+T: git git.kernel.org/pub/scm/linux/kernel/git/geert/linux-m68k.git
|
||||
S: Maintained
|
||||
|
||||
M68K ON APPLE MACINTOSH
|
||||
--
|
||||
1.6.2.3
|
||||
|
38
debian/patches/bugfix/m68k/2.6.29/0005-m68k-section-mismatch-fixes-DMAsound-for-Atari.patch
vendored
Normal file
38
debian/patches/bugfix/m68k/2.6.29/0005-m68k-section-mismatch-fixes-DMAsound-for-Atari.patch
vendored
Normal file
|
@ -0,0 +1,38 @@
|
|||
From d497e3ab91a726ecd76028698e5ce298f75ab681 Mon Sep 17 00:00:00 2001
|
||||
From: Michael Schmitz <schmitz@biophys.uni-duesseldorf.de>
|
||||
Date: Sun, 18 Jan 2009 03:17:33 +0100
|
||||
Subject: [PATCH 05/90] m68k: section mismatch fixes: DMAsound for Atari
|
||||
|
||||
add __initdata to driver presets struct
|
||||
|
||||
Signed-off-By: Michael Schmitz <schmitz@debian.org>
|
||||
Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
|
||||
---
|
||||
sound/oss/dmasound/dmasound_atari.c | 4 ++--
|
||||
1 files changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/sound/oss/dmasound/dmasound_atari.c b/sound/oss/dmasound/dmasound_atari.c
|
||||
index 38931f2..1f47741 100644
|
||||
--- a/sound/oss/dmasound/dmasound_atari.c
|
||||
+++ b/sound/oss/dmasound/dmasound_atari.c
|
||||
@@ -1524,7 +1524,7 @@ static SETTINGS def_soft = {
|
||||
.speed = 8000
|
||||
} ;
|
||||
|
||||
-static MACHINE machTT = {
|
||||
+static __initdata MACHINE machTT = {
|
||||
.name = "Atari",
|
||||
.name2 = "TT",
|
||||
.owner = THIS_MODULE,
|
||||
@@ -1553,7 +1553,7 @@ static MACHINE machTT = {
|
||||
.capabilities = DSP_CAP_BATCH /* As per SNDCTL_DSP_GETCAPS */
|
||||
};
|
||||
|
||||
-static MACHINE machFalcon = {
|
||||
+static __initdata MACHINE machFalcon = {
|
||||
.name = "Atari",
|
||||
.name2 = "FALCON",
|
||||
.dma_alloc = AtaAlloc,
|
||||
--
|
||||
1.6.2.3
|
||||
|
43
debian/patches/bugfix/m68k/2.6.29/0006-m68k-section-mismatch-fixes-Atari-SCSI.patch
vendored
Normal file
43
debian/patches/bugfix/m68k/2.6.29/0006-m68k-section-mismatch-fixes-Atari-SCSI.patch
vendored
Normal file
|
@ -0,0 +1,43 @@
|
|||
From 95fde7a83989d595c06105629f42f3691bf62f91 Mon Sep 17 00:00:00 2001
|
||||
From: Michael Schmitz <schmitz@biophys.uni-duesseldorf.de>
|
||||
Date: Sun, 18 Jan 2009 03:22:15 +0100
|
||||
Subject: [PATCH 06/90] m68k: section mismatch fixes: Atari SCSI
|
||||
|
||||
add __init annotations to probe routines
|
||||
|
||||
Signed-off-by: Michael Schmitz <schmitz@debian.org>
|
||||
Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
|
||||
---
|
||||
drivers/scsi/atari_NCR5380.c | 2 +-
|
||||
drivers/scsi/atari_scsi.c | 2 +-
|
||||
2 files changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/drivers/scsi/atari_NCR5380.c b/drivers/scsi/atari_NCR5380.c
|
||||
index 93b61f1..0471f88 100644
|
||||
--- a/drivers/scsi/atari_NCR5380.c
|
||||
+++ b/drivers/scsi/atari_NCR5380.c
|
||||
@@ -844,7 +844,7 @@ static char *lprint_Scsi_Cmnd(Scsi_Cmnd *cmd, char *pos, char *buffer, int lengt
|
||||
*
|
||||
*/
|
||||
|
||||
-static int NCR5380_init(struct Scsi_Host *instance, int flags)
|
||||
+static int __init NCR5380_init(struct Scsi_Host *instance, int flags)
|
||||
{
|
||||
int i;
|
||||
SETUP_HOSTDATA(instance);
|
||||
diff --git a/drivers/scsi/atari_scsi.c b/drivers/scsi/atari_scsi.c
|
||||
index 21fe07f..ad7a23a 100644
|
||||
--- a/drivers/scsi/atari_scsi.c
|
||||
+++ b/drivers/scsi/atari_scsi.c
|
||||
@@ -589,7 +589,7 @@ int atari_queue_command(Scsi_Cmnd *cmd, void (*done)(Scsi_Cmnd *))
|
||||
#endif
|
||||
|
||||
|
||||
-int atari_scsi_detect(struct scsi_host_template *host)
|
||||
+int __init atari_scsi_detect(struct scsi_host_template *host)
|
||||
{
|
||||
static int called = 0;
|
||||
struct Scsi_Host *instance;
|
||||
--
|
||||
1.6.2.3
|
||||
|
41
debian/patches/bugfix/m68k/2.6.29/0007-m68k-irq_node.handler-should-return-irqreturn_t.patch
vendored
Normal file
41
debian/patches/bugfix/m68k/2.6.29/0007-m68k-irq_node.handler-should-return-irqreturn_t.patch
vendored
Normal file
|
@ -0,0 +1,41 @@
|
|||
From 4b2873ba0bda7dc747cde8b6c7dc6c0b01ea6213 Mon Sep 17 00:00:00 2001
|
||||
From: Geert Uytterhoeven <geert@linux-m68k.org>
|
||||
Date: Thu, 26 Mar 2009 09:48:45 +0100
|
||||
Subject: [PATCH 07/90] m68k: irq_node.handler() should return irqreturn_t
|
||||
|
||||
commit b5dc7840b3ebe9c7967dd8ba73db957767009ff9 ("m68k: introduce irq
|
||||
controller") reverted the return type of struct irq_node.handler() from
|
||||
irqreturn_t to int. Change it back to irqreturn_t, else it will give a
|
||||
compiler warning when irqreturn_t is turned into an enum in the near future:
|
||||
|
||||
| arch/m68k/kernel/ints.c:231: warning: assignment from incompatible pointer type
|
||||
|
||||
Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
|
||||
---
|
||||
arch/m68k/include/asm/irq_mm.h | 3 ++-
|
||||
1 files changed, 2 insertions(+), 1 deletions(-)
|
||||
|
||||
diff --git a/arch/m68k/include/asm/irq_mm.h b/arch/m68k/include/asm/irq_mm.h
|
||||
index 226bfc0..0cab42c 100644
|
||||
--- a/arch/m68k/include/asm/irq_mm.h
|
||||
+++ b/arch/m68k/include/asm/irq_mm.h
|
||||
@@ -3,6 +3,7 @@
|
||||
|
||||
#include <linux/linkage.h>
|
||||
#include <linux/hardirq.h>
|
||||
+#include <linux/irqreturn.h>
|
||||
#include <linux/spinlock_types.h>
|
||||
|
||||
/*
|
||||
@@ -80,7 +81,7 @@ struct pt_regs;
|
||||
* interrupt source (if it supports chaining).
|
||||
*/
|
||||
typedef struct irq_node {
|
||||
- int (*handler)(int, void *);
|
||||
+ irqreturn_t (*handler)(int, void *);
|
||||
void *dev_id;
|
||||
struct irq_node *next;
|
||||
unsigned long flags;
|
||||
--
|
||||
1.6.2.3
|
||||
|
|
@ -0,0 +1,542 @@
|
|||
From 2a0a19cd397035edc893e1a6c66d7e2b740ba0d4 Mon Sep 17 00:00:00 2001
|
||||
From: Michael Schmitz <schmitz@opal.biophys.uni-duesseldorf.de>
|
||||
Date: Tue, 18 Nov 2008 21:02:18 +0100
|
||||
Subject: [PATCH 08/90] m68k: Atari ARAnyM support
|
||||
|
||||
This isn't really my kettle of fish, but I post it anyway unless Petr
|
||||
complains :-)
|
||||
|
||||
This is what makes it possible for me to test 2.6 builds on the
|
||||
emulator...
|
||||
|
||||
Should be signed off by Petr, really.
|
||||
|
||||
Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
|
||||
---
|
||||
arch/m68k/Kconfig | 15 ++
|
||||
arch/m68k/Makefile | 1 +
|
||||
arch/m68k/emu/Makefile | 7 +
|
||||
arch/m68k/emu/natfeat.c | 113 ++++++++++++++++
|
||||
arch/m68k/emu/nfeth.c | 284 +++++++++++++++++++++++++++++++++++++++
|
||||
arch/m68k/include/asm/natfeat.h | 22 +++
|
||||
arch/m68k/kernel/setup.c | 5 +
|
||||
7 files changed, 447 insertions(+), 0 deletions(-)
|
||||
create mode 100644 arch/m68k/emu/Makefile
|
||||
create mode 100644 arch/m68k/emu/natfeat.c
|
||||
create mode 100644 arch/m68k/emu/nfeth.c
|
||||
create mode 100644 arch/m68k/include/asm/natfeat.h
|
||||
|
||||
diff --git a/arch/m68k/Kconfig b/arch/m68k/Kconfig
|
||||
index fb87c08..c959f06 100644
|
||||
--- a/arch/m68k/Kconfig
|
||||
+++ b/arch/m68k/Kconfig
|
||||
@@ -244,6 +244,21 @@ config SUN3
|
||||
|
||||
If you don't want to compile a kernel exclusively for a Sun 3, say N.
|
||||
|
||||
+config NATFEAT
|
||||
+ bool "ARAnyM emulator support"
|
||||
+ depends on ATARI
|
||||
+ help
|
||||
+ This option enables support for ARAnyM native features, such as
|
||||
+ access to a disk image as /dev/hda. Useful with the ARANYM option.
|
||||
+
|
||||
+config NFETH
|
||||
+ tristate "NatFeat Ethernet support"
|
||||
+ depends on NET_ETHERNET && NATFEAT
|
||||
+ help
|
||||
+ Say Y to include support for the ARAnyM NatFeat network device
|
||||
+ which will emulate a regular ethernet device while presenting an
|
||||
+ ethertap device to the host system.
|
||||
+
|
||||
comment "Processor type"
|
||||
|
||||
config M68020
|
||||
diff --git a/arch/m68k/Makefile b/arch/m68k/Makefile
|
||||
index 570d85c..d0881b3 100644
|
||||
--- a/arch/m68k/Makefile
|
||||
+++ b/arch/m68k/Makefile
|
||||
@@ -76,6 +76,7 @@ core-$(CONFIG_MVME16x) += arch/m68k/mvme16x/
|
||||
core-$(CONFIG_BVME6000) += arch/m68k/bvme6000/
|
||||
core-$(CONFIG_SUN3X) += arch/m68k/sun3x/ arch/m68k/sun3/
|
||||
core-$(CONFIG_SUN3) += arch/m68k/sun3/ arch/m68k/sun3/prom/
|
||||
+core-$(CONFIG_NATFEAT) += arch/m68k/emu/
|
||||
core-$(CONFIG_M68040) += arch/m68k/fpsp040/
|
||||
core-$(CONFIG_M68060) += arch/m68k/ifpsp060/
|
||||
core-$(CONFIG_M68KFPU_EMU) += arch/m68k/math-emu/
|
||||
diff --git a/arch/m68k/emu/Makefile b/arch/m68k/emu/Makefile
|
||||
new file mode 100644
|
||||
index 0000000..9fb7219
|
||||
--- /dev/null
|
||||
+++ b/arch/m68k/emu/Makefile
|
||||
@@ -0,0 +1,7 @@
|
||||
+#
|
||||
+# Makefile for Linux arch/m68k/emu source directory
|
||||
+#
|
||||
+
|
||||
+obj-y += natfeat.o
|
||||
+
|
||||
+obj-$(CONFIG_NFETH) += nfeth.o
|
||||
diff --git a/arch/m68k/emu/natfeat.c b/arch/m68k/emu/natfeat.c
|
||||
new file mode 100644
|
||||
index 0000000..b0eac0c
|
||||
--- /dev/null
|
||||
+++ b/arch/m68k/emu/natfeat.c
|
||||
@@ -0,0 +1,113 @@
|
||||
+/*
|
||||
+ * natfeat.c - ARAnyM hardware support via Native Features (natfeats)
|
||||
+ *
|
||||
+ * Copyright (c) 2005 Petr Stehlik of ARAnyM dev team
|
||||
+ *
|
||||
+ * Reworked for Linux by Roman Zippel <zippel@linux-m68k.org>
|
||||
+ *
|
||||
+ * This software may be used and distributed according to the terms of
|
||||
+ * the GNU General Public License (GPL), incorporated herein by reference.
|
||||
+ */
|
||||
+
|
||||
+#include <linux/types.h>
|
||||
+#include <linux/console.h>
|
||||
+#include <linux/string.h>
|
||||
+#include <linux/kernel.h>
|
||||
+#include <linux/io.h>
|
||||
+#include <asm/machdep.h>
|
||||
+#include <asm/natfeat.h>
|
||||
+
|
||||
+asm("\n"
|
||||
+" .global nf_get_id,nf_call\n"
|
||||
+"nf_get_id:\n"
|
||||
+" .short 0x7300\n"
|
||||
+" rts\n"
|
||||
+"nf_call:\n"
|
||||
+" .short 0x7301\n"
|
||||
+" rts\n"
|
||||
+"1: moveq.l #0,%d0\n"
|
||||
+" rts\n"
|
||||
+" .section __ex_table,\"a\"\n"
|
||||
+" .long nf_get_id,1b\n"
|
||||
+" .long nf_call,1b\n"
|
||||
+" .previous");
|
||||
+
|
||||
+static int stderr_id;
|
||||
+
|
||||
+static void nf_write(struct console *co, const char *str, unsigned int count)
|
||||
+{
|
||||
+ char buf[68];
|
||||
+
|
||||
+ buf[64] = 0;
|
||||
+ while (count > 64) {
|
||||
+ memcpy(buf, str, 64);
|
||||
+ nf_call(stderr_id, buf);
|
||||
+ str += 64;
|
||||
+ count -= 64;
|
||||
+ }
|
||||
+ memcpy(buf, str, count);
|
||||
+ buf[count] = 0;
|
||||
+ nf_call(stderr_id, buf);
|
||||
+}
|
||||
+
|
||||
+void nfprint(const char *fmt, ...)
|
||||
+{
|
||||
+ static char buf[256];
|
||||
+ va_list ap;
|
||||
+ int n;
|
||||
+
|
||||
+ va_start(ap, fmt);
|
||||
+ n = vsnprintf(buf, 256, fmt, ap);
|
||||
+ nf_call(nf_get_id("NF_STDERR"), buf);
|
||||
+ va_end(ap);
|
||||
+}
|
||||
+
|
||||
+static struct console nf_console_driver = {
|
||||
+ .name = "debug",
|
||||
+ .write = nf_write,
|
||||
+ .flags = CON_PRINTBUFFER,
|
||||
+ .index = -1,
|
||||
+};
|
||||
+
|
||||
+static int __init nf_debug_setup(char *arg)
|
||||
+{
|
||||
+ if (strcmp(arg, "emu"))
|
||||
+ return 0;
|
||||
+
|
||||
+ stderr_id = nf_get_id("NF_STDERR");
|
||||
+ if (stderr_id)
|
||||
+ register_console(&nf_console_driver);
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+early_param("debug", nf_debug_setup);
|
||||
+
|
||||
+static void nf_poweroff(void)
|
||||
+{
|
||||
+ long id = nf_get_id("NF_SHUTDOWN");
|
||||
+
|
||||
+ if (id)
|
||||
+ nf_call(id);
|
||||
+}
|
||||
+
|
||||
+void nf_init(void)
|
||||
+{
|
||||
+ unsigned long id, version;
|
||||
+ char buf[256];
|
||||
+
|
||||
+ id = nf_get_id("NF_VERSION");
|
||||
+ if (!id)
|
||||
+ return;
|
||||
+ version = nf_call(id);
|
||||
+
|
||||
+ id = nf_get_id("NF_NAME");
|
||||
+ if (!id)
|
||||
+ return;
|
||||
+ nf_call(id, buf, 256);
|
||||
+ buf[255] = 0;
|
||||
+
|
||||
+ pr_info("NatFeats found (%s, %lu.%lu)\n", buf, version >> 16,
|
||||
+ version & 0xffff);
|
||||
+
|
||||
+ mach_power_off = nf_poweroff;
|
||||
+}
|
||||
diff --git a/arch/m68k/emu/nfeth.c b/arch/m68k/emu/nfeth.c
|
||||
new file mode 100644
|
||||
index 0000000..de7cdad
|
||||
--- /dev/null
|
||||
+++ b/arch/m68k/emu/nfeth.c
|
||||
@@ -0,0 +1,284 @@
|
||||
+/*
|
||||
+ * atari_nfeth.c - ARAnyM ethernet card driver for GNU/Linux
|
||||
+ *
|
||||
+ * Copyright (c) 2005 Milan Jurik, Petr Stehlik of ARAnyM dev team
|
||||
+ *
|
||||
+ * Based on ARAnyM driver for FreeMiNT written by Standa Opichal
|
||||
+ *
|
||||
+ * This software may be used and distributed according to the terms of
|
||||
+ * the GNU General Public License (GPL), incorporated herein by reference.
|
||||
+ */
|
||||
+
|
||||
+#include <linux/netdevice.h>
|
||||
+#include <linux/etherdevice.h>
|
||||
+#include <linux/module.h>
|
||||
+#include <net/ieee80211.h>
|
||||
+#include <asm/natfeat.h>
|
||||
+#include <asm/virtconvert.h>
|
||||
+
|
||||
+enum {
|
||||
+ GET_VERSION = 0, /* no parameters, return NFAPI_VERSION in d0 */
|
||||
+ XIF_INTLEVEL, /* no parameters, return Interrupt Level in d0 */
|
||||
+ XIF_IRQ, /* acknowledge interrupt from host */
|
||||
+ XIF_START, /* (ethX), called on 'ifup', start receiver thread */
|
||||
+ XIF_STOP, /* (ethX), called on 'ifdown', stop the thread */
|
||||
+ XIF_READLENGTH, /* (ethX), return size of network data block to read */
|
||||
+ XIF_READBLOCK, /* (ethX, buffer, size), read block of network data */
|
||||
+ XIF_WRITEBLOCK, /* (ethX, buffer, size), write block of network data */
|
||||
+ XIF_GET_MAC, /* (ethX, buffer, size), return MAC HW addr in buffer */
|
||||
+ XIF_GET_IPHOST, /* (ethX, buffer, size), return IP address of host */
|
||||
+ XIF_GET_IPATARI, /* (ethX, buffer, size), return IP address of atari */
|
||||
+ XIF_GET_NETMASK /* (ethX, buffer, size), return IP netmask */
|
||||
+};
|
||||
+
|
||||
+#define DRV_NAME "nfeth"
|
||||
+#define DRV_VERSION "0.3"
|
||||
+#define DRV_RELDATE "10/12/2005"
|
||||
+
|
||||
+#define MAX_UNIT 8
|
||||
+
|
||||
+/* These identify the driver base version and may not be removed. */
|
||||
+static char version[] __devinitdata =
|
||||
+KERN_INFO DRV_NAME ".c:v" DRV_VERSION " " DRV_RELDATE " S.Opichal, M.Jurik, P.Stehlik\n"
|
||||
+KERN_INFO " http://aranym.atari.org/\n";
|
||||
+
|
||||
+MODULE_AUTHOR("Milan Jurik");
|
||||
+MODULE_DESCRIPTION("Atari NFeth driver");
|
||||
+MODULE_LICENSE("GPL");
|
||||
+/*
|
||||
+MODULE_PARM(nfeth_debug, "i");
|
||||
+MODULE_PARM_DESC(nfeth_debug, "nfeth_debug level (1-2)");
|
||||
+*/
|
||||
+
|
||||
+
|
||||
+static long nfEtherID;
|
||||
+static int nfEtherIRQ;
|
||||
+
|
||||
+struct nfeth_private {
|
||||
+ int ethX;
|
||||
+ struct net_device_stats stats;
|
||||
+};
|
||||
+
|
||||
+static struct net_device *nfeth_dev[MAX_UNIT];
|
||||
+
|
||||
+int nfeth_open(struct net_device *dev);
|
||||
+int nfeth_stop(struct net_device *dev);
|
||||
+irqreturn_t nfeth_interrupt(int irq, void *dev_id);
|
||||
+int nfeth_xmit(struct sk_buff *skb, struct net_device *dev);
|
||||
+
|
||||
+int nfeth_open(struct net_device *dev)
|
||||
+{
|
||||
+ struct nfeth_private *priv = netdev_priv(dev);
|
||||
+ int res;
|
||||
+
|
||||
+ res = nf_call(nfEtherID + XIF_START, priv->ethX);
|
||||
+
|
||||
+ /* Clean statistics */
|
||||
+ memset(&priv->stats, 0, sizeof(struct net_device_stats));
|
||||
+
|
||||
+ pr_debug(DRV_NAME ": open %d\n", res);
|
||||
+
|
||||
+ /* Ready for data */
|
||||
+ netif_start_queue(dev);
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+int nfeth_stop(struct net_device *dev)
|
||||
+{
|
||||
+ struct nfeth_private *priv = netdev_priv(dev);
|
||||
+
|
||||
+ /* No more data */
|
||||
+ netif_stop_queue(dev);
|
||||
+
|
||||
+ nf_call(nfEtherID + XIF_STOP, priv->ethX);
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+/*
|
||||
+ * Read a packet out of the adapter and pass it to the upper layers
|
||||
+ */
|
||||
+static inline void recv_packet(struct net_device *dev)
|
||||
+{
|
||||
+ struct nfeth_private *priv = netdev_priv(dev);
|
||||
+ int handled = 0;
|
||||
+ unsigned short pktlen;
|
||||
+ struct sk_buff *skb;
|
||||
+
|
||||
+ /* read packet length (excluding 32 bit crc) */
|
||||
+ pktlen = nf_call(nfEtherID + XIF_READLENGTH, priv->ethX);
|
||||
+
|
||||
+ pr_debug(DRV_NAME ": recv_packet: %i\n", pktlen);
|
||||
+
|
||||
+ if (!pktlen) {
|
||||
+ pr_debug(DRV_NAME ": recv_packet: pktlen == 0\n");
|
||||
+ priv->stats.rx_errors++;
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ skb = dev_alloc_skb(pktlen + 2);
|
||||
+ if (!skb) {
|
||||
+ pr_debug(DRV_NAME
|
||||
+ ": recv_packet: out of mem (buf_alloc failed)\n");
|
||||
+ priv->stats.rx_dropped++;
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ skb->dev = dev;
|
||||
+ skb_reserve(skb, 2); /* 16 Byte align */
|
||||
+ skb_put(skb, pktlen); /* make room */
|
||||
+ nf_call(nfEtherID + XIF_READBLOCK, priv->ethX, virt_to_phys(skb->data),
|
||||
+ pktlen);
|
||||
+
|
||||
+ skb->protocol = eth_type_trans(skb, dev);
|
||||
+ netif_rx(skb);
|
||||
+ dev->last_rx = jiffies;
|
||||
+ priv->stats.rx_packets++;
|
||||
+ priv->stats.rx_bytes += pktlen;
|
||||
+
|
||||
+ /* and enqueue packet */
|
||||
+ handled = 1;
|
||||
+ return;
|
||||
+}
|
||||
+
|
||||
+irqreturn_t nfeth_interrupt(int irq, void *dev_id)
|
||||
+{
|
||||
+ int i, m, mask;
|
||||
+
|
||||
+ mask = nf_call(nfEtherID + XIF_IRQ, 0);
|
||||
+ for (i = 0, m = 1; i < MAX_UNIT; m <<= 1, i++) {
|
||||
+ if (mask & m && nfeth_dev[i]) {
|
||||
+ recv_packet(nfeth_dev[i]);
|
||||
+ nf_call(nfEtherID + XIF_IRQ, m);
|
||||
+ }
|
||||
+ }
|
||||
+ return IRQ_HANDLED;
|
||||
+}
|
||||
+
|
||||
+int nfeth_xmit(struct sk_buff *skb, struct net_device *dev)
|
||||
+{
|
||||
+ int len;
|
||||
+ char *data, shortpkt[ETH_ZLEN];
|
||||
+ struct nfeth_private *priv = netdev_priv(dev);
|
||||
+
|
||||
+ data = skb->data;
|
||||
+ len = skb->len;
|
||||
+ if (len < ETH_ZLEN) {
|
||||
+ memset(shortpkt, 0, ETH_ZLEN);
|
||||
+ memcpy(shortpkt, data, len);
|
||||
+ data = shortpkt;
|
||||
+ len = ETH_ZLEN;
|
||||
+ }
|
||||
+
|
||||
+ dev->trans_start = jiffies;
|
||||
+
|
||||
+ pr_debug(DRV_NAME ": send %d bytes\n", len);
|
||||
+ nf_call(nfEtherID + XIF_WRITEBLOCK, priv->ethX, virt_to_phys(data),
|
||||
+ len);
|
||||
+
|
||||
+ priv->stats.tx_packets++;
|
||||
+ priv->stats.tx_bytes += len;
|
||||
+
|
||||
+ dev_kfree_skb(skb);
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static void nfeth_tx_timeout(struct net_device *dev)
|
||||
+{
|
||||
+ struct nfeth_private *priv = netdev_priv(dev);
|
||||
+ priv->stats.tx_errors++;
|
||||
+ netif_wake_queue(dev);
|
||||
+}
|
||||
+
|
||||
+static struct net_device_stats *nfeth_get_stats(struct net_device *dev)
|
||||
+{
|
||||
+ struct nfeth_private *priv = netdev_priv(dev);
|
||||
+ return &priv->stats;
|
||||
+}
|
||||
+
|
||||
+struct net_device * __init nfeth_probe(int unit)
|
||||
+{
|
||||
+ struct net_device *dev;
|
||||
+ struct nfeth_private *priv;
|
||||
+ char mac[ETH_ALEN], host_ip[32], local_ip[32];
|
||||
+ DECLARE_MAC_BUF(macfmt);
|
||||
+ int err;
|
||||
+
|
||||
+ if (!nf_call(nfEtherID + XIF_GET_MAC, unit, mac, ETH_ALEN))
|
||||
+ return NULL;
|
||||
+
|
||||
+ dev = alloc_etherdev(sizeof(struct nfeth_private));
|
||||
+ if (!dev)
|
||||
+ return NULL;
|
||||
+
|
||||
+ dev->irq = nfEtherIRQ;
|
||||
+ dev->open = nfeth_open;
|
||||
+ dev->stop = nfeth_stop;
|
||||
+ dev->hard_start_xmit = nfeth_xmit;
|
||||
+ dev->tx_timeout = nfeth_tx_timeout;
|
||||
+ dev->get_stats = nfeth_get_stats;
|
||||
+ dev->flags |= NETIF_F_NO_CSUM;
|
||||
+ memcpy(dev->dev_addr, mac, ETH_ALEN);
|
||||
+
|
||||
+ priv = netdev_priv(dev);
|
||||
+ priv->ethX = unit;
|
||||
+
|
||||
+ err = register_netdev(dev);
|
||||
+ if (err) {
|
||||
+ free_netdev(dev);
|
||||
+ return NULL;
|
||||
+ }
|
||||
+
|
||||
+ nf_call(nfEtherID + XIF_GET_IPHOST, unit,
|
||||
+ host_ip, sizeof(host_ip));
|
||||
+ nf_call(nfEtherID + XIF_GET_IPATARI, unit,
|
||||
+ local_ip, sizeof(local_ip));
|
||||
+
|
||||
+ pr_info("%s: nfeth addr:%s (%s) HWaddr:%s\n", dev->name, host_ip,
|
||||
+ local_ip, print_mac(macfmt, mac));
|
||||
+
|
||||
+ return dev;
|
||||
+}
|
||||
+
|
||||
+int __init nfeth_init(void)
|
||||
+{
|
||||
+ long ver;
|
||||
+ int i;
|
||||
+
|
||||
+ nfEtherID = nf_get_id("ETHERNET");
|
||||
+ if (!nfEtherID)
|
||||
+ return -ENODEV;
|
||||
+
|
||||
+ ver = nf_call(nfEtherID + GET_VERSION);
|
||||
+ pr_info("nfeth API %lu\n", ver);
|
||||
+
|
||||
+ nfEtherIRQ = nf_call(nfEtherID + XIF_INTLEVEL);
|
||||
+ if (request_irq(nfEtherIRQ, nfeth_interrupt, IRQF_SHARED,
|
||||
+ "eth emu", nfeth_interrupt)) {
|
||||
+ printk(KERN_ERR "nfeth: request for irq %d failed",
|
||||
+ nfEtherIRQ);
|
||||
+ return -ENODEV;
|
||||
+ }
|
||||
+
|
||||
+ for (i = 0; i < MAX_UNIT; i++)
|
||||
+ nfeth_dev[i] = nfeth_probe(i);
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+void __exit nfeth_cleanup(void)
|
||||
+{
|
||||
+ int i;
|
||||
+
|
||||
+ for (i = 0; i < MAX_UNIT; i++) {
|
||||
+ if (nfeth_dev[i]) {
|
||||
+ unregister_netdev(nfeth_dev[0]);
|
||||
+ free_netdev(nfeth_dev[0]);
|
||||
+ }
|
||||
+ }
|
||||
+ free_irq(nfEtherIRQ, nfeth_interrupt);
|
||||
+}
|
||||
+
|
||||
+module_init(nfeth_init);
|
||||
+module_exit(nfeth_cleanup);
|
||||
diff --git a/arch/m68k/include/asm/natfeat.h b/arch/m68k/include/asm/natfeat.h
|
||||
new file mode 100644
|
||||
index 0000000..a3521b8
|
||||
--- /dev/null
|
||||
+++ b/arch/m68k/include/asm/natfeat.h
|
||||
@@ -0,0 +1,22 @@
|
||||
+/*
|
||||
+ * ARAnyM hardware support via Native Features (natfeats)
|
||||
+ *
|
||||
+ * Copyright (c) 2005 Petr Stehlik of ARAnyM dev team
|
||||
+ *
|
||||
+ * This software may be used and distributed according to the terms of
|
||||
+ * the GNU General Public License (GPL), incorporated herein by reference.
|
||||
+ */
|
||||
+
|
||||
+#ifndef _NATFEAT_H
|
||||
+#define _NATFEAT_H
|
||||
+
|
||||
+long nf_get_id(const char *feature_name);
|
||||
+long nf_call(long id, ...);
|
||||
+
|
||||
+void nf_init(void);
|
||||
+void nf_shutdown(void);
|
||||
+
|
||||
+void nfprint(const char *fmt, ...)
|
||||
+ __attribute__ ((format (printf, 1, 2)));
|
||||
+
|
||||
+# endif /* _NATFEAT_H */
|
||||
diff --git a/arch/m68k/kernel/setup.c b/arch/m68k/kernel/setup.c
|
||||
index 303730a..17b2b62 100644
|
||||
--- a/arch/m68k/kernel/setup.c
|
||||
+++ b/arch/m68k/kernel/setup.c
|
||||
@@ -42,6 +42,7 @@
|
||||
#ifdef CONFIG_SUN3X
|
||||
#include <asm/dvma.h>
|
||||
#endif
|
||||
+#include <asm/natfeat.h>
|
||||
|
||||
#if !FPSTATESIZE || !NR_IRQS
|
||||
#warning No CPU/platform type selected, your kernel will not work!
|
||||
@@ -324,6 +325,10 @@ void __init setup_arch(char **cmdline_p)
|
||||
panic("No configuration setup");
|
||||
}
|
||||
|
||||
+#ifdef CONFIG_NATFEAT
|
||||
+ nf_init();
|
||||
+#endif
|
||||
+
|
||||
paging_init();
|
||||
|
||||
#ifndef CONFIG_SUN3
|
||||
--
|
||||
1.6.2.3
|
||||
|
41
debian/patches/bugfix/m68k/2.6.29/0009-m68k-Export-ARAnyM-native-feature-API.patch
vendored
Normal file
41
debian/patches/bugfix/m68k/2.6.29/0009-m68k-Export-ARAnyM-native-feature-API.patch
vendored
Normal file
|
@ -0,0 +1,41 @@
|
|||
From 48eb9620cbeb0882d1de04ac007cb6a038bd0f54 Mon Sep 17 00:00:00 2001
|
||||
From: Geert Uytterhoeven <geert@linux-m68k.org>
|
||||
Date: Tue, 18 Nov 2008 21:02:19 +0100
|
||||
Subject: [PATCH 09/90] m68k: Export ARAnyM native feature API
|
||||
|
||||
ERROR: "nf_get_id" [arch/m68k/emu/nfeth.ko] undefined!
|
||||
ERROR: "nf_call" [arch/m68k/emu/nfeth.ko] undefined!
|
||||
ERROR: "nf_get_id" [arch/m68k/emu/nfcon.ko] undefined!
|
||||
ERROR: "nf_call" [arch/m68k/emu/nfcon.ko] undefined!
|
||||
ERROR: "nf_call" [arch/m68k/emu/nfblock.ko] undefined!
|
||||
ERROR: "nf_get_id" [arch/m68k/emu/nfblock.ko] undefined!
|
||||
|
||||
Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
|
||||
---
|
||||
arch/m68k/emu/natfeat.c | 3 +++
|
||||
1 files changed, 3 insertions(+), 0 deletions(-)
|
||||
|
||||
diff --git a/arch/m68k/emu/natfeat.c b/arch/m68k/emu/natfeat.c
|
||||
index b0eac0c..987d773 100644
|
||||
--- a/arch/m68k/emu/natfeat.c
|
||||
+++ b/arch/m68k/emu/natfeat.c
|
||||
@@ -13,6 +13,7 @@
|
||||
#include <linux/console.h>
|
||||
#include <linux/string.h>
|
||||
#include <linux/kernel.h>
|
||||
+#include <linux/module.h>
|
||||
#include <linux/io.h>
|
||||
#include <asm/machdep.h>
|
||||
#include <asm/natfeat.h>
|
||||
@@ -31,6 +32,8 @@ asm("\n"
|
||||
" .long nf_get_id,1b\n"
|
||||
" .long nf_call,1b\n"
|
||||
" .previous");
|
||||
+EXPORT_SYMBOL_GPL(nf_get_id);
|
||||
+EXPORT_SYMBOL_GPL(nf_call);
|
||||
|
||||
static int stderr_id;
|
||||
|
||||
--
|
||||
1.6.2.3
|
||||
|
471
debian/patches/bugfix/m68k/2.6.29/0010-m68k-Add-support-for-ARAnyM-block-and-console-acces.patch
vendored
Normal file
471
debian/patches/bugfix/m68k/2.6.29/0010-m68k-Add-support-for-ARAnyM-block-and-console-acces.patch
vendored
Normal file
|
@ -0,0 +1,471 @@
|
|||
From f42d63b43e7477f6ddcb5c6ec767cd4cf394e7ea Mon Sep 17 00:00:00 2001
|
||||
From: Roman Zippel <zippel@linux-m68k.org>
|
||||
Date: Tue, 18 Nov 2008 21:02:19 +0100
|
||||
Subject: [PATCH 10/90] m68k: Add support for ARAnyM block and console access
|
||||
|
||||
Add support for ARAnyM block and console access
|
||||
|
||||
Signed-off-by: Roman Zippel <zippel@linux-m68k.org>
|
||||
Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
|
||||
---
|
||||
arch/m68k/Kconfig | 16 ++++
|
||||
arch/m68k/emu/Makefile | 2 +
|
||||
arch/m68k/emu/natfeat.c | 38 ----------
|
||||
arch/m68k/emu/nfblock.c | 180 +++++++++++++++++++++++++++++++++++++++++++++++
|
||||
arch/m68k/emu/nfcon.c | 164 ++++++++++++++++++++++++++++++++++++++++++
|
||||
5 files changed, 362 insertions(+), 38 deletions(-)
|
||||
create mode 100644 arch/m68k/emu/nfblock.c
|
||||
create mode 100644 arch/m68k/emu/nfcon.c
|
||||
|
||||
diff --git a/arch/m68k/Kconfig b/arch/m68k/Kconfig
|
||||
index c959f06..e8b0bfb 100644
|
||||
--- a/arch/m68k/Kconfig
|
||||
+++ b/arch/m68k/Kconfig
|
||||
@@ -259,6 +259,22 @@ config NFETH
|
||||
which will emulate a regular ethernet device while presenting an
|
||||
ethertap device to the host system.
|
||||
|
||||
+config NFBLOCK
|
||||
+ tristate "NatFeat block device support"
|
||||
+ depends on BLOCK && NATFEAT
|
||||
+ help
|
||||
+ Say Y to include support for the ARAnyM NatFeat block device
|
||||
+ which allows direct access to the hard drives without using
|
||||
+ the hardware emulation.
|
||||
+
|
||||
+config NFCON
|
||||
+ tristate "NatFeat console driver"
|
||||
+ depends on NATFEAT
|
||||
+ help
|
||||
+ Say Y to include support for the ARAnyM NatFeat console driver
|
||||
+ which allows the console output to be redirected to the stderr
|
||||
+ output of ARAnyM.
|
||||
+
|
||||
comment "Processor type"
|
||||
|
||||
config M68020
|
||||
diff --git a/arch/m68k/emu/Makefile b/arch/m68k/emu/Makefile
|
||||
index 9fb7219..34f9a4d 100644
|
||||
--- a/arch/m68k/emu/Makefile
|
||||
+++ b/arch/m68k/emu/Makefile
|
||||
@@ -5,3 +5,5 @@
|
||||
obj-y += natfeat.o
|
||||
|
||||
obj-$(CONFIG_NFETH) += nfeth.o
|
||||
+obj-$(CONFIG_NFBLOCK) += nfblock.o
|
||||
+obj-$(CONFIG_NFCON) += nfcon.o
|
||||
diff --git a/arch/m68k/emu/natfeat.c b/arch/m68k/emu/natfeat.c
|
||||
index 987d773..2291a7d 100644
|
||||
--- a/arch/m68k/emu/natfeat.c
|
||||
+++ b/arch/m68k/emu/natfeat.c
|
||||
@@ -35,24 +35,6 @@ asm("\n"
|
||||
EXPORT_SYMBOL_GPL(nf_get_id);
|
||||
EXPORT_SYMBOL_GPL(nf_call);
|
||||
|
||||
-static int stderr_id;
|
||||
-
|
||||
-static void nf_write(struct console *co, const char *str, unsigned int count)
|
||||
-{
|
||||
- char buf[68];
|
||||
-
|
||||
- buf[64] = 0;
|
||||
- while (count > 64) {
|
||||
- memcpy(buf, str, 64);
|
||||
- nf_call(stderr_id, buf);
|
||||
- str += 64;
|
||||
- count -= 64;
|
||||
- }
|
||||
- memcpy(buf, str, count);
|
||||
- buf[count] = 0;
|
||||
- nf_call(stderr_id, buf);
|
||||
-}
|
||||
-
|
||||
void nfprint(const char *fmt, ...)
|
||||
{
|
||||
static char buf[256];
|
||||
@@ -65,26 +47,6 @@ void nfprint(const char *fmt, ...)
|
||||
va_end(ap);
|
||||
}
|
||||
|
||||
-static struct console nf_console_driver = {
|
||||
- .name = "debug",
|
||||
- .write = nf_write,
|
||||
- .flags = CON_PRINTBUFFER,
|
||||
- .index = -1,
|
||||
-};
|
||||
-
|
||||
-static int __init nf_debug_setup(char *arg)
|
||||
-{
|
||||
- if (strcmp(arg, "emu"))
|
||||
- return 0;
|
||||
-
|
||||
- stderr_id = nf_get_id("NF_STDERR");
|
||||
- if (stderr_id)
|
||||
- register_console(&nf_console_driver);
|
||||
- return 0;
|
||||
-}
|
||||
-
|
||||
-early_param("debug", nf_debug_setup);
|
||||
-
|
||||
static void nf_poweroff(void)
|
||||
{
|
||||
long id = nf_get_id("NF_SHUTDOWN");
|
||||
diff --git a/arch/m68k/emu/nfblock.c b/arch/m68k/emu/nfblock.c
|
||||
new file mode 100644
|
||||
index 0000000..3d987c7
|
||||
--- /dev/null
|
||||
+++ b/arch/m68k/emu/nfblock.c
|
||||
@@ -0,0 +1,180 @@
|
||||
+/*
|
||||
+ * ARAnyM block device driver
|
||||
+ *
|
||||
+ * This file is subject to the terms and conditions of the GNU General Public
|
||||
+ * License. See the file COPYING in the main directory of this archive
|
||||
+ * for more details.
|
||||
+ */
|
||||
+
|
||||
+#include <linux/module.h>
|
||||
+#include <linux/moduleparam.h>
|
||||
+#include <linux/init.h>
|
||||
+
|
||||
+#include <linux/kernel.h>
|
||||
+#include <linux/errno.h>
|
||||
+#include <linux/types.h>
|
||||
+#include <linux/genhd.h>
|
||||
+#include <linux/blkdev.h>
|
||||
+#include <linux/hdreg.h>
|
||||
+
|
||||
+#include <asm/natfeat.h>
|
||||
+
|
||||
+static long nfhd_id;
|
||||
+
|
||||
+enum {
|
||||
+ /* emulation entry points */
|
||||
+ NFHD_READ_WRITE = 10,
|
||||
+ NFHD_GET_CAPACITY = 14,
|
||||
+
|
||||
+ /* skip ACSI devices */
|
||||
+ NFHD_DEV_OFFSET = 8,
|
||||
+};
|
||||
+
|
||||
+static LIST_HEAD(nfhd_list);
|
||||
+
|
||||
+static int major_num;
|
||||
+module_param(major_num, int, 0);
|
||||
+
|
||||
+struct nfhd_device {
|
||||
+ struct list_head list;
|
||||
+ int id;
|
||||
+ u32 blocks, bsize;
|
||||
+ int bshift;
|
||||
+ struct request_queue *queue;
|
||||
+ struct gendisk *disk;
|
||||
+};
|
||||
+
|
||||
+static int nfhd_make_request(struct request_queue *queue, struct bio *bio)
|
||||
+{
|
||||
+ struct nfhd_device *dev = queue->queuedata;
|
||||
+ struct bio_vec *bvec;
|
||||
+ int i, dir, len, shift;
|
||||
+ sector_t sec = bio->bi_sector;
|
||||
+
|
||||
+ dir = bio_data_dir(bio);
|
||||
+ shift = dev->bshift;
|
||||
+ bio_for_each_segment(bvec, bio, i) {
|
||||
+ len = bvec->bv_len;
|
||||
+ len >>= 9;
|
||||
+ nf_call(nfhd_id + NFHD_READ_WRITE, dev->id, 0, dir,
|
||||
+ sec >> shift, len >> shift, bvec_to_phys(bvec));
|
||||
+ sec += len;
|
||||
+ }
|
||||
+ bio_endio(bio, 0);
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+int nfhd_getgeo(struct block_device *bdev, struct hd_geometry *geo)
|
||||
+{
|
||||
+ struct nfhd_device *dev = bdev->bd_disk->private_data;
|
||||
+
|
||||
+ geo->cylinders = dev->blocks >> (6 - dev->bshift);
|
||||
+ geo->heads = 4;
|
||||
+ geo->sectors = 16;
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static struct block_device_operations nfhd_ops = {
|
||||
+ .owner = THIS_MODULE,
|
||||
+ .getgeo = nfhd_getgeo,
|
||||
+};
|
||||
+
|
||||
+static int __init nfhd_init_one(int id, u32 blocks, u32 bsize)
|
||||
+{
|
||||
+ struct nfhd_device *dev;
|
||||
+ int dev_id = id - NFHD_DEV_OFFSET;
|
||||
+
|
||||
+ printk(KERN_INFO "nfhd%u: found device with %u blocks (%u bytes)\n",
|
||||
+ dev_id, blocks, bsize);
|
||||
+
|
||||
+ if (bsize < 512 || (bsize & (bsize - 1))) {
|
||||
+ printk(KERN_WARNING "nfhd%u: invalid block size\n", dev_id);
|
||||
+ return -EINVAL;
|
||||
+ }
|
||||
+
|
||||
+ dev = kmalloc(sizeof(struct nfhd_device), GFP_KERNEL);
|
||||
+ if (!dev)
|
||||
+ goto out;
|
||||
+
|
||||
+ dev->id = id;
|
||||
+ dev->blocks = blocks;
|
||||
+ dev->bsize = bsize;
|
||||
+ dev->bshift = ffs(bsize) - 10;
|
||||
+
|
||||
+ dev->queue = blk_alloc_queue(GFP_KERNEL);
|
||||
+ if (dev->queue == NULL)
|
||||
+ goto free_dev;
|
||||
+
|
||||
+ dev->queue->queuedata = dev;
|
||||
+ blk_queue_make_request(dev->queue, nfhd_make_request);
|
||||
+ blk_queue_hardsect_size(dev->queue, bsize);
|
||||
+
|
||||
+ dev->disk = alloc_disk(16);
|
||||
+ if (!dev->disk)
|
||||
+ goto free_queue;
|
||||
+
|
||||
+ dev->disk->major = major_num;
|
||||
+ dev->disk->first_minor = dev_id * 16;
|
||||
+ dev->disk->fops = &nfhd_ops;
|
||||
+ dev->disk->private_data = dev;
|
||||
+ sprintf(dev->disk->disk_name, "nfhd%u", dev_id);
|
||||
+ set_capacity(dev->disk, (sector_t)blocks * (bsize / 512));
|
||||
+ dev->disk->queue = dev->queue;
|
||||
+
|
||||
+ add_disk(dev->disk);
|
||||
+
|
||||
+ list_add_tail(&dev->list, &nfhd_list);
|
||||
+
|
||||
+ return 0;
|
||||
+
|
||||
+free_queue:
|
||||
+ blk_cleanup_queue(dev->queue);
|
||||
+free_dev:
|
||||
+ kfree(dev);
|
||||
+out:
|
||||
+ return -ENOMEM;
|
||||
+}
|
||||
+
|
||||
+static int __init nfhd_init(void)
|
||||
+{
|
||||
+ u32 blocks, bsize;
|
||||
+ int i;
|
||||
+
|
||||
+ nfhd_id = nf_get_id("XHDI");
|
||||
+ if (!nfhd_id)
|
||||
+ return -ENODEV;
|
||||
+
|
||||
+ major_num = register_blkdev(major_num, "nfhd");
|
||||
+ if (major_num <= 0) {
|
||||
+ printk(KERN_WARNING "nfhd: unable to get major number\n");
|
||||
+ return -ENODEV;
|
||||
+ }
|
||||
+
|
||||
+ for (i = NFHD_DEV_OFFSET; i < 24; i++) {
|
||||
+ if (nf_call(nfhd_id + NFHD_GET_CAPACITY, i, 0, &blocks, &bsize))
|
||||
+ continue;
|
||||
+ nfhd_init_one(i, blocks, bsize);
|
||||
+ }
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static void __exit nfhd_exit(void)
|
||||
+{
|
||||
+ struct nfhd_device *dev, *next;
|
||||
+
|
||||
+ list_for_each_entry_safe(dev, next, &nfhd_list, list) {
|
||||
+ list_del(&dev->list);
|
||||
+ del_gendisk(dev->disk);
|
||||
+ put_disk(dev->disk);
|
||||
+ blk_cleanup_queue(dev->queue);
|
||||
+ kfree(dev);
|
||||
+ }
|
||||
+ unregister_blkdev(major_num, "nfhd");
|
||||
+}
|
||||
+
|
||||
+module_init(nfhd_init);
|
||||
+module_exit(nfhd_exit);
|
||||
+
|
||||
+MODULE_LICENSE("GPL");
|
||||
diff --git a/arch/m68k/emu/nfcon.c b/arch/m68k/emu/nfcon.c
|
||||
new file mode 100644
|
||||
index 0000000..91984fe
|
||||
--- /dev/null
|
||||
+++ b/arch/m68k/emu/nfcon.c
|
||||
@@ -0,0 +1,164 @@
|
||||
+/*
|
||||
+ * ARAnyM console driver
|
||||
+ *
|
||||
+ * This file is subject to the terms and conditions of the GNU General Public
|
||||
+ * License. See the file COPYING in the main directory of this archive
|
||||
+ * for more details.
|
||||
+ */
|
||||
+
|
||||
+#include <linux/module.h>
|
||||
+#include <linux/init.h>
|
||||
+#include <linux/console.h>
|
||||
+#include <linux/tty.h>
|
||||
+#include <linux/tty_driver.h>
|
||||
+#include <linux/tty_flip.h>
|
||||
+#include <linux/slab.h>
|
||||
+#include <linux/err.h>
|
||||
+#include <linux/uaccess.h>
|
||||
+
|
||||
+#include <asm/natfeat.h>
|
||||
+
|
||||
+static int stderr_id;
|
||||
+static struct tty_driver *nfcon_tty_driver;
|
||||
+
|
||||
+static void nfcon_write(struct console *con, const char *str, unsigned int count)
|
||||
+{
|
||||
+ char buf[68];
|
||||
+
|
||||
+ buf[64] = 0;
|
||||
+ while (count > 64) {
|
||||
+ memcpy(buf, str, 64);
|
||||
+ nf_call(stderr_id, buf);
|
||||
+ str += 64;
|
||||
+ count -= 64;
|
||||
+ }
|
||||
+ memcpy(buf, str, count);
|
||||
+ buf[count] = 0;
|
||||
+ nf_call(stderr_id, buf);
|
||||
+}
|
||||
+
|
||||
+struct tty_driver *nfcon_device(struct console *con, int *index)
|
||||
+{
|
||||
+ *index = 0;
|
||||
+ return (con->flags & CON_ENABLED) ? nfcon_tty_driver : NULL;
|
||||
+}
|
||||
+
|
||||
+static struct console nf_console = {
|
||||
+ .name = "nfcon",
|
||||
+ .write = nfcon_write,
|
||||
+ .device = nfcon_device,
|
||||
+ .flags = CON_PRINTBUFFER,
|
||||
+ .index = -1,
|
||||
+};
|
||||
+
|
||||
+
|
||||
+static int nfcon_tty_open(struct tty_struct *tty, struct file *filp)
|
||||
+{
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static void nfcon_tty_close(struct tty_struct *tty, struct file *filp)
|
||||
+{
|
||||
+}
|
||||
+
|
||||
+static int nfcon_tty_write(struct tty_struct *tty, const unsigned char *buf, int count)
|
||||
+{
|
||||
+ char temp[68];
|
||||
+ int i = count;
|
||||
+
|
||||
+ temp[64] = 0;
|
||||
+ while (i > 64) {
|
||||
+ memcpy(temp, buf, 64);
|
||||
+ nf_call(stderr_id, temp);
|
||||
+ buf += 64;
|
||||
+ i -= 64;
|
||||
+ }
|
||||
+ memcpy(temp, buf, i);
|
||||
+ temp[i] = 0;
|
||||
+ nf_call(stderr_id, temp);
|
||||
+
|
||||
+ return count;
|
||||
+}
|
||||
+
|
||||
+static int nfcon_tty_put_char(struct tty_struct *tty, unsigned char ch)
|
||||
+{
|
||||
+ char temp[2] = { ch, 0 };
|
||||
+
|
||||
+ nf_call(stderr_id, temp);
|
||||
+ return 1;
|
||||
+}
|
||||
+
|
||||
+static int nfcon_tty_write_room(struct tty_struct *tty)
|
||||
+{
|
||||
+ return 64;
|
||||
+}
|
||||
+
|
||||
+static const struct tty_operations nfcon_tty_ops = {
|
||||
+ .open = nfcon_tty_open,
|
||||
+ .close = nfcon_tty_close,
|
||||
+ .write = nfcon_tty_write,
|
||||
+ .put_char = nfcon_tty_put_char,
|
||||
+ .write_room = nfcon_tty_write_room,
|
||||
+};
|
||||
+
|
||||
+static int __init nf_debug_setup(char *arg)
|
||||
+{
|
||||
+ if (strcmp(arg, "nfcon"))
|
||||
+ return 0;
|
||||
+
|
||||
+ stderr_id = nf_get_id("NF_STDERR");
|
||||
+ if (stderr_id) {
|
||||
+ nf_console.flags |= CON_ENABLED;
|
||||
+ register_console(&nf_console);
|
||||
+ }
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+early_param("debug", nf_debug_setup);
|
||||
+
|
||||
+static int __init nfcon_init(void)
|
||||
+{
|
||||
+ int res;
|
||||
+
|
||||
+ stderr_id = nf_get_id("NF_STDERR");
|
||||
+ if (!stderr_id)
|
||||
+ return -ENODEV;
|
||||
+
|
||||
+ nfcon_tty_driver = alloc_tty_driver(1);
|
||||
+ if (!nfcon_tty_driver)
|
||||
+ return -ENOMEM;
|
||||
+
|
||||
+ nfcon_tty_driver->owner = THIS_MODULE;
|
||||
+ nfcon_tty_driver->driver_name = "nfcon";
|
||||
+ nfcon_tty_driver->name = "nfcon";
|
||||
+ nfcon_tty_driver->type = TTY_DRIVER_TYPE_SYSTEM;
|
||||
+ nfcon_tty_driver->subtype = SYSTEM_TYPE_TTY;
|
||||
+ nfcon_tty_driver->init_termios = tty_std_termios;
|
||||
+ nfcon_tty_driver->flags = TTY_DRIVER_REAL_RAW;
|
||||
+
|
||||
+ tty_set_operations(nfcon_tty_driver, &nfcon_tty_ops);
|
||||
+ res = tty_register_driver(nfcon_tty_driver);
|
||||
+ if (res) {
|
||||
+ printk(KERN_ERR "failed to register nfcon tty driver\n");
|
||||
+ put_tty_driver(nfcon_tty_driver);
|
||||
+ return res;
|
||||
+ }
|
||||
+
|
||||
+ if (!(nf_console.flags & CON_ENABLED))
|
||||
+ register_console(&nf_console);
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static void __exit nfcon_exit(void)
|
||||
+{
|
||||
+ unregister_console(&nf_console);
|
||||
+ tty_unregister_driver(nfcon_tty_driver);
|
||||
+ put_tty_driver(nfcon_tty_driver);
|
||||
+}
|
||||
+
|
||||
+module_init(nfcon_init);
|
||||
+module_exit(nfcon_exit);
|
||||
+
|
||||
+MODULE_LICENSE("GPL");
|
||||
--
|
||||
1.6.2.3
|
||||
|
37
debian/patches/bugfix/m68k/2.6.29/0011-m68k-ARAnyM-early_param-does-not-exist-in-the-mod.patch
vendored
Normal file
37
debian/patches/bugfix/m68k/2.6.29/0011-m68k-ARAnyM-early_param-does-not-exist-in-the-mod.patch
vendored
Normal file
|
@ -0,0 +1,37 @@
|
|||
From d2167f286d64fa1df15c82c740d88ecc2e96ebc0 Mon Sep 17 00:00:00 2001
|
||||
From: Geert Uytterhoeven <geert@linux-m68k.org>
|
||||
Date: Tue, 18 Nov 2008 21:02:20 +0100
|
||||
Subject: [PATCH 11/90] m68k/ARAnyM: early_param() does not exist in the modular case
|
||||
|
||||
early_param() does not exist in the modular case
|
||||
|
||||
Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
|
||||
---
|
||||
arch/m68k/emu/nfcon.c | 4 ++++
|
||||
1 files changed, 4 insertions(+), 0 deletions(-)
|
||||
|
||||
diff --git a/arch/m68k/emu/nfcon.c b/arch/m68k/emu/nfcon.c
|
||||
index 91984fe..f82af58 100644
|
||||
--- a/arch/m68k/emu/nfcon.c
|
||||
+++ b/arch/m68k/emu/nfcon.c
|
||||
@@ -101,6 +101,8 @@ static const struct tty_operations nfcon_tty_ops = {
|
||||
.write_room = nfcon_tty_write_room,
|
||||
};
|
||||
|
||||
+#ifndef MODULE
|
||||
+
|
||||
static int __init nf_debug_setup(char *arg)
|
||||
{
|
||||
if (strcmp(arg, "nfcon"))
|
||||
@@ -117,6 +119,8 @@ static int __init nf_debug_setup(char *arg)
|
||||
|
||||
early_param("debug", nf_debug_setup);
|
||||
|
||||
+#endif /* !MODULE */
|
||||
+
|
||||
static int __init nfcon_init(void)
|
||||
{
|
||||
int res;
|
||||
--
|
||||
1.6.2.3
|
||||
|
63
debian/patches/bugfix/m68k/2.6.29/0012-m68k-Wrap-nfblock-natfeat-calls.patch
vendored
Normal file
63
debian/patches/bugfix/m68k/2.6.29/0012-m68k-Wrap-nfblock-natfeat-calls.patch
vendored
Normal file
|
@ -0,0 +1,63 @@
|
|||
From 419d1b9d8d116b251094e3ce1f3ba4ef8ab54ec6 Mon Sep 17 00:00:00 2001
|
||||
From: Geert Uytterhoeven <geert@linux-m68k.org>
|
||||
Date: Tue, 18 Nov 2008 21:02:20 +0100
|
||||
Subject: [PATCH 12/90] m68k: Wrap nfblock natfeat calls
|
||||
|
||||
Add wrappers with proper prototypes for the natfeat calls in nfblock.
|
||||
This fixes the problem where sector_t was pushed on the stack as a 64-bit value
|
||||
if CONFIG_LBD=y, while all parameters of the nf_call() varargs function are
|
||||
32-bit.
|
||||
|
||||
Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
|
||||
---
|
||||
arch/m68k/emu/nfblock.c | 20 +++++++++++++++++---
|
||||
1 files changed, 17 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/arch/m68k/emu/nfblock.c b/arch/m68k/emu/nfblock.c
|
||||
index 3d987c7..c131121 100644
|
||||
--- a/arch/m68k/emu/nfblock.c
|
||||
+++ b/arch/m68k/emu/nfblock.c
|
||||
@@ -30,6 +30,20 @@ enum {
|
||||
NFHD_DEV_OFFSET = 8,
|
||||
};
|
||||
|
||||
+static inline s32 nfhd_read_write(u32 major, u32 minor, u32 rwflag, u32 recno,
|
||||
+ u32 count, u32 buf)
|
||||
+{
|
||||
+ return nf_call(nfhd_id + NFHD_READ_WRITE, major, minor, rwflag, recno,
|
||||
+ count, buf);
|
||||
+}
|
||||
+
|
||||
+static inline s32 nfhd_get_capacity(u32 major, u32 minor, u32 *blocks,
|
||||
+ u32 *blocksize)
|
||||
+{
|
||||
+ return nf_call(nfhd_id + NFHD_GET_CAPACITY, major, minor, blocks,
|
||||
+ blocksize);
|
||||
+}
|
||||
+
|
||||
static LIST_HEAD(nfhd_list);
|
||||
|
||||
static int major_num;
|
||||
@@ -56,8 +70,8 @@ static int nfhd_make_request(struct request_queue *queue, struct bio *bio)
|
||||
bio_for_each_segment(bvec, bio, i) {
|
||||
len = bvec->bv_len;
|
||||
len >>= 9;
|
||||
- nf_call(nfhd_id + NFHD_READ_WRITE, dev->id, 0, dir,
|
||||
- sec >> shift, len >> shift, bvec_to_phys(bvec));
|
||||
+ nfhd_read_write(dev->id, 0, dir, sec >> shift, len >> shift,
|
||||
+ bvec_to_phys(bvec));
|
||||
sec += len;
|
||||
}
|
||||
bio_endio(bio, 0);
|
||||
@@ -152,7 +166,7 @@ static int __init nfhd_init(void)
|
||||
}
|
||||
|
||||
for (i = NFHD_DEV_OFFSET; i < 24; i++) {
|
||||
- if (nf_call(nfhd_id + NFHD_GET_CAPACITY, i, 0, &blocks, &bsize))
|
||||
+ if (nfhd_get_capacity(i, 0, &blocks, &bsize))
|
||||
continue;
|
||||
nfhd_init_one(i, blocks, bsize);
|
||||
}
|
||||
--
|
||||
1.6.2.3
|
||||
|
2665
debian/patches/bugfix/m68k/2.6.29/0013-m68k-Atari-EtherNAT-SMC91C111-driver.patch
vendored
Normal file
2665
debian/patches/bugfix/m68k/2.6.29/0013-m68k-Atari-EtherNAT-SMC91C111-driver.patch
vendored
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
74
debian/patches/bugfix/m68k/2.6.29/0015-m68k-Atari-EtherNAT-warning-fixes.patch
vendored
Normal file
74
debian/patches/bugfix/m68k/2.6.29/0015-m68k-Atari-EtherNAT-warning-fixes.patch
vendored
Normal file
|
@ -0,0 +1,74 @@
|
|||
From 33ded7cff1f63292d0bd87501809e4e9b93572c3 Mon Sep 17 00:00:00 2001
|
||||
From: Geert Uytterhoeven <geert@linux-m68k.org>
|
||||
Date: Tue, 18 Nov 2008 21:07:40 +0100
|
||||
Subject: [PATCH 15/90] m68k: Atari EtherNAT warning fixes
|
||||
|
||||
drivers/net/atari_91C111.c: In function 'smc_rcv':
|
||||
drivers/net/atari_91C111.c:538: warning: passing argument 2 of 'raw_insw' from incompatible pointer type
|
||||
drivers/net/atari_91C111.c: In function 'smc_request_attrib':
|
||||
drivers/net/atari_91C111.c:2100: warning: unused variable 'lp'
|
||||
drivers/net/atari_91C111.c: In function 'smc_release_attrib':
|
||||
drivers/net/atari_91C111.c:2115: warning: unused variable 'lp'
|
||||
drivers/net/atari_91C111.c: In function 'smc_drv_probe':
|
||||
drivers/net/atari_91C111.c:2305: warning: format '%d' expects type 'int', but argument 2 has type 'long unsigned int'
|
||||
|
||||
Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
|
||||
---
|
||||
drivers/net/atari_91C111.c | 4 +---
|
||||
drivers/net/smc91x.h | 4 ++--
|
||||
2 files changed, 3 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/atari_91C111.c b/drivers/net/atari_91C111.c
|
||||
index f6f8a45..c441779 100644
|
||||
--- a/drivers/net/atari_91C111.c
|
||||
+++ b/drivers/net/atari_91C111.c
|
||||
@@ -2097,7 +2097,6 @@ static int smc_request_attrib(struct platform_device *pdev,
|
||||
struct net_device *ndev)
|
||||
{
|
||||
struct resource * res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "smc91x-attrib");
|
||||
- struct smc_local *lp = netdev_priv(ndev);
|
||||
|
||||
if (!res)
|
||||
return 0;
|
||||
@@ -2112,7 +2111,6 @@ static void smc_release_attrib(struct platform_device *pdev,
|
||||
struct net_device *ndev)
|
||||
{
|
||||
struct resource * res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "smc91x-attrib");
|
||||
- struct smc_local *lp = netdev_priv(ndev);
|
||||
|
||||
if (res)
|
||||
release_mem_region(res->start, ATTRIB_SIZE);
|
||||
@@ -2302,7 +2300,7 @@ static int smc_drv_probe(struct platform_device *pdev)
|
||||
timd = 80;
|
||||
else if (timd > 255)
|
||||
timd = 255;
|
||||
- printk(KERN_INFO "Timer D frequency: %d Hz\n", (38400UL/(unsigned int)timd));
|
||||
+ printk(KERN_INFO "Timer D frequency: %u Hz\n", 38400/timd);
|
||||
/* set Timer D data Register */
|
||||
mfp.tim_dt_d = timd; /* 200 Hz */
|
||||
/* start timer D, div = 1:100 */
|
||||
diff --git a/drivers/net/smc91x.h b/drivers/net/smc91x.h
|
||||
index d9285f2..056da1c 100644
|
||||
--- a/drivers/net/smc91x.h
|
||||
+++ b/drivers/net/smc91x.h
|
||||
@@ -1318,7 +1318,7 @@ static const char * chip_ids[ 16 ] = {
|
||||
DATA_REG(lp)); \
|
||||
} \
|
||||
} else if (SMC_16BIT(lp)) \
|
||||
- SMC_outsw(ioaddr, DATA_REG(lp), p, (l) >> 1); \
|
||||
+ SMC_outsw(ioaddr, DATA_REG(lp), (u16 *) p, (l) >> 1); \
|
||||
else if (SMC_8BIT(lp)) \
|
||||
SMC_outsb(ioaddr, DATA_REG(lp), p, l); \
|
||||
} while (0)
|
||||
@@ -1354,7 +1354,7 @@ static const char * chip_ids[ 16 ] = {
|
||||
__len += 2; \
|
||||
SMC_insl(__ioaddr, DATA_REG(lp), __ptr, __len>>2); \
|
||||
} else if (SMC_16BIT(lp)) \
|
||||
- SMC_insw(ioaddr, DATA_REG(lp), p, (l) >> 1); \
|
||||
+ SMC_insw(ioaddr, DATA_REG(lp), (u16 *) p, (l) >> 1); \
|
||||
else if (SMC_8BIT(lp)) \
|
||||
SMC_insb(ioaddr, DATA_REG(lp), p, l); \
|
||||
} while (0)
|
||||
--
|
||||
1.6.2.3
|
||||
|
68
debian/patches/bugfix/m68k/2.6.29/0016-m68k-section-mismatch-fixes-EtherNAT.patch
vendored
Normal file
68
debian/patches/bugfix/m68k/2.6.29/0016-m68k-section-mismatch-fixes-EtherNAT.patch
vendored
Normal file
|
@ -0,0 +1,68 @@
|
|||
From b1628d3847514362d3d4e4f42514f441701727a6 Mon Sep 17 00:00:00 2001
|
||||
From: Michael Schmitz <schmitz@biophys.uni-duesseldorf.de>
|
||||
Date: Sun, 18 Jan 2009 03:10:55 +0100
|
||||
Subject: [PATCH 16/90] m68k: section mismatch fixes: EtherNAT
|
||||
|
||||
add __init annotation
|
||||
[geert] Use __dev{in,ex}it
|
||||
|
||||
Signed-off-by: Michael Schmitz <schmitz@debian.org>
|
||||
Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
|
||||
---
|
||||
drivers/net/atari_91C111.c | 12 ++++++------
|
||||
1 files changed, 6 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/atari_91C111.c b/drivers/net/atari_91C111.c
|
||||
index c441779..af2d255 100644
|
||||
--- a/drivers/net/atari_91C111.c
|
||||
+++ b/drivers/net/atari_91C111.c
|
||||
@@ -1724,7 +1724,7 @@ static const struct ethtool_ops smc_ethtool_ops = {
|
||||
* I just deleted auto_irq.c, since it was never built...
|
||||
* --jgarzik
|
||||
*/
|
||||
-static int __init smc_findirq(struct smc_local *lp)
|
||||
+static int __devinit smc_findirq(struct smc_local *lp)
|
||||
{
|
||||
void __iomem *ioaddr = lp->base;
|
||||
int timeout = 20;
|
||||
@@ -1798,8 +1798,8 @@ static int __init smc_findirq(struct smc_local *lp)
|
||||
* o actually GRAB the irq.
|
||||
* o GRAB the region
|
||||
*/
|
||||
-static int __init smc_probe(struct net_device *dev, void __iomem *ioaddr,
|
||||
- unsigned long irq_flags)
|
||||
+static int __devinit smc_probe(struct net_device *dev, void __iomem *ioaddr,
|
||||
+ unsigned long irq_flags)
|
||||
{
|
||||
struct smc_local *lp = netdev_priv(dev);
|
||||
static int version_printed = 0;
|
||||
@@ -2161,7 +2161,7 @@ static void smc_release_datacs(struct platform_device *pdev, struct net_device *
|
||||
* 0 --> there is a device
|
||||
* anything else, error
|
||||
*/
|
||||
-static int smc_drv_probe(struct platform_device *pdev)
|
||||
+static int __devinit smc_drv_probe(struct platform_device *pdev)
|
||||
{
|
||||
struct smc91x_platdata *pd = pdev->dev.platform_data;
|
||||
struct smc_local *lp;
|
||||
@@ -2324,7 +2324,7 @@ static int smc_drv_probe(struct platform_device *pdev)
|
||||
return ret;
|
||||
}
|
||||
|
||||
-static int smc_drv_remove(struct platform_device *pdev)
|
||||
+static int __devexit smc_drv_remove(struct platform_device *pdev)
|
||||
{
|
||||
struct net_device *ndev = platform_get_drvdata(pdev);
|
||||
struct smc_local *lp = netdev_priv(ndev);
|
||||
@@ -2389,7 +2389,7 @@ static int smc_drv_resume(struct platform_device *dev)
|
||||
|
||||
static struct platform_driver smc_driver = {
|
||||
.probe = smc_drv_probe,
|
||||
- .remove = smc_drv_remove,
|
||||
+ .remove = __devexit_p(smc_drv_remove),
|
||||
.suspend = smc_drv_suspend,
|
||||
.resume = smc_drv_resume,
|
||||
.driver = {
|
||||
--
|
||||
1.6.2.3
|
||||
|
433
debian/patches/bugfix/m68k/2.6.29/0017-m68k-Atari-ROM-port-ISA-adapter-support.patch
vendored
Normal file
433
debian/patches/bugfix/m68k/2.6.29/0017-m68k-Atari-ROM-port-ISA-adapter-support.patch
vendored
Normal file
|
@ -0,0 +1,433 @@
|
|||
From b5ba8e3a8b15b6cb867af63c7311074da12da93a Mon Sep 17 00:00:00 2001
|
||||
From: Michael Schmitz <schmitz@opal.biophys.uni-duesseldorf.de>
|
||||
Date: Tue, 18 Nov 2008 21:01:16 +0100
|
||||
Subject: [PATCH 17/90] m68k: Atari ROM port ISA adapter support
|
||||
|
||||
Atari ROM port ISA adapter support
|
||||
|
||||
FIXME missing last hunk of original patch
|
||||
|
||||
Signed-off-by: Michael Schmitz <schmitz@debian.org>
|
||||
Signed-off-by: Roman Zippel <zippel@linux-m68k.org>
|
||||
Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
|
||||
---
|
||||
arch/m68k/Kconfig | 10 +++
|
||||
arch/m68k/include/asm/io_mm.h | 140 +++++++++++++++++++++++++++++++++++++++-
|
||||
arch/m68k/include/asm/raw_io.h | 116 ++++++++++++++++++++++++++++++++-
|
||||
arch/m68k/kernel/setup.c | 6 ++
|
||||
4 files changed, 268 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/arch/m68k/Kconfig b/arch/m68k/Kconfig
|
||||
index e8b0bfb..c20e0eb 100644
|
||||
--- a/arch/m68k/Kconfig
|
||||
+++ b/arch/m68k/Kconfig
|
||||
@@ -124,6 +124,16 @@ config ATARI
|
||||
this kernel on an Atari, say Y here and browse the material
|
||||
available in <file:Documentation/m68k>; otherwise say N.
|
||||
|
||||
+config ATARI_ROM_ISA
|
||||
+ bool "Atari ROM port ISA adapter support"
|
||||
+ depends on ATARI
|
||||
+ help
|
||||
+ This option enables support for the ROM port ISA adapter used to
|
||||
+ operate ISA cards on Atari. Only 8 bit cards are supported, and
|
||||
+ no interrupt lines are connected.
|
||||
+ The only driver currently using this adapter is the EtherNEC
|
||||
+ driver for RTL8019AS based NE2000 compatible network cards.
|
||||
+
|
||||
config MAC
|
||||
bool "Macintosh support"
|
||||
select MMU_MOTOROLA if MMU
|
||||
diff --git a/arch/m68k/include/asm/io_mm.h b/arch/m68k/include/asm/io_mm.h
|
||||
index 9e673e3..7277fb2 100644
|
||||
--- a/arch/m68k/include/asm/io_mm.h
|
||||
+++ b/arch/m68k/include/asm/io_mm.h
|
||||
@@ -80,9 +80,26 @@ extern unsigned long gg2_isa_base;
|
||||
#endif
|
||||
#endif /* AMIGA_PCMCIA */
|
||||
|
||||
+#ifdef CONFIG_ATARI_ROM_ISA
|
||||
|
||||
+#define enec_isa_read_base 0xfffa0000
|
||||
+#define enec_isa_write_base 0xfffb0000
|
||||
|
||||
-#ifdef CONFIG_ISA
|
||||
+#define ENEC_ISA_IO_B(ioaddr) (enec_isa_read_base+((((unsigned long)(ioaddr))&0x1F)<<9))
|
||||
+#define ENEC_ISA_IO_W(ioaddr) (enec_isa_read_base+((((unsigned long)(ioaddr))&0x1F)<<9))
|
||||
+#define ENEC_ISA_MEM_B(madr) (enec_isa_read_base+((((unsigned long)(madr))&0x1F)<<9))
|
||||
+#define ENEC_ISA_MEM_W(madr) (enec_isa_read_base+((((unsigned long)(madr))&0x1F)<<9))
|
||||
+
|
||||
+#ifndef MULTI_ISA
|
||||
+#define MULTI_ISA 0
|
||||
+#else
|
||||
+#undef MULTI_ISA
|
||||
+#define MULTI_ISA 1
|
||||
+#endif
|
||||
+#endif /* ATARI_ROM_ISA */
|
||||
+
|
||||
+
|
||||
+#if defined(CONFIG_ISA) || defined(CONFIG_ATARI_ROM_ISA)
|
||||
|
||||
#if MULTI_ISA == 0
|
||||
#undef MULTI_ISA
|
||||
@@ -91,6 +108,7 @@ extern unsigned long gg2_isa_base;
|
||||
#define ISA_TYPE_Q40 (1)
|
||||
#define ISA_TYPE_GG2 (2)
|
||||
#define ISA_TYPE_AG (3)
|
||||
+#define ISA_TYPE_ENEC (4)
|
||||
|
||||
#if defined(CONFIG_Q40) && !defined(MULTI_ISA)
|
||||
#define ISA_TYPE ISA_TYPE_Q40
|
||||
@@ -104,6 +122,10 @@ extern unsigned long gg2_isa_base;
|
||||
#define ISA_TYPE ISA_TYPE_GG2
|
||||
#define ISA_SEX 0
|
||||
#endif
|
||||
+#if defined(CONFIG_ATARI_ROM_ISA) && !defined(MULTI_ISA)
|
||||
+#define ISA_TYPE ISA_TYPE_ENEC
|
||||
+#define ISA_SEX 0
|
||||
+#endif
|
||||
|
||||
#ifdef MULTI_ISA
|
||||
extern int isa_type;
|
||||
@@ -131,6 +153,9 @@ static inline u8 __iomem *isa_itb(unsigned long addr)
|
||||
#ifdef CONFIG_AMIGA_PCMCIA
|
||||
case ISA_TYPE_AG: return (u8 __iomem *)AG_ISA_IO_B(addr);
|
||||
#endif
|
||||
+#ifdef CONFIG_ATARI_ROM_ISA
|
||||
+ case ISA_TYPE_ENEC: return (u8 __iomem *)ENEC_ISA_IO_B(addr);
|
||||
+#endif
|
||||
default: return NULL; /* avoid warnings, just in case */
|
||||
}
|
||||
}
|
||||
@@ -147,6 +172,9 @@ static inline u16 __iomem *isa_itw(unsigned long addr)
|
||||
#ifdef CONFIG_AMIGA_PCMCIA
|
||||
case ISA_TYPE_AG: return (u16 __iomem *)AG_ISA_IO_W(addr);
|
||||
#endif
|
||||
+#ifdef CONFIG_ATARI_ROM_ISA
|
||||
+ case ISA_TYPE_ENEC: return (u16 __iomem *)ENEC_ISA_IO_W(addr);
|
||||
+#endif
|
||||
default: return NULL; /* avoid warnings, just in case */
|
||||
}
|
||||
}
|
||||
@@ -173,6 +201,9 @@ static inline u8 __iomem *isa_mtb(unsigned long addr)
|
||||
#ifdef CONFIG_AMIGA_PCMCIA
|
||||
case ISA_TYPE_AG: return (u8 __iomem *)addr;
|
||||
#endif
|
||||
+#ifdef CONFIG_ATARI_ROM_ISA
|
||||
+ case ISA_TYPE_ENEC: return (u8 __iomem *)ENEC_ISA_MEM_B(addr);
|
||||
+#endif
|
||||
default: return NULL; /* avoid warnings, just in case */
|
||||
}
|
||||
}
|
||||
@@ -189,6 +220,9 @@ static inline u16 __iomem *isa_mtw(unsigned long addr)
|
||||
#ifdef CONFIG_AMIGA_PCMCIA
|
||||
case ISA_TYPE_AG: return (u16 __iomem *)addr;
|
||||
#endif
|
||||
+#ifdef CONFIG_ATARI_ROM_ISA
|
||||
+ case ISA_TYPE_ENEC: return (u16 __iomem *)ENEC_ISA_MEM_W(addr);
|
||||
+#endif
|
||||
default: return NULL; /* avoid warnings, just in case */
|
||||
}
|
||||
}
|
||||
@@ -210,6 +244,34 @@ static inline u16 __iomem *isa_mtw(unsigned long addr)
|
||||
(ISA_SEX ? out_be16(isa_mtw((unsigned long)(p)),(val)) \
|
||||
: out_le16(isa_mtw((unsigned long)(p)),(val)))
|
||||
|
||||
+#ifdef CONFIG_ATARI_ROM_ISA
|
||||
+#define isa_rom_inb(port) rom_in_8(isa_itb(port))
|
||||
+#define isa_rom_inw(port) \
|
||||
+ (ISA_SEX ? rom_in_be16(isa_itw(port)) \
|
||||
+ : rom_in_le16(isa_itw(port)))
|
||||
+#define isa_rom_inl(port) \
|
||||
+ (ISA_SEX ? rom_in_be32(isa_itw(port)) \
|
||||
+ : rom_in_le32(isa_itw(port)))
|
||||
+
|
||||
+#define isa_rom_outb(val, port) rom_out_8(isa_itb(port), (val))
|
||||
+#define isa_rom_outw(val, port) \
|
||||
+ (ISA_SEX ? rom_out_be16(isa_itw(port), (val)) \
|
||||
+ : rom_out_le16(isa_itw(port), (val)))
|
||||
+#define isa_rom_outl(val, port) \
|
||||
+ (ISA_SEX ? rom_out_be32(isa_itw(port), (val)) \
|
||||
+ : rom_out_le32(isa_itw(port), (val)))
|
||||
+
|
||||
+#define isa_rom_readb(p) rom_in_8(isa_mtb((unsigned long)(p)))
|
||||
+#define isa_rom_readw(p) \
|
||||
+ (ISA_SEX ? rom_in_be16(isa_mtw((unsigned long)(p))) \
|
||||
+ : rom_in_le16(isa_mtw((unsigned long)(p))))
|
||||
+
|
||||
+#define isa_rom_writeb(val, p) rom_out_8(isa_mtb((unsigned long)(p)), (val))
|
||||
+#define isa_rom_writew(val, p) \
|
||||
+ (ISA_SEX ? rom_out_be16(isa_mtw((unsigned long)(p)), (val)) \
|
||||
+ : rom_out_le16(isa_mtw((unsigned long)(p)), (val)))
|
||||
+#endif /* CONFIG_ATARI_ROM_ISA */
|
||||
+
|
||||
static inline void isa_delay(void)
|
||||
{
|
||||
switch(ISA_TYPE)
|
||||
@@ -223,6 +285,9 @@ static inline void isa_delay(void)
|
||||
#ifdef CONFIG_AMIGA_PCMCIA
|
||||
case ISA_TYPE_AG: break;
|
||||
#endif
|
||||
+#ifdef CONFIG_ATARI_ROM_ISA
|
||||
+ case ISA_TYPE_ENEC: break;
|
||||
+#endif
|
||||
default: break; /* avoid warnings */
|
||||
}
|
||||
}
|
||||
@@ -254,6 +319,39 @@ static inline void isa_delay(void)
|
||||
raw_outsw_swapw(isa_itw(port), (u16 *)(buf), (nr)<<1))
|
||||
|
||||
|
||||
+#ifdef CONFIG_ATARI_ROM_ISA
|
||||
+#define isa_rom_inb_p(p) ({ u8 _v = isa_rom_inb(p); isa_delay(); _v; })
|
||||
+#define isa_rom_inw_p(p) ({ u16 _v = isa_rom_inw(p); isa_delay(); _v; })
|
||||
+#define isa_rom_inl_p(p) ({ u32 _v = isa_rom_inl(p); isa_delay(); _v; })
|
||||
+#define isa_rom_outb_p(v, p) ({ isa_rom_outb((v), (p)); isa_delay(); })
|
||||
+#define isa_rom_outw_p(v, p) ({ isa_rom_outw((v), (p)); isa_delay(); })
|
||||
+#define isa_rom_outl_p(v, p) ({ isa_rom_outl((v), (p)); isa_delay(); })
|
||||
+
|
||||
+#define isa_rom_insb(port, buf, nr) raw_rom_insb(isa_itb(port), (u8 *)(buf), (nr))
|
||||
+
|
||||
+#define isa_rom_insw(port, buf, nr) \
|
||||
+ (ISA_SEX ? raw_rom_insw(isa_itw(port), (u16 *)(buf), (nr)) : \
|
||||
+ raw_rom_insw_swapw(isa_itw(port), (u16 *)(buf), (nr)))
|
||||
+
|
||||
+#define isa_rom_insl(port, buf, nr) \
|
||||
+ (ISA_SEX ? raw_rom_insl(isa_itw(port), (u32 *)(buf), (nr)) : \
|
||||
+ raw_rom_insw_swapw(isa_itw(port), (u16 *)(buf), (nr)<<1))
|
||||
+
|
||||
+#define isa_rom_outsb(port, buf, nr) raw_rom_outsb(isa_itb(port), (u8 *)(buf), (nr))
|
||||
+
|
||||
+#define isa_rom_outsw(port, buf, nr) \
|
||||
+ (ISA_SEX ? raw_rom_outsw(isa_itw(port), (u16 *)(buf), (nr)) : \
|
||||
+ raw_rom_outsw_swapw(isa_itw(port), (u16 *)(buf), (nr)))
|
||||
+
|
||||
+#define isa_rom_outsl(port, buf, nr) \
|
||||
+ (ISA_SEX ? raw_rom_outsl(isa_itw(port), (u32 *)(buf), (nr)) : \
|
||||
+ raw_rom_outsw_swapw(isa_itw(port), (u16 *)(buf), (nr)<<1))
|
||||
+#endif /* CONFIG_ATARI_ROM_ISA */
|
||||
+
|
||||
+#endif /* CONFIG_ISA || CONFIG_ATARI_ROM_ISA */
|
||||
+
|
||||
+
|
||||
+#if defined(CONFIG_ISA) && !defined(CONFIG_ATARI_ROM_ISA)
|
||||
#define inb isa_inb
|
||||
#define inb_p isa_inb_p
|
||||
#define outb isa_outb
|
||||
@@ -276,9 +374,45 @@ static inline void isa_delay(void)
|
||||
#define readw isa_readw
|
||||
#define writeb isa_writeb
|
||||
#define writew isa_writew
|
||||
+#endif /* CONFIG_ISA && !CONFIG_ATARI_ROM_ISA */
|
||||
+
|
||||
+#ifdef CONFIG_ATARI_ROM_ISA
|
||||
+/*
|
||||
+ * kernel with both ROM port ISA and IDE compiled in, those have
|
||||
+ * conflicting defs for in/out. Simply consider port < 1024
|
||||
+ * ROM port ISA and everything else regular ISA for IDE. read,write not defined
|
||||
+ * in this case
|
||||
+ */
|
||||
+#define inb(port) ((port) < 1024 ? isa_rom_inb(port) : in_8(port))
|
||||
+#define inb_p(port) ((port) < 1024 ? isa_rom_inb_p(port) : in_8(port))
|
||||
+#define inw(port) ((port) < 1024 ? isa_rom_inw(port) : in_le16(port))
|
||||
+#define inw_p(port) ((port) < 1024 ? isa_rom_inw_p(port) : in_le16(port))
|
||||
+#define inl(port) ((port) < 1024 ? isa_rom_inl(port) : in_le32(port))
|
||||
+#define inl_p(port) ((port) < 1024 ? isa_rom_inl_p(port) : in_le32(port))
|
||||
+
|
||||
+#define outb(val, port) ((port) < 1024 ? isa_rom_outb((val), (port)) : out_8((port), (val)))
|
||||
+#define outb_p(val, port) ((port) < 1024 ? isa_rom_outb_p((val), (port)) : out_8((port), (val)))
|
||||
+#define outw(val, port) ((port) < 1024 ? isa_rom_outw((val), (port)) : out_le16((port), (val)))
|
||||
+#define outw_p(val, port) ((port) < 1024 ? isa_rom_outw_p((val), (port)) : out_le16((port), (val)))
|
||||
+#define outl(val, port) ((port) < 1024 ? isa_rom_outl((val), (port)) : out_le32((port), (val)))
|
||||
+#define outl_p(val, port) ((port) < 1024 ? isa_rom_outl_p((val), (port)) : out_le32((port), (val)))
|
||||
+
|
||||
+#define insb isa_rom_insb
|
||||
+#define insw isa_rom_insw
|
||||
+#define insl isa_rom_insl
|
||||
+#define outsb isa_rom_outsb
|
||||
+#define outsw isa_rom_outsw
|
||||
+#define outsl isa_rom_outsl
|
||||
|
||||
-#else /* CONFIG_ISA */
|
||||
+#define readb isa_readb
|
||||
+#define readw isa_readw
|
||||
+#define writeb isa_writeb
|
||||
+#define writew isa_writew
|
||||
+#define readsl raw_insl
|
||||
+#define writesl raw_outsl
|
||||
+#endif /* CONFIG_ATARI_ROM_ISA */
|
||||
|
||||
+#if !defined(CONFIG_ISA) && !defined(CONFIG_ATARI_ROM_ISA)
|
||||
/*
|
||||
* We need to define dummy functions for GENERIC_IOMAP support.
|
||||
*/
|
||||
@@ -306,7 +440,7 @@ static inline void isa_delay(void)
|
||||
#define readw(addr) in_le16(addr)
|
||||
#define writew(val,addr) out_le16((addr),(val))
|
||||
|
||||
-#endif /* CONFIG_ISA */
|
||||
+#endif /* !CONFIG_ISA && !CONFIG_ATARI_ROM_ISA */
|
||||
|
||||
#define readl(addr) in_le32(addr)
|
||||
#define writel(val,addr) out_le32((addr),(val))
|
||||
diff --git a/arch/m68k/include/asm/raw_io.h b/arch/m68k/include/asm/raw_io.h
|
||||
index d9eb983..b1d9119 100644
|
||||
--- a/arch/m68k/include/asm/raw_io.h
|
||||
+++ b/arch/m68k/include/asm/raw_io.h
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
#ifdef __KERNEL__
|
||||
|
||||
-#include <asm/types.h>
|
||||
+#include <asm/byteorder.h>
|
||||
|
||||
|
||||
/* Values for nocacheflag and cmode */
|
||||
@@ -60,6 +60,46 @@ extern void __iounmap(void *addr, unsigned long size);
|
||||
#define __raw_writew(val,addr) out_be16((addr),(val))
|
||||
#define __raw_writel(val,addr) out_be32((addr),(val))
|
||||
|
||||
+/*
|
||||
+ * Atari ROM port (cartridge port) ISA adapter, used for the EtherNEC NE2000
|
||||
+ * network card driver.
|
||||
+ * The ISA adapter connects address lines A9-A13 to ISA address lines A0-A4,
|
||||
+ * and hardwires the rest of the ISA addresses for a base address of 0x300.
|
||||
+ *
|
||||
+ * Data lines D8-D15 are connected to ISA data lines D0-D7 for reading.
|
||||
+ * For writes, address lines A1-A8 are latched to ISA data lines D0-D7
|
||||
+ * (meaning the bit pattern on A1-A8 can be read back as byte).
|
||||
+ *
|
||||
+ * Reads and writes are byte only.
|
||||
+ */
|
||||
+
|
||||
+#if defined(CONFIG_ATARI_ROM_ISA)
|
||||
+#define rom_in_8(addr) \
|
||||
+ ({ u16 __v = (*(__force volatile u16 *) (addr)); __v >>= 8; __v; })
|
||||
+#define rom_in_be16(addr) \
|
||||
+ ({ u16 __v = (*(__force volatile u16 *) (addr)); __v >>= 8; __v; })
|
||||
+#define rom_in_be32(addr) \
|
||||
+ ({ u32 __v = (*(__force volatile u32 *) (addr)); __v >>= 8; __v; })
|
||||
+#define rom_in_le16(addr) \
|
||||
+ ({ u16 __v = le16_to_cpu(*(__force volatile u16 *) (addr)); __v >>= 8; __v; })
|
||||
+#define rom_in_le32(addr) \
|
||||
+ ({ u32 __v = le32_to_cpu(*(__force volatile u32 *) (addr)); __v >>= 8; __v; })
|
||||
+
|
||||
+#define rom_out_8(addr, b) ({u8 __w, __v = (b); __w = ((*(__force volatile u8 *) ((addr) + 0x10000 + (__v<<1)))); })
|
||||
+#define rom_out_be16(addr, w) ({u16 __w, __v = (w); __w = ((*(__force volatile u16 *) ((addr) + 0x10000 + (__v<<1)))); })
|
||||
+#define rom_out_be32(addr, l) ({u32 __w, __v = (l); __w = ((*(__force volatile u32 *) ((addr) + 0x10000 + (__v<<1)))); })
|
||||
+#define rom_out_le16(addr, w) ({u16 __w, __v = cpu_to_le16(w); __w = ((*(__force volatile u16 *) ((addr) + 0x10000 + (__v<<1)))); })
|
||||
+#define rom_out_le32(addr, l) ({u32 __w, __v = cpu_to_le32(l); __w = ((*(__force volatile u32 *) ((addr) + 0x10000 + (__v<<1)))); })
|
||||
+
|
||||
+#define raw_rom_inb rom_in_8
|
||||
+#define raw_rom_inw rom_in_be16
|
||||
+#define raw_rom_inl rom_in_be32
|
||||
+
|
||||
+#define raw_rom_outb(val, port) rom_out_8((port), (val))
|
||||
+#define raw_rom_outw(val, port) rom_out_be16((port), (val))
|
||||
+#define raw_rom_outl(val, port) rom_out_be32((port), (val))
|
||||
+#endif /* CONFIG_ATARI_ROM_ISA */
|
||||
+
|
||||
static inline void raw_insb(volatile u8 __iomem *port, u8 *buf, unsigned int len)
|
||||
{
|
||||
unsigned int i;
|
||||
@@ -342,6 +382,80 @@ static inline void raw_outsw_swapw(volatile u16 __iomem *port, const u16 *buf,
|
||||
: "d0", "a0", "a1", "d6");
|
||||
}
|
||||
|
||||
+
|
||||
+#if defined(CONFIG_ATARI_ROM_ISA)
|
||||
+static inline void raw_rom_insb(volatile u8 __iomem *port, u8 *buf, unsigned int len)
|
||||
+{
|
||||
+ unsigned int i;
|
||||
+
|
||||
+ for (i = 0; i < len; i++)
|
||||
+ *buf++ = rom_in_8(port);
|
||||
+}
|
||||
+
|
||||
+static inline void raw_rom_outsb(volatile u8 __iomem *port, const u8 *buf,
|
||||
+ unsigned int len)
|
||||
+{
|
||||
+ unsigned int i;
|
||||
+
|
||||
+ for (i = 0; i < len; i++)
|
||||
+ rom_out_8(port, *buf++);
|
||||
+}
|
||||
+
|
||||
+static inline void raw_rom_insw(volatile u16 __iomem *port, u16 *buf,
|
||||
+ unsigned int nr)
|
||||
+{
|
||||
+ unsigned int i;
|
||||
+
|
||||
+ for (i = 0; i < nr; i++)
|
||||
+ *buf++ = rom_in_be16(port);
|
||||
+}
|
||||
+
|
||||
+static inline void raw_rom_outsw(volatile u16 __iomem *port, const u16 *buf,
|
||||
+ unsigned int nr)
|
||||
+{
|
||||
+ unsigned int i;
|
||||
+
|
||||
+ for (i = 0; i < nr; i++)
|
||||
+ rom_out_be16(port, *buf++);
|
||||
+}
|
||||
+
|
||||
+static inline void raw_rom_insw_swapw(volatile u16 __iomem *port, u16 *buf,
|
||||
+ unsigned int nr)
|
||||
+{
|
||||
+ unsigned int i;
|
||||
+
|
||||
+ for (i = 0; i < nr; i++)
|
||||
+ *buf++ = rom_in_le16(port);
|
||||
+}
|
||||
+
|
||||
+static inline void raw_rom_outsw_swapw(volatile u16 __iomem *port, const u16 *buf,
|
||||
+ unsigned int nr)
|
||||
+{
|
||||
+ unsigned int i;
|
||||
+
|
||||
+ for (i = 0; i < nr; i++)
|
||||
+ rom_out_le16(port, *buf++);
|
||||
+}
|
||||
+
|
||||
+static inline void raw_rom_insl(volatile u16 __iomem *port, u32 *buf,
|
||||
+ unsigned int nr)
|
||||
+{
|
||||
+ unsigned int i;
|
||||
+
|
||||
+ for (i = 0; i < nr; i++)
|
||||
+ *buf++ = rom_in_be32(port);
|
||||
+}
|
||||
+
|
||||
+static inline void raw_rom_outsl(volatile u16 __iomem *port, const u32 *buf,
|
||||
+ unsigned int nr)
|
||||
+{
|
||||
+ unsigned int i;
|
||||
+
|
||||
+ for (i = 0; i < nr; i++)
|
||||
+ rom_out_be32(port, *buf++);
|
||||
+}
|
||||
+#endif /* CONFIG_ATARI_ROM_ISA */
|
||||
+
|
||||
#endif /* __KERNEL__ */
|
||||
|
||||
#endif /* _RAW_IO_H */
|
||||
diff --git a/arch/m68k/kernel/setup.c b/arch/m68k/kernel/setup.c
|
||||
index 17b2b62..594cbd1 100644
|
||||
--- a/arch/m68k/kernel/setup.c
|
||||
+++ b/arch/m68k/kernel/setup.c
|
||||
@@ -376,6 +376,12 @@ void __init setup_arch(char **cmdline_p)
|
||||
isa_sex = 1;
|
||||
}
|
||||
#endif
|
||||
+#ifdef CONFIG_ATARI_ROM_ISA
|
||||
+ if (MACH_IS_ATARI) {
|
||||
+ isa_type = ISA_TYPE_ENEC;
|
||||
+ isa_sex = 0;
|
||||
+ }
|
||||
+#endif
|
||||
#endif
|
||||
}
|
||||
|
||||
--
|
||||
1.6.2.3
|
||||
|
75
debian/patches/bugfix/m68k/2.6.29/0018-m68k-Atari-io.h-fixes-for-EtherNAT-driver.patch
vendored
Normal file
75
debian/patches/bugfix/m68k/2.6.29/0018-m68k-Atari-io.h-fixes-for-EtherNAT-driver.patch
vendored
Normal file
|
@ -0,0 +1,75 @@
|
|||
From e29cbbe4d79ef0d1e2525fcdee4883e80da10540 Mon Sep 17 00:00:00 2001
|
||||
From: Michael Schmitz <schmitz@biophys.uni-duesseldorf.de>
|
||||
Date: Tue, 18 Nov 2008 21:01:16 +0100
|
||||
Subject: [PATCH 18/90] m68k: Atari io.h fixes for EtherNAT driver
|
||||
|
||||
This patch fixes errors I introduced in preparing the io.h code for ROM port
|
||||
ISA access (for the EtherNEC driver, originally).
|
||||
|
||||
My assumption was that insb/outsb and friends should be mapped to the ROM
|
||||
port accessors unconditionally, and the read*/write* functions should behave
|
||||
like regular ISA accesses. As it turned out, it's just the other way 'round.
|
||||
"Regular" ISA readb would apply the ROM port address mapping without
|
||||
actually using the correct access function.
|
||||
|
||||
ins*/outs* are conditionalized now (port < 1024 goes to the ROM port, all
|
||||
else via MMIO), read*/write* use straight MMIO no questions asked.
|
||||
|
||||
This fixes register access problems for the EtherNAT (SMC91C111) when used
|
||||
together with the EtherNEC (ROM port NE2k clone). Tested on my Falcon.
|
||||
|
||||
Signed-off-by: Michael Schmitz <schmitz@debian.org>
|
||||
Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
|
||||
---
|
||||
arch/m68k/include/asm/io_mm.h | 27 +++++++++++++++------------
|
||||
1 files changed, 15 insertions(+), 12 deletions(-)
|
||||
|
||||
diff --git a/arch/m68k/include/asm/io_mm.h b/arch/m68k/include/asm/io_mm.h
|
||||
index 7277fb2..e2a8981 100644
|
||||
--- a/arch/m68k/include/asm/io_mm.h
|
||||
+++ b/arch/m68k/include/asm/io_mm.h
|
||||
@@ -380,8 +380,8 @@ static inline void isa_delay(void)
|
||||
/*
|
||||
* kernel with both ROM port ISA and IDE compiled in, those have
|
||||
* conflicting defs for in/out. Simply consider port < 1024
|
||||
- * ROM port ISA and everything else regular ISA for IDE. read,write not defined
|
||||
- * in this case
|
||||
+ * ROM port ISA and everything else regular ISA for IDE. read,write defined
|
||||
+ * below.
|
||||
*/
|
||||
#define inb(port) ((port) < 1024 ? isa_rom_inb(port) : in_8(port))
|
||||
#define inb_p(port) ((port) < 1024 ? isa_rom_inb_p(port) : in_8(port))
|
||||
@@ -397,17 +397,20 @@ static inline void isa_delay(void)
|
||||
#define outl(val, port) ((port) < 1024 ? isa_rom_outl((val), (port)) : out_le32((port), (val)))
|
||||
#define outl_p(val, port) ((port) < 1024 ? isa_rom_outl_p((val), (port)) : out_le32((port), (val)))
|
||||
|
||||
-#define insb isa_rom_insb
|
||||
-#define insw isa_rom_insw
|
||||
-#define insl isa_rom_insl
|
||||
-#define outsb isa_rom_outsb
|
||||
-#define outsw isa_rom_outsw
|
||||
-#define outsl isa_rom_outsl
|
||||
+#define insb(port, buf, nr) ((port) < 1024 ? isa_rom_insb((port), (buf), (nr)) : isa_insb((port), (buf), (nr)))
|
||||
+#define insw(port, buf, nr) ((port) < 1024 ? isa_rom_insw((port), (buf), (nr)) : isa_insw((port), (buf), (nr)))
|
||||
+#define insl(port, buf, nr) ((port) < 1024 ? isa_rom_insl((port), (buf), (nr)) : isa_insl((port), (buf), (nr)))
|
||||
+#define outsb(port, buf, nr) ((port) < 1024 ? isa_rom_outsb((port), (buf), (nr)) : isa_outsb((port), (buf), (nr)))
|
||||
+#define outsw(port, buf, nr) ((port) < 1024 ? isa_rom_outsw((port), (buf), (nr)) : isa_outsw((port), (buf), (nr)))
|
||||
+#define outsl(port, buf, nr) ((port) < 1024 ? isa_rom_outsl((port), (buf), (nr)) : isa_outsl((port), (buf), (nr)))
|
||||
|
||||
-#define readb isa_readb
|
||||
-#define readw isa_readw
|
||||
-#define writeb isa_writeb
|
||||
-#define writew isa_writew
|
||||
+#define readb(addr) in_8(addr)
|
||||
+#define writeb(val,addr) out_8((addr),(val))
|
||||
+#define readw(addr) in_le16(addr)
|
||||
+#define writew(val,addr) out_le16((addr),(val))
|
||||
+
|
||||
+#define readsw raw_insw
|
||||
+#define writesw raw_outsw
|
||||
#define readsl raw_insl
|
||||
#define writesl raw_outsl
|
||||
#endif /* CONFIG_ATARI_ROM_ISA */
|
||||
--
|
||||
1.6.2.3
|
||||
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,72 @@
|
|||
From 92a1a6353ff9584659dd4bb5a6f89db4298362eb Mon Sep 17 00:00:00 2001
|
||||
From: Michael Schmitz <schmitz@debian.org>
|
||||
Date: Tue, 18 Nov 2008 21:01:18 +0100
|
||||
Subject: [PATCH 20/90] atari-ethernec-fixes.diff
|
||||
|
||||
Use wrapper around ei_interrupt to prevent delivery of (timer!) interrupts
|
||||
before card is opened.
|
||||
|
||||
Limit IO addresses to 0x300 (this is hardwired on the bus adapter anyway, and
|
||||
the card needs to be programmed to use that IO in some way before the adapter
|
||||
can work).
|
||||
|
||||
Preset io=0x300 for module use.
|
||||
|
||||
Signed-off-by: Michael Schmitz <schmitz@debian.org>
|
||||
Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
|
||||
---
|
||||
drivers/net/atari_ethernec.c | 16 ++++++++++++----
|
||||
1 files changed, 12 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/atari_ethernec.c b/drivers/net/atari_ethernec.c
|
||||
index 97f683a..74eeae4 100644
|
||||
--- a/drivers/net/atari_ethernec.c
|
||||
+++ b/drivers/net/atari_ethernec.c
|
||||
@@ -124,7 +124,7 @@ static const char version2[] =
|
||||
/* A zero-terminated list of I/O addresses to be probed at boot. */
|
||||
#ifndef MODULE
|
||||
static unsigned int netcard_portlist[] __initdata = {
|
||||
- 0x300, 0x280, 0x320, 0x340, 0x360, 0x380, 0
|
||||
+ 0x300, 0
|
||||
};
|
||||
#endif
|
||||
|
||||
@@ -227,6 +227,14 @@ static struct delayed_work tqueue;
|
||||
|
||||
static struct net_device *poll_dev = NULL;
|
||||
|
||||
+irqreturn_t atari_ei_interrupt(int irq, void *dev_id)
|
||||
+{
|
||||
+ struct net_device *dev = dev_id;
|
||||
+ if (netif_running(dev))
|
||||
+ return ei_interrupt(dev->irq, dev);
|
||||
+ return IRQ_NONE;
|
||||
+}
|
||||
+
|
||||
static void atari_ethernec_int(struct work_struct *work)
|
||||
{
|
||||
struct net_device *dev = poll_dev;
|
||||
@@ -619,7 +627,7 @@ static int __init ne_probe1(struct net_device *dev, int ioaddr)
|
||||
mfp.tim_ct_cd = (mfp.tim_ct_cd & 0xf0) | 0x6;
|
||||
}
|
||||
/* Must make this shared in case other timer ints are needed */
|
||||
- ret = request_irq(dev->irq, ei_interrupt, IRQF_SHARED, name, dev);
|
||||
+ ret = request_irq(dev->irq, atari_ei_interrupt, IRQF_SHARED, name, dev);
|
||||
if (ret) {
|
||||
printk(" unable to get IRQ %d (errno=%d), polling instead.\n",
|
||||
dev->irq, ret);
|
||||
@@ -941,9 +949,9 @@ retry:
|
||||
|
||||
|
||||
#ifdef MODULE
|
||||
-#define MAX_NE_CARDS 4 /* Max number of NE cards per module */
|
||||
+#define MAX_NE_CARDS 1 /* Max number of NE cards per module */
|
||||
static struct net_device *dev_ne[MAX_NE_CARDS];
|
||||
-static int io[MAX_NE_CARDS];
|
||||
+static int io[MAX_NE_CARDS] = { 0x300 };
|
||||
static int irq[MAX_NE_CARDS];
|
||||
static int bad[MAX_NE_CARDS]; /* 0xbad = bad sig or no reset ack */
|
||||
|
||||
--
|
||||
1.6.2.3
|
||||
|
39
debian/patches/bugfix/m68k/2.6.29/0021-m68k-Atari-SCC-serial-driver-needs-atari_SCC_init_d.patch
vendored
Normal file
39
debian/patches/bugfix/m68k/2.6.29/0021-m68k-Atari-SCC-serial-driver-needs-atari_SCC_init_d.patch
vendored
Normal file
|
@ -0,0 +1,39 @@
|
|||
From ab3492e8941eb1b7fea49c449f6d05f302c40bed Mon Sep 17 00:00:00 2001
|
||||
From: Geert Uytterhoeven <geert@linux-m68k.org>
|
||||
Date: Tue, 18 Nov 2008 20:54:05 +0100
|
||||
Subject: [PATCH 21/90] m68k: Atari SCC serial driver needs atari_SCC_init_done
|
||||
|
||||
commit 5575d0a3c9676b2886adad67dd4b2ac126a49f1f ("m68k/atari/debug.c: possible
|
||||
cleanups") removed atari_SCC_init_done, which we now need again
|
||||
|
||||
Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
|
||||
---
|
||||
arch/m68k/atari/debug.c | 5 +++++
|
||||
1 files changed, 5 insertions(+), 0 deletions(-)
|
||||
|
||||
diff --git a/arch/m68k/atari/debug.c b/arch/m68k/atari/debug.c
|
||||
index 28efdc3..24dd582 100644
|
||||
--- a/arch/m68k/atari/debug.c
|
||||
+++ b/arch/m68k/atari/debug.c
|
||||
@@ -20,6 +20,10 @@
|
||||
#include <asm/atarihw.h>
|
||||
#include <asm/atariints.h>
|
||||
|
||||
+/* Flag that Modem1 port is already initialized and used */
|
||||
+int atari_SCC_init_done;
|
||||
+EXPORT_SYMBOL(atari_SCC_init_done);
|
||||
+
|
||||
/* Can be set somewhere, if a SCC master reset has already be done and should
|
||||
* not be repeated; used by kgdb */
|
||||
int atari_SCC_reset_done;
|
||||
@@ -259,6 +263,7 @@ static void __init atari_init_scc_port(int cflag)
|
||||
SCC_WRITE(5, reg5 | 8);
|
||||
|
||||
atari_SCC_reset_done = 1;
|
||||
+ atari_SCC_init_done = 1;
|
||||
}
|
||||
|
||||
static void __init atari_init_midi_port(int cflag)
|
||||
--
|
||||
1.6.2.3
|
||||
|
48
debian/patches/bugfix/m68k/2.6.29/0022-m68k-Atari-SCC-serial-driver-needs-CONFIG_ATARI_SCC.patch
vendored
Normal file
48
debian/patches/bugfix/m68k/2.6.29/0022-m68k-Atari-SCC-serial-driver-needs-CONFIG_ATARI_SCC.patch
vendored
Normal file
|
@ -0,0 +1,48 @@
|
|||
From 40718f8733787dfbfca1b5f8ed63eeea6fddbd5b Mon Sep 17 00:00:00 2001
|
||||
From: Geert Uytterhoeven <geert@linux-m68k.org>
|
||||
Date: Tue, 18 Nov 2008 20:54:05 +0100
|
||||
Subject: [PATCH 22/90] m68k: Atari SCC serial driver needs CONFIG_ATARI_SCC
|
||||
|
||||
commit 7ccaee5cadd7a771773bbb878e139697511ebdde ("m68k/Atari: remove the dead
|
||||
ATARI_SCC{,_DMA} options") removed CONFIG_ATARI_SCC, which we now need again
|
||||
|
||||
Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
|
||||
---
|
||||
arch/m68k/Kconfig | 14 +++++++++++++-
|
||||
1 files changed, 13 insertions(+), 1 deletions(-)
|
||||
|
||||
diff --git a/arch/m68k/Kconfig b/arch/m68k/Kconfig
|
||||
index c20e0eb..5af0e90 100644
|
||||
--- a/arch/m68k/Kconfig
|
||||
+++ b/arch/m68k/Kconfig
|
||||
@@ -514,6 +514,18 @@ config ATARI_MFPSER
|
||||
Note for Falcon users: You also have an MFP port, it's just not
|
||||
wired to the outside... But you could use the port under Linux.
|
||||
|
||||
+config ATARI_SCC
|
||||
+ tristate "Atari SCC serial support"
|
||||
+ depends on ATARI
|
||||
+ ---help---
|
||||
+ If you have serial ports based on a Zilog SCC chip (Modem2, Serial2,
|
||||
+ LAN) and like to use them under Linux, say Y. All built-in SCC's are
|
||||
+ supported (TT, MegaSTE, Falcon), and also the ST-ESCC. If you have
|
||||
+ two connectors for channel A (Serial2 and LAN), they are visible as
|
||||
+ two separate devices.
|
||||
+
|
||||
+ To compile this driver as a module, choose M here.
|
||||
+
|
||||
config ATARI_MIDI
|
||||
tristate "Atari MIDI serial support"
|
||||
depends on ATARI
|
||||
@@ -630,7 +642,7 @@ config DN_SERIAL
|
||||
|
||||
config SERIAL_CONSOLE
|
||||
bool "Support for serial port console"
|
||||
- depends on (AMIGA || ATARI || MAC || SUN3 || SUN3X || VME || APOLLO) && (ATARI_MFPSER=y || ATARI_MIDI=y || MAC_SCC=y || AMIGA_BUILTIN_SERIAL=y || GVPIOEXT=y || MULTIFACE_III_TTY=y || SERIAL=y || MVME147_SCC || SERIAL167 || MVME162_SCC || BVME6000_SCC || DN_SERIAL)
|
||||
+ depends on (AMIGA || ATARI || MAC || SUN3 || SUN3X || VME || APOLLO) && (ATARI_MFPSER=y || ATARI_SCC=y || ATARI_MIDI=y || MAC_SCC=y || AMIGA_BUILTIN_SERIAL=y || GVPIOEXT=y || MULTIFACE_III_TTY=y || SERIAL=y || MVME147_SCC || SERIAL167 || MVME162_SCC || BVME6000_SCC || DN_SERIAL)
|
||||
---help---
|
||||
If you say Y here, it will be possible to use a serial port as the
|
||||
system console (the system console is the device which receives all
|
||||
--
|
||||
1.6.2.3
|
||||
|
File diff suppressed because it is too large
Load Diff
1336
debian/patches/bugfix/m68k/2.6.29/0024-m68k-Atari-SCC-serial-driver-checkpatch-cleanups.patch
vendored
Normal file
1336
debian/patches/bugfix/m68k/2.6.29/0024-m68k-Atari-SCC-serial-driver-checkpatch-cleanups.patch
vendored
Normal file
File diff suppressed because it is too large
Load Diff
197
debian/patches/bugfix/m68k/2.6.29/0025-m68k-Atari-SCC-serial-driver-gs-update.patch
vendored
Normal file
197
debian/patches/bugfix/m68k/2.6.29/0025-m68k-Atari-SCC-serial-driver-gs-update.patch
vendored
Normal file
|
@ -0,0 +1,197 @@
|
|||
From 176ff3ea66243e305f40e76638e7a6dced0f0cb8 Mon Sep 17 00:00:00 2001
|
||||
From: Geert Uytterhoeven <geert@linux-m68k.org>
|
||||
Date: Tue, 18 Nov 2008 20:54:07 +0100
|
||||
Subject: [PATCH 25/90] m68k: Atari SCC serial driver gs update
|
||||
|
||||
Update for commit commit b5391e29f428d11755ca2c91074c6db6f5c69d7c ("gs: use
|
||||
tty_port"), which moved some fields
|
||||
|
||||
Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
|
||||
---
|
||||
drivers/char/atari_scc.c | 59 +++++++++++++++++++++++----------------------
|
||||
1 files changed, 30 insertions(+), 29 deletions(-)
|
||||
|
||||
diff --git a/drivers/char/atari_scc.c b/drivers/char/atari_scc.c
|
||||
index 982de52..335aeca 100644
|
||||
--- a/drivers/char/atari_scc.c
|
||||
+++ b/drivers/char/atari_scc.c
|
||||
@@ -269,8 +269,8 @@ static void scc_init_portstructs(void)
|
||||
#ifdef NEW_WRITE_LOCKING
|
||||
port->gs.port_write_sem = MUTEX;
|
||||
#endif
|
||||
- init_waitqueue_head(&port->gs.open_wait);
|
||||
- init_waitqueue_head(&port->gs.close_wait);
|
||||
+ init_waitqueue_head(&port->gs.port.open_wait);
|
||||
+ init_waitqueue_head(&port->gs.port.close_wait);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -595,7 +595,7 @@ static irqreturn_t scc_rx_int(int irq, void *data)
|
||||
{
|
||||
unsigned char ch;
|
||||
struct scc_port *port = data;
|
||||
- struct tty_struct *tty = port->gs.tty;
|
||||
+ struct tty_struct *tty = port->gs.port.tty;
|
||||
|
||||
SCC_ACCESS_INIT(port);
|
||||
pr_debug("SCC: rx_int ...\n");
|
||||
@@ -638,7 +638,7 @@ static irqreturn_t scc_rx_int(int irq, void *data)
|
||||
static irqreturn_t scc_spcond_int(int irq, void *data)
|
||||
{
|
||||
struct scc_port *port = data;
|
||||
- struct tty_struct *tty = port->gs.tty;
|
||||
+ struct tty_struct *tty = port->gs.port.tty;
|
||||
unsigned char stat, ch, err;
|
||||
int int_pending_mask = port->channel == CHANNEL_A ? IPR_A_RX : IPR_B_RX;
|
||||
|
||||
@@ -705,7 +705,7 @@ static irqreturn_t scc_tx_int(int irq, void *data)
|
||||
|
||||
SCC_ACCESS_INIT(port);
|
||||
pr_debug("SCC: tx_int irq %d port %p ...\n", irq, data);
|
||||
- if (!port->gs.tty) {
|
||||
+ if (!port->gs.port.tty) {
|
||||
pr_warning("scc_tx_int with NULL tty!\n");
|
||||
SCCmod(INT_AND_DMA_REG, ~IDR_TX_INT_ENAB, 0);
|
||||
SCCwrite(COMMAND_REG, CR_TX_PENDING_RESET);
|
||||
@@ -717,8 +717,9 @@ static irqreturn_t scc_tx_int(int irq, void *data)
|
||||
pr_debug("SCC: tx_int writing char %c\n", port->x_char);
|
||||
SCCwrite(TX_DATA_REG, port->x_char);
|
||||
port->x_char = 0;
|
||||
- } else if ((port->gs.xmit_cnt <= 0) || port->gs.tty->stopped ||
|
||||
- port->gs.tty->hw_stopped) {
|
||||
+ } else if ((port->gs.xmit_cnt <= 0) ||
|
||||
+ port->gs.port.tty->stopped ||
|
||||
+ port->gs.port.tty->hw_stopped) {
|
||||
pr_debug("SCC: nothing to do!\n");
|
||||
break;
|
||||
} else {
|
||||
@@ -732,18 +733,18 @@ static irqreturn_t scc_tx_int(int irq, void *data)
|
||||
break;
|
||||
}
|
||||
}
|
||||
- if ((port->gs.xmit_cnt <= 0) || port->gs.tty->stopped ||
|
||||
- port->gs.tty->hw_stopped) {
|
||||
+ if ((port->gs.xmit_cnt <= 0) || port->gs.port.tty->stopped ||
|
||||
+ port->gs.port.tty->hw_stopped) {
|
||||
pr_debug("SCC: nothing to do, disabling int\n");
|
||||
/* disable tx interrupts */
|
||||
SCCmod(INT_AND_DMA_REG, ~IDR_TX_INT_ENAB, 0);
|
||||
/* disable tx_int on next tx underrun? */
|
||||
SCCwrite(COMMAND_REG, CR_TX_PENDING_RESET);
|
||||
- port->gs.flags &= ~GS_TX_INTEN;
|
||||
+ port->gs.port.flags &= ~GS_TX_INTEN;
|
||||
}
|
||||
- if (port->gs.tty && port->gs.xmit_cnt <= port->gs.wakeup_chars) {
|
||||
+ if (port->gs.port.tty && port->gs.xmit_cnt <= port->gs.wakeup_chars) {
|
||||
pr_debug("SCC: waking up tty!\n");
|
||||
- tty_wakeup(port->gs.tty);
|
||||
+ tty_wakeup(port->gs.port.tty);
|
||||
}
|
||||
|
||||
SCCwrite_NB(COMMAND_REG, CR_HIGHEST_IUS_RESET);
|
||||
@@ -766,14 +767,14 @@ static irqreturn_t scc_stat_int(int irq, void *data)
|
||||
|
||||
if (changed & SR_DCD) {
|
||||
port->c_dcd = !!(sr & SR_DCD);
|
||||
- if (!(port->gs.flags & ASYNC_CHECK_CD))
|
||||
+ if (!(port->gs.port.flags & ASYNC_CHECK_CD))
|
||||
; /* Don't report DCD changes */
|
||||
else if (port->c_dcd) {
|
||||
/* Are we blocking in open? */
|
||||
- wake_up_interruptible(&port->gs.open_wait);
|
||||
+ wake_up_interruptible(&port->gs.port.open_wait);
|
||||
} else {
|
||||
- if (port->gs.tty)
|
||||
- tty_hangup(port->gs.tty);
|
||||
+ if (port->gs.port.tty)
|
||||
+ tty_hangup(port->gs.port.tty);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -799,7 +800,7 @@ static void scc_disable_tx_interrupts(void *ptr)
|
||||
pr_debug("SCC: disable_tx_int ...\n");
|
||||
local_irq_save(flags);
|
||||
SCCmod(INT_AND_DMA_REG, ~IDR_TX_INT_ENAB, 0);
|
||||
- port->gs.flags &= ~GS_TX_INTEN;
|
||||
+ port->gs.port.flags &= ~GS_TX_INTEN;
|
||||
local_irq_restore(flags);
|
||||
pr_debug("SCC: disable_tx_int done!\n");
|
||||
}
|
||||
@@ -866,8 +867,8 @@ static void scc_shutdown_port(void *ptr)
|
||||
struct scc_port *port = ptr;
|
||||
|
||||
pr_debug("SCC: shutdown_port ...\n");
|
||||
- port->gs.flags &= ~GS_ACTIVE;
|
||||
- if (port->gs.tty && port->gs.tty->termios->c_cflag & HUPCL)
|
||||
+ port->gs.port.flags &= ~GS_ACTIVE;
|
||||
+ if (port->gs.port.tty && port->gs.port.tty->termios->c_cflag & HUPCL)
|
||||
scc_setsignals(port, 0, 0);
|
||||
pr_debug("SCC: shutdown_port done!\n");
|
||||
}
|
||||
@@ -884,12 +885,12 @@ static int scc_set_real_termios(void *ptr)
|
||||
|
||||
SCC_ACCESS_INIT(port);
|
||||
|
||||
- if (!port->gs.tty || !port->gs.tty->termios)
|
||||
+ if (!port->gs.port.tty || !port->gs.port.tty->termios)
|
||||
return 0;
|
||||
|
||||
channel = port->channel;
|
||||
pr_debug("SCC: termios for channel %u\n", channel);
|
||||
- cflag = port->gs.tty->termios->c_cflag;
|
||||
+ cflag = port->gs.port.tty->termios->c_cflag;
|
||||
baud = port->gs.baud;
|
||||
baudbits = cflag & CBAUD;
|
||||
chsize = (cflag & CSIZE) >> 4;
|
||||
@@ -907,9 +908,9 @@ static int scc_set_real_termios(void *ptr)
|
||||
}
|
||||
|
||||
if (cflag & CLOCAL)
|
||||
- port->gs.flags &= ~ASYNC_CHECK_CD;
|
||||
+ port->gs.port.flags &= ~ASYNC_CHECK_CD;
|
||||
else
|
||||
- port->gs.flags |= ASYNC_CHECK_CD;
|
||||
+ port->gs.port.flags |= ASYNC_CHECK_CD;
|
||||
|
||||
/* calculate brgval for Atari; enable direct modes! */
|
||||
|
||||
@@ -1207,7 +1208,7 @@ static int scc_open(struct tty_struct *tty, struct file *filp)
|
||||
return -ENODEV;
|
||||
|
||||
pr_debug("SCC: open port ...\n");
|
||||
- if (!(port->gs.flags & ASYNC_INITIALIZED)) {
|
||||
+ if (!(port->gs.port.flags & ASYNC_INITIALIZED)) {
|
||||
pr_debug("SCC: init port ...\n");
|
||||
local_irq_save(flags);
|
||||
|
||||
@@ -1232,22 +1233,22 @@ static int scc_open(struct tty_struct *tty, struct file *filp)
|
||||
}
|
||||
|
||||
tty->driver_data = port;
|
||||
- port->gs.tty = tty;
|
||||
- port->gs.count++;
|
||||
+ port->gs.port.tty = tty;
|
||||
+ port->gs.port.count++;
|
||||
pr_debug(KERN_WARNING "SCC: gs init port ...\n");
|
||||
retval = gs_init_port(&port->gs);
|
||||
if (retval) {
|
||||
- port->gs.count--;
|
||||
+ port->gs.port.count--;
|
||||
return retval;
|
||||
}
|
||||
pr_debug(KERN_WARNING "SCC: gs init port done!\n");
|
||||
- port->gs.flags |= GS_ACTIVE;
|
||||
+ port->gs.port.flags |= GS_ACTIVE;
|
||||
|
||||
pr_debug(KERN_WARNING "SCC: gs wait ready ...\n");
|
||||
retval = gs_block_til_ready(port, filp);
|
||||
pr_debug(KERN_WARNING "SCC: gs wait ready done!\n");
|
||||
if (retval) {
|
||||
- port->gs.count--;
|
||||
+ port->gs.port.count--;
|
||||
return retval;
|
||||
}
|
||||
|
||||
--
|
||||
1.6.2.3
|
||||
|
47
debian/patches/bugfix/m68k/2.6.29/0026-m68k-Atari-SCC-serial-driver-break_ctl-update.patch
vendored
Normal file
47
debian/patches/bugfix/m68k/2.6.29/0026-m68k-Atari-SCC-serial-driver-break_ctl-update.patch
vendored
Normal file
|
@ -0,0 +1,47 @@
|
|||
From 73779929426f094ebfd6861887eea7d50fcfdd2f Mon Sep 17 00:00:00 2001
|
||||
From: Geert Uytterhoeven <geert@linux-m68k.org>
|
||||
Date: Tue, 18 Nov 2008 20:54:08 +0100
|
||||
Subject: [PATCH 26/90] m68k: Atari SCC serial driver break_ctl update
|
||||
|
||||
Update for commit 9e98966c7bb94355689478bc84cc3e0c190f977e ("tty: rework break
|
||||
handling"), which made break_ctl return an error code.
|
||||
|
||||
Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
|
||||
---
|
||||
drivers/char/atari_scc.c | 6 ++++--
|
||||
1 files changed, 4 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/drivers/char/atari_scc.c b/drivers/char/atari_scc.c
|
||||
index 335aeca..f1ade4a 100644
|
||||
--- a/drivers/char/atari_scc.c
|
||||
+++ b/drivers/char/atari_scc.c
|
||||
@@ -89,7 +89,7 @@ static irqreturn_t scc_rx_int(int irq, void *data);
|
||||
static irqreturn_t scc_stat_int(int irq, void *data);
|
||||
static irqreturn_t scc_spcond_int(int irq, void *data);
|
||||
static void scc_setsignals(struct scc_port *port, int dtr, int rts);
|
||||
-static void scc_break_ctl(struct tty_struct *tty, int break_state);
|
||||
+static int scc_break_ctl(struct tty_struct *tty, int break_state);
|
||||
|
||||
static struct tty_driver *scc_driver;
|
||||
|
||||
@@ -1385,7 +1385,7 @@ static int scc_ioctl(struct tty_struct *tty, struct file *file,
|
||||
}
|
||||
|
||||
|
||||
-static void scc_break_ctl(struct tty_struct *tty, int break_state)
|
||||
+static int scc_break_ctl(struct tty_struct *tty, int break_state)
|
||||
{
|
||||
struct scc_port *port = (struct scc_port *)tty->driver_data;
|
||||
unsigned long flags;
|
||||
@@ -1396,6 +1396,8 @@ static void scc_break_ctl(struct tty_struct *tty, int break_state)
|
||||
SCCmod(TX_CTRL_REG, ~TCR_SEND_BREAK, break_state ? TCR_SEND_BREAK : 0);
|
||||
local_irq_restore(flags);
|
||||
pr_debug("SCC: break ctl done!\n");
|
||||
+
|
||||
+ return 0;
|
||||
}
|
||||
|
||||
|
||||
--
|
||||
1.6.2.3
|
||||
|
53
debian/patches/bugfix/m68k/2.6.29/0027-m68k-Disable-Atari-serial-console-support-if-modula.patch
vendored
Normal file
53
debian/patches/bugfix/m68k/2.6.29/0027-m68k-Disable-Atari-serial-console-support-if-modula.patch
vendored
Normal file
|
@ -0,0 +1,53 @@
|
|||
From 6ed6a2489bd83af09a6b824f91ae2856d9e5f8fe Mon Sep 17 00:00:00 2001
|
||||
From: Geert Uytterhoeven <geert@linux-m68k.org>
|
||||
Date: Tue, 18 Nov 2008 20:54:08 +0100
|
||||
Subject: [PATCH 27/90] m68k: Disable Atari serial console support if modular
|
||||
|
||||
If CONFIG_ATARI_SCC=m, I get the following warnings:
|
||||
|
||||
| drivers/char/atari_scc.c: At top level:
|
||||
| drivers/char/atari_scc.c:1573: warning: data definition has no type or storage class
|
||||
| drivers/char/atari_scc.c:1573: warning: type defaults to 'int' in declaration of 'console_initcall'
|
||||
| drivers/char/atari_scc.c:1573: warning: parameter names (without types) in function declaration
|
||||
| drivers/char/atari_scc.c:1567: warning: 'atari_scc_console_init' defined but not used
|
||||
|
||||
Apparently console_initcall() is not defined in the modular case.
|
||||
|
||||
Disable serial console support if the driver is modular.
|
||||
|
||||
Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
|
||||
---
|
||||
drivers/char/atari_scc.c | 7 +++++--
|
||||
1 files changed, 5 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/drivers/char/atari_scc.c b/drivers/char/atari_scc.c
|
||||
index f1ade4a..800193c 100644
|
||||
--- a/drivers/char/atari_scc.c
|
||||
+++ b/drivers/char/atari_scc.c
|
||||
@@ -1401,10 +1401,12 @@ static int scc_break_ctl(struct tty_struct *tty, int break_state)
|
||||
}
|
||||
|
||||
|
||||
+#if defined(CONFIG_SERIAL_CONSOLE) && !defined(MODULE)
|
||||
+
|
||||
/*---------------------------------------------------------------------------
|
||||
* Serial console stuff...
|
||||
*--------------------------------------------------------------------------*/
|
||||
-#if 1
|
||||
+
|
||||
#define scc_delay() \
|
||||
asm volatile ("tstb %0" : : "m" (*scc_del) : "cc")
|
||||
|
||||
@@ -1571,7 +1573,8 @@ static int __init atari_scc_console_init(void)
|
||||
}
|
||||
|
||||
console_initcall(atari_scc_console_init);
|
||||
-#endif
|
||||
+
|
||||
+#endif /* CONFIG_SERIAL_CONSOLE && !MODULE */
|
||||
|
||||
/***************************** End of Functions *********************/
|
||||
|
||||
--
|
||||
1.6.2.3
|
||||
|
|
@ -0,0 +1,45 @@
|
|||
From 7adc392f6bedb8926d6c93423d88c758300658ce Mon Sep 17 00:00:00 2001
|
||||
From: Geert Uytterhoeven <geert@linux-m68k.org>
|
||||
Date: Mon, 29 Dec 2008 16:48:41 +0100
|
||||
Subject: [PATCH 28/90] m68k: Atari SCC support for ST
|
||||
|
||||
Enable support for Atari ST, and fix 2 obvious typos in the ST support code.
|
||||
|
||||
Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
|
||||
---
|
||||
drivers/char/atari_scc.c | 5 +++--
|
||||
1 files changed, 3 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/drivers/char/atari_scc.c b/drivers/char/atari_scc.c
|
||||
index 800193c..e407aa8 100644
|
||||
--- a/drivers/char/atari_scc.c
|
||||
+++ b/drivers/char/atari_scc.c
|
||||
@@ -51,6 +51,7 @@
|
||||
|
||||
#define CONFIG_TT_SCC 1
|
||||
#define CONFIG_FALCON_SCC 1
|
||||
+#define CONFIG_ST_SCC 1
|
||||
|
||||
#define CHANNEL_A 0
|
||||
#define CHANNEL_B 1
|
||||
@@ -475,7 +476,7 @@ static int atari_st_scc_init(void)
|
||||
request_irq(IRQ_SCCA_STAT, scc_stat_int, IRQ_TYPE_PRIO,
|
||||
"SCC-A status", port);
|
||||
request_irq(IRQ_SCCA_RX, scc_rx_int, IRQ_TYPE_PRIO, "SCC-A RX", port);
|
||||
- request_irq(SCCA_SPCOND, scc_spcond_int, IRQ_TYPE_PRIO,
|
||||
+ request_irq(IRQ_SCCA_SPCOND, scc_spcond_int, IRQ_TYPE_PRIO,
|
||||
"SCC-A special cond", port);
|
||||
{
|
||||
SCC_ACCESS_INIT(port);
|
||||
@@ -493,7 +494,7 @@ static int atari_st_scc_init(void)
|
||||
/* disable interrupts for this channel */
|
||||
SCCwrite(INT_AND_DMA_REG, 0);
|
||||
/* Set the interrupt vector */
|
||||
- SCCwrite(INT_VECTOR_REG, BVME_IRQ_SCC_BASE);
|
||||
+ SCCwrite(INT_VECTOR_REG, 0x60);
|
||||
/* Interrupt parameters: vector includes status, status low */
|
||||
SCCwrite(MASTER_INT_CTRL, MIC_VEC_INCL_STAT);
|
||||
SCCmod(MASTER_INT_CTRL, 0xff, MIC_MASTER_INT_ENAB);
|
||||
--
|
||||
1.6.2.3
|
||||
|
281
debian/patches/bugfix/m68k/2.6.29/0029-m68k-atari_scc-kill-warn_unused_result-warnings.patch
vendored
Normal file
281
debian/patches/bugfix/m68k/2.6.29/0029-m68k-atari_scc-kill-warn_unused_result-warnings.patch
vendored
Normal file
|
@ -0,0 +1,281 @@
|
|||
From 4b9a8bacae8e7c6e4a6b3c0f0b974319feedfe63 Mon Sep 17 00:00:00 2001
|
||||
From: Geert Uytterhoeven <geert@linux-m68k.org>
|
||||
Date: Tue, 30 Dec 2008 14:06:05 +0100
|
||||
Subject: [PATCH 29/90] m68k: atari_scc - kill warn_unused_result warnings
|
||||
|
||||
warning: ignoring return value of 'request_irq', declared with attribute
|
||||
warn_unused_result
|
||||
|
||||
Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
|
||||
---
|
||||
drivers/char/atari_scc.c | 177 +++++++++++++++++++++++++++++++++-------------
|
||||
1 files changed, 128 insertions(+), 49 deletions(-)
|
||||
|
||||
diff --git a/drivers/char/atari_scc.c b/drivers/char/atari_scc.c
|
||||
index e407aa8..5dc59ff 100644
|
||||
--- a/drivers/char/atari_scc.c
|
||||
+++ b/drivers/char/atari_scc.c
|
||||
@@ -276,10 +276,99 @@ static void scc_init_portstructs(void)
|
||||
}
|
||||
|
||||
|
||||
+static int atari_scc_a_request_irqs(struct scc_port *port)
|
||||
+{
|
||||
+ int error;
|
||||
+
|
||||
+ error = request_irq(IRQ_SCCA_TX, scc_tx_int, IRQ_TYPE_PRIO, "SCC-A TX",
|
||||
+ port);
|
||||
+ if (error)
|
||||
+ goto fail;
|
||||
+
|
||||
+ error = request_irq(IRQ_SCCA_STAT, scc_stat_int, IRQ_TYPE_PRIO,
|
||||
+ "SCC-A status", port);
|
||||
+ if (error)
|
||||
+ goto fail_free_a_tx;
|
||||
+
|
||||
+ error = request_irq(IRQ_SCCA_RX, scc_rx_int, IRQ_TYPE_PRIO, "SCC-A RX",
|
||||
+ port);
|
||||
+ if (error)
|
||||
+ goto fail_free_a_stat;
|
||||
+
|
||||
+ error = request_irq(IRQ_SCCA_SPCOND, scc_spcond_int, IRQ_TYPE_PRIO,
|
||||
+ "SCC-A special cond", port);
|
||||
+ if (error)
|
||||
+ goto fail_free_a_rx;
|
||||
+
|
||||
+ return 0;
|
||||
+
|
||||
+fail_free_a_rx:
|
||||
+ free_irq(IRQ_SCCA_RX, port);
|
||||
+fail_free_a_stat:
|
||||
+ free_irq(IRQ_SCCA_STAT, port);
|
||||
+fail_free_a_tx:
|
||||
+ free_irq(IRQ_SCCA_TX, port);
|
||||
+fail:
|
||||
+ return error;
|
||||
+}
|
||||
+
|
||||
+static void atari_scc_a_free_irqs(struct scc_port *port)
|
||||
+{
|
||||
+ free_irq(IRQ_SCCA_TX, port);
|
||||
+ free_irq(IRQ_SCCA_STAT, port);
|
||||
+ free_irq(IRQ_SCCA_RX, port);
|
||||
+ free_irq(IRQ_SCCA_SPCOND, port);
|
||||
+}
|
||||
+
|
||||
+static int atari_scc_b_request_irqs(struct scc_port *port)
|
||||
+{
|
||||
+ int error;
|
||||
+
|
||||
+ error = request_irq(IRQ_SCCB_TX, scc_tx_int, IRQ_TYPE_PRIO, "SCC-B TX",
|
||||
+ port);
|
||||
+ if (error)
|
||||
+ goto fail;
|
||||
+
|
||||
+ error = request_irq(IRQ_SCCB_STAT, scc_stat_int, IRQ_TYPE_PRIO,
|
||||
+ "SCC-B status", port);
|
||||
+ if (error)
|
||||
+ goto fail_free_b_tx;
|
||||
+
|
||||
+ error = request_irq(IRQ_SCCB_RX, scc_rx_int, IRQ_TYPE_PRIO, "SCC-B RX",
|
||||
+ port);
|
||||
+ if (error)
|
||||
+ goto fail_free_b_stat;
|
||||
+
|
||||
+ error = request_irq(IRQ_SCCB_SPCOND, scc_spcond_int, IRQ_TYPE_PRIO,
|
||||
+ "SCC-B special cond", port);
|
||||
+ if (error)
|
||||
+ goto fail_free_b_rx;
|
||||
+
|
||||
+ return 0;
|
||||
+
|
||||
+fail_free_b_rx:
|
||||
+ free_irq(IRQ_SCCB_RX, port);
|
||||
+fail_free_b_stat:
|
||||
+ free_irq(IRQ_SCCB_STAT, port);
|
||||
+fail_free_b_tx:
|
||||
+ free_irq(IRQ_SCCB_TX, port);
|
||||
+fail:
|
||||
+ return error;
|
||||
+}
|
||||
+
|
||||
+static void atari_scc_b_free_irqs(struct scc_port *port)
|
||||
+{
|
||||
+ free_irq(IRQ_SCCB_TX, port);
|
||||
+ free_irq(IRQ_SCCB_STAT, port);
|
||||
+ free_irq(IRQ_SCCB_RX, port);
|
||||
+ free_irq(IRQ_SCCB_SPCOND, port);
|
||||
+}
|
||||
+
|
||||
#ifdef CONFIG_TT_SCC
|
||||
static int atari_tt_scc_init(void)
|
||||
{
|
||||
struct scc_port *port;
|
||||
+ int error;
|
||||
|
||||
pr_info("SCC: Atari TT Serial Driver\n");
|
||||
/* FIXME channel A may be switchable between modem and LAN port */
|
||||
@@ -294,12 +383,10 @@ static int atari_tt_scc_init(void)
|
||||
port->port_a = &scc_ports[0];
|
||||
port->port_b = &scc_ports[1];
|
||||
pr_debug("SCC: request channel A irqs, port = %p\n", port);
|
||||
- request_irq(IRQ_SCCA_TX, scc_tx_int, IRQ_TYPE_PRIO, "SCC-A TX", port);
|
||||
- request_irq(IRQ_SCCA_STAT, scc_stat_int, IRQ_TYPE_PRIO,
|
||||
- "SCC-A status", port);
|
||||
- request_irq(IRQ_SCCA_RX, scc_rx_int, IRQ_TYPE_PRIO, "SCC-A RX", port);
|
||||
- request_irq(IRQ_SCCA_SPCOND, scc_spcond_int, IRQ_TYPE_PRIO,
|
||||
- "SCC-A special cond", port);
|
||||
+ error = atari_scc_a_request_irqs(port);
|
||||
+ if (error)
|
||||
+ return error;
|
||||
+
|
||||
{
|
||||
SCC_ACCESS_INIT(port);
|
||||
pr_debug("SCC: read SCC status\n");
|
||||
@@ -335,14 +422,12 @@ static int atari_tt_scc_init(void)
|
||||
port->port_a = &scc_ports[0];
|
||||
port->port_b = &scc_ports[1];
|
||||
pr_debug("SCC: request channel B irqs, port = %p\n", port);
|
||||
- request_irq(IRQ_SCCB_TX, scc_tx_int, IRQ_TYPE_PRIO,
|
||||
- "SCC-B TX", port);
|
||||
- request_irq(IRQ_SCCB_STAT, scc_stat_int, IRQ_TYPE_PRIO,
|
||||
- "SCC-B status", port);
|
||||
- request_irq(IRQ_SCCB_RX, scc_rx_int, IRQ_TYPE_PRIO,
|
||||
- "SCC-B RX", port);
|
||||
- request_irq(IRQ_SCCB_SPCOND, scc_spcond_int, IRQ_TYPE_PRIO,
|
||||
- "SCC-B special cond", port);
|
||||
+ error = atari_scc_b_request_irqs(port);
|
||||
+ if (error) {
|
||||
+ atari_scc_a_free_irqs(port);
|
||||
+ return error;
|
||||
+ }
|
||||
+
|
||||
{
|
||||
SCC_ACCESS_INIT(port);
|
||||
|
||||
@@ -351,8 +436,13 @@ static int atari_tt_scc_init(void)
|
||||
}
|
||||
/* not implemented yet */
|
||||
#if 0
|
||||
- request_irq(IRQ_TT_MFP_RI, scc_ri_int, IRQ_TYPE_SLOW,
|
||||
- "TT-MFP ring indicator (modem 2)", port);
|
||||
+ error = request_irq(IRQ_TT_MFP_RI, scc_ri_int, IRQ_TYPE_SLOW,
|
||||
+ "TT-MFP ring indicator (modem 2)", port);
|
||||
+ if (error) {
|
||||
+ atari_scc_b_free_irqs(port);
|
||||
+ atari_scc_a_free_irqs(port);
|
||||
+ return error;
|
||||
+ }
|
||||
#endif
|
||||
|
||||
}
|
||||
@@ -381,6 +471,7 @@ static int atari_tt_scc_init(void)
|
||||
static int atari_falcon_scc_init(void)
|
||||
{
|
||||
struct scc_port *port;
|
||||
+ int error;
|
||||
|
||||
pr_info("SCC: Atari Falcon Serial Driver\n");
|
||||
if (atari_SCC_init_done)
|
||||
@@ -393,12 +484,10 @@ static int atari_falcon_scc_init(void)
|
||||
port->datap = port->ctrlp + 2;
|
||||
port->port_a = &scc_ports[0];
|
||||
port->port_b = &scc_ports[1];
|
||||
- request_irq(IRQ_SCCA_TX, scc_tx_int, IRQ_TYPE_PRIO, "SCC-A TX", port);
|
||||
- request_irq(IRQ_SCCA_STAT, scc_stat_int, IRQ_TYPE_PRIO,
|
||||
- "SCC-A status", port);
|
||||
- request_irq(IRQ_SCCA_RX, scc_rx_int, IRQ_TYPE_PRIO, "SCC-A RX", port);
|
||||
- request_irq(IRQ_SCCA_SPCOND, scc_spcond_int, IRQ_TYPE_PRIO,
|
||||
- "SCC-A special cond", port);
|
||||
+ error = atari_scc_a_request_irqs(port);
|
||||
+ if (error)
|
||||
+ return error;
|
||||
+
|
||||
{
|
||||
SCC_ACCESS_INIT(port);
|
||||
|
||||
@@ -429,12 +518,11 @@ static int atari_falcon_scc_init(void)
|
||||
port->datap = port->ctrlp + 2;
|
||||
port->port_a = &scc_ports[0];
|
||||
port->port_b = &scc_ports[1];
|
||||
- request_irq(IRQ_SCCB_TX, scc_tx_int, IRQ_TYPE_PRIO, "SCC-B TX", port);
|
||||
- request_irq(IRQ_SCCB_STAT, scc_stat_int, IRQ_TYPE_PRIO,
|
||||
- "SCC-B status", port);
|
||||
- request_irq(IRQ_SCCB_RX, scc_rx_int, IRQ_TYPE_PRIO, "SCC-B RX", port);
|
||||
- request_irq(IRQ_SCCB_SPCOND, scc_spcond_int, IRQ_TYPE_PRIO,
|
||||
- "SCC-B special cond", port);
|
||||
+ error = atari_scc_b_request_irqs(port);
|
||||
+ if (error) {
|
||||
+ atari_scc_a_free_irqs(port);
|
||||
+ return error;
|
||||
+ }
|
||||
|
||||
{
|
||||
SCC_ACCESS_INIT(port); /* Either channel will do */
|
||||
@@ -461,6 +549,7 @@ static int atari_st_scc_init(void)
|
||||
{
|
||||
struct scc_port *port;
|
||||
int escc = ATARIHW_PRESENT(ST_ESCC);
|
||||
+ int error;
|
||||
|
||||
pr_info("SCC: Atari MegaST/E Serial Driver\n");
|
||||
/* FIXME: ports reversed logic */
|
||||
@@ -472,12 +561,10 @@ static int atari_st_scc_init(void)
|
||||
port->datap = port->ctrlp + 4;
|
||||
port->port_a = &scc_ports[1];
|
||||
port->port_b = &scc_ports[0];
|
||||
- request_irq(IRQ_SCCA_TX, scc_tx_int, IRQ_TYPE_PRIO, "SCC-A TX", port);
|
||||
- request_irq(IRQ_SCCA_STAT, scc_stat_int, IRQ_TYPE_PRIO,
|
||||
- "SCC-A status", port);
|
||||
- request_irq(IRQ_SCCA_RX, scc_rx_int, IRQ_TYPE_PRIO, "SCC-A RX", port);
|
||||
- request_irq(IRQ_SCCA_SPCOND, scc_spcond_int, IRQ_TYPE_PRIO,
|
||||
- "SCC-A special cond", port);
|
||||
+ error = atari_scc_a_request_irqs(port);
|
||||
+ if (error)
|
||||
+ return error;
|
||||
+
|
||||
{
|
||||
SCC_ACCESS_INIT(port);
|
||||
|
||||
@@ -508,12 +595,11 @@ static int atari_st_scc_init(void)
|
||||
port->datap = port->ctrlp + 4;
|
||||
port->port_a = &scc_ports[0];
|
||||
port->port_b = &scc_ports[1];
|
||||
- request_irq(IRQ_SCCB_TX, scc_tx_int, IRQ_TYPE_PRIO, "SCC-B TX", port);
|
||||
- request_irq(IRQ_SCCB_STAT, scc_stat_int, IRQ_TYPE_PRIO,
|
||||
- "SCC-B status", port);
|
||||
- request_irq(IRQ_SCCB_RX, scc_rx_int, IRQ_TYPE_PRIO, "SCC-B RX", port);
|
||||
- request_irq(IRQ_SCCB_SPCOND, scc_spcond_int, IRQ_TYPE_PRIO,
|
||||
- "SCC-B special cond", port);
|
||||
+ error = atari_scc_b_request_irqs(port);
|
||||
+ if (error) {
|
||||
+ atari_scc_a_free_irqs(port);
|
||||
+ return error;
|
||||
+ }
|
||||
|
||||
{
|
||||
SCC_ACCESS_INIT(port); /* Either channel will do */
|
||||
@@ -571,18 +657,11 @@ void atari_scc_cleanup(void)
|
||||
tty_unregister_driver(scc_driver);
|
||||
port = &scc_ports[0];
|
||||
pr_debug("SCC: free channel A irqs, port = %p\n", port);
|
||||
- free_irq(IRQ_SCCA_TX, port);
|
||||
- free_irq(IRQ_SCCA_STAT, port);
|
||||
- free_irq(IRQ_SCCA_RX, port);
|
||||
- free_irq(IRQ_SCCA_SPCOND, port);
|
||||
+ atari_scc_a_free_irqs(port);
|
||||
|
||||
port = &scc_ports[1];
|
||||
pr_debug("SCC: free channel A irqs, port = %p\n", port);
|
||||
- free_irq(IRQ_SCCB_TX, port);
|
||||
- free_irq(IRQ_SCCB_STAT, port);
|
||||
- free_irq(IRQ_SCCB_RX, port);
|
||||
- free_irq(IRQ_SCCB_SPCOND, port);
|
||||
-
|
||||
+ atari_scc_b_free_irqs(port);
|
||||
}
|
||||
|
||||
module_init(atari_scc_init);
|
||||
--
|
||||
1.6.2.3
|
||||
|
111
debian/patches/bugfix/m68k/2.6.29/0030-m68k-atari_scc-kill-fake-config-variables.patch
vendored
Normal file
111
debian/patches/bugfix/m68k/2.6.29/0030-m68k-atari_scc-kill-fake-config-variables.patch
vendored
Normal file
|
@ -0,0 +1,111 @@
|
|||
From f2a57fb11faa4d8ed143f6df352187fd8a075e7f Mon Sep 17 00:00:00 2001
|
||||
From: Geert Uytterhoeven <geert@linux-m68k.org>
|
||||
Date: Tue, 30 Dec 2008 14:35:46 +0100
|
||||
Subject: [PATCH 30/90] m68k: atari_scc - kill fake config variables
|
||||
|
||||
Rename CONFIG_{TT,FALCON,ST}_SCC to SUPPORT_{TT,FALCON,ST}_SCC and reduce ifdef
|
||||
clutter
|
||||
|
||||
Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
|
||||
---
|
||||
drivers/char/atari_scc.c | 39 ++++++++++++++++++++++++---------------
|
||||
1 files changed, 24 insertions(+), 15 deletions(-)
|
||||
|
||||
diff --git a/drivers/char/atari_scc.c b/drivers/char/atari_scc.c
|
||||
index 5dc59ff..fefff96 100644
|
||||
--- a/drivers/char/atari_scc.c
|
||||
+++ b/drivers/char/atari_scc.c
|
||||
@@ -49,9 +49,9 @@
|
||||
|
||||
#include "scc.h"
|
||||
|
||||
-#define CONFIG_TT_SCC 1
|
||||
-#define CONFIG_FALCON_SCC 1
|
||||
-#define CONFIG_ST_SCC 1
|
||||
+#define SUPPORT_TT_SCC 1
|
||||
+#define SUPPORT_FALCON_SCC 1
|
||||
+#define SUPPORT_ST_SCC 1
|
||||
|
||||
#define CHANNEL_A 0
|
||||
#define CHANNEL_B 1
|
||||
@@ -364,7 +364,7 @@ static void atari_scc_b_free_irqs(struct scc_port *port)
|
||||
free_irq(IRQ_SCCB_SPCOND, port);
|
||||
}
|
||||
|
||||
-#ifdef CONFIG_TT_SCC
|
||||
+#ifdef SUPPORT_TT_SCC
|
||||
static int atari_tt_scc_init(void)
|
||||
{
|
||||
struct scc_port *port;
|
||||
@@ -464,10 +464,15 @@ static int atari_tt_scc_init(void)
|
||||
|
||||
return 0;
|
||||
}
|
||||
-#endif
|
||||
+#else /* !SUPPORT_TT_SCC */
|
||||
+static inline int atari_tt_scc_init(void)
|
||||
+{
|
||||
+ return -ENODEV;
|
||||
+}
|
||||
+#endif /* !SUPPORT_TT_SCC */
|
||||
|
||||
|
||||
-#ifdef CONFIG_FALCON_SCC
|
||||
+#ifdef SUPPORT_FALCON_SCC
|
||||
static int atari_falcon_scc_init(void)
|
||||
{
|
||||
struct scc_port *port;
|
||||
@@ -541,10 +546,15 @@ static int atari_falcon_scc_init(void)
|
||||
|
||||
return 0;
|
||||
}
|
||||
-#endif
|
||||
+#else /* !SUPPORT_FALCON_SCC */
|
||||
+static inline int atari_falcon_scc_init(void)
|
||||
+{
|
||||
+ return -ENODEV;
|
||||
+}
|
||||
+#endif /* !SUPPORT_FALCON_SCC */
|
||||
|
||||
|
||||
-#ifdef CONFIG_ST_SCC
|
||||
+#ifdef SUPPORT_ST_SCC
|
||||
static int atari_st_scc_init(void)
|
||||
{
|
||||
struct scc_port *port;
|
||||
@@ -618,7 +628,12 @@ static int atari_st_scc_init(void)
|
||||
|
||||
return 0;
|
||||
}
|
||||
-#endif
|
||||
+#else /* !SUPPORT_ST_SCC */
|
||||
+static inline int atari_st_scc_init(void)
|
||||
+{
|
||||
+ return -ENODEV;
|
||||
+}
|
||||
+#endif /* !SUPPORT_ST_SCC */
|
||||
|
||||
|
||||
int atari_scc_init(void)
|
||||
@@ -635,18 +650,12 @@ int atari_scc_init(void)
|
||||
|
||||
scc_del = &mfp.par_dt_reg;
|
||||
|
||||
-#ifdef CONFIG_TT_SCC
|
||||
if (MACH_IS_TT)
|
||||
res = atari_tt_scc_init();
|
||||
-#endif
|
||||
-#ifdef CONFIG_FALCON_SCC
|
||||
if (MACH_IS_FALCON)
|
||||
res = atari_falcon_scc_init();
|
||||
-#endif
|
||||
-#ifdef CONFIG_ST_SCC
|
||||
if (MACH_IS_ST)
|
||||
res = atari_st_scc_init();
|
||||
-#endif
|
||||
return res;
|
||||
}
|
||||
|
||||
--
|
||||
1.6.2.3
|
||||
|
80
debian/patches/bugfix/m68k/2.6.29/0031-Revert-msdos-fs-remove-unsettable-atari-option.patch
vendored
Normal file
80
debian/patches/bugfix/m68k/2.6.29/0031-Revert-msdos-fs-remove-unsettable-atari-option.patch
vendored
Normal file
|
@ -0,0 +1,80 @@
|
|||
From 5a20595203dc35aea285af9786896c472037d92c Mon Sep 17 00:00:00 2001
|
||||
From: Geert Uytterhoeven <geert@linux-m68k.org>
|
||||
Date: Tue, 18 Nov 2008 20:59:13 +0100
|
||||
Subject: [PATCH 31/90] Revert "msdos fs: remove unsettable atari option"
|
||||
|
||||
Revert commit 7557bc66be629d19a402e752673708bfbb8b5e86 ("msdos fs: remove
|
||||
unsettable atari option")
|
||||
---
|
||||
fs/fat/fat.h | 1 +
|
||||
fs/fat/namei_msdos.c | 18 ++++++++++++------
|
||||
2 files changed, 13 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/fs/fat/fat.h b/fs/fat/fat.h
|
||||
index ea440d6..502777c 100644
|
||||
--- a/fs/fat/fat.h
|
||||
+++ b/fs/fat/fat.h
|
||||
@@ -35,6 +35,7 @@ struct fat_mount_options {
|
||||
utf8:1, /* Use of UTF-8 character set (Default) */
|
||||
unicode_xlate:1, /* create escape sequences for unhandled Unicode */
|
||||
numtail:1, /* Does first alias have a numeric '~1' type tail? */
|
||||
+ atari:1, /* Use Atari GEMDOS variation of MS-DOS fs */
|
||||
flush:1, /* write things quickly */
|
||||
nocase:1, /* Does this need case conversion? 0=need case conversion*/
|
||||
usefree:1, /* Use free_clusters for FAT32 */
|
||||
diff --git a/fs/fat/namei_msdos.c b/fs/fat/namei_msdos.c
|
||||
index 7ba03a4..1d757a0 100644
|
||||
--- a/fs/fat/namei_msdos.c
|
||||
+++ b/fs/fat/namei_msdos.c
|
||||
@@ -14,7 +14,12 @@
|
||||
|
||||
/* Characters that are undesirable in an MS-DOS file name */
|
||||
static unsigned char bad_chars[] = "*?<>|\"";
|
||||
-static unsigned char bad_if_strict[] = "+=,; ";
|
||||
+static unsigned char bad_if_strict_pc[] = "+=,; ";
|
||||
+/* GEMDOS is less restrictive */
|
||||
+static unsigned char bad_if_strict_atari[] = " ";
|
||||
+
|
||||
+#define bad_if_strict(opts) \
|
||||
+ ((opts)->atari ? bad_if_strict_atari : bad_if_strict_pc)
|
||||
|
||||
/***** Formats an MS-DOS file name. Rejects invalid names. */
|
||||
static int msdos_format_name(const unsigned char *name, int len,
|
||||
@@ -35,20 +40,21 @@ static int msdos_format_name(const unsigned char *name, int len,
|
||||
/* Get rid of dot - test for it elsewhere */
|
||||
name++;
|
||||
len--;
|
||||
- } else
|
||||
+ } else if (!opts->atari)
|
||||
return -EINVAL;
|
||||
}
|
||||
/*
|
||||
- * disallow names that _really_ start with a dot
|
||||
+ * disallow names that _really_ start with a dot for MS-DOS,
|
||||
+ * GEMDOS does not care
|
||||
*/
|
||||
- space = 1;
|
||||
+ space = !opts->atari;
|
||||
c = 0;
|
||||
for (walk = res; len && walk - res < 8; walk++) {
|
||||
c = *name++;
|
||||
len--;
|
||||
if (opts->name_check != 'r' && strchr(bad_chars, c))
|
||||
return -EINVAL;
|
||||
- if (opts->name_check == 's' && strchr(bad_if_strict, c))
|
||||
+ if (opts->name_check == 's' && strchr(bad_if_strict(opts), c))
|
||||
return -EINVAL;
|
||||
if (c >= 'A' && c <= 'Z' && opts->name_check == 's')
|
||||
return -EINVAL;
|
||||
@@ -88,7 +94,7 @@ static int msdos_format_name(const unsigned char *name, int len,
|
||||
if (opts->name_check != 'r' && strchr(bad_chars, c))
|
||||
return -EINVAL;
|
||||
if (opts->name_check == 's' &&
|
||||
- strchr(bad_if_strict, c))
|
||||
+ strchr(bad_if_strict(opts), c))
|
||||
return -EINVAL;
|
||||
if (c < ' ' || c == ':' || c == '\\')
|
||||
return -EINVAL;
|
||||
--
|
||||
1.6.2.3
|
||||
|
|
@ -0,0 +1,105 @@
|
|||
From f06bfe51e1a5ad3292c232919ac0f7e56c483bc3 Mon Sep 17 00:00:00 2001
|
||||
From: Linux/m68k legacy <xxx@linux-m68k.org>
|
||||
Date: Tue, 18 Nov 2008 20:59:14 +0100
|
||||
Subject: [PATCH 32/90] Atari FAT updates
|
||||
|
||||
Add support for the Atari-variant of the FAT filesystem
|
||||
---
|
||||
fs/fat/inode.c | 46 +++++++++++++++++++++++++++++++++++++++++++---
|
||||
1 files changed, 43 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/fs/fat/inode.c b/fs/fat/inode.c
|
||||
index de0004f..54503a2 100644
|
||||
--- a/fs/fat/inode.c
|
||||
+++ b/fs/fat/inode.c
|
||||
@@ -27,6 +27,7 @@
|
||||
#include <linux/writeback.h>
|
||||
#include <linux/log2.h>
|
||||
#include <linux/hash.h>
|
||||
+#include <linux/major.h>
|
||||
#include <asm/unaligned.h>
|
||||
#include "fat.h"
|
||||
|
||||
@@ -838,7 +839,7 @@ enum {
|
||||
Opt_check_n, Opt_check_r, Opt_check_s, Opt_uid, Opt_gid,
|
||||
Opt_umask, Opt_dmask, Opt_fmask, Opt_allow_utime, Opt_codepage,
|
||||
Opt_usefree, Opt_nocase, Opt_quiet, Opt_showexec, Opt_debug,
|
||||
- Opt_immutable, Opt_dots, Opt_nodots,
|
||||
+ Opt_immutable, Opt_dots, Opt_nodots, Opt_atari_no, Opt_atari_yes,
|
||||
Opt_charset, Opt_shortname_lower, Opt_shortname_win95,
|
||||
Opt_shortname_winnt, Opt_shortname_mixed, Opt_utf8_no, Opt_utf8_yes,
|
||||
Opt_uni_xl_no, Opt_uni_xl_yes, Opt_nonumtail_no, Opt_nonumtail_yes,
|
||||
@@ -865,6 +866,9 @@ static const match_table_t fat_tokens = {
|
||||
{Opt_showexec, "showexec"},
|
||||
{Opt_debug, "debug"},
|
||||
{Opt_immutable, "sys_immutable"},
|
||||
+ {Opt_atari_yes, "atari=yes"},
|
||||
+ {Opt_atari_yes, "atari"},
|
||||
+ {Opt_atari_no, "atari=no"},
|
||||
{Opt_obsolate, "conv=binary"},
|
||||
{Opt_obsolate, "conv=text"},
|
||||
{Opt_obsolate, "conv=auto"},
|
||||
@@ -947,6 +951,13 @@ static int parse_options(char *options, int is_vfat, int silent, int *debug,
|
||||
opts->numtail = 1;
|
||||
opts->usefree = opts->nocase = 0;
|
||||
opts->tz_utc = 0;
|
||||
+ opts->atari = 0;
|
||||
+
|
||||
+#ifdef CONFIG_ATARI
|
||||
+ if (MACH_IS_ATARI)
|
||||
+ /* make Atari GEMDOS format the default if machine is an Atari */
|
||||
+ opts->atari = 1;
|
||||
+#endif
|
||||
*debug = 0;
|
||||
|
||||
if (!options)
|
||||
@@ -998,6 +1009,12 @@ static int parse_options(char *options, int is_vfat, int silent, int *debug,
|
||||
case Opt_immutable:
|
||||
opts->sys_immutable = 1;
|
||||
break;
|
||||
+ case Opt_atari_yes:
|
||||
+ opts->atari = 1;
|
||||
+ break;
|
||||
+ case Opt_atari_no:
|
||||
+ opts->atari = 0;
|
||||
+ break;
|
||||
case Opt_uid:
|
||||
if (match_int(&args[0], &option))
|
||||
return 0;
|
||||
@@ -1354,8 +1371,31 @@ int fat_fill_super(struct super_block *sb, void *data, int silent,
|
||||
|
||||
total_clusters = (total_sectors - sbi->data_start) / sbi->sec_per_clus;
|
||||
|
||||
- if (sbi->fat_bits != 32)
|
||||
- sbi->fat_bits = (total_clusters > MAX_FAT12) ? 16 : 12;
|
||||
+ if (!sbi->options.atari) {
|
||||
+ if (sbi->fat_bits != 32)
|
||||
+ sbi->fat_bits = (total_clusters > MAX_FAT12) ? 16 : 12;
|
||||
+ } else {
|
||||
+ int sectors;
|
||||
+ /* Atari GEMDOS partitions always have 16-bit fat */
|
||||
+ if (sbi->fat_bits != 32)
|
||||
+ sbi->fat_bits = 16;
|
||||
+ /* If more clusters than fat entries in 16-bit fat, we assume
|
||||
+ * it's a real MSDOS partition with 12-bit fat.
|
||||
+ */
|
||||
+ if (sbi->fat_bits != 32 && total_clusters+2 > sbi->
|
||||
+ fat_length*SECTOR_SIZE*8/sbi->fat_bits)
|
||||
+ sbi->fat_bits = 12;
|
||||
+ /* if it's a floppy disk --> 12bit fat */
|
||||
+ if (sbi->fat_bits != 32 && MAJOR(sb->s_dev) == FLOPPY_MAJOR)
|
||||
+ sbi->fat_bits = 12;
|
||||
+ /* if it's a ramdisk or loopback device and has one of the usual
|
||||
+ * floppy sizes -> 12bit FAT */
|
||||
+ sectors = total_sectors + sbi->data_start;
|
||||
+ if (sbi->fat_bits != 32 && (MAJOR(sb->s_dev) == RAMDISK_MAJOR ||
|
||||
+ MAJOR(sb->s_dev) == LOOP_MAJOR) &&
|
||||
+ (sectors == 720 || sectors == 1440 || sectors == 2880))
|
||||
+ sbi->fat_bits = 12;
|
||||
+ }
|
||||
|
||||
/* check that FAT table does not overflow */
|
||||
fat_clusters = sbi->fat_length * sb->s_blocksize * 8 / sbi->fat_bits;
|
||||
--
|
||||
1.6.2.3
|
||||
|
268
debian/patches/bugfix/m68k/2.6.29/0033-Add-Amiga-Zorro-bus-modalias-support.patch
vendored
Normal file
268
debian/patches/bugfix/m68k/2.6.29/0033-Add-Amiga-Zorro-bus-modalias-support.patch
vendored
Normal file
|
@ -0,0 +1,268 @@
|
|||
From 0606ea4dcda3144ea5f7dddbe762ec11c95e1c88 Mon Sep 17 00:00:00 2001
|
||||
From: Geert Uytterhoeven <geert@linux-m68k.org>
|
||||
Date: Tue, 18 Nov 2008 21:13:53 +0100
|
||||
Subject: [PATCH 33/90] Add Amiga Zorro bus modalias support
|
||||
|
||||
Add Amiga Zorro bus modalias and uevent support
|
||||
|
||||
Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
|
||||
---
|
||||
drivers/net/a2065.c | 1 +
|
||||
drivers/net/ariadne.c | 1 +
|
||||
drivers/net/hydra.c | 1 +
|
||||
drivers/net/zorro8390.c | 1 +
|
||||
drivers/scsi/zorro7xx.c | 1 +
|
||||
drivers/video/cirrusfb.c | 1 +
|
||||
drivers/video/fm2fb.c | 1 +
|
||||
drivers/zorro/zorro-driver.c | 24 ++++++++++++++++++++++++
|
||||
drivers/zorro/zorro-sysfs.c | 11 +++++++++++
|
||||
include/linux/mod_devicetable.h | 10 ++++++++++
|
||||
include/linux/zorro.h | 13 +------------
|
||||
scripts/mod/file2alias.c | 15 +++++++++++++++
|
||||
12 files changed, 68 insertions(+), 12 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/a2065.c b/drivers/net/a2065.c
|
||||
index 7a60bdd..da2a0fd 100644
|
||||
--- a/drivers/net/a2065.c
|
||||
+++ b/drivers/net/a2065.c
|
||||
@@ -693,6 +693,7 @@ static struct zorro_device_id a2065_zorro_tbl[] __devinitdata = {
|
||||
{ ZORRO_PROD_AMERISTAR_A2065 },
|
||||
{ 0 }
|
||||
};
|
||||
+MODULE_DEVICE_TABLE(zorro, a2065_zorro_tbl);
|
||||
|
||||
static struct zorro_driver a2065_driver = {
|
||||
.name = "a2065",
|
||||
diff --git a/drivers/net/ariadne.c b/drivers/net/ariadne.c
|
||||
index e1d72e0..8fd445d 100644
|
||||
--- a/drivers/net/ariadne.c
|
||||
+++ b/drivers/net/ariadne.c
|
||||
@@ -147,6 +147,7 @@ static struct zorro_device_id ariadne_zorro_tbl[] __devinitdata = {
|
||||
{ ZORRO_PROD_VILLAGE_TRONIC_ARIADNE },
|
||||
{ 0 }
|
||||
};
|
||||
+MODULE_DEVICE_TABLE(zorro, ariadne_zorro_tbl);
|
||||
|
||||
static struct zorro_driver ariadne_driver = {
|
||||
.name = "ariadne",
|
||||
diff --git a/drivers/net/hydra.c b/drivers/net/hydra.c
|
||||
index 8ac0930..358d8ce 100644
|
||||
--- a/drivers/net/hydra.c
|
||||
+++ b/drivers/net/hydra.c
|
||||
@@ -72,6 +72,7 @@ static struct zorro_device_id hydra_zorro_tbl[] __devinitdata = {
|
||||
{ ZORRO_PROD_HYDRA_SYSTEMS_AMIGANET },
|
||||
{ 0 }
|
||||
};
|
||||
+MODULE_DEVICE_TABLE(zorro, hydra_zorro_tbl);
|
||||
|
||||
static struct zorro_driver hydra_driver = {
|
||||
.name = "hydra",
|
||||
diff --git a/drivers/net/zorro8390.c b/drivers/net/zorro8390.c
|
||||
index 37c84e3..d7755a9 100644
|
||||
--- a/drivers/net/zorro8390.c
|
||||
+++ b/drivers/net/zorro8390.c
|
||||
@@ -102,6 +102,7 @@ static struct zorro_device_id zorro8390_zorro_tbl[] __devinitdata = {
|
||||
{ ZORRO_PROD_INDIVIDUAL_COMPUTERS_X_SURF, },
|
||||
{ 0 }
|
||||
};
|
||||
+MODULE_DEVICE_TABLE(zorro, zorro8390_zorro_tbl);
|
||||
|
||||
static struct zorro_driver zorro8390_driver = {
|
||||
.name = "zorro8390",
|
||||
diff --git a/drivers/scsi/zorro7xx.c b/drivers/scsi/zorro7xx.c
|
||||
index 64d40a2..b416fa4 100644
|
||||
--- a/drivers/scsi/zorro7xx.c
|
||||
+++ b/drivers/scsi/zorro7xx.c
|
||||
@@ -68,6 +68,7 @@ static struct zorro_device_id zorro7xx_zorro_tbl[] __devinitdata = {
|
||||
},
|
||||
{ 0 }
|
||||
};
|
||||
+MODULE_DEVICE_TABLE(zorro, zorro7xx_zorro_tbl);
|
||||
|
||||
static int __devinit zorro7xx_init_one(struct zorro_dev *z,
|
||||
const struct zorro_device_id *ent)
|
||||
diff --git a/drivers/video/cirrusfb.c b/drivers/video/cirrusfb.c
|
||||
index a2aa6dd..cb7977b 100644
|
||||
--- a/drivers/video/cirrusfb.c
|
||||
+++ b/drivers/video/cirrusfb.c
|
||||
@@ -298,6 +298,7 @@ static const struct zorro_device_id cirrusfb_zorro_table[] = {
|
||||
},
|
||||
{ 0 }
|
||||
};
|
||||
+MODULE_DEVICE_TABLE(zorro, cirrusfb_zorro_table);
|
||||
|
||||
static const struct {
|
||||
zorro_id id2;
|
||||
diff --git a/drivers/video/fm2fb.c b/drivers/video/fm2fb.c
|
||||
index 6c91c61..1b0feb8 100644
|
||||
--- a/drivers/video/fm2fb.c
|
||||
+++ b/drivers/video/fm2fb.c
|
||||
@@ -219,6 +219,7 @@ static struct zorro_device_id fm2fb_devices[] __devinitdata = {
|
||||
{ ZORRO_PROD_HELFRICH_RAINBOW_II },
|
||||
{ 0 }
|
||||
};
|
||||
+MODULE_DEVICE_TABLE(zorro, fm2fb_devices);
|
||||
|
||||
static struct zorro_driver fm2fb_driver = {
|
||||
.name = "fm2fb",
|
||||
diff --git a/drivers/zorro/zorro-driver.c b/drivers/zorro/zorro-driver.c
|
||||
index e6c4390..aeb0615 100644
|
||||
--- a/drivers/zorro/zorro-driver.c
|
||||
+++ b/drivers/zorro/zorro-driver.c
|
||||
@@ -137,10 +137,34 @@ static int zorro_bus_match(struct device *dev, struct device_driver *drv)
|
||||
return 0;
|
||||
}
|
||||
|
||||
+static int zorro_uevent(struct device *dev, struct kobj_uevent_env *env)
|
||||
+{
|
||||
+#ifdef CONFIG_HOTPLUG
|
||||
+ struct zorro_dev *z;
|
||||
+
|
||||
+ if (!dev)
|
||||
+ return -ENODEV;
|
||||
+
|
||||
+ z = to_zorro_dev(dev);
|
||||
+ if (!z)
|
||||
+ return -ENODEV;
|
||||
+
|
||||
+ if (add_uevent_var(env, "ZORRO_ID=%08X", z->id) ||
|
||||
+ add_uevent_var(env, "ZORRO_SLOT_NAME=%s", z->dev.bus_id) ||
|
||||
+ add_uevent_var(env, "ZORRO_SLOT_ADDR=%04X", z->slotaddr) ||
|
||||
+ add_uevent_var(env, "MODALIAS=" ZORRO_DEVICE_MODALIAS_FMT, z->id))
|
||||
+ return -ENOMEM;
|
||||
+
|
||||
+ return 0;
|
||||
+#else /* !CONFIG_HOTPLUG */
|
||||
+ return -ENODEV;
|
||||
+#endif /* !CONFIG_HOTPLUG */
|
||||
+}
|
||||
|
||||
struct bus_type zorro_bus_type = {
|
||||
.name = "zorro",
|
||||
.match = zorro_bus_match,
|
||||
+ .uevent = zorro_uevent,
|
||||
.probe = zorro_device_probe,
|
||||
.remove = zorro_device_remove,
|
||||
};
|
||||
diff --git a/drivers/zorro/zorro-sysfs.c b/drivers/zorro/zorro-sysfs.c
|
||||
index 1d2a772..083491e 100644
|
||||
--- a/drivers/zorro/zorro-sysfs.c
|
||||
+++ b/drivers/zorro/zorro-sysfs.c
|
||||
@@ -68,6 +68,16 @@ static ssize_t zorro_read_config(struct kobject *kobj,
|
||||
return memory_read_from_buffer(buf, count, &off, &cd, sizeof(cd));
|
||||
}
|
||||
|
||||
+static ssize_t modalias_show(struct device *dev, struct device_attribute *attr,
|
||||
+ char *buf)
|
||||
+{
|
||||
+ struct zorro_dev *z = to_zorro_dev(dev);
|
||||
+
|
||||
+ return sprintf(buf, ZORRO_DEVICE_MODALIAS_FMT "\n", z->id);
|
||||
+}
|
||||
+
|
||||
+static DEVICE_ATTR(modalias, S_IRUGO, modalias_show, NULL);
|
||||
+
|
||||
static struct bin_attribute zorro_config_attr = {
|
||||
.attr = {
|
||||
.name = "config",
|
||||
@@ -89,6 +99,7 @@ int zorro_create_sysfs_dev_files(struct zorro_dev *z)
|
||||
(error = device_create_file(dev, &dev_attr_slotaddr)) ||
|
||||
(error = device_create_file(dev, &dev_attr_slotsize)) ||
|
||||
(error = device_create_file(dev, &dev_attr_resource)) ||
|
||||
+ (error = device_create_file(dev, &dev_attr_modalias)) ||
|
||||
(error = sysfs_create_bin_file(&dev->kobj, &zorro_config_attr)))
|
||||
return error;
|
||||
|
||||
diff --git a/include/linux/mod_devicetable.h b/include/linux/mod_devicetable.h
|
||||
index fde8667..c3add8e 100644
|
||||
--- a/include/linux/mod_devicetable.h
|
||||
+++ b/include/linux/mod_devicetable.h
|
||||
@@ -454,4 +454,14 @@ struct dmi_system_id {
|
||||
|
||||
#define DMI_MATCH(a, b) { a, b }
|
||||
|
||||
+struct zorro_device_id {
|
||||
+ __u32 id; /* Device ID or ZORRO_WILDCARD */
|
||||
+ kernel_ulong_t driver_data; /* Data private to the driver */
|
||||
+};
|
||||
+
|
||||
+#define ZORRO_WILDCARD (0xffffffff) /* not official */
|
||||
+
|
||||
+#define ZORRO_DEVICE_MODALIAS_FMT "zorro:i%08X"
|
||||
+
|
||||
+
|
||||
#endif /* LINUX_MOD_DEVICETABLE_H */
|
||||
diff --git a/include/linux/zorro.h b/include/linux/zorro.h
|
||||
index 913bfc2..908db1b 100644
|
||||
--- a/include/linux/zorro.h
|
||||
+++ b/include/linux/zorro.h
|
||||
@@ -38,8 +38,6 @@
|
||||
typedef __u32 zorro_id;
|
||||
|
||||
|
||||
-#define ZORRO_WILDCARD (0xffffffff) /* not official */
|
||||
-
|
||||
/* Include the ID list */
|
||||
#include <linux/zorro_ids.h>
|
||||
|
||||
@@ -116,6 +114,7 @@ struct ConfigDev {
|
||||
|
||||
#include <linux/init.h>
|
||||
#include <linux/ioport.h>
|
||||
+#include <linux/mod_devicetable.h>
|
||||
|
||||
#include <asm/zorro.h>
|
||||
|
||||
@@ -155,16 +154,6 @@ extern struct bus_type zorro_bus_type;
|
||||
|
||||
|
||||
/*
|
||||
- * Zorro device IDs
|
||||
- */
|
||||
-
|
||||
-struct zorro_device_id {
|
||||
- zorro_id id; /* Device ID or ZORRO_WILDCARD */
|
||||
- unsigned long driver_data; /* Data private to the driver */
|
||||
-};
|
||||
-
|
||||
-
|
||||
- /*
|
||||
* Zorro device drivers
|
||||
*/
|
||||
|
||||
diff --git a/scripts/mod/file2alias.c b/scripts/mod/file2alias.c
|
||||
index 4eea60b..3a2396a 100644
|
||||
--- a/scripts/mod/file2alias.c
|
||||
+++ b/scripts/mod/file2alias.c
|
||||
@@ -710,6 +710,17 @@ static int do_dmi_entry(const char *filename, struct dmi_system_id *id,
|
||||
strcat(alias, ":");
|
||||
return 1;
|
||||
}
|
||||
+
|
||||
+/* Looks like: zorro:iN. */
|
||||
+static int do_zorro_entry(const char *filename, struct zorro_device_id *id,
|
||||
+ char *alias)
|
||||
+{
|
||||
+ id->id = TO_NATIVE(id->id);
|
||||
+ strcpy(alias, "zorro:");
|
||||
+ ADD(alias, "i", id->id != ZORRO_WILDCARD, id->id);
|
||||
+ return 1;
|
||||
+}
|
||||
+
|
||||
/* Ignore any prefix, eg. some architectures prepend _ */
|
||||
static inline int sym_is(const char *symbol, const char *name)
|
||||
{
|
||||
@@ -849,6 +860,10 @@ void handle_moddevtable(struct module *mod, struct elf_info *info,
|
||||
do_table(symval, sym->st_size,
|
||||
sizeof(struct dmi_system_id), "dmi",
|
||||
do_dmi_entry, mod);
|
||||
+ else if (sym_is(symname, "__mod_zorro_device_table"))
|
||||
+ do_table(symval, sym->st_size,
|
||||
+ sizeof(struct zorro_device_id), "zorro",
|
||||
+ do_zorro_entry, mod);
|
||||
free(zeros);
|
||||
}
|
||||
|
||||
--
|
||||
1.6.2.3
|
||||
|
|
@ -0,0 +1,100 @@
|
|||
From 5be94cf28f112a2f570e50acdc738de1796ca00f Mon Sep 17 00:00:00 2001
|
||||
From: Geert Uytterhoeven <geert@linux-m68k.org>
|
||||
Date: Tue, 18 Nov 2008 21:25:15 +0100
|
||||
Subject: [PATCH 34/90] m68k: Fix debug=mem on Amiga
|
||||
|
||||
`debug=mem' on Amiga has been broken for a while.
|
||||
early_param() processing is done very/too early, i.e. before
|
||||
amiga_hw_present.CHIP_RAM has been set in amiga_identify(), causing
|
||||
amiga_savekmsg_setup() not to find any Chip RAM.
|
||||
|
||||
The quick hack below makes it work again by introducing an additional
|
||||
intermediate flag, but I don't like it.
|
||||
|
||||
Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
|
||||
|
||||
TODO: Suggestion from Roman Zippel <zippel@linux-m68k.org>:
|
||||
|
||||
The alternative to pull some of the setup ahead of the early_param() call.
|
||||
It shouldn't be a big problem to move the call after the config calls, as
|
||||
these should only do a very basic setup, everything else should be done
|
||||
via init calls (e.g. amiga_init_sound() might be such a candidate).
|
||||
---
|
||||
arch/m68k/amiga/config.c | 30 +++++++++++++++++++++---------
|
||||
1 files changed, 21 insertions(+), 9 deletions(-)
|
||||
|
||||
diff --git a/arch/m68k/amiga/config.c b/arch/m68k/amiga/config.c
|
||||
index 6e56275..71232cd 100644
|
||||
--- a/arch/m68k/amiga/config.c
|
||||
+++ b/arch/m68k/amiga/config.c
|
||||
@@ -106,6 +106,7 @@ static void amiga_reset(void);
|
||||
extern void amiga_init_sound(void);
|
||||
static void amiga_mem_console_write(struct console *co, const char *b,
|
||||
unsigned int count);
|
||||
+static void __init amiga_savekmsg_init(void);
|
||||
#ifdef CONFIG_HEARTBEAT
|
||||
static void amiga_heartbeat(int on);
|
||||
#endif
|
||||
@@ -116,6 +117,8 @@ static struct console amiga_console_driver = {
|
||||
.index = -1,
|
||||
};
|
||||
|
||||
+static int __initdata amiga_enable_debug_mem;
|
||||
+
|
||||
|
||||
/*
|
||||
* Motherboard Resources present in all Amiga models
|
||||
@@ -461,6 +464,9 @@ void __init config_amiga(void)
|
||||
/* initialize chipram allocator */
|
||||
amiga_chip_init();
|
||||
|
||||
+ if (amiga_enable_debug_mem && AMIGAHW_PRESENT(CHIP_RAM))
|
||||
+ amiga_savekmsg_init();
|
||||
+
|
||||
/* our beloved beeper */
|
||||
if (AMIGAHW_PRESENT(AMI_AUDIO))
|
||||
amiga_init_sound();
|
||||
@@ -780,18 +786,10 @@ static void amiga_mem_console_write(struct console *co, const char *s,
|
||||
}
|
||||
}
|
||||
|
||||
-static int __init amiga_savekmsg_setup(char *arg)
|
||||
+static void __init amiga_savekmsg_init(void)
|
||||
{
|
||||
static struct resource debug_res = { .name = "Debug" };
|
||||
|
||||
- if (!MACH_IS_AMIGA || strcmp(arg, "mem"))
|
||||
- goto done;
|
||||
-
|
||||
- if (!AMIGAHW_PRESENT(CHIP_RAM)) {
|
||||
- printk("Warning: no chipram present for debugging\n");
|
||||
- goto done;
|
||||
- }
|
||||
-
|
||||
savekmsg = amiga_chip_alloc_res(SAVEKMSG_MAXMEM, &debug_res);
|
||||
savekmsg->magic1 = SAVEKMSG_MAGIC1;
|
||||
savekmsg->magic2 = SAVEKMSG_MAGIC2;
|
||||
@@ -800,6 +798,20 @@ static int __init amiga_savekmsg_setup(char *arg)
|
||||
|
||||
amiga_console_driver.write = amiga_mem_console_write;
|
||||
register_console(&amiga_console_driver);
|
||||
+}
|
||||
+
|
||||
+static int __init amiga_savekmsg_setup(char *arg)
|
||||
+{
|
||||
+ if (!MACH_IS_AMIGA || strcmp(arg, "mem"))
|
||||
+ goto done;
|
||||
+
|
||||
+ if (!AMIGAHW_PRESENT(CHIP_RAM)) {
|
||||
+ printk("Warning: no chipram present for debugging\n");
|
||||
+ amiga_enable_debug_mem = 1;
|
||||
+ goto done;
|
||||
+ }
|
||||
+
|
||||
+ amiga_savekmsg_init();
|
||||
|
||||
done:
|
||||
return 0;
|
||||
--
|
||||
1.6.2.3
|
||||
|
198
debian/patches/bugfix/m68k/2.6.29/0035-m68k-allow-all-kernel-traps-to-be-handled-via-except.patch
vendored
Normal file
198
debian/patches/bugfix/m68k/2.6.29/0035-m68k-allow-all-kernel-traps-to-be-handled-via-except.patch
vendored
Normal file
|
@ -0,0 +1,198 @@
|
|||
From 9f997cc8ed06d1803a705e7004a1a29d28ec5a0e Mon Sep 17 00:00:00 2001
|
||||
From: Andreas Schwab <andreas@ubb.ca>
|
||||
Date: Tue, 18 Nov 2008 21:25:17 +0100
|
||||
Subject: [PATCH 35/90] m68k-allow-all-kernel-traps-to-be-handled-via-exception-fixups-all.diff
|
||||
|
||||
Allow all kernel traps to be handled via exception fixups.
|
||||
|
||||
Signed-off-by: Andreas Schwab <schwab@suse.de>
|
||||
|
||||
--------------------
|
||||
|
||||
From: Roman Zippel <zippel@linux-m68k.org>
|
||||
|
||||
Add helper function handle_kernel_fault() in signal.c, so
|
||||
frame_extra_sizes can become static and to reduce code duplication.
|
||||
Use base_trap_init() to initialize vectors, so basic initialization is
|
||||
all in one place.
|
||||
Remove the VEC_TRACE check from trap_c, I can only guess it's left from
|
||||
an old kgdb patch, as right now it does nothing.
|
||||
|
||||
Signed-off-by: Roman Zippel <zippel@linux-m68k.org>
|
||||
|
||||
--------------------
|
||||
|
||||
From: Andreas Schwab <andreas@ubb.ca>
|
||||
|
||||
Reinstate VEC_TRACE check, needed for 68020/30.
|
||||
|
||||
Signed-off-by: Andreas Schwab <schwab@suse.de>
|
||||
|
||||
--------------------
|
||||
|
||||
From: Roman Zippel <zippel@ubb.ca>
|
||||
|
||||
no need to set TIF_DELAYED_TRACE
|
||||
|
||||
Signed-off-by: Roman Zippel <zippel@linux-m68k.org>
|
||||
---
|
||||
arch/m68k/include/asm/processor_mm.h | 2 ++
|
||||
arch/m68k/kernel/signal.c | 24 +++++++++++++++++++++++-
|
||||
arch/m68k/kernel/traps.c | 21 ++++++++++++---------
|
||||
arch/m68k/mm/fault.c | 16 +---------------
|
||||
4 files changed, 38 insertions(+), 25 deletions(-)
|
||||
|
||||
diff --git a/arch/m68k/include/asm/processor_mm.h b/arch/m68k/include/asm/processor_mm.h
|
||||
index 1f61ef5..7755ca0 100644
|
||||
--- a/arch/m68k/include/asm/processor_mm.h
|
||||
+++ b/arch/m68k/include/asm/processor_mm.h
|
||||
@@ -127,4 +127,6 @@ unsigned long get_wchan(struct task_struct *p);
|
||||
|
||||
#define cpu_relax() barrier()
|
||||
|
||||
+extern int handle_kernel_fault(struct pt_regs *regs);
|
||||
+
|
||||
#endif
|
||||
diff --git a/arch/m68k/kernel/signal.c b/arch/m68k/kernel/signal.c
|
||||
index de2d05d..842bfd9 100644
|
||||
--- a/arch/m68k/kernel/signal.c
|
||||
+++ b/arch/m68k/kernel/signal.c
|
||||
@@ -42,6 +42,7 @@
|
||||
#include <linux/personality.h>
|
||||
#include <linux/tty.h>
|
||||
#include <linux/binfmts.h>
|
||||
+#include <linux/module.h>
|
||||
|
||||
#include <asm/setup.h>
|
||||
#include <asm/uaccess.h>
|
||||
@@ -53,7 +54,7 @@
|
||||
|
||||
asmlinkage int do_signal(sigset_t *oldset, struct pt_regs *regs);
|
||||
|
||||
-const int frame_extra_sizes[16] = {
|
||||
+static const int frame_extra_sizes[16] = {
|
||||
[1] = -1, /* sizeof(((struct frame *)0)->un.fmt1), */
|
||||
[2] = sizeof(((struct frame *)0)->un.fmt2),
|
||||
[3] = sizeof(((struct frame *)0)->un.fmt3),
|
||||
@@ -71,6 +72,27 @@ const int frame_extra_sizes[16] = {
|
||||
[15] = -1, /* sizeof(((struct frame *)0)->un.fmtf), */
|
||||
};
|
||||
|
||||
+int handle_kernel_fault(struct pt_regs *regs)
|
||||
+{
|
||||
+ const struct exception_table_entry *fixup;
|
||||
+ struct pt_regs *tregs;
|
||||
+
|
||||
+ /* Are we prepared to handle this kernel fault? */
|
||||
+ fixup = search_exception_tables(regs->pc);
|
||||
+ if (!fixup)
|
||||
+ return 0;
|
||||
+
|
||||
+ /* Create a new four word stack frame, discarding the old one. */
|
||||
+ regs->stkadj = frame_extra_sizes[regs->format];
|
||||
+ tregs = (struct pt_regs *)((long)regs + regs->stkadj);
|
||||
+ tregs->vector = regs->vector;
|
||||
+ tregs->format = 0;
|
||||
+ tregs->pc = fixup->fixup;
|
||||
+ tregs->sr = regs->sr;
|
||||
+
|
||||
+ return 1;
|
||||
+}
|
||||
+
|
||||
/*
|
||||
* Atomically swap in the new signal mask, and wait for a signal.
|
||||
*/
|
||||
diff --git a/arch/m68k/kernel/traps.c b/arch/m68k/kernel/traps.c
|
||||
index 184acc9..2c2b80b 100644
|
||||
--- a/arch/m68k/kernel/traps.c
|
||||
+++ b/arch/m68k/kernel/traps.c
|
||||
@@ -48,10 +48,7 @@ asmlinkage void nmihandler(void);
|
||||
asmlinkage void fpu_emu(void);
|
||||
#endif
|
||||
|
||||
-e_vector vectors[256] = {
|
||||
- [VEC_BUSERR] = buserr,
|
||||
- [VEC_SYS] = system_call,
|
||||
-};
|
||||
+e_vector vectors[256];
|
||||
|
||||
/* nmi handler for the Amiga */
|
||||
asm(".text\n"
|
||||
@@ -61,10 +58,11 @@ asm(".text\n"
|
||||
/*
|
||||
* this must be called very early as the kernel might
|
||||
* use some instruction that are emulated on the 060
|
||||
+ * and so we're prepared for early probe attempts (e.g. nf_init).
|
||||
*/
|
||||
void __init base_trap_init(void)
|
||||
{
|
||||
- if(MACH_IS_SUN3X) {
|
||||
+ if (MACH_IS_SUN3X) {
|
||||
extern e_vector *sun3x_prom_vbr;
|
||||
|
||||
__asm__ volatile ("movec %%vbr, %0" : "=r" (sun3x_prom_vbr));
|
||||
@@ -79,6 +77,10 @@ void __init base_trap_init(void)
|
||||
|
||||
vectors[VEC_UNIMPII] = unimp_vec;
|
||||
}
|
||||
+
|
||||
+ vectors[VEC_BUSERR] = buserr;
|
||||
+ vectors[VEC_ILLEGAL] = trap;
|
||||
+ vectors[VEC_SYS] = system_call;
|
||||
}
|
||||
|
||||
void __init trap_init (void)
|
||||
@@ -1055,10 +1057,11 @@ asmlinkage void trap_c(struct frame *fp)
|
||||
siginfo_t info;
|
||||
|
||||
if (fp->ptregs.sr & PS_S) {
|
||||
- if ((fp->ptregs.vector >> 2) == VEC_TRACE) {
|
||||
- /* traced a trapping instruction */
|
||||
- current->ptrace |= PT_DTRACE;
|
||||
- } else
|
||||
+ if (fp->ptregs.vector == VEC_TRACE << 2) {
|
||||
+ /* traced a trapping instruction on a 68020/30,
|
||||
+ * real exception will be executed afterwards.
|
||||
+ */
|
||||
+ } else if (!handle_kernel_fault(&fp->ptregs))
|
||||
bad_super_trap(fp);
|
||||
return;
|
||||
}
|
||||
diff --git a/arch/m68k/mm/fault.c b/arch/m68k/mm/fault.c
|
||||
index f493f03..69f0f22 100644
|
||||
--- a/arch/m68k/mm/fault.c
|
||||
+++ b/arch/m68k/mm/fault.c
|
||||
@@ -18,7 +18,6 @@
|
||||
#include <asm/pgalloc.h>
|
||||
|
||||
extern void die_if_kernel(char *, struct pt_regs *, long);
|
||||
-extern const int frame_extra_sizes[]; /* in m68k/kernel/signal.c */
|
||||
|
||||
int send_fault_sig(struct pt_regs *regs)
|
||||
{
|
||||
@@ -35,21 +34,8 @@ int send_fault_sig(struct pt_regs *regs)
|
||||
force_sig_info(siginfo.si_signo,
|
||||
&siginfo, current);
|
||||
} else {
|
||||
- const struct exception_table_entry *fixup;
|
||||
-
|
||||
- /* Are we prepared to handle this kernel fault? */
|
||||
- if ((fixup = search_exception_tables(regs->pc))) {
|
||||
- struct pt_regs *tregs;
|
||||
- /* Create a new four word stack frame, discarding the old
|
||||
- one. */
|
||||
- regs->stkadj = frame_extra_sizes[regs->format];
|
||||
- tregs = (struct pt_regs *)((ulong)regs + regs->stkadj);
|
||||
- tregs->vector = regs->vector;
|
||||
- tregs->format = 0;
|
||||
- tregs->pc = fixup->fixup;
|
||||
- tregs->sr = regs->sr;
|
||||
+ if (handle_kernel_fault(regs))
|
||||
return -1;
|
||||
- }
|
||||
|
||||
//if (siginfo.si_signo == SIGBUS)
|
||||
// force_sig_info(siginfo.si_signo,
|
||||
--
|
||||
1.6.2.3
|
||||
|
215
debian/patches/bugfix/m68k/2.6.29/0036-m68k-Add-support-for-EARLY_PRINTK-on-MVME16x.patch
vendored
Normal file
215
debian/patches/bugfix/m68k/2.6.29/0036-m68k-Add-support-for-EARLY_PRINTK-on-MVME16x.patch
vendored
Normal file
|
@ -0,0 +1,215 @@
|
|||
From 835529c7fe6f574fbd435a564c5a802906649ec4 Mon Sep 17 00:00:00 2001
|
||||
From: Kars de Jong <jongk@linux-m68k.org>
|
||||
Date: Thu, 20 Nov 2008 13:47:18 +0100
|
||||
Subject: [PATCH 36/90] m68k: Add support for EARLY_PRINTK on MVME16x
|
||||
|
||||
Added support for EARLY_PRINTK when running on an MVME16x board.
|
||||
|
||||
Signed-off-by: Kars de Jong <jongk@linux-m68k.org>
|
||||
Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
|
||||
---
|
||||
arch/m68k/Kconfig.debug | 11 +++
|
||||
arch/m68k/mvme16x/config.c | 160 ++++++++++++++++++++++++++++++++++++++++++++
|
||||
2 files changed, 171 insertions(+), 0 deletions(-)
|
||||
|
||||
diff --git a/arch/m68k/Kconfig.debug b/arch/m68k/Kconfig.debug
|
||||
index f53b6d5..e0283a0 100644
|
||||
--- a/arch/m68k/Kconfig.debug
|
||||
+++ b/arch/m68k/Kconfig.debug
|
||||
@@ -2,4 +2,15 @@ menu "Kernel hacking"
|
||||
|
||||
source "lib/Kconfig.debug"
|
||||
|
||||
+config EARLY_PRINTK
|
||||
+ bool "Early printk" if EMBEDDED
|
||||
+ depends on MVME16x
|
||||
+ default y
|
||||
+ help
|
||||
+ Write kernel log output directly to a serial port.
|
||||
+
|
||||
+ This is useful for kernel debugging when your machine crashes very
|
||||
+ early before the console code is initialized.
|
||||
+ You should normally say N here, unless you want to debug such a crash.
|
||||
+
|
||||
endmenu
|
||||
diff --git a/arch/m68k/mvme16x/config.c b/arch/m68k/mvme16x/config.c
|
||||
index 11edf61..318b514 100644
|
||||
--- a/arch/m68k/mvme16x/config.c
|
||||
+++ b/arch/m68k/mvme16x/config.c
|
||||
@@ -124,6 +124,163 @@ static void __init mvme16x_init_IRQ (void)
|
||||
#define PccSCCMICR 0x1d
|
||||
#define PccSCCTICR 0x1e
|
||||
#define PccSCCRICR 0x1f
|
||||
+#define PccTPIACKR 0x25
|
||||
+
|
||||
+#ifdef CONFIG_EARLY_PRINTK
|
||||
+
|
||||
+/**** cd2401 registers ****/
|
||||
+#define CD2401_ADDR (0xfff45000)
|
||||
+
|
||||
+#define CyGFRCR (0x81)
|
||||
+#define CyCCR (0x13)
|
||||
+#define CyCLR_CHAN (0x40)
|
||||
+#define CyINIT_CHAN (0x20)
|
||||
+#define CyCHIP_RESET (0x10)
|
||||
+#define CyENB_XMTR (0x08)
|
||||
+#define CyDIS_XMTR (0x04)
|
||||
+#define CyENB_RCVR (0x02)
|
||||
+#define CyDIS_RCVR (0x01)
|
||||
+#define CyCAR (0xee)
|
||||
+#define CyIER (0x11)
|
||||
+#define CyMdmCh (0x80)
|
||||
+#define CyRxExc (0x20)
|
||||
+#define CyRxData (0x08)
|
||||
+#define CyTxMpty (0x02)
|
||||
+#define CyTxRdy (0x01)
|
||||
+#define CyLICR (0x26)
|
||||
+#define CyRISR (0x89)
|
||||
+#define CyTIMEOUT (0x80)
|
||||
+#define CySPECHAR (0x70)
|
||||
+#define CyOVERRUN (0x08)
|
||||
+#define CyPARITY (0x04)
|
||||
+#define CyFRAME (0x02)
|
||||
+#define CyBREAK (0x01)
|
||||
+#define CyREOIR (0x84)
|
||||
+#define CyTEOIR (0x85)
|
||||
+#define CyMEOIR (0x86)
|
||||
+#define CyNOTRANS (0x08)
|
||||
+#define CyRFOC (0x30)
|
||||
+#define CyRDR (0xf8)
|
||||
+#define CyTDR (0xf8)
|
||||
+#define CyMISR (0x8b)
|
||||
+#define CyRISR (0x89)
|
||||
+#define CyTISR (0x8a)
|
||||
+#define CyMSVR1 (0xde)
|
||||
+#define CyMSVR2 (0xdf)
|
||||
+#define CyDSR (0x80)
|
||||
+#define CyDCD (0x40)
|
||||
+#define CyCTS (0x20)
|
||||
+#define CyDTR (0x02)
|
||||
+#define CyRTS (0x01)
|
||||
+#define CyRTPRL (0x25)
|
||||
+#define CyRTPRH (0x24)
|
||||
+#define CyCOR1 (0x10)
|
||||
+#define CyPARITY_NONE (0x00)
|
||||
+#define CyPARITY_E (0x40)
|
||||
+#define CyPARITY_O (0xC0)
|
||||
+#define Cy_5_BITS (0x04)
|
||||
+#define Cy_6_BITS (0x05)
|
||||
+#define Cy_7_BITS (0x06)
|
||||
+#define Cy_8_BITS (0x07)
|
||||
+#define CyCOR2 (0x17)
|
||||
+#define CyETC (0x20)
|
||||
+#define CyCtsAE (0x02)
|
||||
+#define CyCOR3 (0x16)
|
||||
+#define Cy_1_STOP (0x02)
|
||||
+#define Cy_2_STOP (0x04)
|
||||
+#define CyCOR4 (0x15)
|
||||
+#define CyREC_FIFO (0x0F) /* Receive FIFO threshold */
|
||||
+#define CyCOR5 (0x14)
|
||||
+#define CyCOR6 (0x18)
|
||||
+#define CyCOR7 (0x07)
|
||||
+#define CyRBPR (0xcb)
|
||||
+#define CyRCOR (0xc8)
|
||||
+#define CyTBPR (0xc3)
|
||||
+#define CyTCOR (0xc0)
|
||||
+#define CySCHR1 (0x1f)
|
||||
+#define CySCHR2 (0x1e)
|
||||
+#define CyTPR (0xda)
|
||||
+#define CyPILR1 (0xe3)
|
||||
+#define CyPILR2 (0xe0)
|
||||
+#define CyPILR3 (0xe1)
|
||||
+#define CyCMR (0x1b)
|
||||
+#define CyASYNC (0x02)
|
||||
+#define CyLICR (0x26)
|
||||
+#define CyLIVR (0x09)
|
||||
+#define CySCRL (0x23)
|
||||
+#define CySCRH (0x22)
|
||||
+#define CyTFTC (0x80)
|
||||
+
|
||||
+static void cons_write(struct console *co, const char *str, unsigned count)
|
||||
+{
|
||||
+ volatile unsigned char *base_addr = (u_char *)CD2401_ADDR;
|
||||
+ volatile u_char sink;
|
||||
+ u_char ier;
|
||||
+ int port;
|
||||
+ u_char do_lf = 0;
|
||||
+ int i = 0;
|
||||
+
|
||||
+ /* Ensure transmitter is enabled! */
|
||||
+
|
||||
+ port = 0;
|
||||
+ base_addr[CyCAR] = (u_char)port;
|
||||
+ while (base_addr[CyCCR])
|
||||
+ ;
|
||||
+ base_addr[CyCCR] = CyENB_XMTR;
|
||||
+
|
||||
+ ier = base_addr[CyIER];
|
||||
+ base_addr[CyIER] = CyTxMpty;
|
||||
+
|
||||
+ while (1) {
|
||||
+ if (pcc2chip[PccSCCTICR] & 0x20)
|
||||
+ {
|
||||
+ /* We have a Tx int. Acknowledge it */
|
||||
+ sink = pcc2chip[PccTPIACKR];
|
||||
+ if ((base_addr[CyLICR] >> 2) == port) {
|
||||
+ if (i == count) {
|
||||
+ /* Last char of string is now output */
|
||||
+ base_addr[CyTEOIR] = CyNOTRANS;
|
||||
+ break;
|
||||
+ }
|
||||
+ if (do_lf) {
|
||||
+ base_addr[CyTDR] = '\n';
|
||||
+ str++;
|
||||
+ i++;
|
||||
+ do_lf = 0;
|
||||
+ }
|
||||
+ else if (*str == '\n') {
|
||||
+ base_addr[CyTDR] = '\r';
|
||||
+ do_lf = 1;
|
||||
+ }
|
||||
+ else {
|
||||
+ base_addr[CyTDR] = *str++;
|
||||
+ i++;
|
||||
+ }
|
||||
+ base_addr[CyTEOIR] = 0;
|
||||
+ }
|
||||
+ else
|
||||
+ base_addr[CyTEOIR] = CyNOTRANS;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ base_addr[CyIER] = ier;
|
||||
+}
|
||||
+
|
||||
+static struct console cons_info =
|
||||
+{
|
||||
+ .name = "sercon",
|
||||
+ .write = cons_write,
|
||||
+ .flags = CON_PRINTBUFFER | CON_BOOT,
|
||||
+ .index = -1,
|
||||
+};
|
||||
+
|
||||
+void __init mvme16x_early_console(void)
|
||||
+{
|
||||
+ register_console(&cons_info);
|
||||
+
|
||||
+ printk(KERN_INFO "MVME16x: early console registered\n");
|
||||
+}
|
||||
+#endif
|
||||
|
||||
void __init config_mvme16x(void)
|
||||
{
|
||||
@@ -183,6 +340,9 @@ void __init config_mvme16x(void)
|
||||
pcc2chip[PccSCCMICR] = 0x10;
|
||||
pcc2chip[PccSCCTICR] = 0x10;
|
||||
pcc2chip[PccSCCRICR] = 0x10;
|
||||
+#ifdef CONFIG_EARLY_PRINTK
|
||||
+ mvme16x_early_console();
|
||||
+#endif
|
||||
}
|
||||
}
|
||||
|
||||
--
|
||||
1.6.2.3
|
||||
|
26
debian/patches/bugfix/m68k/2.6.29/0037-Update-for-m68k-Add-support-for-EARLY_PRINTK-on-MVM.patch
vendored
Normal file
26
debian/patches/bugfix/m68k/2.6.29/0037-Update-for-m68k-Add-support-for-EARLY_PRINTK-on-MVM.patch
vendored
Normal file
|
@ -0,0 +1,26 @@
|
|||
From 8a9c92868047664039b9ba6b3404327b19153b0d Mon Sep 17 00:00:00 2001
|
||||
From: Geert Uytterhoeven <geert@linux-m68k.org>
|
||||
Date: Mon, 24 Nov 2008 21:24:57 +0100
|
||||
Subject: [PATCH 37/90] Update for m68k: Add support for EARLY_PRINTK on MVME16x
|
||||
|
||||
Make mvme16x_early_console static
|
||||
---
|
||||
arch/m68k/mvme16x/config.c | 2 +-
|
||||
1 files changed, 1 insertions(+), 1 deletions(-)
|
||||
|
||||
diff --git a/arch/m68k/mvme16x/config.c b/arch/m68k/mvme16x/config.c
|
||||
index 318b514..fbdced1 100644
|
||||
--- a/arch/m68k/mvme16x/config.c
|
||||
+++ b/arch/m68k/mvme16x/config.c
|
||||
@@ -274,7 +274,7 @@ static struct console cons_info =
|
||||
.index = -1,
|
||||
};
|
||||
|
||||
-void __init mvme16x_early_console(void)
|
||||
+static void __init mvme16x_early_console(void)
|
||||
{
|
||||
register_console(&cons_info);
|
||||
|
||||
--
|
||||
1.6.2.3
|
||||
|
132
debian/patches/bugfix/m68k/2.6.29/0038-m68k-atari_scc-Upstream-updates.patch
vendored
Normal file
132
debian/patches/bugfix/m68k/2.6.29/0038-m68k-atari_scc-Upstream-updates.patch
vendored
Normal file
|
@ -0,0 +1,132 @@
|
|||
From 750a772bdafd0b59cf604830075519746d935024 Mon Sep 17 00:00:00 2001
|
||||
From: Geert Uytterhoeven <geert@linux-m68k.org>
|
||||
Date: Sun, 11 Jan 2009 11:05:25 +0100
|
||||
Subject: [PATCH 38/90] m68k: atari_scc - Upstream updates
|
||||
|
||||
Port a few upstream updates from vme_scc.c to atari_scc.c:
|
||||
- commit 31f35939d1d9bcfb3099b32c67b896d2792603f9 ("tty_port: Add a port
|
||||
level carrier detect operation")
|
||||
- commit 36c621d82b956ff6ff72273f848af53e6c581aba ("tty: Introduce a tty_port
|
||||
generic block_til_ready")
|
||||
- commit c9f19e96a2f33cd56c2bd19f87a0c4982d011c2b ("tty: Remove some
|
||||
pointless casts")
|
||||
|
||||
The first 2 were needed to fix a compilation problem.
|
||||
|
||||
Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
|
||||
---
|
||||
drivers/char/atari_scc.c | 27 ++++++++++++++++-----------
|
||||
1 files changed, 16 insertions(+), 11 deletions(-)
|
||||
|
||||
diff --git a/drivers/char/atari_scc.c b/drivers/char/atari_scc.c
|
||||
index fefff96..23fc4ed 100644
|
||||
--- a/drivers/char/atari_scc.c
|
||||
+++ b/drivers/char/atari_scc.c
|
||||
@@ -74,7 +74,7 @@ static void scc_disable_tx_interrupts(void *ptr);
|
||||
static void scc_enable_tx_interrupts(void *ptr);
|
||||
static void scc_disable_rx_interrupts(void *ptr);
|
||||
static void scc_enable_rx_interrupts(void *ptr);
|
||||
-static int scc_get_CD(void *ptr);
|
||||
+static int scc_carrier_raised(struct tty_port *port);
|
||||
static void scc_shutdown_port(void *ptr);
|
||||
static int scc_set_real_termios(void *ptr);
|
||||
static void scc_hungup(void *ptr);
|
||||
@@ -106,7 +106,6 @@ static struct real_driver scc_real_driver = {
|
||||
.enable_tx_interrupts = scc_enable_tx_interrupts,
|
||||
.disable_rx_interrupts = scc_disable_rx_interrupts,
|
||||
.enable_rx_interrupts = scc_enable_rx_interrupts,
|
||||
- .get_CD = scc_get_CD,
|
||||
.shutdown_port = scc_shutdown_port,
|
||||
.set_real_termios = scc_set_real_termios,
|
||||
.chars_in_buffer = scc_chars_in_buffer,
|
||||
@@ -133,6 +132,10 @@ static struct tty_operations scc_ops = {
|
||||
.break_ctl = scc_break_ctl,
|
||||
};
|
||||
|
||||
+static const struct tty_port_operations scc_port_ops = {
|
||||
+ .carrier_raised = scc_carrier_raised,
|
||||
+};
|
||||
+
|
||||
/* BRG values for the standard speeds and the various clock sources */
|
||||
|
||||
struct baud_entry {
|
||||
@@ -263,6 +266,8 @@ static void scc_init_portstructs(void)
|
||||
|
||||
for (i = 0; i < 2; i++) {
|
||||
port = scc_ports + i;
|
||||
+ tty_port_init(&port->gs.port);
|
||||
+ port->gs.port.ops = &scc_port_ops;
|
||||
port->gs.magic = SCC_MAGIC;
|
||||
port->gs.close_delay = HZ/2;
|
||||
port->gs.closing_wait = 30 * HZ;
|
||||
@@ -941,10 +946,10 @@ static void scc_enable_rx_interrupts(void *ptr)
|
||||
}
|
||||
|
||||
|
||||
-static int scc_get_CD(void *ptr)
|
||||
+static int scc_carrier_raised(struct tty_port *port)
|
||||
{
|
||||
- struct scc_port *port = ptr;
|
||||
- unsigned channel = port->channel;
|
||||
+ struct scc_port *sc = container_of(port, struct scc_port, gs.port);
|
||||
+ unsigned channel = sc->channel;
|
||||
|
||||
pr_debug("SCC: get_CD!\n");
|
||||
return !!(scc_last_status_reg[channel] & SR_DCD);
|
||||
@@ -1236,7 +1241,7 @@ static void scc_setsignals(struct scc_port *port, int dtr, int rts)
|
||||
|
||||
static void scc_send_xchar(struct tty_struct *tty, char ch)
|
||||
{
|
||||
- struct scc_port *port = (struct scc_port *)tty->driver_data;
|
||||
+ struct scc_port *port = tty->driver_data;
|
||||
|
||||
pr_debug("SCC: send_xchar ...\n");
|
||||
port->x_char = ch;
|
||||
@@ -1341,7 +1346,7 @@ static int scc_open(struct tty_struct *tty, struct file *filp)
|
||||
return retval;
|
||||
}
|
||||
|
||||
- port->c_dcd = scc_get_CD(port);
|
||||
+ port->c_dcd = tty_port_carrier_raised(&port->gs.port);
|
||||
|
||||
pr_debug(KERN_WARNING "SCC: enable rx ints ...\n");
|
||||
scc_enable_rx_interrupts(port);
|
||||
@@ -1353,7 +1358,7 @@ static int scc_open(struct tty_struct *tty, struct file *filp)
|
||||
|
||||
static void scc_throttle(struct tty_struct *tty)
|
||||
{
|
||||
- struct scc_port *port = (struct scc_port *)tty->driver_data;
|
||||
+ struct scc_port *port = tty->driver_data;
|
||||
unsigned long flags;
|
||||
|
||||
SCC_ACCESS_INIT(port);
|
||||
@@ -1371,7 +1376,7 @@ static void scc_throttle(struct tty_struct *tty)
|
||||
|
||||
static void scc_unthrottle(struct tty_struct *tty)
|
||||
{
|
||||
- struct scc_port *port = (struct scc_port *)tty->driver_data;
|
||||
+ struct scc_port *port = tty->driver_data;
|
||||
unsigned long flags;
|
||||
|
||||
SCC_ACCESS_INIT(port);
|
||||
@@ -1390,7 +1395,7 @@ static void scc_unthrottle(struct tty_struct *tty)
|
||||
static int scc_ioctl(struct tty_struct *tty, struct file *file,
|
||||
unsigned int cmd, unsigned long arg)
|
||||
{
|
||||
- struct scc_port *port = (struct scc_port *)tty->driver_data;
|
||||
+ struct scc_port *port = tty->driver_data;
|
||||
int retval;
|
||||
|
||||
pr_debug("SCC: ioctl! cmd %d, arg %lu\n", cmd, arg);
|
||||
@@ -1476,7 +1481,7 @@ static int scc_ioctl(struct tty_struct *tty, struct file *file,
|
||||
|
||||
static int scc_break_ctl(struct tty_struct *tty, int break_state)
|
||||
{
|
||||
- struct scc_port *port = (struct scc_port *)tty->driver_data;
|
||||
+ struct scc_port *port = tty->driver_data;
|
||||
unsigned long flags;
|
||||
|
||||
SCC_ACCESS_INIT(port);
|
||||
--
|
||||
1.6.2.3
|
||||
|
84
debian/patches/bugfix/m68k/2.6.29/0039-m68k-atari-Rename-mfp-to-st_mfp.patch
vendored
Normal file
84
debian/patches/bugfix/m68k/2.6.29/0039-m68k-atari-Rename-mfp-to-st_mfp.patch
vendored
Normal file
|
@ -0,0 +1,84 @@
|
|||
From c71d2a64892acb652163c7223e6113b4524063ab Mon Sep 17 00:00:00 2001
|
||||
From: Geert Uytterhoeven <geert@linux-m68k.org>
|
||||
Date: Thu, 5 Feb 2009 22:06:03 +0100
|
||||
Subject: [PATCH 39/90] m68k: atari - Rename "mfp" to "st_mfp"
|
||||
|
||||
http://kisskb.ellerman.id.au/kisskb/buildresult/72115/:
|
||||
| net/mac80211/ieee80211_i.h:327: error: syntax error before 'volatile'
|
||||
| net/mac80211/ieee80211_i.h:350: error: syntax error before '}' token
|
||||
| net/mac80211/ieee80211_i.h:455: error: field 'sta' has incomplete type
|
||||
| distcc[19430] ERROR: compile net/mac80211/main.c on sprygo/32 failed
|
||||
|
||||
This is caused by
|
||||
|
||||
| # define mfp ((*(volatile struct MFP*)MFP_BAS))
|
||||
|
||||
in arch/m68k/include/asm/atarihw.h, which conflicts with the new "mfp" enum in
|
||||
net/mac80211/ieee80211_i.h.
|
||||
|
||||
Rename "mfp" to "st_mfp", as it's a way too generic name for a global #define.
|
||||
|
||||
Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
|
||||
---
|
||||
drivers/char/atari_scc.c | 4 ++--
|
||||
drivers/net/atari_91C111.c | 4 ++--
|
||||
drivers/net/atari_ethernec.c | 4 ++--
|
||||
3 files changed, 6 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/drivers/char/atari_scc.c b/drivers/char/atari_scc.c
|
||||
index 23fc4ed..2bbd44c 100644
|
||||
--- a/drivers/char/atari_scc.c
|
||||
+++ b/drivers/char/atari_scc.c
|
||||
@@ -653,7 +653,7 @@ int atari_scc_init(void)
|
||||
if (!(ATARIHW_PRESENT(SCC) || ATARIHW_PRESENT(ST_ESCC)))
|
||||
return -ENODEV;
|
||||
|
||||
- scc_del = &mfp.par_dt_reg;
|
||||
+ scc_del = &st_mfp.par_dt_reg;
|
||||
|
||||
if (MACH_IS_TT)
|
||||
res = atari_tt_scc_init();
|
||||
@@ -1541,7 +1541,7 @@ static void atari_init_scc_port(int cflag)
|
||||
int baud = cflag & CBAUD;
|
||||
int clksrc, clkmode, div, reg3, reg5;
|
||||
|
||||
- scc_del = &mfp.par_dt_reg;
|
||||
+ scc_del = &st_mfp.par_dt_reg;
|
||||
|
||||
if (cflag & CBAUDEX)
|
||||
baud += B38400;
|
||||
diff --git a/drivers/net/atari_91C111.c b/drivers/net/atari_91C111.c
|
||||
index af2d255..a82ba3d 100644
|
||||
--- a/drivers/net/atari_91C111.c
|
||||
+++ b/drivers/net/atari_91C111.c
|
||||
@@ -2302,9 +2302,9 @@ static int __devinit smc_drv_probe(struct platform_device *pdev)
|
||||
timd = 255;
|
||||
printk(KERN_INFO "Timer D frequency: %u Hz\n", 38400/timd);
|
||||
/* set Timer D data Register */
|
||||
- mfp.tim_dt_d = timd; /* 200 Hz */
|
||||
+ st_mfp.tim_dt_d = timd; /* 200 Hz */
|
||||
/* start timer D, div = 1:100 */
|
||||
- mfp.tim_ct_cd = (mfp.tim_ct_cd & 0xf0) | 0x5;
|
||||
+ st_mfp.tim_ct_cd = (st_mfp.tim_ct_cd & 0xf0) | 0x5;
|
||||
}
|
||||
|
||||
return 0;
|
||||
diff --git a/drivers/net/atari_ethernec.c b/drivers/net/atari_ethernec.c
|
||||
index 74eeae4..05b5e2e 100644
|
||||
--- a/drivers/net/atari_ethernec.c
|
||||
+++ b/drivers/net/atari_ethernec.c
|
||||
@@ -622,9 +622,9 @@ static int __init ne_probe1(struct net_device *dev, int ioaddr)
|
||||
/* timer routine set up in atari_ethernec_probe() */
|
||||
if (dev->irq == IRQ_MFP_TIMD) {
|
||||
/* set Timer D data Register */
|
||||
- mfp.tim_dt_d = 123; /* 200 Hz */
|
||||
+ st_mfp.tim_dt_d = 123; /* 200 Hz */
|
||||
/* start timer D, div = 1:100 */
|
||||
- mfp.tim_ct_cd = (mfp.tim_ct_cd & 0xf0) | 0x6;
|
||||
+ st_mfp.tim_ct_cd = (st_mfp.tim_ct_cd & 0xf0) | 0x6;
|
||||
}
|
||||
/* Must make this shared in case other timer ints are needed */
|
||||
ret = request_irq(dev->irq, atari_ei_interrupt, IRQF_SHARED, name, dev);
|
||||
--
|
||||
1.6.2.3
|
||||
|
77
debian/patches/bugfix/m68k/2.6.29/0040-atari-Use-the-correct-mouse-interrupt-hook.patch
vendored
Normal file
77
debian/patches/bugfix/m68k/2.6.29/0040-atari-Use-the-correct-mouse-interrupt-hook.patch
vendored
Normal file
|
@ -0,0 +1,77 @@
|
|||
From 7abfd553a6fc2e554cffd90bb1dfd8f66f7a89fa Mon Sep 17 00:00:00 2001
|
||||
From: Michael Schmitz <schmitz@biophys.uni-duesseldorf.de>
|
||||
Date: Tue, 16 Dec 2008 21:26:03 +0100
|
||||
Subject: [PATCH 40/90] atari: Use the correct mouse interrupt hook
|
||||
|
||||
The Atari keyboard driver calls atari_mouse_interrupt_hook if it's set, not
|
||||
atari_input_mouse_interrupt_hook. Fix below.
|
||||
|
||||
[geert] Killed off atari_mouse_interrupt_hook completely, after fixing another
|
||||
incorrect assignment in atarimouse.c.
|
||||
|
||||
Signed-off-by: Michael Schmitz <schmitz@debian.org>
|
||||
Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
|
||||
---
|
||||
arch/m68k/atari/atakeyb.c | 7 ++-----
|
||||
arch/m68k/include/asm/atarikb.h | 2 --
|
||||
drivers/input/mouse/atarimouse.c | 2 +-
|
||||
3 files changed, 3 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git a/arch/m68k/atari/atakeyb.c b/arch/m68k/atari/atakeyb.c
|
||||
index 4add96d..8e0c692 100644
|
||||
--- a/arch/m68k/atari/atakeyb.c
|
||||
+++ b/arch/m68k/atari/atakeyb.c
|
||||
@@ -36,13 +36,10 @@
|
||||
|
||||
/* Hook for MIDI serial driver */
|
||||
void (*atari_MIDI_interrupt_hook) (void);
|
||||
-/* Hook for mouse driver */
|
||||
-void (*atari_mouse_interrupt_hook) (char *);
|
||||
/* Hook for keyboard inputdev driver */
|
||||
void (*atari_input_keyboard_interrupt_hook) (unsigned char, char);
|
||||
/* Hook for mouse inputdev driver */
|
||||
void (*atari_input_mouse_interrupt_hook) (char *);
|
||||
-EXPORT_SYMBOL(atari_mouse_interrupt_hook);
|
||||
EXPORT_SYMBOL(atari_input_keyboard_interrupt_hook);
|
||||
EXPORT_SYMBOL(atari_input_mouse_interrupt_hook);
|
||||
|
||||
@@ -263,8 +260,8 @@ repeat:
|
||||
kb_state.buf[kb_state.len++] = scancode;
|
||||
if (kb_state.len == 3) {
|
||||
kb_state.state = KEYBOARD;
|
||||
- if (atari_mouse_interrupt_hook)
|
||||
- atari_mouse_interrupt_hook(kb_state.buf);
|
||||
+ if (atari_input_mouse_interrupt_hook)
|
||||
+ atari_input_mouse_interrupt_hook(kb_state.buf);
|
||||
}
|
||||
break;
|
||||
|
||||
diff --git a/arch/m68k/include/asm/atarikb.h b/arch/m68k/include/asm/atarikb.h
|
||||
index 546e7da..68f3622 100644
|
||||
--- a/arch/m68k/include/asm/atarikb.h
|
||||
+++ b/arch/m68k/include/asm/atarikb.h
|
||||
@@ -34,8 +34,6 @@ void ikbd_joystick_disable(void);
|
||||
|
||||
/* Hook for MIDI serial driver */
|
||||
extern void (*atari_MIDI_interrupt_hook) (void);
|
||||
-/* Hook for mouse driver */
|
||||
-extern void (*atari_mouse_interrupt_hook) (char *);
|
||||
/* Hook for keyboard inputdev driver */
|
||||
extern void (*atari_input_keyboard_interrupt_hook) (unsigned char, char);
|
||||
/* Hook for mouse inputdev driver */
|
||||
diff --git a/drivers/input/mouse/atarimouse.c b/drivers/input/mouse/atarimouse.c
|
||||
index adf45b3..a57143c 100644
|
||||
--- a/drivers/input/mouse/atarimouse.c
|
||||
+++ b/drivers/input/mouse/atarimouse.c
|
||||
@@ -108,7 +108,7 @@ static int atamouse_open(struct input_dev *dev)
|
||||
static void atamouse_close(struct input_dev *dev)
|
||||
{
|
||||
ikbd_mouse_disable();
|
||||
- atari_mouse_interrupt_hook = NULL;
|
||||
+ atari_input_mouse_interrupt_hook = NULL;
|
||||
}
|
||||
|
||||
static int __init atamouse_init(void)
|
||||
--
|
||||
1.6.2.3
|
||||
|
|
@ -0,0 +1,30 @@
|
|||
From 6bb1901e9a7419bc43d2ddfec72942aa6b2505e9 Mon Sep 17 00:00:00 2001
|
||||
From: Michael Schmitz <schmitz@biophys.uni-duesseldorf.de>
|
||||
Date: Sun, 28 Dec 2008 23:00:45 +0100
|
||||
Subject: [PATCH 41/90] m68k: Fix atarimouse init
|
||||
|
||||
Atarimouse fails to load as a module (with ENODEV), due to a brown paper
|
||||
bag bug, misinterpreting the semantics of atari_keyb_init().
|
||||
|
||||
Signed-off-by: Michael Schmitz <schmitz@debian.org>
|
||||
Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
|
||||
---
|
||||
drivers/input/mouse/atarimouse.c | 2 +-
|
||||
1 files changed, 1 insertions(+), 1 deletions(-)
|
||||
|
||||
diff --git a/drivers/input/mouse/atarimouse.c b/drivers/input/mouse/atarimouse.c
|
||||
index a57143c..1b5f4dd 100644
|
||||
--- a/drivers/input/mouse/atarimouse.c
|
||||
+++ b/drivers/input/mouse/atarimouse.c
|
||||
@@ -118,7 +118,7 @@ static int __init atamouse_init(void)
|
||||
if (!MACH_IS_ATARI || !ATARIHW_PRESENT(ST_MFP))
|
||||
return -ENODEV;
|
||||
|
||||
- if (!atari_keyb_init())
|
||||
+ if (atari_keyb_init())
|
||||
return -ENODEV;
|
||||
|
||||
atamouse_dev = input_allocate_device();
|
||||
--
|
||||
1.6.2.3
|
||||
|
|
@ -0,0 +1,48 @@
|
|||
From 2d94866d017ce5a6cf1b71a8342a8a2fae5f0b77 Mon Sep 17 00:00:00 2001
|
||||
From: Linux/m68k legacy <xxx@linux-m68k.org>
|
||||
Date: Tue, 18 Nov 2008 21:22:20 +0100
|
||||
Subject: [PATCH 42/90] ADB raw packets
|
||||
|
||||
ADB: add support for raw packets
|
||||
---
|
||||
drivers/macintosh/adb.c | 7 ++++---
|
||||
include/linux/adb.h | 1 +
|
||||
2 files changed, 5 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/drivers/macintosh/adb.c b/drivers/macintosh/adb.c
|
||||
index 23741ce..57790a0 100644
|
||||
--- a/drivers/macintosh/adb.c
|
||||
+++ b/drivers/macintosh/adb.c
|
||||
@@ -412,13 +412,14 @@ adb_request(struct adb_request *req, void (*done)(struct adb_request *),
|
||||
if (nbytes < 1)
|
||||
return -EINVAL;
|
||||
|
||||
- req->nbytes = nbytes+1;
|
||||
+ i = (flags & ADBREQ_RAW) ? 0 : 1;
|
||||
+ req->nbytes = nbytes+i;
|
||||
req->done = done;
|
||||
req->reply_expected = flags & ADBREQ_REPLY;
|
||||
req->data[0] = ADB_PACKET;
|
||||
va_start(list, nbytes);
|
||||
- for (i = 0; i < nbytes; ++i)
|
||||
- req->data[i+1] = va_arg(list, int);
|
||||
+ while (i < req->nbytes)
|
||||
+ req->data[i++] = va_arg(list, int);
|
||||
va_end(list);
|
||||
|
||||
if (flags & ADBREQ_NOSEND)
|
||||
diff --git a/include/linux/adb.h b/include/linux/adb.h
|
||||
index 63bca50..1cf0e7d 100644
|
||||
--- a/include/linux/adb.h
|
||||
+++ b/include/linux/adb.h
|
||||
@@ -76,6 +76,7 @@ struct adb_driver {
|
||||
#define ADBREQ_REPLY 1 /* expect reply */
|
||||
#define ADBREQ_SYNC 2 /* poll until done */
|
||||
#define ADBREQ_NOSEND 4 /* build the request, but don't send it */
|
||||
+#define ADBREQ_RAW 8 /* send raw packet (don't prepend ADB_PACKET) */
|
||||
|
||||
/* Messages sent thru the client_list notifier. You should NOT stop
|
||||
the operation, at least not with this version */
|
||||
--
|
||||
1.6.2.3
|
||||
|
3827
debian/patches/bugfix/m68k/2.6.29/0043-m68k-Update-defconfigs-for-2.6.29.patch
vendored
Normal file
3827
debian/patches/bugfix/m68k/2.6.29/0043-m68k-Update-defconfigs-for-2.6.29.patch
vendored
Normal file
File diff suppressed because it is too large
Load Diff
45
debian/patches/bugfix/m68k/2.6.29/0044-netfilter-nf_conntrack_tcp-fix-unaligned-memory-ac.patch
vendored
Normal file
45
debian/patches/bugfix/m68k/2.6.29/0044-netfilter-nf_conntrack_tcp-fix-unaligned-memory-ac.patch
vendored
Normal file
|
@ -0,0 +1,45 @@
|
|||
From cbb1dbb63271d976f82819fb5cba88f47ac90616 Mon Sep 17 00:00:00 2001
|
||||
From: Mark H. Weaver <mhw@netris.org>
|
||||
Date: Mon, 23 Mar 2009 13:46:12 +0100
|
||||
Subject: [PATCH 44/90] netfilter: nf_conntrack_tcp: fix unaligned memory access in tcp_sack
|
||||
|
||||
[ Upstream commit 534f81a5068799799e264fd162e9488a129f98d4 ]
|
||||
|
||||
This patch fixes an unaligned memory access in tcp_sack while reading
|
||||
sequence numbers from TCP selective acknowledgement options. Prior to
|
||||
applying this patch, upstream linux-2.6.27.20 was occasionally
|
||||
generating messages like this on my sparc64 system:
|
||||
|
||||
[54678.532071] Kernel unaligned access at TPC[6b17d4] tcp_packet+0xcd4/0xd00
|
||||
|
||||
Acked-by: David S. Miller <davem@davemloft.net>
|
||||
Signed-off-by: Patrick McHardy <kaber@trash.net>
|
||||
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
|
||||
---
|
||||
net/netfilter/nf_conntrack_proto_tcp.c | 3 ++-
|
||||
1 files changed, 2 insertions(+), 1 deletions(-)
|
||||
|
||||
diff --git a/net/netfilter/nf_conntrack_proto_tcp.c b/net/netfilter/nf_conntrack_proto_tcp.c
|
||||
index f3fd154..56ac4ee 100644
|
||||
--- a/net/netfilter/nf_conntrack_proto_tcp.c
|
||||
+++ b/net/netfilter/nf_conntrack_proto_tcp.c
|
||||
@@ -15,6 +15,7 @@
|
||||
#include <linux/skbuff.h>
|
||||
#include <linux/ipv6.h>
|
||||
#include <net/ip6_checksum.h>
|
||||
+#include <asm/unaligned.h>
|
||||
|
||||
#include <net/tcp.h>
|
||||
|
||||
@@ -466,7 +467,7 @@ static void tcp_sack(const struct sk_buff *skb, unsigned int dataoff,
|
||||
for (i = 0;
|
||||
i < (opsize - TCPOLEN_SACK_BASE);
|
||||
i += TCPOLEN_SACK_PERBLOCK) {
|
||||
- tmp = ntohl(*((__be32 *)(ptr+i)+1));
|
||||
+ tmp = get_unaligned_be32((__be32 *)(ptr+i)+1);
|
||||
|
||||
if (after(tmp, *sack))
|
||||
*sack = tmp;
|
||||
--
|
||||
1.6.2.3
|
||||
|
96
debian/patches/bugfix/m68k/2.6.29/0045-udp-Wrong-locking-code-in-udp-seq_file-infrastructu.patch
vendored
Normal file
96
debian/patches/bugfix/m68k/2.6.29/0045-udp-Wrong-locking-code-in-udp-seq_file-infrastructu.patch
vendored
Normal file
|
@ -0,0 +1,96 @@
|
|||
From efc337c45aa1e1b13188508de2593694fbe85b55 Mon Sep 17 00:00:00 2001
|
||||
From: Vitaly Mayatskikh <v.mayatskih@gmail.com>
|
||||
Date: Mon, 23 Mar 2009 15:22:33 -0700
|
||||
Subject: [PATCH 45/90] udp: Wrong locking code in udp seq_file infrastructure
|
||||
|
||||
[ Upstream commit 30842f2989aacfaba3ccb39829b3417be9313dbe ]
|
||||
|
||||
Reading zero bytes from /proc/net/udp or other similar files which use
|
||||
the same seq_file udp infrastructure panics kernel in that way:
|
||||
|
||||
=====================================
|
||||
[ BUG: bad unlock balance detected! ]
|
||||
-------------------------------------
|
||||
read/1985 is trying to release lock (&table->hash[i].lock) at:
|
||||
[<ffffffff81321d83>] udp_seq_stop+0x27/0x29
|
||||
but there are no more locks to release!
|
||||
|
||||
other info that might help us debug this:
|
||||
1 lock held by read/1985:
|
||||
#0: (&p->lock){--..}, at: [<ffffffff810eefb6>] seq_read+0x38/0x348
|
||||
|
||||
stack backtrace:
|
||||
Pid: 1985, comm: read Not tainted 2.6.29-rc8 #9
|
||||
Call Trace:
|
||||
[<ffffffff81321d83>] ? udp_seq_stop+0x27/0x29
|
||||
[<ffffffff8106dab9>] print_unlock_inbalance_bug+0xd6/0xe1
|
||||
[<ffffffff8106db62>] lock_release_non_nested+0x9e/0x1c6
|
||||
[<ffffffff810ef030>] ? seq_read+0xb2/0x348
|
||||
[<ffffffff8106bdba>] ? mark_held_locks+0x68/0x86
|
||||
[<ffffffff81321d83>] ? udp_seq_stop+0x27/0x29
|
||||
[<ffffffff8106dde7>] lock_release+0x15d/0x189
|
||||
[<ffffffff8137163c>] _spin_unlock_bh+0x1e/0x34
|
||||
[<ffffffff81321d83>] udp_seq_stop+0x27/0x29
|
||||
[<ffffffff810ef239>] seq_read+0x2bb/0x348
|
||||
[<ffffffff810eef7e>] ? seq_read+0x0/0x348
|
||||
[<ffffffff8111aedd>] proc_reg_read+0x90/0xaf
|
||||
[<ffffffff810d878f>] vfs_read+0xa6/0x103
|
||||
[<ffffffff8106bfac>] ? trace_hardirqs_on_caller+0x12f/0x153
|
||||
[<ffffffff810d88a2>] sys_read+0x45/0x69
|
||||
[<ffffffff8101123a>] system_call_fastpath+0x16/0x1b
|
||||
BUG: scheduling while atomic: read/1985/0xffffff00
|
||||
INFO: lockdep is turned off.
|
||||
Modules linked in: cpufreq_ondemand acpi_cpufreq freq_table dm_multipath kvm ppdev snd_hda_codec_analog snd_hda_intel snd_hda_codec snd_hwdep snd_seq_dummy snd_seq_oss snd_seq_midi_event arc4 snd_s
|
||||
eq ecb thinkpad_acpi snd_seq_device iwl3945 hwmon sdhci_pci snd_pcm_oss sdhci rfkill mmc_core snd_mixer_oss i2c_i801 mac80211 yenta_socket ricoh_mmc i2c_core iTCO_wdt snd_pcm iTCO_vendor_support rs
|
||||
rc_nonstatic snd_timer snd lib80211 cfg80211 soundcore snd_page_alloc video parport_pc output parport e1000e [last unloaded: scsi_wait_scan]
|
||||
Pid: 1985, comm: read Not tainted 2.6.29-rc8 #9
|
||||
Call Trace:
|
||||
[<ffffffff8106b456>] ? __debug_show_held_locks+0x1b/0x24
|
||||
[<ffffffff81043660>] __schedule_bug+0x7e/0x83
|
||||
[<ffffffff8136ede9>] schedule+0xce/0x838
|
||||
[<ffffffff810d7972>] ? fsnotify_access+0x5f/0x67
|
||||
[<ffffffff810112d0>] ? sysret_careful+0xb/0x37
|
||||
[<ffffffff8106be9c>] ? trace_hardirqs_on_caller+0x1f/0x153
|
||||
[<ffffffff8137127b>] ? trace_hardirqs_on_thunk+0x3a/0x3f
|
||||
[<ffffffff810112f6>] sysret_careful+0x31/0x37
|
||||
read[1985]: segfault at 7fffc479bfe8 ip 0000003e7420a180 sp 00007fffc479bfa0 error 6
|
||||
Kernel panic - not syncing: Aiee, killing interrupt handler!
|
||||
|
||||
udp_seq_stop() tries to unlock not yet locked spinlock. The lock was lost
|
||||
during splitting global udp_hash_lock to subsequent spinlocks.
|
||||
|
||||
Signed-off by: Vitaly Mayatskikh <v.mayatskih@gmail.com>
|
||||
Acked-by: Eric Dumazet <dada1@cosmosbay.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
|
||||
---
|
||||
net/ipv4/udp.c | 6 +++++-
|
||||
1 files changed, 5 insertions(+), 1 deletions(-)
|
||||
|
||||
diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c
|
||||
index c47c989..c8bee18 100644
|
||||
--- a/net/ipv4/udp.c
|
||||
+++ b/net/ipv4/udp.c
|
||||
@@ -1614,7 +1614,8 @@ static struct sock *udp_get_next(struct seq_file *seq, struct sock *sk)
|
||||
} while (sk && (!net_eq(sock_net(sk), net) || sk->sk_family != state->family));
|
||||
|
||||
if (!sk) {
|
||||
- spin_unlock_bh(&state->udp_table->hash[state->bucket].lock);
|
||||
+ if (state->bucket < UDP_HTABLE_SIZE)
|
||||
+ spin_unlock_bh(&state->udp_table->hash[state->bucket].lock);
|
||||
return udp_get_first(seq, state->bucket + 1);
|
||||
}
|
||||
return sk;
|
||||
@@ -1632,6 +1633,9 @@ static struct sock *udp_get_idx(struct seq_file *seq, loff_t pos)
|
||||
|
||||
static void *udp_seq_start(struct seq_file *seq, loff_t *pos)
|
||||
{
|
||||
+ struct udp_iter_state *state = seq->private;
|
||||
+ state->bucket = UDP_HTABLE_SIZE;
|
||||
+
|
||||
return *pos ? udp_get_idx(seq, *pos-1) : SEQ_START_TOKEN;
|
||||
}
|
||||
|
||||
--
|
||||
1.6.2.3
|
||||
|
38
debian/patches/bugfix/m68k/2.6.29/0046-dnet-drivers-net-dnet.c-needs-linux-io.h.patch
vendored
Normal file
38
debian/patches/bugfix/m68k/2.6.29/0046-dnet-drivers-net-dnet.c-needs-linux-io.h.patch
vendored
Normal file
|
@ -0,0 +1,38 @@
|
|||
From dcd2d49aa7d2b6405457e042cd5f92e247ff0e10 Mon Sep 17 00:00:00 2001
|
||||
From: Geert Uytterhoeven <geert@linux-m68k.org>
|
||||
Date: Tue, 24 Mar 2009 13:19:50 -0700
|
||||
Subject: [PATCH 46/90] dnet: drivers/net/dnet.c needs <linux/io.h>
|
||||
|
||||
[ Upstream commit 142071b83426674ef2dab98cf2a6627328d0988e ]
|
||||
|
||||
On m68k:
|
||||
| drivers/net/dnet.c: In function 'dnet_readw_mac':
|
||||
| drivers/net/dnet.c:36: error: implicit declaration of function 'writel'
|
||||
| drivers/net/dnet.c:43: error: implicit declaration of function 'readl'
|
||||
| drivers/net/dnet.c: In function 'dnet_probe':
|
||||
| drivers/net/dnet.c:873: error: implicit declaration of function 'ioremap'
|
||||
| drivers/net/dnet.c:873: warning: assignment makes pointer from integer without a cast
|
||||
| drivers/net/dnet.c:939: error: implicit declaration of function 'iounmap'
|
||||
|
||||
Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
|
||||
---
|
||||
drivers/net/dnet.c | 1 +
|
||||
1 files changed, 1 insertions(+), 0 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/dnet.c b/drivers/net/dnet.c
|
||||
index 1b40632..edf23c9 100644
|
||||
--- a/drivers/net/dnet.c
|
||||
+++ b/drivers/net/dnet.c
|
||||
@@ -9,6 +9,7 @@
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
#include <linux/version.h>
|
||||
+#include <linux/io.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/moduleparam.h>
|
||||
#include <linux/kernel.h>
|
||||
--
|
||||
1.6.2.3
|
||||
|
36
debian/patches/bugfix/m68k/2.6.29/0047-bridge-bad-error-handling-when-adding-invalid-ether.patch
vendored
Normal file
36
debian/patches/bugfix/m68k/2.6.29/0047-bridge-bad-error-handling-when-adding-invalid-ether.patch
vendored
Normal file
|
@ -0,0 +1,36 @@
|
|||
From 813352bc3317b1104212667ce227a901a8d49908 Mon Sep 17 00:00:00 2001
|
||||
From: Stephen Hemminger <shemminger@vyatta.com>
|
||||
Date: Wed, 25 Mar 2009 21:01:47 -0700
|
||||
Subject: [PATCH 47/90] bridge: bad error handling when adding invalid ether address
|
||||
|
||||
[ Upstream commit cda6d377ec6b2ee2e58d563d0bd7eb313e0165df ]
|
||||
|
||||
This fixes an crash when empty bond device is added to a bridge.
|
||||
If an interface with invalid ethernet address (all zero) is added
|
||||
to a bridge, then bridge code detects it when setting up the forward
|
||||
databas entry. But the error unwind is broken, the bridge port object
|
||||
can get freed twice: once when ref count went to zeo, and once by kfree.
|
||||
Since object is never really accessible, just free it.
|
||||
|
||||
Signed-off-by: Stephen Hemminger <shemminger@vyatta.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
|
||||
---
|
||||
net/bridge/br_if.c | 1 -
|
||||
1 files changed, 0 insertions(+), 1 deletions(-)
|
||||
|
||||
diff --git a/net/bridge/br_if.c b/net/bridge/br_if.c
|
||||
index 727c5c5..8a96672 100644
|
||||
--- a/net/bridge/br_if.c
|
||||
+++ b/net/bridge/br_if.c
|
||||
@@ -426,7 +426,6 @@ err2:
|
||||
err1:
|
||||
kobject_del(&p->kobj);
|
||||
err0:
|
||||
- kobject_put(&p->kobj);
|
||||
dev_set_promiscuity(dev, -1);
|
||||
put_back:
|
||||
dev_put(dev);
|
||||
--
|
||||
1.6.2.3
|
||||
|
56
debian/patches/bugfix/m68k/2.6.29/0048-GRO-Disable-GRO-on-legacy-netif_rx-path.patch
vendored
Normal file
56
debian/patches/bugfix/m68k/2.6.29/0048-GRO-Disable-GRO-on-legacy-netif_rx-path.patch
vendored
Normal file
|
@ -0,0 +1,56 @@
|
|||
From ed421a64825501e0bdfe848c9decf05d270a9adb Mon Sep 17 00:00:00 2001
|
||||
From: Herbert Xu <herbert@gondor.apana.org.au>
|
||||
Date: Thu, 26 Mar 2009 00:59:10 -0700
|
||||
Subject: [PATCH 48/90] GRO: Disable GRO on legacy netif_rx path
|
||||
|
||||
[ Upstream commit 8f1ead2d1a626ed0c85b3d2c2046a49081d5933f ]
|
||||
|
||||
When I fixed the GRO crash in the legacy receive path I used
|
||||
napi_complete to replace __napi_complete. Unfortunately they're
|
||||
not the same when NETPOLL is enabled, which may result in us
|
||||
not calling __napi_complete at all.
|
||||
|
||||
What's more, we really do need to keep the __napi_complete call
|
||||
within the IRQ-off section since in theory an IRQ can occur in
|
||||
between and fill up the backlog to the maximum, causing us to
|
||||
lock up.
|
||||
|
||||
Since we can't seem to find a fix that works properly right now,
|
||||
this patch reverts all the GRO support from the netif_rx path.
|
||||
|
||||
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
|
||||
---
|
||||
net/core/dev.c | 9 +++------
|
||||
1 files changed, 3 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/net/core/dev.c b/net/core/dev.c
|
||||
index e3fe5c7..e438f54 100644
|
||||
--- a/net/core/dev.c
|
||||
+++ b/net/core/dev.c
|
||||
@@ -2588,18 +2588,15 @@ static int process_backlog(struct napi_struct *napi, int quota)
|
||||
local_irq_disable();
|
||||
skb = __skb_dequeue(&queue->input_pkt_queue);
|
||||
if (!skb) {
|
||||
+ __napi_complete(napi);
|
||||
local_irq_enable();
|
||||
- napi_complete(napi);
|
||||
- goto out;
|
||||
+ break;
|
||||
}
|
||||
local_irq_enable();
|
||||
|
||||
- napi_gro_receive(napi, skb);
|
||||
+ netif_receive_skb(skb);
|
||||
} while (++work < quota && jiffies == start_time);
|
||||
|
||||
- napi_gro_flush(napi);
|
||||
-
|
||||
-out:
|
||||
return work;
|
||||
}
|
||||
|
||||
--
|
||||
1.6.2.3
|
||||
|
55
debian/patches/bugfix/m68k/2.6.29/0049-ipv6-Plug-sk_buff-leak-in-ipv6_rcv-net-ipv6-ip6_in.patch
vendored
Normal file
55
debian/patches/bugfix/m68k/2.6.29/0049-ipv6-Plug-sk_buff-leak-in-ipv6_rcv-net-ipv6-ip6_in.patch
vendored
Normal file
|
@ -0,0 +1,55 @@
|
|||
From c8289b1f3fb7ab89146a29e280c8f64d4f51f53a Mon Sep 17 00:00:00 2001
|
||||
From: Jesper Nilsson <jesper.nilsson@axis.com>
|
||||
Date: Fri, 27 Mar 2009 00:17:45 -0700
|
||||
Subject: [PATCH 49/90] ipv6: Plug sk_buff leak in ipv6_rcv (net/ipv6/ip6_input.c)
|
||||
|
||||
[ Upstream commit 71f6f6dfdf7c7a67462386d9ea05c1095a89c555 ]
|
||||
|
||||
Commit 778d80be52699596bf70e0eb0761cf5e1e46088d
|
||||
(ipv6: Add disable_ipv6 sysctl to disable IPv6 operaion on specific interface)
|
||||
seems to have introduced a leak of sk_buff's for ipv6 traffic,
|
||||
at least in some configurations where idev is NULL, or when ipv6
|
||||
is disabled via sysctl.
|
||||
|
||||
The problem is that if the first condition of the if-statement
|
||||
returns non-NULL, it returns an skb with only one reference,
|
||||
and when the other conditions apply, execution jumps to the "out"
|
||||
label, which does not call kfree_skb for it.
|
||||
|
||||
To plug this leak, change to use the "drop" label instead.
|
||||
(this relies on it being ok to call kfree_skb on NULL)
|
||||
This also allows us to avoid calling rcu_read_unlock here,
|
||||
and removes the only user of the "out" label.
|
||||
|
||||
Signed-off-by: Jesper Nilsson <jesper.nilsson@axis.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
|
||||
---
|
||||
net/ipv6/ip6_input.c | 4 +---
|
||||
1 files changed, 1 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/net/ipv6/ip6_input.c b/net/ipv6/ip6_input.c
|
||||
index f171e8d..8f04bd9 100644
|
||||
--- a/net/ipv6/ip6_input.c
|
||||
+++ b/net/ipv6/ip6_input.c
|
||||
@@ -75,8 +75,7 @@ int ipv6_rcv(struct sk_buff *skb, struct net_device *dev, struct packet_type *pt
|
||||
if ((skb = skb_share_check(skb, GFP_ATOMIC)) == NULL ||
|
||||
!idev || unlikely(idev->cnf.disable_ipv6)) {
|
||||
IP6_INC_STATS_BH(net, idev, IPSTATS_MIB_INDISCARDS);
|
||||
- rcu_read_unlock();
|
||||
- goto out;
|
||||
+ goto drop;
|
||||
}
|
||||
|
||||
memset(IP6CB(skb), 0, sizeof(struct inet6_skb_parm));
|
||||
@@ -147,7 +146,6 @@ err:
|
||||
drop:
|
||||
rcu_read_unlock();
|
||||
kfree_skb(skb);
|
||||
-out:
|
||||
return 0;
|
||||
}
|
||||
|
||||
--
|
||||
1.6.2.3
|
||||
|
37
debian/patches/bugfix/m68k/2.6.29/0050-xfrm-spin_lock-should-be-spin_unlock-in-xfrm_st.patch
vendored
Normal file
37
debian/patches/bugfix/m68k/2.6.29/0050-xfrm-spin_lock-should-be-spin_unlock-in-xfrm_st.patch
vendored
Normal file
|
@ -0,0 +1,37 @@
|
|||
From ce2a2dc25260683d83a895bf11a2667aaac84feb Mon Sep 17 00:00:00 2001
|
||||
From: Chuck Ebbert <cebbert@redhat.com>
|
||||
Date: Fri, 27 Mar 2009 00:22:01 -0700
|
||||
Subject: [PATCH 50/90] xfrm: spin_lock() should be spin_unlock() in xfrm_state.c
|
||||
|
||||
[ Upstream commit 7d0b591c655ca0d72ebcbd242cf659a20a8995c5 ]
|
||||
|
||||
spin_lock() should be spin_unlock() in xfrm_state_walk_done().
|
||||
|
||||
caused by:
|
||||
commit 12a169e7d8f4b1c95252d8b04ed0f1033ed7cfe2
|
||||
"ipsec: Put dumpers on the dump list"
|
||||
|
||||
Reported-by: Marc Milgram <mmilgram@redhat.com>
|
||||
Signed-off-by: Chuck Ebbert <cebbert@redhat.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
|
||||
---
|
||||
net/xfrm/xfrm_state.c | 2 +-
|
||||
1 files changed, 1 insertions(+), 1 deletions(-)
|
||||
|
||||
diff --git a/net/xfrm/xfrm_state.c b/net/xfrm/xfrm_state.c
|
||||
index 62a5425..8227172 100644
|
||||
--- a/net/xfrm/xfrm_state.c
|
||||
+++ b/net/xfrm/xfrm_state.c
|
||||
@@ -1615,7 +1615,7 @@ void xfrm_state_walk_done(struct xfrm_state_walk *walk)
|
||||
|
||||
spin_lock_bh(&xfrm_state_lock);
|
||||
list_del(&walk->all);
|
||||
- spin_lock_bh(&xfrm_state_lock);
|
||||
+ spin_unlock_bh(&xfrm_state_lock);
|
||||
}
|
||||
EXPORT_SYMBOL(xfrm_state_walk_done);
|
||||
|
||||
--
|
||||
1.6.2.3
|
||||
|
108
debian/patches/bugfix/m68k/2.6.29/0051-USB-EHCI-add-software-retry-for-transaction-errors.patch
vendored
Normal file
108
debian/patches/bugfix/m68k/2.6.29/0051-USB-EHCI-add-software-retry-for-transaction-errors.patch
vendored
Normal file
|
@ -0,0 +1,108 @@
|
|||
From 39f8c8a3ef3864bb8ed42c5d2159d6a9b0f0b36c Mon Sep 17 00:00:00 2001
|
||||
From: Alan Stern <stern@rowland.harvard.edu>
|
||||
Date: Thu, 26 Mar 2009 18:25:05 +0000
|
||||
Subject: [PATCH 51/90] USB: EHCI: add software retry for transaction errors
|
||||
|
||||
upstream commit: a2c2706e1043c17139c2dafd171c4a5cf008ef7e
|
||||
|
||||
This patch (as1204) adds a software retry mechanism to ehci-hcd. It
|
||||
gets invoked when the driver encounters transaction errors on an
|
||||
asynchronous endpoint. On many systems, hardware deficiencies cause
|
||||
such errors to occur if one device is unplugged while the host is
|
||||
communicating with another device. With the patch, the failed
|
||||
transactions are retried and generally succeed the second or third
|
||||
time through.
|
||||
|
||||
This is based on code originally written by Koichiro Saito.
|
||||
|
||||
Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
|
||||
Tested by: Koichiro Saito <Saito.Koichiro@adniss.jp>
|
||||
CC: David Brownell <david-b@pacbell.net>
|
||||
Cc: stable <stable@kernel.org>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
|
||||
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
|
||||
---
|
||||
drivers/usb/host/ehci-q.c | 32 ++++++++++++++++++++++++++++++++
|
||||
drivers/usb/host/ehci.h | 3 +++
|
||||
2 files changed, 35 insertions(+), 0 deletions(-)
|
||||
|
||||
diff --git a/drivers/usb/host/ehci-q.c b/drivers/usb/host/ehci-q.c
|
||||
index ecc9b66..01132ac 100644
|
||||
--- a/drivers/usb/host/ehci-q.c
|
||||
+++ b/drivers/usb/host/ehci-q.c
|
||||
@@ -333,12 +333,40 @@ qh_completions (struct ehci_hcd *ehci, struct ehci_qh *qh)
|
||||
token = hc32_to_cpu(ehci, qtd->hw_token);
|
||||
|
||||
/* always clean up qtds the hc de-activated */
|
||||
+ retry_xacterr:
|
||||
if ((token & QTD_STS_ACTIVE) == 0) {
|
||||
|
||||
/* on STALL, error, and short reads this urb must
|
||||
* complete and all its qtds must be recycled.
|
||||
*/
|
||||
if ((token & QTD_STS_HALT) != 0) {
|
||||
+
|
||||
+ /* retry transaction errors until we
|
||||
+ * reach the software xacterr limit
|
||||
+ */
|
||||
+ if ((token & QTD_STS_XACT) &&
|
||||
+ QTD_CERR(token) == 0 &&
|
||||
+ --qh->xacterrs > 0 &&
|
||||
+ !urb->unlinked) {
|
||||
+ ehci_dbg(ehci,
|
||||
+ "detected XactErr len %d/%d retry %d\n",
|
||||
+ qtd->length - QTD_LENGTH(token), qtd->length,
|
||||
+ QH_XACTERR_MAX - qh->xacterrs);
|
||||
+
|
||||
+ /* reset the token in the qtd and the
|
||||
+ * qh overlay (which still contains
|
||||
+ * the qtd) so that we pick up from
|
||||
+ * where we left off
|
||||
+ */
|
||||
+ token &= ~QTD_STS_HALT;
|
||||
+ token |= QTD_STS_ACTIVE |
|
||||
+ (EHCI_TUNE_CERR << 10);
|
||||
+ qtd->hw_token = cpu_to_hc32(ehci,
|
||||
+ token);
|
||||
+ wmb();
|
||||
+ qh->hw_token = cpu_to_hc32(ehci, token);
|
||||
+ goto retry_xacterr;
|
||||
+ }
|
||||
stopped = 1;
|
||||
|
||||
/* magic dummy for some short reads; qh won't advance.
|
||||
@@ -421,6 +449,9 @@ halt:
|
||||
/* remove qtd; it's recycled after possible urb completion */
|
||||
list_del (&qtd->qtd_list);
|
||||
last = qtd;
|
||||
+
|
||||
+ /* reinit the xacterr counter for the next qtd */
|
||||
+ qh->xacterrs = QH_XACTERR_MAX;
|
||||
}
|
||||
|
||||
/* last urb's completion might still need calling */
|
||||
@@ -862,6 +893,7 @@ static void qh_link_async (struct ehci_hcd *ehci, struct ehci_qh *qh)
|
||||
head->qh_next.qh = qh;
|
||||
head->hw_next = dma;
|
||||
|
||||
+ qh->xacterrs = QH_XACTERR_MAX;
|
||||
qh->qh_state = QH_STATE_LINKED;
|
||||
/* qtd completions reported later by interrupt */
|
||||
}
|
||||
diff --git a/drivers/usb/host/ehci.h b/drivers/usb/host/ehci.h
|
||||
index 262b00c..c7385f2 100644
|
||||
--- a/drivers/usb/host/ehci.h
|
||||
+++ b/drivers/usb/host/ehci.h
|
||||
@@ -376,6 +376,9 @@ struct ehci_qh {
|
||||
#define QH_STATE_UNLINK_WAIT 4 /* LINKED and on reclaim q */
|
||||
#define QH_STATE_COMPLETING 5 /* don't touch token.HALT */
|
||||
|
||||
+ u8 xacterrs; /* XactErr retry counter */
|
||||
+#define QH_XACTERR_MAX 32 /* XactErr retry limit */
|
||||
+
|
||||
/* periodic schedule info */
|
||||
u8 usecs; /* intr bandwidth */
|
||||
u8 gap_uf; /* uframes split/csplit gap */
|
||||
--
|
||||
1.6.2.3
|
||||
|
77
debian/patches/bugfix/m68k/2.6.29/0052-USB-fix-USB_STORAGE_CYPRESS_ATACB.patch
vendored
Normal file
77
debian/patches/bugfix/m68k/2.6.29/0052-USB-fix-USB_STORAGE_CYPRESS_ATACB.patch
vendored
Normal file
|
@ -0,0 +1,77 @@
|
|||
From 760053b6503cd73758f4994a8305d4bc6f97fcfc Mon Sep 17 00:00:00 2001
|
||||
From: Boaz Harrosh <bharrosh@panasas.com>
|
||||
Date: Thu, 26 Mar 2009 18:25:07 +0000
|
||||
Subject: [PATCH 52/90] USB: fix USB_STORAGE_CYPRESS_ATACB
|
||||
|
||||
upstream commit: 1f4159c1620f74377e26d8a569d10ca5907ef475
|
||||
|
||||
commit 64a87b24: [SCSI] Let scsi_cmnd->cmnd use request->cmd buffer
|
||||
changed the scsi_eh_prep_cmnd logic by making it clear
|
||||
the ->cmnd buffer. But the sat to cypress atacb translation supposed
|
||||
the ->cmnd buffer wasn't modified.
|
||||
|
||||
This patch makes it set the ->cmnd buffer after scsi_eh_prep_cmnd call.
|
||||
The problem and a fix was reported by Matthieu CASTET <castet.matthieu@free.fr>
|
||||
|
||||
It also removes all the hackery fiddling of scsi_cmnd and scsi_eh_save by
|
||||
requesting from scsi_eh_prep_cmnd to prepare a read into ->sense_buffer,
|
||||
which is much more suitable a buffer for HW transfers, then after the command
|
||||
execution the regs read is copied into regs buffer before actual preparation
|
||||
of sense_buffer.
|
||||
|
||||
Also fix an alien comment character to my utf-8 editor.
|
||||
|
||||
Signed-off-by: Boaz Harrosh <bharrosh@panasas.com>
|
||||
Signed-off-by: Matthieu CASTET <castet.matthieu@free.fr>
|
||||
Cc: stable <stable@kernel.org>
|
||||
Cc: James Bottomley <James.Bottomley@HansenPartnership.com>
|
||||
Cc: Matthew Dharm <mdharm-kernel@one-eyed-alien.net>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
|
||||
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
|
||||
---
|
||||
drivers/usb/storage/cypress_atacb.c | 15 +++++++--------
|
||||
1 files changed, 7 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git a/drivers/usb/storage/cypress_atacb.c b/drivers/usb/storage/cypress_atacb.c
|
||||
index 898e67d..9466a99 100644
|
||||
--- a/drivers/usb/storage/cypress_atacb.c
|
||||
+++ b/drivers/usb/storage/cypress_atacb.c
|
||||
@@ -133,19 +133,18 @@ void cypress_atacb_passthrough(struct scsi_cmnd *srb, struct us_data *us)
|
||||
|
||||
/* build the command for
|
||||
* reading the ATA registers */
|
||||
- scsi_eh_prep_cmnd(srb, &ses, NULL, 0, 0);
|
||||
- srb->sdb.length = sizeof(regs);
|
||||
- sg_init_one(&ses.sense_sgl, regs, srb->sdb.length);
|
||||
- srb->sdb.table.sgl = &ses.sense_sgl;
|
||||
- srb->sc_data_direction = DMA_FROM_DEVICE;
|
||||
- srb->sdb.table.nents = 1;
|
||||
+ scsi_eh_prep_cmnd(srb, &ses, NULL, 0, sizeof(regs));
|
||||
+
|
||||
/* we use the same command as before, but we set
|
||||
* the read taskfile bit, for not executing atacb command,
|
||||
* but reading register selected in srb->cmnd[4]
|
||||
*/
|
||||
+ srb->cmd_len = 16;
|
||||
+ srb->cmnd = ses.cmnd;
|
||||
srb->cmnd[2] = 1;
|
||||
|
||||
usb_stor_transparent_scsi_command(srb, us);
|
||||
+ memcpy(regs, srb->sense_buffer, sizeof(regs));
|
||||
tmp_result = srb->result;
|
||||
scsi_eh_restore_cmnd(srb, &ses);
|
||||
/* we fail to get registers, report invalid command */
|
||||
@@ -162,8 +161,8 @@ void cypress_atacb_passthrough(struct scsi_cmnd *srb, struct us_data *us)
|
||||
|
||||
/* XXX we should generate sk, asc, ascq from status and error
|
||||
* regs
|
||||
- * (see 11.1 Error translation ATA device error to SCSI error map)
|
||||
- * and ata_to_sense_error from libata.
|
||||
+ * (see 11.1 Error translation ATA device error to SCSI error
|
||||
+ * map, and ata_to_sense_error from libata.)
|
||||
*/
|
||||
|
||||
/* Sense data is current and format is descriptor. */
|
||||
--
|
||||
1.6.2.3
|
||||
|
44
debian/patches/bugfix/m68k/2.6.29/0053-USB-usb-storage-increase-max_sectors-for-tape-driv.patch
vendored
Normal file
44
debian/patches/bugfix/m68k/2.6.29/0053-USB-usb-storage-increase-max_sectors-for-tape-driv.patch
vendored
Normal file
|
@ -0,0 +1,44 @@
|
|||
From 7127941c0e5fb2e3c15c4507aeab939e5e686dcd Mon Sep 17 00:00:00 2001
|
||||
From: Alan Stern <stern@rowland.harvard.edu>
|
||||
Date: Thu, 26 Mar 2009 18:25:09 +0000
|
||||
Subject: [PATCH 53/90] USB: usb-storage: increase max_sectors for tape drives
|
||||
|
||||
upstream commit: 5c16034d73da2c1b663aa25dedadbc533b3d811c
|
||||
|
||||
This patch (as1203) increases the max_sector limit for USB tape
|
||||
drives. By default usb-storage sets max_sectors to 240 (i.e., 120 KB)
|
||||
for all devices. But tape drives need a higher limit, since tapes can
|
||||
and do have very large block sizes. Without the ability to transfer
|
||||
an entire large block in a single command, such tapes can't be used.
|
||||
|
||||
This fixes Bugzilla #12207.
|
||||
|
||||
Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
|
||||
Reported-and-tested-by: Phil Mitchell <philipm@sybase.com>
|
||||
Cc: stable <stable@kernel.org>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
|
||||
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
|
||||
---
|
||||
drivers/usb/storage/scsiglue.c | 6 ++++++
|
||||
1 files changed, 6 insertions(+), 0 deletions(-)
|
||||
|
||||
diff --git a/drivers/usb/storage/scsiglue.c b/drivers/usb/storage/scsiglue.c
|
||||
index 727c506..ed710bc 100644
|
||||
--- a/drivers/usb/storage/scsiglue.c
|
||||
+++ b/drivers/usb/storage/scsiglue.c
|
||||
@@ -135,6 +135,12 @@ static int slave_configure(struct scsi_device *sdev)
|
||||
if (sdev->request_queue->max_sectors > max_sectors)
|
||||
blk_queue_max_sectors(sdev->request_queue,
|
||||
max_sectors);
|
||||
+ } else if (sdev->type == TYPE_TAPE) {
|
||||
+ /* Tapes need much higher max_sector limits, so just
|
||||
+ * raise it to the maximum possible (4 GB / 512) and
|
||||
+ * let the queue segment size sort out the real limit.
|
||||
+ */
|
||||
+ blk_queue_max_sectors(sdev->request_queue, 0x7FFFFF);
|
||||
}
|
||||
|
||||
/* Some USB host controllers can't do DMA; they have to use PIO.
|
||||
--
|
||||
1.6.2.3
|
||||
|
44
debian/patches/bugfix/m68k/2.6.29/0054-USB-gadget-fix-rndis-regression.patch
vendored
Normal file
44
debian/patches/bugfix/m68k/2.6.29/0054-USB-gadget-fix-rndis-regression.patch
vendored
Normal file
|
@ -0,0 +1,44 @@
|
|||
From e6c7f8a29d45054727c7f9334c4a42729af436cd Mon Sep 17 00:00:00 2001
|
||||
From: David Brownell <dbrownell@users.sourceforge.net>
|
||||
Date: Thu, 26 Mar 2009 18:25:12 +0000
|
||||
Subject: [PATCH 54/90] USB: gadget: fix rndis regression
|
||||
|
||||
upstream commit: 090b90118207e786d2990310d063fda5d52cce6e
|
||||
|
||||
Restore some code that was wrongly dropped from the RNDIS
|
||||
driver, and caused interop problems observed with OpenMoko.
|
||||
|
||||
The issue is with hardware which needs help conforming to part
|
||||
of the USB 2.0 spec (section 8.5.3.2); some can automagically
|
||||
send a ZLP in response to an unexpected IN, but not all chips
|
||||
will do that. We don't need to check the packet length ourselves
|
||||
the way earlier code did, since the UDC must already check it.
|
||||
But we do need to tell the UDC when it must force a short packet
|
||||
termination of the data stage.
|
||||
|
||||
(Based on a patch from Aric D. Blumer <aric at sdgsystems.com>)
|
||||
|
||||
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
|
||||
Cc: stable <stable@kernel.org>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
|
||||
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
|
||||
---
|
||||
drivers/usb/gadget/f_rndis.c | 2 +-
|
||||
1 files changed, 1 insertions(+), 1 deletions(-)
|
||||
|
||||
diff --git a/drivers/usb/gadget/f_rndis.c b/drivers/usb/gadget/f_rndis.c
|
||||
index 3a8bb53..fd7b356 100644
|
||||
--- a/drivers/usb/gadget/f_rndis.c
|
||||
+++ b/drivers/usb/gadget/f_rndis.c
|
||||
@@ -437,7 +437,7 @@ invalid:
|
||||
DBG(cdev, "rndis req%02x.%02x v%04x i%04x l%d\n",
|
||||
ctrl->bRequestType, ctrl->bRequest,
|
||||
w_value, w_index, w_length);
|
||||
- req->zero = 0;
|
||||
+ req->zero = (value < w_length);
|
||||
req->length = value;
|
||||
value = usb_ep_queue(cdev->gadget->ep0, req, GFP_ATOMIC);
|
||||
if (value < 0)
|
||||
--
|
||||
1.6.2.3
|
||||
|
96
debian/patches/bugfix/m68k/2.6.29/0055-USB-add-quirk-to-avoid-config-and-interface-strings.patch
vendored
Normal file
96
debian/patches/bugfix/m68k/2.6.29/0055-USB-add-quirk-to-avoid-config-and-interface-strings.patch
vendored
Normal file
|
@ -0,0 +1,96 @@
|
|||
From a9620fdcb8dab4d05f5677110c54b74e7ce1d621 Mon Sep 17 00:00:00 2001
|
||||
From: Alan Stern <stern@rowland.harvard.edu>
|
||||
Date: Thu, 26 Mar 2009 18:25:19 +0000
|
||||
Subject: [PATCH 55/90] USB: add quirk to avoid config and interface strings
|
||||
|
||||
upstream commit: 1662e3a7f076e51e3073faf9ce77157b529c475b
|
||||
|
||||
Apparently the Configuration and Interface strings aren't used as
|
||||
often as the Vendor, Product, and Serial strings. In at least one
|
||||
device (a Saitek Cyborg Gold 3D joystick), attempts to read the
|
||||
Configuration string cause the device to stop responding to Control
|
||||
requests.
|
||||
|
||||
This patch (as1226) adds a quirks flag, telling the kernel not to
|
||||
read a device's Configuration or Interface strings, together with a
|
||||
new quirk for the offending joystick.
|
||||
|
||||
Reported-by: Melchior FRANZ <melchior.franz@gmail.com>
|
||||
Tested-by: Melchior FRANZ <melchior.franz@gmail.com>
|
||||
Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
|
||||
Cc: stable <stable@kernel.org> [2.6.28 and 2.6.29, nothing earlier]
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
|
||||
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
|
||||
---
|
||||
drivers/usb/core/message.c | 3 ++-
|
||||
drivers/usb/core/quirks.c | 4 ++++
|
||||
drivers/usb/core/sysfs.c | 4 +++-
|
||||
include/linux/usb/quirks.h | 3 +++
|
||||
4 files changed, 12 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/drivers/usb/core/message.c b/drivers/usb/core/message.c
|
||||
index 49e7f56..3922fa9 100644
|
||||
--- a/drivers/usb/core/message.c
|
||||
+++ b/drivers/usb/core/message.c
|
||||
@@ -1719,7 +1719,8 @@ free_interfaces:
|
||||
}
|
||||
kfree(new_interfaces);
|
||||
|
||||
- if (cp->string == NULL)
|
||||
+ if (cp->string == NULL &&
|
||||
+ !(dev->quirks & USB_QUIRK_CONFIG_INTF_STRINGS))
|
||||
cp->string = usb_cache_string(dev, cp->desc.iConfiguration);
|
||||
|
||||
/* Now that all the interfaces are set up, register them
|
||||
diff --git a/drivers/usb/core/quirks.c b/drivers/usb/core/quirks.c
|
||||
index c070b34..ab93918 100644
|
||||
--- a/drivers/usb/core/quirks.c
|
||||
+++ b/drivers/usb/core/quirks.c
|
||||
@@ -54,6 +54,10 @@ static const struct usb_device_id usb_quirk_list[] = {
|
||||
{ USB_DEVICE(0x0638, 0x0a13), .driver_info =
|
||||
USB_QUIRK_STRING_FETCH_255 },
|
||||
|
||||
+ /* Saitek Cyborg Gold Joystick */
|
||||
+ { USB_DEVICE(0x06a3, 0x0006), .driver_info =
|
||||
+ USB_QUIRK_CONFIG_INTF_STRINGS },
|
||||
+
|
||||
/* M-Systems Flash Disk Pioneers */
|
||||
{ USB_DEVICE(0x08ec, 0x1000), .driver_info = USB_QUIRK_RESET_RESUME },
|
||||
|
||||
diff --git a/drivers/usb/core/sysfs.c b/drivers/usb/core/sysfs.c
|
||||
index 4cc2456..c667891 100644
|
||||
--- a/drivers/usb/core/sysfs.c
|
||||
+++ b/drivers/usb/core/sysfs.c
|
||||
@@ -13,6 +13,7 @@
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/string.h>
|
||||
#include <linux/usb.h>
|
||||
+#include <linux/usb/quirks.h>
|
||||
#include "usb.h"
|
||||
|
||||
/* Active configuration fields */
|
||||
@@ -813,7 +814,8 @@ int usb_create_sysfs_intf_files(struct usb_interface *intf)
|
||||
if (intf->sysfs_files_created || intf->unregistering)
|
||||
return 0;
|
||||
|
||||
- if (alt->string == NULL)
|
||||
+ if (alt->string == NULL &&
|
||||
+ !(udev->quirks & USB_QUIRK_CONFIG_INTF_STRINGS))
|
||||
alt->string = usb_cache_string(udev, alt->desc.iInterface);
|
||||
if (alt->string)
|
||||
retval = device_create_file(&intf->dev, &dev_attr_interface);
|
||||
diff --git a/include/linux/usb/quirks.h b/include/linux/usb/quirks.h
|
||||
index 7f6c603..2526f3b 100644
|
||||
--- a/include/linux/usb/quirks.h
|
||||
+++ b/include/linux/usb/quirks.h
|
||||
@@ -16,4 +16,7 @@
|
||||
/* device can't handle Set-Interface requests */
|
||||
#define USB_QUIRK_NO_SET_INTF 0x00000004
|
||||
|
||||
+/* device can't handle its Configuration or Interface strings */
|
||||
+#define USB_QUIRK_CONFIG_INTF_STRINGS 0x00000008
|
||||
+
|
||||
#endif /* __LINUX_USB_QUIRKS_H */
|
||||
--
|
||||
1.6.2.3
|
||||
|
42
debian/patches/bugfix/m68k/2.6.29/0056-KVM-VMX-Don-t-allow-uninhibited-access-to-EFER-on.patch
vendored
Normal file
42
debian/patches/bugfix/m68k/2.6.29/0056-KVM-VMX-Don-t-allow-uninhibited-access-to-EFER-on.patch
vendored
Normal file
|
@ -0,0 +1,42 @@
|
|||
From f438349efb8247cd0c1d453a4131b1f801bf5691 Mon Sep 17 00:00:00 2001
|
||||
From: Avi Kivity <avi@redhat.com>
|
||||
Date: Thu, 26 Mar 2009 23:05:03 +0000
|
||||
Subject: [PATCH 56/90] KVM: VMX: Don't allow uninhibited access to EFER on i386
|
||||
|
||||
upstream commit: 16175a796d061833aacfbd9672235f2d2725df65
|
||||
|
||||
vmx_set_msr() does not allow i386 guests to touch EFER, but they can still
|
||||
do so through the default: label in the switch. If they set EFER_LME, they
|
||||
can oops the host.
|
||||
|
||||
Fix by having EFER access through the normal channel (which will check for
|
||||
EFER_LME) even on i386.
|
||||
|
||||
Reported-and-tested-by: Benjamin Gilbert <bgilbert@cs.cmu.edu>
|
||||
Cc: stable@kernel.org
|
||||
Signed-off-by: Avi Kivity <avi@redhat.com>
|
||||
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
|
||||
---
|
||||
arch/x86/kvm/vmx.c | 2 +-
|
||||
1 files changed, 1 insertions(+), 1 deletions(-)
|
||||
|
||||
diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c
|
||||
index 7611af5..90de444 100644
|
||||
--- a/arch/x86/kvm/vmx.c
|
||||
+++ b/arch/x86/kvm/vmx.c
|
||||
@@ -928,11 +928,11 @@ static int vmx_set_msr(struct kvm_vcpu *vcpu, u32 msr_index, u64 data)
|
||||
int ret = 0;
|
||||
|
||||
switch (msr_index) {
|
||||
-#ifdef CONFIG_X86_64
|
||||
case MSR_EFER:
|
||||
vmx_load_host_state(vmx);
|
||||
ret = kvm_set_msr_common(vcpu, msr_index, data);
|
||||
break;
|
||||
+#ifdef CONFIG_X86_64
|
||||
case MSR_FS_BASE:
|
||||
vmcs_writel(GUEST_FS_BASE, data);
|
||||
break;
|
||||
--
|
||||
1.6.2.3
|
||||
|
78
debian/patches/bugfix/m68k/2.6.29/0057-KVM-SVM-set-accessed-bit-for-VMCB-segment-selector.patch
vendored
Normal file
78
debian/patches/bugfix/m68k/2.6.29/0057-KVM-SVM-set-accessed-bit-for-VMCB-segment-selector.patch
vendored
Normal file
|
@ -0,0 +1,78 @@
|
|||
From 0b7f8d0aba7562cb7baa9e92dd5144c11f610595 Mon Sep 17 00:00:00 2001
|
||||
From: Andre Przywara <andre.przywara@amd.com>
|
||||
Date: Thu, 26 Mar 2009 23:05:09 +0000
|
||||
Subject: [PATCH 57/90] KVM: SVM: set accessed bit for VMCB segment selectors
|
||||
|
||||
upstream commit: 1fbdc7a58512a6283e10fd27108197679db95ffa
|
||||
|
||||
In the segment descriptor _cache_ the accessed bit is always set
|
||||
(although it can be cleared in the descriptor itself). Since Intel
|
||||
checks for this condition on a VMENTRY, set this bit in the AMD path
|
||||
to enable cross vendor migration.
|
||||
|
||||
Cc: stable@kernel.org
|
||||
Signed-off-by: Andre Przywara <andre.przywara@amd.com>
|
||||
Acked-By: Amit Shah <amit.shah@redhat.com>
|
||||
Signed-off-by: Avi Kivity <avi@redhat.com>
|
||||
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
|
||||
---
|
||||
arch/x86/kvm/svm.c | 41 +++++++++++++++++++++++++++++------------
|
||||
1 files changed, 29 insertions(+), 12 deletions(-)
|
||||
|
||||
diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c
|
||||
index a9e769e..da56821 100644
|
||||
--- a/arch/x86/kvm/svm.c
|
||||
+++ b/arch/x86/kvm/svm.c
|
||||
@@ -760,20 +760,37 @@ static void svm_get_segment(struct kvm_vcpu *vcpu,
|
||||
var->db = (s->attrib >> SVM_SELECTOR_DB_SHIFT) & 1;
|
||||
var->g = (s->attrib >> SVM_SELECTOR_G_SHIFT) & 1;
|
||||
|
||||
- /*
|
||||
- * SVM always stores 0 for the 'G' bit in the CS selector in
|
||||
- * the VMCB on a VMEXIT. This hurts cross-vendor migration:
|
||||
- * Intel's VMENTRY has a check on the 'G' bit.
|
||||
- */
|
||||
- if (seg == VCPU_SREG_CS)
|
||||
+ switch (seg) {
|
||||
+ case VCPU_SREG_CS:
|
||||
+ /*
|
||||
+ * SVM always stores 0 for the 'G' bit in the CS selector in
|
||||
+ * the VMCB on a VMEXIT. This hurts cross-vendor migration:
|
||||
+ * Intel's VMENTRY has a check on the 'G' bit.
|
||||
+ */
|
||||
var->g = s->limit > 0xfffff;
|
||||
-
|
||||
- /*
|
||||
- * Work around a bug where the busy flag in the tr selector
|
||||
- * isn't exposed
|
||||
- */
|
||||
- if (seg == VCPU_SREG_TR)
|
||||
+ break;
|
||||
+ case VCPU_SREG_TR:
|
||||
+ /*
|
||||
+ * Work around a bug where the busy flag in the tr selector
|
||||
+ * isn't exposed
|
||||
+ */
|
||||
var->type |= 0x2;
|
||||
+ break;
|
||||
+ case VCPU_SREG_DS:
|
||||
+ case VCPU_SREG_ES:
|
||||
+ case VCPU_SREG_FS:
|
||||
+ case VCPU_SREG_GS:
|
||||
+ /*
|
||||
+ * The accessed bit must always be set in the segment
|
||||
+ * descriptor cache, although it can be cleared in the
|
||||
+ * descriptor, the cached bit always remains at 1. Since
|
||||
+ * Intel has a check on this, set it here to support
|
||||
+ * cross-vendor migration.
|
||||
+ */
|
||||
+ if (!var->unusable)
|
||||
+ var->type |= 0x1;
|
||||
+ break;
|
||||
+ }
|
||||
|
||||
var->unusable = !var->present;
|
||||
}
|
||||
--
|
||||
1.6.2.3
|
||||
|
39
debian/patches/bugfix/m68k/2.6.29/0058-ath9k-downgrade-xmit-queue-full-message-to-xmit-deb.patch
vendored
Normal file
39
debian/patches/bugfix/m68k/2.6.29/0058-ath9k-downgrade-xmit-queue-full-message-to-xmit-deb.patch
vendored
Normal file
|
@ -0,0 +1,39 @@
|
|||
From 35f0b41fd7342f56c3e756ff27e355d25f2bc06b Mon Sep 17 00:00:00 2001
|
||||
From: Luis R. Rodriguez <lrodriguez@atheros.com>
|
||||
Date: Thu, 26 Mar 2009 23:05:17 +0000
|
||||
Subject: [PATCH 58/90] ath9k: downgrade xmit queue full message to xmit debug
|
||||
|
||||
upstream commit: c117fa0bf5f5b3d362b590ed6e80499defe14505
|
||||
|
||||
This is not a fatal message, hitting it simply means we're
|
||||
going to tell the upper layers to slow their horses down but
|
||||
as we make more descriptors available we let the show continue
|
||||
by waking up the queues in ath_wake_mac80211_queue().
|
||||
|
||||
We downgrade this as otherwise we fill up your kernel log with
|
||||
messages which can be common under heavy traffic.
|
||||
|
||||
Cc: stable@kernel.org
|
||||
Signed-off-by: Luis R. Rodriguez <lrodriguez@atheros.com>
|
||||
Signed-off-by: John W. Linville <linville@tuxdriver.com>
|
||||
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
|
||||
---
|
||||
drivers/net/wireless/ath9k/xmit.c | 2 +-
|
||||
1 files changed, 1 insertions(+), 1 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/wireless/ath9k/xmit.c b/drivers/net/wireless/ath9k/xmit.c
|
||||
index c92f0c6..80af54e 100644
|
||||
--- a/drivers/net/wireless/ath9k/xmit.c
|
||||
+++ b/drivers/net/wireless/ath9k/xmit.c
|
||||
@@ -2035,7 +2035,7 @@ struct ath_txq *ath_test_get_txq(struct ath_softc *sc, struct sk_buff *skb)
|
||||
|
||||
/* Try to avoid running out of descriptors */
|
||||
if (txq->axq_depth >= (ATH_TXBUF - 20)) {
|
||||
- DPRINTF(sc, ATH_DBG_FATAL,
|
||||
+ DPRINTF(sc, ATH_DBG_XMIT,
|
||||
"TX queue: %d is full, depth: %d\n",
|
||||
qnum, txq->axq_depth);
|
||||
ieee80211_stop_queue(sc->hw, skb_get_queue_mapping(skb));
|
||||
--
|
||||
1.6.2.3
|
||||
|
42
debian/patches/bugfix/m68k/2.6.29/0059-cifs-fix-buffer-format-byte-on-NT-Rename-hardlink.patch
vendored
Normal file
42
debian/patches/bugfix/m68k/2.6.29/0059-cifs-fix-buffer-format-byte-on-NT-Rename-hardlink.patch
vendored
Normal file
|
@ -0,0 +1,42 @@
|
|||
From 46d2a92135c95066364a8603297b637314a85090 Mon Sep 17 00:00:00 2001
|
||||
From: Jeff Layton <jlayton@tupile.poochiereds.net>
|
||||
Date: Thu, 26 Mar 2009 23:05:21 +0000
|
||||
Subject: [PATCH 59/90] cifs: fix buffer format byte on NT Rename/hardlink
|
||||
|
||||
upstream commit: fcc7c09d94be7b75c9ea2beb22d0fae191c6b4b9
|
||||
|
||||
Discovered at Connnectathon 2009...
|
||||
|
||||
The buffer format byte and the pad are transposed in NT_RENAME calls
|
||||
(which are used to set hardlinks). Most servers seem to ignore this
|
||||
fact, but NetApp filers throw back an error due to this problem. This
|
||||
patch fixes it.
|
||||
|
||||
CC: Stable <stable@kernel.org>
|
||||
Signed-off-by: Jeff Layton <jlayton@redhat.com>
|
||||
Signed-off-by: Steve French <sfrench@us.ibm.com>
|
||||
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
|
||||
---
|
||||
fs/cifs/cifssmb.c | 6 ++++--
|
||||
1 files changed, 4 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/fs/cifs/cifssmb.c b/fs/cifs/cifssmb.c
|
||||
index 939e2f7..71ae000 100644
|
||||
--- a/fs/cifs/cifssmb.c
|
||||
+++ b/fs/cifs/cifssmb.c
|
||||
@@ -2356,8 +2356,10 @@ winCreateHardLinkRetry:
|
||||
PATH_MAX, nls_codepage, remap);
|
||||
name_len++; /* trailing null */
|
||||
name_len *= 2;
|
||||
- pSMB->OldFileName[name_len] = 0; /* pad */
|
||||
- pSMB->OldFileName[name_len + 1] = 0x04;
|
||||
+
|
||||
+ /* protocol specifies ASCII buffer format (0x04) for unicode */
|
||||
+ pSMB->OldFileName[name_len] = 0x04;
|
||||
+ pSMB->OldFileName[name_len + 1] = 0x00; /* pad */
|
||||
name_len2 =
|
||||
cifsConvertToUCS((__le16 *)&pSMB->OldFileName[name_len + 2],
|
||||
toName, PATH_MAX, nls_codepage, remap);
|
||||
--
|
||||
1.6.2.3
|
||||
|
57
debian/patches/bugfix/m68k/2.6.29/0060-ath5k-use-spin_lock_irqsave-for-beacon-lock.patch
vendored
Normal file
57
debian/patches/bugfix/m68k/2.6.29/0060-ath5k-use-spin_lock_irqsave-for-beacon-lock.patch
vendored
Normal file
|
@ -0,0 +1,57 @@
|
|||
From 8bc20526fc862d18997fd6f267a985d428fbc6e5 Mon Sep 17 00:00:00 2001
|
||||
From: Bob Copeland <me@bobcopeland.com>
|
||||
Date: Thu, 26 Mar 2009 23:05:28 +0000
|
||||
Subject: [PATCH 60/90] ath5k: use spin_lock_irqsave for beacon lock
|
||||
|
||||
upstream commit: b5f03956c56d72ad336e5c2c42a025f25d952c30
|
||||
|
||||
ath5k_reset can be called from process context, which in turn can
|
||||
call ath5k_beacon_config which takes the sc->block spinlock. Since
|
||||
it can also be taken in hard irq context, use spin_lock_irqsave
|
||||
everywhere. This fixes a potential deadlock in adhoc mode.
|
||||
|
||||
Changes-licensed-under: 3-Clause-BSD
|
||||
|
||||
Cc: stable@kernel.org
|
||||
Signed-off-by: Bob Copeland <me@bobcopeland.com>
|
||||
Signed-off-by: John W. Linville <linville@tuxdriver.com>
|
||||
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
|
||||
---
|
||||
drivers/net/wireless/ath5k/base.c | 6 +++---
|
||||
1 files changed, 3 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/wireless/ath5k/base.c b/drivers/net/wireless/ath5k/base.c
|
||||
index 1d77ee9..16f207c 100644
|
||||
--- a/drivers/net/wireless/ath5k/base.c
|
||||
+++ b/drivers/net/wireless/ath5k/base.c
|
||||
@@ -1668,7 +1668,6 @@ ath5k_check_ibss_tsf(struct ath5k_softc *sc, struct sk_buff *skb,
|
||||
}
|
||||
}
|
||||
|
||||
-
|
||||
static void
|
||||
ath5k_tasklet_rx(unsigned long data)
|
||||
{
|
||||
@@ -2188,6 +2187,7 @@ static void
|
||||
ath5k_beacon_config(struct ath5k_softc *sc)
|
||||
{
|
||||
struct ath5k_hw *ah = sc->ah;
|
||||
+ unsigned long flags;
|
||||
|
||||
ath5k_hw_set_imr(ah, 0);
|
||||
sc->bmisscount = 0;
|
||||
@@ -2211,9 +2211,9 @@ ath5k_beacon_config(struct ath5k_softc *sc)
|
||||
|
||||
if (sc->opmode == NL80211_IFTYPE_ADHOC) {
|
||||
if (ath5k_hw_hasveol(ah)) {
|
||||
- spin_lock(&sc->block);
|
||||
+ spin_lock_irqsave(&sc->block, flags);
|
||||
ath5k_beacon_send(sc);
|
||||
- spin_unlock(&sc->block);
|
||||
+ spin_unlock_irqrestore(&sc->block, flags);
|
||||
}
|
||||
} else
|
||||
ath5k_beacon_update_timers(sc, -1);
|
||||
--
|
||||
1.6.2.3
|
||||
|
42
debian/patches/bugfix/m68k/2.6.29/0061-ath9k-fix-dma-mapping-leak-of-rx-buffer-upon-rmmod.patch
vendored
Normal file
42
debian/patches/bugfix/m68k/2.6.29/0061-ath9k-fix-dma-mapping-leak-of-rx-buffer-upon-rmmod.patch
vendored
Normal file
|
@ -0,0 +1,42 @@
|
|||
From fb2d617e4b8ac0a2c07643a3a6299409692f8003 Mon Sep 17 00:00:00 2001
|
||||
From: Luis R. Rodriguez <lrodriguez@atheros.com>
|
||||
Date: Sat, 28 Mar 2009 01:45:02 +0000
|
||||
Subject: [PATCH 61/90] ath9k: fix dma mapping leak of rx buffer upon rmmod
|
||||
|
||||
upstream commit: 051b919188650fe4c93ca8701183ae88439388f6
|
||||
|
||||
We were claiming DMA buffers on the RX tasklet but never
|
||||
upon a simple module removal.
|
||||
|
||||
Cc: stable@kernel.org
|
||||
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
|
||||
Signed-off-by: Luis R. Rodriguez <lrodriguez@atheros.com>
|
||||
Signed-off-by: John W. Linville <linville@tuxdriver.com>
|
||||
[chrisw: backport to 2.6.29]
|
||||
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
|
||||
---
|
||||
drivers/net/wireless/ath9k/recv.c | 7 ++++++-
|
||||
1 files changed, 6 insertions(+), 1 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/wireless/ath9k/recv.c b/drivers/net/wireless/ath9k/recv.c
|
||||
index 462e08c..c114cb7 100644
|
||||
--- a/drivers/net/wireless/ath9k/recv.c
|
||||
+++ b/drivers/net/wireless/ath9k/recv.c
|
||||
@@ -322,8 +322,13 @@ void ath_rx_cleanup(struct ath_softc *sc)
|
||||
|
||||
list_for_each_entry(bf, &sc->rx.rxbuf, list) {
|
||||
skb = bf->bf_mpdu;
|
||||
- if (skb)
|
||||
+ if (skb) {
|
||||
+ pci_unmap_single(sc->pdev,
|
||||
+ bf->bf_buf_addr,
|
||||
+ sc->rx.bufsize,
|
||||
+ DMA_FROM_DEVICE);
|
||||
dev_kfree_skb(skb);
|
||||
+ }
|
||||
}
|
||||
|
||||
if (sc->rx.rxdma.dd_desc_len != 0)
|
||||
--
|
||||
1.6.2.3
|
||||
|
37
debian/patches/bugfix/m68k/2.6.29/0062-b43-fix-b43_plcp_get_bitrate_idx_ofdm-return-type.patch
vendored
Normal file
37
debian/patches/bugfix/m68k/2.6.29/0062-b43-fix-b43_plcp_get_bitrate_idx_ofdm-return-type.patch
vendored
Normal file
|
@ -0,0 +1,37 @@
|
|||
From bf2d225b466496ff6704288bbd79fe744b399811 Mon Sep 17 00:00:00 2001
|
||||
From: Lorenzo Nava <navalorenx@gmail.com>
|
||||
Date: Sat, 28 Mar 2009 01:45:06 +0000
|
||||
Subject: [PATCH 62/90] b43: fix b43_plcp_get_bitrate_idx_ofdm return type
|
||||
|
||||
upstream commit: a3c0b87c4f21911fb7185902dd13f0e3cd7f33f7
|
||||
|
||||
This patch fixes the return type of b43_plcp_get_bitrate_idx_ofdm. If
|
||||
the plcp contains an error, the function return value is 255 instead
|
||||
of -1, and the packet was not dropped. This causes a warning in
|
||||
__ieee80211_rx function because rate idx is out of range.
|
||||
|
||||
Cc: stable@kernel.org
|
||||
Signed-off-by: Lorenzo Nava <navalorenx@gmail.com>
|
||||
Signed-off-by: Michael Buesch <mb@bu3sch.de>
|
||||
Signed-off-by: John W. Linville <linville@tuxdriver.com>
|
||||
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
|
||||
---
|
||||
drivers/net/wireless/b43/xmit.c | 2 +-
|
||||
1 files changed, 1 insertions(+), 1 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/wireless/b43/xmit.c b/drivers/net/wireless/b43/xmit.c
|
||||
index eae9b80..12069e5 100644
|
||||
--- a/drivers/net/wireless/b43/xmit.c
|
||||
+++ b/drivers/net/wireless/b43/xmit.c
|
||||
@@ -50,7 +50,7 @@ static int b43_plcp_get_bitrate_idx_cck(struct b43_plcp_hdr6 *plcp)
|
||||
}
|
||||
|
||||
/* Extract the bitrate index out of an OFDM PLCP header. */
|
||||
-static u8 b43_plcp_get_bitrate_idx_ofdm(struct b43_plcp_hdr6 *plcp, bool aphy)
|
||||
+static int b43_plcp_get_bitrate_idx_ofdm(struct b43_plcp_hdr6 *plcp, bool aphy)
|
||||
{
|
||||
int base = aphy ? 0 : 4;
|
||||
|
||||
--
|
||||
1.6.2.3
|
||||
|
|
@ -0,0 +1,39 @@
|
|||
From 7b2b76da5c570166c04a44c9646963089b67e4ef Mon Sep 17 00:00:00 2001
|
||||
From: Bob Copeland <me@bobcopeland.com>
|
||||
Date: Sat, 28 Mar 2009 01:45:12 +0000
|
||||
Subject: [PATCH 63/90] ath5k: disable MIB interrupts
|
||||
|
||||
upstream commit: 9ca9fb8aa8422595956af9681518cdb8b167055e
|
||||
|
||||
The MIB interrupt fires whenever counters overflow; however without
|
||||
support for automatic noise immunity, we can sometimes get an interrupt
|
||||
storm. The get_stats() callback reads the counters anyway so we can
|
||||
disable the interrupt for now until ANI is implemented. This fixes
|
||||
the issue reported in http://bugzilla.kernel.org/show_bug.cgi?id=12647.
|
||||
|
||||
Changes-licensed-under: 3-Clause-BSD
|
||||
|
||||
Cc: stable@kernel.org
|
||||
Signed-off-by: Bob Copeland <me@bobcopeland.com>
|
||||
Signed-off-by: John W. Linville <linville@tuxdriver.com>
|
||||
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
|
||||
---
|
||||
drivers/net/wireless/ath5k/base.c | 2 +-
|
||||
1 files changed, 1 insertions(+), 1 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/wireless/ath5k/base.c b/drivers/net/wireless/ath5k/base.c
|
||||
index 16f207c..a3392f3 100644
|
||||
--- a/drivers/net/wireless/ath5k/base.c
|
||||
+++ b/drivers/net/wireless/ath5k/base.c
|
||||
@@ -2259,7 +2259,7 @@ ath5k_init(struct ath5k_softc *sc, bool is_resume)
|
||||
sc->curband = &sc->sbands[sc->curchan->band];
|
||||
sc->imask = AR5K_INT_RXOK | AR5K_INT_RXERR | AR5K_INT_RXEOL |
|
||||
AR5K_INT_RXORN | AR5K_INT_TXDESC | AR5K_INT_TXEOL |
|
||||
- AR5K_INT_FATAL | AR5K_INT_GLOBAL | AR5K_INT_MIB;
|
||||
+ AR5K_INT_FATAL | AR5K_INT_GLOBAL;
|
||||
ret = ath5k_reset(sc, false, false);
|
||||
if (ret)
|
||||
goto done;
|
||||
--
|
||||
1.6.2.3
|
||||
|
71
debian/patches/bugfix/m68k/2.6.29/0064-ath5k-warn-and-correct-rate-for-unknown-hw-rate-ind.patch
vendored
Normal file
71
debian/patches/bugfix/m68k/2.6.29/0064-ath5k-warn-and-correct-rate-for-unknown-hw-rate-ind.patch
vendored
Normal file
|
@ -0,0 +1,71 @@
|
|||
From db257505aa751f739531fee3a3f16a45ddb0eaca Mon Sep 17 00:00:00 2001
|
||||
From: Bob Copeland <me@bobcopeland.com>
|
||||
Date: Sat, 28 Mar 2009 01:45:04 +0000
|
||||
Subject: [PATCH 64/90] ath5k: warn and correct rate for unknown hw rate indexes
|
||||
|
||||
upstream commit: b726604706ad88d8b28bc487e45e710f58cc19ee
|
||||
|
||||
ath5k sets up a mapping table from the hardware rate index to
|
||||
the rate index used by mac80211; however, we have seen some
|
||||
received frames with incorrect rate indexes. Such frames
|
||||
normally get dropped with a warning in __ieee80211_rx(),
|
||||
but it doesn't include enough information to track down the
|
||||
error.
|
||||
|
||||
This patch adds a warning to hw_to_driver_rix for any lookups
|
||||
that result in a rate index of -1, then returns a valid rate so
|
||||
the frame can be processed.
|
||||
|
||||
Changes-licensed-under: 3-Clause-BSD
|
||||
|
||||
Signed-off-by: Bob Copeland <me@bobcopeland.com>
|
||||
Cc: stable@kernel.org
|
||||
Signed-off-by: John W. Linville <linville@tuxdriver.com>
|
||||
[chrisw: add db5b4f7ae3901fdc48c5b988fc2a5e0cb4ec1870 to backport]
|
||||
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
|
||||
---
|
||||
drivers/net/wireless/ath5k/base.c | 14 ++++++++++++--
|
||||
drivers/net/wireless/ath5k/base.h | 2 +-
|
||||
2 files changed, 13 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/wireless/ath5k/base.c b/drivers/net/wireless/ath5k/base.c
|
||||
index a3392f3..6cf69d3 100644
|
||||
--- a/drivers/net/wireless/ath5k/base.c
|
||||
+++ b/drivers/net/wireless/ath5k/base.c
|
||||
@@ -1090,8 +1090,18 @@ ath5k_mode_setup(struct ath5k_softc *sc)
|
||||
static inline int
|
||||
ath5k_hw_to_driver_rix(struct ath5k_softc *sc, int hw_rix)
|
||||
{
|
||||
- WARN_ON(hw_rix < 0 || hw_rix > AR5K_MAX_RATES);
|
||||
- return sc->rate_idx[sc->curband->band][hw_rix];
|
||||
+ int rix;
|
||||
+
|
||||
+ /* return base rate on errors */
|
||||
+ if (WARN(hw_rix < 0 || hw_rix >= AR5K_MAX_RATES,
|
||||
+ "hw_rix out of bounds: %x\n", hw_rix))
|
||||
+ return 0;
|
||||
+
|
||||
+ rix = sc->rate_idx[sc->curband->band][hw_rix];
|
||||
+ if (WARN(rix < 0, "invalid hw_rix: %x\n", hw_rix))
|
||||
+ rix = 0;
|
||||
+
|
||||
+ return rix;
|
||||
}
|
||||
|
||||
/***************\
|
||||
diff --git a/drivers/net/wireless/ath5k/base.h b/drivers/net/wireless/ath5k/base.h
|
||||
index facc60d..d86ab39 100644
|
||||
--- a/drivers/net/wireless/ath5k/base.h
|
||||
+++ b/drivers/net/wireless/ath5k/base.h
|
||||
@@ -112,7 +112,7 @@ struct ath5k_softc {
|
||||
struct ieee80211_supported_band sbands[IEEE80211_NUM_BANDS];
|
||||
struct ieee80211_channel channels[ATH_CHAN_MAX];
|
||||
struct ieee80211_rate rates[IEEE80211_NUM_BANDS][AR5K_MAX_RATES];
|
||||
- u8 rate_idx[IEEE80211_NUM_BANDS][AR5K_MAX_RATES];
|
||||
+ s8 rate_idx[IEEE80211_NUM_BANDS][AR5K_MAX_RATES];
|
||||
enum nl80211_iftype opmode;
|
||||
struct ath5k_hw *ah; /* Atheros HW */
|
||||
|
||||
--
|
||||
1.6.2.3
|
||||
|
52
debian/patches/bugfix/m68k/2.6.29/0065-CIFS-Fix-memory-overwrite-when-saving-nativeFileSys.patch
vendored
Normal file
52
debian/patches/bugfix/m68k/2.6.29/0065-CIFS-Fix-memory-overwrite-when-saving-nativeFileSys.patch
vendored
Normal file
|
@ -0,0 +1,52 @@
|
|||
From 15bd8021d870d2c4fbf8c16578d72d03cfddd3a7 Mon Sep 17 00:00:00 2001
|
||||
From: Steve French <sfrench@us.ibm.com>
|
||||
Date: Thu, 26 Mar 2009 23:05:15 +0000
|
||||
Subject: [PATCH 65/90] CIFS: Fix memory overwrite when saving nativeFileSystem field during mount
|
||||
|
||||
upstream commit: b363b3304bcf68c4541683b2eff70b29f0446a5b
|
||||
|
||||
CIFS can allocate a few bytes to little for the nativeFileSystem field
|
||||
during tree connect response processing during mount. This can result
|
||||
in a "Redzone overwritten" message to be logged.
|
||||
|
||||
Signed-off-by: Sridhar Vinay <vinaysridhar@in.ibm.com>
|
||||
Acked-by: Shirish Pargaonkar <shirishp@us.ibm.com>
|
||||
CC: Stable <stable@kernel.org>
|
||||
Signed-off-by: Steve French <sfrench@us.ibm.com>
|
||||
[chrisw: minor backport to CHANGES file]
|
||||
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
|
||||
---
|
||||
fs/cifs/CHANGES | 3 +++
|
||||
fs/cifs/connect.c | 2 +-
|
||||
2 files changed, 4 insertions(+), 1 deletions(-)
|
||||
|
||||
diff --git a/fs/cifs/CHANGES b/fs/cifs/CHANGES
|
||||
index 851388f..6562eb0 100644
|
||||
--- a/fs/cifs/CHANGES
|
||||
+++ b/fs/cifs/CHANGES
|
||||
@@ -7,6 +7,9 @@ are authenticated as guest, as reconnections, invalidating the earlier
|
||||
user's smb session. This fix allows cifs to mount multiple times to the
|
||||
same server with different userids without risking invalidating earlier
|
||||
established security contexts.
|
||||
+Fix "redzone overwritten" bug in cifs_put_tcon (CIFSTcon may allocate too
|
||||
+little memory for the "nativeFileSystem" field returned by the server
|
||||
+during mount).
|
||||
|
||||
Version 1.56
|
||||
------------
|
||||
diff --git a/fs/cifs/connect.c b/fs/cifs/connect.c
|
||||
index da0f4ff..4b64f39 100644
|
||||
--- a/fs/cifs/connect.c
|
||||
+++ b/fs/cifs/connect.c
|
||||
@@ -3667,7 +3667,7 @@ CIFSTCon(unsigned int xid, struct cifsSesInfo *ses,
|
||||
BCC(smb_buffer_response)) {
|
||||
kfree(tcon->nativeFileSystem);
|
||||
tcon->nativeFileSystem =
|
||||
- kzalloc(length + 2, GFP_KERNEL);
|
||||
+ kzalloc(2*(length + 1), GFP_KERNEL);
|
||||
if (tcon->nativeFileSystem)
|
||||
cifs_strfromUCS_le(
|
||||
tcon->nativeFileSystem,
|
||||
--
|
||||
1.6.2.3
|
||||
|
54
debian/patches/bugfix/m68k/2.6.29/0066-cfg80211-force-last_request-to-be-set-for-OLD_REG-i.patch
vendored
Normal file
54
debian/patches/bugfix/m68k/2.6.29/0066-cfg80211-force-last_request-to-be-set-for-OLD_REG-i.patch
vendored
Normal file
|
@ -0,0 +1,54 @@
|
|||
From 0e8cb3e1ded5f5fa57f9bb40fe75d7c35ad70985 Mon Sep 17 00:00:00 2001
|
||||
From: Luis R. Rodriguez <lrodriguez@atheros.com>
|
||||
Date: Sat, 28 Mar 2009 01:45:10 +0000
|
||||
Subject: [PATCH 66/90] cfg80211: force last_request to be set for OLD_REG if regdom is EU
|
||||
|
||||
upstream commit: 2e097dc65673ed421bbc2e49f52c125aa43a8ee6
|
||||
|
||||
Although EU is a bogus alpha2 we need to process the send request
|
||||
as our code depends on last_request being set.
|
||||
|
||||
Cc: stable@kernel.org
|
||||
Reported-by: Quentin Armitage <Quentin@armitage.org.uk>
|
||||
Signed-off-by: Luis R. Rodriguez <lrodriguez@atheros.com>
|
||||
Signed-off-by: John W. Linville <linville@tuxdriver.com>
|
||||
[chrisw: backport to 2.6.29]
|
||||
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
|
||||
Port-acked-by: Luis R. Rodriguez <lrodriguez@atheros.com>
|
||||
---
|
||||
net/wireless/reg.c | 17 ++++++++++++-----
|
||||
1 files changed, 12 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/net/wireless/reg.c b/net/wireless/reg.c
|
||||
index bd0a16c..0a08e74 100644
|
||||
--- a/net/wireless/reg.c
|
||||
+++ b/net/wireless/reg.c
|
||||
@@ -1469,13 +1469,20 @@ int regulatory_init(void)
|
||||
|
||||
printk(KERN_INFO "cfg80211: Using static regulatory domain info\n");
|
||||
print_regdomain_info(cfg80211_regdomain);
|
||||
- /* The old code still requests for a new regdomain and if
|
||||
+ /*
|
||||
+ * The old code still requests for a new regdomain and if
|
||||
* you have CRDA you get it updated, otherwise you get
|
||||
* stuck with the static values. We ignore "EU" code as
|
||||
- * that is not a valid ISO / IEC 3166 alpha2 */
|
||||
- if (ieee80211_regdom[0] != 'E' || ieee80211_regdom[1] != 'U')
|
||||
- err = __regulatory_hint(NULL, REGDOM_SET_BY_CORE,
|
||||
- ieee80211_regdom, 0, ENVIRON_ANY);
|
||||
+ * that is not a valid ISO / IEC 3166 alpha2
|
||||
+ * stuck with the static values. Since "EU" is not a valid
|
||||
+ * ISO / IEC 3166 alpha2 code we can't expect userpace to
|
||||
+ * give us a regulatory domain for it. We need last_request
|
||||
+ * iniitalized though so lets just send a request which we
|
||||
+ * know will be ignored... this crap will be removed once
|
||||
+ * OLD_REG dies.
|
||||
+ */
|
||||
+ err = __regulatory_hint(NULL, REGDOM_SET_BY_CORE,
|
||||
+ ieee80211_regdom, 0, ENVIRON_ANY);
|
||||
#else
|
||||
cfg80211_regdomain = cfg80211_world_regdom;
|
||||
|
||||
--
|
||||
1.6.2.3
|
||||
|
46
debian/patches/bugfix/m68k/2.6.29/0067-DVB-firedtv-FireDTV-S2-problems-with-tuning-solved.patch
vendored
Normal file
46
debian/patches/bugfix/m68k/2.6.29/0067-DVB-firedtv-FireDTV-S2-problems-with-tuning-solved.patch
vendored
Normal file
|
@ -0,0 +1,46 @@
|
|||
From f27eae2ce95d388ebea30853730d1ec76f07a41c Mon Sep 17 00:00:00 2001
|
||||
From: Beat Michel Liechti <bml303@gmail.com>
|
||||
Date: Sat, 28 Mar 2009 01:45:15 +0000
|
||||
Subject: [PATCH 67/90] DVB: firedtv: FireDTV S2 problems with tuning solved
|
||||
|
||||
upstream commit: 32a0f488ce5e8a9a148491f15edc508ab5e8265b
|
||||
|
||||
Tuning was broken on FireDTV S2 (and presumably FloppyDTV S2) because a
|
||||
wrong opcode was sent. The box only gave "not implemented" responses.
|
||||
Changing the opcode to _TUNE_QPSK2 fixes this for good.
|
||||
|
||||
Cc: stable@kernel.org
|
||||
Signed-off-by: Beat Michel Liechti <bml303@gmail.com>
|
||||
Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
|
||||
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
|
||||
---
|
||||
drivers/media/dvb/firewire/firedtv-avc.c | 6 +++++-
|
||||
1 files changed, 5 insertions(+), 1 deletions(-)
|
||||
|
||||
diff --git a/drivers/media/dvb/firewire/firedtv-avc.c b/drivers/media/dvb/firewire/firedtv-avc.c
|
||||
index b55d9cc..adc2ce9 100644
|
||||
--- a/drivers/media/dvb/firewire/firedtv-avc.c
|
||||
+++ b/drivers/media/dvb/firewire/firedtv-avc.c
|
||||
@@ -135,6 +135,7 @@ static const char *debug_fcp_opcode(unsigned int opcode,
|
||||
case SFE_VENDOR_OPCODE_REGISTER_REMOTE_CONTROL: return "RegisterRC";
|
||||
case SFE_VENDOR_OPCODE_LNB_CONTROL: return "LNBControl";
|
||||
case SFE_VENDOR_OPCODE_TUNE_QPSK: return "TuneQPSK";
|
||||
+ case SFE_VENDOR_OPCODE_TUNE_QPSK2: return "TuneQPSK2";
|
||||
case SFE_VENDOR_OPCODE_HOST2CA: return "Host2CA";
|
||||
case SFE_VENDOR_OPCODE_CA2HOST: return "CA2Host";
|
||||
}
|
||||
@@ -266,7 +267,10 @@ static void avc_tuner_tuneqpsk(struct firedtv *fdtv,
|
||||
c->operand[0] = SFE_VENDOR_DE_COMPANYID_0;
|
||||
c->operand[1] = SFE_VENDOR_DE_COMPANYID_1;
|
||||
c->operand[2] = SFE_VENDOR_DE_COMPANYID_2;
|
||||
- c->operand[3] = SFE_VENDOR_OPCODE_TUNE_QPSK;
|
||||
+ if (fdtv->type == FIREDTV_DVB_S2)
|
||||
+ c->operand[3] = SFE_VENDOR_OPCODE_TUNE_QPSK2;
|
||||
+ else
|
||||
+ c->operand[3] = SFE_VENDOR_OPCODE_TUNE_QPSK;
|
||||
|
||||
c->operand[4] = (params->frequency >> 24) & 0xff;
|
||||
c->operand[5] = (params->frequency >> 16) & 0xff;
|
||||
--
|
||||
1.6.2.3
|
||||
|
56
debian/patches/bugfix/m68k/2.6.29/0068-ARM-pxa-fix-overlay-being-un-necessarily-initializ.patch
vendored
Normal file
56
debian/patches/bugfix/m68k/2.6.29/0068-ARM-pxa-fix-overlay-being-un-necessarily-initializ.patch
vendored
Normal file
|
@ -0,0 +1,56 @@
|
|||
From 7549374c394bd35a343f3f85f95d93af962be643 Mon Sep 17 00:00:00 2001
|
||||
From: Eric Miao <eric.miao@marvell.com>
|
||||
Date: Thu, 19 Mar 2009 15:24:30 +0800
|
||||
Subject: [PATCH 68/90] ARM: pxa: fix overlay being un-necessarily initialized on pxa25x
|
||||
|
||||
upstream commit: 782385ae176b304c7105051e1b06c68bc0b4a2ba
|
||||
|
||||
pxa25x doesn't support overlay in its LCD controller, this patch adds
|
||||
pxafb_overlay_supported() functions to check the initialization is
|
||||
necessary.
|
||||
|
||||
Signed-off-by: Eric Miao <eric.miao@marvell.com>
|
||||
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
|
||||
---
|
||||
drivers/video/pxafb.c | 14 ++++++++++++++
|
||||
1 files changed, 14 insertions(+), 0 deletions(-)
|
||||
|
||||
diff --git a/drivers/video/pxafb.c b/drivers/video/pxafb.c
|
||||
index 2552b9f..642c1d4 100644
|
||||
--- a/drivers/video/pxafb.c
|
||||
+++ b/drivers/video/pxafb.c
|
||||
@@ -883,10 +883,21 @@ static void __devinit init_pxafb_overlay(struct pxafb_info *fbi,
|
||||
init_completion(&ofb->branch_done);
|
||||
}
|
||||
|
||||
+static inline int pxafb_overlay_supported(void)
|
||||
+{
|
||||
+ if (cpu_is_pxa27x() || cpu_is_pxa3xx())
|
||||
+ return 1;
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
static int __devinit pxafb_overlay_init(struct pxafb_info *fbi)
|
||||
{
|
||||
int i, ret;
|
||||
|
||||
+ if (!pxafb_overlay_supported())
|
||||
+ return 0;
|
||||
+
|
||||
for (i = 0; i < 2; i++) {
|
||||
init_pxafb_overlay(fbi, &fbi->overlay[i], i);
|
||||
ret = register_framebuffer(&fbi->overlay[i].fb);
|
||||
@@ -909,6 +920,9 @@ static void __devexit pxafb_overlay_exit(struct pxafb_info *fbi)
|
||||
{
|
||||
int i;
|
||||
|
||||
+ if (!pxafb_overlay_supported())
|
||||
+ return;
|
||||
+
|
||||
for (i = 0; i < 2; i++)
|
||||
unregister_framebuffer(&fbi->overlay[i].fb);
|
||||
}
|
||||
--
|
||||
1.6.2.3
|
||||
|
63
debian/patches/bugfix/m68k/2.6.29/0069-ARM-5428-1-Module-relocation-update-for-R_ARM_V4BX.patch
vendored
Normal file
63
debian/patches/bugfix/m68k/2.6.29/0069-ARM-5428-1-Module-relocation-update-for-R_ARM_V4BX.patch
vendored
Normal file
|
@ -0,0 +1,63 @@
|
|||
From 4e3278e0e894eb08599dc3b2541f9f3a55ebeebf Mon Sep 17 00:00:00 2001
|
||||
From: Daniel Silverstone <dsilvers@simtec.co.uk>
|
||||
Date: Fri, 20 Mar 2009 11:11:43 +0100
|
||||
Subject: [PATCH 69/90] ARM: 5428/1: Module relocation update for R_ARM_V4BX
|
||||
|
||||
upstream commit: 4731f8b66dd34ebf0e67ca6ba9162b0e509bec06
|
||||
|
||||
It would seem when building kernel modules with modern binutils
|
||||
(required by modern GCC) for ARM v4T targets (specifically observed
|
||||
with the Samsung 24xx SoC which is an 920T) R_ARM_V4BX relocations
|
||||
are emitted for function epilogues.
|
||||
|
||||
This manifests at module load time with an "unknown relocation: 40"
|
||||
error message.
|
||||
|
||||
The following patch adds the R_ARM_V4BX relocation to the ARM kernel
|
||||
module loader. The relocation operation is taken from that within the
|
||||
binutils bfd library.
|
||||
|
||||
Signed-off-by: Simtec Linux Team <linux@simtec.co.uk>
|
||||
Signed-off-by: Vincent Sanders <vince@simtec.co.uk>
|
||||
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
|
||||
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
|
||||
---
|
||||
arch/arm/include/asm/elf.h | 1 +
|
||||
arch/arm/kernel/module.c | 9 +++++++++
|
||||
2 files changed, 10 insertions(+), 0 deletions(-)
|
||||
|
||||
diff --git a/arch/arm/include/asm/elf.h b/arch/arm/include/asm/elf.h
|
||||
index a58378c..ce3b36e 100644
|
||||
--- a/arch/arm/include/asm/elf.h
|
||||
+++ b/arch/arm/include/asm/elf.h
|
||||
@@ -50,6 +50,7 @@ typedef struct user_fp elf_fpregset_t;
|
||||
#define R_ARM_ABS32 2
|
||||
#define R_ARM_CALL 28
|
||||
#define R_ARM_JUMP24 29
|
||||
+#define R_ARM_V4BX 40
|
||||
|
||||
/*
|
||||
* These are used to set parameters in the core dumps.
|
||||
diff --git a/arch/arm/kernel/module.c b/arch/arm/kernel/module.c
|
||||
index dab48f2..9f509fd 100644
|
||||
--- a/arch/arm/kernel/module.c
|
||||
+++ b/arch/arm/kernel/module.c
|
||||
@@ -132,6 +132,15 @@ apply_relocate(Elf32_Shdr *sechdrs, const char *strtab, unsigned int symindex,
|
||||
*(u32 *)loc |= offset & 0x00ffffff;
|
||||
break;
|
||||
|
||||
+ case R_ARM_V4BX:
|
||||
+ /* Preserve Rm and the condition code. Alter
|
||||
+ * other bits to re-code instruction as
|
||||
+ * MOV PC,Rm.
|
||||
+ */
|
||||
+ *(u32 *)loc &= 0xf000000f;
|
||||
+ *(u32 *)loc |= 0x01a0f000;
|
||||
+ break;
|
||||
+
|
||||
default:
|
||||
printk(KERN_ERR "%s: unknown relocation: %u\n",
|
||||
module->name, ELF32_R_TYPE(rel->r_info));
|
||||
--
|
||||
1.6.2.3
|
||||
|
34
debian/patches/bugfix/m68k/2.6.29/0070-ARM-cumana-Fix-a-long-standing-bogon.patch
vendored
Normal file
34
debian/patches/bugfix/m68k/2.6.29/0070-ARM-cumana-Fix-a-long-standing-bogon.patch
vendored
Normal file
|
@ -0,0 +1,34 @@
|
|||
From 86046cf121d09c4513f1c79c8726a761777988f0 Mon Sep 17 00:00:00 2001
|
||||
From: Alan Cox <alan@lxorguk.ukuu.org.uk>
|
||||
Date: Mon, 23 Mar 2009 10:37:57 +0000
|
||||
Subject: [PATCH 70/90] ARM: cumana: Fix a long standing bogon
|
||||
|
||||
upstream commit: ecbf61e7357d5c7047c813edd6983902d158688c
|
||||
|
||||
Should be using strncmp as the data from user space may be unterminated
|
||||
|
||||
(Bug #8004)
|
||||
|
||||
Signed-off-by: Alan Cox <alan@lxorguk.ukuu.org.uk
|
||||
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
|
||||
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
|
||||
---
|
||||
drivers/scsi/arm/cumana_2.c | 2 +-
|
||||
1 files changed, 1 insertions(+), 1 deletions(-)
|
||||
|
||||
diff --git a/drivers/scsi/arm/cumana_2.c b/drivers/scsi/arm/cumana_2.c
|
||||
index 68a6412..ed502b7 100644
|
||||
--- a/drivers/scsi/arm/cumana_2.c
|
||||
+++ b/drivers/scsi/arm/cumana_2.c
|
||||
@@ -318,7 +318,7 @@ cumanascsi_2_set_proc_info(struct Scsi_Host *host, char *buffer, int length)
|
||||
{
|
||||
int ret = length;
|
||||
|
||||
- if (length >= 11 && strcmp(buffer, "CUMANASCSI2") == 0) {
|
||||
+ if (length >= 11 && strncmp(buffer, "CUMANASCSI2", 11) == 0) {
|
||||
buffer += 11;
|
||||
length -= 11;
|
||||
|
||||
--
|
||||
1.6.2.3
|
||||
|
|
@ -0,0 +1,46 @@
|
|||
From 81c10c80c5928f42975e5da4fb67d92c4fc96012 Mon Sep 17 00:00:00 2001
|
||||
From: Alan Cox <alan@lxorguk.ukuu.org.uk>
|
||||
Date: Mon, 23 Mar 2009 10:44:07 +0000
|
||||
Subject: [PATCH 71/90] ARM: fix leak in iop13xx/pci
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=utf-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
upstream commit: b23c7a427e4b3764ad686a46de89ab652811c50a
|
||||
|
||||
Another leak found by Daniel Marjamäki
|
||||
|
||||
Signed-off-by: Alan Cox <alan@lxorguk.ukuu.org.uk>
|
||||
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
|
||||
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
|
||||
---
|
||||
arch/arm/mach-iop13xx/pci.c | 5 ++++-
|
||||
1 files changed, 4 insertions(+), 1 deletions(-)
|
||||
|
||||
diff --git a/arch/arm/mach-iop13xx/pci.c b/arch/arm/mach-iop13xx/pci.c
|
||||
index 673b0db..4873f26 100644
|
||||
--- a/arch/arm/mach-iop13xx/pci.c
|
||||
+++ b/arch/arm/mach-iop13xx/pci.c
|
||||
@@ -1026,8 +1026,10 @@ int iop13xx_pci_setup(int nr, struct pci_sys_data *sys)
|
||||
which_atu = 0;
|
||||
}
|
||||
|
||||
- if (!which_atu)
|
||||
+ if (!which_atu) {
|
||||
+ kfree(res);
|
||||
return 0;
|
||||
+ }
|
||||
|
||||
switch(which_atu) {
|
||||
case IOP13XX_INIT_ATU_ATUX:
|
||||
@@ -1074,6 +1076,7 @@ int iop13xx_pci_setup(int nr, struct pci_sys_data *sys)
|
||||
sys->map_irq = iop13xx_pcie_map_irq;
|
||||
break;
|
||||
default:
|
||||
+ kfree(res);
|
||||
return 0;
|
||||
}
|
||||
|
||||
--
|
||||
1.6.2.3
|
||||
|
|
@ -0,0 +1,36 @@
|
|||
From 96c7a7e7ff618255028cf8c3e5b7dd17000df4de Mon Sep 17 00:00:00 2001
|
||||
From: Alan Cox <alan@lxorguk.ukuu.org.uk>
|
||||
Date: Mon, 23 Mar 2009 10:43:54 +0000
|
||||
Subject: [PATCH 72/90] ARM: twl4030 - leak fix
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=utf-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
upstream commit: 803c78e4da28d7d7cb0642caf643b9289ae7838a
|
||||
|
||||
Trivial error path leak fix. Problem found by Daniel Marjamäki using
|
||||
cppcheck
|
||||
|
||||
Signed-off-by: Alan Cox <alan@lxorguk.ukuu.org.uk>
|
||||
Acked-by: Tony Lindgren <tony@atomide.com>
|
||||
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
|
||||
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
|
||||
---
|
||||
arch/arm/mach-omap2/mmc-twl4030.c | 1 +
|
||||
1 files changed, 1 insertions(+), 0 deletions(-)
|
||||
|
||||
diff --git a/arch/arm/mach-omap2/mmc-twl4030.c b/arch/arm/mach-omap2/mmc-twl4030.c
|
||||
index 437f520..e1dadf7 100644
|
||||
--- a/arch/arm/mach-omap2/mmc-twl4030.c
|
||||
+++ b/arch/arm/mach-omap2/mmc-twl4030.c
|
||||
@@ -397,6 +397,7 @@ void __init twl4030_mmc_init(struct twl4030_hsmmc_info *controllers)
|
||||
break;
|
||||
default:
|
||||
pr_err("MMC%d configuration not supported!\n", c->mmc);
|
||||
+ kfree(mmc);
|
||||
continue;
|
||||
}
|
||||
hsmmc_data[c->mmc - 1] = mmc;
|
||||
--
|
||||
1.6.2.3
|
||||
|
43
debian/patches/bugfix/m68k/2.6.29/0073-ARM-5435-1-fix-compile-warning-in-sanity_check_mem.patch
vendored
Normal file
43
debian/patches/bugfix/m68k/2.6.29/0073-ARM-5435-1-fix-compile-warning-in-sanity_check_mem.patch
vendored
Normal file
|
@ -0,0 +1,43 @@
|
|||
From fdc0359dc4769e463481a5376cb66f5c53b2868c Mon Sep 17 00:00:00 2001
|
||||
From: Mikael Pettersson <mikpe@it.uu.se>
|
||||
Date: Sat, 28 Mar 2009 19:18:05 +0100
|
||||
Subject: [PATCH 73/90] ARM: 5435/1: fix compile warning in sanity_check_meminfo()
|
||||
|
||||
upstream commit: f0bba9f934517533acbda7329be93f55d5a01c03
|
||||
|
||||
Compiling recent 2.6.29-rc kernels for ARM gives me the following warning:
|
||||
|
||||
arch/arm/mm/mmu.c: In function 'sanity_check_meminfo':
|
||||
arch/arm/mm/mmu.c:697: warning: comparison between pointer and integer
|
||||
|
||||
This is because commit 3fd9825c42c784a59b3b90bdf073f49d4bb42a8d
|
||||
"[ARM] 5402/1: fix a case of wrap-around in sanity_check_meminfo()"
|
||||
in 2.6.29-rc5-git4 added a comparison of a pointer with PAGE_OFFSET,
|
||||
which is an integer.
|
||||
|
||||
Fixed by casting PAGE_OFFSET to void *.
|
||||
|
||||
Signed-off-by: Mikael Pettersson <mikpe@it.uu.se>
|
||||
Acked-by: Nicolas Pitre <nico@cam.org>
|
||||
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
|
||||
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
|
||||
---
|
||||
arch/arm/mm/mmu.c | 2 +-
|
||||
1 files changed, 1 insertions(+), 1 deletions(-)
|
||||
|
||||
diff --git a/arch/arm/mm/mmu.c b/arch/arm/mm/mmu.c
|
||||
index d4d082c..5a89e57 100644
|
||||
--- a/arch/arm/mm/mmu.c
|
||||
+++ b/arch/arm/mm/mmu.c
|
||||
@@ -694,7 +694,7 @@ static void __init sanity_check_meminfo(void)
|
||||
* the vmalloc area.
|
||||
*/
|
||||
if (__va(bank->start) >= VMALLOC_MIN ||
|
||||
- __va(bank->start) < PAGE_OFFSET) {
|
||||
+ __va(bank->start) < (void *)PAGE_OFFSET) {
|
||||
printk(KERN_NOTICE "Ignoring RAM at %.8lx-%.8lx "
|
||||
"(vmalloc region overlap).\n",
|
||||
bank->start, bank->start + bank->size - 1);
|
||||
--
|
||||
1.6.2.3
|
||||
|
42
debian/patches/bugfix/m68k/2.6.29/0074-fuse-fix-fuse_file_lseek-returning-with-lock-held.patch
vendored
Normal file
42
debian/patches/bugfix/m68k/2.6.29/0074-fuse-fix-fuse_file_lseek-returning-with-lock-held.patch
vendored
Normal file
|
@ -0,0 +1,42 @@
|
|||
From 84a31107de6deee382e98b911e0fc7263427a7a8 Mon Sep 17 00:00:00 2001
|
||||
From: Dan Carpenter <error27@gmail.com>
|
||||
Date: Mon, 30 Mar 2009 18:50:13 +0000
|
||||
Subject: [PATCH 74/90] fuse: fix fuse_file_lseek returning with lock held
|
||||
|
||||
upstream commit: 5291658d87ac1ae60418e79e7b6bad7d5f595e0c
|
||||
|
||||
This bug was found with smatch (http://repo.or.cz/w/smatch.git/). If
|
||||
we return directly the inode->i_mutex lock doesn't get released.
|
||||
|
||||
Signed-off-by: Dan Carpenter <error27@gmail.com>
|
||||
Signed-off-by: Miklos Szeredi <mszeredi@suse.cz>
|
||||
CC: stable@kernel.org
|
||||
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
|
||||
---
|
||||
fs/fuse/file.c | 3 ++-
|
||||
1 files changed, 2 insertions(+), 1 deletions(-)
|
||||
|
||||
diff --git a/fs/fuse/file.c b/fs/fuse/file.c
|
||||
index d9fdb7c..821d10f 100644
|
||||
--- a/fs/fuse/file.c
|
||||
+++ b/fs/fuse/file.c
|
||||
@@ -1465,7 +1465,7 @@ static loff_t fuse_file_llseek(struct file *file, loff_t offset, int origin)
|
||||
case SEEK_END:
|
||||
retval = fuse_update_attributes(inode, NULL, file, NULL);
|
||||
if (retval)
|
||||
- return retval;
|
||||
+ goto exit;
|
||||
offset += i_size_read(inode);
|
||||
break;
|
||||
case SEEK_CUR:
|
||||
@@ -1479,6 +1479,7 @@ static loff_t fuse_file_llseek(struct file *file, loff_t offset, int origin)
|
||||
}
|
||||
retval = offset;
|
||||
}
|
||||
+exit:
|
||||
mutex_unlock(&inode->i_mutex);
|
||||
return retval;
|
||||
}
|
||||
--
|
||||
1.6.2.3
|
||||
|
30
debian/patches/bugfix/m68k/2.6.29/0075-Add-a-missing-unlock_kernel-in-raw_open.patch
vendored
Normal file
30
debian/patches/bugfix/m68k/2.6.29/0075-Add-a-missing-unlock_kernel-in-raw_open.patch
vendored
Normal file
|
@ -0,0 +1,30 @@
|
|||
From ce6d13d7f44cb05c007ed804c0c20cfda9d2f94a Mon Sep 17 00:00:00 2001
|
||||
From: Dan Carpenter <error27@gmail.com>
|
||||
Date: Mon, 30 Mar 2009 18:50:16 +0000
|
||||
Subject: [PATCH 75/90] Add a missing unlock_kernel() in raw_open()
|
||||
|
||||
upstream commit: 996ff68d8b358885c1de82a45517c607999947c7
|
||||
|
||||
Cc: stable@kernel.org
|
||||
Signed-off-by: Dan Carpenter <error27@gmail.com>
|
||||
Signed-off-by: Jonathan Corbet <corbet@lwn.net>
|
||||
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
|
||||
---
|
||||
drivers/char/raw.c | 1 +
|
||||
1 files changed, 1 insertions(+), 0 deletions(-)
|
||||
|
||||
diff --git a/drivers/char/raw.c b/drivers/char/raw.c
|
||||
index 96adf28..20d90e6 100644
|
||||
--- a/drivers/char/raw.c
|
||||
+++ b/drivers/char/raw.c
|
||||
@@ -90,6 +90,7 @@ out1:
|
||||
blkdev_put(bdev, filp->f_mode);
|
||||
out:
|
||||
mutex_unlock(&raw_mutex);
|
||||
+ unlock_kernel();
|
||||
return err;
|
||||
}
|
||||
|
||||
--
|
||||
1.6.2.3
|
||||
|
49
debian/patches/bugfix/m68k/2.6.29/0076-x86-PAT-PCI-Change-vma-prot-in-pci_mmap-to-reflec.patch
vendored
Normal file
49
debian/patches/bugfix/m68k/2.6.29/0076-x86-PAT-PCI-Change-vma-prot-in-pci_mmap-to-reflec.patch
vendored
Normal file
|
@ -0,0 +1,49 @@
|
|||
From e1b427acc979431fc7f57a06d0c636c542fdffcc Mon Sep 17 00:00:00 2001
|
||||
From: Pallipadi, Venkatesh <venkatesh.pallipadi@intel.com>
|
||||
Date: Mon, 30 Mar 2009 18:50:19 +0000
|
||||
Subject: [PATCH 76/90] x86, PAT, PCI: Change vma prot in pci_mmap to reflect inherited prot
|
||||
|
||||
upstream commit: 9cdec049389ce2c324fd1ec508a71528a27d4a07
|
||||
|
||||
While looking at the issue in the thread:
|
||||
|
||||
http://marc.info/?l=dri-devel&m=123606627824556&w=2
|
||||
|
||||
noticed a bug in pci PAT code and memory type setting.
|
||||
|
||||
PCI mmap code did not set the proper protection in vma, when it
|
||||
inherited protection in reserve_memtype. This bug only affects
|
||||
the case where there exists a WC mapping before X does an mmap
|
||||
with /proc or /sys pci interface. This will cause X userlevel
|
||||
mmap from /proc or /sysfs to fail on fork.
|
||||
|
||||
Reported-by: Kevin Winchester <kjwinchester@gmail.com>
|
||||
Signed-off-by: Venkatesh Pallipadi <venkatesh.pallipadi@intel.com>
|
||||
Signed-off-by: Suresh Siddha <suresh.b.siddha@intel.com>
|
||||
Cc: Jesse Barnes <jbarnes@virtuousgeek.org>
|
||||
Cc: Dave Airlie <airlied@redhat.com>
|
||||
Cc: <stable@kernel.org>
|
||||
LKML-Reference: <20090323190720.GA16831@linux-os.sc.intel.com>
|
||||
Signed-off-by: Ingo Molnar <mingo@elte.hu>
|
||||
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
|
||||
---
|
||||
arch/x86/pci/i386.c | 3 +++
|
||||
1 files changed, 3 insertions(+), 0 deletions(-)
|
||||
|
||||
diff --git a/arch/x86/pci/i386.c b/arch/x86/pci/i386.c
|
||||
index 5ead808..f234a37 100644
|
||||
--- a/arch/x86/pci/i386.c
|
||||
+++ b/arch/x86/pci/i386.c
|
||||
@@ -319,6 +319,9 @@ int pci_mmap_page_range(struct pci_dev *dev, struct vm_area_struct *vma,
|
||||
return -EINVAL;
|
||||
}
|
||||
flags = new_flags;
|
||||
+ vma->vm_page_prot = __pgprot(
|
||||
+ (pgprot_val(vma->vm_page_prot) & ~_PAGE_CACHE_MASK) |
|
||||
+ flags);
|
||||
}
|
||||
|
||||
if (((vma->vm_pgoff < max_low_pfn_mapped) ||
|
||||
--
|
||||
1.6.2.3
|
||||
|
50
debian/patches/bugfix/m68k/2.6.29/0077-x86-uv-fix-cpumask-iterator-in-uv_bau_init.patch
vendored
Normal file
50
debian/patches/bugfix/m68k/2.6.29/0077-x86-uv-fix-cpumask-iterator-in-uv_bau_init.patch
vendored
Normal file
|
@ -0,0 +1,50 @@
|
|||
From 4a78cb55e52d24c37126f456a710c7d6b9babbb4 Mon Sep 17 00:00:00 2001
|
||||
From: Rusty Russell <rusty@rustcorp.com.au>
|
||||
Date: Mon, 30 Mar 2009 18:50:23 +0000
|
||||
Subject: [PATCH 77/90] x86, uv: fix cpumask iterator in uv_bau_init()
|
||||
|
||||
upstream commit: 2c74d66624ddbda8101d54d1e184cf9229b378bc
|
||||
|
||||
Impact: fix boot crash on UV systems
|
||||
|
||||
Commit 76ba0ecda0de9accea9a91cb6dbde46782110e1c "cpumask: use
|
||||
cpumask_var_t in uv_flush_tlb_others" used cur_cpu as an iterator;
|
||||
it was supposed to be zero for the code below it.
|
||||
|
||||
Reported-by: Cliff Wickman <cpw@sgi.com>
|
||||
Original-From: Cliff Wickman <cpw@sgi.com>
|
||||
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
|
||||
Acked-by: Mike Travis <travis@sgi.com>
|
||||
Cc: steiner@sgi.com
|
||||
Cc: <stable@kernel.org>
|
||||
LKML-Reference: <200903180822.31196.rusty@rustcorp.com.au>
|
||||
Signed-off-by: Ingo Molnar <mingo@elte.hu>
|
||||
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
|
||||
---
|
||||
arch/x86/kernel/tlb_uv.c | 3 ++-
|
||||
1 files changed, 2 insertions(+), 1 deletions(-)
|
||||
|
||||
diff --git a/arch/x86/kernel/tlb_uv.c b/arch/x86/kernel/tlb_uv.c
|
||||
index 6812b82..16e505a 100644
|
||||
--- a/arch/x86/kernel/tlb_uv.c
|
||||
+++ b/arch/x86/kernel/tlb_uv.c
|
||||
@@ -742,7 +742,7 @@ static int __init uv_bau_init(void)
|
||||
int node;
|
||||
int nblades;
|
||||
int last_blade;
|
||||
- int cur_cpu = 0;
|
||||
+ int cur_cpu;
|
||||
|
||||
if (!is_uv_system())
|
||||
return 0;
|
||||
@@ -752,6 +752,7 @@ static int __init uv_bau_init(void)
|
||||
uv_mmask = (1UL << uv_hub_info->n_val) - 1;
|
||||
nblades = 0;
|
||||
last_blade = -1;
|
||||
+ cur_cpu = 0;
|
||||
for_each_online_node(node) {
|
||||
blade = uv_node_to_blade_id(node);
|
||||
if (blade == last_blade)
|
||||
--
|
||||
1.6.2.3
|
||||
|
|
@ -0,0 +1,47 @@
|
|||
From 393c20529ebe898fb975744ed0aad5bdd953f232 Mon Sep 17 00:00:00 2001
|
||||
From: Yinghai Lu <yinghai@kernel.org>
|
||||
Date: Mon, 30 Mar 2009 18:50:28 +0000
|
||||
Subject: [PATCH 78/90] x86: fix 64k corruption-check
|
||||
|
||||
upstream commit: 6d7942dc2a70a7e74c352107b150265602671588
|
||||
|
||||
Impact: fix boot crash
|
||||
|
||||
Need to exit early if the addr is far above 64k.
|
||||
|
||||
The crash got exposed by:
|
||||
|
||||
78a8b35: x86: make e820_update_range() handle small range update
|
||||
|
||||
Signed-off-by: Yinghai Lu <yinghai@kernel.org>
|
||||
Cc: <stable@kernel.org>
|
||||
LKML-Reference: <49BC2279.2030101@kernel.org>
|
||||
Signed-off-by: Ingo Molnar <mingo@elte.hu>
|
||||
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
|
||||
---
|
||||
arch/x86/kernel/check.c | 6 +++---
|
||||
1 files changed, 3 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/arch/x86/kernel/check.c b/arch/x86/kernel/check.c
|
||||
index 2ac0ab7..a7a50b2 100644
|
||||
--- a/arch/x86/kernel/check.c
|
||||
+++ b/arch/x86/kernel/check.c
|
||||
@@ -86,12 +86,12 @@ void __init setup_bios_corruption_check(void)
|
||||
if (addr == 0)
|
||||
break;
|
||||
|
||||
+ if (addr >= corruption_check_size)
|
||||
+ break;
|
||||
+
|
||||
if ((addr + size) > corruption_check_size)
|
||||
size = corruption_check_size - addr;
|
||||
|
||||
- if (size == 0)
|
||||
- break;
|
||||
-
|
||||
e820_update_range(addr, size, E820_RAM, E820_RESERVED);
|
||||
scan_areas[num_scan_areas].addr = addr;
|
||||
scan_areas[num_scan_areas].size = size;
|
||||
--
|
||||
1.6.2.3
|
||||
|
41
debian/patches/bugfix/m68k/2.6.29/0079-x86-ptrace-bts-fix-an-unreachable-statement.patch
vendored
Normal file
41
debian/patches/bugfix/m68k/2.6.29/0079-x86-ptrace-bts-fix-an-unreachable-statement.patch
vendored
Normal file
|
@ -0,0 +1,41 @@
|
|||
From 178e0475b55e31b8d4cc7f247295f7b887680dce Mon Sep 17 00:00:00 2001
|
||||
From: xiyou.wangcong@gmail.com <xiyou.wangcong@gmail.com>
|
||||
Date: Mon, 30 Mar 2009 18:50:30 +0000
|
||||
Subject: [PATCH 79/90] x86: ptrace, bts: fix an unreachable statement
|
||||
|
||||
upstream commit: 5a8ac9d28dae5330c70562c7d7785f5104059c17
|
||||
|
||||
Commit c2724775ce57c98b8af9694857b941dc61056516 put a statement
|
||||
after return, which makes that statement unreachable.
|
||||
|
||||
Move that statement before return.
|
||||
|
||||
Signed-off-by: WANG Cong <xiyou.wangcong@gmail.com>
|
||||
Cc: Roland McGrath <roland@redhat.com>
|
||||
Cc: Markus Metzger <markus.t.metzger@intel.com>
|
||||
LKML-Reference: <20090313075622.GB8933@hack>
|
||||
Cc: <stable@kernel.org> # .29 only
|
||||
Signed-off-by: Ingo Molnar <mingo@elte.hu>
|
||||
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
|
||||
---
|
||||
arch/x86/kernel/ptrace.c | 3 +--
|
||||
1 files changed, 1 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/arch/x86/kernel/ptrace.c b/arch/x86/kernel/ptrace.c
|
||||
index 06ca07f..f7d38d6 100644
|
||||
--- a/arch/x86/kernel/ptrace.c
|
||||
+++ b/arch/x86/kernel/ptrace.c
|
||||
@@ -690,9 +690,8 @@ static int ptrace_bts_config(struct task_struct *child,
|
||||
if (!cfg.signal)
|
||||
return -EINVAL;
|
||||
|
||||
- return -EOPNOTSUPP;
|
||||
-
|
||||
child->thread.bts_ovfl_signal = cfg.signal;
|
||||
+ return -EOPNOTSUPP;
|
||||
}
|
||||
|
||||
if ((cfg.flags & PTRACE_BTS_O_ALLOC) &&
|
||||
--
|
||||
1.6.2.3
|
||||
|
169
debian/patches/bugfix/m68k/2.6.29/0080-x86-mtrr-don-t-modify-RdDram-WrDram-bits-of-fixed.patch
vendored
Normal file
169
debian/patches/bugfix/m68k/2.6.29/0080-x86-mtrr-don-t-modify-RdDram-WrDram-bits-of-fixed.patch
vendored
Normal file
|
@ -0,0 +1,169 @@
|
|||
From 67df6428d5c5a27061d94c6c9d0e844401638be5 Mon Sep 17 00:00:00 2001
|
||||
From: Andreas Herrmann <andreas.herrmann3@amd.com>
|
||||
Date: Mon, 30 Mar 2009 18:50:32 +0000
|
||||
Subject: [PATCH 80/90] x86: mtrr: don't modify RdDram/WrDram bits of fixed MTRRs
|
||||
|
||||
upstream commit: 3ff42da5048649503e343a32be37b14a6a4e8aaf
|
||||
|
||||
Impact: bug fix + BIOS workaround
|
||||
|
||||
BIOS is expected to clear the SYSCFG[MtrrFixDramModEn] on AMD CPUs
|
||||
after fixed MTRRs are configured.
|
||||
|
||||
Some BIOSes do not clear SYSCFG[MtrrFixDramModEn] on BP (and on APs).
|
||||
|
||||
This can lead to obfuscation in Linux when this bit is not cleared on
|
||||
BP but cleared on APs. A consequence of this is that the saved
|
||||
fixed-MTRR state (from BP) differs from the fixed-MTRRs of APs --
|
||||
because RdDram/WrDram bits are read as zero when
|
||||
SYSCFG[MtrrFixDramModEn] is cleared -- and Linux tries to sync
|
||||
fixed-MTRR state from BP to AP. This implies that Linux sets
|
||||
SYSCFG[MtrrFixDramEn] and activates those bits.
|
||||
|
||||
More important is that (some) systems change these bits in SMM when
|
||||
ACPI is enabled. Hence it is racy if Linux modifies RdMem/WrMem bits,
|
||||
too.
|
||||
|
||||
(1) The patch modifies an old fix from Bernhard Kaindl to get
|
||||
suspend/resume working on some Acer Laptops. Bernhard's patch
|
||||
tried to sync RdMem/WrMem bits of fixed MTRR registers and that
|
||||
helped on those old Laptops. (Don't ask me why -- can't test it
|
||||
myself). But this old problem was not the motivation for the
|
||||
patch. (See http://lkml.org/lkml/2007/4/3/110)
|
||||
|
||||
(2) The more important effect is to fix issues on some more current systems.
|
||||
|
||||
On those systems Linux panics or just freezes, see
|
||||
|
||||
http://bugzilla.kernel.org/show_bug.cgi?id=11541
|
||||
(and also duplicates of this bug:
|
||||
http://bugzilla.kernel.org/show_bug.cgi?id=11737
|
||||
http://bugzilla.kernel.org/show_bug.cgi?id=11714)
|
||||
|
||||
The affected systems boot only using acpi=ht, acpi=off or
|
||||
when the kernel is built with CONFIG_MTRR=n.
|
||||
|
||||
The acpi options prevent full enablement of ACPI. Obviously when
|
||||
ACPI is enabled the BIOS/SMM modfies RdMem/WrMem bits. When
|
||||
CONFIG_MTRR=y Linux also accesses and modifies those bits when it
|
||||
needs to sync fixed-MTRRs across cores (Bernhard's fix, see (1)).
|
||||
How do you synchronize that? You can't. As a consequence Linux
|
||||
shouldn't touch those bits at all (Rationale are AMD's BKDGs which
|
||||
recommend to clear the bit that makes RdMem/WrMem accessible).
|
||||
This is the purpose of this patch. And (so far) this suffices to
|
||||
fix (1) and (2).
|
||||
|
||||
I suggest not to touch RdDram/WrDram bits of fixed-MTRRs and
|
||||
SYSCFG[MtrrFixDramEn] and to clear SYSCFG[MtrrFixDramModEn] as
|
||||
suggested by AMD K8, and AMD family 10h/11h BKDGs.
|
||||
BIOS is expected to do this anyway. This should avoid that
|
||||
Linux and SMM tread on each other's toes ...
|
||||
|
||||
Signed-off-by: Andreas Herrmann <andreas.herrmann3@amd.com>
|
||||
Cc: trenn@suse.de
|
||||
Cc: Yinghai Lu <yinghai@kernel.org>
|
||||
LKML-Reference: <20090312163937.GH20716@alberich.amd.com>
|
||||
Cc: <stable@kernel.org>
|
||||
Signed-off-by: Ingo Molnar <mingo@elte.hu>
|
||||
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
|
||||
---
|
||||
arch/x86/kernel/cpu/mtrr/generic.c | 51 +++++++++++++++++++++---------------
|
||||
1 files changed, 30 insertions(+), 21 deletions(-)
|
||||
|
||||
diff --git a/arch/x86/kernel/cpu/mtrr/generic.c b/arch/x86/kernel/cpu/mtrr/generic.c
|
||||
index 0c0a455..6f557e0 100644
|
||||
--- a/arch/x86/kernel/cpu/mtrr/generic.c
|
||||
+++ b/arch/x86/kernel/cpu/mtrr/generic.c
|
||||
@@ -41,6 +41,32 @@ static int __init mtrr_debug(char *opt)
|
||||
}
|
||||
early_param("mtrr.show", mtrr_debug);
|
||||
|
||||
+/**
|
||||
+ * BIOS is expected to clear MtrrFixDramModEn bit, see for example
|
||||
+ * "BIOS and Kernel Developer's Guide for the AMD Athlon 64 and AMD
|
||||
+ * Opteron Processors" (26094 Rev. 3.30 February 2006), section
|
||||
+ * "13.2.1.2 SYSCFG Register": "The MtrrFixDramModEn bit should be set
|
||||
+ * to 1 during BIOS initalization of the fixed MTRRs, then cleared to
|
||||
+ * 0 for operation."
|
||||
+ */
|
||||
+static inline void k8_check_syscfg_dram_mod_en(void)
|
||||
+{
|
||||
+ u32 lo, hi;
|
||||
+
|
||||
+ if (!((boot_cpu_data.x86_vendor == X86_VENDOR_AMD) &&
|
||||
+ (boot_cpu_data.x86 >= 0x0f)))
|
||||
+ return;
|
||||
+
|
||||
+ rdmsr(MSR_K8_SYSCFG, lo, hi);
|
||||
+ if (lo & K8_MTRRFIXRANGE_DRAM_MODIFY) {
|
||||
+ printk(KERN_ERR FW_WARN "MTRR: CPU %u: SYSCFG[MtrrFixDramModEn]"
|
||||
+ " not cleared by BIOS, clearing this bit\n",
|
||||
+ smp_processor_id());
|
||||
+ lo &= ~K8_MTRRFIXRANGE_DRAM_MODIFY;
|
||||
+ mtrr_wrmsr(MSR_K8_SYSCFG, lo, hi);
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
/*
|
||||
* Returns the effective MTRR type for the region
|
||||
* Error returns:
|
||||
@@ -174,6 +200,8 @@ get_fixed_ranges(mtrr_type * frs)
|
||||
unsigned int *p = (unsigned int *) frs;
|
||||
int i;
|
||||
|
||||
+ k8_check_syscfg_dram_mod_en();
|
||||
+
|
||||
rdmsr(MTRRfix64K_00000_MSR, p[0], p[1]);
|
||||
|
||||
for (i = 0; i < 2; i++)
|
||||
@@ -308,27 +336,10 @@ void mtrr_wrmsr(unsigned msr, unsigned a, unsigned b)
|
||||
}
|
||||
|
||||
/**
|
||||
- * Enable and allow read/write of extended fixed-range MTRR bits on K8 CPUs
|
||||
- * see AMD publication no. 24593, chapter 3.2.1 for more information
|
||||
- */
|
||||
-static inline void k8_enable_fixed_iorrs(void)
|
||||
-{
|
||||
- unsigned lo, hi;
|
||||
-
|
||||
- rdmsr(MSR_K8_SYSCFG, lo, hi);
|
||||
- mtrr_wrmsr(MSR_K8_SYSCFG, lo
|
||||
- | K8_MTRRFIXRANGE_DRAM_ENABLE
|
||||
- | K8_MTRRFIXRANGE_DRAM_MODIFY, hi);
|
||||
-}
|
||||
-
|
||||
-/**
|
||||
* set_fixed_range - checks & updates a fixed-range MTRR if it differs from the value it should have
|
||||
* @msr: MSR address of the MTTR which should be checked and updated
|
||||
* @changed: pointer which indicates whether the MTRR needed to be changed
|
||||
* @msrwords: pointer to the MSR values which the MSR should have
|
||||
- *
|
||||
- * If K8 extentions are wanted, update the K8 SYSCFG MSR also.
|
||||
- * See AMD publication no. 24593, chapter 7.8.1, page 233 for more information.
|
||||
*/
|
||||
static void set_fixed_range(int msr, bool *changed, unsigned int *msrwords)
|
||||
{
|
||||
@@ -337,10 +348,6 @@ static void set_fixed_range(int msr, bool *changed, unsigned int *msrwords)
|
||||
rdmsr(msr, lo, hi);
|
||||
|
||||
if (lo != msrwords[0] || hi != msrwords[1]) {
|
||||
- if (boot_cpu_data.x86_vendor == X86_VENDOR_AMD &&
|
||||
- (boot_cpu_data.x86 >= 0x0f && boot_cpu_data.x86 <= 0x11) &&
|
||||
- ((msrwords[0] | msrwords[1]) & K8_MTRR_RDMEM_WRMEM_MASK))
|
||||
- k8_enable_fixed_iorrs();
|
||||
mtrr_wrmsr(msr, msrwords[0], msrwords[1]);
|
||||
*changed = true;
|
||||
}
|
||||
@@ -419,6 +426,8 @@ static int set_fixed_ranges(mtrr_type * frs)
|
||||
bool changed = false;
|
||||
int block=-1, range;
|
||||
|
||||
+ k8_check_syscfg_dram_mod_en();
|
||||
+
|
||||
while (fixed_range_blocks[++block].ranges)
|
||||
for (range=0; range < fixed_range_blocks[block].ranges; range++)
|
||||
set_fixed_range(fixed_range_blocks[block].base_msr + range,
|
||||
--
|
||||
1.6.2.3
|
||||
|
128
debian/patches/bugfix/m68k/2.6.29/0081-VM-x86-PAT-Change-is_linear_pfn_mapping-to-not-us.patch
vendored
Normal file
128
debian/patches/bugfix/m68k/2.6.29/0081-VM-x86-PAT-Change-is_linear_pfn_mapping-to-not-us.patch
vendored
Normal file
|
@ -0,0 +1,128 @@
|
|||
From 73dffc3a1e9678facba4cd762aa9a3692c7b4a72 Mon Sep 17 00:00:00 2001
|
||||
From: Pallipadi, Venkatesh <venkatesh.pallipadi@intel.com>
|
||||
Date: Mon, 30 Mar 2009 18:50:36 +0000
|
||||
Subject: [PATCH 81/90] VM, x86, PAT: Change is_linear_pfn_mapping to not use vm_pgoff
|
||||
|
||||
upstream commit: 4bb9c5c02153dfc89a6c73a6f32091413805ad7d
|
||||
|
||||
Impact: fix false positive PAT warnings - also fix VirtalBox hang
|
||||
|
||||
Use of vma->vm_pgoff to identify the pfnmaps that are fully
|
||||
mapped at mmap time is broken. vm_pgoff is set by generic mmap
|
||||
code even for cases where drivers are setting up the mappings
|
||||
at the fault time.
|
||||
|
||||
The problem was originally reported here:
|
||||
|
||||
http://marc.info/?l=linux-kernel&m=123383810628583&w=2
|
||||
|
||||
Change is_linear_pfn_mapping logic to overload VM_INSERTPAGE
|
||||
flag along with VM_PFNMAP to mean full PFNMAP setup at mmap
|
||||
time.
|
||||
|
||||
Problem also tracked at:
|
||||
|
||||
http://bugzilla.kernel.org/show_bug.cgi?id=12800
|
||||
|
||||
Reported-by: Thomas Hellstrom <thellstrom@vmware.com>
|
||||
Tested-by: Frans Pop <elendil@planet.nl>
|
||||
Signed-off-by: Venkatesh Pallipadi <venkatesh.pallipadi@intel.com>
|
||||
Signed-off-by: Suresh Siddha <suresh.b.siddha@intel.com>
|
||||
Cc: Nick Piggin <npiggin@suse.de>
|
||||
Cc: "ebiederm@xmission.com" <ebiederm@xmission.com>
|
||||
Cc: <stable@kernel.org> # only for 2.6.29.1, not .28
|
||||
LKML-Reference: <20090313004527.GA7176@linux-os.sc.intel.com>
|
||||
Signed-off-by: Ingo Molnar <mingo@elte.hu>
|
||||
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
|
||||
---
|
||||
arch/x86/mm/pat.c | 5 +++--
|
||||
include/linux/mm.h | 15 +++++++++++++--
|
||||
mm/memory.c | 6 ++++--
|
||||
3 files changed, 20 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/arch/x86/mm/pat.c b/arch/x86/mm/pat.c
|
||||
index e0ab173..21bc1f7 100644
|
||||
--- a/arch/x86/mm/pat.c
|
||||
+++ b/arch/x86/mm/pat.c
|
||||
@@ -641,10 +641,11 @@ static int reserve_pfn_range(u64 paddr, unsigned long size, pgprot_t *vma_prot,
|
||||
is_ram = pat_pagerange_is_ram(paddr, paddr + size);
|
||||
|
||||
/*
|
||||
- * reserve_pfn_range() doesn't support RAM pages.
|
||||
+ * reserve_pfn_range() doesn't support RAM pages. Maintain the current
|
||||
+ * behavior with RAM pages by returning success.
|
||||
*/
|
||||
if (is_ram != 0)
|
||||
- return -EINVAL;
|
||||
+ return 0;
|
||||
|
||||
ret = reserve_memtype(paddr, paddr + size, want_flags, &flags);
|
||||
if (ret)
|
||||
diff --git a/include/linux/mm.h b/include/linux/mm.h
|
||||
index 065cdf8..3daa05f 100644
|
||||
--- a/include/linux/mm.h
|
||||
+++ b/include/linux/mm.h
|
||||
@@ -98,7 +98,7 @@ extern unsigned int kobjsize(const void *objp);
|
||||
#define VM_HUGETLB 0x00400000 /* Huge TLB Page VM */
|
||||
#define VM_NONLINEAR 0x00800000 /* Is non-linear (remap_file_pages) */
|
||||
#define VM_MAPPED_COPY 0x01000000 /* T if mapped copy of data (nommu mmap) */
|
||||
-#define VM_INSERTPAGE 0x02000000 /* The vma has had "vm_insert_page()" done on it */
|
||||
+#define VM_INSERTPAGE 0x02000000 /* The vma has had "vm_insert_page()" done on it. Refer note in VM_PFNMAP_AT_MMAP below */
|
||||
#define VM_ALWAYSDUMP 0x04000000 /* Always include in core dumps */
|
||||
|
||||
#define VM_CAN_NONLINEAR 0x08000000 /* Has ->fault & does nonlinear pages */
|
||||
@@ -127,6 +127,17 @@ extern unsigned int kobjsize(const void *objp);
|
||||
#define VM_SPECIAL (VM_IO | VM_DONTEXPAND | VM_RESERVED | VM_PFNMAP)
|
||||
|
||||
/*
|
||||
+ * pfnmap vmas that are fully mapped at mmap time (not mapped on fault).
|
||||
+ * Used by x86 PAT to identify such PFNMAP mappings and optimize their handling.
|
||||
+ * Note VM_INSERTPAGE flag is overloaded here. i.e,
|
||||
+ * VM_INSERTPAGE && !VM_PFNMAP implies
|
||||
+ * The vma has had "vm_insert_page()" done on it
|
||||
+ * VM_INSERTPAGE && VM_PFNMAP implies
|
||||
+ * The vma is PFNMAP with full mapping at mmap time
|
||||
+ */
|
||||
+#define VM_PFNMAP_AT_MMAP (VM_INSERTPAGE | VM_PFNMAP)
|
||||
+
|
||||
+/*
|
||||
* mapping from the currently active vm_flags protection bits (the
|
||||
* low four bits) to a page protection mask..
|
||||
*/
|
||||
@@ -145,7 +156,7 @@ extern pgprot_t protection_map[16];
|
||||
*/
|
||||
static inline int is_linear_pfn_mapping(struct vm_area_struct *vma)
|
||||
{
|
||||
- return ((vma->vm_flags & VM_PFNMAP) && vma->vm_pgoff);
|
||||
+ return ((vma->vm_flags & VM_PFNMAP_AT_MMAP) == VM_PFNMAP_AT_MMAP);
|
||||
}
|
||||
|
||||
static inline int is_pfn_mapping(struct vm_area_struct *vma)
|
||||
diff --git a/mm/memory.c b/mm/memory.c
|
||||
index baa999e..d7df5ba 100644
|
||||
--- a/mm/memory.c
|
||||
+++ b/mm/memory.c
|
||||
@@ -1665,9 +1665,10 @@ int remap_pfn_range(struct vm_area_struct *vma, unsigned long addr,
|
||||
* behaviour that some programs depend on. We mark the "original"
|
||||
* un-COW'ed pages by matching them up with "vma->vm_pgoff".
|
||||
*/
|
||||
- if (addr == vma->vm_start && end == vma->vm_end)
|
||||
+ if (addr == vma->vm_start && end == vma->vm_end) {
|
||||
vma->vm_pgoff = pfn;
|
||||
- else if (is_cow_mapping(vma->vm_flags))
|
||||
+ vma->vm_flags |= VM_PFNMAP_AT_MMAP;
|
||||
+ } else if (is_cow_mapping(vma->vm_flags))
|
||||
return -EINVAL;
|
||||
|
||||
vma->vm_flags |= VM_IO | VM_RESERVED | VM_PFNMAP;
|
||||
@@ -1679,6 +1680,7 @@ int remap_pfn_range(struct vm_area_struct *vma, unsigned long addr,
|
||||
* needed from higher level routine calling unmap_vmas
|
||||
*/
|
||||
vma->vm_flags &= ~(VM_IO | VM_RESERVED | VM_PFNMAP);
|
||||
+ vma->vm_flags &= ~VM_PFNMAP_AT_MMAP;
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
--
|
||||
1.6.2.3
|
||||
|
62
debian/patches/bugfix/m68k/2.6.29/0082-lguest-wire-up-pte_update-pte_update_defer.patch
vendored
Normal file
62
debian/patches/bugfix/m68k/2.6.29/0082-lguest-wire-up-pte_update-pte_update_defer.patch
vendored
Normal file
|
@ -0,0 +1,62 @@
|
|||
From ab624168973480d92c844cc6c46f97d85bedd91c Mon Sep 17 00:00:00 2001
|
||||
From: Rusty Russell <rusty@rustcorp.com.au>
|
||||
Date: Tue, 31 Mar 2009 01:55:02 +0000
|
||||
Subject: [PATCH 82/90] lguest: wire up pte_update/pte_update_defer
|
||||
|
||||
upstream commit: b7ff99ea53cd16de8f6166c0e98f19a7c6ca67ee
|
||||
|
||||
Impact: intermittent guest segv/crash fix
|
||||
|
||||
I've been seeing random guest bad address crashes and segmentation faults:
|
||||
bisect led to 4f98a2fee8 (vmscan: split LRU lists into anon & file sets),
|
||||
but that's a red herring.
|
||||
|
||||
It turns out that lguest never hooked up the pte_update/pte_update_defer
|
||||
calls, so our ptes were not always in sync. After the vmscan commit, the
|
||||
bug became reproducible; now a fsck in a 64MB guest causes reproducible
|
||||
pagetable corruption.
|
||||
|
||||
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
|
||||
Cc: jeremy@xensource.com
|
||||
Cc: virtualization@lists.osdl.org
|
||||
Cc: stable@kernel.org
|
||||
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
|
||||
---
|
||||
arch/x86/lguest/boot.c | 10 +++++++++-
|
||||
1 files changed, 9 insertions(+), 1 deletions(-)
|
||||
|
||||
diff --git a/arch/x86/lguest/boot.c b/arch/x86/lguest/boot.c
|
||||
index 960a8d9..4175cb4 100644
|
||||
--- a/arch/x86/lguest/boot.c
|
||||
+++ b/arch/x86/lguest/boot.c
|
||||
@@ -485,11 +485,17 @@ static void lguest_write_cr4(unsigned long val)
|
||||
* into a process' address space. We set the entry then tell the Host the
|
||||
* toplevel and address this corresponds to. The Guest uses one pagetable per
|
||||
* process, so we need to tell the Host which one we're changing (mm->pgd). */
|
||||
+static void lguest_pte_update(struct mm_struct *mm, unsigned long addr,
|
||||
+ pte_t *ptep)
|
||||
+{
|
||||
+ lazy_hcall(LHCALL_SET_PTE, __pa(mm->pgd), addr, ptep->pte_low);
|
||||
+}
|
||||
+
|
||||
static void lguest_set_pte_at(struct mm_struct *mm, unsigned long addr,
|
||||
pte_t *ptep, pte_t pteval)
|
||||
{
|
||||
*ptep = pteval;
|
||||
- lazy_hcall(LHCALL_SET_PTE, __pa(mm->pgd), addr, pteval.pte_low);
|
||||
+ lguest_pte_update(mm, addr, ptep);
|
||||
}
|
||||
|
||||
/* The Guest calls this to set a top-level entry. Again, we set the entry then
|
||||
@@ -1034,6 +1040,8 @@ __init void lguest_init(void)
|
||||
pv_mmu_ops.read_cr3 = lguest_read_cr3;
|
||||
pv_mmu_ops.lazy_mode.enter = paravirt_enter_lazy_mmu;
|
||||
pv_mmu_ops.lazy_mode.leave = lguest_leave_lazy_mode;
|
||||
+ pv_mmu_ops.pte_update = lguest_pte_update;
|
||||
+ pv_mmu_ops.pte_update_defer = lguest_pte_update;
|
||||
|
||||
#ifdef CONFIG_X86_LOCAL_APIC
|
||||
/* apic read/write intercepts */
|
||||
--
|
||||
1.6.2.3
|
||||
|
38
debian/patches/bugfix/m68k/2.6.29/0083-lguest-fix-spurious-BUG_ON-on-invalid-guest-stack.patch
vendored
Normal file
38
debian/patches/bugfix/m68k/2.6.29/0083-lguest-fix-spurious-BUG_ON-on-invalid-guest-stack.patch
vendored
Normal file
|
@ -0,0 +1,38 @@
|
|||
From 4d25e3d0370354092b04aa338df14fb0b4c63331 Mon Sep 17 00:00:00 2001
|
||||
From: Rusty Russell <rusty@rustcorp.com.au>
|
||||
Date: Tue, 31 Mar 2009 01:55:04 +0000
|
||||
Subject: [PATCH 83/90] lguest: fix spurious BUG_ON() on invalid guest stack.
|
||||
|
||||
upstream commit: 6afbdd059c27330eccbd85943354f94c2b83a7fe
|
||||
|
||||
Impact: fix crash on misbehaving guest
|
||||
|
||||
gpte_addr() contains a BUG_ON(), insisting that the present flag is
|
||||
set. We need to return before we call it if that isn't the case.
|
||||
|
||||
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
|
||||
Cc: stable@kernel.org
|
||||
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
|
||||
---
|
||||
drivers/lguest/page_tables.c | 4 +++-
|
||||
1 files changed, 3 insertions(+), 1 deletions(-)
|
||||
|
||||
diff --git a/drivers/lguest/page_tables.c b/drivers/lguest/page_tables.c
|
||||
index 576a831..82ff484 100644
|
||||
--- a/drivers/lguest/page_tables.c
|
||||
+++ b/drivers/lguest/page_tables.c
|
||||
@@ -373,8 +373,10 @@ unsigned long guest_pa(struct lg_cpu *cpu, unsigned long vaddr)
|
||||
/* First step: get the top-level Guest page table entry. */
|
||||
gpgd = lgread(cpu, gpgd_addr(cpu, vaddr), pgd_t);
|
||||
/* Toplevel not present? We can't map it in. */
|
||||
- if (!(pgd_flags(gpgd) & _PAGE_PRESENT))
|
||||
+ if (!(pgd_flags(gpgd) & _PAGE_PRESENT)) {
|
||||
kill_guest(cpu, "Bad address %#lx", vaddr);
|
||||
+ return -1UL;
|
||||
+ }
|
||||
|
||||
gpte = lgread(cpu, gpte_addr(gpgd, vaddr), pte_t);
|
||||
if (!(pte_flags(gpte) & _PAGE_PRESENT))
|
||||
--
|
||||
1.6.2.3
|
||||
|
58
debian/patches/bugfix/m68k/2.6.29/0084-cfg80211-fix-incorrect-assumption-on-last_request-f.patch
vendored
Normal file
58
debian/patches/bugfix/m68k/2.6.29/0084-cfg80211-fix-incorrect-assumption-on-last_request-f.patch
vendored
Normal file
|
@ -0,0 +1,58 @@
|
|||
From cbb76e6c205242d8889f9979d53f22a43328b9ec Mon Sep 17 00:00:00 2001
|
||||
From: Luis R. Rodriguez <lrodriguez@atheros.com>
|
||||
Date: Sat, 28 Mar 2009 01:45:08 +0000
|
||||
Subject: [PATCH 84/90] cfg80211: fix incorrect assumption on last_request for 11d
|
||||
|
||||
upstream commit: cc0b6fe88e99096868bdbacbf486c97299533b5a
|
||||
|
||||
The incorrect assumption is the last regulatory request
|
||||
(last_request) is always a country IE when processing
|
||||
country IEs. Although this is true 99% of the time the
|
||||
first time this happens this could not be true.
|
||||
|
||||
This fixes an oops in the branch check for the last_request
|
||||
when accessing drv_last_ie. The access was done under the
|
||||
assumption the struct won't be null.
|
||||
|
||||
Note to stable: to port to 29 replace as follows, only 29 has
|
||||
country IE code:
|
||||
|
||||
s|NL80211_REGDOM_SET_BY_COUNTRY_IE|REGDOM_SET_BY_COUNTRY_IE
|
||||
|
||||
Cc: stable@kernel.org
|
||||
Reported-by: Quentin Armitage <Quentin@armitage.org.uk>
|
||||
Signed-off-by: Luis R. Rodriguez <lrodriguez@atheros.com>
|
||||
Signed-off-by: John W. Linville <linville@tuxdriver.com>
|
||||
[chrisw: backport to 2.6.29]
|
||||
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
|
||||
---
|
||||
net/wireless/reg.c | 6 +++++-
|
||||
1 files changed, 5 insertions(+), 1 deletions(-)
|
||||
|
||||
diff --git a/net/wireless/reg.c b/net/wireless/reg.c
|
||||
index 0a08e74..4f9ff2a 100644
|
||||
--- a/net/wireless/reg.c
|
||||
+++ b/net/wireless/reg.c
|
||||
@@ -1083,6 +1083,8 @@ EXPORT_SYMBOL(regulatory_hint);
|
||||
static bool reg_same_country_ie_hint(struct wiphy *wiphy,
|
||||
u32 country_ie_checksum)
|
||||
{
|
||||
+ if (unlikely(last_request->initiator != REGDOM_SET_BY_COUNTRY_IE))
|
||||
+ return false;
|
||||
if (!last_request->wiphy)
|
||||
return false;
|
||||
if (likely(last_request->wiphy != wiphy))
|
||||
@@ -1133,7 +1135,9 @@ void regulatory_hint_11d(struct wiphy *wiphy,
|
||||
/* We will run this for *every* beacon processed for the BSSID, so
|
||||
* we optimize an early check to exit out early if we don't have to
|
||||
* do anything */
|
||||
- if (likely(last_request->wiphy)) {
|
||||
+ if (likely(last_request->initiator ==
|
||||
+ REGDOM_SET_BY_COUNTRY_IE &&
|
||||
+ likely(last_request->wiphy))) {
|
||||
struct cfg80211_registered_device *drv_last_ie;
|
||||
|
||||
drv_last_ie = wiphy_to_dev(last_request->wiphy);
|
||||
--
|
||||
1.6.2.3
|
||||
|
39
debian/patches/bugfix/m68k/2.6.29/0085-KVM-MMU-Fix-another-largepage-memory-leak.patch
vendored
Normal file
39
debian/patches/bugfix/m68k/2.6.29/0085-KVM-MMU-Fix-another-largepage-memory-leak.patch
vendored
Normal file
|
@ -0,0 +1,39 @@
|
|||
From 716fd1dac0a807fdc4c750a5f967ffcc9d9ea744 Mon Sep 17 00:00:00 2001
|
||||
From: Joerg Roedel <joerg.roedel@amd.com>
|
||||
Date: Thu, 26 Mar 2009 23:05:07 +0000
|
||||
Subject: [PATCH 85/90] KVM: MMU: Fix another largepage memory leak
|
||||
|
||||
upstream commit: c5bc22424021cabda862727fb3f5098b866f074d
|
||||
|
||||
In the paging_fetch function rmap_remove is called after setting a large
|
||||
pte to non-present. This causes rmap_remove to not drop the reference to
|
||||
the large page. The result is a memory leak of that page.
|
||||
|
||||
Cc: stable@kernel.org
|
||||
Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
|
||||
Acked-by: Marcelo Tosatti <mtosatti@redhat.com>
|
||||
Signed-off-by: Avi Kivity <avi@redhat.com>
|
||||
[chrisw: backport to 2.6.29]
|
||||
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
|
||||
---
|
||||
arch/x86/kvm/paging_tmpl.h | 2 +-
|
||||
1 files changed, 1 insertions(+), 1 deletions(-)
|
||||
|
||||
diff --git a/arch/x86/kvm/paging_tmpl.h b/arch/x86/kvm/paging_tmpl.h
|
||||
index 9fd78b6..c95a67d 100644
|
||||
--- a/arch/x86/kvm/paging_tmpl.h
|
||||
+++ b/arch/x86/kvm/paging_tmpl.h
|
||||
@@ -314,9 +314,9 @@ static int FNAME(shadow_walk_entry)(struct kvm_shadow_walk *_sw,
|
||||
return 0;
|
||||
|
||||
if (is_large_pte(*sptep)) {
|
||||
+ rmap_remove(vcpu->kvm, sptep);
|
||||
set_shadow_pte(sptep, shadow_trap_nonpresent_pte);
|
||||
kvm_flush_remote_tlbs(vcpu->kvm);
|
||||
- rmap_remove(vcpu->kvm, sptep);
|
||||
}
|
||||
|
||||
if (level == PT_DIRECTORY_LEVEL && gw->level == PT_DIRECTORY_LEVEL) {
|
||||
--
|
||||
1.6.2.3
|
||||
|
73
debian/patches/bugfix/m68k/2.6.29/0086-sparc64-Fix-MM-refcount-check-in-smp_flush_tlb_pend.patch
vendored
Normal file
73
debian/patches/bugfix/m68k/2.6.29/0086-sparc64-Fix-MM-refcount-check-in-smp_flush_tlb_pend.patch
vendored
Normal file
|
@ -0,0 +1,73 @@
|
|||
From 8796fc28c04f2ed6aacfd5df9c306312aaca1aef Mon Sep 17 00:00:00 2001
|
||||
From: David S. Miller <davem@davemloft.net>
|
||||
Date: Fri, 27 Mar 2009 01:09:17 -0700
|
||||
Subject: [PATCH 86/90] sparc64: Fix MM refcount check in smp_flush_tlb_pending().
|
||||
|
||||
[ Upstream commit f9384d41c02408dd404aa64d66d0ef38adcf6479 ]
|
||||
|
||||
As explained by Benjamin Herrenschmidt:
|
||||
|
||||
> CPU 0 is running the context, task->mm == task->active_mm == your
|
||||
> context. The CPU is in userspace happily churning things.
|
||||
>
|
||||
> CPU 1 used to run it, not anymore, it's now running fancyfsd which
|
||||
> is a kernel thread, but current->active_mm still points to that
|
||||
> same context.
|
||||
>
|
||||
> Because there's only one "real" user, mm_users is 1 (but mm_count is
|
||||
> elevated, it's just that the presence on CPU 1 as active_mm has no
|
||||
> effect on mm_count().
|
||||
>
|
||||
> At this point, fancyfsd decides to invalidate a mapping currently mapped
|
||||
> by that context, for example because a networked file has changed
|
||||
> remotely or something like that, using unmap_mapping_ranges().
|
||||
>
|
||||
> So CPU 1 goes into the zapping code, which eventually ends up calling
|
||||
> flush_tlb_pending(). Your test will succeed, as current->active_mm is
|
||||
> indeed the target mm for the flush, and mm_users is indeed 1. So you
|
||||
> will -not- send an IPI to the other CPU, and CPU 0 will continue happily
|
||||
> accessing the pages that should have been unmapped.
|
||||
|
||||
To fix this problem, check ->mm instead of ->active_mm, and this
|
||||
means:
|
||||
|
||||
> So if you test current->mm, you effectively account for mm_users == 1,
|
||||
> so the only way the mm can be active on another processor is as a lazy
|
||||
> mm for a kernel thread. So your test should work properly as long
|
||||
> as you don't have a HW that will do speculative TLB reloads into the
|
||||
> TLB on that other CPU (and even if you do, you flush-on-switch-in should
|
||||
> get rid of any crap here).
|
||||
|
||||
And therefore we should be OK.
|
||||
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
|
||||
---
|
||||
arch/sparc/kernel/smp_64.c | 4 ++--
|
||||
1 files changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/arch/sparc/kernel/smp_64.c b/arch/sparc/kernel/smp_64.c
|
||||
index 6cd1a5b..79457f6 100644
|
||||
--- a/arch/sparc/kernel/smp_64.c
|
||||
+++ b/arch/sparc/kernel/smp_64.c
|
||||
@@ -1031,7 +1031,7 @@ void smp_fetch_global_regs(void)
|
||||
* If the address space is non-shared (ie. mm->count == 1) we avoid
|
||||
* cross calls when we want to flush the currently running process's
|
||||
* tlb state. This is done by clearing all cpu bits except the current
|
||||
- * processor's in current->active_mm->cpu_vm_mask and performing the
|
||||
+ * processor's in current->mm->cpu_vm_mask and performing the
|
||||
* flush locally only. This will force any subsequent cpus which run
|
||||
* this task to flush the context from the local tlb if the process
|
||||
* migrates to another cpu (again).
|
||||
@@ -1074,7 +1074,7 @@ void smp_flush_tlb_pending(struct mm_struct *mm, unsigned long nr, unsigned long
|
||||
u32 ctx = CTX_HWBITS(mm->context);
|
||||
int cpu = get_cpu();
|
||||
|
||||
- if (mm == current->active_mm && atomic_read(&mm->mm_users) == 1)
|
||||
+ if (mm == current->mm && atomic_read(&mm->mm_users) == 1)
|
||||
mm->cpu_vm_mask = cpumask_of_cpu(cpu);
|
||||
else
|
||||
smp_cross_call_masked(&xcall_flush_tlb_pending,
|
||||
--
|
||||
1.6.2.3
|
||||
|
43
debian/patches/bugfix/m68k/2.6.29/0087-sparc64-Flush-TLB-before-releasing-pages.patch
vendored
Normal file
43
debian/patches/bugfix/m68k/2.6.29/0087-sparc64-Flush-TLB-before-releasing-pages.patch
vendored
Normal file
|
@ -0,0 +1,43 @@
|
|||
From b6816b706138c3870f03115071872cad824f90b4 Mon Sep 17 00:00:00 2001
|
||||
From: David S. Miller <davem@davemloft.net>
|
||||
Date: Thu, 26 Mar 2009 01:28:53 -0700
|
||||
Subject: [PATCH 87/90] sparc64: Flush TLB before releasing pages.
|
||||
|
||||
[ Upstream commit a552a42cfa91ab653128dff89a70c8dde7fed042 ]
|
||||
|
||||
tlb_flush_mmu() needs to flush pending TLB entries before
|
||||
processing the mmu_gather ->pages list.
|
||||
|
||||
Noticed by Benjamin Herrenschmidt.
|
||||
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
|
||||
---
|
||||
arch/sparc/include/asm/tlb_64.h | 4 ++--
|
||||
1 files changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/arch/sparc/include/asm/tlb_64.h b/arch/sparc/include/asm/tlb_64.h
|
||||
index ec81cde..0aaa086 100644
|
||||
--- a/arch/sparc/include/asm/tlb_64.h
|
||||
+++ b/arch/sparc/include/asm/tlb_64.h
|
||||
@@ -58,6 +58,8 @@ static inline struct mmu_gather *tlb_gather_mmu(struct mm_struct *mm, unsigned i
|
||||
static inline void tlb_flush_mmu(struct mmu_gather *mp)
|
||||
{
|
||||
if (mp->need_flush) {
|
||||
+ if (!mp->fullmm)
|
||||
+ flush_tlb_pending();
|
||||
free_pages_and_swap_cache(mp->pages, mp->pages_nr);
|
||||
mp->pages_nr = 0;
|
||||
mp->need_flush = 0;
|
||||
@@ -78,8 +80,6 @@ static inline void tlb_finish_mmu(struct mmu_gather *mp, unsigned long start, un
|
||||
|
||||
if (mp->fullmm)
|
||||
mp->fullmm = 0;
|
||||
- else
|
||||
- flush_tlb_pending();
|
||||
|
||||
/* keep the page table cache within bounds */
|
||||
check_pgt_cache();
|
||||
--
|
||||
1.6.2.3
|
||||
|
69
debian/patches/bugfix/m68k/2.6.29/0088-sparc64-Fix-reset-hangs-on-Niagara-systems.patch
vendored
Normal file
69
debian/patches/bugfix/m68k/2.6.29/0088-sparc64-Fix-reset-hangs-on-Niagara-systems.patch
vendored
Normal file
|
@ -0,0 +1,69 @@
|
|||
From 5d8a29ae73aa9a0dac7aa7ec970bbe2d8f45b189 Mon Sep 17 00:00:00 2001
|
||||
From: David S. Miller <davem@davemloft.net>
|
||||
Date: Sun, 29 Mar 2009 15:40:33 -0700
|
||||
Subject: [PATCH 88/90] sparc64: Fix reset hangs on Niagara systems.
|
||||
|
||||
[ Upstream commit ffaba674090f287afe0c44fd8d978c64c03581a8 ]
|
||||
|
||||
Hypervisor versions older than version 1.6.1 cannot handle
|
||||
leaving the profile counter overflow interrupt chirping
|
||||
when the system does a soft reset.
|
||||
|
||||
So use a reboot notifier to shut off the NMI watchdog.
|
||||
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
|
||||
---
|
||||
arch/sparc/kernel/nmi.c | 23 ++++++++++++++++++++++-
|
||||
1 files changed, 22 insertions(+), 1 deletions(-)
|
||||
|
||||
diff --git a/arch/sparc/kernel/nmi.c b/arch/sparc/kernel/nmi.c
|
||||
index f357722..2c0cc72 100644
|
||||
--- a/arch/sparc/kernel/nmi.c
|
||||
+++ b/arch/sparc/kernel/nmi.c
|
||||
@@ -13,6 +13,7 @@
|
||||
#include <linux/module.h>
|
||||
#include <linux/kprobes.h>
|
||||
#include <linux/kernel_stat.h>
|
||||
+#include <linux/reboot.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/kdebug.h>
|
||||
#include <linux/delay.h>
|
||||
@@ -206,13 +207,33 @@ void nmi_adjust_hz(unsigned int new_hz)
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(nmi_adjust_hz);
|
||||
|
||||
+static int nmi_shutdown(struct notifier_block *nb, unsigned long cmd, void *p)
|
||||
+{
|
||||
+ on_each_cpu(stop_watchdog, NULL, 1);
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static struct notifier_block nmi_reboot_notifier = {
|
||||
+ .notifier_call = nmi_shutdown,
|
||||
+};
|
||||
+
|
||||
int __init nmi_init(void)
|
||||
{
|
||||
+ int err;
|
||||
+
|
||||
nmi_usable = 1;
|
||||
|
||||
on_each_cpu(start_watchdog, NULL, 1);
|
||||
|
||||
- return check_nmi_watchdog();
|
||||
+ err = check_nmi_watchdog();
|
||||
+ if (!err) {
|
||||
+ err = register_reboot_notifier(&nmi_reboot_notifier);
|
||||
+ if (err) {
|
||||
+ nmi_usable = 0;
|
||||
+ on_each_cpu(stop_watchdog, NULL, 1);
|
||||
+ }
|
||||
+ }
|
||||
+ return err;
|
||||
}
|
||||
|
||||
static int __init setup_nmi_watchdog(char *str)
|
||||
--
|
||||
1.6.2.3
|
||||
|
64
debian/patches/bugfix/m68k/2.6.29/0089-V4L-v4l2-common-remove-incorrect-MODULE-test.patch
vendored
Normal file
64
debian/patches/bugfix/m68k/2.6.29/0089-V4L-v4l2-common-remove-incorrect-MODULE-test.patch
vendored
Normal file
|
@ -0,0 +1,64 @@
|
|||
From bb70446264cc380f4167c9bea4df2c12ad564541 Mon Sep 17 00:00:00 2001
|
||||
From: Hans Verkuil <hverkuil@xs4all.nl>
|
||||
Date: Tue, 31 Mar 2009 09:23:04 -0400
|
||||
Subject: [PATCH 89/90] V4L: v4l2-common: remove incorrect MODULE test
|
||||
|
||||
upstream commit: d64260d58865004c6354e024da3450fdd607ea07
|
||||
|
||||
v4l2-common doesn't have to be a module for it to call request_module().
|
||||
Just remove that test.
|
||||
|
||||
Without this patch loading ivtv as a module while v4l2-common is compiled
|
||||
into the kernel will cause a delayed load of the i2c modules that ivtv
|
||||
needs since request_module is never called directly.
|
||||
|
||||
While it is nice to see the delayed load in action, it is not so nice in
|
||||
that ivtv fails to do a lot of necessary i2c initializations and will oops
|
||||
later on with a division-by-zero.
|
||||
|
||||
Thanks to Mark Lord for reporting this and helping me figure out what was
|
||||
wrong.
|
||||
|
||||
Thanks-to: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
|
||||
Thanks-to: Mark Lord <lkml@rtr.ca>
|
||||
Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
|
||||
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
|
||||
Signed-off-by: Michael Krufky <mkrufky@linuxtv.org>
|
||||
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
|
||||
---
|
||||
drivers/media/video/v4l2-common.c | 8 ++++----
|
||||
1 files changed, 4 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/drivers/media/video/v4l2-common.c b/drivers/media/video/v4l2-common.c
|
||||
index b8f2be8..907cd02 100644
|
||||
--- a/drivers/media/video/v4l2-common.c
|
||||
+++ b/drivers/media/video/v4l2-common.c
|
||||
@@ -910,10 +910,10 @@ struct v4l2_subdev *v4l2_i2c_new_subdev(struct i2c_adapter *adapter,
|
||||
struct i2c_board_info info;
|
||||
|
||||
BUG_ON(!dev);
|
||||
-#ifdef MODULE
|
||||
+
|
||||
if (module_name)
|
||||
request_module(module_name);
|
||||
-#endif
|
||||
+
|
||||
/* Setup the i2c board info with the device type and
|
||||
the device address. */
|
||||
memset(&info, 0, sizeof(info));
|
||||
@@ -958,10 +958,10 @@ struct v4l2_subdev *v4l2_i2c_new_probed_subdev(struct i2c_adapter *adapter,
|
||||
struct i2c_board_info info;
|
||||
|
||||
BUG_ON(!dev);
|
||||
-#ifdef MODULE
|
||||
+
|
||||
if (module_name)
|
||||
request_module(module_name);
|
||||
-#endif
|
||||
+
|
||||
/* Setup the i2c board info with the device type and
|
||||
the device address. */
|
||||
memset(&info, 0, sizeof(info));
|
||||
--
|
||||
1.6.2.3
|
||||
|
|
@ -0,0 +1,25 @@
|
|||
From 8d7bff2d72660d9d60aa371ae3d1356bbf329a09 Mon Sep 17 00:00:00 2001
|
||||
From: Chris Wright <chrisw@sous-sol.org>
|
||||
Date: Thu, 2 Apr 2009 13:55:27 -0700
|
||||
Subject: [PATCH 90/90] Linux 2.6.29.1
|
||||
|
||||
---
|
||||
Makefile | 2 +-
|
||||
1 files changed, 1 insertions(+), 1 deletions(-)
|
||||
|
||||
diff --git a/Makefile b/Makefile
|
||||
index 1ab3ebf..cdb1133 100644
|
||||
--- a/Makefile
|
||||
+++ b/Makefile
|
||||
@@ -1,7 +1,7 @@
|
||||
VERSION = 2
|
||||
PATCHLEVEL = 6
|
||||
SUBLEVEL = 29
|
||||
-EXTRAVERSION =
|
||||
+EXTRAVERSION = .1
|
||||
NAME = Temporary Tasmanian Devil
|
||||
|
||||
# *DOCUMENTATION*
|
||||
--
|
||||
1.6.2.3
|
||||
|
|
@ -2,3 +2,49 @@
|
|||
|
||||
#+ features/all/vserver/vs2.3.0.35.patch featureset=vserver
|
||||
+ features/all/vserver/bindmount-dev.patch featureset=vserver
|
||||
|
||||
# m68k patches for 2.6.29 from linux-m68k.git
|
||||
+ bugfix/m68k/2.6.29/0001-m68k-Add-install-target.patch m68k
|
||||
+ bugfix/m68k/2.6.29/0002-m68k-mac-Add-a-new-entry-in-mac_model-to-identify.patch m68k
|
||||
+ bugfix/m68k/2.6.29/0003-m68k-mac-Add-SWIM-floppy-support.patch m68k
|
||||
+ bugfix/m68k/2.6.29/0004-MAINTAINERS-Replace-dead-link-to-m68k-CVS-repositor.patch m68k
|
||||
+ bugfix/m68k/2.6.29/0005-m68k-section-mismatch-fixes-DMAsound-for-Atari.patch m68k
|
||||
+ bugfix/m68k/2.6.29/0006-m68k-section-mismatch-fixes-Atari-SCSI.patch m68k
|
||||
+ bugfix/m68k/2.6.29/0007-m68k-irq_node.handler-should-return-irqreturn_t.patch m68k
|
||||
+ bugfix/m68k/2.6.29/0008-m68k-Atari-ARAnyM-support.patch m68k
|
||||
+ bugfix/m68k/2.6.29/0009-m68k-Export-ARAnyM-native-feature-API.patch m68k
|
||||
+ bugfix/m68k/2.6.29/0010-m68k-Add-support-for-ARAnyM-block-and-console-acces.patch m68k
|
||||
+ bugfix/m68k/2.6.29/0011-m68k-ARAnyM-early_param-does-not-exist-in-the-mod.patch m68k
|
||||
+ bugfix/m68k/2.6.29/0012-m68k-Wrap-nfblock-natfeat-calls.patch m68k
|
||||
+ bugfix/m68k/2.6.29/0013-m68k-Atari-EtherNAT-SMC91C111-driver.patch m68k
|
||||
+ bugfix/m68k/2.6.29/0014-m68k-Atari-EtherNAT-updates.patch m68k
|
||||
+ bugfix/m68k/2.6.29/0015-m68k-Atari-EtherNAT-warning-fixes.patch m68k
|
||||
+ bugfix/m68k/2.6.29/0016-m68k-section-mismatch-fixes-EtherNAT.patch m68k
|
||||
+ bugfix/m68k/2.6.29/0017-m68k-Atari-ROM-port-ISA-adapter-support.patch m68k
|
||||
+ bugfix/m68k/2.6.29/0018-m68k-Atari-io.h-fixes-for-EtherNAT-driver.patch m68k
|
||||
+ bugfix/m68k/2.6.29/0019-m68k-Atari-EtherNEC-driver.patch m68k
|
||||
+ bugfix/m68k/2.6.29/0020-atari-ethernec-fixes.diff.patch m68k
|
||||
+ bugfix/m68k/2.6.29/0021-m68k-Atari-SCC-serial-driver-needs-atari_SCC_init_d.patch m68k
|
||||
+ bugfix/m68k/2.6.29/0022-m68k-Atari-SCC-serial-driver-needs-CONFIG_ATARI_SCC.patch m68k
|
||||
+ bugfix/m68k/2.6.29/0023-m68k-Atari-SCC-serial-driver.patch m68k
|
||||
+ bugfix/m68k/2.6.29/0024-m68k-Atari-SCC-serial-driver-checkpatch-cleanups.patch m68k
|
||||
+ bugfix/m68k/2.6.29/0025-m68k-Atari-SCC-serial-driver-gs-update.patch m68k
|
||||
+ bugfix/m68k/2.6.29/0026-m68k-Atari-SCC-serial-driver-break_ctl-update.patch m68k
|
||||
+ bugfix/m68k/2.6.29/0027-m68k-Disable-Atari-serial-console-support-if-modula.patch m68k
|
||||
+ bugfix/m68k/2.6.29/0028-m68k-Atari-SCC-support-for-ST.patch m68k
|
||||
+ bugfix/m68k/2.6.29/0029-m68k-atari_scc-kill-warn_unused_result-warnings.patch m68k
|
||||
+ bugfix/m68k/2.6.29/0030-m68k-atari_scc-kill-fake-config-variables.patch m68k
|
||||
+ bugfix/m68k/2.6.29/0031-Revert-msdos-fs-remove-unsettable-atari-option.patch m68k
|
||||
+ bugfix/m68k/2.6.29/0032-Atari-FAT-updates.patch m68k
|
||||
+ bugfix/m68k/2.6.29/0033-Add-Amiga-Zorro-bus-modalias-support.patch m68k
|
||||
+ bugfix/m68k/2.6.29/0034-m68k-Fix-debug-mem-on-Amiga.patch m68k
|
||||
+ bugfix/m68k/2.6.29/0035-m68k-allow-all-kernel-traps-to-be-handled-via-except.patch m68k
|
||||
+ bugfix/m68k/2.6.29/0036-m68k-Add-support-for-EARLY_PRINTK-on-MVME16x.patch m68k
|
||||
+ bugfix/m68k/2.6.29/0037-Update-for-m68k-Add-support-for-EARLY_PRINTK-on-MVM.patch m68k
|
||||
+ bugfix/m68k/2.6.29/0038-m68k-atari_scc-Upstream-updates.patch m68k
|
||||
+ bugfix/m68k/2.6.29/0039-m68k-atari-Rename-mfp-to-st_mfp.patch m68k
|
||||
+ bugfix/m68k/2.6.29/0040-atari-Use-the-correct-mouse-interrupt-hook.patch m68k
|
||||
+ bugfix/m68k/2.6.29/0041-m68k-Fix-atarimouse-init.patch m68k
|
||||
+ bugfix/m68k/2.6.29/0042-ADB-raw-packets.patch m68k
|
||||
+ bugfix/m68k/2.6.29/0043-m68k-Update-defconfigs-for-2.6.29.patch m68k
|
||||
|
||||
|
|
Loading…
Reference in New Issue