]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
more .25 patches added
authorGreg Kroah-Hartman <gregkh@suse.de>
Thu, 15 May 2008 19:04:37 +0000 (12:04 -0700)
committerGreg Kroah-Hartman <gregkh@suse.de>
Thu, 15 May 2008 19:04:37 +0000 (12:04 -0700)
queue-2.6.25/ext3-4-fix-uninitialized-bs-in-ext3-4_xattr_set_handle.patch [new file with mode: 0644]
queue-2.6.25/libata-force-hardreset-if-link-is-in-powersave-mode.patch [new file with mode: 0644]
queue-2.6.25/memory_hotplug-always-initialize-pageblock-bitmap.patch [new file with mode: 0644]
queue-2.6.25/powerpc-bolt-in-slb-entry-for-kernel-stack-on-secondary-cpus.patch [new file with mode: 0644]
queue-2.6.25/series
queue-2.6.25/usb-add-telstra-nextg-cdma-id-to-option-driver.patch [new file with mode: 0644]
queue-2.6.25/usb-add-zoom-telephonics-model-3095f-v.92-usb-mini-external-modem-to-cdc-acm.patch [new file with mode: 0644]
queue-2.6.25/usb-do-not-handle-device-1410-5010-in-option-driver.patch [new file with mode: 0644]
queue-2.6.25/usb-option-add-new-dell-5520-hsdpa-variant.patch [new file with mode: 0644]
queue-2.6.25/usb-remove-picdem-fs-usb-demo-device-from-ldusb.patch [new file with mode: 0644]
queue-2.6.25/usb-unusual_devs-add-support-for-gi-0401-sd-card-interface.patch [new file with mode: 0644]

diff --git a/queue-2.6.25/ext3-4-fix-uninitialized-bs-in-ext3-4_xattr_set_handle.patch b/queue-2.6.25/ext3-4-fix-uninitialized-bs-in-ext3-4_xattr_set_handle.patch
new file mode 100644 (file)
index 0000000..f234977
--- /dev/null
@@ -0,0 +1,61 @@
+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;
diff --git a/queue-2.6.25/libata-force-hardreset-if-link-is-in-powersave-mode.patch b/queue-2.6.25/libata-force-hardreset-if-link-is-in-powersave-mode.patch
new file mode 100644 (file)
index 0000000..6a97563
--- /dev/null
@@ -0,0 +1,51 @@
+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;
diff --git a/queue-2.6.25/memory_hotplug-always-initialize-pageblock-bitmap.patch b/queue-2.6.25/memory_hotplug-always-initialize-pageblock-bitmap.patch
new file mode 100644 (file)
index 0000000..22abc66
--- /dev/null
@@ -0,0 +1,190 @@
+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;
+       }
+ }
diff --git a/queue-2.6.25/powerpc-bolt-in-slb-entry-for-kernel-stack-on-secondary-cpus.patch b/queue-2.6.25/powerpc-bolt-in-slb-entry-for-kernel-stack-on-secondary-cpus.patch
new file mode 100644 (file)
index 0000000..7f497b8
--- /dev/null
@@ -0,0 +1,108 @@
+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");
+ }
index 628d57a6b31d5c76913517bfe808d720a3ebdf2a..923d262d13cd62a2ffd2d9fb48640967cd71b3ff 100644 (file)
@@ -1 +1,11 @@
 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
diff --git a/queue-2.6.25/usb-add-telstra-nextg-cdma-id-to-option-driver.patch b/queue-2.6.25/usb-add-telstra-nextg-cdma-id-to-option-driver.patch
new file mode 100644 (file)
index 0000000..f1e72d6
--- /dev/null
@@ -0,0 +1,30 @@
+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);
diff --git a/queue-2.6.25/usb-add-zoom-telephonics-model-3095f-v.92-usb-mini-external-modem-to-cdc-acm.patch b/queue-2.6.25/usb-add-zoom-telephonics-model-3095f-v.92-usb-mini-external-modem-to-cdc-acm.patch
new file mode 100644 (file)
index 0000000..910a9ab
--- /dev/null
@@ -0,0 +1,39 @@
+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,
diff --git a/queue-2.6.25/usb-do-not-handle-device-1410-5010-in-option-driver.patch b/queue-2.6.25/usb-do-not-handle-device-1410-5010-in-option-driver.patch
new file mode 100644 (file)
index 0000000..c2d3e7c
--- /dev/null
@@ -0,0 +1,54 @@
+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 */
diff --git a/queue-2.6.25/usb-option-add-new-dell-5520-hsdpa-variant.patch b/queue-2.6.25/usb-option-add-new-dell-5520-hsdpa-variant.patch
new file mode 100644 (file)
index 0000000..b017953
--- /dev/null
@@ -0,0 +1,30 @@
+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) },
diff --git a/queue-2.6.25/usb-remove-picdem-fs-usb-demo-device-from-ldusb.patch b/queue-2.6.25/usb-remove-picdem-fs-usb-demo-device-from-ldusb.patch
new file mode 100644 (file)
index 0000000..c6f22cd
--- /dev/null
@@ -0,0 +1,50 @@
+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 */
+ };
diff --git a/queue-2.6.25/usb-unusual_devs-add-support-for-gi-0401-sd-card-interface.patch b/queue-2.6.25/usb-unusual_devs-add-support-for-gi-0401-sd-card-interface.patch
new file mode 100644 (file)
index 0000000..0e69750
--- /dev/null
@@ -0,0 +1,93 @@
+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",