diff options
author | Greg Kroah-Hartman <gregkh@suse.de> | 2011-11-01 14:33:40 -0700 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2011-11-01 14:33:40 -0700 |
commit | 358149b3409f4dae17e75e4359fedf8dfbabea7d (patch) | |
tree | 1c6eb0878030d5592fe9093bef2a04b71efdf34a | |
parent | 44201b1d998678b4283fd10b7b59c708f4d14f68 (diff) | |
download | longterm-queue-2.6.33-358149b3409f4dae17e75e4359fedf8dfbabea7d.tar.gz |
.33 patches
17 files changed, 944 insertions, 0 deletions
diff --git a/queue-2.6.33/alsa-hda-add-new-revision-for-alc662.patch b/queue-2.6.33/alsa-hda-add-new-revision-for-alc662.patch new file mode 100644 index 0000000..d941a24 --- /dev/null +++ b/queue-2.6.33/alsa-hda-add-new-revision-for-alc662.patch @@ -0,0 +1,34 @@ +From cc667a72d471e79fd8e5e291ea115923cf44dca0 Mon Sep 17 00:00:00 2001 +From: David Henningsson <david.henningsson@canonical.com> +Date: Tue, 18 Oct 2011 14:07:51 +0200 +Subject: ALSA: HDA: Add new revision for ALC662 + +From: David Henningsson <david.henningsson@canonical.com> + +commit cc667a72d471e79fd8e5e291ea115923cf44dca0 upstream. + +The revision 0x100300 was found for ALC662. It seems to work well +with patch_alc662. + +BugLink: http://bugs.launchpad.net/bugs/877373 +Tested-by: Shengyao Xue <Shengyao.xue@canonical.com> +Signed-off-by: David Henningsson <david.henningsson@canonical.com> +Acked-by: Kailang Yang <kailang@realtek.com> +Signed-off-by: Takashi Iwai <tiwai@suse.de> +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> + +--- + sound/pci/hda/patch_realtek.c | 2 ++ + 1 file changed, 2 insertions(+) + +--- a/sound/pci/hda/patch_realtek.c ++++ b/sound/pci/hda/patch_realtek.c +@@ -18117,6 +18117,8 @@ static struct hda_codec_preset snd_hda_p + .patch = patch_alc882 }, + { .id = 0x10ec0662, .rev = 0x100101, .name = "ALC662 rev1", + .patch = patch_alc662 }, ++ { .id = 0x10ec0662, .rev = 0x100300, .name = "ALC662 rev3", ++ .patch = patch_alc662 }, + { .id = 0x10ec0663, .name = "ALC663", .patch = patch_alc662 }, + { .id = 0x10ec0880, .name = "ALC880", .patch = patch_alc880 }, + { .id = 0x10ec0882, .name = "ALC882", .patch = patch_alc882 }, diff --git a/queue-2.6.33/epoll-fix-spurious-lockdep-warnings.patch b/queue-2.6.33/epoll-fix-spurious-lockdep-warnings.patch new file mode 100644 index 0000000..a6f4204 --- /dev/null +++ b/queue-2.6.33/epoll-fix-spurious-lockdep-warnings.patch @@ -0,0 +1,137 @@ +From d8805e633e054c816c47cb6e727c81f156d9253d Mon Sep 17 00:00:00 2001 +From: Nelson Elhage <nelhage@nelhage.com> +Date: Mon, 31 Oct 2011 17:13:14 -0700 +Subject: epoll: fix spurious lockdep warnings + +From: Nelson Elhage <nelhage@nelhage.com> + +commit d8805e633e054c816c47cb6e727c81f156d9253d upstream. + +epoll can acquire recursively acquire ep->mtx on multiple "struct +eventpoll"s at once in the case where one epoll fd is monitoring another +epoll fd. This is perfectly OK, since we're careful about the lock +ordering, but it causes spurious lockdep warnings. Annotate the recursion +using mutex_lock_nested, and add a comment explaining the nesting rules +for good measure. + +Recent versions of systemd are triggering this, and it can also be +demonstrated with the following trivial test program: + +--------------------8<-------------------- + +int main(void) { + int e1, e2; + struct epoll_event evt = { + .events = EPOLLIN + }; + + e1 = epoll_create1(0); + e2 = epoll_create1(0); + epoll_ctl(e1, EPOLL_CTL_ADD, e2, &evt); + return 0; +} +--------------------8<-------------------- + +Reported-by: Paul Bolle <pebolle@tiscali.nl> +Tested-by: Paul Bolle <pebolle@tiscali.nl> +Signed-off-by: Nelson Elhage <nelhage@nelhage.com> +Acked-by: Jason Baron <jbaron@redhat.com> +Cc: Dave Jones <davej@redhat.com> +Cc: Davide Libenzi <davidel@xmailserver.org> +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/eventpoll.c | 25 ++++++++++++++++++------- + 1 file changed, 18 insertions(+), 7 deletions(-) + +--- a/fs/eventpoll.c ++++ b/fs/eventpoll.c +@@ -70,6 +70,15 @@ + * simultaneous inserts (A into B and B into A) from racing and + * constructing a cycle without either insert observing that it is + * going to. ++ * It is necessary to acquire multiple "ep->mtx"es at once in the ++ * case when one epoll fd is added to another. In this case, we ++ * always acquire the locks in the order of nesting (i.e. after ++ * epoll_ctl(e1, EPOLL_CTL_ADD, e2), e1->mtx will always be acquired ++ * before e2->mtx). Since we disallow cycles of epoll file ++ * descriptors, this ensures that the mutexes are well-ordered. In ++ * order to communicate this nesting to lockdep, when walking a tree ++ * of epoll file descriptors, we use the current recursion depth as ++ * the lockdep subkey. + * It is possible to drop the "ep->mtx" and to use the global + * mutex "epmutex" (together with "ep->lock") to have it working, + * but having "ep->mtx" will make the interface more scalable. +@@ -452,13 +461,15 @@ static void ep_unregister_pollwait(struc + * @ep: Pointer to the epoll private data structure. + * @sproc: Pointer to the scan callback. + * @priv: Private opaque data passed to the @sproc callback. ++ * @depth: The current depth of recursive f_op->poll calls. + * + * Returns: The same integer error code returned by the @sproc callback. + */ + static int ep_scan_ready_list(struct eventpoll *ep, + int (*sproc)(struct eventpoll *, + struct list_head *, void *), +- void *priv) ++ void *priv, ++ int depth) + { + int error, pwake = 0; + unsigned long flags; +@@ -469,7 +480,7 @@ static int ep_scan_ready_list(struct eve + * We need to lock this because we could be hit by + * eventpoll_release_file() and epoll_ctl(). + */ +- mutex_lock(&ep->mtx); ++ mutex_lock_nested(&ep->mtx, depth); + + /* + * Steal the ready list, and re-init the original one to the +@@ -658,7 +669,7 @@ static int ep_read_events_proc(struct ev + + static int ep_poll_readyevents_proc(void *priv, void *cookie, int call_nests) + { +- return ep_scan_ready_list(priv, ep_read_events_proc, NULL); ++ return ep_scan_ready_list(priv, ep_read_events_proc, NULL, call_nests + 1); + } + + static unsigned int ep_eventpoll_poll(struct file *file, poll_table *wait) +@@ -724,7 +735,7 @@ void eventpoll_release_file(struct file + + ep = epi->ep; + list_del_init(&epi->fllink); +- mutex_lock(&ep->mtx); ++ mutex_lock_nested(&ep->mtx, 0); + ep_remove(ep, epi); + mutex_unlock(&ep->mtx); + } +@@ -1120,7 +1131,7 @@ static int ep_send_events(struct eventpo + esed.maxevents = maxevents; + esed.events = events; + +- return ep_scan_ready_list(ep, ep_send_events_proc, &esed); ++ return ep_scan_ready_list(ep, ep_send_events_proc, &esed, 0); + } + + static int ep_poll(struct eventpoll *ep, struct epoll_event __user *events, +@@ -1215,7 +1226,7 @@ static int ep_loop_check_proc(void *priv + struct rb_node *rbp; + struct epitem *epi; + +- mutex_lock(&ep->mtx); ++ mutex_lock_nested(&ep->mtx, call_nests + 1); + for (rbp = rb_first(&ep->rbr); rbp; rbp = rb_next(rbp)) { + epi = rb_entry(rbp, struct epitem, rbn); + if (unlikely(is_file_epoll(epi->ffd.file))) { +@@ -1357,7 +1368,7 @@ SYSCALL_DEFINE4(epoll_ctl, int, epfd, in + } + + +- mutex_lock(&ep->mtx); ++ mutex_lock_nested(&ep->mtx, 0); + + /* + * Try to lookup the file inside our RB tree, Since we grabbed "mtx" diff --git a/queue-2.6.33/ipr-always-initiate-hard-reset-in-kdump-kernel.patch b/queue-2.6.33/ipr-always-initiate-hard-reset-in-kdump-kernel.patch new file mode 100644 index 0000000..3a9b5ec --- /dev/null +++ b/queue-2.6.33/ipr-always-initiate-hard-reset-in-kdump-kernel.patch @@ -0,0 +1,38 @@ +From 5d7c20b7fa5c6ca19e871b4050e321c99d32bd43 Mon Sep 17 00:00:00 2001 +From: Anton Blanchard <anton@samba.org> +Date: Mon, 1 Aug 2011 19:43:45 +1000 +Subject: [SCSI] ipr: Always initiate hard reset in kdump kernel + +From: Anton Blanchard <anton@samba.org> + +commit 5d7c20b7fa5c6ca19e871b4050e321c99d32bd43 upstream. + +During kdump testing I noticed timeouts when initialising each IPR +adapter. While the driver has logic to detect an adapter in an +indeterminate state, it wasn't triggering and each adapter went +through a 5 minute timeout before finally going operational. + +Some analysis showed the needs_hard_reset flag wasn't getting set. +We can check the reset_devices kernel parameter which is set by +kdump and force a full reset. This fixes the problem. + +Signed-off-by: Anton Blanchard <anton@samba.org> +Acked-by: Brian King <brking@linux.vnet.ibm.com> +Signed-off-by: James Bottomley <JBottomley@Parallels.com> +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> + +--- + drivers/scsi/ipr.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/drivers/scsi/ipr.c ++++ b/drivers/scsi/ipr.c +@@ -7673,7 +7673,7 @@ static int __devinit ipr_probe_ioa(struc + uproc = readl(ioa_cfg->regs.sense_uproc_interrupt_reg); + if ((mask & IPR_PCII_HRRQ_UPDATED) == 0 || (uproc & IPR_UPROCI_RESET_ALERT)) + ioa_cfg->needs_hard_reset = 1; +- if (interrupts & IPR_PCII_ERROR_INTERRUPTS) ++ if ((interrupts & IPR_PCII_ERROR_INTERRUPTS) || reset_devices) + ioa_cfg->needs_hard_reset = 1; + if (interrupts & IPR_PCII_IOA_UNIT_CHECKED) + ioa_cfg->ioa_unit_checked = 1; diff --git a/queue-2.6.33/libsas-set-sas_address-and-device-type-of-rphy.patch b/queue-2.6.33/libsas-set-sas_address-and-device-type-of-rphy.patch new file mode 100644 index 0000000..ca2cbff --- /dev/null +++ b/queue-2.6.33/libsas-set-sas_address-and-device-type-of-rphy.patch @@ -0,0 +1,32 @@ +From bb041a0e9c31229071b6e56e1d0d8374af0d2038 Mon Sep 17 00:00:00 2001 +From: Jack Wang <jack_wang@usish.com> +Date: Fri, 23 Sep 2011 14:32:32 +0800 +Subject: [SCSI] libsas: set sas_address and device type of rphy + +From: Jack Wang <jack_wang@usish.com> + +commit bb041a0e9c31229071b6e56e1d0d8374af0d2038 upstream. + +Libsas forget to set the sas_address and device type of rphy lead to file +under /sys/class/sas_x show wrong value, fix that. + +Signed-off-by: Jack Wang <jack_wang@usish.com> +Tested-by: Crystal Yu <crystal_yu@usish.com> +Signed-off-by: James Bottomley <JBottomley@Parallels.com> +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> + +--- + drivers/scsi/libsas/sas_expander.c | 2 ++ + 1 file changed, 2 insertions(+) + +--- a/drivers/scsi/libsas/sas_expander.c ++++ b/drivers/scsi/libsas/sas_expander.c +@@ -198,6 +198,8 @@ static void sas_set_ex_phy(struct domain + phy->virtual = dr->virtual; + phy->last_da_index = -1; + ++ phy->phy->identify.sas_address = SAS_ADDR(phy->attached_sas_addr); ++ phy->phy->identify.device_type = phy->attached_dev_type; + phy->phy->identify.initiator_port_protocols = phy->attached_iproto; + phy->phy->identify.target_port_protocols = phy->attached_tproto; + phy->phy->identify.phy_identifier = phy_id; diff --git a/queue-2.6.33/series b/queue-2.6.33/series index a7c93cc..40b269f 100644 --- a/queue-2.6.33/series +++ b/queue-2.6.33/series @@ -49,3 +49,19 @@ hid-usbhid-add-support-for-sigma-micro-chip.patch hwmon-w83627ehf-properly-report-thermal-diode-sensors.patch x25-prevent-skb-overreads-when-checking-call-user-data.patch block-check-for-proper-length-of-iov-entries-earlier-in.patch +staging-quatech_usb2-potential-lost-wakeup-scenario-in-tiocmiwait.patch +usb-qcserial-add-device-id-for-hp-un2430-mobile-broadband-module.patch +xhci-mem.c-check-for-ring-first_seg-null.patch +ipr-always-initiate-hard-reset-in-kdump-kernel.patch +libsas-set-sas_address-and-device-type-of-rphy.patch +alsa-hda-add-new-revision-for-alc662.patch +x86-fix-compilation-bug-in-kprobes-twobyte_is_boostable.patch +epoll-fix-spurious-lockdep-warnings.patch +usbmon-vs.-tcpdump-fix-dropped-packet-count.patch +usb-storage-use-normalized-sense-when-emulating-autosense.patch +usb-core-devio.c-check-for-printer-class-specific-request.patch +usb-pid_ns-ensure-pid-is-not-freed-during.patch +usb-cdc-acm-owen-si-30-support.patch +usb-pl2303-add-id-for-smart-device.patch +usb-ftdi_sio-add-pid-for-sony-ericsson-urban.patch +usb-ftdi_sio-support-ti-luminary-micro-stellaris-bd-icdi.patch diff --git a/queue-2.6.33/staging-quatech_usb2-potential-lost-wakeup-scenario-in-tiocmiwait.patch b/queue-2.6.33/staging-quatech_usb2-potential-lost-wakeup-scenario-in-tiocmiwait.patch new file mode 100644 index 0000000..305f636 --- /dev/null +++ b/queue-2.6.33/staging-quatech_usb2-potential-lost-wakeup-scenario-in-tiocmiwait.patch @@ -0,0 +1,65 @@ +From e8df1674d383d2ecc6efa8d7dba74c03aafdfdd7 Mon Sep 17 00:00:00 2001 +From: Kautuk Consul <consul.kautuk@gmail.com> +Date: Wed, 14 Sep 2011 08:56:21 +0530 +Subject: staging: quatech_usb2: Potential lost wakeup scenario in TIOCMIWAIT + +From: Kautuk Consul <consul.kautuk@gmail.com> + +commit e8df1674d383d2ecc6efa8d7dba74c03aafdfdd7 upstream. + +If the usermode app does an ioctl over this serial device by +using TIOCMIWAIT, then the code will wait by setting the current +task state to TASK_INTERRUPTIBLE and then calling schedule(). +This will be woken up by the qt2_process_modem_status on URB +completion when the port_extra->shadowMSR is set to the new +modem status. + +However, this could result in a lost wakeup scenario due to a race +in the logic in the qt2_ioctl(TIOCMIWAIT) loop and the URB completion +for new modem status in qt2_process_modem_status. +Due to this, the usermode app's task will continue to sleep despite a +change in the modem status. + +Signed-off-by: Kautuk Consul <consul.kautuk@gmail.com> +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> + +--- + drivers/staging/quatech_usb2/quatech_usb2.c | 9 +++++++-- + 1 file changed, 7 insertions(+), 2 deletions(-) + +--- a/drivers/staging/quatech_usb2/quatech_usb2.c ++++ b/drivers/staging/quatech_usb2/quatech_usb2.c +@@ -921,9 +921,10 @@ static int qt2_ioctl(struct tty_struct * + dbg("%s() port %d, cmd == TIOCMIWAIT enter", + __func__, port->number); + prev_msr_value = port_extra->shadowMSR & QT2_SERIAL_MSR_MASK; ++ barrier(); ++ __set_current_state(TASK_INTERRUPTIBLE); + while (1) { + add_wait_queue(&port_extra->wait, &wait); +- set_current_state(TASK_INTERRUPTIBLE); + schedule(); + dbg("%s(): port %d, cmd == TIOCMIWAIT here\n", + __func__, port->number); +@@ -931,9 +932,12 @@ static int qt2_ioctl(struct tty_struct * + /* see if a signal woke us up */ + if (signal_pending(current)) + return -ERESTARTSYS; ++ set_current_state(TASK_INTERRUPTIBLE); + msr_value = port_extra->shadowMSR & QT2_SERIAL_MSR_MASK; +- if (msr_value == prev_msr_value) ++ if (msr_value == prev_msr_value) { ++ __set_current_state(TASK_RUNNING); + return -EIO; /* no change - error */ ++ } + if ((arg & TIOCM_RNG && + ((prev_msr_value & QT2_SERIAL_MSR_RI) == + (msr_value & QT2_SERIAL_MSR_RI))) || +@@ -946,6 +950,7 @@ static int qt2_ioctl(struct tty_struct * + (arg & TIOCM_CTS && + ((prev_msr_value & QT2_SERIAL_MSR_CTS) == + (msr_value & QT2_SERIAL_MSR_CTS)))) { ++ __set_current_state(TASK_RUNNING); + return 0; + } + } /* end inifinite while */ diff --git a/queue-2.6.33/usb-cdc-acm-owen-si-30-support.patch b/queue-2.6.33/usb-cdc-acm-owen-si-30-support.patch new file mode 100644 index 0000000..62a1588 --- /dev/null +++ b/queue-2.6.33/usb-cdc-acm-owen-si-30-support.patch @@ -0,0 +1,43 @@ +From 65e52f41fa944cef2e6d4222b8c54f46cc575214 Mon Sep 17 00:00:00 2001 +From: Denis Pershin <dyp@perchine.com> +Date: Sun, 4 Sep 2011 17:37:21 +0700 +Subject: usb: cdc-acm: Owen SI-30 support + +From: Denis Pershin <dyp@perchine.com> + +commit 65e52f41fa944cef2e6d4222b8c54f46cc575214 upstream. + +here is the patch to support Owen SI-30 device. +This is a pulse counter controller. +http://www.owen.ru/en/catalog/93788515 + +usb-drivers output: +T: Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 4 Spd=12 MxCh= 0 +D: Ver= 2.00 Cls=02(commc) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1 +P: Vendor=03eb ProdID=0030 Rev=01.01 +C: #Ifs= 2 Cfg#= 1 Atr=c0 MxPwr=0mA +I: If#= 0 Alt= 0 #EPs= 1 Cls=02(commc) Sub=02 Prot=00 Driver=cdc_acm +I: If#= 1 Alt= 0 #EPs= 2 Cls=0a(data ) Sub=00 Prot=00 Driver=cdc_acm + +This patch is installed on my home system which receives data from this +controller connected to cold water counter. + +Signed-off-by: Denis Pershin <dyp@perchine.com> +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 +@@ -1582,6 +1582,9 @@ static struct usb_device_id acm_ids[] = + { NOKIA_PCSUITE_ACM_INFO(0x0108), }, /* Nokia 5320 XpressMusic 2G */ + { NOKIA_PCSUITE_ACM_INFO(0x01f5), }, /* Nokia N97, RM-505 */ + ++ /* Support for Owen devices */ ++ { USB_DEVICE(0x03eb, 0x0030), }, /* Owen SI30 */ ++ + /* NOTE: non-Nokia COMM/ACM/0xff is likely MSFT RNDIS... NOT a modem! */ + + /* control interfaces with various AT-command sets */ diff --git a/queue-2.6.33/usb-core-devio.c-check-for-printer-class-specific-request.patch b/queue-2.6.33/usb-core-devio.c-check-for-printer-class-specific-request.patch new file mode 100644 index 0000000..38f1933 --- /dev/null +++ b/queue-2.6.33/usb-core-devio.c-check-for-printer-class-specific-request.patch @@ -0,0 +1,74 @@ +From 393cbb5151ecda9f9e14e3082d048dd27a1ff9f6 Mon Sep 17 00:00:00 2001 +From: Matthias Dellweg <2500@gmx.de> +Date: Sun, 25 Sep 2011 14:26:25 +0200 +Subject: usb/core/devio.c: Check for printer class specific request + +From: Matthias Dellweg <2500@gmx.de> + +commit 393cbb5151ecda9f9e14e3082d048dd27a1ff9f6 upstream. + +In the usb printer class specific request get_device_id the value of +wIndex is (interface << 8 | altsetting) instead of just interface. +This enables the detection of some printers with libusb. + +Acked-by: Alan Stern <stern@rowland.harvard.edu> +Signed-off-by: Matthias Dellweg <2500@gmx.de> +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> + +--- + drivers/usb/core/devio.c | 21 ++++++++++++++++++--- + 1 file changed, 18 insertions(+), 3 deletions(-) + +--- a/drivers/usb/core/devio.c ++++ b/drivers/usb/core/devio.c +@@ -601,9 +601,10 @@ static int findintfep(struct usb_device + } + + static int check_ctrlrecip(struct dev_state *ps, unsigned int requesttype, +- unsigned int index) ++ unsigned int request, unsigned int index) + { + int ret = 0; ++ struct usb_host_interface *alt_setting; + + if (ps->dev->state != USB_STATE_UNAUTHENTICATED + && ps->dev->state != USB_STATE_ADDRESS +@@ -612,6 +613,19 @@ static int check_ctrlrecip(struct dev_st + if (USB_TYPE_VENDOR == (USB_TYPE_MASK & requesttype)) + return 0; + ++ /* ++ * check for the special corner case 'get_device_id' in the printer ++ * class specification, where wIndex is (interface << 8 | altsetting) ++ * instead of just interface ++ */ ++ if (requesttype == 0xa1 && request == 0) { ++ alt_setting = usb_find_alt_setting(ps->dev->actconfig, ++ index >> 8, index & 0xff); ++ if (alt_setting ++ && alt_setting->desc.bInterfaceClass == USB_CLASS_PRINTER) ++ index >>= 8; ++ } ++ + index &= 0xff; + switch (requesttype & USB_RECIP_MASK) { + case USB_RECIP_ENDPOINT: +@@ -760,7 +774,8 @@ static int proc_control(struct dev_state + + if (copy_from_user(&ctrl, arg, sizeof(ctrl))) + return -EFAULT; +- ret = check_ctrlrecip(ps, ctrl.bRequestType, ctrl.wIndex); ++ ret = check_ctrlrecip(ps, ctrl.bRequestType, ctrl.bRequest, ++ ctrl.wIndex); + if (ret) + return ret; + wLength = ctrl.wLength; /* To suppress 64k PAGE_SIZE warning */ +@@ -1082,7 +1097,7 @@ static int proc_do_submiturb(struct dev_ + kfree(dr); + return -EINVAL; + } +- ret = check_ctrlrecip(ps, dr->bRequestType, ++ ret = check_ctrlrecip(ps, dr->bRequestType, dr->bRequest, + le16_to_cpup(&dr->wIndex)); + if (ret) { + kfree(dr); diff --git a/queue-2.6.33/usb-ftdi_sio-add-pid-for-sony-ericsson-urban.patch b/queue-2.6.33/usb-ftdi_sio-add-pid-for-sony-ericsson-urban.patch new file mode 100644 index 0000000..e8fe46b --- /dev/null +++ b/queue-2.6.33/usb-ftdi_sio-add-pid-for-sony-ericsson-urban.patch @@ -0,0 +1,47 @@ +From 74bdf22b5c3858b06af46f19d05c23e76c40a3bb Mon Sep 17 00:00:00 2001 +From: Hakan Kvist <hakan.kvist@sonyericsson.com> +Date: Mon, 3 Oct 2011 13:41:15 +0200 +Subject: USB: ftdi_sio: add PID for Sony Ericsson Urban + +From: Hakan Kvist <hakan.kvist@sonyericsson.com> + +commit 74bdf22b5c3858b06af46f19d05c23e76c40a3bb upstream. + +Add PID 0xfc8a, 0xfc8b for device Sony Ericsson Urban + +Signed-off-by: Hakan Kvist <hakan.kvist@sonyericsson.com> +Signed-off-by: Oskar Andero <oskar.andero@sonyericsson.com> +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> + +--- + drivers/usb/serial/ftdi_sio.c | 2 ++ + drivers/usb/serial/ftdi_sio_ids.h | 6 ++++-- + 2 files changed, 6 insertions(+), 2 deletions(-) + +--- a/drivers/usb/serial/ftdi_sio.c ++++ b/drivers/usb/serial/ftdi_sio.c +@@ -205,6 +205,8 @@ static struct usb_device_id id_table_com + { USB_DEVICE(FTDI_VID, FTDI_XF_640_PID) }, + { USB_DEVICE(FTDI_VID, FTDI_XF_642_PID) }, + { USB_DEVICE(FTDI_VID, FTDI_DSS20_PID) }, ++ { USB_DEVICE(FTDI_VID, FTDI_URBAN_0_PID) }, ++ { USB_DEVICE(FTDI_VID, FTDI_URBAN_1_PID) }, + { USB_DEVICE(FTDI_NF_RIC_VID, FTDI_NF_RIC_PID) }, + { USB_DEVICE(FTDI_VID, FTDI_VNHCPCUSB_D_PID) }, + { USB_DEVICE(FTDI_VID, FTDI_MTXORB_0_PID) }, +--- a/drivers/usb/serial/ftdi_sio_ids.h ++++ b/drivers/usb/serial/ftdi_sio_ids.h +@@ -399,9 +399,11 @@ + #define PROTEGO_SPECIAL_4 0xFC73 /* special/unknown device */ + + /* +- * DSS-20 Sync Station for Sony Ericsson P800 ++ * Sony Ericsson product ids + */ +-#define FTDI_DSS20_PID 0xFC82 ++#define FTDI_DSS20_PID 0xFC82 /* DSS-20 Sync Station for Sony Ericsson P800 */ ++#define FTDI_URBAN_0_PID 0xFC8A /* Sony Ericsson Urban, uart #0 */ ++#define FTDI_URBAN_1_PID 0xFC8B /* Sony Ericsson Urban, uart #1 */ + + /* www.irtrans.de device */ + #define FTDI_IRTRANS_PID 0xFC60 /* Product Id */ diff --git a/queue-2.6.33/usb-ftdi_sio-support-ti-luminary-micro-stellaris-bd-icdi.patch b/queue-2.6.33/usb-ftdi_sio-support-ti-luminary-micro-stellaris-bd-icdi.patch new file mode 100644 index 0000000..2e36166 --- /dev/null +++ b/queue-2.6.33/usb-ftdi_sio-support-ti-luminary-micro-stellaris-bd-icdi.patch @@ -0,0 +1,48 @@ +From 3687f641307eeff6f7fe31a88dc39db88e89238b Mon Sep 17 00:00:00 2001 +From: Peter Stuge <peter@stuge.se> +Date: Mon, 10 Oct 2011 03:34:54 +0200 +Subject: USB: ftdi_sio: Support TI/Luminary Micro Stellaris BD-ICDI + Board + +From: Peter Stuge <peter@stuge.se> + +commit 3687f641307eeff6f7fe31a88dc39db88e89238b upstream. + +Some Stellaris evaluation kits have the JTAG/SWD FTDI chip onboard, +and some, like EK-LM3S9B90, come with a separate In-Circuit Debugger +Interface Board. The ICDI board can also be used stand-alone, for +other boards and chips than the kit it came with. The ICDI has both +old style 20-pin JTAG connector and new style JTAG/SWD 10-pin 1.27mm +pitch connector. + +Tested with EK-LM3S9B90, where the BD-ICDI board is included. + +Signed-off-by: Peter Stuge <peter@stuge.se> +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> + +--- + drivers/usb/serial/ftdi_sio.c | 2 ++ + drivers/usb/serial/ftdi_sio_ids.h | 1 + + 2 files changed, 3 insertions(+) + +--- a/drivers/usb/serial/ftdi_sio.c ++++ b/drivers/usb/serial/ftdi_sio.c +@@ -744,6 +744,8 @@ static struct usb_device_id id_table_com + .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk }, + { USB_DEVICE(FTDI_VID, LMI_LM3S_EVAL_BOARD_PID), + .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk }, ++ { USB_DEVICE(FTDI_VID, LMI_LM3S_ICDI_BOARD_PID), ++ .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk }, + { USB_DEVICE(FTDI_VID, FTDI_TURTELIZER_PID), + .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk }, + { USB_DEVICE(RATOC_VENDOR_ID, RATOC_PRODUCT_ID_USB60F) }, +--- a/drivers/usb/serial/ftdi_sio_ids.h ++++ b/drivers/usb/serial/ftdi_sio_ids.h +@@ -48,6 +48,7 @@ + /* FTDI 2332C Dual channel device, side A=245 FIFO (JTAG), Side B=RS232 UART */ + #define LMI_LM3S_DEVEL_BOARD_PID 0xbcd8 + #define LMI_LM3S_EVAL_BOARD_PID 0xbcd9 ++#define LMI_LM3S_ICDI_BOARD_PID 0xbcda + + #define FTDI_TURTELIZER_PID 0xBDC8 /* JTAG/RS-232 adapter by egnite GmBH */ + diff --git a/queue-2.6.33/usb-pid_ns-ensure-pid-is-not-freed-during.patch b/queue-2.6.33/usb-pid_ns-ensure-pid-is-not-freed-during.patch new file mode 100644 index 0000000..7547e05 --- /dev/null +++ b/queue-2.6.33/usb-pid_ns-ensure-pid-is-not-freed-during.patch @@ -0,0 +1,46 @@ +From aec01c5895051849ed842dc5b8794017a7751f28 Mon Sep 17 00:00:00 2001 +From: Serge Hallyn <serge.hallyn@canonical.com> +Date: Mon, 26 Sep 2011 10:18:29 -0500 +Subject: USB: pid_ns: ensure pid is not freed during + kill_pid_info_as_uid + +From: Serge Hallyn <serge.hallyn@canonical.com> + +commit aec01c5895051849ed842dc5b8794017a7751f28 upstream. + +Alan Stern points out that after spin_unlock(&ps->lock) there is no +guarantee that ps->pid won't be freed. Since kill_pid_info_as_uid() is +called after the spin_unlock(), the pid passed to it must be pinned. + +Reported-by: Alan Stern <stern@rowland.harvard.edu> +Signed-off-by: Serge Hallyn <serge.hallyn@canonical.com> +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> + +--- + drivers/usb/core/devio.c | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +--- a/drivers/usb/core/devio.c ++++ b/drivers/usb/core/devio.c +@@ -403,7 +403,7 @@ static void async_completed(struct urb * + sinfo.si_errno = as->status; + sinfo.si_code = SI_ASYNCIO; + sinfo.si_addr = as->userurb; +- pid = as->pid; ++ pid = get_pid(as->pid); + uid = as->uid; + euid = as->euid; + secid = as->secid; +@@ -416,9 +416,11 @@ static void async_completed(struct urb * + cancel_bulk_urbs(ps, as->bulk_addr); + spin_unlock(&ps->lock); + +- if (signr) ++ if (signr) { + kill_pid_info_as_uid(sinfo.si_signo, &sinfo, pid, uid, + euid, secid); ++ put_pid(pid); ++ } + + wake_up(&ps->wait); + } diff --git a/queue-2.6.33/usb-pl2303-add-id-for-smart-device.patch b/queue-2.6.33/usb-pl2303-add-id-for-smart-device.patch new file mode 100644 index 0000000..550da62 --- /dev/null +++ b/queue-2.6.33/usb-pl2303-add-id-for-smart-device.patch @@ -0,0 +1,42 @@ +From 598f0b703506da841d3459dc0c48506be14d1778 Mon Sep 17 00:00:00 2001 +From: Eric Benoit <eric@ecks.ca> +Date: Sat, 24 Sep 2011 02:04:50 -0400 +Subject: USB: pl2303: add id for SMART device + +From: Eric Benoit <eric@ecks.ca> + +commit 598f0b703506da841d3459dc0c48506be14d1778 upstream. + +Add vendor and product ID for the SMART USB to serial adapter. These +were meant to be used with their SMART Board whiteboards, but can be +re-purposed for other tasks. Tested and working (at at least 9600 bps). + +Signed-off-by: Eric Benoit <eric@ecks.ca> +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> + +--- + drivers/usb/serial/pl2303.c | 1 + + drivers/usb/serial/pl2303.h | 5 +++++ + 2 files changed, 6 insertions(+) + +--- a/drivers/usb/serial/pl2303.c ++++ b/drivers/usb/serial/pl2303.c +@@ -101,6 +101,7 @@ static struct usb_device_id id_table [] + { USB_DEVICE(SANWA_VENDOR_ID, SANWA_PRODUCT_ID) }, + { USB_DEVICE(ADLINK_VENDOR_ID, ADLINK_ND6530_PRODUCT_ID) }, + { USB_DEVICE(WINCHIPHEAD_VENDOR_ID, WINCHIPHEAD_USBSER_PRODUCT_ID) }, ++ { USB_DEVICE(SMART_VENDOR_ID, SMART_PRODUCT_ID) }, + { } /* Terminating entry */ + }; + +--- a/drivers/usb/serial/pl2303.h ++++ b/drivers/usb/serial/pl2303.h +@@ -144,3 +144,8 @@ + /* WinChipHead USB->RS 232 adapter */ + #define WINCHIPHEAD_VENDOR_ID 0x4348 + #define WINCHIPHEAD_USBSER_PRODUCT_ID 0x5523 ++ ++/* SMART USB Serial Adapter */ ++#define SMART_VENDOR_ID 0x0b8c ++#define SMART_PRODUCT_ID 0x2303 ++ diff --git a/queue-2.6.33/usb-qcserial-add-device-id-for-hp-un2430-mobile-broadband-module.patch b/queue-2.6.33/usb-qcserial-add-device-id-for-hp-un2430-mobile-broadband-module.patch new file mode 100644 index 0000000..f31fd6d --- /dev/null +++ b/queue-2.6.33/usb-qcserial-add-device-id-for-hp-un2430-mobile-broadband-module.patch @@ -0,0 +1,28 @@ +From 1bfac90d1b8e63a4d44158c3445d8fda3fb6d5eb Mon Sep 17 00:00:00 2001 +From: Rigbert Hamisch <rigbert@gmx.de> +Date: Tue, 27 Sep 2011 10:46:43 +0200 +Subject: USB: qcserial: add device ID for "HP un2430 Mobile Broadband Module" + +From: Rigbert Hamisch <rigbert@gmx.de> + +commit 1bfac90d1b8e63a4d44158c3445d8fda3fb6d5eb upstream. + +add device ID for "HP un2430 Mobile Broadband Module" + +Signed-off-by: Rigbert Hamisch <rigbert@gmx.de> +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> + +--- + drivers/usb/serial/qcserial.c | 1 + + 1 file changed, 1 insertion(+) + +--- a/drivers/usb/serial/qcserial.c ++++ b/drivers/usb/serial/qcserial.c +@@ -26,6 +26,7 @@ static struct usb_device_id id_table[] = + {USB_DEVICE(0x05c6, 0x9212)}, /* Acer Gobi Modem Device */ + {USB_DEVICE(0x03f0, 0x1f1d)}, /* HP un2400 Gobi Modem Device */ + {USB_DEVICE(0x03f0, 0x201d)}, /* HP un2400 Gobi QDL Device */ ++ {USB_DEVICE(0x03f0, 0x371d)}, /* HP un2430 Mobile Broadband Module */ + {USB_DEVICE(0x04da, 0x250d)}, /* Panasonic Gobi Modem device */ + {USB_DEVICE(0x04da, 0x250c)}, /* Panasonic Gobi QDL device */ + {USB_DEVICE(0x413c, 0x8172)}, /* Dell Gobi Modem device */ diff --git a/queue-2.6.33/usb-storage-use-normalized-sense-when-emulating-autosense.patch b/queue-2.6.33/usb-storage-use-normalized-sense-when-emulating-autosense.patch new file mode 100644 index 0000000..bac99fe --- /dev/null +++ b/queue-2.6.33/usb-storage-use-normalized-sense-when-emulating-autosense.patch @@ -0,0 +1,101 @@ +From e16da02fcdf1c5e824432f88abf42623dafdf191 Mon Sep 17 00:00:00 2001 +From: Luben Tuikov <ltuikov@yahoo.com> +Date: Thu, 11 Nov 2010 15:43:11 -0800 +Subject: USB: storage: Use normalized sense when emulating autosense + +From: Luben Tuikov <ltuikov@yahoo.com> + +commit e16da02fcdf1c5e824432f88abf42623dafdf191 upstream. + +This patch solves two things: +1) Enables autosense emulation code to correctly +interpret descriptor format sense data, and +2) Fixes a bug whereby the autosense emulation +code would overwrite descriptor format sense data +with SENSE KEY HARDWARE ERROR in fixed format, to +incorrectly look like this: + +Oct 21 14:11:07 localhost kernel: sd 7:0:0:0: [sdc] Sense Key : Recovered Error [current] [descriptor] +Oct 21 14:11:07 localhost kernel: Descriptor sense data with sense descriptors (in hex): +Oct 21 14:11:07 localhost kernel: 72 01 04 1d 00 00 00 0e 09 0c 00 00 00 00 00 00 +Oct 21 14:11:07 localhost kernel: 00 4f 00 c2 00 50 +Oct 21 14:11:07 localhost kernel: sd 7:0:0:0: [sdc] ASC=0x4 ASCQ=0x1d + +Signed-off-by: Luben Tuikov <ltuikov@yahoo.com> +Acked-by: Alan Stern <stern@rowland.harvard.edu> +Acked-by: Matthew Dharm <mdharm-usb@one-eyed-alien.net> +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> + +--- + drivers/usb/storage/transport.c | 34 +++++++++++++++++++--------------- + 1 file changed, 19 insertions(+), 15 deletions(-) + +--- a/drivers/usb/storage/transport.c ++++ b/drivers/usb/storage/transport.c +@@ -693,6 +693,9 @@ void usb_stor_invoke_transport(struct sc + int temp_result; + struct scsi_eh_save ses; + int sense_size = US_SENSE_SIZE; ++ struct scsi_sense_hdr sshdr; ++ const u8 *scdd; ++ u8 fm_ili; + + /* device supports and needs bigger sense buffer */ + if (us->fflags & US_FL_SANE_SENSE) +@@ -776,32 +779,30 @@ Retry_Sense: + srb->sense_buffer[7] = (US_SENSE_SIZE - 8); + } + ++ scsi_normalize_sense(srb->sense_buffer, SCSI_SENSE_BUFFERSIZE, ++ &sshdr); ++ + US_DEBUGP("-- Result from auto-sense is %d\n", temp_result); + US_DEBUGP("-- code: 0x%x, key: 0x%x, ASC: 0x%x, ASCQ: 0x%x\n", +- srb->sense_buffer[0], +- srb->sense_buffer[2] & 0xf, +- srb->sense_buffer[12], +- srb->sense_buffer[13]); ++ sshdr.response_code, sshdr.sense_key, ++ sshdr.asc, sshdr.ascq); + #ifdef CONFIG_USB_STORAGE_DEBUG +- usb_stor_show_sense( +- srb->sense_buffer[2] & 0xf, +- srb->sense_buffer[12], +- srb->sense_buffer[13]); ++ usb_stor_show_sense(sshdr.sense_key, sshdr.asc, sshdr.ascq); + #endif + + /* set the result so the higher layers expect this data */ + srb->result = SAM_STAT_CHECK_CONDITION; + ++ scdd = scsi_sense_desc_find(srb->sense_buffer, ++ SCSI_SENSE_BUFFERSIZE, 4); ++ fm_ili = (scdd ? scdd[3] : srb->sense_buffer[2]) & 0xA0; ++ + /* We often get empty sense data. This could indicate that + * everything worked or that there was an unspecified + * problem. We have to decide which. + */ +- if ( /* Filemark 0, ignore EOM, ILI 0, no sense */ +- (srb->sense_buffer[2] & 0xaf) == 0 && +- /* No ASC or ASCQ */ +- srb->sense_buffer[12] == 0 && +- srb->sense_buffer[13] == 0) { +- ++ if (sshdr.sense_key == 0 && sshdr.asc == 0 && sshdr.ascq == 0 && ++ fm_ili == 0) { + /* If things are really okay, then let's show that. + * Zero out the sense buffer so the higher layers + * won't realize we did an unsolicited auto-sense. +@@ -816,7 +817,10 @@ Retry_Sense: + */ + } else { + srb->result = DID_ERROR << 16; +- srb->sense_buffer[2] = HARDWARE_ERROR; ++ if ((sshdr.response_code & 0x72) == 0x72) ++ srb->sense_buffer[1] = HARDWARE_ERROR; ++ else ++ srb->sense_buffer[2] = HARDWARE_ERROR; + } + } + } diff --git a/queue-2.6.33/usbmon-vs.-tcpdump-fix-dropped-packet-count.patch b/queue-2.6.33/usbmon-vs.-tcpdump-fix-dropped-packet-count.patch new file mode 100644 index 0000000..3ff5f19 --- /dev/null +++ b/queue-2.6.33/usbmon-vs.-tcpdump-fix-dropped-packet-count.patch @@ -0,0 +1,36 @@ +From 236c448cb6e7f82096101e1ace4b77f8b38f82c8 Mon Sep 17 00:00:00 2001 +From: Johannes Stezenbach <js@sig21.net> +Date: Thu, 8 Sep 2011 15:39:15 +0200 +Subject: usbmon vs. tcpdump: fix dropped packet count + +From: Johannes Stezenbach <js@sig21.net> + +commit 236c448cb6e7f82096101e1ace4b77f8b38f82c8 upstream. + +Report the number of dropped packets instead of zero +when using the binary usbmon interface with tcpdump. + +# tcpdump -i usbmon1 -w dump +tcpdump: listening on usbmon1, link-type USB_LINUX_MMAPPED (USB with padded Linux header), capture size 65535 bytes +^C2155 packets captured +2155 packets received by filter +1019 packets dropped by kernel + +Signed-off-by: Johannes Stezenbach <js@sig21.net> +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> + +--- + drivers/usb/mon/mon_bin.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/drivers/usb/mon/mon_bin.c ++++ b/drivers/usb/mon/mon_bin.c +@@ -1074,7 +1074,7 @@ static int mon_bin_ioctl(struct inode *i + nevents = mon_bin_queued(rp); + + sp = (struct mon_bin_stats __user *)arg; +- if (put_user(rp->cnt_lost, &sp->dropped)) ++ if (put_user(ndropped, &sp->dropped)) + return -EFAULT; + if (put_user(nevents, &sp->queued)) + return -EFAULT; diff --git a/queue-2.6.33/x86-fix-compilation-bug-in-kprobes-twobyte_is_boostable.patch b/queue-2.6.33/x86-fix-compilation-bug-in-kprobes-twobyte_is_boostable.patch new file mode 100644 index 0000000..77f2178 --- /dev/null +++ b/queue-2.6.33/x86-fix-compilation-bug-in-kprobes-twobyte_is_boostable.patch @@ -0,0 +1,96 @@ +From 315eb8a2a1b7f335d40ceeeb11b9e067475eb881 Mon Sep 17 00:00:00 2001 +From: Josh Stone <jistone@redhat.com> +Date: Mon, 24 Oct 2011 10:15:51 -0700 +Subject: x86: Fix compilation bug in kprobes' twobyte_is_boostable +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +From: Josh Stone <jistone@redhat.com> + +commit 315eb8a2a1b7f335d40ceeeb11b9e067475eb881 upstream. + +When compiling an i386_defconfig kernel with gcc-4.6.1-9.fc15.i686, I +noticed a warning about the asm operand for test_bit in kprobes' +can_boost. I discovered that this caused only the first long of +twobyte_is_boostable[] to be output. + +Jakub filed and fixed gcc PR50571 to correct the warning and this output +issue. But to solve it for less current gcc, we can make kprobes' +twobyte_is_boostable[] non-const, and it won't be optimized out. + +Before: + + CC arch/x86/kernel/kprobes.o + In file included from include/linux/bitops.h:22:0, + from include/linux/kernel.h:17, + from [...]/arch/x86/include/asm/percpu.h:44, + from [...]/arch/x86/include/asm/current.h:5, + from [...]/arch/x86/include/asm/processor.h:15, + from [...]/arch/x86/include/asm/atomic.h:6, + from include/linux/atomic.h:4, + from include/linux/mutex.h:18, + from include/linux/notifier.h:13, + from include/linux/kprobes.h:34, + from arch/x86/kernel/kprobes.c:43: + [...]/arch/x86/include/asm/bitops.h: In function ‘can_boost.part.1’: + [...]/arch/x86/include/asm/bitops.h:319:2: warning: use of memory input + without lvalue in asm operand 1 is deprecated [enabled by default] + + $ objdump -rd arch/x86/kernel/kprobes.o | grep -A1 -w bt + 551: 0f a3 05 00 00 00 00 bt %eax,0x0 + 554: R_386_32 .rodata.cst4 + + $ objdump -s -j .rodata.cst4 -j .data arch/x86/kernel/kprobes.o + + arch/x86/kernel/kprobes.o: file format elf32-i386 + + Contents of section .data: + 0000 48000000 00000000 00000000 00000000 H............... + Contents of section .rodata.cst4: + 0000 4c030000 L... + +Only a single long of twobyte_is_boostable[] is in the object file. + +After, without the const on twobyte_is_boostable: + + $ objdump -rd arch/x86/kernel/kprobes.o | grep -A1 -w bt + 551: 0f a3 05 20 00 00 00 bt %eax,0x20 + 554: R_386_32 .data + + $ objdump -s -j .rodata.cst4 -j .data arch/x86/kernel/kprobes.o + + arch/x86/kernel/kprobes.o: file format elf32-i386 + + Contents of section .data: + 0000 48000000 00000000 00000000 00000000 H............... + 0010 00000000 00000000 00000000 00000000 ................ + 0020 4c030000 0f000200 ffff0000 ffcff0c0 L............... + 0030 0000ffff 3bbbfff8 03ff2ebb 26bb2e77 ....;.......&..w + +Now all 32 bytes are output into .data instead. + +Signed-off-by: Josh Stone <jistone@redhat.com> +Cc: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com> +Cc: Jakub Jelinek <jakub@redhat.com> +Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> + +--- + arch/x86/kernel/kprobes.c | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +--- a/arch/x86/kernel/kprobes.c ++++ b/arch/x86/kernel/kprobes.c +@@ -74,8 +74,10 @@ DEFINE_PER_CPU(struct kprobe_ctlblk, kpr + /* + * Undefined/reserved opcodes, conditional jump, Opcode Extension + * Groups, and some special opcodes can not boost. ++ * This is non-const to keep gcc from statically optimizing it out, as ++ * variable_test_bit makes gcc think only *(unsigned long*) is used. + */ +-static const u32 twobyte_is_boostable[256 / 32] = { ++static u32 twobyte_is_boostable[256 / 32] = { + /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */ + /* ---------------------------------------------- */ + W(0x00, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0) | /* 00 */ diff --git a/queue-2.6.33/xhci-mem.c-check-for-ring-first_seg-null.patch b/queue-2.6.33/xhci-mem.c-check-for-ring-first_seg-null.patch new file mode 100644 index 0000000..5438d31 --- /dev/null +++ b/queue-2.6.33/xhci-mem.c-check-for-ring-first_seg-null.patch @@ -0,0 +1,61 @@ +From 0e6c7f746ea99089fb3263709075c20485a479ae Mon Sep 17 00:00:00 2001 +From: Kautuk Consul <consul.kautuk@gmail.com> +Date: Mon, 19 Sep 2011 16:53:12 -0700 +Subject: xhci-mem.c: Check for ring->first_seg != NULL + +From: Kautuk Consul <consul.kautuk@gmail.com> + +commit 0e6c7f746ea99089fb3263709075c20485a479ae upstream. + +There are 2 situations wherein the xhci_ring* might not get freed: +- When xhci_ring_alloc() -> xhci_segment_alloc() returns NULL and + we goto the fail: label in xhci_ring_alloc. In this case, the ring + will not get kfreed. +- When the num_segs argument to xhci_ring_alloc is passed as 0 and + we try to free the rung after that. + ( This doesn't really happen as of now in the code but we seem to + be entertaining num_segs=0 in xhci_ring_alloc ) + +This should be backported to kernels as old as 2.6.31. + +Signed-off-by: Kautuk Consul <consul.kautuk@gmail.com> +Signed-off-by: Sarah Sharp <sarah.a.sharp@linux.intel.com> +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> + +--- + drivers/usb/host/xhci-mem.c | 22 ++++++++++++---------- + 1 file changed, 12 insertions(+), 10 deletions(-) + +--- a/drivers/usb/host/xhci-mem.c ++++ b/drivers/usb/host/xhci-mem.c +@@ -110,18 +110,20 @@ void xhci_ring_free(struct xhci_hcd *xhc + struct xhci_segment *seg; + struct xhci_segment *first_seg; + +- if (!ring || !ring->first_seg) ++ if (!ring) + return; +- first_seg = ring->first_seg; +- seg = first_seg->next; +- xhci_dbg(xhci, "Freeing ring at %p\n", ring); +- while (seg != first_seg) { +- struct xhci_segment *next = seg->next; +- xhci_segment_free(xhci, seg); +- seg = next; ++ if (ring->first_seg) { ++ first_seg = ring->first_seg; ++ seg = first_seg->next; ++ xhci_dbg(xhci, "Freeing ring at %p\n", ring); ++ while (seg != first_seg) { ++ struct xhci_segment *next = seg->next; ++ xhci_segment_free(xhci, seg); ++ seg = next; ++ } ++ xhci_segment_free(xhci, first_seg); ++ ring->first_seg = NULL; + } +- xhci_segment_free(xhci, first_seg); +- ring->first_seg = NULL; + kfree(ring); + } + |