[arch-commits] CVS update of core/base/kernel26 (10 files)

Tobias Powalowski tpowa at archlinux.org
Sat Oct 27 09:30:59 UTC 2007


    Date: Saturday, October 27, 2007 @ 05:30:59
  Author: tpowa
    Path: /home/cvs-core/core/base/kernel26

   Added: 2405_hostap-netdev-type.patch (1.1)
          2525_usb-storage-nikon-d200-quirk.patch (1.1)
          2530_usb-storage-nikon-d40x-quirk.patch (1.1)
          2700_alsa-hdsp-dds-offset.patch (1.1) ide-helper-2.6.23.patch (1.1)
          ipw2x00-2.6.23.patch (1.1) zd1211rw-oops-2.6.23.patch (1.1)
Modified: PKGBUILD (1.269 -> 1.270) config (1.107 -> 1.108)
          config.x86_64 (1.36 -> 1.37)

'upgpkg: bugfix + feature adding
this one adresses these bugs:
http://bugs.archlinux.org/task/8435
http://bugs.archlinux.org/task/8431
http://bugs.archlinux.org/task/8422

- added some genpatches from gentoo
- added fix for 2 ide modules in pair mode
- added fix for zd1211rw oops'


-----------------------------------------+
 2405_hostap-netdev-type.patch           |  107 +++++++++++
 2525_usb-storage-nikon-d200-quirk.patch |   37 ++++
 2530_usb-storage-nikon-d40x-quirk.patch |   36 +++
 2700_alsa-hdsp-dds-offset.patch         |   29 +++
 PKGBUILD                                |   43 ++++
 config                                  |   83 ++++++++-
 config.x86_64                           |   85 ++++++++-
 ide-helper-2.6.23.patch                 |  101 ++++++++++
 ipw2x00-2.6.23.patch                    |  276 ++++++++++++++++++++++++++++++
 zd1211rw-oops-2.6.23.patch              |   41 ++++
 10 files changed, 827 insertions(+), 11 deletions(-)


Index: core/base/kernel26/2405_hostap-netdev-type.patch
diff -u /dev/null core/base/kernel26/2405_hostap-netdev-type.patch:1.1
--- /dev/null	Sat Oct 27 05:30:59 2007
+++ core/base/kernel26/2405_hostap-netdev-type.patch	Sat Oct 27 05:30:58 2007
@@ -0,0 +1,107 @@
+From: Daniel Drake <dsd at gentoo.org>
+Date: Wed, 26 Sep 2007 20:45:24 +0000 (+0100)
+Subject: [PATCH] hostap: set netdev type before registering AP interface
+X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Flinville%2Fwireless-2.6.git;a=commitdiff_plain;h=d4a248f175f60fa278d792727ca11b6376f2d4e5
+
+[PATCH] hostap: set netdev type before registering AP interface
+
+As detailed at https://bugs.gentoo.org/159646 hostap with hostapd confuses
+udev by presenting 2 interfaces with the same MAC address. Also, at the time
+of detection, the 'type' attribute is 1, identical to other hostap interfaces.
+
+The AP interface is supposed to have type ARPHRD_IEEE80211 (801), but this is
+not set until after registration.
+
+Setting it before register_netdev() is called allows us to avoid this
+confusion. We can do this by propogating the HOSTAP_INTERFACE type through
+to hostap_setup_dev().
+
+Signed-off-by: Daniel Drake <dsd at gentoo.org>
+Signed-off-by: John W. Linville <linville at tuxdriver.com>
+---
+
+Index: linux-2.6.23-gentoo/drivers/net/wireless/hostap/hostap.h
+===================================================================
+--- linux-2.6.23-gentoo.orig/drivers/net/wireless/hostap/hostap.h
++++ linux-2.6.23-gentoo/drivers/net/wireless/hostap/hostap.h
+@@ -35,7 +35,7 @@ int hostap_80211_prism_header_parse(stru
+ int hostap_80211_get_hdrlen(u16 fc);
+ struct net_device_stats *hostap_get_stats(struct net_device *dev);
+ void hostap_setup_dev(struct net_device *dev, local_info_t *local,
+-		      int main_dev);
++		      int type);
+ void hostap_set_multicast_list_queue(struct work_struct *work);
+ int hostap_set_hostapd(local_info_t *local, int val, int rtnl_locked);
+ int hostap_set_hostapd_sta(local_info_t *local, int val, int rtnl_locked);
+Index: linux-2.6.23-gentoo/drivers/net/wireless/hostap/hostap_hw.c
+===================================================================
+--- linux-2.6.23-gentoo.orig/drivers/net/wireless/hostap/hostap_hw.c
++++ linux-2.6.23-gentoo/drivers/net/wireless/hostap/hostap_hw.c
+@@ -3254,7 +3254,7 @@ while (0)
+ 
+ 	INIT_LIST_HEAD(&local->bss_list);
+ 
+-	hostap_setup_dev(dev, local, 1);
++	hostap_setup_dev(dev, local, HOSTAP_INTERFACE_MASTER);
+ 	local->saved_eth_header_parse = dev->hard_header_parse;
+ 
+ 	dev->hard_start_xmit = hostap_master_start_xmit;
+Index: linux-2.6.23-gentoo/drivers/net/wireless/hostap/hostap_main.c
+===================================================================
+--- linux-2.6.23-gentoo.orig/drivers/net/wireless/hostap/hostap_main.c
++++ linux-2.6.23-gentoo/drivers/net/wireless/hostap/hostap_main.c
+@@ -72,7 +72,7 @@ struct net_device * hostap_add_interface
+ 	dev->mem_start = mdev->mem_start;
+ 	dev->mem_end = mdev->mem_end;
+ 
+-	hostap_setup_dev(dev, local, 0);
++	hostap_setup_dev(dev, local, type);
+ 	dev->destructor = free_netdev;
+ 
+ 	sprintf(dev->name, "%s%s", prefix, name);
+@@ -838,7 +838,7 @@ static void prism2_tx_timeout(struct net
+ 
+ 
+ void hostap_setup_dev(struct net_device *dev, local_info_t *local,
+-		      int main_dev)
++		      int type)
+ {
+ 	struct hostap_interface *iface;
+ 
+@@ -858,15 +858,22 @@ void hostap_setup_dev(struct net_device 
+ 	dev->do_ioctl = hostap_ioctl;
+ 	dev->open = prism2_open;
+ 	dev->stop = prism2_close;
+-	dev->hard_start_xmit = hostap_data_start_xmit;
+ 	dev->set_mac_address = prism2_set_mac_address;
+ 	dev->set_multicast_list = hostap_set_multicast_list;
+ 	dev->change_mtu = prism2_change_mtu;
+ 	dev->tx_timeout = prism2_tx_timeout;
+ 	dev->watchdog_timeo = TX_TIMEOUT;
+ 
++	if (type == HOSTAP_INTERFACE_AP) {
++		dev->hard_start_xmit = hostap_mgmt_start_xmit;
++		dev->type = ARPHRD_IEEE80211;
++		dev->hard_header_parse = hostap_80211_header_parse;
++	} else {
++		dev->hard_start_xmit = hostap_data_start_xmit;
++	}
++
+ 	dev->mtu = local->mtu;
+-	if (!main_dev) {
++	if (type != HOSTAP_INTERFACE_MASTER) {
+ 		/* use main radio device queue */
+ 		dev->tx_queue_len = 0;
+ 	}
+@@ -892,10 +899,6 @@ static int hostap_enable_hostapd(local_i
+ 	if (local->apdev == NULL)
+ 		return -ENOMEM;
+ 
+-	local->apdev->hard_start_xmit = hostap_mgmt_start_xmit;
+-	local->apdev->type = ARPHRD_IEEE80211;
+-	local->apdev->hard_header_parse = hostap_80211_header_parse;
+-
+ 	return 0;
+ }
+ 
+ 
Index: core/base/kernel26/2525_usb-storage-nikon-d200-quirk.patch
diff -u /dev/null core/base/kernel26/2525_usb-storage-nikon-d200-quirk.patch:1.1
--- /dev/null	Sat Oct 27 05:30:59 2007
+++ core/base/kernel26/2525_usb-storage-nikon-d200-quirk.patch	Sat Oct 27 05:30:59 2007
@@ -0,0 +1,37 @@
+From phil at ipom.com Sat Sep 22 20:58:28 2007
+From: Phil Dibowitz <phil at ipom.com>
+Date: Sat, 22 Sep 2007 20:58:12 -0700
+Subject: USB: unusual_devs modification for Nikon D200
+To: Mike <mpagano-kernel at mpagano.com>
+Cc: stern at rowland.harvard.edu,  linux-usb-devel at lists.sourceforge.net,  Greg KH <greg at kroah.com>
+Message-ID: <46F5E454.40903 at ipom.com>
+
+
+Upgrade the unusual_devs.h file to support the Nikon D200
+
+Signed-off-by: Mike Pagano <mpagano-kernel at mpagano.com>
+Signed-off-by: Phil Dibowitz <phil at ipom.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh at suse.de>
+
+
+---
+ drivers/usb/storage/unusual_devs.h |    7 +++++++
+ 1 file changed, 7 insertions(+)
+
+--- a/drivers/usb/storage/unusual_devs.h
++++ b/drivers/usb/storage/unusual_devs.h
+@@ -341,6 +341,13 @@ UNUSUAL_DEV(  0x04b0, 0x040d, 0x0100, 0x
+ 		US_SC_DEVICE, US_PR_DEVICE, NULL,
+ 		US_FL_FIX_CAPACITY),
+ 
++/* Reported by Graber and Mike Pagano <mpagano-kernel at mpagano.com> */
++UNUSUAL_DEV(  0x04b0, 0x040f, 0x0200, 0x0200,
++       "NIKON",
++       "NIKON DSC D200",
++       US_SC_DEVICE, US_PR_DEVICE, NULL,
++       US_FL_FIX_CAPACITY),
++
+ /* Reported by Emil Larsson <emil at swip.net> */
+ UNUSUAL_DEV(  0x04b0, 0x0411, 0x0100, 0x0101,
+ 		"NIKON",
+ 
Index: core/base/kernel26/2530_usb-storage-nikon-d40x-quirk.patch
diff -u /dev/null core/base/kernel26/2530_usb-storage-nikon-d40x-quirk.patch:1.1
--- /dev/null	Sat Oct 27 05:30:59 2007
+++ core/base/kernel26/2530_usb-storage-nikon-d40x-quirk.patch	Sat Oct 27 05:30:59 2007
@@ -0,0 +1,36 @@
+From: Ortwin Glück <odi at odi.ch>
+Date: Thu, 11 Oct 2007 15:29:43 +0000 (+0200)
+Subject: USB: Nikon D40X unusual_devs entry
+X-Git-Tag: v2.6.24-rc1~1395^2~2
+X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Ftorvalds%2Flinux-2.6.git;a=commitdiff_plain;h=d466a9190ff1ceddfee50686e61d63590fc820d9
+
+USB: Nikon D40X unusual_devs entry
+
+Not surprisingly the Nikon D40X DSC needs the same quirks as the D40,
+but it has a separate ID.
+See http://bugs.gentoo.org/show_bug.cgi?id=191431
+
+From: Ortwin Glück <odi at odi.ch>
+Signed-off-by: Greg Kroah-Hartman <gregkh at suse.de>
+---
+
+diff --git a/drivers/usb/storage/unusual_devs.h b/drivers/usb/storage/unusual_devs.h
+index edf9291..9b656ec 100644
+--- a/drivers/usb/storage/unusual_devs.h
++++ b/drivers/usb/storage/unusual_devs.h
+@@ -369,6 +369,13 @@ UNUSUAL_DEV(  0x04b0, 0x0415, 0x0100, 0x0100,
+ 		US_SC_DEVICE, US_PR_DEVICE, NULL,
+ 		US_FL_FIX_CAPACITY),
+ 
++/* Reported by Shan Destromp (shansan at gmail.com) */
++UNUSUAL_DEV(  0x04b0, 0x0417, 0x0100, 0x0100,
++		"NIKON",
++		"NIKON DSC D40X",
++		US_SC_DEVICE, US_PR_DEVICE, NULL,
++		US_FL_FIX_CAPACITY),
++
+ /* BENQ DC5330
+  * Reported by Manuel Fombuena <mfombuena at ya.com> and
+  * Frank Copeland <fjc at thingy.apana.org.au> */
+
+ 
Index: core/base/kernel26/2700_alsa-hdsp-dds-offset.patch
diff -u /dev/null core/base/kernel26/2700_alsa-hdsp-dds-offset.patch:1.1
--- /dev/null	Sat Oct 27 05:30:59 2007
+++ core/base/kernel26/2700_alsa-hdsp-dds-offset.patch	Sat Oct 27 05:30:59 2007
@@ -0,0 +1,29 @@
+From: Takashi Iwai <tiwai at suse.de>
+Date: Tue, 16 Oct 2007 12:26:32 +0000 (+0200)
+Subject: [ALSA] hdsp - Fix zero division
+X-Git-Tag: v2.6.24-rc1~832^2~11
+X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Ftorvalds%2Flinux-2.6.git;a=commitdiff_plain;h=2a3988f6d2c5be9d02463097775d1c66a8290527
+
+[ALSA] hdsp - Fix zero division
+
+Fix zero-division bug in the calculation dds offset.
+
+Signed-off-by: Takashi Iwai <tiwai at suse.de>
+Signed-off-by: Jaroslav Kysela <perex at perex.cz>
+---
+
+diff --git a/sound/pci/rme9652/hdsp.c b/sound/pci/rme9652/hdsp.c
+index 2411f0b..ff26a36 100644
+--- a/sound/pci/rme9652/hdsp.c
++++ b/sound/pci/rme9652/hdsp.c
+@@ -3059,6 +3059,9 @@ static int hdsp_dds_offset(struct hdsp *hdsp)
+ 	unsigned int dds_value = hdsp->dds_value;
+ 	int system_sample_rate = hdsp->system_sample_rate;
+ 
++	if (!dds_value)
++		return 0;
++
+ 	n = DDS_NUMERATOR;
+ 	/*
+ 	 * dds_value = n / rate
+ 
Index: core/base/kernel26/PKGBUILD
diff -u core/base/kernel26/PKGBUILD:1.269 core/base/kernel26/PKGBUILD:1.270
--- core/base/kernel26/PKGBUILD:1.269	Wed Oct 24 06:02:34 2007
+++ core/base/kernel26/PKGBUILD	Sat Oct 27 05:30:59 2007
@@ -1,10 +1,10 @@
-# $Id: PKGBUILD,v 1.269 2007/10/24 10:02:34 tpowa Exp $
+# $Id: PKGBUILD,v 1.270 2007/10/27 09:30:59 tpowa Exp $
 # Maintainer: Tobias Powalowski <tpowa at archlinux.org>
 # Maintainer: Thomas Baechler <thomas at archlinux.org>
 pkgname=kernel26
 _basekernel=2.6.23
 pkgver=2.6.23.1
-pkgrel=5
+pkgrel=6
 pkgdesc="The Linux Kernel and modules"
 arch=(i686 x86_64)
 license=('GPL2')
@@ -44,11 +44,20 @@
 	lhash-2.6.22.patch
 	adjust_current_level_to_closest_available.patch
 	hibernate-saa7134.diff
-	i915-oops.patch)
+	i915-oops.patch
+	sata_sis-2.6.23.patch
+	ipw2x00-2.6.23.patch
+	zd1211rw-oops-2.6.23.patch
+	ide-helper-2.6.23.patch
+	# genpatches from gentoo
+	2405_hostap-netdev-type.patch
+	2525_usb-storage-nikon-d200-quirk.patch
+	2530_usb-storage-nikon-d40x-quirk.patch
+	2700_alsa-hdsp-dds-offset.patch)
 md5sums=('2cc2fd4d521dc5d7cfce0d8a9d1b3472'
          '896c5d4e7fd68d37b8c16e5d2842563b'
-         '832cdbfdf70e191265d1f2c3dc4b7f27'
-         '18febec9f4841da43c517c8948bfa2b1'
+         'de8a8a608d7e38fd2fd5417f9d23272f'
+         '13743d62fa635724d71d89d562e69ebf'
          '5a62bcc7e96601052c7405459b483826'
          'ed6b42fea2f5d27f7eb920746ccc1ebb'
          'a995ec849ea43d3c89d607bbdd1e7d09'
@@ -67,7 +76,15 @@
          'b7e5e3ad9fae40eba0f1e91f49c31627'
          '5b40baab7fcd10d244308f9d1afda75c'
          '19d8ed2579c18627ed4de1fd037a6652'
-         'a94660bbe1d5986a030a7af922fce72c')
+         'a94660bbe1d5986a030a7af922fce72c'
+         '36941e21388ecac2e79d3d1ab355402b'
+         '7b44d23a25698ccdfe2303ff68d96b04'
+         'cbba32ffe3ee78685dc7bf8840a65a4a'
+         '5b64cd1759dc705bb4d325998d86d8fd'
+         'd03807b1d61028a2d048152961b032a5'
+         '6712a865d8913a92d63a5d3ca774eb22'
+         'c21566dfd3c768976e118ecdff2ed96b'
+         'da6ac4cc345e61cfa399f29086bc7201')
 
 build() {
   [ "${CARCH}" = "i686" ]   && KARCH=i386
@@ -100,6 +117,20 @@
   patch -Np0 -i ../hibernate-saa7134.diff || return 1
   # fix i915 oops
   patch -Np1 -i ../i915-oops.patch || return 1
+  # fix sata_sis issues #8435
+  patch -Np1 -i ../sata_sis-2.6.23.patch || return 1
+  # fix zd1211rw oops
+  patch -Np1 -i ../zd1211rw-oops-2.6.23.patch || return 1
+  # add ipw 2x00 fixes
+  patch -Np1 -i ../ipw2x00-2.6.23.patch || return 1
+  # add ide helper which will appear in 2.6.23.2
+  patch -Np1 -i ../ide-helper-2.6.23.patch || return 1
+  #adding some genpatches from 
+  #http://sources.gentoo.org/viewcvs.py/linux-patches/genpatches-2.6/trunk/2.6.23/
+  patch -Np1 -i ../2405_hostap-netdev-type.patch || return 1
+  patch -Np1 -i ../2525_usb-storage-nikon-d200-quirk.patch || return 1
+  patch -Np1 -i ../2530_usb-storage-nikon-d40x-quirk.patch || return 1
+  patch -Np1 -i ../2700_alsa-hdsp-dds-offset.patch || return 1
   # add sqashfs
   patch -Np1 -i ../squashfs3.2-patch || return 1
   # add unionfs
Index: core/base/kernel26/config
diff -u core/base/kernel26/config:1.107 core/base/kernel26/config:1.108
--- core/base/kernel26/config:1.107	Wed Oct 24 06:02:34 2007
+++ core/base/kernel26/config	Sat Oct 27 05:30:59 2007
@@ -68,6 +68,7 @@
 CONFIG_EVENTFD=y
 CONFIG_SHMEM=y
 CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_SLUB_DEBUG=y
 #CONFIG_SLAB is not set
 CONFIG_SLUB=y
 # CONFIG_SLOB is not set
@@ -864,7 +865,76 @@
 # CONFIG_DEBUG_DEVRES is not set
 # CONFIG_SYS_HYPERVISOR is not set
 CONFIG_CONNECTOR=m
-# CONFIG_MTD is not set
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=m
+# CONFIG_MTD_DEBUG is not set
+# CONFIG_MTD_CONCAT is not set
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=m
+CONFIG_MTD_BLKDEVS=m
+CONFIG_MTD_BLOCK=m
+# CONFIG_MTD_BLOCK_RO is not set
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+# CONFIG_MTD_CFI is not set
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+CONFIG_MTD_RAM=m
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_TS5500 is not set
+CONFIG_MTD_PLATRAM=m
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_PMC551 is not set
+# CONFIG_MTD_DATAFLASH is not set
+# CONFIG_MTD_M25P80 is not set
+CONFIG_MTD_SLRAM=m
+CONFIG_MTD_PHRAM=m
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+# CONFIG_MTD_NAND is not set
+# CONFIG_MTD_ONENAND is not set
+#
+# UBI - Unsorted block images
+#
+# CONFIG_MTD_UBI is not set
 CONFIG_PARPORT=m
 CONFIG_PARPORT_PC=m
 CONFIG_PARPORT_SERIAL=m
@@ -3144,6 +3214,15 @@
 # CONFIG_BEFS_DEBUG is not set
 # CONFIG_BFS_FS is not set
 # CONFIG_EFS_FS is not set
+CONFIG_JFFS2_FS=m
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+# CONFIG_JFFS2_SUMMARY is not set
+# CONFIG_JFFS2_FS_XATTR is not set
+# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
+CONFIG_JFFS2_ZLIB=y
+CONFIG_JFFS2_RTIME=y+
+# CONFIG_JFFS2_RUBIN is not set
 CONFIG_CRAMFS=m
 CONFIG_SQUASHFS=m
 # CONFIG_SQUASHFS_EMBEDDED is not set
@@ -3298,7 +3377,7 @@
 # CONFIG_SCHED_DEBUG is not set
 # CONFIG_SCHEDSTATS is not set
 # CONFIG_TIMER_STATS is not set
-# CONFIG_DEBUG_SLAB is not set
+# CONFIG_SLUB_DEBUG_ON is not set
 # CONFIG_DEBUG_PREEMPT is not set
 # CONFIG_DEBUG_RT_MUTEXES is not set
 # CONFIG_RT_MUTEX_TESTER is not set
Index: core/base/kernel26/config.x86_64
diff -u core/base/kernel26/config.x86_64:1.36 core/base/kernel26/config.x86_64:1.37
--- core/base/kernel26/config.x86_64:1.36	Wed Oct 24 06:02:34 2007
+++ core/base/kernel26/config.x86_64	Sat Oct 27 05:30:59 2007
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
 # Linux kernel version: 2.6.23
-# Wed Oct 10 08:00:20 2007
+# Sat Oct 27 09:26:04 2007
 
 #
 CONFIG_X86_64=y
@@ -76,6 +76,7 @@
 CONFIG_EVENTFD=y
 CONFIG_SHMEM=y
 CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_SLUB_DEBUG=y
 # CONFIG_SLAB is not set
 CONFIG_SLUB=y
 # CONFIG_SLOB is not set
@@ -775,7 +776,76 @@
 # CONFIG_DEBUG_DEVRES is not set
 # CONFIG_SYS_HYPERVISOR is not set
 CONFIG_CONNECTOR=m
-# CONFIG_MTD is not set
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=m
+# CONFIG_MTD_DEBUG is not set
+# CONFIG_MTD_CONCAT is not set
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=m
+CONFIG_MTD_BLKDEVS=m
+CONFIG_MTD_BLOCK=m
+# CONFIG_MTD_BLOCK_RO is not set
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+# CONFIG_MTD_CFI is not set
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+CONFIG_MTD_RAM=m
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_TS5500 is not set
+CONFIG_MTD_PLATRAM=m
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_PMC551 is not set
+# CONFIG_MTD_DATAFLASH is not set
+# CONFIG_MTD_M25P80 is not set
+CONFIG_MTD_SLRAM=m
+CONFIG_MTD_PHRAM=m
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+# CONFIG_MTD_NAND is not set
+# CONFIG_MTD_ONENAND is not set
+#
+# UBI - Unsorted block images
+#
+# CONFIG_MTD_UBI is not set
 CONFIG_PARPORT=m
 CONFIG_PARPORT_PC=m
 CONFIG_PARPORT_SERIAL=m
@@ -2884,6 +2954,15 @@
 # CONFIG_BEFS_DEBUG is not set
 # CONFIG_BFS_FS is not set
 # CONFIG_EFS_FS is not set
+CONFIG_JFFS2_FS=m
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+# CONFIG_JFFS2_SUMMARY is not set
+# CONFIG_JFFS2_FS_XATTR is not set
+# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
+CONFIG_JFFS2_ZLIB=y
+CONFIG_JFFS2_RTIME=y
+# CONFIG_JFFS2_RUBIN is not set
 CONFIG_CRAMFS=m
 # CONFIG_VXFS_FS is not set
 # CONFIG_HPFS_FS is not set
@@ -3041,7 +3120,7 @@
 # CONFIG_SCHED_DEBUG is not set
 # CONFIG_SCHEDSTATS is not set
 # CONFIG_TIMER_STATS is not set
-# CONFIG_DEBUG_SLAB is not set
+# CONFIG_SLUB_DEBUG_ON is not set
 # CONFIG_DEBUG_PREEMPT is not set
 # CONFIG_DEBUG_RT_MUTEXES is not set
 # CONFIG_RT_MUTEX_TESTER is not set
Index: core/base/kernel26/ide-helper-2.6.23.patch
diff -u /dev/null core/base/kernel26/ide-helper-2.6.23.patch:1.1
--- /dev/null	Sat Oct 27 05:30:59 2007
+++ core/base/kernel26/ide-helper-2.6.23.patch	Sat Oct 27 05:30:59 2007
@@ -0,0 +1,101 @@
+From: Benjamin Herrenschmidt <benh at kernel.crashing.org>
+Date: Thu, 18 Oct 2007 22:30:05 +0000 (+0200)
+Subject: ide: Add ide_get_paired_drive() helper
+X-Git-Tag: v2.6.24-rc1~287^2~36
+X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Fbart%2Fide-2.6.git;a=commitdiff_plain;h=1b678347121001c3c230c6eccfdf9f65c3ec1a4e
+
+ide: Add ide_get_paired_drive() helper
+
+This adds a helper to get to the "other" drive on a pair connected
+to a given hwif.
+
+Signed-off-by: Benjamin Herrenschmidt <benh at kernel.crashing.org>
+Cc: Andrew Morton <akpm at osdl.org>
+Acked-by: Sergei Shtylyov <sshtylyov at ru.mvista.com>
+Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier at gmail.com>
+---
+
+diff --git a/include/linux/ide.h b/include/linux/ide.h
+index e39ee2f..69dbe7d 100644
+--- a/include/linux/ide.h
++++ b/include/linux/ide.h
+@@ -1454,4 +1454,11 @@ static inline int hwif_to_node(ide_hwif_t *hwif)
+ 	return dev ? pcibus_to_node(dev->bus) : -1;
+ }
+ 
++static inline ide_drive_t *ide_get_paired_drive(ide_drive_t *drive)
++{
++	ide_hwif_t *hwif	= HWIF(drive);
++
++	return &hwif->drives[(drive->dn ^ 1) & 1];
++}
++
+ #endif /* _IDE_H */
+From: Benjamin Herrenschmidt <benh at kernel.crashing.org>
+Date: Thu, 18 Oct 2007 22:30:05 +0000 (+0200)
+Subject: ide: Fix cs5535 driver accessing beyond array boundary
+X-Git-Tag: v2.6.24-rc1~287^2~34
+X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Fbart%2Fide-2.6.git;a=commitdiff_plain;h=15d8061bf02aa299b2447f7a22fd18b4a503ea9d
+
+ide: Fix cs5535 driver accessing beyond array boundary
+
+The cs5535 uses an incorrect construct to access the other drive of a pair,
+causing it to access beyond an array boundary on the secondary interface.
+
+This fixes it by using the new ide_get_paired_drive() helper instead.
+
+Bart: patch description fixes
+
+Signed-off-by: Benjamin Herrenschmidt <benh at kernel.crashing.org>
+Cc: Andrew Morton <akpm at osdl.org>
+Acked-by: Sergei Shtylyov <sshtylyov at ru.mvista.com>
+Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier at gmail.com>
+---
+
+diff --git a/drivers/ide/pci/cs5535.c b/drivers/ide/pci/cs5535.c
+index e4891a1..c141b73 100644
+--- a/drivers/ide/pci/cs5535.c
++++ b/drivers/ide/pci/cs5535.c
+@@ -84,7 +84,7 @@ static void cs5535_set_speed(ide_drive_t *drive, const u8 speed)
+ 
+ 	/* Set the PIO timings */
+ 	if ((speed & XFER_MODE) == XFER_PIO) {
+-		ide_drive_t *pair = &drive->hwif->drives[drive->dn ^ 1];
++		ide_drive_t *pair = ide_get_paired_drive(drive);
+ 		u8 cmd, pioa;
+ 
+ 		cmd = pioa = speed - XFER_PIO_0;
+From: Benjamin Herrenschmidt <benh at kernel.crashing.org>
+Date: Thu, 18 Oct 2007 22:30:05 +0000 (+0200)
+Subject: ide: Fix siimage driver accessing beyond array boundary
+X-Git-Tag: v2.6.24-rc1~287^2~35
+X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Fbart%2Fide-2.6.git;a=commitdiff_plain;h=a87a87ccdc541e0a0cc8c7d01a365be8d9153a7b
+
+ide: Fix siimage driver accessing beyond array boundary
+
+The siimage uses an incorrect construct to access the other drive of a pair,
+causing it to access beyond an array boundary on the secondary interface.
+
+This fixes it by using the new ide_get_paired_drive() helper instead.
+
+Bart: patch description fixes
+
+Signed-off-by: Benjamin Herrenschmidt <benh at kernel.crashing.org>
+Cc: Andrew Morton <akpm at osdl.org>
+Acked-by: Sergei Shtylyov <sshtylyov at ru.mvista.com>
+Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier at gmail.com>
+---
+
+diff --git a/drivers/ide/pci/siimage.c b/drivers/ide/pci/siimage.c
+index 85d0afd..8254260 100644
+--- a/drivers/ide/pci/siimage.c
++++ b/drivers/ide/pci/siimage.c
+@@ -180,7 +180,7 @@ static void sil_set_pio_mode(ide_drive_t *drive, u8 pio)
+ 	const u16 data_speed[]	= { 0x328a, 0x2283, 0x1104, 0x10c3, 0x10c1 };
+ 
+ 	ide_hwif_t *hwif	= HWIF(drive);
+-	ide_drive_t *pair	= &hwif->drives[drive->dn ^ 1];
++	ide_drive_t *pair	= ide_get_paired_drive(drive);
+ 	u32 speedt		= 0;
+ 	u16 speedp		= 0;
+ 	unsigned long addr	= siimage_seldev(drive, 0x04);
Index: core/base/kernel26/ipw2x00-2.6.23.patch
diff -u /dev/null core/base/kernel26/ipw2x00-2.6.23.patch:1.1
--- /dev/null	Sat Oct 27 05:30:59 2007
+++ core/base/kernel26/ipw2x00-2.6.23.patch	Sat Oct 27 05:30:59 2007
@@ -0,0 +1,276 @@
+From: Dan Williams <dcbw at redhat.com>
+Date: Tue, 9 Oct 2007 17:55:24 +0000 (-0400)
+Subject: [PATCH] ipw2200: batch non-user-requested scan result notifications
+X-Git-Tag: v2.6.24-rc1~1454^2~117
+X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Flinville%2Fwireless-legacy.git;a=commitdiff_plain;h=0b5316769774d1dc2fdd702e095f9e6992af269a
+
+[PATCH] ipw2200: batch non-user-requested scan result notifications
+
+ipw2200 makes extensive use of background scanning when unassociated or
+down.  Unfortunately, the firmware sends scan completed events many
+times per second, which the driver pushes directly up to userspace.
+This needlessly wakes up processes listening for wireless events many
+times per second.  Batch together scan completed events for
+non-user-requested scans and send them up to userspace every 4 seconds.
+Scan completed events resulting from an SIOCSIWSCAN call are pushed up
+without delay.
+
+Signed-off-by: Dan Williams <dcbw at redhat.com>
+Signed-off-by: John W. Linville <linville at tuxdriver.com>
+---
+
+diff --git a/drivers/net/wireless/ipw2200.c b/drivers/net/wireless/ipw2200.c
+index 2119a79..feb8fcb 100644
+--- a/drivers/net/wireless/ipw2200.c
++++ b/drivers/net/wireless/ipw2200.c
+@@ -1740,8 +1740,10 @@ static int ipw_radio_kill_sw(struct ipw_priv *priv, int disable_radio)
+ 	if (disable_radio) {
+ 		priv->status |= STATUS_RF_KILL_SW;
+ 
+-		if (priv->workqueue)
++		if (priv->workqueue) {
+ 			cancel_delayed_work(&priv->request_scan);
++			cancel_delayed_work(&priv->scan_event);
++		}
+ 		queue_work(priv->workqueue, &priv->down);
+ 	} else {
+ 		priv->status &= ~STATUS_RF_KILL_SW;
+@@ -1992,6 +1994,7 @@ static void ipw_irq_tasklet(struct ipw_priv *priv)
+ 		wake_up_interruptible(&priv->wait_command_queue);
+ 		priv->status &= ~(STATUS_ASSOCIATED | STATUS_ASSOCIATING);
+ 		cancel_delayed_work(&priv->request_scan);
++		cancel_delayed_work(&priv->scan_event);
+ 		schedule_work(&priv->link_down);
+ 		queue_delayed_work(priv->workqueue, &priv->rf_kill, 2 * HZ);
+ 		handled |= IPW_INTA_BIT_RF_KILL_DONE;
+@@ -4343,6 +4346,37 @@ static void ipw_handle_missed_beacon(struct ipw_priv *priv,
+ 	IPW_DEBUG_NOTIF("Missed beacon: %d\n", missed_count);
+ }
+ 
++static void ipw_scan_event(struct work_struct *work)
++{
++	union iwreq_data wrqu;
++
++	struct ipw_priv *priv =
++		container_of(work, struct ipw_priv, scan_event.work);
++
++	wrqu.data.length = 0;
++	wrqu.data.flags = 0;
++	wireless_send_event(priv->net_dev, SIOCGIWSCAN, &wrqu, NULL);
++}
++
++static void handle_scan_event(struct ipw_priv *priv)
++{
++	/* Only userspace-requested scan completion events go out immediately */
++	if (!priv->user_requested_scan) {
++		if (!delayed_work_pending(&priv->scan_event))
++			queue_delayed_work(priv->workqueue, &priv->scan_event,
++					 round_jiffies(msecs_to_jiffies(4000)));
++	} else {
++		union iwreq_data wrqu;
++
++		priv->user_requested_scan = 0;
++		cancel_delayed_work(&priv->scan_event);
++
++		wrqu.data.length = 0;
++		wrqu.data.flags = 0;
++		wireless_send_event(priv->net_dev, SIOCGIWSCAN, &wrqu, NULL);
++	}
++}
++
+ /**
+  * Handle host notification packet.
+  * Called from interrupt routine
+@@ -4705,14 +4739,8 @@ static void ipw_rx_notification(struct ipw_priv *priv,
+ 			 * on how the scan was initiated. User space can just
+ 			 * sync on periodic scan to get fresh data...
+ 			 * Jean II */
+-			if (x->status == SCAN_COMPLETED_STATUS_COMPLETE) {
+-				union iwreq_data wrqu;
+-
+-				wrqu.data.length = 0;
+-				wrqu.data.flags = 0;
+-				wireless_send_event(priv->net_dev, SIOCGIWSCAN,
+-						    &wrqu, NULL);
+-			}
++			if (x->status == SCAN_COMPLETED_STATUS_COMPLETE)
++				handle_scan_event(priv);
+ 			break;
+ 		}
+ 
+@@ -9490,6 +9518,10 @@ static int ipw_wx_set_scan(struct net_device *dev,
+ 	struct ipw_priv *priv = ieee80211_priv(dev);
+ 	struct iw_scan_req *req = (struct iw_scan_req *)extra;
+ 
++	mutex_lock(&priv->mutex);
++	priv->user_requested_scan = 1;
++	mutex_unlock(&priv->mutex);
++
+ 	if (wrqu->data.length == sizeof(struct iw_scan_req)) {
+ 		if (wrqu->data.flags & IW_SCAN_THIS_ESSID) {
+ 			ipw_request_direct_scan(priv, req->essid,
+@@ -10668,6 +10700,7 @@ static void ipw_link_up(struct ipw_priv *priv)
+ 	}
+ 
+ 	cancel_delayed_work(&priv->request_scan);
++	cancel_delayed_work(&priv->scan_event);
+ 	ipw_reset_stats(priv);
+ 	/* Ensure the rate is updated immediately */
+ 	priv->last_rate = ipw_get_current_rate(priv);
+@@ -10705,7 +10738,8 @@ static void ipw_link_down(struct ipw_priv *priv)
+ 	if (!(priv->status & STATUS_EXIT_PENDING)) {
+ 		/* Queue up another scan... */
+ 		queue_delayed_work(priv->workqueue, &priv->request_scan, 0);
+-	}
++	} else
++		cancel_delayed_work(&priv->scan_event);
+ }
+ 
+ static void ipw_bg_link_down(struct work_struct *work)
+@@ -10735,6 +10769,7 @@ static int ipw_setup_deferred_work(struct ipw_priv *priv)
+ 	INIT_WORK(&priv->up, ipw_bg_up);
+ 	INIT_WORK(&priv->down, ipw_bg_down);
+ 	INIT_DELAYED_WORK(&priv->request_scan, ipw_request_scan);
++	INIT_DELAYED_WORK(&priv->scan_event, ipw_scan_event);
+ 	INIT_WORK(&priv->request_passive_scan, ipw_request_passive_scan);
+ 	INIT_DELAYED_WORK(&priv->gather_stats, ipw_bg_gather_stats);
+ 	INIT_WORK(&priv->abort_scan, ipw_bg_abort_scan);
+@@ -11766,6 +11801,7 @@ static void ipw_pci_remove(struct pci_dev *pdev)
+ 	cancel_delayed_work(&priv->adhoc_check);
+ 	cancel_delayed_work(&priv->gather_stats);
+ 	cancel_delayed_work(&priv->request_scan);
++	cancel_delayed_work(&priv->scan_event);
+ 	cancel_delayed_work(&priv->rf_kill);
+ 	cancel_delayed_work(&priv->scan_check);
+ 	destroy_workqueue(priv->workqueue);
+diff --git a/drivers/net/wireless/ipw2200.h b/drivers/net/wireless/ipw2200.h
+index 9c973b9..bec8e37 100644
+--- a/drivers/net/wireless/ipw2200.h
++++ b/drivers/net/wireless/ipw2200.h
+@@ -1287,6 +1287,8 @@ struct ipw_priv {
+ 
+ 	struct iw_public_data wireless_data;
+ 
++	int user_requested_scan;
++
+ 	struct workqueue_struct *workqueue;
+ 
+ 	struct delayed_work adhoc_check;
+@@ -1295,6 +1297,7 @@ struct ipw_priv {
+ 	struct work_struct system_config;
+ 	struct work_struct rx_replenish;
+ 	struct delayed_work request_scan;
++	struct delayed_work scan_event;
+   	struct work_struct request_passive_scan;
+ 	struct work_struct adapter_restart;
+ 	struct delayed_work rf_kill;
+ 
+From: Dan Williams <dcbw at redhat.com>
+Date: Wed, 10 Oct 2007 16:28:07 +0000 (-0400)
+Subject: [PATCH] ipw2100: send WEXT scan events
+X-Git-Tag: v2.6.24-rc1~125^2^2~13
+X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Flinville%2Fwireless-2.6.git;a=commitdiff_plain;h=d20c678a450a25c1c12925f60c1b4cc040acc17d
+
+[PATCH] ipw2100: send WEXT scan events
+
+ipw2100 wasn't sending WEXT scan events at all on scan completion.  And
+like ipw2200, the driver aggressively auto-scans, requiring
+non-user-requested scan events to be batched together and sent at
+specific intervals instead of many times per seconds.
+
+Signed-off-by: Dan Williams <dcbw at redhat.com>
+Signed-off-by: John W. Linville <linville at tuxdriver.com>
+---
+
+diff --git a/drivers/net/wireless/ipw2100.c b/drivers/net/wireless/ipw2100.c
+index 2d46a16..2fa8eed 100644
+--- a/drivers/net/wireless/ipw2100.c
++++ b/drivers/net/wireless/ipw2100.c
+@@ -2105,12 +2105,46 @@ static void isr_indicate_rf_kill(struct ipw2100_priv *priv, u32 status)
+ 	queue_delayed_work(priv->workqueue, &priv->rf_kill, round_jiffies(HZ));
+ }
+ 
++static void send_scan_event(void *data)
++{
++	struct ipw2100_priv *priv = data;
++	union iwreq_data wrqu;
++
++	wrqu.data.length = 0;
++	wrqu.data.flags = 0;
++	wireless_send_event(priv->net_dev, SIOCGIWSCAN, &wrqu, NULL);
++}
++
++static void ipw2100_scan_event_later(struct work_struct *work)
++{
++	send_scan_event(container_of(work, struct ipw2100_priv,
++					scan_event_later.work));
++}
++
++static void ipw2100_scan_event_now(struct work_struct *work)
++{
++	send_scan_event(container_of(work, struct ipw2100_priv,
++					scan_event_now));
++}
++
+ static void isr_scan_complete(struct ipw2100_priv *priv, u32 status)
+ {
+ 	IPW_DEBUG_SCAN("scan complete\n");
+ 	/* Age the scan results... */
+ 	priv->ieee->scans++;
+ 	priv->status &= ~STATUS_SCANNING;
++
++	/* Only userspace-requested scan completion events go out immediately */
++	if (!priv->user_requested_scan) {
++		if (!delayed_work_pending(&priv->scan_event_later))
++			queue_delayed_work(priv->workqueue,
++					&priv->scan_event_later,
++					round_jiffies(msecs_to_jiffies(4000)));
++	} else {
++		priv->user_requested_scan = 0;
++		cancel_delayed_work(&priv->scan_event_later);
++		queue_work(priv->workqueue, &priv->scan_event_now);
++	}
+ }
+ 
+ #ifdef CONFIG_IPW2100_DEBUG
+@@ -4378,6 +4412,7 @@ static void ipw2100_kill_workqueue(struct ipw2100_priv *priv)
+ 		cancel_delayed_work(&priv->wx_event_work);
+ 		cancel_delayed_work(&priv->hang_check);
+ 		cancel_delayed_work(&priv->rf_kill);
++		cancel_delayed_work(&priv->scan_event_later);
+ 		destroy_workqueue(priv->workqueue);
+ 		priv->workqueue = NULL;
+ 	}
+@@ -6121,6 +6156,8 @@ static struct net_device *ipw2100_alloc_device(struct pci_dev *pci_dev,
+ 	INIT_DELAYED_WORK(&priv->wx_event_work, ipw2100_wx_event_work);
+ 	INIT_DELAYED_WORK(&priv->hang_check, ipw2100_hang_check);
+ 	INIT_DELAYED_WORK(&priv->rf_kill, ipw2100_rf_kill);
++	INIT_WORK(&priv->scan_event_now, ipw2100_scan_event_now);
++	INIT_DELAYED_WORK(&priv->scan_event_later, ipw2100_scan_event_later);
+ 
+ 	tasklet_init(&priv->irq_tasklet, (void (*)(unsigned long))
+ 		     ipw2100_irq_tasklet, (unsigned long)priv);
+@@ -7425,6 +7462,8 @@ static int ipw2100_wx_set_scan(struct net_device *dev,
+ 	}
+ 
+ 	IPW_DEBUG_WX("Initiating scan...\n");
++
++	priv->user_requested_scan = 1;
+ 	if (ipw2100_set_scan_options(priv) || ipw2100_start_scan(priv)) {
+ 		IPW_DEBUG_WX("Start scan failed.\n");
+ 
+diff --git a/drivers/net/wireless/ipw2100.h b/drivers/net/wireless/ipw2100.h
+index de7d384..1ee3348 100644
+--- a/drivers/net/wireless/ipw2100.h
++++ b/drivers/net/wireless/ipw2100.h
+@@ -588,6 +588,10 @@ struct ipw2100_priv {
+ 	struct delayed_work wx_event_work;
+ 	struct delayed_work hang_check;
+ 	struct delayed_work rf_kill;
++	struct work_struct scan_event_now;
++	struct delayed_work scan_event_later;
++
++	int user_requested_scan;
+ 
+ 	u32 interrupts;
+ 	int tx_interrupts;
Index: core/base/kernel26/zd1211rw-oops-2.6.23.patch
diff -u /dev/null core/base/kernel26/zd1211rw-oops-2.6.23.patch:1.1
--- /dev/null	Sat Oct 27 05:30:59 2007
+++ core/base/kernel26/zd1211rw-oops-2.6.23.patch	Sat Oct 27 05:30:59 2007
@@ -0,0 +1,41 @@
+From: Marc Pignat <marc.pignat at hevs.ch>
+Date: Mon, 15 Oct 2007 06:51:52 +0000 (+0200)
+Subject: [PATCH] zd1211rw, fix oops when ejecting install media
+X-Git-Tag: v2.6.24-rc1~125^2^2~6
+X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Flinville%2Fwireless-legacy.git;a=commitdiff_plain;h=e0579d576cb894a4cf3c5af04fbf38e8c1281738
+
+[PATCH] zd1211rw, fix oops when ejecting install media
+
+The disconnect function can dereference the net_device structure when it
+is never allocated. This is the case when ejecting the device installer.
+
+Signed-off-by: Marc Pignat <marc.pignat at hevs.ch>
+Acked-by: Daniel Drake <dsd at gentoo.org>
+Signed-off-by: John W. Linville <linville at tuxdriver.com>
+---
+
+diff --git a/drivers/net/wireless/zd1211rw/zd_usb.c b/drivers/net/wireless/zd1211rw/zd_usb.c
+index b0684f9..c755b69 100644
+--- a/drivers/net/wireless/zd1211rw/zd_usb.c
++++ b/drivers/net/wireless/zd1211rw/zd_usb.c
+@@ -1044,14 +1044,17 @@ error:
+ static void disconnect(struct usb_interface *intf)
+ {
+ 	struct net_device *netdev = zd_intf_to_netdev(intf);
+-	struct zd_mac *mac = zd_netdev_mac(netdev);
+-	struct zd_usb *usb = &mac->chip.usb;
++	struct zd_mac *mac;
++	struct zd_usb *usb;
+ 
+ 	/* Either something really bad happened, or we're just dealing with
+ 	 * a DEVICE_INSTALLER. */
+ 	if (netdev == NULL)
+ 		return;
+ 
++	mac = zd_netdev_mac(netdev);
++	usb = &mac->chip.usb;
++
+ 	dev_dbg_f(zd_usb_dev(usb), "\n");
+ 
+ 	zd_netdev_disconnect(netdev);
+ 




More information about the arch-commits mailing list