--- /dev/null
+From stable-bounces@linux.kernel.org Wed May 14 19:45:26 2008
+From: Tiger Yang <tiger.yang@oracle.com>
+Date: Thu, 15 May 2008 02:45:18 GMT
+Subject: ext3/4: fix uninitialized bs in ext3/4_xattr_set_handle()
+To: jejb@kernel.org, stable@kernel.org
+Message-ID: <200805150245.m4F2jI8E020348@hera.kernel.org>
+
+From: Tiger Yang <tiger.yang@oracle.com>
+
+commit 7e01c8e5420b6c7f9d85d34c15d8c7a15c9fc720 upstream
+
+This fix the uninitialized bs when we try to replace a xattr entry in
+ibody with the new value which require more than free space.
+
+This situation only happens we format ext3/4 with inode size more than 128 and
+we have put xattr entries both in ibody and block. The consequences about
+this bug is we will lost the xattr block which pointed by i_file_acl with all
+xattr entires in it. We will alloc a new xattr block and put that large value
+entry in it. The old xattr block will become orphan block.
+
+Signed-off-by: Tiger Yang <tiger.yang@oracle.com>
+Cc: <linux-ext4@vger.kernel.org>
+Cc: Andreas Gruenbacher <agruen@suse.de>
+Acked-by: Andreas Dilger <adilger@sun.com>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ fs/ext3/xattr.c | 5 +++++
+ fs/ext4/xattr.c | 5 +++++
+ 2 files changed, 10 insertions(+)
+
+--- a/fs/ext3/xattr.c
++++ b/fs/ext3/xattr.c
+@@ -1000,6 +1000,11 @@ ext3_xattr_set_handle(handle_t *handle,
+ i.value = NULL;
+ error = ext3_xattr_block_set(handle, inode, &i, &bs);
+ } else if (error == -ENOSPC) {
++ if (EXT3_I(inode)->i_file_acl && !bs.s.base) {
++ error = ext3_xattr_block_find(inode, &i, &bs);
++ if (error)
++ goto cleanup;
++ }
+ error = ext3_xattr_block_set(handle, inode, &i, &bs);
+ if (error)
+ goto cleanup;
+--- a/fs/ext4/xattr.c
++++ b/fs/ext4/xattr.c
+@@ -1011,6 +1011,11 @@ ext4_xattr_set_handle(handle_t *handle,
+ i.value = NULL;
+ error = ext4_xattr_block_set(handle, inode, &i, &bs);
+ } else if (error == -ENOSPC) {
++ if (EXT4_I(inode)->i_file_acl && !bs.s.base) {
++ error = ext4_xattr_block_find(inode, &i, &bs);
++ if (error)
++ goto cleanup;
++ }
+ error = ext4_xattr_block_set(handle, inode, &i, &bs);
+ if (error)
+ goto cleanup;
--- /dev/null
+From stable-bounces@linux.kernel.org Thu May 15 06:15:27 2008
+From: Tejun Heo <htejun@gmail.com>
+Date: Thu, 15 May 2008 22:14:57 +0900
+Subject: libata: force hardreset if link is in powersave mode
+To: Jeff Garzik <jeff@garzik.org>, IDE/ATA development list <linux-ide@vger.kernel.org>, stable@kernel.org
+Cc: matthieu.castet@parrot.com
+Message-ID: <482C3751.8030206@gmail.com>
+
+From: Tejun Heo <htejun@gmail.com>
+
+Inhibiting link PM mode doesn't bring the link back online if it's
+already in powersave mode. If SRST is used in these cases, libata EH
+thinks that the link is offline and fails detection. Force hardreset
+if link is in powersave mode.
+
+Signed-off-by: Tejun Heo <htejun@gmail.com>
+Cc: Jeff Garzik <jeff@garzik.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/ata/libata-core.c | 12 ++++++++++++
+ 1 file changed, 12 insertions(+)
+
+--- a/drivers/ata/libata-core.c
++++ b/drivers/ata/libata-core.c
+@@ -3947,6 +3947,7 @@ int ata_std_prereset(struct ata_link *li
+ struct ata_port *ap = link->ap;
+ struct ata_eh_context *ehc = &link->eh_context;
+ const unsigned long *timing = sata_ehc_deb_timing(ehc);
++ u32 sstatus;
+ int rc;
+
+ /* handle link resume */
+@@ -3960,6 +3961,17 @@ int ata_std_prereset(struct ata_link *li
+ if (ap->flags & ATA_FLAG_PMP)
+ ehc->i.action |= ATA_EH_HARDRESET;
+
++ /* if link powersave is on, force hardreset */
++ if (sata_scr_read(link, SCR_STATUS, &sstatus) == 0) {
++ u8 ipm = sstatus >> 8;
++
++ if (ipm == 2 || ipm == 6) {
++ ata_link_printk(link, KERN_INFO, "link in powersave "
++ "mode (ipm=%d), forcing hardreset\n", ipm);
++ ehc->i.action |= ATA_EH_HARDRESET;
++ }
++ }
++
+ /* if we're about to do hardreset, nothing more to do */
+ if (ehc->i.action & ATA_EH_HARDRESET)
+ return 0;
--- /dev/null
+From stable-bounces@linux.kernel.org Wed May 14 19:45:26 2008
+From: Heiko Carstens <heiko.carstens@de.ibm.com>
+Date: Thu, 15 May 2008 02:45:16 GMT
+Subject: memory_hotplug: always initialize pageblock bitmap
+To: jejb@kernel.org, stable@kernel.org
+Message-ID: <200805150245.m4F2jGvS020301@hera.kernel.org>
+
+From: Heiko Carstens <heiko.carstens@de.ibm.com>
+
+commit 76cdd58e558669366adfaded436fda01b30cce3e upstream
+
+Trying to online a new memory section that was added via memory hotplug
+sometimes results in crashes when the new pages are added via __free_page.
+ Reason for that is that the pageblock bitmap isn't initialized and hence
+contains random stuff. That means that get_pageblock_migratetype()
+returns also random stuff and therefore
+
+ list_add(&page->lru,
+ &zone->free_area[order].free_list[migratetype]);
+
+in __free_one_page() tries to do a list_add to something that isn't even
+necessarily a list.
+
+This happens since 86051ca5eaf5e560113ec7673462804c54284456 ("mm: fix
+usemap initialization") which makes sure that the pageblock bitmap gets
+only initialized for pages present in a zone. Unfortunately for hot-added
+memory the zones "grow" after the memmap and the pageblock memmap have
+been initialized. Which means that the new pages have an unitialized
+bitmap. To solve this the calls to grow_zone_span() and grow_pgdat_span()
+are moved to __add_zone() just before the initialization happens.
+
+The patch also moves the two functions since __add_zone() is the only
+caller and I didn't want to add a forward declaration.
+
+Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
+Cc: Andy Whitcroft <apw@shadowen.org>
+Cc: Dave Hansen <haveblue@us.ibm.com>
+Cc: Gerald Schaefer <gerald.schaefer@de.ibm.com>
+Cc: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
+Cc: Yasunori Goto <y-goto@jp.fujitsu.com>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ mm/memory_hotplug.c | 78 ++++++++++++++++++++++++++--------------------------
+ mm/page_alloc.c | 3 --
+ 2 files changed, 40 insertions(+), 41 deletions(-)
+
+--- a/mm/memory_hotplug.c
++++ b/mm/memory_hotplug.c
+@@ -58,23 +58,59 @@ static void release_memory_resource(stru
+ return;
+ }
+
+-
+ #ifdef CONFIG_MEMORY_HOTPLUG_SPARSE
++static void grow_zone_span(struct zone *zone, unsigned long start_pfn,
++ unsigned long end_pfn)
++{
++ unsigned long old_zone_end_pfn;
++
++ zone_span_writelock(zone);
++
++ old_zone_end_pfn = zone->zone_start_pfn + zone->spanned_pages;
++ if (start_pfn < zone->zone_start_pfn)
++ zone->zone_start_pfn = start_pfn;
++
++ zone->spanned_pages = max(old_zone_end_pfn, end_pfn) -
++ zone->zone_start_pfn;
++
++ zone_span_writeunlock(zone);
++}
++
++static void grow_pgdat_span(struct pglist_data *pgdat, unsigned long start_pfn,
++ unsigned long end_pfn)
++{
++ unsigned long old_pgdat_end_pfn =
++ pgdat->node_start_pfn + pgdat->node_spanned_pages;
++
++ if (start_pfn < pgdat->node_start_pfn)
++ pgdat->node_start_pfn = start_pfn;
++
++ pgdat->node_spanned_pages = max(old_pgdat_end_pfn, end_pfn) -
++ pgdat->node_start_pfn;
++}
++
+ static int __add_zone(struct zone *zone, unsigned long phys_start_pfn)
+ {
+ struct pglist_data *pgdat = zone->zone_pgdat;
+ int nr_pages = PAGES_PER_SECTION;
+ int nid = pgdat->node_id;
+ int zone_type;
++ unsigned long flags;
+
+ zone_type = zone - pgdat->node_zones;
+ if (!zone->wait_table) {
+- int ret = 0;
++ int ret;
++
+ ret = init_currently_empty_zone(zone, phys_start_pfn,
+ nr_pages, MEMMAP_HOTPLUG);
+- if (ret < 0)
++ if (ret)
+ return ret;
+ }
++ pgdat_resize_lock(zone->zone_pgdat, &flags);
++ grow_zone_span(zone, phys_start_pfn, phys_start_pfn + nr_pages);
++ grow_pgdat_span(zone->zone_pgdat, phys_start_pfn,
++ phys_start_pfn + nr_pages);
++ pgdat_resize_unlock(zone->zone_pgdat, &flags);
+ memmap_init_zone(nr_pages, nid, zone_type,
+ phys_start_pfn, MEMMAP_HOTPLUG);
+ return 0;
+@@ -134,36 +170,6 @@ int __add_pages(struct zone *zone, unsig
+ }
+ EXPORT_SYMBOL_GPL(__add_pages);
+
+-static void grow_zone_span(struct zone *zone,
+- unsigned long start_pfn, unsigned long end_pfn)
+-{
+- unsigned long old_zone_end_pfn;
+-
+- zone_span_writelock(zone);
+-
+- old_zone_end_pfn = zone->zone_start_pfn + zone->spanned_pages;
+- if (start_pfn < zone->zone_start_pfn)
+- zone->zone_start_pfn = start_pfn;
+-
+- zone->spanned_pages = max(old_zone_end_pfn, end_pfn) -
+- zone->zone_start_pfn;
+-
+- zone_span_writeunlock(zone);
+-}
+-
+-static void grow_pgdat_span(struct pglist_data *pgdat,
+- unsigned long start_pfn, unsigned long end_pfn)
+-{
+- unsigned long old_pgdat_end_pfn =
+- pgdat->node_start_pfn + pgdat->node_spanned_pages;
+-
+- if (start_pfn < pgdat->node_start_pfn)
+- pgdat->node_start_pfn = start_pfn;
+-
+- pgdat->node_spanned_pages = max(old_pgdat_end_pfn, end_pfn) -
+- pgdat->node_start_pfn;
+-}
+-
+ static int online_pages_range(unsigned long start_pfn, unsigned long nr_pages,
+ void *arg)
+ {
+@@ -183,7 +189,6 @@ static int online_pages_range(unsigned l
+
+ int online_pages(unsigned long pfn, unsigned long nr_pages)
+ {
+- unsigned long flags;
+ unsigned long onlined_pages = 0;
+ struct zone *zone;
+ int need_zonelists_rebuild = 0;
+@@ -211,11 +216,6 @@ int online_pages(unsigned long pfn, unsi
+ * memory_block->state_sem.
+ */
+ zone = page_zone(pfn_to_page(pfn));
+- pgdat_resize_lock(zone->zone_pgdat, &flags);
+- grow_zone_span(zone, pfn, pfn + nr_pages);
+- grow_pgdat_span(zone->zone_pgdat, pfn, pfn + nr_pages);
+- pgdat_resize_unlock(zone->zone_pgdat, &flags);
+-
+ /*
+ * If this zone is not populated, then it is not in zonelist.
+ * This means the page allocator ignores this zone.
+--- a/mm/page_alloc.c
++++ b/mm/page_alloc.c
+@@ -2837,8 +2837,6 @@ __meminit int init_currently_empty_zone(
+
+ zone->zone_start_pfn = zone_start_pfn;
+
+- memmap_init(size, pgdat->node_id, zone_idx(zone), zone_start_pfn);
+-
+ zone_init_free_lists(zone);
+
+ return 0;
+@@ -3408,6 +3406,7 @@ static void __paginginit free_area_init_
+ ret = init_currently_empty_zone(zone, zone_start_pfn,
+ size, MEMMAP_EARLY);
+ BUG_ON(ret);
++ memmap_init(size, nid, j, zone_start_pfn);
+ zone_start_pfn += size;
+ }
+ }
--- /dev/null
+From stable-bounces@linux.kernel.org Tue May 13 17:09:52 2008
+From: Paul Mackerras <paulus@samba.org>
+Date: Wed, 14 May 2008 09:31:07 +1000
+Subject: POWERPC Bolt in SLB entry for kernel stack on secondary cpus
+To: stable@kernel.org
+Message-ID: <18474.9403.224795.825124@cargo.ozlabs.ibm.com>
+
+From: Paul Mackerras <paulus@samba.org>
+
+This is upstream as commit 3b5750644b2ffa2a76fdfe7b4e00e4af2ecf3539.
+
+This fixes a regression reported by Kamalesh Bulabel where a POWER4
+machine would crash because of an SLB miss at a point where the SLB
+miss exception was unrecoverable. This regression is tracked at:
+
+http://bugzilla.kernel.org/show_bug.cgi?id=10082
+
+SLB misses at such points shouldn't happen because the kernel stack is
+the only memory accessed other than things in the first segment of the
+linear mapping (which is mapped at all times by entry 0 of the SLB).
+The context switch code ensures that SLB entry 2 covers the kernel
+stack, if it is not already covered by entry 0. None of entries 0
+to 2 are ever replaced by the SLB miss handler.
+
+Where this went wrong is that the context switch code assumes it
+doesn't have to write to SLB entry 2 if the new kernel stack is in the
+same segment as the old kernel stack, since entry 2 should already be
+correct. However, when we start up a secondary cpu, it calls
+slb_initialize, which doesn't set up entry 2. This is correct for
+the boot cpu, where we will be using a stack in the kernel BSS at this
+point (i.e. init_thread_union), but not necessarily for secondary
+cpus, whose initial stack can be allocated anywhere. This doesn't
+cause any immediate problem since the SLB miss handler will just
+create an SLB entry somewhere else to cover the initial stack.
+
+In fact it's possible for the cpu to go quite a long time without SLB
+entry 2 being valid. Eventually, though, the entry created by the SLB
+miss handler will get overwritten by some other entry, and if the next
+access to the stack is at an unrecoverable point, we get the crash.
+
+This fixes the problem by making slb_initialize create a suitable
+entry for the kernel stack, if we are on a secondary cpu and the stack
+isn't covered by SLB entry 0. This requires initializing the
+get_paca()->kstack field earlier, so I do that in smp_create_idle
+where the current field is initialized. This also abstracts a bit of
+the computation that mk_esid_data in slb.c does so that it can be used
+in slb_initialize.
+
+Signed-off-by: Paul Mackerras <paulus@samba.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ arch/powerpc/kernel/smp.c | 2 ++
+ arch/powerpc/mm/slb.c | 21 +++++++++++++--------
+ 2 files changed, 15 insertions(+), 8 deletions(-)
+
+--- a/arch/powerpc/kernel/smp.c
++++ b/arch/powerpc/kernel/smp.c
+@@ -386,6 +386,8 @@ static void __init smp_create_idle(unsig
+ panic("failed fork for CPU %u: %li", cpu, PTR_ERR(p));
+ #ifdef CONFIG_PPC64
+ paca[cpu].__current = p;
++ paca[cpu].kstack = (unsigned long) task_thread_info(p)
++ + THREAD_SIZE - STACK_FRAME_OVERHEAD;
+ #endif
+ current_set[cpu] = task_thread_info(p);
+ task_thread_info(p)->cpu = cpu;
+--- a/arch/powerpc/mm/slb.c
++++ b/arch/powerpc/mm/slb.c
+@@ -44,13 +44,13 @@ static void slb_allocate(unsigned long e
+ slb_allocate_realmode(ea);
+ }
+
++#define slb_esid_mask(ssize) \
++ (((ssize) == MMU_SEGSIZE_256M)? ESID_MASK: ESID_MASK_1T)
++
+ static inline unsigned long mk_esid_data(unsigned long ea, int ssize,
+ unsigned long slot)
+ {
+- unsigned long mask;
+-
+- mask = (ssize == MMU_SEGSIZE_256M)? ESID_MASK: ESID_MASK_1T;
+- return (ea & mask) | SLB_ESID_V | slot;
++ return (ea & slb_esid_mask(ssize)) | SLB_ESID_V | slot;
+ }
+
+ #define slb_vsid_shift(ssize) \
+@@ -301,11 +301,16 @@ void slb_initialize(void)
+
+ create_shadowed_slbe(VMALLOC_START, mmu_kernel_ssize, vflags, 1);
+
++ /* For the boot cpu, we're running on the stack in init_thread_union,
++ * which is in the first segment of the linear mapping, and also
++ * get_paca()->kstack hasn't been initialized yet.
++ * For secondary cpus, we need to bolt the kernel stack entry now.
++ */
+ slb_shadow_clear(2);
++ if (raw_smp_processor_id() != boot_cpuid &&
++ (get_paca()->kstack & slb_esid_mask(mmu_kernel_ssize)) > PAGE_OFFSET)
++ create_shadowed_slbe(get_paca()->kstack,
++ mmu_kernel_ssize, lflags, 2);
+
+- /* We don't bolt the stack for the time being - we're in boot,
+- * so the stack is in the bolted segment. By the time it goes
+- * elsewhere, we'll call _switch() which will bolt in the new
+- * one. */
+ asm volatile("isync":::"memory");
+ }
block-do_mounts-accept-root-non-existant-partition.patch
+powerpc-bolt-in-slb-entry-for-kernel-stack-on-secondary-cpus.patch
+usb-remove-picdem-fs-usb-demo-device-from-ldusb.patch
+usb-unusual_devs-add-support-for-gi-0401-sd-card-interface.patch
+usb-option-add-new-dell-5520-hsdpa-variant.patch
+usb-add-zoom-telephonics-model-3095f-v.92-usb-mini-external-modem-to-cdc-acm.patch
+usb-do-not-handle-device-1410-5010-in-option-driver.patch
+usb-add-telstra-nextg-cdma-id-to-option-driver.patch
+ext3-4-fix-uninitialized-bs-in-ext3-4_xattr_set_handle.patch
+libata-force-hardreset-if-link-is-in-powersave-mode.patch
+memory_hotplug-always-initialize-pageblock-bitmap.patch
--- /dev/null
+From stable-bounces@linux.kernel.org Wed May 14 12:21:45 2008
+From: Greg Kroah-Hartman <gregkh@suse.de>
+Date: Wed, 14 May 2008 19:21:22 GMT
+Subject: USB: add Telstra NextG CDMA id to option driver
+To: jejb@kernel.org, stable@kernel.org
+Message-ID: <200805141921.m4EJLMTw020032@hera.kernel.org>
+
+From: Greg Kroah-Hartman <gregkh@suse.de>
+
+commit 23cacd65f65956426bbca25964a68c174db83a31 upstream
+
+As reported by Magnus Boman <captain.magnus@opensuse.org>
+
+Cc: Magnus Boman <captain.magnus@opensuse.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/serial/option.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/drivers/usb/serial/option.c
++++ b/drivers/usb/serial/option.c
+@@ -299,6 +299,7 @@ static struct usb_device_id option_ids[]
+ { USB_DEVICE(KYOCERA_VENDOR_ID, KYOCERA_PRODUCT_KPC680) },
+ { USB_DEVICE(QUALCOMM_VENDOR_ID, 0x6613)}, /* Onda H600/ZTE MF330 */
+ { USB_DEVICE(MAXON_VENDOR_ID, 0x6280) }, /* BP3-USB & BP3-EXT HSDPA */
++ { USB_DEVICE(0x19d2, 0x0001) }, /* Telstra NextG CDMA */
+ { } /* Terminating entry */
+ };
+ MODULE_DEVICE_TABLE(usb, option_ids);
--- /dev/null
+From stable-bounces@linux.kernel.org Wed May 14 12:21:34 2008
+From: Iain McFarlane <iain@imcfarla.homelinux.net>
+Date: Wed, 14 May 2008 19:21:19 GMT
+Subject: USB: add Zoom Telephonics Model 3095F V.92 USB Mini External modem to cdc-acm
+To: jejb@kernel.org, stable@kernel.org
+Message-ID: <200805141921.m4EJLJ6Q019979@hera.kernel.org>
+
+From: Iain McFarlane <iain@imcfarla.homelinux.net>
+
+commit 6149ed5e3a6207595bd7362af7724d64f44af216 upstream
+
+The patch below is a necessary workaround to support the Zoom Telephonics Model 3095F V.92 USB Mini External modem, which fails to initialise properly during normal probing thus:
+
+May 3 22:53:00 imcfarla kernel: drivers/usb/class/cdc-acm.c: Zero length descriptor references
+May 3 22:53:00 imcfarla kernel: cdc_acm: probe of 5-2:1.0 failed with error -22
+
+Adding the patch below causes the probing section to be skipped, and the modem
+then initialises correctly.
+
+Signed-off-by: Iain McFarlane <iain@imcfarla.homelinux.net>
+Acked-by: Oliver Neukum <oneukum@suse.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/class/cdc-acm.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+--- a/drivers/usb/class/cdc-acm.c
++++ b/drivers/usb/class/cdc-acm.c
+@@ -1242,6 +1242,9 @@ static struct usb_device_id acm_ids[] =
+ { USB_DEVICE(0x22b8, 0x7000), /* Motorola Q Phone */
+ .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
+ },
++ { USB_DEVICE(0x0803, 0x3095), /* Zoom Telephonics Model 3095F USB MODEM */
++ .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
++ },
+
+ /* control interfaces with various AT-command sets */
+ { USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
--- /dev/null
+From stable-bounces@linux.kernel.org Wed May 14 12:21:34 2008
+From: Eugeniy Meshcheryakov <eugen@debian.org>
+Date: Wed, 14 May 2008 19:21:09 GMT
+Subject: USB: do not handle device 1410:5010 in 'option' driver
+To: jejb@kernel.org, stable@kernel.org
+Message-ID: <200805141921.m4EJL94s019907@hera.kernel.org>
+
+From: Eugeniy Meshcheryakov <eugen@debian.org>
+
+commit cdafc37a7b727b75ced65e31e47dafbd8b70f97f upstream
+
+This device is not a serial port, but a virtual CD-ROM device. For
+example with my Novatel MC950D:
+
+lsusb -v -d 1410:5010 | grep InterfaceClass
+ bInterfaceClass 8 Mass Storage
+
+After some time (ca. 5min) or if virtual CD is ejected, device id
+changes to 1410:4400:
+
+% lsusb -v -d 1410:4400 | grep InterfaceClass
+ bInterfaceClass 255 Vendor Specific Class
+ bInterfaceClass 255 Vendor Specific Class
+
+Variable name says that 0x5010 is a Novatel U727, but searching in
+internet shows, that this device also provides virtual CD that should be
+ejected before use. Product id for serial port in this case is 0x4100.
+
+Signed-off-by: Eugeniy Meshcheryakov <eugen@debian.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/serial/option.c | 3 ---
+ 1 file changed, 3 deletions(-)
+
+--- a/drivers/usb/serial/option.c
++++ b/drivers/usb/serial/option.c
+@@ -154,8 +154,6 @@ static int option_send_setup(struct usb
+ #define NOVATELWIRELESS_PRODUCT_MC727 0x4100
+ #define NOVATELWIRELESS_PRODUCT_MC950D 0x4400
+
+-#define NOVATELWIRELESS_PRODUCT_U727 0x5010
+-
+ /* FUTURE NOVATEL PRODUCTS */
+ #define NOVATELWIRELESS_PRODUCT_EVDO_1 0x6000
+ #define NOVATELWIRELESS_PRODUCT_HSPA_1 0x7000
+@@ -269,7 +267,6 @@ static struct usb_device_id option_ids[]
+ { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EU870D) }, /* Novatel EU850D/EU860D/EU870D */
+ { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_MC950D) }, /* Novatel MC930D/MC950D */
+ { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_MC727) }, /* Novatel MC727/U727/USB727 */
+- { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_U727) }, /* Novatel U727 */
+ { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EVDO_1) }, /* Novatel EVDO product */
+ { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_HSPA_1) }, /* Novatel HSPA product */
+ { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EMBEDDED_1) }, /* Novatel Embedded product */
--- /dev/null
+From stable-bounces@linux.kernel.org Wed May 14 12:21:22 2008
+From: Dan Williams <dcbw@redhat.com>
+Date: Wed, 14 May 2008 19:20:56 GMT
+Subject: USB: option: add new Dell 5520 HSDPA variant
+To: jejb@kernel.org, stable@kernel.org
+Message-ID: <200805141920.m4EJKuWq019765@hera.kernel.org>
+
+From: Dan Williams <dcbw@redhat.com>
+
+commit 96cb15cf977356d9d3117dd88f3fe187d6024f4b upstream
+
+New variant of the 5520 found by Luke Sheldrick.
+
+Signed-off-by: Dan Williams <dcbw@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/serial/option.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/drivers/usb/serial/option.c
++++ b/drivers/usb/serial/option.c
+@@ -293,6 +293,7 @@ static struct usb_device_id option_ids[]
+ { USB_DEVICE(DELL_VENDOR_ID, 0x8133) }, /* Dell Wireless 5720 == Novatel EV620 CDMA/EV-DO */
+ { USB_DEVICE(DELL_VENDOR_ID, 0x8136) }, /* Dell Wireless HSDPA 5520 == Novatel Expedite EU860D */
+ { USB_DEVICE(DELL_VENDOR_ID, 0x8137) }, /* Dell Wireless HSDPA 5520 */
++ { USB_DEVICE(DELL_VENDOR_ID, 0x8138) }, /* Dell Wireless 5520 Voda I Mobile Broadband (3G HSDPA) Minicard */
+ { USB_DEVICE(ANYDATA_VENDOR_ID, ANYDATA_PRODUCT_ADU_E100A) },
+ { USB_DEVICE(ANYDATA_VENDOR_ID, ANYDATA_PRODUCT_ADU_500A) },
+ { USB_DEVICE(AXESSTEL_VENDOR_ID, AXESSTEL_PRODUCT_MV110H) },
--- /dev/null
+From stable-bounces@linux.kernel.org Wed May 14 12:21:11 2008
+From: Xiaofan Chen <xiaofanc@gmail.com>
+Date: Wed, 14 May 2008 19:20:51 GMT
+Subject: USB: remove PICDEM FS USB demo (04d8:000c) device from ldusb
+To: jejb@kernel.org, stable@kernel.org
+Message-ID: <200805141920.m4EJKpaj019728@hera.kernel.org>
+
+From: Xiaofan Chen <xiaofanc@gmail.com>
+
+commit 5fc89390f74ac42165db477793fb30f6a200e79c upstream
+Date: Tue, 13 May 2008 21:52:00 +0800
+Subject: USB: remove PICDEM FS USB demo (04d8:000c) device from ldusb
+
+Microchip has changed the PICDEM FS USB demo device (0x04d8:000c)
+to use bulk transfer and not interrupt transfer. So I've updated the libusb
+based program here (Post #31).
+ http://forum.microchip.com/tm.aspx?m=106426&mpage=2
+
+So I believe that the in-kernel ldusb driver will no longer work with the
+demo firmware. It should be removed.
+
+
+Signed-off-by: Xiaofan Chen <xiaofanc@gmail.com>
+Cc: Michael Hund <MHund@LD-Didactic.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/misc/ldusb.c | 4 ----
+ 1 file changed, 4 deletions(-)
+
+--- a/drivers/usb/misc/ldusb.c
++++ b/drivers/usb/misc/ldusb.c
+@@ -63,9 +63,6 @@
+ #define USB_DEVICE_ID_VERNIER_CYCLOPS 0x0004
+ #define USB_DEVICE_ID_VERNIER_LCSPEC 0x0006
+
+-#define USB_VENDOR_ID_MICROCHIP 0x04d8
+-#define USB_DEVICE_ID_PICDEM 0x000c
+-
+ #ifdef CONFIG_USB_DYNAMIC_MINORS
+ #define USB_LD_MINOR_BASE 0
+ #else
+@@ -92,7 +89,6 @@ static struct usb_device_id ld_usb_table
+ { USB_DEVICE(USB_VENDOR_ID_VERNIER, USB_DEVICE_ID_VERNIER_GOTEMP) },
+ { USB_DEVICE(USB_VENDOR_ID_VERNIER, USB_DEVICE_ID_VERNIER_SKIP) },
+ { USB_DEVICE(USB_VENDOR_ID_VERNIER, USB_DEVICE_ID_VERNIER_CYCLOPS) },
+- { USB_DEVICE(USB_VENDOR_ID_MICROCHIP, USB_DEVICE_ID_PICDEM) },
+ { USB_DEVICE(USB_VENDOR_ID_VERNIER, USB_DEVICE_ID_VERNIER_LCSPEC) },
+ { } /* Terminating entry */
+ };
--- /dev/null
+From stable-bounces@linux.kernel.org Wed May 14 12:21:22 2008
+From: Filip Aben <f.aben@option.com>
+Date: Wed, 14 May 2008 19:21:03 GMT
+Subject: USB: unusual_devs: Add support for GI 0401 SD-Card interface
+To: jejb@kernel.org, stable@kernel.org
+Message-ID: <200805141921.m4EJL3XG019868@hera.kernel.org>
+
+From: Filip Aben <f.aben@option.com>
+
+commit e7c6f80fd733218aa1e79efa5d9ece9f76966160 upstream
+
+Enables the SD-Card interface on the GI 0401 HSUPA card from Option.
+
+The unusual_devs.h entry is necessary because the device descriptor is
+vendor-specific. That prevents usb-storage from binding to it as an
+interface driver.
+
+This revised patch adds a small comment explaining why and reduces the
+rev range.
+
+T: Bus=02 Lev=01 Prnt=01 Port=06 Cnt=01 Dev#= 3 Spd=480 MxCh= 0
+D: Ver= 2.00 Cls=ff(vend.) Sub=ff Prot=ff MxPS=64 #Cfgs= 1
+P: Vendor=0af0 ProdID=7401 Rev= 0.00
+S: Manufacturer=Option N.V.
+S: Product=Globetrotter HSUPA Modem
+C:* #Ifs=10 Cfg#= 1 Atr=80 MxPwr=500mA
+I:* If#= 0 Alt= 0 #EPs= 0 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none)
+I: If#= 0 Alt= 1 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none)
+E: Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
+E: Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=4ms
+I:* If#= 1 Alt= 0 #EPs= 0 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none)
+I: If#= 1 Alt= 1 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none)
+E: Ad=82(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
+E: Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=4ms
+I:* If#= 2 Alt= 0 #EPs= 0 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none)
+I: If#= 2 Alt= 1 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none)
+E: Ad=83(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
+E: Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=4ms
+I:* If#= 3 Alt= 0 #EPs= 0 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none)
+I: If#= 3 Alt= 1 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none)
+E: Ad=84(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
+E: Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=4ms
+I:* If#= 4 Alt= 0 #EPs= 0 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none)
+I: If#= 4 Alt= 1 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none)
+E: Ad=85(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
+E: Ad=05(O) Atr=02(Bulk) MxPS= 512 Ivl=4ms
+I:* If#= 5 Alt= 0 #EPs= 0 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none)
+I: If#= 5 Alt= 1 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none)
+E: Ad=86(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
+E: Ad=06(O) Atr=02(Bulk) MxPS= 512 Ivl=4ms
+I:* If#= 6 Alt= 0 #EPs= 0 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none)
+I: If#= 6 Alt= 1 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none)
+E: Ad=87(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
+E: Ad=07(O) Atr=02(Bulk) MxPS= 512 Ivl=4ms
+I:* If#= 7 Alt= 0 #EPs= 0 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none)
+I: If#= 7 Alt= 1 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none)
+E: Ad=88(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
+E: Ad=08(O) Atr=02(Bulk) MxPS= 512 Ivl=4ms
+I:* If#= 8 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none)
+E: Ad=89(I) Atr=03(Int.) MxPS= 64 Ivl=2ms
+E: Ad=8a(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
+E: Ad=09(O) Atr=02(Bulk) MxPS= 512 Ivl=4ms
+I:* If#= 9 Alt= 0 #EPs= 2 Cls=08(stor.) Sub=06 Prot=50 Driver=usb-storage
+E: Ad=0a(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
+E: Ad=8b(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
+
+Signed-off-by: Filip Aben <f.aben@option.com>
+Signed-off-by: Phil Dibowitz <phil@ipom.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/storage/unusual_devs.h | 10 ++++++++++
+ 1 file changed, 10 insertions(+)
+
+--- a/drivers/usb/storage/unusual_devs.h
++++ b/drivers/usb/storage/unusual_devs.h
+@@ -1285,6 +1285,16 @@ UNUSUAL_DEV( 0x0ace, 0x20ff, 0x0101, 0x0
+ US_SC_DEVICE, US_PR_DEVICE, NULL,
+ US_FL_IGNORE_DEVICE ),
+
++/* Reported by F. Aben <f.aben@option.com>
++ * This device (wrongly) has a vendor-specific device descriptor.
++ * The entry is needed so usb-storage can bind to it's mass-storage
++ * interface as an interface driver */
++UNUSUAL_DEV( 0x0af0, 0x7401, 0x0000, 0x0000,
++ "Option",
++ "GI 0401 SD-Card",
++ US_SC_DEVICE, US_PR_DEVICE, NULL,
++ 0 ),
++
+ #ifdef CONFIG_USB_STORAGE_ISD200
+ UNUSUAL_DEV( 0x0bf6, 0xa001, 0x0100, 0x0110,
+ "ATI",