[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