Magellan Linux

Annotation of /trunk/kernel-magellan/patches-3.6/0100-3.6.1-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1921 - (hide annotations) (download)
Fri Oct 26 08:33:00 2012 UTC (11 years, 6 months ago) by niro
File size: 75168 byte(s)
-3.6.3-magellan-r1
1 niro 1921 diff --git a/arch/arm/plat-omap/include/plat/omap-serial.h b/arch/arm/plat-omap/include/plat/omap-serial.h
2     index 1a52725..3a57644 100644
3     --- a/arch/arm/plat-omap/include/plat/omap-serial.h
4     +++ b/arch/arm/plat-omap/include/plat/omap-serial.h
5     @@ -42,10 +42,10 @@
6     #define OMAP_UART_WER_MOD_WKUP 0X7F
7    
8     /* Enable XON/XOFF flow control on output */
9     -#define OMAP_UART_SW_TX 0x04
10     +#define OMAP_UART_SW_TX 0x8
11    
12     /* Enable XON/XOFF flow control on input */
13     -#define OMAP_UART_SW_RX 0x04
14     +#define OMAP_UART_SW_RX 0x2
15    
16     #define OMAP_UART_SYSC_RESET 0X07
17     #define OMAP_UART_TCR_TRIG 0X0F
18     diff --git a/drivers/char/ttyprintk.c b/drivers/char/ttyprintk.c
19     index 46b77ed..a7c6d6a 100644
20     --- a/drivers/char/ttyprintk.c
21     +++ b/drivers/char/ttyprintk.c
22     @@ -67,7 +67,7 @@ static int tpk_printk(const unsigned char *buf, int count)
23     tmp[tpk_curr + 1] = '\0';
24     printk(KERN_INFO "%s%s", tpk_tag, tmp);
25     tpk_curr = 0;
26     - if (buf[i + 1] == '\n')
27     + if ((i + 1) < count && buf[i + 1] == '\n')
28     i++;
29     break;
30     case '\n':
31     diff --git a/drivers/firmware/efivars.c b/drivers/firmware/efivars.c
32     index 47408e8..d10c987 100644
33     --- a/drivers/firmware/efivars.c
34     +++ b/drivers/firmware/efivars.c
35     @@ -435,12 +435,23 @@ efivar_attr_read(struct efivar_entry *entry, char *buf)
36     if (status != EFI_SUCCESS)
37     return -EIO;
38    
39     - if (var->Attributes & 0x1)
40     + if (var->Attributes & EFI_VARIABLE_NON_VOLATILE)
41     str += sprintf(str, "EFI_VARIABLE_NON_VOLATILE\n");
42     - if (var->Attributes & 0x2)
43     + if (var->Attributes & EFI_VARIABLE_BOOTSERVICE_ACCESS)
44     str += sprintf(str, "EFI_VARIABLE_BOOTSERVICE_ACCESS\n");
45     - if (var->Attributes & 0x4)
46     + if (var->Attributes & EFI_VARIABLE_RUNTIME_ACCESS)
47     str += sprintf(str, "EFI_VARIABLE_RUNTIME_ACCESS\n");
48     + if (var->Attributes & EFI_VARIABLE_HARDWARE_ERROR_RECORD)
49     + str += sprintf(str, "EFI_VARIABLE_HARDWARE_ERROR_RECORD\n");
50     + if (var->Attributes & EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS)
51     + str += sprintf(str,
52     + "EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS\n");
53     + if (var->Attributes &
54     + EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS)
55     + str += sprintf(str,
56     + "EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS\n");
57     + if (var->Attributes & EFI_VARIABLE_APPEND_WRITE)
58     + str += sprintf(str, "EFI_VARIABLE_APPEND_WRITE\n");
59     return str - buf;
60     }
61    
62     diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c
63     index 8bcd168..5de3bb3 100644
64     --- a/drivers/hid/hid-core.c
65     +++ b/drivers/hid/hid-core.c
66     @@ -757,6 +757,7 @@ int hid_open_report(struct hid_device *device)
67     struct hid_item item;
68     unsigned int size;
69     __u8 *start;
70     + __u8 *buf;
71     __u8 *end;
72     int ret;
73     static int (*dispatch_type[])(struct hid_parser *parser,
74     @@ -775,12 +776,21 @@ int hid_open_report(struct hid_device *device)
75     return -ENODEV;
76     size = device->dev_rsize;
77    
78     + buf = kmemdup(start, size, GFP_KERNEL);
79     + if (buf == NULL)
80     + return -ENOMEM;
81     +
82     if (device->driver->report_fixup)
83     - start = device->driver->report_fixup(device, start, &size);
84     + start = device->driver->report_fixup(device, buf, &size);
85     + else
86     + start = buf;
87    
88     - device->rdesc = kmemdup(start, size, GFP_KERNEL);
89     - if (device->rdesc == NULL)
90     + start = kmemdup(start, size, GFP_KERNEL);
91     + kfree(buf);
92     + if (start == NULL)
93     return -ENOMEM;
94     +
95     + device->rdesc = start;
96     device->rsize = size;
97    
98     parser = vzalloc(sizeof(struct hid_parser));
99     diff --git a/drivers/hid/usbhid/hid-core.c b/drivers/hid/usbhid/hid-core.c
100     index dedd8e4..8e0c4bf94 100644
101     --- a/drivers/hid/usbhid/hid-core.c
102     +++ b/drivers/hid/usbhid/hid-core.c
103     @@ -1415,20 +1415,20 @@ static int hid_post_reset(struct usb_interface *intf)
104     * configuration descriptors passed, we already know that
105     * the size of the HID report descriptor has not changed.
106     */
107     - rdesc = kmalloc(hid->rsize, GFP_KERNEL);
108     + rdesc = kmalloc(hid->dev_rsize, GFP_KERNEL);
109     if (!rdesc) {
110     dbg_hid("couldn't allocate rdesc memory (post_reset)\n");
111     return 1;
112     }
113     status = hid_get_class_descriptor(dev,
114     interface->desc.bInterfaceNumber,
115     - HID_DT_REPORT, rdesc, hid->rsize);
116     + HID_DT_REPORT, rdesc, hid->dev_rsize);
117     if (status < 0) {
118     dbg_hid("reading report descriptor failed (post_reset)\n");
119     kfree(rdesc);
120     return 1;
121     }
122     - status = memcmp(rdesc, hid->rdesc, hid->rsize);
123     + status = memcmp(rdesc, hid->dev_rdesc, hid->dev_rsize);
124     kfree(rdesc);
125     if (status != 0) {
126     dbg_hid("report descriptor changed\n");
127     diff --git a/drivers/infiniband/hw/qib/qib_keys.c b/drivers/infiniband/hw/qib/qib_keys.c
128     index e9486c7..81c7b73 100644
129     --- a/drivers/infiniband/hw/qib/qib_keys.c
130     +++ b/drivers/infiniband/hw/qib/qib_keys.c
131     @@ -186,8 +186,9 @@ int qib_lkey_ok(struct qib_lkey_table *rkt, struct qib_pd *pd,
132     goto bail;
133    
134     off = sge->addr - mr->user_base;
135     - if (unlikely(sge->addr < mr->iova || off + sge->length > mr->length ||
136     - (mr->access_flags & acc) == 0))
137     + if (unlikely(sge->addr < mr->user_base ||
138     + off + sge->length > mr->length ||
139     + (mr->access_flags & acc) != acc))
140     goto bail;
141     if (unlikely(!atomic_inc_not_zero(&mr->refcount)))
142     goto bail;
143     diff --git a/drivers/infiniband/ulp/ipoib/ipoib_main.c b/drivers/infiniband/ulp/ipoib/ipoib_main.c
144     index 1e19b5a..ea0dfc7 100644
145     --- a/drivers/infiniband/ulp/ipoib/ipoib_main.c
146     +++ b/drivers/infiniband/ulp/ipoib/ipoib_main.c
147     @@ -150,7 +150,7 @@ static int ipoib_stop(struct net_device *dev)
148    
149     netif_stop_queue(dev);
150    
151     - ipoib_ib_dev_down(dev, 0);
152     + ipoib_ib_dev_down(dev, 1);
153     ipoib_ib_dev_stop(dev, 0);
154    
155     if (!test_bit(IPOIB_FLAG_SUBINTERFACE, &priv->flags)) {
156     diff --git a/drivers/infiniband/ulp/ipoib/ipoib_multicast.c b/drivers/infiniband/ulp/ipoib/ipoib_multicast.c
157     index 7536724..cecb98a 100644
158     --- a/drivers/infiniband/ulp/ipoib/ipoib_multicast.c
159     +++ b/drivers/infiniband/ulp/ipoib/ipoib_multicast.c
160     @@ -175,7 +175,9 @@ static int ipoib_mcast_join_finish(struct ipoib_mcast *mcast,
161    
162     mcast->mcmember = *mcmember;
163    
164     - /* Set the cached Q_Key before we attach if it's the broadcast group */
165     + /* Set the multicast MTU and cached Q_Key before we attach if it's
166     + * the broadcast group.
167     + */
168     if (!memcmp(mcast->mcmember.mgid.raw, priv->dev->broadcast + 4,
169     sizeof (union ib_gid))) {
170     spin_lock_irq(&priv->lock);
171     @@ -183,10 +185,17 @@ static int ipoib_mcast_join_finish(struct ipoib_mcast *mcast,
172     spin_unlock_irq(&priv->lock);
173     return -EAGAIN;
174     }
175     + priv->mcast_mtu = IPOIB_UD_MTU(ib_mtu_enum_to_int(priv->broadcast->mcmember.mtu));
176     priv->qkey = be32_to_cpu(priv->broadcast->mcmember.qkey);
177     spin_unlock_irq(&priv->lock);
178     priv->tx_wr.wr.ud.remote_qkey = priv->qkey;
179     set_qkey = 1;
180     +
181     + if (!ipoib_cm_admin_enabled(dev)) {
182     + rtnl_lock();
183     + dev_set_mtu(dev, min(priv->mcast_mtu, priv->admin_mtu));
184     + rtnl_unlock();
185     + }
186     }
187    
188     if (!test_bit(IPOIB_MCAST_FLAG_SENDONLY, &mcast->flags)) {
189     @@ -574,14 +583,6 @@ void ipoib_mcast_join_task(struct work_struct *work)
190     return;
191     }
192    
193     - priv->mcast_mtu = IPOIB_UD_MTU(ib_mtu_enum_to_int(priv->broadcast->mcmember.mtu));
194     -
195     - if (!ipoib_cm_admin_enabled(dev)) {
196     - rtnl_lock();
197     - dev_set_mtu(dev, min(priv->mcast_mtu, priv->admin_mtu));
198     - rtnl_unlock();
199     - }
200     -
201     ipoib_dbg_mcast(priv, "successfully joined all multicast groups\n");
202    
203     clear_bit(IPOIB_MCAST_RUN, &priv->flags);
204     diff --git a/drivers/infiniband/ulp/srp/ib_srp.c b/drivers/infiniband/ulp/srp/ib_srp.c
205     index 1b5b0c7..922d845 100644
206     --- a/drivers/infiniband/ulp/srp/ib_srp.c
207     +++ b/drivers/infiniband/ulp/srp/ib_srp.c
208     @@ -638,9 +638,9 @@ static void srp_reset_req(struct srp_target_port *target, struct srp_request *re
209     struct scsi_cmnd *scmnd = srp_claim_req(target, req, NULL);
210    
211     if (scmnd) {
212     + srp_free_req(target, req, scmnd, 0);
213     scmnd->result = DID_RESET << 16;
214     scmnd->scsi_done(scmnd);
215     - srp_free_req(target, req, scmnd, 0);
216     }
217     }
218    
219     @@ -1687,6 +1687,7 @@ static int srp_abort(struct scsi_cmnd *scmnd)
220     SRP_TSK_ABORT_TASK);
221     srp_free_req(target, req, scmnd, 0);
222     scmnd->result = DID_ABORT << 16;
223     + scmnd->scsi_done(scmnd);
224    
225     return SUCCESS;
226     }
227     diff --git a/drivers/input/mouse/synaptics.c b/drivers/input/mouse/synaptics.c
228     index 14eaece..0786919 100644
229     --- a/drivers/input/mouse/synaptics.c
230     +++ b/drivers/input/mouse/synaptics.c
231     @@ -53,14 +53,19 @@
232     #define ABS_POS_BITS 13
233    
234     /*
235     - * Any position values from the hardware above the following limits are
236     - * treated as "wrapped around negative" values that have been truncated to
237     - * the 13-bit reporting range of the hardware. These are just reasonable
238     - * guesses and can be adjusted if hardware is found that operates outside
239     - * of these parameters.
240     + * These values should represent the absolute maximum value that will
241     + * be reported for a positive position value. Some Synaptics firmware
242     + * uses this value to indicate a finger near the edge of the touchpad
243     + * whose precise position cannot be determined.
244     + *
245     + * At least one touchpad is known to report positions in excess of this
246     + * value which are actually negative values truncated to the 13-bit
247     + * reporting range. These values have never been observed to be lower
248     + * than 8184 (i.e. -8), so we treat all values greater than 8176 as
249     + * negative and any other value as positive.
250     */
251     -#define X_MAX_POSITIVE (((1 << ABS_POS_BITS) + XMAX) / 2)
252     -#define Y_MAX_POSITIVE (((1 << ABS_POS_BITS) + YMAX) / 2)
253     +#define X_MAX_POSITIVE 8176
254     +#define Y_MAX_POSITIVE 8176
255    
256     /*****************************************************************************
257     * Stuff we need even when we do not want native Synaptics support
258     @@ -604,11 +609,21 @@ static int synaptics_parse_hw_state(const unsigned char buf[],
259     hw->right = (buf[0] & 0x02) ? 1 : 0;
260     }
261    
262     - /* Convert wrap-around values to negative */
263     + /*
264     + * Convert wrap-around values to negative. (X|Y)_MAX_POSITIVE
265     + * is used by some firmware to indicate a finger at the edge of
266     + * the touchpad whose precise position cannot be determined, so
267     + * convert these values to the maximum axis value.
268     + */
269     if (hw->x > X_MAX_POSITIVE)
270     hw->x -= 1 << ABS_POS_BITS;
271     + else if (hw->x == X_MAX_POSITIVE)
272     + hw->x = XMAX;
273     +
274     if (hw->y > Y_MAX_POSITIVE)
275     hw->y -= 1 << ABS_POS_BITS;
276     + else if (hw->y == Y_MAX_POSITIVE)
277     + hw->y = YMAX;
278    
279     return 0;
280     }
281     diff --git a/drivers/mtd/ubi/attach.c b/drivers/mtd/ubi/attach.c
282     index bd27cbb..68d4d1f 100644
283     --- a/drivers/mtd/ubi/attach.c
284     +++ b/drivers/mtd/ubi/attach.c
285     @@ -975,7 +975,7 @@ static int scan_peb(struct ubi_device *ubi, struct ubi_attach_info *ai,
286     return err;
287     goto adjust_mean_ec;
288     case UBI_IO_FF:
289     - if (ec_err)
290     + if (ec_err || bitflips)
291     err = add_to_list(ai, pnum, UBI_UNKNOWN,
292     UBI_UNKNOWN, ec, 1, &ai->erase);
293     else
294     diff --git a/drivers/mtd/ubi/build.c b/drivers/mtd/ubi/build.c
295     index 2c5ed5c..da052ed 100644
296     --- a/drivers/mtd/ubi/build.c
297     +++ b/drivers/mtd/ubi/build.c
298     @@ -759,6 +759,11 @@ static int autoresize(struct ubi_device *ubi, int vol_id)
299     struct ubi_volume *vol = ubi->volumes[vol_id];
300     int err, old_reserved_pebs = vol->reserved_pebs;
301    
302     + if (ubi->ro_mode) {
303     + ubi_warn("skip auto-resize because of R/O mode");
304     + return 0;
305     + }
306     +
307     /*
308     * Clear the auto-resize flag in the volume in-memory copy of the
309     * volume table, and 'ubi_resize_volume()' will propagate this change
310     diff --git a/drivers/net/can/mscan/mpc5xxx_can.c b/drivers/net/can/mscan/mpc5xxx_can.c
311     index 06adf88..524ef96 100644
312     --- a/drivers/net/can/mscan/mpc5xxx_can.c
313     +++ b/drivers/net/can/mscan/mpc5xxx_can.c
314     @@ -181,7 +181,7 @@ static u32 __devinit mpc512x_can_get_clock(struct platform_device *ofdev,
315    
316     if (!clock_name || !strcmp(clock_name, "sys")) {
317     sys_clk = clk_get(&ofdev->dev, "sys_clk");
318     - if (!sys_clk) {
319     + if (IS_ERR(sys_clk)) {
320     dev_err(&ofdev->dev, "couldn't get sys_clk\n");
321     goto exit_unmap;
322     }
323     @@ -204,7 +204,7 @@ static u32 __devinit mpc512x_can_get_clock(struct platform_device *ofdev,
324    
325     if (clocksrc < 0) {
326     ref_clk = clk_get(&ofdev->dev, "ref_clk");
327     - if (!ref_clk) {
328     + if (IS_ERR(ref_clk)) {
329     dev_err(&ofdev->dev, "couldn't get ref_clk\n");
330     goto exit_unmap;
331     }
332     diff --git a/drivers/net/wireless/ath/ath9k/pci.c b/drivers/net/wireless/ath/ath9k/pci.c
333     index a978984..0c43e7f 100644
334     --- a/drivers/net/wireless/ath/ath9k/pci.c
335     +++ b/drivers/net/wireless/ath/ath9k/pci.c
336     @@ -127,8 +127,9 @@ static void ath_pci_aspm_init(struct ath_common *common)
337     if (!parent)
338     return;
339    
340     - if (ath9k_hw_get_btcoex_scheme(ah) != ATH_BTCOEX_CFG_NONE) {
341     - /* Bluetooth coexistance requires disabling ASPM. */
342     + if ((ath9k_hw_get_btcoex_scheme(ah) != ATH_BTCOEX_CFG_NONE) &&
343     + (AR_SREV_9285(ah))) {
344     + /* Bluetooth coexistance requires disabling ASPM for AR9285. */
345     pci_read_config_byte(pdev, pos + PCI_EXP_LNKCTL, &aspm);
346     aspm &= ~(PCIE_LINK_STATE_L0S | PCIE_LINK_STATE_L1);
347     pci_write_config_byte(pdev, pos + PCI_EXP_LNKCTL, aspm);
348     diff --git a/drivers/net/wireless/b43legacy/main.c b/drivers/net/wireless/b43legacy/main.c
349     index 8156135..0ef08e0 100644
350     --- a/drivers/net/wireless/b43legacy/main.c
351     +++ b/drivers/net/wireless/b43legacy/main.c
352     @@ -3894,6 +3894,8 @@ static void b43legacy_remove(struct ssb_device *dev)
353     cancel_work_sync(&wl->firmware_load);
354    
355     B43legacy_WARN_ON(!wl);
356     + if (!wldev->fw.ucode)
357     + return; /* NULL if fw never loaded */
358     if (wl->current_dev == wldev)
359     ieee80211_unregister_hw(wl->hw);
360    
361     diff --git a/drivers/remoteproc/Kconfig b/drivers/remoteproc/Kconfig
362     index f8d818a..811ff72 100644
363     --- a/drivers/remoteproc/Kconfig
364     +++ b/drivers/remoteproc/Kconfig
365     @@ -5,6 +5,7 @@ config REMOTEPROC
366     tristate
367     depends on EXPERIMENTAL
368     select FW_CONFIG
369     + select VIRTIO
370    
371     config OMAP_REMOTEPROC
372     tristate "OMAP remoteproc support"
373     diff --git a/drivers/remoteproc/remoteproc_core.c b/drivers/remoteproc/remoteproc_core.c
374     index d5c2dbf..70b296f 100644
375     --- a/drivers/remoteproc/remoteproc_core.c
376     +++ b/drivers/remoteproc/remoteproc_core.c
377     @@ -545,17 +545,10 @@ static int rproc_handle_carveout(struct rproc *rproc,
378     dev_dbg(dev, "carveout rsc: da %x, pa %x, len %x, flags %x\n",
379     rsc->da, rsc->pa, rsc->len, rsc->flags);
380    
381     - mapping = kzalloc(sizeof(*mapping), GFP_KERNEL);
382     - if (!mapping) {
383     - dev_err(dev, "kzalloc mapping failed\n");
384     - return -ENOMEM;
385     - }
386     -
387     carveout = kzalloc(sizeof(*carveout), GFP_KERNEL);
388     if (!carveout) {
389     dev_err(dev, "kzalloc carveout failed\n");
390     - ret = -ENOMEM;
391     - goto free_mapping;
392     + return -ENOMEM;
393     }
394    
395     va = dma_alloc_coherent(dev->parent, rsc->len, &dma, GFP_KERNEL);
396     @@ -585,11 +578,18 @@ static int rproc_handle_carveout(struct rproc *rproc,
397     * physical address in this case.
398     */
399     if (rproc->domain) {
400     + mapping = kzalloc(sizeof(*mapping), GFP_KERNEL);
401     + if (!mapping) {
402     + dev_err(dev, "kzalloc mapping failed\n");
403     + ret = -ENOMEM;
404     + goto dma_free;
405     + }
406     +
407     ret = iommu_map(rproc->domain, rsc->da, dma, rsc->len,
408     rsc->flags);
409     if (ret) {
410     dev_err(dev, "iommu_map failed: %d\n", ret);
411     - goto dma_free;
412     + goto free_mapping;
413     }
414    
415     /*
416     @@ -634,12 +634,12 @@ static int rproc_handle_carveout(struct rproc *rproc,
417    
418     return 0;
419    
420     +free_mapping:
421     + kfree(mapping);
422     dma_free:
423     dma_free_coherent(dev->parent, rsc->len, va, dma);
424     free_carv:
425     kfree(carveout);
426     -free_mapping:
427     - kfree(mapping);
428     return ret;
429     }
430    
431     diff --git a/drivers/scsi/device_handler/scsi_dh_alua.c b/drivers/scsi/device_handler/scsi_dh_alua.c
432     index 08d80a6..6f4d8e6 100644
433     --- a/drivers/scsi/device_handler/scsi_dh_alua.c
434     +++ b/drivers/scsi/device_handler/scsi_dh_alua.c
435     @@ -641,8 +641,7 @@ static int alua_rtpg(struct scsi_device *sdev, struct alua_dh_data *h)
436     h->state = TPGS_STATE_STANDBY;
437     break;
438     case TPGS_STATE_OFFLINE:
439     - case TPGS_STATE_UNAVAILABLE:
440     - /* Path unusable for unavailable/offline */
441     + /* Path unusable */
442     err = SCSI_DH_DEV_OFFLINED;
443     break;
444     default:
445     diff --git a/drivers/scsi/hpsa.c b/drivers/scsi/hpsa.c
446     index 2b4261c..f9823f2 100644
447     --- a/drivers/scsi/hpsa.c
448     +++ b/drivers/scsi/hpsa.c
449     @@ -3266,7 +3266,7 @@ static void fill_cmd(struct CommandList *c, u8 cmd, struct ctlr_info *h,
450     c->Request.Timeout = 0; /* Don't time out */
451     memset(&c->Request.CDB[0], 0, sizeof(c->Request.CDB));
452     c->Request.CDB[0] = cmd;
453     - c->Request.CDB[1] = 0x03; /* Reset target above */
454     + c->Request.CDB[1] = HPSA_RESET_TYPE_LUN;
455     /* If bytes 4-7 are zero, it means reset the */
456     /* LunID device */
457     c->Request.CDB[4] = 0x00;
458     diff --git a/drivers/scsi/ibmvscsi/ibmvscsi.c b/drivers/scsi/ibmvscsi/ibmvscsi.c
459     index 3a6c474..337e8b3 100644
460     --- a/drivers/scsi/ibmvscsi/ibmvscsi.c
461     +++ b/drivers/scsi/ibmvscsi/ibmvscsi.c
462     @@ -1541,6 +1541,9 @@ static int ibmvscsi_do_host_config(struct ibmvscsi_host_data *hostdata,
463    
464     host_config = &evt_struct->iu.mad.host_config;
465    
466     + /* The transport length field is only 16-bit */
467     + length = min(0xffff, length);
468     +
469     /* Set up a lun reset SRP command */
470     memset(host_config, 0x00, sizeof(*host_config));
471     host_config->common.type = VIOSRP_HOST_CONFIG_TYPE;
472     diff --git a/drivers/scsi/isci/init.c b/drivers/scsi/isci/init.c
473     index 92c1d86..1286a8a 100644
474     --- a/drivers/scsi/isci/init.c
475     +++ b/drivers/scsi/isci/init.c
476     @@ -644,7 +644,6 @@ static int __devinit isci_pci_probe(struct pci_dev *pdev, const struct pci_devic
477     orom->hdr.version)) {
478     dev_warn(&pdev->dev,
479     "[%d]: invalid oem parameters detected, falling back to firmware\n", i);
480     - devm_kfree(&pdev->dev, orom);
481     orom = NULL;
482     break;
483     }
484     diff --git a/drivers/scsi/isci/probe_roms.c b/drivers/scsi/isci/probe_roms.c
485     index 4d95654..8ac646e 100644
486     --- a/drivers/scsi/isci/probe_roms.c
487     +++ b/drivers/scsi/isci/probe_roms.c
488     @@ -104,7 +104,6 @@ struct isci_orom *isci_request_oprom(struct pci_dev *pdev)
489    
490     if (i >= len) {
491     dev_err(&pdev->dev, "oprom parse error\n");
492     - devm_kfree(&pdev->dev, rom);
493     rom = NULL;
494     }
495     pci_unmap_biosrom(oprom);
496     diff --git a/drivers/scsi/scsi_sysfs.c b/drivers/scsi/scsi_sysfs.c
497     index 093d4f6..ce5224c 100644
498     --- a/drivers/scsi/scsi_sysfs.c
499     +++ b/drivers/scsi/scsi_sysfs.c
500     @@ -1031,33 +1031,31 @@ static void __scsi_remove_target(struct scsi_target *starget)
501     void scsi_remove_target(struct device *dev)
502     {
503     struct Scsi_Host *shost = dev_to_shost(dev->parent);
504     - struct scsi_target *starget, *found;
505     + struct scsi_target *starget, *last = NULL;
506     unsigned long flags;
507    
508     - restart:
509     - found = NULL;
510     + /* remove targets being careful to lookup next entry before
511     + * deleting the last
512     + */
513     spin_lock_irqsave(shost->host_lock, flags);
514     list_for_each_entry(starget, &shost->__targets, siblings) {
515     if (starget->state == STARGET_DEL)
516     continue;
517     if (starget->dev.parent == dev || &starget->dev == dev) {
518     - found = starget;
519     - found->reap_ref++;
520     - break;
521     + /* assuming new targets arrive at the end */
522     + starget->reap_ref++;
523     + spin_unlock_irqrestore(shost->host_lock, flags);
524     + if (last)
525     + scsi_target_reap(last);
526     + last = starget;
527     + __scsi_remove_target(starget);
528     + spin_lock_irqsave(shost->host_lock, flags);
529     }
530     }
531     spin_unlock_irqrestore(shost->host_lock, flags);
532    
533     - if (found) {
534     - __scsi_remove_target(found);
535     - scsi_target_reap(found);
536     - /* in the case where @dev has multiple starget children,
537     - * continue removing.
538     - *
539     - * FIXME: does such a case exist?
540     - */
541     - goto restart;
542     - }
543     + if (last)
544     + scsi_target_reap(last);
545     }
546     EXPORT_SYMBOL(scsi_remove_target);
547    
548     diff --git a/drivers/staging/comedi/comedi_fops.c b/drivers/staging/comedi/comedi_fops.c
549     index e821264..41dea18 100644
550     --- a/drivers/staging/comedi/comedi_fops.c
551     +++ b/drivers/staging/comedi/comedi_fops.c
552     @@ -951,7 +951,7 @@ static int parse_insn(struct comedi_device *dev, struct comedi_insn *insn,
553     ret = -EAGAIN;
554     break;
555     }
556     - ret = s->async->inttrig(dev, s, insn->data[0]);
557     + ret = s->async->inttrig(dev, s, data[0]);
558     if (ret >= 0)
559     ret = 1;
560     break;
561     @@ -1196,7 +1196,6 @@ static int do_cmd_ioctl(struct comedi_device *dev,
562     goto cleanup;
563     }
564    
565     - kfree(async->cmd.chanlist);
566     async->cmd = user_cmd;
567     async->cmd.data = NULL;
568     /* load channel/gain list */
569     @@ -2033,6 +2032,8 @@ void do_become_nonbusy(struct comedi_device *dev, struct comedi_subdevice *s)
570     if (async) {
571     comedi_reset_async_buf(async);
572     async->inttrig = NULL;
573     + kfree(async->cmd.chanlist);
574     + async->cmd.chanlist = NULL;
575     } else {
576     printk(KERN_ERR
577     "BUG: (?) do_become_nonbusy called with async=0\n");
578     diff --git a/drivers/staging/comedi/drivers/jr3_pci.c b/drivers/staging/comedi/drivers/jr3_pci.c
579     index 93f94cd..9c133a0 100644
580     --- a/drivers/staging/comedi/drivers/jr3_pci.c
581     +++ b/drivers/staging/comedi/drivers/jr3_pci.c
582     @@ -884,7 +884,7 @@ static int jr3_pci_attach(struct comedi_device *dev,
583     }
584    
585     /* Reset DSP card */
586     - devpriv->iobase->channel[0].reset = 0;
587     + writel(0, &devpriv->iobase->channel[0].reset);
588    
589     result = comedi_load_firmware(dev, "jr3pci.idm", jr3_download_firmware);
590     dev_dbg(dev->class_dev, "Firmare load %d\n", result);
591     diff --git a/drivers/staging/comedi/drivers/s626.c b/drivers/staging/comedi/drivers/s626.c
592     index f90578e..2b03b68 100644
593     --- a/drivers/staging/comedi/drivers/s626.c
594     +++ b/drivers/staging/comedi/drivers/s626.c
595     @@ -1868,7 +1868,7 @@ static int s626_enc_insn_config(struct comedi_device *dev,
596     /* (data==NULL) ? (Preloadvalue=0) : (Preloadvalue=data[0]); */
597    
598     k->SetMode(dev, k, Setup, TRUE);
599     - Preload(dev, k, *(insn->data));
600     + Preload(dev, k, data[0]);
601     k->PulseIndex(dev, k);
602     SetLatchSource(dev, k, valueSrclatch);
603     k->SetEnable(dev, k, (uint16_t) (enab != 0));
604     diff --git a/drivers/staging/rtl8712/rtl8712_recv.c b/drivers/staging/rtl8712/rtl8712_recv.c
605     index 8e82ce2..88e3ca6 100644
606     --- a/drivers/staging/rtl8712/rtl8712_recv.c
607     +++ b/drivers/staging/rtl8712/rtl8712_recv.c
608     @@ -1127,6 +1127,9 @@ static void recv_tasklet(void *priv)
609     recvbuf2recvframe(padapter, pskb);
610     skb_reset_tail_pointer(pskb);
611     pskb->len = 0;
612     - skb_queue_tail(&precvpriv->free_recv_skb_queue, pskb);
613     + if (!skb_cloned(pskb))
614     + skb_queue_tail(&precvpriv->free_recv_skb_queue, pskb);
615     + else
616     + consume_skb(pskb);
617     }
618     }
619     diff --git a/drivers/staging/speakup/speakup_soft.c b/drivers/staging/speakup/speakup_soft.c
620     index 42cdafe..b5130c8 100644
621     --- a/drivers/staging/speakup/speakup_soft.c
622     +++ b/drivers/staging/speakup/speakup_soft.c
623     @@ -40,7 +40,7 @@ static int softsynth_is_alive(struct spk_synth *synth);
624     static unsigned char get_index(void);
625    
626     static struct miscdevice synth_device;
627     -static int initialized;
628     +static int init_pos;
629     static int misc_registered;
630    
631     static struct var_t vars[] = {
632     @@ -194,7 +194,7 @@ static int softsynth_close(struct inode *inode, struct file *fp)
633     unsigned long flags;
634     spk_lock(flags);
635     synth_soft.alive = 0;
636     - initialized = 0;
637     + init_pos = 0;
638     spk_unlock(flags);
639     /* Make sure we let applications go before leaving */
640     speakup_start_ttys();
641     @@ -239,13 +239,8 @@ static ssize_t softsynth_read(struct file *fp, char *buf, size_t count,
642     ch = '\x18';
643     } else if (synth_buffer_empty()) {
644     break;
645     - } else if (!initialized) {
646     - if (*init) {
647     - ch = *init;
648     - init++;
649     - } else {
650     - initialized = 1;
651     - }
652     + } else if (init[init_pos]) {
653     + ch = init[init_pos++];
654     } else {
655     ch = synth_buffer_getc();
656     }
657     diff --git a/drivers/tty/n_gsm.c b/drivers/tty/n_gsm.c
658     index c43b683..90dff82 100644
659     --- a/drivers/tty/n_gsm.c
660     +++ b/drivers/tty/n_gsm.c
661     @@ -875,7 +875,7 @@ static int gsm_dlci_data_output_framed(struct gsm_mux *gsm,
662    
663     /* dlci->skb is locked by tx_lock */
664     if (dlci->skb == NULL) {
665     - dlci->skb = skb_dequeue(&dlci->skb_list);
666     + dlci->skb = skb_dequeue_tail(&dlci->skb_list);
667     if (dlci->skb == NULL)
668     return 0;
669     first = 1;
670     @@ -899,8 +899,11 @@ static int gsm_dlci_data_output_framed(struct gsm_mux *gsm,
671    
672     /* FIXME: need a timer or something to kick this so it can't
673     get stuck with no work outstanding and no buffer free */
674     - if (msg == NULL)
675     + if (msg == NULL) {
676     + skb_queue_tail(&dlci->skb_list, dlci->skb);
677     + dlci->skb = NULL;
678     return -ENOMEM;
679     + }
680     dp = msg->data;
681    
682     if (dlci->adaption == 4) { /* Interruptible framed (Packetised Data) */
683     @@ -971,16 +974,19 @@ static void gsm_dlci_data_sweep(struct gsm_mux *gsm)
684     static void gsm_dlci_data_kick(struct gsm_dlci *dlci)
685     {
686     unsigned long flags;
687     + int sweep;
688    
689     spin_lock_irqsave(&dlci->gsm->tx_lock, flags);
690     /* If we have nothing running then we need to fire up */
691     + sweep = (dlci->gsm->tx_bytes < TX_THRESH_LO);
692     if (dlci->gsm->tx_bytes == 0) {
693     if (dlci->net)
694     gsm_dlci_data_output_framed(dlci->gsm, dlci);
695     else
696     gsm_dlci_data_output(dlci->gsm, dlci);
697     - } else if (dlci->gsm->tx_bytes < TX_THRESH_LO)
698     - gsm_dlci_data_sweep(dlci->gsm);
699     + }
700     + if (sweep)
701     + gsm_dlci_data_sweep(dlci->gsm);
702     spin_unlock_irqrestore(&dlci->gsm->tx_lock, flags);
703     }
704    
705     @@ -1190,6 +1196,8 @@ static void gsm_control_message(struct gsm_mux *gsm, unsigned int command,
706     u8 *data, int clen)
707     {
708     u8 buf[1];
709     + unsigned long flags;
710     +
711     switch (command) {
712     case CMD_CLD: {
713     struct gsm_dlci *dlci = gsm->dlci[0];
714     @@ -1215,7 +1223,9 @@ static void gsm_control_message(struct gsm_mux *gsm, unsigned int command,
715     gsm->constipated = 0;
716     gsm_control_reply(gsm, CMD_FCOFF, NULL, 0);
717     /* Kick the link in case it is idling */
718     + spin_lock_irqsave(&gsm->tx_lock, flags);
719     gsm_data_kick(gsm);
720     + spin_unlock_irqrestore(&gsm->tx_lock, flags);
721     break;
722     case CMD_MSC:
723     /* Out of band modem line change indicator for a DLCI */
724     @@ -2377,12 +2387,12 @@ static void gsmld_write_wakeup(struct tty_struct *tty)
725    
726     /* Queue poll */
727     clear_bit(TTY_DO_WRITE_WAKEUP, &tty->flags);
728     + spin_lock_irqsave(&gsm->tx_lock, flags);
729     gsm_data_kick(gsm);
730     if (gsm->tx_bytes < TX_THRESH_LO) {
731     - spin_lock_irqsave(&gsm->tx_lock, flags);
732     gsm_dlci_data_sweep(gsm);
733     - spin_unlock_irqrestore(&gsm->tx_lock, flags);
734     }
735     + spin_unlock_irqrestore(&gsm->tx_lock, flags);
736     }
737    
738     /**
739     @@ -2889,6 +2899,10 @@ static int gsmtty_open(struct tty_struct *tty, struct file *filp)
740     gsm = gsm_mux[mux];
741     if (gsm->dead)
742     return -EL2HLT;
743     + /* If DLCI 0 is not yet fully open return an error. This is ok from a locking
744     + perspective as we don't have to worry about this if DLCI0 is lost */
745     + if (gsm->dlci[0] && gsm->dlci[0]->state != DLCI_OPEN)
746     + return -EL2NSYNC;
747     dlci = gsm->dlci[line];
748     if (dlci == NULL)
749     dlci = gsm_dlci_alloc(gsm, line);
750     diff --git a/drivers/tty/n_tty.c b/drivers/tty/n_tty.c
751     index ee1c268..26f0d0e 100644
752     --- a/drivers/tty/n_tty.c
753     +++ b/drivers/tty/n_tty.c
754     @@ -1728,7 +1728,8 @@ static ssize_t n_tty_read(struct tty_struct *tty, struct file *file,
755    
756     do_it_again:
757    
758     - BUG_ON(!tty->read_buf);
759     + if (WARN_ON(!tty->read_buf))
760     + return -EAGAIN;
761    
762     c = job_control(tty, file);
763     if (c < 0)
764     diff --git a/drivers/tty/serial/8250/8250_pci.c b/drivers/tty/serial/8250/8250_pci.c
765     index 28e7c7c..6b8fcb4 100644
766     --- a/drivers/tty/serial/8250/8250_pci.c
767     +++ b/drivers/tty/serial/8250/8250_pci.c
768     @@ -1164,6 +1164,8 @@ pci_xr17c154_setup(struct serial_private *priv,
769     #define PCI_SUBDEVICE_ID_OCTPRO422 0x0208
770     #define PCI_SUBDEVICE_ID_POCTAL232 0x0308
771     #define PCI_SUBDEVICE_ID_POCTAL422 0x0408
772     +#define PCI_SUBDEVICE_ID_SIIG_DUAL_00 0x2500
773     +#define PCI_SUBDEVICE_ID_SIIG_DUAL_30 0x2530
774     #define PCI_VENDOR_ID_ADVANTECH 0x13fe
775     #define PCI_DEVICE_ID_INTEL_CE4100_UART 0x2e66
776     #define PCI_DEVICE_ID_ADVANTECH_PCI3620 0x3620
777     @@ -3232,8 +3234,11 @@ static struct pci_device_id serial_pci_tbl[] = {
778     * For now just used the hex ID 0x950a.
779     */
780     { PCI_VENDOR_ID_OXSEMI, 0x950a,
781     - PCI_SUBVENDOR_ID_SIIG, PCI_SUBDEVICE_ID_SIIG_DUAL_SERIAL, 0, 0,
782     - pbn_b0_2_115200 },
783     + PCI_SUBVENDOR_ID_SIIG, PCI_SUBDEVICE_ID_SIIG_DUAL_00,
784     + 0, 0, pbn_b0_2_115200 },
785     + { PCI_VENDOR_ID_OXSEMI, 0x950a,
786     + PCI_SUBVENDOR_ID_SIIG, PCI_SUBDEVICE_ID_SIIG_DUAL_30,
787     + 0, 0, pbn_b0_2_115200 },
788     { PCI_VENDOR_ID_OXSEMI, 0x950a,
789     PCI_ANY_ID, PCI_ANY_ID, 0, 0,
790     pbn_b0_2_1130000 },
791     diff --git a/drivers/tty/serial/amba-pl011.c b/drivers/tty/serial/amba-pl011.c
792     index d3553b5..762f5fd 100644
793     --- a/drivers/tty/serial/amba-pl011.c
794     +++ b/drivers/tty/serial/amba-pl011.c
795     @@ -1603,13 +1603,26 @@ pl011_set_termios(struct uart_port *port, struct ktermios *termios,
796     old_cr &= ~ST_UART011_CR_OVSFACT;
797     }
798    
799     + /*
800     + * Workaround for the ST Micro oversampling variants to
801     + * increase the bitrate slightly, by lowering the divisor,
802     + * to avoid delayed sampling of start bit at high speeds,
803     + * else we see data corruption.
804     + */
805     + if (uap->vendor->oversampling) {
806     + if ((baud >= 3000000) && (baud < 3250000) && (quot > 1))
807     + quot -= 1;
808     + else if ((baud > 3250000) && (quot > 2))
809     + quot -= 2;
810     + }
811     /* Set baud rate */
812     writew(quot & 0x3f, port->membase + UART011_FBRD);
813     writew(quot >> 6, port->membase + UART011_IBRD);
814    
815     /*
816     * ----------v----------v----------v----------v-----
817     - * NOTE: MUST BE WRITTEN AFTER UARTLCR_M & UARTLCR_L
818     + * NOTE: lcrh_tx and lcrh_rx MUST BE WRITTEN AFTER
819     + * UART011_FBRD & UART011_IBRD.
820     * ----------^----------^----------^----------^-----
821     */
822     writew(lcr_h, port->membase + uap->lcrh_rx);
823     diff --git a/drivers/tty/serial/omap-serial.c b/drivers/tty/serial/omap-serial.c
824     index d3cda0c..22992cd 100644
825     --- a/drivers/tty/serial/omap-serial.c
826     +++ b/drivers/tty/serial/omap-serial.c
827     @@ -667,19 +667,19 @@ serial_omap_configure_xonxoff
828    
829     /*
830     * IXON Flag:
831     - * Enable XON/XOFF flow control on output.
832     - * Transmit XON1, XOFF1
833     + * Flow control for OMAP.TX
834     + * OMAP.RX should listen for XON/XOFF
835     */
836     if (termios->c_iflag & IXON)
837     - up->efr |= OMAP_UART_SW_TX;
838     + up->efr |= OMAP_UART_SW_RX;
839    
840     /*
841     * IXOFF Flag:
842     - * Enable XON/XOFF flow control on input.
843     - * Receiver compares XON1, XOFF1.
844     + * Flow control for OMAP.RX
845     + * OMAP.TX should send XON/XOFF
846     */
847     if (termios->c_iflag & IXOFF)
848     - up->efr |= OMAP_UART_SW_RX;
849     + up->efr |= OMAP_UART_SW_TX;
850    
851     serial_out(up, UART_EFR, up->efr | UART_EFR_ECB);
852     serial_out(up, UART_LCR, UART_LCR_CONF_MODE_A);
853     diff --git a/drivers/tty/vt/keyboard.c b/drivers/tty/vt/keyboard.c
854     index 48cc6f2..770a854 100644
855     --- a/drivers/tty/vt/keyboard.c
856     +++ b/drivers/tty/vt/keyboard.c
857     @@ -1049,13 +1049,10 @@ static int kbd_update_leds_helper(struct input_handle *handle, void *data)
858     */
859     int vt_get_leds(int console, int flag)
860     {
861     - unsigned long flags;
862     struct kbd_struct * kbd = kbd_table + console;
863     int ret;
864    
865     - spin_lock_irqsave(&kbd_event_lock, flags);
866     ret = vc_kbd_led(kbd, flag);
867     - spin_unlock_irqrestore(&kbd_event_lock, flags);
868    
869     return ret;
870     }
871     diff --git a/drivers/usb/gadget/printer.c b/drivers/usb/gadget/printer.c
872     index f1f9290..7587615 100644
873     --- a/drivers/usb/gadget/printer.c
874     +++ b/drivers/usb/gadget/printer.c
875     @@ -141,18 +141,14 @@ module_param(qlen, uint, S_IRUGO|S_IWUSR);
876     * descriptors are built on demand.
877     */
878    
879     -#define STRING_MANUFACTURER 1
880     -#define STRING_PRODUCT 2
881     -#define STRING_SERIALNUM 3
882     +#define STRING_MANUFACTURER 0
883     +#define STRING_PRODUCT 1
884     +#define STRING_SERIALNUM 2
885    
886     /* holds our biggest descriptor */
887     #define USB_DESC_BUFSIZE 256
888     #define USB_BUFSIZE 8192
889    
890     -/* This device advertises one configuration. */
891     -#define DEV_CONFIG_VALUE 1
892     -#define PRINTER_INTERFACE 0
893     -
894     static struct usb_device_descriptor device_desc = {
895     .bLength = sizeof device_desc,
896     .bDescriptorType = USB_DT_DEVICE,
897     @@ -162,16 +158,12 @@ static struct usb_device_descriptor device_desc = {
898     .bDeviceProtocol = 0,
899     .idVendor = cpu_to_le16(PRINTER_VENDOR_NUM),
900     .idProduct = cpu_to_le16(PRINTER_PRODUCT_NUM),
901     - .iManufacturer = STRING_MANUFACTURER,
902     - .iProduct = STRING_PRODUCT,
903     - .iSerialNumber = STRING_SERIALNUM,
904     .bNumConfigurations = 1
905     };
906    
907     static struct usb_interface_descriptor intf_desc = {
908     .bLength = sizeof intf_desc,
909     .bDescriptorType = USB_DT_INTERFACE,
910     - .bInterfaceNumber = PRINTER_INTERFACE,
911     .bNumEndpoints = 2,
912     .bInterfaceClass = USB_CLASS_PRINTER,
913     .bInterfaceSubClass = 1, /* Printer Sub-Class */
914     @@ -260,9 +252,9 @@ static char pnp_string [1024] =
915    
916     /* static strings, in UTF-8 */
917     static struct usb_string strings [] = {
918     - { STRING_MANUFACTURER, manufacturer, },
919     - { STRING_PRODUCT, product_desc, },
920     - { STRING_SERIALNUM, serial_num, },
921     + [STRING_MANUFACTURER].s = manufacturer,
922     + [STRING_PRODUCT].s = product_desc,
923     + [STRING_SERIALNUM].s = serial_num,
924     { } /* end of list */
925     };
926    
927     @@ -871,25 +863,13 @@ static int set_interface(struct printer_dev *dev, unsigned number)
928     int result = 0;
929    
930     /* Free the current interface */
931     - switch (dev->interface) {
932     - case PRINTER_INTERFACE:
933     - printer_reset_interface(dev);
934     - break;
935     - }
936     + printer_reset_interface(dev);
937    
938     - switch (number) {
939     - case PRINTER_INTERFACE:
940     - result = set_printer_interface(dev);
941     - if (result) {
942     - printer_reset_interface(dev);
943     - } else {
944     - dev->interface = PRINTER_INTERFACE;
945     - }
946     - break;
947     - default:
948     - result = -EINVAL;
949     - /* FALL THROUGH */
950     - }
951     + result = set_printer_interface(dev);
952     + if (result)
953     + printer_reset_interface(dev);
954     + else
955     + dev->interface = number;
956    
957     if (!result)
958     INFO(dev, "Using interface %x\n", number);
959     @@ -972,7 +952,7 @@ static int printer_func_setup(struct usb_function *f,
960     switch (ctrl->bRequest) {
961     case 0: /* Get the IEEE-1284 PNP String */
962     /* Only one printer interface is supported. */
963     - if ((wIndex>>8) != PRINTER_INTERFACE)
964     + if ((wIndex>>8) != dev->interface)
965     break;
966    
967     value = (pnp_string[0]<<8)|pnp_string[1];
968     @@ -983,7 +963,7 @@ static int printer_func_setup(struct usb_function *f,
969    
970     case 1: /* Get Port Status */
971     /* Only one printer interface is supported. */
972     - if (wIndex != PRINTER_INTERFACE)
973     + if (wIndex != dev->interface)
974     break;
975    
976     *(u8 *)req->buf = dev->printer_status;
977     @@ -992,7 +972,7 @@ static int printer_func_setup(struct usb_function *f,
978    
979     case 2: /* Soft Reset */
980     /* Only one printer interface is supported. */
981     - if (wIndex != PRINTER_INTERFACE)
982     + if (wIndex != dev->interface)
983     break;
984    
985     printer_soft_reset(dev);
986     @@ -1020,6 +1000,37 @@ unknown:
987     static int __init printer_func_bind(struct usb_configuration *c,
988     struct usb_function *f)
989     {
990     + struct printer_dev *dev = container_of(f, struct printer_dev, function);
991     + struct usb_composite_dev *cdev = c->cdev;
992     + struct usb_ep *in_ep, *out_ep;
993     + int id;
994     +
995     + id = usb_interface_id(c, f);
996     + if (id < 0)
997     + return id;
998     + intf_desc.bInterfaceNumber = id;
999     +
1000     + /* all we really need is bulk IN/OUT */
1001     + in_ep = usb_ep_autoconfig(cdev->gadget, &fs_ep_in_desc);
1002     + if (!in_ep) {
1003     +autoconf_fail:
1004     + dev_err(&cdev->gadget->dev, "can't autoconfigure on %s\n",
1005     + cdev->gadget->name);
1006     + return -ENODEV;
1007     + }
1008     + in_ep->driver_data = in_ep; /* claim */
1009     +
1010     + out_ep = usb_ep_autoconfig(cdev->gadget, &fs_ep_out_desc);
1011     + if (!out_ep)
1012     + goto autoconf_fail;
1013     + out_ep->driver_data = out_ep; /* claim */
1014     +
1015     + /* assumes that all endpoints are dual-speed */
1016     + hs_ep_in_desc.bEndpointAddress = fs_ep_in_desc.bEndpointAddress;
1017     + hs_ep_out_desc.bEndpointAddress = fs_ep_out_desc.bEndpointAddress;
1018     +
1019     + dev->in_ep = in_ep;
1020     + dev->out_ep = out_ep;
1021     return 0;
1022     }
1023    
1024     @@ -1035,7 +1046,8 @@ static int printer_func_set_alt(struct usb_function *f,
1025     int ret = -ENOTSUPP;
1026    
1027     if (!alt)
1028     - ret = set_interface(dev, PRINTER_INTERFACE);
1029     + ret = set_interface(dev, intf);
1030     +
1031     return ret;
1032     }
1033    
1034     @@ -1107,13 +1119,14 @@ static int __init printer_bind_config(struct usb_configuration *c)
1035     {
1036     struct usb_gadget *gadget = c->cdev->gadget;
1037     struct printer_dev *dev;
1038     - struct usb_ep *in_ep, *out_ep;
1039     int status = -ENOMEM;
1040     int gcnum;
1041     size_t len;
1042     u32 i;
1043     struct usb_request *req;
1044    
1045     + usb_ep_autoconfig_reset(gadget);
1046     +
1047     dev = &usb_printer_gadget;
1048    
1049     dev->function.name = shortname;
1050     @@ -1125,6 +1138,10 @@ static int __init printer_bind_config(struct usb_configuration *c)
1051     dev->function.set_alt = printer_func_set_alt;
1052     dev->function.disable = printer_func_disable;
1053    
1054     + status = usb_add_function(c, &dev->function);
1055     + if (status)
1056     + return status;
1057     +
1058     /* Setup the sysfs files for the printer gadget. */
1059     dev->pdev = device_create(usb_gadget_class, NULL, g_printer_devno,
1060     NULL, "g_printer");
1061     @@ -1169,26 +1186,6 @@ static int __init printer_bind_config(struct usb_configuration *c)
1062     pnp_string[0] = (len >> 8) & 0xFF;
1063     pnp_string[1] = len & 0xFF;
1064    
1065     - /* all we really need is bulk IN/OUT */
1066     - usb_ep_autoconfig_reset(gadget);
1067     - in_ep = usb_ep_autoconfig(gadget, &fs_ep_in_desc);
1068     - if (!in_ep) {
1069     -autoconf_fail:
1070     - dev_err(&gadget->dev, "can't autoconfigure on %s\n",
1071     - gadget->name);
1072     - return -ENODEV;
1073     - }
1074     - in_ep->driver_data = in_ep; /* claim */
1075     -
1076     - out_ep = usb_ep_autoconfig(gadget, &fs_ep_out_desc);
1077     - if (!out_ep)
1078     - goto autoconf_fail;
1079     - out_ep->driver_data = out_ep; /* claim */
1080     -
1081     - /* assumes that all endpoints are dual-speed */
1082     - hs_ep_in_desc.bEndpointAddress = fs_ep_in_desc.bEndpointAddress;
1083     - hs_ep_out_desc.bEndpointAddress = fs_ep_out_desc.bEndpointAddress;
1084     -
1085     usb_gadget_set_selfpowered(gadget);
1086    
1087     if (gadget->is_otg) {
1088     @@ -1215,9 +1212,6 @@ autoconf_fail:
1089     dev->current_rx_bytes = 0;
1090     dev->current_rx_buf = NULL;
1091    
1092     - dev->in_ep = in_ep;
1093     - dev->out_ep = out_ep;
1094     -
1095     for (i = 0; i < QLEN; i++) {
1096     req = printer_req_alloc(dev->in_ep, USB_BUFSIZE, GFP_KERNEL);
1097     if (!req) {
1098     @@ -1250,8 +1244,6 @@ autoconf_fail:
1099     dev->gadget = gadget;
1100    
1101     INFO(dev, "%s, version: " DRIVER_VERSION "\n", driver_desc);
1102     - INFO(dev, "using %s, OUT %s IN %s\n", gadget->name, out_ep->name,
1103     - in_ep->name);
1104     return 0;
1105    
1106     fail:
1107     @@ -1266,7 +1258,17 @@ static int printer_unbind(struct usb_composite_dev *cdev)
1108    
1109     static int __init printer_bind(struct usb_composite_dev *cdev)
1110     {
1111     - return usb_add_config(cdev, &printer_cfg_driver, printer_bind_config);
1112     + int ret;
1113     +
1114     + ret = usb_string_ids_tab(cdev, strings);
1115     + if (ret < 0)
1116     + return ret;
1117     + device_desc.iManufacturer = strings[STRING_MANUFACTURER].id;
1118     + device_desc.iProduct = strings[STRING_PRODUCT].id;
1119     + device_desc.iSerialNumber = strings[STRING_SERIALNUM].id;
1120     +
1121     + ret = usb_add_config(cdev, &printer_cfg_driver, printer_bind_config);
1122     + return ret;
1123     }
1124    
1125     static struct usb_composite_driver printer_driver = {
1126     diff --git a/drivers/usb/gadget/tcm_usb_gadget.c b/drivers/usb/gadget/tcm_usb_gadget.c
1127     index 5444866..d37334c 100644
1128     --- a/drivers/usb/gadget/tcm_usb_gadget.c
1129     +++ b/drivers/usb/gadget/tcm_usb_gadget.c
1130     @@ -1977,7 +1977,6 @@ static struct usb_interface_descriptor bot_intf_desc = {
1131     .bInterfaceClass = USB_CLASS_MASS_STORAGE,
1132     .bInterfaceSubClass = USB_SC_SCSI,
1133     .bInterfaceProtocol = USB_PR_BULK,
1134     - .iInterface = USB_G_STR_INT_UAS,
1135     };
1136    
1137     static struct usb_interface_descriptor uasp_intf_desc = {
1138     @@ -1988,7 +1987,6 @@ static struct usb_interface_descriptor uasp_intf_desc = {
1139     .bInterfaceClass = USB_CLASS_MASS_STORAGE,
1140     .bInterfaceSubClass = USB_SC_SCSI,
1141     .bInterfaceProtocol = USB_PR_UAS,
1142     - .iInterface = USB_G_STR_INT_BBB,
1143     };
1144    
1145     static struct usb_endpoint_descriptor uasp_bi_desc = {
1146     @@ -2209,20 +2207,16 @@ static struct usb_device_descriptor usbg_device_desc = {
1147     .bDeviceClass = USB_CLASS_PER_INTERFACE,
1148     .idVendor = cpu_to_le16(UAS_VENDOR_ID),
1149     .idProduct = cpu_to_le16(UAS_PRODUCT_ID),
1150     - .iManufacturer = USB_G_STR_MANUFACTOR,
1151     - .iProduct = USB_G_STR_PRODUCT,
1152     - .iSerialNumber = USB_G_STR_SERIAL,
1153     -
1154     .bNumConfigurations = 1,
1155     };
1156    
1157     static struct usb_string usbg_us_strings[] = {
1158     - { USB_G_STR_MANUFACTOR, "Target Manufactor"},
1159     - { USB_G_STR_PRODUCT, "Target Product"},
1160     - { USB_G_STR_SERIAL, "000000000001"},
1161     - { USB_G_STR_CONFIG, "default config"},
1162     - { USB_G_STR_INT_UAS, "USB Attached SCSI"},
1163     - { USB_G_STR_INT_BBB, "Bulk Only Transport"},
1164     + [USB_G_STR_MANUFACTOR].s = "Target Manufactor",
1165     + [USB_G_STR_PRODUCT].s = "Target Product",
1166     + [USB_G_STR_SERIAL].s = "000000000001",
1167     + [USB_G_STR_CONFIG].s = "default config",
1168     + [USB_G_STR_INT_UAS].s = "USB Attached SCSI",
1169     + [USB_G_STR_INT_BBB].s = "Bulk Only Transport",
1170     { },
1171     };
1172    
1173     @@ -2244,7 +2238,6 @@ static int guas_unbind(struct usb_composite_dev *cdev)
1174     static struct usb_configuration usbg_config_driver = {
1175     .label = "Linux Target",
1176     .bConfigurationValue = 1,
1177     - .iConfiguration = USB_G_STR_CONFIG,
1178     .bmAttributes = USB_CONFIG_ATT_SELFPOWER,
1179     };
1180    
1181     @@ -2417,6 +2410,9 @@ static int usbg_cfg_bind(struct usb_configuration *c)
1182     fu->function.disable = usbg_disable;
1183     fu->tpg = the_only_tpg_I_currently_have;
1184    
1185     + bot_intf_desc.iInterface = usbg_us_strings[USB_G_STR_INT_BBB].id;
1186     + uasp_intf_desc.iInterface = usbg_us_strings[USB_G_STR_INT_UAS].id;
1187     +
1188     ret = usb_add_function(c, &fu->function);
1189     if (ret)
1190     goto err;
1191     @@ -2431,6 +2427,17 @@ static int usb_target_bind(struct usb_composite_dev *cdev)
1192     {
1193     int ret;
1194    
1195     + ret = usb_string_ids_tab(cdev, usbg_us_strings);
1196     + if (ret)
1197     + return ret;
1198     +
1199     + usbg_device_desc.iManufacturer =
1200     + usbg_us_strings[USB_G_STR_MANUFACTOR].id;
1201     + usbg_device_desc.iProduct = usbg_us_strings[USB_G_STR_PRODUCT].id;
1202     + usbg_device_desc.iSerialNumber = usbg_us_strings[USB_G_STR_SERIAL].id;
1203     + usbg_config_driver.iConfiguration =
1204     + usbg_us_strings[USB_G_STR_CONFIG].id;
1205     +
1206     ret = usb_add_config(cdev, &usbg_config_driver,
1207     usbg_cfg_bind);
1208     return 0;
1209     diff --git a/drivers/usb/gadget/tcm_usb_gadget.h b/drivers/usb/gadget/tcm_usb_gadget.h
1210     index bb18999..9d32ec3 100644
1211     --- a/drivers/usb/gadget/tcm_usb_gadget.h
1212     +++ b/drivers/usb/gadget/tcm_usb_gadget.h
1213     @@ -16,12 +16,14 @@
1214     #define UASP_SS_EP_COMP_LOG_STREAMS 4
1215     #define UASP_SS_EP_COMP_NUM_STREAMS (1 << UASP_SS_EP_COMP_LOG_STREAMS)
1216    
1217     -#define USB_G_STR_MANUFACTOR 1
1218     -#define USB_G_STR_PRODUCT 2
1219     -#define USB_G_STR_SERIAL 3
1220     -#define USB_G_STR_CONFIG 4
1221     -#define USB_G_STR_INT_UAS 5
1222     -#define USB_G_STR_INT_BBB 6
1223     +enum {
1224     + USB_G_STR_MANUFACTOR,
1225     + USB_G_STR_PRODUCT,
1226     + USB_G_STR_SERIAL,
1227     + USB_G_STR_CONFIG,
1228     + USB_G_STR_INT_UAS,
1229     + USB_G_STR_INT_BBB,
1230     +};
1231    
1232     #define USB_G_ALT_INT_BBB 0
1233     #define USB_G_ALT_INT_UAS 1
1234     diff --git a/drivers/usb/host/ehci-timer.c b/drivers/usb/host/ehci-timer.c
1235     index eb896a2..20dbdcb 100644
1236     --- a/drivers/usb/host/ehci-timer.c
1237     +++ b/drivers/usb/host/ehci-timer.c
1238     @@ -118,7 +118,8 @@ static void ehci_poll_ASS(struct ehci_hcd *ehci)
1239     ehci_enable_event(ehci, EHCI_HRTIMER_POLL_ASS, true);
1240     return;
1241     }
1242     - ehci_warn(ehci, "Waited too long for the async schedule status, giving up\n");
1243     + ehci_dbg(ehci, "Waited too long for the async schedule status (%x/%x), giving up\n",
1244     + want, actual);
1245     }
1246     ehci->ASS_poll_count = 0;
1247    
1248     @@ -163,7 +164,8 @@ static void ehci_poll_PSS(struct ehci_hcd *ehci)
1249     ehci_enable_event(ehci, EHCI_HRTIMER_POLL_PSS, true);
1250     return;
1251     }
1252     - ehci_warn(ehci, "Waited too long for the periodic schedule status, giving up\n");
1253     + ehci_dbg(ehci, "Waited too long for the periodic schedule status (%x/%x), giving up\n",
1254     + want, actual);
1255     }
1256     ehci->PSS_poll_count = 0;
1257    
1258     diff --git a/drivers/usb/host/xhci-mem.c b/drivers/usb/host/xhci-mem.c
1259     index 77689bd..487bc08 100644
1260     --- a/drivers/usb/host/xhci-mem.c
1261     +++ b/drivers/usb/host/xhci-mem.c
1262     @@ -1772,6 +1772,7 @@ void xhci_mem_cleanup(struct xhci_hcd *xhci)
1263     {
1264     struct pci_dev *pdev = to_pci_dev(xhci_to_hcd(xhci)->self.controller);
1265     struct dev_info *dev_info, *next;
1266     + struct xhci_cd *cur_cd, *next_cd;
1267     unsigned long flags;
1268     int size;
1269     int i, j, num_ports;
1270     @@ -1795,6 +1796,11 @@ void xhci_mem_cleanup(struct xhci_hcd *xhci)
1271     xhci_ring_free(xhci, xhci->cmd_ring);
1272     xhci->cmd_ring = NULL;
1273     xhci_dbg(xhci, "Freed command ring\n");
1274     + list_for_each_entry_safe(cur_cd, next_cd,
1275     + &xhci->cancel_cmd_list, cancel_cmd_list) {
1276     + list_del(&cur_cd->cancel_cmd_list);
1277     + kfree(cur_cd);
1278     + }
1279    
1280     for (i = 1; i < MAX_HC_SLOTS; ++i)
1281     xhci_free_virt_device(xhci, i);
1282     @@ -2340,6 +2346,7 @@ int xhci_mem_init(struct xhci_hcd *xhci, gfp_t flags)
1283     xhci->cmd_ring = xhci_ring_alloc(xhci, 1, 1, TYPE_COMMAND, flags);
1284     if (!xhci->cmd_ring)
1285     goto fail;
1286     + INIT_LIST_HEAD(&xhci->cancel_cmd_list);
1287     xhci_dbg(xhci, "Allocated command ring at %p\n", xhci->cmd_ring);
1288     xhci_dbg(xhci, "First segment DMA is 0x%llx\n",
1289     (unsigned long long)xhci->cmd_ring->first_seg->dma);
1290     diff --git a/drivers/usb/host/xhci-pci.c b/drivers/usb/host/xhci-pci.c
1291     index 9bfd4ca11..8345d7c 100644
1292     --- a/drivers/usb/host/xhci-pci.c
1293     +++ b/drivers/usb/host/xhci-pci.c
1294     @@ -103,6 +103,7 @@ static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci)
1295     * PPT chipsets.
1296     */
1297     xhci->quirks |= XHCI_SPURIOUS_REBOOT;
1298     + xhci->quirks |= XHCI_AVOID_BEI;
1299     }
1300     if (pdev->vendor == PCI_VENDOR_ID_ETRON &&
1301     pdev->device == PCI_DEVICE_ID_ASROCK_P67) {
1302     diff --git a/drivers/usb/host/xhci-ring.c b/drivers/usb/host/xhci-ring.c
1303     index 643c2f3..a6e18b9 100644
1304     --- a/drivers/usb/host/xhci-ring.c
1305     +++ b/drivers/usb/host/xhci-ring.c
1306     @@ -280,12 +280,123 @@ static inline int room_on_ring(struct xhci_hcd *xhci, struct xhci_ring *ring,
1307     /* Ring the host controller doorbell after placing a command on the ring */
1308     void xhci_ring_cmd_db(struct xhci_hcd *xhci)
1309     {
1310     + if (!(xhci->cmd_ring_state & CMD_RING_STATE_RUNNING))
1311     + return;
1312     +
1313     xhci_dbg(xhci, "// Ding dong!\n");
1314     xhci_writel(xhci, DB_VALUE_HOST, &xhci->dba->doorbell[0]);
1315     /* Flush PCI posted writes */
1316     xhci_readl(xhci, &xhci->dba->doorbell[0]);
1317     }
1318    
1319     +static int xhci_abort_cmd_ring(struct xhci_hcd *xhci)
1320     +{
1321     + u64 temp_64;
1322     + int ret;
1323     +
1324     + xhci_dbg(xhci, "Abort command ring\n");
1325     +
1326     + if (!(xhci->cmd_ring_state & CMD_RING_STATE_RUNNING)) {
1327     + xhci_dbg(xhci, "The command ring isn't running, "
1328     + "Have the command ring been stopped?\n");
1329     + return 0;
1330     + }
1331     +
1332     + temp_64 = xhci_read_64(xhci, &xhci->op_regs->cmd_ring);
1333     + if (!(temp_64 & CMD_RING_RUNNING)) {
1334     + xhci_dbg(xhci, "Command ring had been stopped\n");
1335     + return 0;
1336     + }
1337     + xhci->cmd_ring_state = CMD_RING_STATE_ABORTED;
1338     + xhci_write_64(xhci, temp_64 | CMD_RING_ABORT,
1339     + &xhci->op_regs->cmd_ring);
1340     +
1341     + /* Section 4.6.1.2 of xHCI 1.0 spec says software should
1342     + * time the completion od all xHCI commands, including
1343     + * the Command Abort operation. If software doesn't see
1344     + * CRR negated in a timely manner (e.g. longer than 5
1345     + * seconds), then it should assume that the there are
1346     + * larger problems with the xHC and assert HCRST.
1347     + */
1348     + ret = handshake(xhci, &xhci->op_regs->cmd_ring,
1349     + CMD_RING_RUNNING, 0, 5 * 1000 * 1000);
1350     + if (ret < 0) {
1351     + xhci_err(xhci, "Stopped the command ring failed, "
1352     + "maybe the host is dead\n");
1353     + xhci->xhc_state |= XHCI_STATE_DYING;
1354     + xhci_quiesce(xhci);
1355     + xhci_halt(xhci);
1356     + return -ESHUTDOWN;
1357     + }
1358     +
1359     + return 0;
1360     +}
1361     +
1362     +static int xhci_queue_cd(struct xhci_hcd *xhci,
1363     + struct xhci_command *command,
1364     + union xhci_trb *cmd_trb)
1365     +{
1366     + struct xhci_cd *cd;
1367     + cd = kzalloc(sizeof(struct xhci_cd), GFP_ATOMIC);
1368     + if (!cd)
1369     + return -ENOMEM;
1370     + INIT_LIST_HEAD(&cd->cancel_cmd_list);
1371     +
1372     + cd->command = command;
1373     + cd->cmd_trb = cmd_trb;
1374     + list_add_tail(&cd->cancel_cmd_list, &xhci->cancel_cmd_list);
1375     +
1376     + return 0;
1377     +}
1378     +
1379     +/*
1380     + * Cancel the command which has issue.
1381     + *
1382     + * Some commands may hang due to waiting for acknowledgement from
1383     + * usb device. It is outside of the xHC's ability to control and
1384     + * will cause the command ring is blocked. When it occurs software
1385     + * should intervene to recover the command ring.
1386     + * See Section 4.6.1.1 and 4.6.1.2
1387     + */
1388     +int xhci_cancel_cmd(struct xhci_hcd *xhci, struct xhci_command *command,
1389     + union xhci_trb *cmd_trb)
1390     +{
1391     + int retval = 0;
1392     + unsigned long flags;
1393     +
1394     + spin_lock_irqsave(&xhci->lock, flags);
1395     +
1396     + if (xhci->xhc_state & XHCI_STATE_DYING) {
1397     + xhci_warn(xhci, "Abort the command ring,"
1398     + " but the xHCI is dead.\n");
1399     + retval = -ESHUTDOWN;
1400     + goto fail;
1401     + }
1402     +
1403     + /* queue the cmd desriptor to cancel_cmd_list */
1404     + retval = xhci_queue_cd(xhci, command, cmd_trb);
1405     + if (retval) {
1406     + xhci_warn(xhci, "Queuing command descriptor failed.\n");
1407     + goto fail;
1408     + }
1409     +
1410     + /* abort command ring */
1411     + retval = xhci_abort_cmd_ring(xhci);
1412     + if (retval) {
1413     + xhci_err(xhci, "Abort command ring failed\n");
1414     + if (unlikely(retval == -ESHUTDOWN)) {
1415     + spin_unlock_irqrestore(&xhci->lock, flags);
1416     + usb_hc_died(xhci_to_hcd(xhci)->primary_hcd);
1417     + xhci_dbg(xhci, "xHCI host controller is dead.\n");
1418     + return retval;
1419     + }
1420     + }
1421     +
1422     +fail:
1423     + spin_unlock_irqrestore(&xhci->lock, flags);
1424     + return retval;
1425     +}
1426     +
1427     void xhci_ring_ep_doorbell(struct xhci_hcd *xhci,
1428     unsigned int slot_id,
1429     unsigned int ep_index,
1430     @@ -1059,6 +1170,20 @@ static void handle_reset_ep_completion(struct xhci_hcd *xhci,
1431     }
1432     }
1433    
1434     +/* Complete the command and detele it from the devcie's command queue.
1435     + */
1436     +static void xhci_complete_cmd_in_cmd_wait_list(struct xhci_hcd *xhci,
1437     + struct xhci_command *command, u32 status)
1438     +{
1439     + command->status = status;
1440     + list_del(&command->cmd_list);
1441     + if (command->completion)
1442     + complete(command->completion);
1443     + else
1444     + xhci_free_command(xhci, command);
1445     +}
1446     +
1447     +
1448     /* Check to see if a command in the device's command queue matches this one.
1449     * Signal the completion or free the command, and return 1. Return 0 if the
1450     * completed command isn't at the head of the command list.
1451     @@ -1077,15 +1202,144 @@ static int handle_cmd_in_cmd_wait_list(struct xhci_hcd *xhci,
1452     if (xhci->cmd_ring->dequeue != command->command_trb)
1453     return 0;
1454    
1455     - command->status = GET_COMP_CODE(le32_to_cpu(event->status));
1456     - list_del(&command->cmd_list);
1457     - if (command->completion)
1458     - complete(command->completion);
1459     - else
1460     - xhci_free_command(xhci, command);
1461     + xhci_complete_cmd_in_cmd_wait_list(xhci, command,
1462     + GET_COMP_CODE(le32_to_cpu(event->status)));
1463     return 1;
1464     }
1465    
1466     +/*
1467     + * Finding the command trb need to be cancelled and modifying it to
1468     + * NO OP command. And if the command is in device's command wait
1469     + * list, finishing and freeing it.
1470     + *
1471     + * If we can't find the command trb, we think it had already been
1472     + * executed.
1473     + */
1474     +static void xhci_cmd_to_noop(struct xhci_hcd *xhci, struct xhci_cd *cur_cd)
1475     +{
1476     + struct xhci_segment *cur_seg;
1477     + union xhci_trb *cmd_trb;
1478     + u32 cycle_state;
1479     +
1480     + if (xhci->cmd_ring->dequeue == xhci->cmd_ring->enqueue)
1481     + return;
1482     +
1483     + /* find the current segment of command ring */
1484     + cur_seg = find_trb_seg(xhci->cmd_ring->first_seg,
1485     + xhci->cmd_ring->dequeue, &cycle_state);
1486     +
1487     + /* find the command trb matched by cd from command ring */
1488     + for (cmd_trb = xhci->cmd_ring->dequeue;
1489     + cmd_trb != xhci->cmd_ring->enqueue;
1490     + next_trb(xhci, xhci->cmd_ring, &cur_seg, &cmd_trb)) {
1491     + /* If the trb is link trb, continue */
1492     + if (TRB_TYPE_LINK_LE32(cmd_trb->generic.field[3]))
1493     + continue;
1494     +
1495     + if (cur_cd->cmd_trb == cmd_trb) {
1496     +
1497     + /* If the command in device's command list, we should
1498     + * finish it and free the command structure.
1499     + */
1500     + if (cur_cd->command)
1501     + xhci_complete_cmd_in_cmd_wait_list(xhci,
1502     + cur_cd->command, COMP_CMD_STOP);
1503     +
1504     + /* get cycle state from the origin command trb */
1505     + cycle_state = le32_to_cpu(cmd_trb->generic.field[3])
1506     + & TRB_CYCLE;
1507     +
1508     + /* modify the command trb to NO OP command */
1509     + cmd_trb->generic.field[0] = 0;
1510     + cmd_trb->generic.field[1] = 0;
1511     + cmd_trb->generic.field[2] = 0;
1512     + cmd_trb->generic.field[3] = cpu_to_le32(
1513     + TRB_TYPE(TRB_CMD_NOOP) | cycle_state);
1514     + break;
1515     + }
1516     + }
1517     +}
1518     +
1519     +static void xhci_cancel_cmd_in_cd_list(struct xhci_hcd *xhci)
1520     +{
1521     + struct xhci_cd *cur_cd, *next_cd;
1522     +
1523     + if (list_empty(&xhci->cancel_cmd_list))
1524     + return;
1525     +
1526     + list_for_each_entry_safe(cur_cd, next_cd,
1527     + &xhci->cancel_cmd_list, cancel_cmd_list) {
1528     + xhci_cmd_to_noop(xhci, cur_cd);
1529     + list_del(&cur_cd->cancel_cmd_list);
1530     + kfree(cur_cd);
1531     + }
1532     +}
1533     +
1534     +/*
1535     + * traversing the cancel_cmd_list. If the command descriptor according
1536     + * to cmd_trb is found, the function free it and return 1, otherwise
1537     + * return 0.
1538     + */
1539     +static int xhci_search_cmd_trb_in_cd_list(struct xhci_hcd *xhci,
1540     + union xhci_trb *cmd_trb)
1541     +{
1542     + struct xhci_cd *cur_cd, *next_cd;
1543     +
1544     + if (list_empty(&xhci->cancel_cmd_list))
1545     + return 0;
1546     +
1547     + list_for_each_entry_safe(cur_cd, next_cd,
1548     + &xhci->cancel_cmd_list, cancel_cmd_list) {
1549     + if (cur_cd->cmd_trb == cmd_trb) {
1550     + if (cur_cd->command)
1551     + xhci_complete_cmd_in_cmd_wait_list(xhci,
1552     + cur_cd->command, COMP_CMD_STOP);
1553     + list_del(&cur_cd->cancel_cmd_list);
1554     + kfree(cur_cd);
1555     + return 1;
1556     + }
1557     + }
1558     +
1559     + return 0;
1560     +}
1561     +
1562     +/*
1563     + * If the cmd_trb_comp_code is COMP_CMD_ABORT, we just check whether the
1564     + * trb pointed by the command ring dequeue pointer is the trb we want to
1565     + * cancel or not. And if the cmd_trb_comp_code is COMP_CMD_STOP, we will
1566     + * traverse the cancel_cmd_list to trun the all of the commands according
1567     + * to command descriptor to NO-OP trb.
1568     + */
1569     +static int handle_stopped_cmd_ring(struct xhci_hcd *xhci,
1570     + int cmd_trb_comp_code)
1571     +{
1572     + int cur_trb_is_good = 0;
1573     +
1574     + /* Searching the cmd trb pointed by the command ring dequeue
1575     + * pointer in command descriptor list. If it is found, free it.
1576     + */
1577     + cur_trb_is_good = xhci_search_cmd_trb_in_cd_list(xhci,
1578     + xhci->cmd_ring->dequeue);
1579     +
1580     + if (cmd_trb_comp_code == COMP_CMD_ABORT)
1581     + xhci->cmd_ring_state = CMD_RING_STATE_STOPPED;
1582     + else if (cmd_trb_comp_code == COMP_CMD_STOP) {
1583     + /* traversing the cancel_cmd_list and canceling
1584     + * the command according to command descriptor
1585     + */
1586     + xhci_cancel_cmd_in_cd_list(xhci);
1587     +
1588     + xhci->cmd_ring_state = CMD_RING_STATE_RUNNING;
1589     + /*
1590     + * ring command ring doorbell again to restart the
1591     + * command ring
1592     + */
1593     + if (xhci->cmd_ring->dequeue != xhci->cmd_ring->enqueue)
1594     + xhci_ring_cmd_db(xhci);
1595     + }
1596     + return cur_trb_is_good;
1597     +}
1598     +
1599     static void handle_cmd_completion(struct xhci_hcd *xhci,
1600     struct xhci_event_cmd *event)
1601     {
1602     @@ -1111,6 +1365,22 @@ static void handle_cmd_completion(struct xhci_hcd *xhci,
1603     xhci->error_bitmask |= 1 << 5;
1604     return;
1605     }
1606     +
1607     + if ((GET_COMP_CODE(le32_to_cpu(event->status)) == COMP_CMD_ABORT) ||
1608     + (GET_COMP_CODE(le32_to_cpu(event->status)) == COMP_CMD_STOP)) {
1609     + /* If the return value is 0, we think the trb pointed by
1610     + * command ring dequeue pointer is a good trb. The good
1611     + * trb means we don't want to cancel the trb, but it have
1612     + * been stopped by host. So we should handle it normally.
1613     + * Otherwise, driver should invoke inc_deq() and return.
1614     + */
1615     + if (handle_stopped_cmd_ring(xhci,
1616     + GET_COMP_CODE(le32_to_cpu(event->status)))) {
1617     + inc_deq(xhci, xhci->cmd_ring);
1618     + return;
1619     + }
1620     + }
1621     +
1622     switch (le32_to_cpu(xhci->cmd_ring->dequeue->generic.field[3])
1623     & TRB_TYPE_BITMASK) {
1624     case TRB_TYPE(TRB_ENABLE_SLOT):
1625     @@ -3400,7 +3670,9 @@ static int xhci_queue_isoc_tx(struct xhci_hcd *xhci, gfp_t mem_flags,
1626     } else {
1627     td->last_trb = ep_ring->enqueue;
1628     field |= TRB_IOC;
1629     - if (xhci->hci_version == 0x100) {
1630     + if (xhci->hci_version == 0x100 &&
1631     + !(xhci->quirks &
1632     + XHCI_AVOID_BEI)) {
1633     /* Set BEI bit except for the last td */
1634     if (i < num_tds - 1)
1635     field |= TRB_BEI;
1636     diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c
1637     index 6ece0ed..a49868d 100644
1638     --- a/drivers/usb/host/xhci.c
1639     +++ b/drivers/usb/host/xhci.c
1640     @@ -52,7 +52,7 @@ MODULE_PARM_DESC(link_quirk, "Don't clear the chain bit on a link TRB");
1641     * handshake done). There are two failure modes: "usec" have passed (major
1642     * hardware flakeout), or the register reads as all-ones (hardware removed).
1643     */
1644     -static int handshake(struct xhci_hcd *xhci, void __iomem *ptr,
1645     +int handshake(struct xhci_hcd *xhci, void __iomem *ptr,
1646     u32 mask, u32 done, int usec)
1647     {
1648     u32 result;
1649     @@ -105,9 +105,10 @@ int xhci_halt(struct xhci_hcd *xhci)
1650    
1651     ret = handshake(xhci, &xhci->op_regs->status,
1652     STS_HALT, STS_HALT, XHCI_MAX_HALT_USEC);
1653     - if (!ret)
1654     + if (!ret) {
1655     xhci->xhc_state |= XHCI_STATE_HALTED;
1656     - else
1657     + xhci->cmd_ring_state = CMD_RING_STATE_STOPPED;
1658     + } else
1659     xhci_warn(xhci, "Host not halted after %u microseconds.\n",
1660     XHCI_MAX_HALT_USEC);
1661     return ret;
1662     @@ -470,6 +471,8 @@ static bool compliance_mode_recovery_timer_quirk_check(void)
1663    
1664     dmi_product_name = dmi_get_system_info(DMI_PRODUCT_NAME);
1665     dmi_sys_vendor = dmi_get_system_info(DMI_SYS_VENDOR);
1666     + if (!dmi_product_name || !dmi_sys_vendor)
1667     + return false;
1668    
1669     if (!(strstr(dmi_sys_vendor, "Hewlett-Packard")))
1670     return false;
1671     @@ -581,6 +584,7 @@ static int xhci_run_finished(struct xhci_hcd *xhci)
1672     return -ENODEV;
1673     }
1674     xhci->shared_hcd->state = HC_STATE_RUNNING;
1675     + xhci->cmd_ring_state = CMD_RING_STATE_RUNNING;
1676    
1677     if (xhci->quirks & XHCI_NEC_HOST)
1678     xhci_ring_cmd_db(xhci);
1679     @@ -886,7 +890,7 @@ int xhci_suspend(struct xhci_hcd *xhci)
1680     command &= ~CMD_RUN;
1681     xhci_writel(xhci, command, &xhci->op_regs->command);
1682     if (handshake(xhci, &xhci->op_regs->status,
1683     - STS_HALT, STS_HALT, 100*100)) {
1684     + STS_HALT, STS_HALT, XHCI_MAX_HALT_USEC)) {
1685     xhci_warn(xhci, "WARN: xHC CMD_RUN timeout\n");
1686     spin_unlock_irq(&xhci->lock);
1687     return -ETIMEDOUT;
1688     @@ -2521,6 +2525,7 @@ static int xhci_configure_endpoint(struct xhci_hcd *xhci,
1689     struct completion *cmd_completion;
1690     u32 *cmd_status;
1691     struct xhci_virt_device *virt_dev;
1692     + union xhci_trb *cmd_trb;
1693    
1694     spin_lock_irqsave(&xhci->lock, flags);
1695     virt_dev = xhci->devs[udev->slot_id];
1696     @@ -2566,6 +2571,7 @@ static int xhci_configure_endpoint(struct xhci_hcd *xhci,
1697     }
1698     init_completion(cmd_completion);
1699    
1700     + cmd_trb = xhci->cmd_ring->dequeue;
1701     if (!ctx_change)
1702     ret = xhci_queue_configure_endpoint(xhci, in_ctx->dma,
1703     udev->slot_id, must_succeed);
1704     @@ -2587,14 +2593,17 @@ static int xhci_configure_endpoint(struct xhci_hcd *xhci,
1705     /* Wait for the configure endpoint command to complete */
1706     timeleft = wait_for_completion_interruptible_timeout(
1707     cmd_completion,
1708     - USB_CTRL_SET_TIMEOUT);
1709     + XHCI_CMD_DEFAULT_TIMEOUT);
1710     if (timeleft <= 0) {
1711     xhci_warn(xhci, "%s while waiting for %s command\n",
1712     timeleft == 0 ? "Timeout" : "Signal",
1713     ctx_change == 0 ?
1714     "configure endpoint" :
1715     "evaluate context");
1716     - /* FIXME cancel the configure endpoint command */
1717     + /* cancel the configure endpoint command */
1718     + ret = xhci_cancel_cmd(xhci, command, cmd_trb);
1719     + if (ret < 0)
1720     + return ret;
1721     return -ETIME;
1722     }
1723    
1724     @@ -3543,8 +3552,10 @@ int xhci_alloc_dev(struct usb_hcd *hcd, struct usb_device *udev)
1725     unsigned long flags;
1726     int timeleft;
1727     int ret;
1728     + union xhci_trb *cmd_trb;
1729    
1730     spin_lock_irqsave(&xhci->lock, flags);
1731     + cmd_trb = xhci->cmd_ring->dequeue;
1732     ret = xhci_queue_slot_control(xhci, TRB_ENABLE_SLOT, 0);
1733     if (ret) {
1734     spin_unlock_irqrestore(&xhci->lock, flags);
1735     @@ -3556,12 +3567,12 @@ int xhci_alloc_dev(struct usb_hcd *hcd, struct usb_device *udev)
1736    
1737     /* XXX: how much time for xHC slot assignment? */
1738     timeleft = wait_for_completion_interruptible_timeout(&xhci->addr_dev,
1739     - USB_CTRL_SET_TIMEOUT);
1740     + XHCI_CMD_DEFAULT_TIMEOUT);
1741     if (timeleft <= 0) {
1742     xhci_warn(xhci, "%s while waiting for a slot\n",
1743     timeleft == 0 ? "Timeout" : "Signal");
1744     - /* FIXME cancel the enable slot request */
1745     - return 0;
1746     + /* cancel the enable slot request */
1747     + return xhci_cancel_cmd(xhci, NULL, cmd_trb);
1748     }
1749    
1750     if (!xhci->slot_id) {
1751     @@ -3622,6 +3633,7 @@ int xhci_address_device(struct usb_hcd *hcd, struct usb_device *udev)
1752     struct xhci_slot_ctx *slot_ctx;
1753     struct xhci_input_control_ctx *ctrl_ctx;
1754     u64 temp_64;
1755     + union xhci_trb *cmd_trb;
1756    
1757     if (!udev->slot_id) {
1758     xhci_dbg(xhci, "Bad Slot ID %d\n", udev->slot_id);
1759     @@ -3660,6 +3672,7 @@ int xhci_address_device(struct usb_hcd *hcd, struct usb_device *udev)
1760     xhci_dbg_ctx(xhci, virt_dev->in_ctx, 2);
1761    
1762     spin_lock_irqsave(&xhci->lock, flags);
1763     + cmd_trb = xhci->cmd_ring->dequeue;
1764     ret = xhci_queue_address_device(xhci, virt_dev->in_ctx->dma,
1765     udev->slot_id);
1766     if (ret) {
1767     @@ -3672,7 +3685,7 @@ int xhci_address_device(struct usb_hcd *hcd, struct usb_device *udev)
1768    
1769     /* ctrl tx can take up to 5 sec; XXX: need more time for xHC? */
1770     timeleft = wait_for_completion_interruptible_timeout(&xhci->addr_dev,
1771     - USB_CTRL_SET_TIMEOUT);
1772     + XHCI_CMD_DEFAULT_TIMEOUT);
1773     /* FIXME: From section 4.3.4: "Software shall be responsible for timing
1774     * the SetAddress() "recovery interval" required by USB and aborting the
1775     * command on a timeout.
1776     @@ -3680,7 +3693,10 @@ int xhci_address_device(struct usb_hcd *hcd, struct usb_device *udev)
1777     if (timeleft <= 0) {
1778     xhci_warn(xhci, "%s while waiting for address device command\n",
1779     timeleft == 0 ? "Timeout" : "Signal");
1780     - /* FIXME cancel the address device command */
1781     + /* cancel the address device command */
1782     + ret = xhci_cancel_cmd(xhci, NULL, cmd_trb);
1783     + if (ret < 0)
1784     + return ret;
1785     return -ETIME;
1786     }
1787    
1788     diff --git a/drivers/usb/host/xhci.h b/drivers/usb/host/xhci.h
1789     index 1a05908..53df4e7 100644
1790     --- a/drivers/usb/host/xhci.h
1791     +++ b/drivers/usb/host/xhci.h
1792     @@ -1256,6 +1256,16 @@ struct xhci_td {
1793     union xhci_trb *last_trb;
1794     };
1795    
1796     +/* xHCI command default timeout value */
1797     +#define XHCI_CMD_DEFAULT_TIMEOUT (5 * HZ)
1798     +
1799     +/* command descriptor */
1800     +struct xhci_cd {
1801     + struct list_head cancel_cmd_list;
1802     + struct xhci_command *command;
1803     + union xhci_trb *cmd_trb;
1804     +};
1805     +
1806     struct xhci_dequeue_state {
1807     struct xhci_segment *new_deq_seg;
1808     union xhci_trb *new_deq_ptr;
1809     @@ -1421,6 +1431,11 @@ struct xhci_hcd {
1810     /* data structures */
1811     struct xhci_device_context_array *dcbaa;
1812     struct xhci_ring *cmd_ring;
1813     + unsigned int cmd_ring_state;
1814     +#define CMD_RING_STATE_RUNNING (1 << 0)
1815     +#define CMD_RING_STATE_ABORTED (1 << 1)
1816     +#define CMD_RING_STATE_STOPPED (1 << 2)
1817     + struct list_head cancel_cmd_list;
1818     unsigned int cmd_ring_reserved_trbs;
1819     struct xhci_ring *event_ring;
1820     struct xhci_erst erst;
1821     @@ -1496,6 +1511,7 @@ struct xhci_hcd {
1822     #define XHCI_INTEL_HOST (1 << 12)
1823     #define XHCI_SPURIOUS_REBOOT (1 << 13)
1824     #define XHCI_COMP_MODE_QUIRK (1 << 14)
1825     +#define XHCI_AVOID_BEI (1 << 15)
1826     unsigned int num_active_eps;
1827     unsigned int limit_active_eps;
1828     /* There are two roothubs to keep track of bus suspend info for */
1829     @@ -1704,6 +1720,8 @@ static inline void xhci_unregister_plat(void)
1830    
1831     /* xHCI host controller glue */
1832     typedef void (*xhci_get_quirks_t)(struct device *, struct xhci_hcd *);
1833     +int handshake(struct xhci_hcd *xhci, void __iomem *ptr,
1834     + u32 mask, u32 done, int usec);
1835     void xhci_quiesce(struct xhci_hcd *xhci);
1836     int xhci_halt(struct xhci_hcd *xhci);
1837     int xhci_reset(struct xhci_hcd *xhci);
1838     @@ -1794,6 +1812,8 @@ void xhci_queue_config_ep_quirk(struct xhci_hcd *xhci,
1839     unsigned int slot_id, unsigned int ep_index,
1840     struct xhci_dequeue_state *deq_state);
1841     void xhci_stop_endpoint_command_watchdog(unsigned long arg);
1842     +int xhci_cancel_cmd(struct xhci_hcd *xhci, struct xhci_command *command,
1843     + union xhci_trb *cmd_trb);
1844     void xhci_ring_ep_doorbell(struct xhci_hcd *xhci, unsigned int slot_id,
1845     unsigned int ep_index, unsigned int stream_id);
1846    
1847     diff --git a/drivers/usb/otg/mxs-phy.c b/drivers/usb/otg/mxs-phy.c
1848     index c1a67cb..88db976 100644
1849     --- a/drivers/usb/otg/mxs-phy.c
1850     +++ b/drivers/usb/otg/mxs-phy.c
1851     @@ -20,6 +20,7 @@
1852     #include <linux/delay.h>
1853     #include <linux/err.h>
1854     #include <linux/io.h>
1855     +#include <linux/workqueue.h>
1856    
1857     #define DRIVER_NAME "mxs_phy"
1858    
1859     @@ -34,9 +35,16 @@
1860     #define BM_USBPHY_CTRL_ENUTMILEVEL2 BIT(14)
1861     #define BM_USBPHY_CTRL_ENHOSTDISCONDETECT BIT(1)
1862    
1863     +/*
1864     + * Amount of delay in miliseconds to safely enable ENHOSTDISCONDETECT bit
1865     + * so that connection and reset processing can be completed for the root hub.
1866     + */
1867     +#define MXY_PHY_ENHOSTDISCONDETECT_DELAY 250
1868     +
1869     struct mxs_phy {
1870     struct usb_phy phy;
1871     struct clk *clk;
1872     + struct delayed_work enhostdiscondetect_work;
1873     };
1874    
1875     #define to_mxs_phy(p) container_of((p), struct mxs_phy, phy)
1876     @@ -62,6 +70,7 @@ static int mxs_phy_init(struct usb_phy *phy)
1877    
1878     clk_prepare_enable(mxs_phy->clk);
1879     mxs_phy_hw_init(mxs_phy);
1880     + INIT_DELAYED_WORK(&mxs_phy->enhostdiscondetect_work, NULL);
1881    
1882     return 0;
1883     }
1884     @@ -76,13 +85,34 @@ static void mxs_phy_shutdown(struct usb_phy *phy)
1885     clk_disable_unprepare(mxs_phy->clk);
1886     }
1887    
1888     +static void mxs_phy_enhostdiscondetect_delay(struct work_struct *ws)
1889     +{
1890     + struct mxs_phy *mxs_phy = container_of(ws, struct mxs_phy,
1891     + enhostdiscondetect_work.work);
1892     +
1893     + /* Enable HOSTDISCONDETECT after delay. */
1894     + dev_dbg(mxs_phy->phy.dev, "Setting ENHOSTDISCONDETECT\n");
1895     + writel_relaxed(BM_USBPHY_CTRL_ENHOSTDISCONDETECT,
1896     + mxs_phy->phy.io_priv + HW_USBPHY_CTRL_SET);
1897     +}
1898     +
1899     static int mxs_phy_on_connect(struct usb_phy *phy, int port)
1900     {
1901     + struct mxs_phy *mxs_phy = to_mxs_phy(phy);
1902     +
1903     dev_dbg(phy->dev, "Connect on port %d\n", port);
1904    
1905     - mxs_phy_hw_init(to_mxs_phy(phy));
1906     - writel_relaxed(BM_USBPHY_CTRL_ENHOSTDISCONDETECT,
1907     - phy->io_priv + HW_USBPHY_CTRL_SET);
1908     + mxs_phy_hw_init(mxs_phy);
1909     +
1910     + /*
1911     + * Delay enabling ENHOSTDISCONDETECT so that connection and
1912     + * reset processing can be completed for the root hub.
1913     + */
1914     + dev_dbg(phy->dev, "Delaying setting ENHOSTDISCONDETECT\n");
1915     + PREPARE_DELAYED_WORK(&mxs_phy->enhostdiscondetect_work,
1916     + mxs_phy_enhostdiscondetect_delay);
1917     + schedule_delayed_work(&mxs_phy->enhostdiscondetect_work,
1918     + msecs_to_jiffies(MXY_PHY_ENHOSTDISCONDETECT_DELAY));
1919    
1920     return 0;
1921     }
1922     @@ -91,6 +121,8 @@ static int mxs_phy_on_disconnect(struct usb_phy *phy, int port)
1923     {
1924     dev_dbg(phy->dev, "Disconnect on port %d\n", port);
1925    
1926     + /* No need to delay before clearing ENHOSTDISCONDETECT. */
1927     + dev_dbg(phy->dev, "Clearing ENHOSTDISCONDETECT\n");
1928     writel_relaxed(BM_USBPHY_CTRL_ENHOSTDISCONDETECT,
1929     phy->io_priv + HW_USBPHY_CTRL_CLR);
1930    
1931     diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c
1932     index f906b3a..b71ee32 100644
1933     --- a/drivers/usb/serial/ftdi_sio.c
1934     +++ b/drivers/usb/serial/ftdi_sio.c
1935     @@ -584,6 +584,8 @@ static struct usb_device_id id_table_combined [] = {
1936     { USB_DEVICE(FTDI_VID, FTDI_IBS_PEDO_PID) },
1937     { USB_DEVICE(FTDI_VID, FTDI_IBS_PROD_PID) },
1938     { USB_DEVICE(FTDI_VID, FTDI_TAVIR_STK500_PID) },
1939     + { USB_DEVICE(FTDI_VID, FTDI_TIAO_UMPA_PID),
1940     + .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
1941     /*
1942     * ELV devices:
1943     */
1944     diff --git a/drivers/usb/serial/ftdi_sio_ids.h b/drivers/usb/serial/ftdi_sio_ids.h
1945     index 41fe582..57c12ef 100644
1946     --- a/drivers/usb/serial/ftdi_sio_ids.h
1947     +++ b/drivers/usb/serial/ftdi_sio_ids.h
1948     @@ -517,6 +517,11 @@
1949     */
1950     #define FTDI_TAVIR_STK500_PID 0xFA33 /* STK500 AVR programmer */
1951    
1952     +/*
1953     + * TIAO product ids (FTDI_VID)
1954     + * http://www.tiaowiki.com/w/Main_Page
1955     + */
1956     +#define FTDI_TIAO_UMPA_PID 0x8a98 /* TIAO/DIYGADGET USB Multi-Protocol Adapter */
1957    
1958    
1959     /********************************/
1960     diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c
1961     index 5ce88d1..5f30800 100644
1962     --- a/drivers/usb/serial/option.c
1963     +++ b/drivers/usb/serial/option.c
1964     @@ -870,7 +870,8 @@ static const struct usb_device_id option_ids[] = {
1965     { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0153, 0xff, 0xff, 0xff) },
1966     { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0155, 0xff, 0xff, 0xff) },
1967     { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0156, 0xff, 0xff, 0xff) },
1968     - { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0157, 0xff, 0xff, 0xff) },
1969     + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0157, 0xff, 0xff, 0xff),
1970     + .driver_info = (kernel_ulong_t)&net_intf5_blacklist },
1971     { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0158, 0xff, 0xff, 0xff) },
1972     { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0159, 0xff, 0xff, 0xff) },
1973     { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0161, 0xff, 0xff, 0xff) },
1974     diff --git a/drivers/usb/serial/qcaux.c b/drivers/usb/serial/qcaux.c
1975     index a4edc7e..9b1b96f 100644
1976     --- a/drivers/usb/serial/qcaux.c
1977     +++ b/drivers/usb/serial/qcaux.c
1978     @@ -36,8 +36,6 @@
1979     #define UTSTARCOM_PRODUCT_UM175_V1 0x3712
1980     #define UTSTARCOM_PRODUCT_UM175_V2 0x3714
1981     #define UTSTARCOM_PRODUCT_UM175_ALLTEL 0x3715
1982     -#define PANTECH_PRODUCT_UML190_VZW 0x3716
1983     -#define PANTECH_PRODUCT_UML290_VZW 0x3718
1984    
1985     /* CMOTECH devices */
1986     #define CMOTECH_VENDOR_ID 0x16d8
1987     @@ -68,11 +66,9 @@ static struct usb_device_id id_table[] = {
1988     { USB_DEVICE_AND_INTERFACE_INFO(LG_VENDOR_ID, LG_PRODUCT_VX4400_6000, 0xff, 0xff, 0x00) },
1989     { USB_DEVICE_AND_INTERFACE_INFO(SANYO_VENDOR_ID, SANYO_PRODUCT_KATANA_LX, 0xff, 0xff, 0x00) },
1990     { USB_DEVICE_AND_INTERFACE_INFO(SAMSUNG_VENDOR_ID, SAMSUNG_PRODUCT_U520, 0xff, 0x00, 0x00) },
1991     - { USB_DEVICE_AND_INTERFACE_INFO(UTSTARCOM_VENDOR_ID, PANTECH_PRODUCT_UML190_VZW, 0xff, 0xff, 0xff) },
1992     - { USB_DEVICE_AND_INTERFACE_INFO(UTSTARCOM_VENDOR_ID, PANTECH_PRODUCT_UML190_VZW, 0xff, 0xfe, 0xff) },
1993     - { USB_DEVICE_AND_INTERFACE_INFO(UTSTARCOM_VENDOR_ID, PANTECH_PRODUCT_UML290_VZW, 0xff, 0xfd, 0xff) }, /* NMEA */
1994     - { USB_DEVICE_AND_INTERFACE_INFO(UTSTARCOM_VENDOR_ID, PANTECH_PRODUCT_UML290_VZW, 0xff, 0xfe, 0xff) }, /* WMC */
1995     - { USB_DEVICE_AND_INTERFACE_INFO(UTSTARCOM_VENDOR_ID, PANTECH_PRODUCT_UML290_VZW, 0xff, 0xff, 0xff) }, /* DIAG */
1996     + { USB_VENDOR_AND_INTERFACE_INFO(UTSTARCOM_VENDOR_ID, 0xff, 0xfd, 0xff) }, /* NMEA */
1997     + { USB_VENDOR_AND_INTERFACE_INFO(UTSTARCOM_VENDOR_ID, 0xff, 0xfe, 0xff) }, /* WMC */
1998     + { USB_VENDOR_AND_INTERFACE_INFO(UTSTARCOM_VENDOR_ID, 0xff, 0xff, 0xff) }, /* DIAG */
1999     { },
2000     };
2001     MODULE_DEVICE_TABLE(usb, id_table);
2002     diff --git a/drivers/usb/serial/usb-serial.c b/drivers/usb/serial/usb-serial.c
2003     index 27483f9..667c39c 100644
2004     --- a/drivers/usb/serial/usb-serial.c
2005     +++ b/drivers/usb/serial/usb-serial.c
2006     @@ -1426,9 +1426,10 @@ int usb_serial_register_drivers(struct usb_serial_driver *const serial_drivers[]
2007    
2008     /* we only set the reset_resume field if the serial_driver has one */
2009     for (sd = serial_drivers; *sd; ++sd) {
2010     - if ((*sd)->reset_resume)
2011     + if ((*sd)->reset_resume) {
2012     udriver->reset_resume = usb_serial_reset_resume;
2013     break;
2014     + }
2015     }
2016    
2017     rc = usb_register(udriver);
2018     diff --git a/drivers/xen/xen-pciback/pci_stub.c b/drivers/xen/xen-pciback/pci_stub.c
2019     index 0334272..77c9f76 100644
2020     --- a/drivers/xen/xen-pciback/pci_stub.c
2021     +++ b/drivers/xen/xen-pciback/pci_stub.c
2022     @@ -362,6 +362,7 @@ static int __devinit pcistub_init_device(struct pci_dev *dev)
2023     else {
2024     dev_dbg(&dev->dev, "reseting (FLR, D3, etc) the device\n");
2025     __pci_reset_function_locked(dev);
2026     + pci_restore_state(dev);
2027     }
2028     /* Now disable the device (this also ensures some private device
2029     * data is setup before we export)
2030     diff --git a/fs/binfmt_elf.c b/fs/binfmt_elf.c
2031     index 1b52956..0225fdd 100644
2032     --- a/fs/binfmt_elf.c
2033     +++ b/fs/binfmt_elf.c
2034     @@ -1696,30 +1696,19 @@ static int elf_note_info_init(struct elf_note_info *info)
2035     return 0;
2036     info->psinfo = kmalloc(sizeof(*info->psinfo), GFP_KERNEL);
2037     if (!info->psinfo)
2038     - goto notes_free;
2039     + return 0;
2040     info->prstatus = kmalloc(sizeof(*info->prstatus), GFP_KERNEL);
2041     if (!info->prstatus)
2042     - goto psinfo_free;
2043     + return 0;
2044     info->fpu = kmalloc(sizeof(*info->fpu), GFP_KERNEL);
2045     if (!info->fpu)
2046     - goto prstatus_free;
2047     + return 0;
2048     #ifdef ELF_CORE_COPY_XFPREGS
2049     info->xfpu = kmalloc(sizeof(*info->xfpu), GFP_KERNEL);
2050     if (!info->xfpu)
2051     - goto fpu_free;
2052     + return 0;
2053     #endif
2054     return 1;
2055     -#ifdef ELF_CORE_COPY_XFPREGS
2056     - fpu_free:
2057     - kfree(info->fpu);
2058     -#endif
2059     - prstatus_free:
2060     - kfree(info->prstatus);
2061     - psinfo_free:
2062     - kfree(info->psinfo);
2063     - notes_free:
2064     - kfree(info->notes);
2065     - return 0;
2066     }
2067    
2068     static int fill_note_info(struct elfhdr *elf, int phdrs,
2069     diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h
2070     index 6b4565c..8d3c427 100644
2071     --- a/include/linux/pci_ids.h
2072     +++ b/include/linux/pci_ids.h
2073     @@ -1847,7 +1847,6 @@
2074     #define PCI_DEVICE_ID_SIIG_8S_20x_650 0x2081
2075     #define PCI_DEVICE_ID_SIIG_8S_20x_850 0x2082
2076     #define PCI_SUBDEVICE_ID_SIIG_QUARTET_SERIAL 0x2050
2077     -#define PCI_SUBDEVICE_ID_SIIG_DUAL_SERIAL 0x2530
2078    
2079     #define PCI_VENDOR_ID_RADISYS 0x1331
2080    
2081     diff --git a/security/yama/yama_lsm.c b/security/yama/yama_lsm.c
2082     index 0cc99a3..dcd6178 100644
2083     --- a/security/yama/yama_lsm.c
2084     +++ b/security/yama/yama_lsm.c
2085     @@ -143,7 +143,7 @@ static int yama_task_prctl(int option, unsigned long arg2, unsigned long arg3,
2086     if (arg2 == 0) {
2087     yama_ptracer_del(NULL, myself);
2088     rc = 0;
2089     - } else if (arg2 == PR_SET_PTRACER_ANY) {
2090     + } else if (arg2 == PR_SET_PTRACER_ANY || (int)arg2 == -1) {
2091     rc = yama_ptracer_add(NULL, myself);
2092     } else {
2093     struct task_struct *tracer;
2094     diff --git a/tools/hv/hv_kvp_daemon.c b/tools/hv/hv_kvp_daemon.c
2095     index d9834b3..2984ffb 100644
2096     --- a/tools/hv/hv_kvp_daemon.c
2097     +++ b/tools/hv/hv_kvp_daemon.c
2098     @@ -106,7 +106,7 @@ static void kvp_acquire_lock(int pool)
2099    
2100     if (fcntl(kvp_file_info[pool].fd, F_SETLKW, &fl) == -1) {
2101     syslog(LOG_ERR, "Failed to acquire the lock pool: %d", pool);
2102     - exit(-1);
2103     + exit(EXIT_FAILURE);
2104     }
2105     }
2106    
2107     @@ -118,7 +118,7 @@ static void kvp_release_lock(int pool)
2108     if (fcntl(kvp_file_info[pool].fd, F_SETLK, &fl) == -1) {
2109     perror("fcntl");
2110     syslog(LOG_ERR, "Failed to release the lock pool: %d", pool);
2111     - exit(-1);
2112     + exit(EXIT_FAILURE);
2113     }
2114     }
2115    
2116     @@ -137,14 +137,19 @@ static void kvp_update_file(int pool)
2117     if (!filep) {
2118     kvp_release_lock(pool);
2119     syslog(LOG_ERR, "Failed to open file, pool: %d", pool);
2120     - exit(-1);
2121     + exit(EXIT_FAILURE);
2122     }
2123    
2124     bytes_written = fwrite(kvp_file_info[pool].records,
2125     sizeof(struct kvp_record),
2126     kvp_file_info[pool].num_records, filep);
2127    
2128     - fflush(filep);
2129     + if (ferror(filep) || fclose(filep)) {
2130     + kvp_release_lock(pool);
2131     + syslog(LOG_ERR, "Failed to write file, pool: %d", pool);
2132     + exit(EXIT_FAILURE);
2133     + }
2134     +
2135     kvp_release_lock(pool);
2136     }
2137    
2138     @@ -163,14 +168,19 @@ static void kvp_update_mem_state(int pool)
2139     if (!filep) {
2140     kvp_release_lock(pool);
2141     syslog(LOG_ERR, "Failed to open file, pool: %d", pool);
2142     - exit(-1);
2143     + exit(EXIT_FAILURE);
2144     }
2145     - while (!feof(filep)) {
2146     + for (;;) {
2147     readp = &record[records_read];
2148     records_read += fread(readp, sizeof(struct kvp_record),
2149     ENTRIES_PER_BLOCK * num_blocks,
2150     filep);
2151    
2152     + if (ferror(filep)) {
2153     + syslog(LOG_ERR, "Failed to read file, pool: %d", pool);
2154     + exit(EXIT_FAILURE);
2155     + }
2156     +
2157     if (!feof(filep)) {
2158     /*
2159     * We have more data to read.
2160     @@ -180,7 +190,7 @@ static void kvp_update_mem_state(int pool)
2161    
2162     if (record == NULL) {
2163     syslog(LOG_ERR, "malloc failed");
2164     - exit(-1);
2165     + exit(EXIT_FAILURE);
2166     }
2167     continue;
2168     }
2169     @@ -191,6 +201,7 @@ static void kvp_update_mem_state(int pool)
2170     kvp_file_info[pool].records = record;
2171     kvp_file_info[pool].num_records = records_read;
2172    
2173     + fclose(filep);
2174     kvp_release_lock(pool);
2175     }
2176     static int kvp_file_init(void)
2177     @@ -208,7 +219,7 @@ static int kvp_file_init(void)
2178     if (access("/var/opt/hyperv", F_OK)) {
2179     if (mkdir("/var/opt/hyperv", S_IRUSR | S_IWUSR | S_IROTH)) {
2180     syslog(LOG_ERR, " Failed to create /var/opt/hyperv");
2181     - exit(-1);
2182     + exit(EXIT_FAILURE);
2183     }
2184     }
2185    
2186     @@ -232,12 +243,18 @@ static int kvp_file_init(void)
2187     fclose(filep);
2188     return 1;
2189     }
2190     - while (!feof(filep)) {
2191     + for (;;) {
2192     readp = &record[records_read];
2193     records_read += fread(readp, sizeof(struct kvp_record),
2194     ENTRIES_PER_BLOCK,
2195     filep);
2196    
2197     + if (ferror(filep)) {
2198     + syslog(LOG_ERR, "Failed to read file, pool: %d",
2199     + i);
2200     + exit(EXIT_FAILURE);
2201     + }
2202     +
2203     if (!feof(filep)) {
2204     /*
2205     * We have more data to read.
2206     @@ -657,13 +674,13 @@ int main(void)
2207    
2208     if (kvp_file_init()) {
2209     syslog(LOG_ERR, "Failed to initialize the pools");
2210     - exit(-1);
2211     + exit(EXIT_FAILURE);
2212     }
2213    
2214     fd = socket(AF_NETLINK, SOCK_DGRAM, NETLINK_CONNECTOR);
2215     if (fd < 0) {
2216     syslog(LOG_ERR, "netlink socket creation failed; error:%d", fd);
2217     - exit(-1);
2218     + exit(EXIT_FAILURE);
2219     }
2220     addr.nl_family = AF_NETLINK;
2221     addr.nl_pad = 0;
2222     @@ -675,7 +692,7 @@ int main(void)
2223     if (error < 0) {
2224     syslog(LOG_ERR, "bind failed; error:%d", error);
2225     close(fd);
2226     - exit(-1);
2227     + exit(EXIT_FAILURE);
2228     }
2229     sock_opt = addr.nl_groups;
2230     setsockopt(fd, 270, 1, &sock_opt, sizeof(sock_opt));
2231     @@ -695,7 +712,7 @@ int main(void)
2232     if (len < 0) {
2233     syslog(LOG_ERR, "netlink_send failed; error:%d", len);
2234     close(fd);
2235     - exit(-1);
2236     + exit(EXIT_FAILURE);
2237     }
2238    
2239     pfd.fd = fd;
2240     @@ -863,7 +880,7 @@ kvp_done:
2241     len = netlink_send(fd, incoming_cn_msg);
2242     if (len < 0) {
2243     syslog(LOG_ERR, "net_link send failed; error:%d", len);
2244     - exit(-1);
2245     + exit(EXIT_FAILURE);
2246     }
2247     }
2248