From: Greg Kroah-Hartman Date: Fri, 10 Feb 2012 15:57:56 +0000 (-0800) Subject: 3.2-stable patches X-Git-Tag: v3.0.21~5 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=6c7f14ea0efbf4a7aa571769bf4ab49929a514c0;p=thirdparty%2Fkernel%2Fstable-queue.git 3.2-stable patches added patches: mmc-cb710-core-add-missing-spin_lock_init-for-irq_lock-of-struct-cb710_chip.patch staging-asus_oled-fix-image-processing.patch staging-asus_oled-fix-null-ptr-crash-on-unloading.patch staging-r8712u-add-new-sitecom-usb-id.patch staging-r8712u-use-asynchronous-firmware-loading.patch usb-add-new-zte-3g-dongle-s-pid-to-option.c.patch usb-ch9.h-usb_endpoint_maxp-uses-__le16_to_cpu.patch usb-gadget-zero-fix-bug-in-loopback-autoresume-handling.patch usb-skip-pci-usb-quirk-handling-for-netlogic-xlp.patch usb-usbserial-add-new-pid-number-0xa951-to-the-ftdi-driver.patch zcache-fix-deadlock-condition.patch zcache-set-swiz_bits-to-8-to-reduce-tmem-bucket-lock-contention.patch --- diff --git a/queue-3.2/mmc-cb710-core-add-missing-spin_lock_init-for-irq_lock-of-struct-cb710_chip.patch b/queue-3.2/mmc-cb710-core-add-missing-spin_lock_init-for-irq_lock-of-struct-cb710_chip.patch new file mode 100644 index 00000000000..a86620c1eae --- /dev/null +++ b/queue-3.2/mmc-cb710-core-add-missing-spin_lock_init-for-irq_lock-of-struct-cb710_chip.patch @@ -0,0 +1,30 @@ +From b5266ea675c5a041e2852c7ccec4cf2d4f5e0cf4 Mon Sep 17 00:00:00 2001 +From: Axel Lin +Date: Wed, 1 Feb 2012 12:31:47 +0800 +Subject: mmc: cb710 core: Add missing spin_lock_init for irq_lock of struct cb710_chip +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +From: Axel Lin + +commit b5266ea675c5a041e2852c7ccec4cf2d4f5e0cf4 upstream. + +Signed-off-by: Axel Lin +Acked-by: Michał Mirosław +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/misc/cb710/core.c | 1 + + 1 file changed, 1 insertion(+) + +--- a/drivers/misc/cb710/core.c ++++ b/drivers/misc/cb710/core.c +@@ -245,6 +245,7 @@ static int __devinit cb710_probe(struct + if (err) + return err; + ++ spin_lock_init(&chip->irq_lock); + chip->pdev = pdev; + chip->iobase = pcim_iomap_table(pdev)[0]; + diff --git a/queue-3.2/series b/queue-3.2/series index f221446be50..ed30a83982e 100644 --- a/queue-3.2/series +++ b/queue-3.2/series @@ -70,3 +70,15 @@ target-correct-sense-key-for-invalid-field-in-parameter-list-cdb.patch target-add-workaround-for-zero-length-control-cdb-handling.patch target-return-correct-asc-for-unimplemented-vpd-pages.patch target-fail-inquiry-commands-with-evpd-0-but-page-code-0.patch +staging-asus_oled-fix-image-processing.patch +staging-asus_oled-fix-null-ptr-crash-on-unloading.patch +staging-r8712u-add-new-sitecom-usb-id.patch +staging-r8712u-use-asynchronous-firmware-loading.patch +usb-ch9.h-usb_endpoint_maxp-uses-__le16_to_cpu.patch +usb-gadget-zero-fix-bug-in-loopback-autoresume-handling.patch +usb-skip-pci-usb-quirk-handling-for-netlogic-xlp.patch +usb-usbserial-add-new-pid-number-0xa951-to-the-ftdi-driver.patch +usb-add-new-zte-3g-dongle-s-pid-to-option.c.patch +zcache-set-swiz_bits-to-8-to-reduce-tmem-bucket-lock-contention.patch +zcache-fix-deadlock-condition.patch +mmc-cb710-core-add-missing-spin_lock_init-for-irq_lock-of-struct-cb710_chip.patch diff --git a/queue-3.2/staging-asus_oled-fix-image-processing.patch b/queue-3.2/staging-asus_oled-fix-image-processing.patch new file mode 100644 index 00000000000..0ab0f5f158d --- /dev/null +++ b/queue-3.2/staging-asus_oled-fix-image-processing.patch @@ -0,0 +1,57 @@ +From 635032cb397b396241372fa0ff36ae758e658b23 Mon Sep 17 00:00:00 2001 +From: Pekka Paalanen +Date: Sun, 22 Jan 2012 16:33:46 +0200 +Subject: Staging: asus_oled: fix image processing + +From: Pekka Paalanen + +commit 635032cb397b396241372fa0ff36ae758e658b23 upstream. + +Programming an image was broken, because odev->buf_offs was not advanced +for val == 0 in append_values(). This regression was introduced in: + + commit 1ff12a4aa354bed093a0240d5e6347b1e27601bc + Author: Kevin A. Granade + Date: Sat Sep 5 01:03:39 2009 -0500 + + Staging: asus_oled: Cleaned up checkpatch issues. + +Fix the image processing by special-casing val == 0. + +I have tested this change on an Asus G50V laptop only. + +Cc: Jakub Schmidtke +Cc: Kevin A. Granade +Signed-off-by: Pekka Paalanen +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/staging/asus_oled/asus_oled.c | 10 ++++++++-- + 1 file changed, 8 insertions(+), 2 deletions(-) + +--- a/drivers/staging/asus_oled/asus_oled.c ++++ b/drivers/staging/asus_oled/asus_oled.c +@@ -355,7 +355,14 @@ static void send_data(struct asus_oled_d + + static int append_values(struct asus_oled_dev *odev, uint8_t val, size_t count) + { +- while (count-- > 0 && val) { ++ odev->last_val = val; ++ ++ if (val == 0) { ++ odev->buf_offs += count; ++ return 0; ++ } ++ ++ while (count-- > 0) { + size_t x = odev->buf_offs % odev->width; + size_t y = odev->buf_offs / odev->width; + size_t i; +@@ -406,7 +413,6 @@ static int append_values(struct asus_ole + ; + } + +- odev->last_val = val; + odev->buf_offs++; + } + diff --git a/queue-3.2/staging-asus_oled-fix-null-ptr-crash-on-unloading.patch b/queue-3.2/staging-asus_oled-fix-null-ptr-crash-on-unloading.patch new file mode 100644 index 00000000000..8a718552052 --- /dev/null +++ b/queue-3.2/staging-asus_oled-fix-null-ptr-crash-on-unloading.patch @@ -0,0 +1,57 @@ +From 3589e74595a4332ebf77b5ed006f3c6686071ecd Mon Sep 17 00:00:00 2001 +From: Pekka Paalanen +Date: Sun, 22 Jan 2012 16:33:47 +0200 +Subject: Staging: asus_oled: fix NULL-ptr crash on unloading + +From: Pekka Paalanen + +commit 3589e74595a4332ebf77b5ed006f3c6686071ecd upstream. + +Asus_oled triggers the following bug on module unloading: + + usbcore: deregistering interface driver asus-oled + BUG: unable to handle kernel NULL pointer dereference at 0000000000000038 + IP: [] sysfs_delete_link+0x30/0x66 + + Call Trace: + [] device_remove_class_symlinks+0x6b/0x70 + [] device_del+0x9f/0x1ab + [] device_unregister+0x11/0x1e + [] asus_oled_disconnect+0x4f/0x9e [asus_oled] + [] usb_unbind_interface+0x54/0x103 + [] __device_release_driver+0xa2/0xeb + [] driver_detach+0x87/0xad + [] bus_remove_driver+0x91/0xc1 + [] driver_unregister+0x66/0x6e + [] usb_deregister+0xbb/0xc4 + [] asus_oled_exit+0x2f/0x31 [asus_oled] + [] sys_delete_module+0x1b8/0x21b + [] ? do_munmap+0x2ef/0x313 + [] system_call_fastpath+0x16/0x1b + +This is due to an incorrect destruction sequence in asus_oled_exit(). + +Fix the order, fixes the bug. Tested on an Asus G50V laptop only. + +Cc: Jakub Schmidtke +Signed-off-by: Pekka Paalanen +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/staging/asus_oled/asus_oled.c | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +--- a/drivers/staging/asus_oled/asus_oled.c ++++ b/drivers/staging/asus_oled/asus_oled.c +@@ -811,10 +811,9 @@ error: + + static void __exit asus_oled_exit(void) + { ++ usb_deregister(&oled_driver); + class_remove_file(oled_class, &class_attr_version.attr); + class_destroy(oled_class); +- +- usb_deregister(&oled_driver); + } + + module_init(asus_oled_init); diff --git a/queue-3.2/staging-r8712u-add-new-sitecom-usb-id.patch b/queue-3.2/staging-r8712u-add-new-sitecom-usb-id.patch new file mode 100644 index 00000000000..911c82c1a1a --- /dev/null +++ b/queue-3.2/staging-r8712u-add-new-sitecom-usb-id.patch @@ -0,0 +1,30 @@ +From 1793bf1deddc8ce25dc41925d5dbe64536c841b6 Mon Sep 17 00:00:00 2001 +From: Larry Finger +Date: Sat, 7 Jan 2012 10:07:03 -0600 +Subject: staging: r8712u: Add new Sitecom UsB ID + +From: Larry Finger + +commit 1793bf1deddc8ce25dc41925d5dbe64536c841b6 upstream. + +Add USB ID for SITECOM WLA-1000 V1 001 WLAN + +Reported-and-tested-by: Roland Gruber +Reported-and-tested-by: Dario Lucia +Signed-off-by: Larry Finger +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/staging/rtl8712/usb_intf.c | 1 + + 1 file changed, 1 insertion(+) + +--- a/drivers/staging/rtl8712/usb_intf.c ++++ b/drivers/staging/rtl8712/usb_intf.c +@@ -89,6 +89,7 @@ static struct usb_device_id rtl871x_usb_ + {USB_DEVICE(0x0DF6, 0x0045)}, + {USB_DEVICE(0x0DF6, 0x0059)}, /* 11n mode disable */ + {USB_DEVICE(0x0DF6, 0x004B)}, ++ {USB_DEVICE(0x0DF6, 0x005B)}, + {USB_DEVICE(0x0DF6, 0x005D)}, + {USB_DEVICE(0x0DF6, 0x0063)}, + /* Sweex */ diff --git a/queue-3.2/staging-r8712u-use-asynchronous-firmware-loading.patch b/queue-3.2/staging-r8712u-use-asynchronous-firmware-loading.patch new file mode 100644 index 00000000000..2803e90ef4c --- /dev/null +++ b/queue-3.2/staging-r8712u-use-asynchronous-firmware-loading.patch @@ -0,0 +1,275 @@ +From 8c213fa59199f9673d66970d6940fa093186642f Mon Sep 17 00:00:00 2001 +From: Larry Finger +Date: Sun, 5 Feb 2012 21:12:26 -0600 +Subject: staging: r8712u: Use asynchronous firmware loading + +From: Larry Finger + +commit 8c213fa59199f9673d66970d6940fa093186642f upstream. + +In https://bugs.archlinux.org/task/27996, failure of driver r8712u is +reported, with a timeout during module loading due to synchronous loading +of the firmware. The code now uses request_firmware_nowait(). + +Signed-off-by: Larry Finger +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/staging/rtl8712/drv_types.h | 7 +++ + drivers/staging/rtl8712/hal_init.c | 62 +++++++++++++++++++++++----------- + drivers/staging/rtl8712/os_intfs.c | 14 ++++++- + drivers/staging/rtl8712/rtl8712_hal.h | 1 + drivers/staging/rtl8712/usb_intf.c | 9 +++- + 5 files changed, 68 insertions(+), 25 deletions(-) + +--- a/drivers/staging/rtl8712/drv_types.h ++++ b/drivers/staging/rtl8712/drv_types.h +@@ -37,6 +37,8 @@ struct _adapter; + #include "wlan_bssdef.h" + #include "rtl8712_spec.h" + #include "rtl8712_hal.h" ++#include ++#include + + enum _NIC_VERSION { + RTL8711_NIC, +@@ -168,6 +170,7 @@ struct _adapter { + s32 bSurpriseRemoved; + u32 IsrContent; + u32 ImrContent; ++ bool fw_found; + u8 EepromAddressSize; + u8 hw_init_completed; + struct task_struct *cmdThread; +@@ -184,6 +187,10 @@ struct _adapter { + _workitem wkFilterRxFF0; + u8 blnEnableRxFF0Filter; + spinlock_t lockRxFF0Filter; ++ const struct firmware *fw; ++ struct usb_interface *pusb_intf; ++ struct mutex mutex_start; ++ struct completion rtl8712_fw_ready; + }; + + static inline u8 *myid(struct eeprom_priv *peepriv) +--- a/drivers/staging/rtl8712/hal_init.c ++++ b/drivers/staging/rtl8712/hal_init.c +@@ -42,29 +42,56 @@ + #define FWBUFF_ALIGN_SZ 512 + #define MAX_DUMP_FWSZ 49152 /*default = 49152 (48k)*/ + +-static u32 rtl871x_open_fw(struct _adapter *padapter, void **pphfwfile_hdl, +- const u8 **ppmappedfw) ++static void rtl871x_load_fw_cb(const struct firmware *firmware, void *context) + { ++ struct _adapter *padapter = context; ++ ++ complete(&padapter->rtl8712_fw_ready); ++ if (!firmware) { ++ struct usb_device *udev = padapter->dvobjpriv.pusbdev; ++ struct usb_interface *pusb_intf = padapter->pusb_intf; ++ printk(KERN_ERR "r8712u: Firmware request failed\n"); ++ padapter->fw_found = false; ++ usb_put_dev(udev); ++ usb_set_intfdata(pusb_intf, NULL); ++ return; ++ } ++ padapter->fw = firmware; ++ padapter->fw_found = true; ++ /* firmware available - start netdev */ ++ register_netdev(padapter->pnetdev); ++} ++ ++static const char firmware_file[] = "rtlwifi/rtl8712u.bin"; ++ ++int rtl871x_load_fw(struct _adapter *padapter) ++{ ++ struct device *dev = &padapter->dvobjpriv.pusbdev->dev; + int rc; +- const char firmware_file[] = "rtlwifi/rtl8712u.bin"; +- const struct firmware **praw = (const struct firmware **) +- (pphfwfile_hdl); +- struct dvobj_priv *pdvobjpriv = (struct dvobj_priv *) +- (&padapter->dvobjpriv); +- struct usb_device *pusbdev = pdvobjpriv->pusbdev; + ++ init_completion(&padapter->rtl8712_fw_ready); + printk(KERN_INFO "r8712u: Loading firmware from \"%s\"\n", + firmware_file); +- rc = request_firmware(praw, firmware_file, &pusbdev->dev); +- if (rc < 0) { +- printk(KERN_ERR "r8712u: Unable to load firmware\n"); +- printk(KERN_ERR "r8712u: Install latest linux-firmware\n"); ++ rc = request_firmware_nowait(THIS_MODULE, 1, firmware_file, dev, ++ GFP_KERNEL, padapter, rtl871x_load_fw_cb); ++ if (rc) ++ printk(KERN_ERR "r8712u: Firmware request error %d\n", rc); ++ return rc; ++} ++MODULE_FIRMWARE("rtlwifi/rtl8712u.bin"); ++ ++static u32 rtl871x_open_fw(struct _adapter *padapter, const u8 **ppmappedfw) ++{ ++ const struct firmware **praw = &padapter->fw; ++ ++ if (padapter->fw->size > 200000) { ++ printk(KERN_ERR "r8172u: Badfw->size of %d\n", ++ (int)padapter->fw->size); + return 0; + } + *ppmappedfw = (u8 *)((*praw)->data); + return (*praw)->size; + } +-MODULE_FIRMWARE("rtlwifi/rtl8712u.bin"); + + static void fill_fwpriv(struct _adapter *padapter, struct fw_priv *pfwpriv) + { +@@ -142,18 +169,17 @@ static u8 rtl8712_dl_fw(struct _adapter + uint dump_imem_sz, imem_sz, dump_emem_sz, emem_sz; /* max = 49152; */ + struct fw_hdr fwhdr; + u32 ulfilelength; /* FW file size */ +- void *phfwfile_hdl = NULL; + const u8 *pmappedfw = NULL; + u8 *ptmpchar = NULL, *ppayload, *ptr; + struct tx_desc *ptx_desc; + u32 txdscp_sz = sizeof(struct tx_desc); + u8 ret = _FAIL; + +- ulfilelength = rtl871x_open_fw(padapter, &phfwfile_hdl, &pmappedfw); ++ ulfilelength = rtl871x_open_fw(padapter, &pmappedfw); + if (pmappedfw && (ulfilelength > 0)) { + update_fwhdr(&fwhdr, pmappedfw); + if (chk_fwhdr(&fwhdr, ulfilelength) == _FAIL) +- goto firmware_rel; ++ return ret; + fill_fwpriv(padapter, &fwhdr.fwpriv); + /* firmware check ok */ + maxlen = (fwhdr.img_IMEM_size > fwhdr.img_SRAM_size) ? +@@ -161,7 +187,7 @@ static u8 rtl8712_dl_fw(struct _adapter + maxlen += txdscp_sz; + ptmpchar = _malloc(maxlen + FWBUFF_ALIGN_SZ); + if (ptmpchar == NULL) +- goto firmware_rel; ++ return ret; + + ptx_desc = (struct tx_desc *)(ptmpchar + FWBUFF_ALIGN_SZ - + ((addr_t)(ptmpchar) & (FWBUFF_ALIGN_SZ - 1))); +@@ -297,8 +323,6 @@ static u8 rtl8712_dl_fw(struct _adapter + + exit_fail: + kfree(ptmpchar); +-firmware_rel: +- release_firmware((struct firmware *)phfwfile_hdl); + return ret; + } + +--- a/drivers/staging/rtl8712/os_intfs.c ++++ b/drivers/staging/rtl8712/os_intfs.c +@@ -31,6 +31,7 @@ + #include + #include + #include ++#include + #include "osdep_service.h" + #include "drv_types.h" + #include "xmit_osdep.h" +@@ -264,12 +265,12 @@ static void start_drv_timers(struct _ada + void r8712_stop_drv_timers(struct _adapter *padapter) + { + _cancel_timer_ex(&padapter->mlmepriv.assoc_timer); +- _cancel_timer_ex(&padapter->mlmepriv.sitesurveyctrl. +- sitesurvey_ctrl_timer); + _cancel_timer_ex(&padapter->securitypriv.tkip_timer); + _cancel_timer_ex(&padapter->mlmepriv.scan_to_timer); + _cancel_timer_ex(&padapter->mlmepriv.dhcp_timer); + _cancel_timer_ex(&padapter->mlmepriv.wdg_timer); ++ _cancel_timer_ex(&padapter->mlmepriv.sitesurveyctrl. ++ sitesurvey_ctrl_timer); + } + + static u8 init_default_value(struct _adapter *padapter) +@@ -347,7 +348,8 @@ u8 r8712_free_drv_sw(struct _adapter *pa + r8712_free_mlme_priv(&padapter->mlmepriv); + r8712_free_io_queue(padapter); + _free_xmit_priv(&padapter->xmitpriv); +- _r8712_free_sta_priv(&padapter->stapriv); ++ if (padapter->fw_found) ++ _r8712_free_sta_priv(&padapter->stapriv); + _r8712_free_recv_priv(&padapter->recvpriv); + mp871xdeinit(padapter); + if (pnetdev) +@@ -388,6 +390,7 @@ static int netdev_open(struct net_device + { + struct _adapter *padapter = (struct _adapter *)netdev_priv(pnetdev); + ++ mutex_lock(&padapter->mutex_start); + if (padapter->bup == false) { + padapter->bDriverStopped = false; + padapter->bSurpriseRemoved = false; +@@ -435,11 +438,13 @@ static int netdev_open(struct net_device + /* start driver mlme relation timer */ + start_drv_timers(padapter); + padapter->ledpriv.LedControlHandler(padapter, LED_CTL_NO_LINK); ++ mutex_unlock(&padapter->mutex_start); + return 0; + netdev_open_error: + padapter->bup = false; + netif_carrier_off(pnetdev); + netif_stop_queue(pnetdev); ++ mutex_unlock(&padapter->mutex_start); + return -1; + } + +@@ -473,6 +478,9 @@ static int netdev_close(struct net_devic + r8712_free_network_queue(padapter); + /* The interface is no longer Up: */ + padapter->bup = false; ++ release_firmware(padapter->fw); ++ /* never exit with a firmware callback pending */ ++ wait_for_completion(&padapter->rtl8712_fw_ready); + return 0; + } + +--- a/drivers/staging/rtl8712/rtl8712_hal.h ++++ b/drivers/staging/rtl8712/rtl8712_hal.h +@@ -145,5 +145,6 @@ struct hal_priv { + }; + + uint rtl8712_hal_init(struct _adapter *padapter); ++int rtl871x_load_fw(struct _adapter *padapter); + + #endif +--- a/drivers/staging/rtl8712/usb_intf.c ++++ b/drivers/staging/rtl8712/usb_intf.c +@@ -390,6 +390,7 @@ static int r871xu_drv_init(struct usb_in + pdvobjpriv = &padapter->dvobjpriv; + pdvobjpriv->padapter = padapter; + padapter->dvobjpriv.pusbdev = udev; ++ padapter->pusb_intf = pusb_intf; + usb_set_intfdata(pusb_intf, pnetdev); + SET_NETDEV_DEV(pnetdev, &pusb_intf->dev); + /* step 2. */ +@@ -596,10 +597,11 @@ static int r871xu_drv_init(struct usb_in + "%pM\n", mac); + memcpy(pnetdev->dev_addr, mac, ETH_ALEN); + } +- /* step 6. Tell the network stack we exist */ +- if (register_netdev(pnetdev) != 0) ++ /* step 6. Load the firmware asynchronously */ ++ if (rtl871x_load_fw(padapter)) + goto error; + spin_lock_init(&padapter->lockRxFF0Filter); ++ mutex_init(&padapter->mutex_start); + return 0; + error: + usb_put_dev(udev); +@@ -630,7 +632,8 @@ static void r871xu_dev_remove(struct usb + flush_scheduled_work(); + udelay(1); + /*Stop driver mlme relation timer */ +- r8712_stop_drv_timers(padapter); ++ if (padapter->fw_found) ++ r8712_stop_drv_timers(padapter); + r871x_dev_unload(padapter); + r8712_free_drv_sw(padapter); + } diff --git a/queue-3.2/usb-add-new-zte-3g-dongle-s-pid-to-option.c.patch b/queue-3.2/usb-add-new-zte-3g-dongle-s-pid-to-option.c.patch new file mode 100644 index 00000000000..7dd305c2b24 --- /dev/null +++ b/queue-3.2/usb-add-new-zte-3g-dongle-s-pid-to-option.c.patch @@ -0,0 +1,179 @@ +From 1608ea5f4b5d6262cd6e808839491cfb2a67405a Mon Sep 17 00:00:00 2001 +From: Rui li +Date: Tue, 31 Jan 2012 15:27:33 +0800 +Subject: USB: add new zte 3g-dongle's pid to option.c + +From: Rui li + +commit 1608ea5f4b5d6262cd6e808839491cfb2a67405a upstream. + +As ZTE have and will use more pid for new products this year, +so we need to add some new zte 3g-dongle's pid on option.c , +and delete one pid 0x0154 because it use for mass-storage port. + +Signed-off-by: Rui li +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/serial/option.c | 129 +++++++++++++++++++++++++++++++++++++++++++- + 1 file changed, 128 insertions(+), 1 deletion(-) + +--- a/drivers/usb/serial/option.c ++++ b/drivers/usb/serial/option.c +@@ -855,6 +855,18 @@ static const struct usb_device_id option + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0083, 0xff, 0xff, 0xff) }, + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0086, 0xff, 0xff, 0xff) }, + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0087, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0088, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0089, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0090, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0091, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0092, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0093, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0094, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0095, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0096, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0097, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0098, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0099, 0xff, 0xff, 0xff) }, + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0104, 0xff, 0xff, 0xff), + .driver_info = (kernel_ulong_t)&net_intf4_blacklist }, + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0105, 0xff, 0xff, 0xff) }, +@@ -883,7 +895,6 @@ static const struct usb_device_id option + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0151, 0xff, 0xff, 0xff) }, + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0152, 0xff, 0xff, 0xff) }, + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0153, 0xff, 0xff, 0xff) }, +- { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0154, 0xff, 0xff, 0xff) }, + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0155, 0xff, 0xff, 0xff) }, + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0156, 0xff, 0xff, 0xff) }, + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0157, 0xff, 0xff, 0xff) }, +@@ -892,6 +903,12 @@ static const struct usb_device_id option + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0160, 0xff, 0xff, 0xff) }, + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0161, 0xff, 0xff, 0xff) }, + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0162, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0164, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0165, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0168, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0170, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0176, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0178, 0xff, 0xff, 0xff) }, + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1008, 0xff, 0xff, 0xff) }, + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1010, 0xff, 0xff, 0xff) }, + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1012, 0xff, 0xff, 0xff) }, +@@ -1066,6 +1083,116 @@ static const struct usb_device_id option + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1298, 0xff, 0xff, 0xff) }, + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1299, 0xff, 0xff, 0xff) }, + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1300, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1401, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1402, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1403, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1404, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1405, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1406, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1407, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1408, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1409, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1410, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1411, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1412, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1413, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1414, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1415, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1416, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1417, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1418, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1419, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1420, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1421, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1422, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1423, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1424, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1425, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1426, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1427, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1428, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1429, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1430, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1431, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1432, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1433, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1434, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1435, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1436, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1437, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1438, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1439, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1440, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1441, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1442, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1443, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1444, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1445, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1446, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1447, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1448, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1449, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1450, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1451, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1452, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1453, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1454, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1455, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1456, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1457, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1458, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1459, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1460, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1461, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1462, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1463, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1464, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1465, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1466, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1467, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1468, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1469, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1470, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1471, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1472, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1473, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1474, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1475, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1476, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1477, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1478, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1479, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1480, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1481, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1482, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1483, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1484, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1485, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1486, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1487, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1488, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1489, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1490, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1491, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1492, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1493, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1494, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1495, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1496, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1497, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1498, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1499, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1500, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1501, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1502, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1503, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1504, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1505, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1506, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1507, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1508, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1509, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1510, 0xff, 0xff, 0xff) }, + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0014, 0xff, 0xff, 0xff) }, /* ZTE CDMA products */ + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0027, 0xff, 0xff, 0xff) }, + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0059, 0xff, 0xff, 0xff) }, diff --git a/queue-3.2/usb-ch9.h-usb_endpoint_maxp-uses-__le16_to_cpu.patch b/queue-3.2/usb-ch9.h-usb_endpoint_maxp-uses-__le16_to_cpu.patch new file mode 100644 index 00000000000..1772368071a --- /dev/null +++ b/queue-3.2/usb-ch9.h-usb_endpoint_maxp-uses-__le16_to_cpu.patch @@ -0,0 +1,35 @@ +From 9c0a835a9d9aed41bcf9c287f5069133a6e2a87b Mon Sep 17 00:00:00 2001 +From: Kuninori Morimoto +Date: Tue, 31 Jan 2012 16:43:50 -0800 +Subject: usb: ch9.h: usb_endpoint_maxp() uses __le16_to_cpu() + +From: Kuninori Morimoto + +commit 9c0a835a9d9aed41bcf9c287f5069133a6e2a87b upstream. + +The usb/ch9.h will be installed to /usr/include/linux, +and be used from user space. +But le16_to_cpu() is only defined for kernel code. +Without this patch, user space compile will be broken. +Special thanks to Stefan Becker + +Reported-by: Stefan Becker +Signed-off-by: Kuninori Morimoto +Signed-off-by: Felipe Balbi +Signed-off-by: Greg Kroah-Hartman + +--- + include/linux/usb/ch9.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/include/linux/usb/ch9.h ++++ b/include/linux/usb/ch9.h +@@ -589,7 +589,7 @@ static inline int usb_endpoint_is_isoc_o + */ + static inline int usb_endpoint_maxp(const struct usb_endpoint_descriptor *epd) + { +- return le16_to_cpu(epd->wMaxPacketSize); ++ return __le16_to_cpu(epd->wMaxPacketSize); + } + + /*-------------------------------------------------------------------------*/ diff --git a/queue-3.2/usb-gadget-zero-fix-bug-in-loopback-autoresume-handling.patch b/queue-3.2/usb-gadget-zero-fix-bug-in-loopback-autoresume-handling.patch new file mode 100644 index 00000000000..6d1c625f7c4 --- /dev/null +++ b/queue-3.2/usb-gadget-zero-fix-bug-in-loopback-autoresume-handling.patch @@ -0,0 +1,33 @@ +From 683da59d7b8ae04891636d4b59893cd4e9b0b7e5 Mon Sep 17 00:00:00 2001 +From: Timo Juhani Lindfors +Date: Sun, 29 Jan 2012 16:12:13 +0200 +Subject: usb: gadget: zero: fix bug in loopback autoresume handling + +From: Timo Juhani Lindfors + +commit 683da59d7b8ae04891636d4b59893cd4e9b0b7e5 upstream. + +ab943a2e125b (USB: gadget: gadget zero uses new suspend/resume hooks) +introduced a copy-paste error where f_loopback.c writes to a variable +declared in f_sourcesink.c. This prevents one from creating gadgets +that only have a loopback function. + +Signed-off-by: Timo Juhani Lindfors +Signed-off-by: Felipe Balbi +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/gadget/f_loopback.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/drivers/usb/gadget/f_loopback.c ++++ b/drivers/usb/gadget/f_loopback.c +@@ -418,7 +418,7 @@ int __init loopback_add(struct usb_compo + + /* support autoresume for remote wakeup testing */ + if (autoresume) +- sourcesink_driver.bmAttributes |= USB_CONFIG_ATT_WAKEUP; ++ loopback_driver.bmAttributes |= USB_CONFIG_ATT_WAKEUP; + + /* support OTG systems */ + if (gadget_is_otg(cdev->gadget)) { diff --git a/queue-3.2/usb-skip-pci-usb-quirk-handling-for-netlogic-xlp.patch b/queue-3.2/usb-skip-pci-usb-quirk-handling-for-netlogic-xlp.patch new file mode 100644 index 00000000000..b8bd1fa172e --- /dev/null +++ b/queue-3.2/usb-skip-pci-usb-quirk-handling-for-netlogic-xlp.patch @@ -0,0 +1,43 @@ +From e4436a7c17ac2b5e138f93f83a541cba9b311685 Mon Sep 17 00:00:00 2001 +From: Jayachandran C +Date: Fri, 27 Jan 2012 20:27:32 +0530 +Subject: usb: Skip PCI USB quirk handling for Netlogic XLP + +From: Jayachandran C + +commit e4436a7c17ac2b5e138f93f83a541cba9b311685 upstream. + +The Netlogic XLP SoC's on-chip USB controller appears as a PCI +USB device, but does not need the EHCI/OHCI handoff done in +usb/host/pci-quirks.c. + +The pci-quirks.c is enabled for all vendors and devices, and is +enabled if USB and PCI are configured. + +If we do not skip the qurik handling on XLP, the readb() call in +ehci_bios_handoff() will cause a crash since byte access is not +supported for EHCI registers in XLP. + +Signed-off-by: Jayachandran C +Acked-by: Alan Stern +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/host/pci-quirks.c | 6 ++++++ + 1 file changed, 6 insertions(+) + +--- a/drivers/usb/host/pci-quirks.c ++++ b/drivers/usb/host/pci-quirks.c +@@ -867,6 +867,12 @@ hc_init: + + static void __devinit quirk_usb_early_handoff(struct pci_dev *pdev) + { ++ /* Skip Netlogic mips SoC's internal PCI USB controller. ++ * This device does not need/support EHCI/OHCI handoff ++ */ ++ if (pdev->vendor == 0x184e) /* vendor Netlogic */ ++ return; ++ + if (pdev->class == PCI_CLASS_SERIAL_USB_UHCI) + quirk_usb_handoff_uhci(pdev); + else if (pdev->class == PCI_CLASS_SERIAL_USB_OHCI) diff --git a/queue-3.2/usb-usbserial-add-new-pid-number-0xa951-to-the-ftdi-driver.patch b/queue-3.2/usb-usbserial-add-new-pid-number-0xa951-to-the-ftdi-driver.patch new file mode 100644 index 00000000000..c9ecf00027e --- /dev/null +++ b/queue-3.2/usb-usbserial-add-new-pid-number-0xa951-to-the-ftdi-driver.patch @@ -0,0 +1,40 @@ +From 90451e6973a5da155c6f315a409ca0a8d3ce6b76 Mon Sep 17 00:00:00 2001 +From: Milan Kocian +Date: Fri, 3 Feb 2012 14:28:00 +0100 +Subject: USB: usbserial: add new PID number (0xa951) to the ftdi driver + +From: Milan Kocian + +commit 90451e6973a5da155c6f315a409ca0a8d3ce6b76 upstream. + +Signed-off-by: Milan Kocian +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/serial/ftdi_sio.c | 1 + + drivers/usb/serial/ftdi_sio_ids.h | 7 +++++++ + 2 files changed, 8 insertions(+) + +--- a/drivers/usb/serial/ftdi_sio.c ++++ b/drivers/usb/serial/ftdi_sio.c +@@ -839,6 +839,7 @@ static struct usb_device_id id_table_com + { USB_DEVICE(FTDI_VID, FTDI_SCIENCESCOPE_LOGBOOKML_PID) }, + { USB_DEVICE(FTDI_VID, FTDI_SCIENCESCOPE_LS_LOGBOOK_PID) }, + { USB_DEVICE(FTDI_VID, FTDI_SCIENCESCOPE_HS_LOGBOOK_PID) }, ++ { USB_DEVICE(FTDI_VID, FTDI_CINTERION_MC55I_PID) }, + { USB_DEVICE(FTDI_VID, FTDI_DOTEC_PID) }, + { USB_DEVICE(QIHARDWARE_VID, MILKYMISTONE_JTAGSERIAL_PID), + .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk }, +--- a/drivers/usb/serial/ftdi_sio_ids.h ++++ b/drivers/usb/serial/ftdi_sio_ids.h +@@ -1187,3 +1187,10 @@ + */ + /* ZigBee controller */ + #define FTDI_RF_R106 0x8A28 ++ ++/* ++ * Product: HCP HIT GPRS modem ++ * Manufacturer: HCP d.o.o. ++ * ATI command output: Cinterion MC55i ++ */ ++#define FTDI_CINTERION_MC55I_PID 0xA951 diff --git a/queue-3.2/zcache-fix-deadlock-condition.patch b/queue-3.2/zcache-fix-deadlock-condition.patch new file mode 100644 index 00000000000..31d204151ca --- /dev/null +++ b/queue-3.2/zcache-fix-deadlock-condition.patch @@ -0,0 +1,53 @@ +From 9256a4789be3dae37d00924c03546ba7958ea5a3 Mon Sep 17 00:00:00 2001 +From: Dan Magenheimer +Date: Wed, 25 Jan 2012 14:32:51 -0800 +Subject: zcache: fix deadlock condition + +From: Dan Magenheimer + +commit 9256a4789be3dae37d00924c03546ba7958ea5a3 upstream. + +I discovered this deadlock condition awhile ago working on RAMster +but it affects zcache as well. The list spinlock must be +locked prior to the page spinlock and released after. As +a result, the page copy must also be done while the locks are held. + +Applies to 3.2. Konrad, please push (via GregKH?)... +this is definitely a bug fix so need not be pushed during +a -rc0 window. + +Signed-off-by: Dan Magenheimer +Acked-by: Konrad Rzeszutek Wilk +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/staging/zcache/zcache-main.c | 7 +++---- + 1 file changed, 3 insertions(+), 4 deletions(-) + +--- a/drivers/staging/zcache/zcache-main.c ++++ b/drivers/staging/zcache/zcache-main.c +@@ -358,8 +358,8 @@ static struct zbud_hdr *zbud_create(uint + if (unlikely(zbpg == NULL)) + goto out; + /* ok, have a page, now compress the data before taking locks */ +- spin_lock(&zbpg->lock); + spin_lock(&zbud_budlists_spinlock); ++ spin_lock(&zbpg->lock); + list_add_tail(&zbpg->bud_list, &zbud_unbuddied[nchunks].list); + zbud_unbuddied[nchunks].count++; + zh = &zbpg->buddy[0]; +@@ -389,12 +389,11 @@ init_zh: + zh->oid = *oid; + zh->pool_id = pool_id; + zh->client_id = client_id; +- /* can wait to copy the data until the list locks are dropped */ +- spin_unlock(&zbud_budlists_spinlock); +- + to = zbud_data(zh, size); + memcpy(to, cdata, size); + spin_unlock(&zbpg->lock); ++ spin_unlock(&zbud_budlists_spinlock); ++ + zbud_cumul_chunk_counts[nchunks]++; + atomic_inc(&zcache_zbud_curr_zpages); + zcache_zbud_cumul_zpages++; diff --git a/queue-3.2/zcache-set-swiz_bits-to-8-to-reduce-tmem-bucket-lock-contention.patch b/queue-3.2/zcache-set-swiz_bits-to-8-to-reduce-tmem-bucket-lock-contention.patch new file mode 100644 index 00000000000..14250ec8171 --- /dev/null +++ b/queue-3.2/zcache-set-swiz_bits-to-8-to-reduce-tmem-bucket-lock-contention.patch @@ -0,0 +1,43 @@ +From e8b4553457e78bcff90f70a31212a40a8fd4f0db Mon Sep 17 00:00:00 2001 +From: Dan Magenheimer +Date: Mon, 23 Jan 2012 16:52:20 -0500 +Subject: zcache: Set SWIZ_BITS to 8 to reduce tmem bucket lock contention. + +From: Dan Magenheimer + +commit e8b4553457e78bcff90f70a31212a40a8fd4f0db upstream. + +SWIZ_BITS > 8 results in a much larger number of "tmem_obj" +allocations, likely one per page-placed-in-frontswap. The +tmem_obj is not huge (roughly 100 bytes), but it is large +enough to add a not-insignificant memory overhead to zcache. + +The SWIZ_BITS=8 will get roughly the same lock contention +without the space wastage. + +The effect of SWIZ_BITS can be thought of as "2^SWIZ_BITS is +the number of unique oids that be generated" (This concept is +limited to frontswap's use of tmem). + +Acked-by: Seth Jennings +Signed-off-by: Konrad Rzeszutek Wilk +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/staging/zcache/zcache-main.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +--- a/drivers/staging/zcache/zcache-main.c ++++ b/drivers/staging/zcache/zcache-main.c +@@ -1782,9 +1782,9 @@ static int zcache_frontswap_poolid = -1; + * Swizzling increases objects per swaptype, increasing tmem concurrency + * for heavy swaploads. Later, larger nr_cpus -> larger SWIZ_BITS + * Setting SWIZ_BITS to 27 basically reconstructs the swap entry from +- * frontswap_get_page() ++ * frontswap_get_page(), but has side-effects. Hence using 8. + */ +-#define SWIZ_BITS 27 ++#define SWIZ_BITS 8 + #define SWIZ_MASK ((1 << SWIZ_BITS) - 1) + #define _oswiz(_type, _ind) ((_type << SWIZ_BITS) | (_ind & SWIZ_MASK)) + #define iswiz(_ind) (_ind >> SWIZ_BITS)