diff options
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/ata/libata-core.c | 56 | ||||
-rw-r--r-- | drivers/ata/libata-eh.c | 7 | ||||
-rw-r--r-- | drivers/ata/libata-scsi.c | 20 | ||||
-rw-r--r-- | drivers/ata/pata_hpt37x.c | 4 | ||||
-rw-r--r-- | drivers/ata/pata_it821x.c | 2 | ||||
-rw-r--r-- | drivers/char/drm/drm_pciids.h | 2 | ||||
-rw-r--r-- | drivers/char/drm/sis_drv.h | 8 | ||||
-rw-r--r-- | drivers/net/au1000_eth.c | 2 | ||||
-rw-r--r-- | drivers/net/cxgb3/xgmac.c | 8 | ||||
-rw-r--r-- | drivers/net/s2io.c | 16 | ||||
-rw-r--r-- | drivers/usb/gadget/file_storage.c | 12 | ||||
-rw-r--r-- | drivers/usb/misc/iowarrior.c | 7 | ||||
-rw-r--r-- | drivers/usb/misc/usblcd.c | 22 | ||||
-rw-r--r-- | drivers/usb/serial/ftdi_sio.c | 1 | ||||
-rw-r--r-- | drivers/usb/serial/ftdi_sio.h | 1 | ||||
-rw-r--r-- | drivers/usb/serial/io_edgeport.c | 4 | ||||
-rw-r--r-- | drivers/usb/serial/option.c | 6 | ||||
-rw-r--r-- | drivers/usb/serial/ti_usb_3410_5052.c | 8 |
18 files changed, 93 insertions, 93 deletions
diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c index adfae9d1ce..bfc59a1047 100644 --- a/drivers/ata/libata-core.c +++ b/drivers/ata/libata-core.c | |||
@@ -600,8 +600,9 @@ static const char *sata_spd_string(unsigned int spd) | |||
600 | 600 | ||
601 | void ata_dev_disable(struct ata_device *dev) | 601 | void ata_dev_disable(struct ata_device *dev) |
602 | { | 602 | { |
603 | if (ata_dev_enabled(dev) && ata_msg_drv(dev->ap)) { | 603 | if (ata_dev_enabled(dev)) { |
604 | ata_dev_printk(dev, KERN_WARNING, "disabled\n"); | 604 | if (ata_msg_drv(dev->ap)) |
605 | ata_dev_printk(dev, KERN_WARNING, "disabled\n"); | ||
605 | ata_down_xfermask_limit(dev, ATA_DNXFER_FORCE_PIO0 | | 606 | ata_down_xfermask_limit(dev, ATA_DNXFER_FORCE_PIO0 | |
606 | ATA_DNXFER_QUIET); | 607 | ATA_DNXFER_QUIET); |
607 | dev->class++; | 608 | dev->class++; |
@@ -983,11 +984,6 @@ static u64 ata_hpa_resize(struct ata_device *dev) | |||
983 | else | 984 | else |
984 | hpa_sectors = ata_read_native_max_address(dev); | 985 | hpa_sectors = ata_read_native_max_address(dev); |
985 | 986 | ||
986 | /* if no hpa, both should be equal */ | ||
987 | ata_dev_printk(dev, KERN_INFO, "%s 1: sectors = %lld, " | ||
988 | "hpa_sectors = %lld\n", | ||
989 | __FUNCTION__, (long long)sectors, (long long)hpa_sectors); | ||
990 | |||
991 | if (hpa_sectors > sectors) { | 987 | if (hpa_sectors > sectors) { |
992 | ata_dev_printk(dev, KERN_INFO, | 988 | ata_dev_printk(dev, KERN_INFO, |
993 | "Host Protected Area detected:\n" | 989 | "Host Protected Area detected:\n" |
@@ -1009,7 +1005,11 @@ static u64 ata_hpa_resize(struct ata_device *dev) | |||
1009 | return hpa_sectors; | 1005 | return hpa_sectors; |
1010 | } | 1006 | } |
1011 | } | 1007 | } |
1012 | } | 1008 | } else if (hpa_sectors < sectors) |
1009 | ata_dev_printk(dev, KERN_WARNING, "%s 1: hpa sectors (%lld) " | ||
1010 | "is smaller than sectors (%lld)\n", __FUNCTION__, | ||
1011 | (long long)hpa_sectors, (long long)sectors); | ||
1012 | |||
1013 | return sectors; | 1013 | return sectors; |
1014 | } | 1014 | } |
1015 | 1015 | ||
@@ -2046,10 +2046,6 @@ int ata_dev_configure(struct ata_device *dev) | |||
2046 | dev->max_sectors = min_t(unsigned int, ATA_MAX_SECTORS_128, | 2046 | dev->max_sectors = min_t(unsigned int, ATA_MAX_SECTORS_128, |
2047 | dev->max_sectors); | 2047 | dev->max_sectors); |
2048 | 2048 | ||
2049 | /* limit ATAPI DMA to R/W commands only */ | ||
2050 | if (ata_device_blacklisted(dev) & ATA_HORKAGE_DMA_RW_ONLY) | ||
2051 | dev->horkage |= ATA_HORKAGE_DMA_RW_ONLY; | ||
2052 | |||
2053 | if (ap->ops->dev_config) | 2049 | if (ap->ops->dev_config) |
2054 | ap->ops->dev_config(dev); | 2050 | ap->ops->dev_config(dev); |
2055 | 2051 | ||
@@ -3780,8 +3776,7 @@ static const struct ata_blacklist_entry ata_device_blacklist [] = { | |||
3780 | { "IOMEGA ZIP 250 ATAPI", NULL, ATA_HORKAGE_NODMA }, /* temporary fix */ | 3776 | { "IOMEGA ZIP 250 ATAPI", NULL, ATA_HORKAGE_NODMA }, /* temporary fix */ |
3781 | 3777 | ||
3782 | /* Weird ATAPI devices */ | 3778 | /* Weird ATAPI devices */ |
3783 | { "TORiSAN DVD-ROM DRD-N216", NULL, ATA_HORKAGE_MAX_SEC_128 | | 3779 | { "TORiSAN DVD-ROM DRD-N216", NULL, ATA_HORKAGE_MAX_SEC_128 }, |
3784 | ATA_HORKAGE_DMA_RW_ONLY }, | ||
3785 | 3780 | ||
3786 | /* Devices we expect to fail diagnostics */ | 3781 | /* Devices we expect to fail diagnostics */ |
3787 | 3782 | ||
@@ -4109,6 +4104,7 @@ static void ata_fill_sg(struct ata_queued_cmd *qc) | |||
4109 | if (idx) | 4104 | if (idx) |
4110 | ap->prd[idx - 1].flags_len |= cpu_to_le32(ATA_PRD_EOT); | 4105 | ap->prd[idx - 1].flags_len |= cpu_to_le32(ATA_PRD_EOT); |
4111 | } | 4106 | } |
4107 | |||
4112 | /** | 4108 | /** |
4113 | * ata_check_atapi_dma - Check whether ATAPI DMA can be supported | 4109 | * ata_check_atapi_dma - Check whether ATAPI DMA can be supported |
4114 | * @qc: Metadata associated with taskfile to check | 4110 | * @qc: Metadata associated with taskfile to check |
@@ -4126,33 +4122,19 @@ static void ata_fill_sg(struct ata_queued_cmd *qc) | |||
4126 | int ata_check_atapi_dma(struct ata_queued_cmd *qc) | 4122 | int ata_check_atapi_dma(struct ata_queued_cmd *qc) |
4127 | { | 4123 | { |
4128 | struct ata_port *ap = qc->ap; | 4124 | struct ata_port *ap = qc->ap; |
4129 | int rc = 0; /* Assume ATAPI DMA is OK by default */ | 4125 | |
4130 | 4126 | /* Don't allow DMA if it isn't multiple of 16 bytes. Quite a | |
4131 | /* some drives can only do ATAPI DMA on read/write */ | 4127 | * few ATAPI devices choke on such DMA requests. |
4132 | if (unlikely(qc->dev->horkage & ATA_HORKAGE_DMA_RW_ONLY)) { | 4128 | */ |
4133 | struct scsi_cmnd *cmd = qc->scsicmd; | 4129 | if (unlikely(qc->nbytes & 15)) |
4134 | u8 *scsicmd = cmd->cmnd; | 4130 | return 1; |
4135 | |||
4136 | switch (scsicmd[0]) { | ||
4137 | case READ_10: | ||
4138 | case WRITE_10: | ||
4139 | case READ_12: | ||
4140 | case WRITE_12: | ||
4141 | case READ_6: | ||
4142 | case WRITE_6: | ||
4143 | /* atapi dma maybe ok */ | ||
4144 | break; | ||
4145 | default: | ||
4146 | /* turn off atapi dma */ | ||
4147 | return 1; | ||
4148 | } | ||
4149 | } | ||
4150 | 4131 | ||
4151 | if (ap->ops->check_atapi_dma) | 4132 | if (ap->ops->check_atapi_dma) |
4152 | rc = ap->ops->check_atapi_dma(qc); | 4133 | return ap->ops->check_atapi_dma(qc); |
4153 | 4134 | ||
4154 | return rc; | 4135 | return 0; |
4155 | } | 4136 | } |
4137 | |||
4156 | /** | 4138 | /** |
4157 | * ata_qc_prep - Prepare taskfile for submission | 4139 | * ata_qc_prep - Prepare taskfile for submission |
4158 | * @qc: Metadata associated with taskfile to be prepared | 4140 | * @qc: Metadata associated with taskfile to be prepared |
diff --git a/drivers/ata/libata-eh.c b/drivers/ata/libata-eh.c index d8070989a3..f7582c9c32 100644 --- a/drivers/ata/libata-eh.c +++ b/drivers/ata/libata-eh.c | |||
@@ -336,6 +336,7 @@ void ata_scsi_error(struct Scsi_Host *host) | |||
336 | } | 336 | } |
337 | ata_port_printk(ap, KERN_ERR, "EH pending after %d " | 337 | ata_port_printk(ap, KERN_ERR, "EH pending after %d " |
338 | "tries, giving up\n", ATA_EH_MAX_REPEAT); | 338 | "tries, giving up\n", ATA_EH_MAX_REPEAT); |
339 | ap->pflags &= ~ATA_PFLAG_EH_PENDING; | ||
339 | } | 340 | } |
340 | 341 | ||
341 | /* this run is complete, make sure EH info is clear */ | 342 | /* this run is complete, make sure EH info is clear */ |
@@ -1616,7 +1617,7 @@ static int ata_eh_reset(struct ata_port *ap, int classify, | |||
1616 | unsigned long deadline; | 1617 | unsigned long deadline; |
1617 | unsigned int action; | 1618 | unsigned int action; |
1618 | ata_reset_fn_t reset; | 1619 | ata_reset_fn_t reset; |
1619 | int i, did_followup_srst, rc; | 1620 | int i, rc; |
1620 | 1621 | ||
1621 | /* about to reset */ | 1622 | /* about to reset */ |
1622 | ata_eh_about_to_do(ap, NULL, ehc->i.action & ATA_EH_RESET_MASK); | 1623 | ata_eh_about_to_do(ap, NULL, ehc->i.action & ATA_EH_RESET_MASK); |
@@ -1665,8 +1666,6 @@ static int ata_eh_reset(struct ata_port *ap, int classify, | |||
1665 | 1666 | ||
1666 | /* did prereset() screw up? if so, fix up to avoid oopsing */ | 1667 | /* did prereset() screw up? if so, fix up to avoid oopsing */ |
1667 | if (!reset) { | 1668 | if (!reset) { |
1668 | ata_port_printk(ap, KERN_ERR, "BUG: prereset() requested " | ||
1669 | "invalid reset type\n"); | ||
1670 | if (softreset) | 1669 | if (softreset) |
1671 | reset = softreset; | 1670 | reset = softreset; |
1672 | else | 1671 | else |
@@ -1689,11 +1688,9 @@ static int ata_eh_reset(struct ata_port *ap, int classify, | |||
1689 | 1688 | ||
1690 | rc = ata_do_reset(ap, reset, classes, deadline); | 1689 | rc = ata_do_reset(ap, reset, classes, deadline); |
1691 | 1690 | ||
1692 | did_followup_srst = 0; | ||
1693 | if (reset == hardreset && | 1691 | if (reset == hardreset && |
1694 | ata_eh_followup_srst_needed(rc, classify, classes)) { | 1692 | ata_eh_followup_srst_needed(rc, classify, classes)) { |
1695 | /* okay, let's do follow-up softreset */ | 1693 | /* okay, let's do follow-up softreset */ |
1696 | did_followup_srst = 1; | ||
1697 | reset = softreset; | 1694 | reset = softreset; |
1698 | 1695 | ||
1699 | if (!reset) { | 1696 | if (!reset) { |
diff --git a/drivers/ata/libata-scsi.c b/drivers/ata/libata-scsi.c index c228df298b..4ddf00c8c5 100644 --- a/drivers/ata/libata-scsi.c +++ b/drivers/ata/libata-scsi.c | |||
@@ -2384,11 +2384,6 @@ static unsigned int atapi_xlat(struct ata_queued_cmd *qc) | |||
2384 | int using_pio = (dev->flags & ATA_DFLAG_PIO); | 2384 | int using_pio = (dev->flags & ATA_DFLAG_PIO); |
2385 | int nodata = (scmd->sc_data_direction == DMA_NONE); | 2385 | int nodata = (scmd->sc_data_direction == DMA_NONE); |
2386 | 2386 | ||
2387 | if (!using_pio) | ||
2388 | /* Check whether ATAPI DMA is safe */ | ||
2389 | if (ata_check_atapi_dma(qc)) | ||
2390 | using_pio = 1; | ||
2391 | |||
2392 | memset(qc->cdb, 0, dev->cdb_len); | 2387 | memset(qc->cdb, 0, dev->cdb_len); |
2393 | memcpy(qc->cdb, scmd->cmnd, scmd->cmd_len); | 2388 | memcpy(qc->cdb, scmd->cmnd, scmd->cmd_len); |
2394 | 2389 | ||
@@ -2401,19 +2396,22 @@ static unsigned int atapi_xlat(struct ata_queued_cmd *qc) | |||
2401 | } | 2396 | } |
2402 | 2397 | ||
2403 | qc->tf.command = ATA_CMD_PACKET; | 2398 | qc->tf.command = ATA_CMD_PACKET; |
2399 | qc->nbytes = scmd->request_bufflen; | ||
2400 | |||
2401 | /* check whether ATAPI DMA is safe */ | ||
2402 | if (!using_pio && ata_check_atapi_dma(qc)) | ||
2403 | using_pio = 1; | ||
2404 | 2404 | ||
2405 | /* no data, or PIO data xfer */ | ||
2406 | if (using_pio || nodata) { | 2405 | if (using_pio || nodata) { |
2406 | /* no data, or PIO data xfer */ | ||
2407 | if (nodata) | 2407 | if (nodata) |
2408 | qc->tf.protocol = ATA_PROT_ATAPI_NODATA; | 2408 | qc->tf.protocol = ATA_PROT_ATAPI_NODATA; |
2409 | else | 2409 | else |
2410 | qc->tf.protocol = ATA_PROT_ATAPI; | 2410 | qc->tf.protocol = ATA_PROT_ATAPI; |
2411 | qc->tf.lbam = (8 * 1024) & 0xff; | 2411 | qc->tf.lbam = (8 * 1024) & 0xff; |
2412 | qc->tf.lbah = (8 * 1024) >> 8; | 2412 | qc->tf.lbah = (8 * 1024) >> 8; |
2413 | } | 2413 | } else { |
2414 | 2414 | /* DMA data xfer */ | |
2415 | /* DMA data xfer */ | ||
2416 | else { | ||
2417 | qc->tf.protocol = ATA_PROT_ATAPI_DMA; | 2415 | qc->tf.protocol = ATA_PROT_ATAPI_DMA; |
2418 | qc->tf.feature |= ATAPI_PKT_DMA; | 2416 | qc->tf.feature |= ATAPI_PKT_DMA; |
2419 | 2417 | ||
@@ -2422,8 +2420,6 @@ static unsigned int atapi_xlat(struct ata_queued_cmd *qc) | |||
2422 | qc->tf.feature |= ATAPI_DMADIR; | 2420 | qc->tf.feature |= ATAPI_DMADIR; |
2423 | } | 2421 | } |
2424 | 2422 | ||
2425 | qc->nbytes = scmd->request_bufflen; | ||
2426 | |||
2427 | return 0; | 2423 | return 0; |
2428 | } | 2424 | } |
2429 | 2425 | ||
diff --git a/drivers/ata/pata_hpt37x.c b/drivers/ata/pata_hpt37x.c index 6446735a46..a8c0cbeca3 100644 --- a/drivers/ata/pata_hpt37x.c +++ b/drivers/ata/pata_hpt37x.c | |||
@@ -931,13 +931,13 @@ static int hpt37x_init_one(struct pci_dev *dev, const struct pci_device_id *id) | |||
931 | .udma_mask = 0x7f, | 931 | .udma_mask = 0x7f, |
932 | .port_ops = &hpt372_port_ops | 932 | .port_ops = &hpt372_port_ops |
933 | }; | 933 | }; |
934 | /* HPT374 - UDMA133 */ | 934 | /* HPT374 - UDMA100 */ |
935 | static const struct ata_port_info info_hpt374 = { | 935 | static const struct ata_port_info info_hpt374 = { |
936 | .sht = &hpt37x_sht, | 936 | .sht = &hpt37x_sht, |
937 | .flags = ATA_FLAG_SLAVE_POSS|ATA_FLAG_SRST, | 937 | .flags = ATA_FLAG_SLAVE_POSS|ATA_FLAG_SRST, |
938 | .pio_mask = 0x1f, | 938 | .pio_mask = 0x1f, |
939 | .mwdma_mask = 0x07, | 939 | .mwdma_mask = 0x07, |
940 | .udma_mask = 0x7f, | 940 | .udma_mask = 0x3f, |
941 | .port_ops = &hpt374_port_ops | 941 | .port_ops = &hpt374_port_ops |
942 | }; | 942 | }; |
943 | 943 | ||
diff --git a/drivers/ata/pata_it821x.c b/drivers/ata/pata_it821x.c index dab4e7cf8c..12c6e08cc4 100644 --- a/drivers/ata/pata_it821x.c +++ b/drivers/ata/pata_it821x.c | |||
@@ -690,7 +690,7 @@ static struct ata_port_operations it821x_passthru_port_ops = { | |||
690 | .port_start = it821x_port_start, | 690 | .port_start = it821x_port_start, |
691 | }; | 691 | }; |
692 | 692 | ||
693 | static void __devinit it821x_disable_raid(struct pci_dev *pdev) | 693 | static void it821x_disable_raid(struct pci_dev *pdev) |
694 | { | 694 | { |
695 | /* Reset local CPU, and set BIOS not ready */ | 695 | /* Reset local CPU, and set BIOS not ready */ |
696 | pci_write_config_byte(pdev, 0x5E, 0x01); | 696 | pci_write_config_byte(pdev, 0x5E, 0x01); |
diff --git a/drivers/char/drm/drm_pciids.h b/drivers/char/drm/drm_pciids.h index aa6335032d..30b200b013 100644 --- a/drivers/char/drm/drm_pciids.h +++ b/drivers/char/drm/drm_pciids.h | |||
@@ -219,6 +219,8 @@ | |||
219 | {0x1039, 0x6300, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | 219 | {0x1039, 0x6300, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ |
220 | {0x1039, 0x6330, PCI_ANY_ID, PCI_ANY_ID, 0, 0, SIS_CHIP_315}, \ | 220 | {0x1039, 0x6330, PCI_ANY_ID, PCI_ANY_ID, 0, 0, SIS_CHIP_315}, \ |
221 | {0x1039, 0x7300, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ | 221 | {0x1039, 0x7300, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \ |
222 | {0x18CA, 0x0040, PCI_ANY_ID, PCI_ANY_ID, 0, 0, SIS_CHIP_315}, \ | ||
223 | {0x18CA, 0x0042, PCI_ANY_ID, PCI_ANY_ID, 0, 0, SIS_CHIP_315}, \ | ||
222 | {0, 0, 0} | 224 | {0, 0, 0} |
223 | 225 | ||
224 | #define tdfx_PCI_IDS \ | 226 | #define tdfx_PCI_IDS \ |
diff --git a/drivers/char/drm/sis_drv.h b/drivers/char/drm/sis_drv.h index 2b8d6f6ed7..70d4ede75f 100644 --- a/drivers/char/drm/sis_drv.h +++ b/drivers/char/drm/sis_drv.h | |||
@@ -33,11 +33,11 @@ | |||
33 | 33 | ||
34 | #define DRIVER_AUTHOR "SIS, Tungsten Graphics" | 34 | #define DRIVER_AUTHOR "SIS, Tungsten Graphics" |
35 | #define DRIVER_NAME "sis" | 35 | #define DRIVER_NAME "sis" |
36 | #define DRIVER_DESC "SIS 300/630/540" | 36 | #define DRIVER_DESC "SIS 300/630/540 and XGI V3XE/V5/V8" |
37 | #define DRIVER_DATE "20060704" | 37 | #define DRIVER_DATE "20070626" |
38 | #define DRIVER_MAJOR 1 | 38 | #define DRIVER_MAJOR 1 |
39 | #define DRIVER_MINOR 2 | 39 | #define DRIVER_MINOR 3 |
40 | #define DRIVER_PATCHLEVEL 1 | 40 | #define DRIVER_PATCHLEVEL 0 |
41 | 41 | ||
42 | enum sis_family { | 42 | enum sis_family { |
43 | SIS_OTHER = 0, | 43 | SIS_OTHER = 0, |
diff --git a/drivers/net/au1000_eth.c b/drivers/net/au1000_eth.c index c39ab803c5..c27cfcef45 100644 --- a/drivers/net/au1000_eth.c +++ b/drivers/net/au1000_eth.c | |||
@@ -34,7 +34,7 @@ | |||
34 | * | 34 | * |
35 | * | 35 | * |
36 | */ | 36 | */ |
37 | 37 | #include <linux/dma-mapping.h> | |
38 | #include <linux/module.h> | 38 | #include <linux/module.h> |
39 | #include <linux/kernel.h> | 39 | #include <linux/kernel.h> |
40 | #include <linux/string.h> | 40 | #include <linux/string.h> |
diff --git a/drivers/net/cxgb3/xgmac.c b/drivers/net/cxgb3/xgmac.c index b261be147e..c302b1a30c 100644 --- a/drivers/net/cxgb3/xgmac.c +++ b/drivers/net/cxgb3/xgmac.c | |||
@@ -335,11 +335,11 @@ int t3_mac_set_mtu(struct cmac *mac, unsigned int mtu) | |||
335 | hwm = min(hwm, MAC_RXFIFO_SIZE - 8192); | 335 | hwm = min(hwm, MAC_RXFIFO_SIZE - 8192); |
336 | lwm = min(3 * (int)mtu, MAC_RXFIFO_SIZE / 4); | 336 | lwm = min(3 * (int)mtu, MAC_RXFIFO_SIZE / 4); |
337 | 337 | ||
338 | v = t3_read_reg(adap, A_XGM_RXFIFO_CFG + mac->offset); | ||
339 | if (adap->params.rev == T3_REV_B2 && | 338 | if (adap->params.rev == T3_REV_B2 && |
340 | (t3_read_reg(adap, A_XGM_RX_CTRL + mac->offset) & F_RXEN)) { | 339 | (t3_read_reg(adap, A_XGM_RX_CTRL + mac->offset) & F_RXEN)) { |
341 | disable_exact_filters(mac); | 340 | disable_exact_filters(mac); |
342 | t3_set_reg_field(adap, A_XGM_RXFIFO_CFG + mac->offset, | 341 | v = t3_read_reg(adap, A_XGM_RX_CFG + mac->offset); |
342 | t3_set_reg_field(adap, A_XGM_RX_CFG + mac->offset, | ||
343 | F_ENHASHMCAST | F_COPYALLFRAMES, F_DISBCAST); | 343 | F_ENHASHMCAST | F_COPYALLFRAMES, F_DISBCAST); |
344 | 344 | ||
345 | /* drain rx FIFO */ | 345 | /* drain rx FIFO */ |
@@ -347,11 +347,12 @@ int t3_mac_set_mtu(struct cmac *mac, unsigned int mtu) | |||
347 | A_XGM_RX_MAX_PKT_SIZE_ERR_CNT + | 347 | A_XGM_RX_MAX_PKT_SIZE_ERR_CNT + |
348 | mac->offset, | 348 | mac->offset, |
349 | 1 << 31, 1, 20, 5)) { | 349 | 1 << 31, 1, 20, 5)) { |
350 | t3_write_reg(adap, A_XGM_RXFIFO_CFG + mac->offset, v); | 350 | t3_write_reg(adap, A_XGM_RX_CFG + mac->offset, v); |
351 | enable_exact_filters(mac); | 351 | enable_exact_filters(mac); |
352 | return -EIO; | 352 | return -EIO; |
353 | } | 353 | } |
354 | t3_write_reg(adap, A_XGM_RX_MAX_PKT_SIZE + mac->offset, mtu); | 354 | t3_write_reg(adap, A_XGM_RX_MAX_PKT_SIZE + mac->offset, mtu); |
355 | t3_write_reg(adap, A_XGM_RX_CFG + mac->offset, v); | ||
355 | enable_exact_filters(mac); | 356 | enable_exact_filters(mac); |
356 | } else | 357 | } else |
357 | t3_write_reg(adap, A_XGM_RX_MAX_PKT_SIZE + mac->offset, mtu); | 358 | t3_write_reg(adap, A_XGM_RX_MAX_PKT_SIZE + mac->offset, mtu); |
@@ -362,6 +363,7 @@ int t3_mac_set_mtu(struct cmac *mac, unsigned int mtu) | |||
362 | */ | 363 | */ |
363 | hwm = rx_fifo_hwm(mtu); | 364 | hwm = rx_fifo_hwm(mtu); |
364 | lwm = min(3 * (int)mtu, MAC_RXFIFO_SIZE / 4); | 365 | lwm = min(3 * (int)mtu, MAC_RXFIFO_SIZE / 4); |
366 | v = t3_read_reg(adap, A_XGM_RXFIFO_CFG + mac->offset); | ||
365 | v &= ~V_RXFIFOPAUSELWM(M_RXFIFOPAUSELWM); | 367 | v &= ~V_RXFIFOPAUSELWM(M_RXFIFOPAUSELWM); |
366 | v |= V_RXFIFOPAUSELWM(lwm / 8); | 368 | v |= V_RXFIFOPAUSELWM(lwm / 8); |
367 | if (G_RXFIFOPAUSEHWM(v)) | 369 | if (G_RXFIFOPAUSEHWM(v)) |
diff --git a/drivers/net/s2io.c b/drivers/net/s2io.c index c6ba3dee8a..09078ff84c 100644 --- a/drivers/net/s2io.c +++ b/drivers/net/s2io.c | |||
@@ -2868,6 +2868,7 @@ static void tx_intr_handler(struct fifo_info *fifo_data) | |||
2868 | struct tx_curr_get_info get_info, put_info; | 2868 | struct tx_curr_get_info get_info, put_info; |
2869 | struct sk_buff *skb; | 2869 | struct sk_buff *skb; |
2870 | struct TxD *txdlp; | 2870 | struct TxD *txdlp; |
2871 | u8 err_mask; | ||
2871 | 2872 | ||
2872 | get_info = fifo_data->tx_curr_get_info; | 2873 | get_info = fifo_data->tx_curr_get_info; |
2873 | memcpy(&put_info, &fifo_data->tx_curr_put_info, sizeof(put_info)); | 2874 | memcpy(&put_info, &fifo_data->tx_curr_put_info, sizeof(put_info)); |
@@ -2886,8 +2887,8 @@ static void tx_intr_handler(struct fifo_info *fifo_data) | |||
2886 | } | 2887 | } |
2887 | 2888 | ||
2888 | /* update t_code statistics */ | 2889 | /* update t_code statistics */ |
2889 | err >>= 48; | 2890 | err_mask = err >> 48; |
2890 | switch(err) { | 2891 | switch(err_mask) { |
2891 | case 2: | 2892 | case 2: |
2892 | nic->mac_control.stats_info->sw_stat. | 2893 | nic->mac_control.stats_info->sw_stat. |
2893 | tx_buf_abort_cnt++; | 2894 | tx_buf_abort_cnt++; |
@@ -6805,6 +6806,7 @@ static int rx_osm_handler(struct ring_info *ring_data, struct RxD_t * rxdp) | |||
6805 | u16 l3_csum, l4_csum; | 6806 | u16 l3_csum, l4_csum; |
6806 | unsigned long long err = rxdp->Control_1 & RXD_T_CODE; | 6807 | unsigned long long err = rxdp->Control_1 & RXD_T_CODE; |
6807 | struct lro *lro; | 6808 | struct lro *lro; |
6809 | u8 err_mask; | ||
6808 | 6810 | ||
6809 | skb->dev = dev; | 6811 | skb->dev = dev; |
6810 | 6812 | ||
@@ -6813,8 +6815,8 @@ static int rx_osm_handler(struct ring_info *ring_data, struct RxD_t * rxdp) | |||
6813 | if (err & 0x1) { | 6815 | if (err & 0x1) { |
6814 | sp->mac_control.stats_info->sw_stat.parity_err_cnt++; | 6816 | sp->mac_control.stats_info->sw_stat.parity_err_cnt++; |
6815 | } | 6817 | } |
6816 | err >>= 48; | 6818 | err_mask = err >> 48; |
6817 | switch(err) { | 6819 | switch(err_mask) { |
6818 | case 1: | 6820 | case 1: |
6819 | sp->mac_control.stats_info->sw_stat. | 6821 | sp->mac_control.stats_info->sw_stat. |
6820 | rx_parity_err_cnt++; | 6822 | rx_parity_err_cnt++; |
@@ -6867,9 +6869,9 @@ static int rx_osm_handler(struct ring_info *ring_data, struct RxD_t * rxdp) | |||
6867 | * Note that in this case, since checksum will be incorrect, | 6869 | * Note that in this case, since checksum will be incorrect, |
6868 | * stack will validate the same. | 6870 | * stack will validate the same. |
6869 | */ | 6871 | */ |
6870 | if (err != 0x5) { | 6872 | if (err_mask != 0x5) { |
6871 | DBG_PRINT(ERR_DBG, "%s: Rx error Value: 0x%llx\n", | 6873 | DBG_PRINT(ERR_DBG, "%s: Rx error Value: 0x%x\n", |
6872 | dev->name, err); | 6874 | dev->name, err_mask); |
6873 | sp->stats.rx_crc_errors++; | 6875 | sp->stats.rx_crc_errors++; |
6874 | sp->mac_control.stats_info->sw_stat.mem_freed | 6876 | sp->mac_control.stats_info->sw_stat.mem_freed |
6875 | += skb->truesize; | 6877 | += skb->truesize; |
diff --git a/drivers/usb/gadget/file_storage.c b/drivers/usb/gadget/file_storage.c index c6b6479fa4..4639b629e6 100644 --- a/drivers/usb/gadget/file_storage.c +++ b/drivers/usb/gadget/file_storage.c | |||
@@ -686,7 +686,6 @@ struct fsg_dev { | |||
686 | int thread_wakeup_needed; | 686 | int thread_wakeup_needed; |
687 | struct completion thread_notifier; | 687 | struct completion thread_notifier; |
688 | struct task_struct *thread_task; | 688 | struct task_struct *thread_task; |
689 | sigset_t thread_signal_mask; | ||
690 | 689 | ||
691 | int cmnd_size; | 690 | int cmnd_size; |
692 | u8 cmnd[MAX_COMMAND_SIZE]; | 691 | u8 cmnd[MAX_COMMAND_SIZE]; |
@@ -3277,8 +3276,7 @@ static void handle_exception(struct fsg_dev *fsg) | |||
3277 | /* Clear the existing signals. Anything but SIGUSR1 is converted | 3276 | /* Clear the existing signals. Anything but SIGUSR1 is converted |
3278 | * into a high-priority EXIT exception. */ | 3277 | * into a high-priority EXIT exception. */ |
3279 | for (;;) { | 3278 | for (;;) { |
3280 | sig = dequeue_signal_lock(current, &fsg->thread_signal_mask, | 3279 | sig = dequeue_signal_lock(current, ¤t->blocked, &info); |
3281 | &info); | ||
3282 | if (!sig) | 3280 | if (!sig) |
3283 | break; | 3281 | break; |
3284 | if (sig != SIGUSR1) { | 3282 | if (sig != SIGUSR1) { |
@@ -3431,10 +3429,10 @@ static int fsg_main_thread(void *fsg_) | |||
3431 | 3429 | ||
3432 | /* Allow the thread to be killed by a signal, but set the signal mask | 3430 | /* Allow the thread to be killed by a signal, but set the signal mask |
3433 | * to block everything but INT, TERM, KILL, and USR1. */ | 3431 | * to block everything but INT, TERM, KILL, and USR1. */ |
3434 | siginitsetinv(&fsg->thread_signal_mask, sigmask(SIGINT) | | 3432 | allow_signal(SIGINT); |
3435 | sigmask(SIGTERM) | sigmask(SIGKILL) | | 3433 | allow_signal(SIGTERM); |
3436 | sigmask(SIGUSR1)); | 3434 | allow_signal(SIGKILL); |
3437 | sigprocmask(SIG_SETMASK, &fsg->thread_signal_mask, NULL); | 3435 | allow_signal(SIGUSR1); |
3438 | 3436 | ||
3439 | /* Arrange for userspace references to be interpreted as kernel | 3437 | /* Arrange for userspace references to be interpreted as kernel |
3440 | * pointers. That way we can pass a kernel pointer to a routine | 3438 | * pointers. That way we can pass a kernel pointer to a routine |
diff --git a/drivers/usb/misc/iowarrior.c b/drivers/usb/misc/iowarrior.c index fc51207b71..3bb33f7bfa 100644 --- a/drivers/usb/misc/iowarrior.c +++ b/drivers/usb/misc/iowarrior.c | |||
@@ -495,8 +495,8 @@ static int iowarrior_ioctl(struct inode *inode, struct file *file, | |||
495 | 495 | ||
496 | /* verify that the device wasn't unplugged */ | 496 | /* verify that the device wasn't unplugged */ |
497 | if (!dev->present) { | 497 | if (!dev->present) { |
498 | mutex_unlock(&dev->mutex); | 498 | retval = -ENODEV; |
499 | return -ENODEV; | 499 | goto error_out; |
500 | } | 500 | } |
501 | 501 | ||
502 | dbg("%s - minor %d, cmd 0x%.4x, arg %ld", __func__, dev->minor, cmd, | 502 | dbg("%s - minor %d, cmd 0x%.4x, arg %ld", __func__, dev->minor, cmd, |
@@ -579,9 +579,10 @@ static int iowarrior_ioctl(struct inode *inode, struct file *file, | |||
579 | retval = -ENOTTY; | 579 | retval = -ENOTTY; |
580 | break; | 580 | break; |
581 | } | 581 | } |
582 | 582 | error_out: | |
583 | /* unlock the device */ | 583 | /* unlock the device */ |
584 | mutex_unlock(&dev->mutex); | 584 | mutex_unlock(&dev->mutex); |
585 | kfree(buffer); | ||
585 | return retval; | 586 | return retval; |
586 | } | 587 | } |
587 | 588 | ||
diff --git a/drivers/usb/misc/usblcd.c b/drivers/usb/misc/usblcd.c index 887ef953f3..12bad8a205 100644 --- a/drivers/usb/misc/usblcd.c +++ b/drivers/usb/misc/usblcd.c | |||
@@ -42,10 +42,14 @@ struct usb_lcd { | |||
42 | size_t bulk_in_size; /* the size of the receive buffer */ | 42 | size_t bulk_in_size; /* the size of the receive buffer */ |
43 | __u8 bulk_in_endpointAddr; /* the address of the bulk in endpoint */ | 43 | __u8 bulk_in_endpointAddr; /* the address of the bulk in endpoint */ |
44 | __u8 bulk_out_endpointAddr; /* the address of the bulk out endpoint */ | 44 | __u8 bulk_out_endpointAddr; /* the address of the bulk out endpoint */ |
45 | struct kref kref; | 45 | struct kref kref; |
46 | struct semaphore limit_sem; /* to stop writes at full throttle from | ||
47 | * using up all RAM */ | ||
46 | }; | 48 | }; |
47 | #define to_lcd_dev(d) container_of(d, struct usb_lcd, kref) | 49 | #define to_lcd_dev(d) container_of(d, struct usb_lcd, kref) |
48 | 50 | ||
51 | #define USB_LCD_CONCURRENT_WRITES 5 | ||
52 | |||
49 | static struct usb_driver lcd_driver; | 53 | static struct usb_driver lcd_driver; |
50 | static DEFINE_MUTEX(usb_lcd_open_mutex); | 54 | static DEFINE_MUTEX(usb_lcd_open_mutex); |
51 | 55 | ||
@@ -186,12 +190,13 @@ static void lcd_write_bulk_callback(struct urb *urb) | |||
186 | /* free up our allocated buffer */ | 190 | /* free up our allocated buffer */ |
187 | usb_buffer_free(urb->dev, urb->transfer_buffer_length, | 191 | usb_buffer_free(urb->dev, urb->transfer_buffer_length, |
188 | urb->transfer_buffer, urb->transfer_dma); | 192 | urb->transfer_buffer, urb->transfer_dma); |
193 | up(&dev->limit_sem); | ||
189 | } | 194 | } |
190 | 195 | ||
191 | static ssize_t lcd_write(struct file *file, const char __user * user_buffer, size_t count, loff_t *ppos) | 196 | static ssize_t lcd_write(struct file *file, const char __user * user_buffer, size_t count, loff_t *ppos) |
192 | { | 197 | { |
193 | struct usb_lcd *dev; | 198 | struct usb_lcd *dev; |
194 | int retval = 0; | 199 | int retval = 0, r; |
195 | struct urb *urb = NULL; | 200 | struct urb *urb = NULL; |
196 | char *buf = NULL; | 201 | char *buf = NULL; |
197 | 202 | ||
@@ -201,10 +206,16 @@ static ssize_t lcd_write(struct file *file, const char __user * user_buffer, siz | |||
201 | if (count == 0) | 206 | if (count == 0) |
202 | goto exit; | 207 | goto exit; |
203 | 208 | ||
209 | r = down_interruptible(&dev->limit_sem); | ||
210 | if (r < 0) | ||
211 | return -EINTR; | ||
212 | |||
204 | /* create a urb, and a buffer for it, and copy the data to the urb */ | 213 | /* create a urb, and a buffer for it, and copy the data to the urb */ |
205 | urb = usb_alloc_urb(0, GFP_KERNEL); | 214 | urb = usb_alloc_urb(0, GFP_KERNEL); |
206 | if (!urb) | 215 | if (!urb) { |
207 | return -ENOMEM; | 216 | retval = -ENOMEM; |
217 | goto err_no_buf; | ||
218 | } | ||
208 | 219 | ||
209 | buf = usb_buffer_alloc(dev->udev, count, GFP_KERNEL, &urb->transfer_dma); | 220 | buf = usb_buffer_alloc(dev->udev, count, GFP_KERNEL, &urb->transfer_dma); |
210 | if (!buf) { | 221 | if (!buf) { |
@@ -239,6 +250,8 @@ exit: | |||
239 | error: | 250 | error: |
240 | usb_buffer_free(dev->udev, count, buf, urb->transfer_dma); | 251 | usb_buffer_free(dev->udev, count, buf, urb->transfer_dma); |
241 | usb_free_urb(urb); | 252 | usb_free_urb(urb); |
253 | err_no_buf: | ||
254 | up(&dev->limit_sem); | ||
242 | return retval; | 255 | return retval; |
243 | } | 256 | } |
244 | 257 | ||
@@ -277,6 +290,7 @@ static int lcd_probe(struct usb_interface *interface, const struct usb_device_id | |||
277 | goto error; | 290 | goto error; |
278 | } | 291 | } |
279 | kref_init(&dev->kref); | 292 | kref_init(&dev->kref); |
293 | sema_init(&dev->limit_sem, USB_LCD_CONCURRENT_WRITES); | ||
280 | 294 | ||
281 | dev->udev = usb_get_dev(interface_to_usbdev(interface)); | 295 | dev->udev = usb_get_dev(interface_to_usbdev(interface)); |
282 | dev->interface = interface; | 296 | dev->interface = interface; |
diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c index 2353679f60..da1c6f7f82 100644 --- a/drivers/usb/serial/ftdi_sio.c +++ b/drivers/usb/serial/ftdi_sio.c | |||
@@ -317,6 +317,7 @@ static struct usb_device_id id_table_combined [] = { | |||
317 | { USB_DEVICE(FTDI_VID, FTDI_ACTZWAVE_PID) }, | 317 | { USB_DEVICE(FTDI_VID, FTDI_ACTZWAVE_PID) }, |
318 | { USB_DEVICE(FTDI_VID, FTDI_IRTRANS_PID) }, | 318 | { USB_DEVICE(FTDI_VID, FTDI_IRTRANS_PID) }, |
319 | { USB_DEVICE(FTDI_VID, FTDI_IPLUS_PID) }, | 319 | { USB_DEVICE(FTDI_VID, FTDI_IPLUS_PID) }, |
320 | { USB_DEVICE(FTDI_VID, FTDI_IPLUS2_PID) }, | ||
320 | { USB_DEVICE(FTDI_VID, FTDI_DMX4ALL) }, | 321 | { USB_DEVICE(FTDI_VID, FTDI_DMX4ALL) }, |
321 | { USB_DEVICE(FTDI_VID, FTDI_SIO_PID) }, | 322 | { USB_DEVICE(FTDI_VID, FTDI_SIO_PID) }, |
322 | { USB_DEVICE(FTDI_VID, FTDI_8U232AM_PID) }, | 323 | { USB_DEVICE(FTDI_VID, FTDI_8U232AM_PID) }, |
diff --git a/drivers/usb/serial/ftdi_sio.h b/drivers/usb/serial/ftdi_sio.h index 33aee90472..d9e49716db 100644 --- a/drivers/usb/serial/ftdi_sio.h +++ b/drivers/usb/serial/ftdi_sio.h | |||
@@ -56,6 +56,7 @@ | |||
56 | 56 | ||
57 | /* iPlus device */ | 57 | /* iPlus device */ |
58 | #define FTDI_IPLUS_PID 0xD070 /* Product Id */ | 58 | #define FTDI_IPLUS_PID 0xD070 /* Product Id */ |
59 | #define FTDI_IPLUS2_PID 0xD071 /* Product Id */ | ||
59 | 60 | ||
60 | /* DMX4ALL DMX Interfaces */ | 61 | /* DMX4ALL DMX Interfaces */ |
61 | #define FTDI_DMX4ALL 0xC850 | 62 | #define FTDI_DMX4ALL 0xC850 |
diff --git a/drivers/usb/serial/io_edgeport.c b/drivers/usb/serial/io_edgeport.c index 4807f96015..056e1923c4 100644 --- a/drivers/usb/serial/io_edgeport.c +++ b/drivers/usb/serial/io_edgeport.c | |||
@@ -3046,11 +3046,11 @@ static void edge_shutdown (struct usb_serial *serial) | |||
3046 | } | 3046 | } |
3047 | /* free up our endpoint stuff */ | 3047 | /* free up our endpoint stuff */ |
3048 | if (edge_serial->is_epic) { | 3048 | if (edge_serial->is_epic) { |
3049 | usb_unlink_urb(edge_serial->interrupt_read_urb); | 3049 | usb_kill_urb(edge_serial->interrupt_read_urb); |
3050 | usb_free_urb(edge_serial->interrupt_read_urb); | 3050 | usb_free_urb(edge_serial->interrupt_read_urb); |
3051 | kfree(edge_serial->interrupt_in_buffer); | 3051 | kfree(edge_serial->interrupt_in_buffer); |
3052 | 3052 | ||
3053 | usb_unlink_urb(edge_serial->read_urb); | 3053 | usb_kill_urb(edge_serial->read_urb); |
3054 | usb_free_urb(edge_serial->read_urb); | 3054 | usb_free_urb(edge_serial->read_urb); |
3055 | kfree(edge_serial->bulk_in_buffer); | 3055 | kfree(edge_serial->bulk_in_buffer); |
3056 | } | 3056 | } |
diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c index 89f067d950..5d3999e3ff 100644 --- a/drivers/usb/serial/option.c +++ b/drivers/usb/serial/option.c | |||
@@ -111,7 +111,8 @@ static int option_send_setup(struct usb_serial_port *port); | |||
111 | #define NOVATELWIRELESS_VENDOR_ID 0x1410 | 111 | #define NOVATELWIRELESS_VENDOR_ID 0x1410 |
112 | 112 | ||
113 | #define ANYDATA_VENDOR_ID 0x16d5 | 113 | #define ANYDATA_VENDOR_ID 0x16d5 |
114 | #define ANYDATA_PRODUCT_ID 0x6501 | 114 | #define ANYDATA_PRODUCT_ADU_E100A 0x6501 |
115 | #define ANYDATA_PRODUCT_ADU_500A 0x6502 | ||
115 | 116 | ||
116 | #define BANDRICH_VENDOR_ID 0x1A8D | 117 | #define BANDRICH_VENDOR_ID 0x1A8D |
117 | #define BANDRICH_PRODUCT_C100_1 0x1002 | 118 | #define BANDRICH_PRODUCT_C100_1 0x1002 |
@@ -169,7 +170,8 @@ static struct usb_device_id option_ids[] = { | |||
169 | { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, 0x2110) }, /* Novatel Merlin ES620 / Merlin ES720 / Ovation U720 */ | 170 | { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, 0x2110) }, /* Novatel Merlin ES620 / Merlin ES720 / Ovation U720 */ |
170 | { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, 0x2130) }, /* Novatel Merlin ES620 SM Bus */ | 171 | { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, 0x2130) }, /* Novatel Merlin ES620 SM Bus */ |
171 | { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, 0x2410) }, /* Novatel EU740 */ | 172 | { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, 0x2410) }, /* Novatel EU740 */ |
172 | { USB_DEVICE(ANYDATA_VENDOR_ID, ANYDATA_PRODUCT_ID) }, | 173 | { USB_DEVICE(ANYDATA_VENDOR_ID, ANYDATA_PRODUCT_ADU_E100A) }, |
174 | { USB_DEVICE(ANYDATA_VENDOR_ID, ANYDATA_PRODUCT_ADU_500A) }, | ||
173 | { USB_DEVICE(BANDRICH_VENDOR_ID, BANDRICH_PRODUCT_C100_1) }, | 175 | { USB_DEVICE(BANDRICH_VENDOR_ID, BANDRICH_PRODUCT_C100_1) }, |
174 | { USB_DEVICE(BANDRICH_VENDOR_ID, BANDRICH_PRODUCT_C100_2) }, | 176 | { USB_DEVICE(BANDRICH_VENDOR_ID, BANDRICH_PRODUCT_C100_2) }, |
175 | { USB_DEVICE(DELL_VENDOR_ID, 0x8118) }, /* Dell Wireless 5510 Mobile Broadband HSDPA ExpressCard */ | 177 | { USB_DEVICE(DELL_VENDOR_ID, 0x8118) }, /* Dell Wireless 5510 Mobile Broadband HSDPA ExpressCard */ |
diff --git a/drivers/usb/serial/ti_usb_3410_5052.c b/drivers/usb/serial/ti_usb_3410_5052.c index 4203e2b1a7..3d505fd064 100644 --- a/drivers/usb/serial/ti_usb_3410_5052.c +++ b/drivers/usb/serial/ti_usb_3410_5052.c | |||
@@ -1555,15 +1555,17 @@ static int ti_restart_read(struct ti_port *tport, struct tty_struct *tty) | |||
1555 | spin_lock_irqsave(&tport->tp_lock, flags); | 1555 | spin_lock_irqsave(&tport->tp_lock, flags); |
1556 | 1556 | ||
1557 | if (tport->tp_read_urb_state == TI_READ_URB_STOPPED) { | 1557 | if (tport->tp_read_urb_state == TI_READ_URB_STOPPED) { |
1558 | tport->tp_read_urb_state = TI_READ_URB_RUNNING; | ||
1558 | urb = tport->tp_port->read_urb; | 1559 | urb = tport->tp_port->read_urb; |
1560 | spin_unlock_irqrestore(&tport->tp_lock, flags); | ||
1559 | urb->complete = ti_bulk_in_callback; | 1561 | urb->complete = ti_bulk_in_callback; |
1560 | urb->context = tport; | 1562 | urb->context = tport; |
1561 | urb->dev = tport->tp_port->serial->dev; | 1563 | urb->dev = tport->tp_port->serial->dev; |
1562 | status = usb_submit_urb(urb, GFP_KERNEL); | 1564 | status = usb_submit_urb(urb, GFP_KERNEL); |
1565 | } else { | ||
1566 | tport->tp_read_urb_state = TI_READ_URB_RUNNING; | ||
1567 | spin_unlock_irqrestore(&tport->tp_lock, flags); | ||
1563 | } | 1568 | } |
1564 | tport->tp_read_urb_state = TI_READ_URB_RUNNING; | ||
1565 | |||
1566 | spin_unlock_irqrestore(&tport->tp_lock, flags); | ||
1567 | 1569 | ||
1568 | return status; | 1570 | return status; |
1569 | } | 1571 | } |