Linux 3.4.13
I'm announcing the release of the 3.4.13 kernel.
All users of the 3.4 kernel series must upgrade.
The updated 3.4.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-3.4.y
and can be browsed at the normal kernel.org git web browser:
http://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Makefile | 2 arch/arm/plat-omap/include/plat/omap-serial.h | 4 arch/x86/kernel/alternative.c | 2 drivers/char/ttyprintk.c | 2 drivers/firmware/efivars.c | 17 + drivers/infiniband/ulp/ipoib/ipoib_main.c | 2 drivers/infiniband/ulp/ipoib/ipoib_multicast.c | 19 - drivers/infiniband/ulp/srp/ib_srp.c | 3 drivers/md/dm-table.c | 26 +- drivers/md/dm-verity.c | 8 drivers/md/dm.c | 56 +++- drivers/mtd/ubi/build.c | 5 drivers/net/can/mscan/mpc5xxx_can.c | 4 drivers/net/wireless/ath/ath9k/pci.c | 5 drivers/net/wireless/b43legacy/main.c | 2 drivers/remoteproc/Kconfig | 1 drivers/remoteproc/remoteproc_core.c | 22 - drivers/scsi/device_handler/scsi_dh_alua.c | 3 drivers/scsi/hpsa.c | 2 drivers/scsi/ibmvscsi/ibmvscsi.c | 3 drivers/scsi/isci/init.c | 1 drivers/scsi/isci/probe_roms.c | 1 drivers/scsi/scsi_sysfs.c | 30 +- drivers/staging/comedi/comedi_fops.c | 5 drivers/staging/comedi/drivers/jr3_pci.c | 2 drivers/staging/comedi/drivers/s626.c | 2 drivers/staging/rtl8712/rtl8712_recv.c | 5 drivers/staging/speakup/speakup_soft.c | 13 - drivers/tty/n_gsm.c | 26 +- drivers/tty/n_tty.c | 3 drivers/tty/serial/8250/8250_pci.c | 9 drivers/tty/serial/amba-pl011.c | 15 + drivers/tty/serial/omap-serial.c | 12 - drivers/tty/vt/keyboard.c | 3 drivers/usb/gadget/dummy_hcd.c | 8 drivers/usb/host/xhci-mem.c | 7 drivers/usb/host/xhci-pci.c | 1 drivers/usb/host/xhci-ring.c | 286 ++++++++++++++++++++++++- drivers/usb/host/xhci.c | 38 ++- drivers/usb/host/xhci.h | 20 + drivers/usb/serial/ftdi_sio.c | 2 drivers/usb/serial/ftdi_sio_ids.h | 5 drivers/usb/serial/option.c | 3 drivers/usb/serial/qcaux.c | 10 fs/binfmt_elf.c | 19 - fs/dcache.c | 6 include/linux/pci_ids.h | 1 security/yama/yama_lsm.c | 2 tools/hv/hv_kvp_daemon.c | 45 ++- 49 files changed, 593 insertions(+), 175 deletions(-)
Antonio Ospite (1):
USB: ftdi_sio: add TIAO USB Multi-Protocol Adapter (TUMPA) support
Artem Bityutskiy (1):
UBI: fix autoresize handling in R/O mode
Avi Kivity (1):
x86/alternatives: Fix p6 nops on non-modular kernels
Bart Van Assche (3):
IB/srp: Fix use-after-free in srp_reset_req() IB/srp: Avoid having aborted requests hang
SCSI: scsi_dh_alua: Enable STPG for unavailable ports
Ben Hutchings (4):
staging: speakup_soft: Fix reading of init string tools/hv: Fix file handle leak
tools/hv: Fix exit() error code tools/hv: Check for read/write errors
Benjamin Herrenschmidt (1):
SCSI: ibmvscsi: Fix host config length field overflow
Bjørn Mork (2):
USB: option: blacklist QMI interface on ZTE MF683
USB: qcaux: add Pantech vendor class match
Christopher Brannon (1):
tty: keyboard.c: Remove locking from vt_get_leds.
Dan Carpenter (1):
remoteproc: fix a potential NULL-dereference on cleanup
Dan Williams (2):
isci: fix isci_pci_probe() generates warning on efi failure path
SCSI: scsi_remove_target: fix softlockup regression on hot remove
Denys Vlasenko (1):
coredump: prevent double-free on an error path in core dumper
Elric Fu (4):
xHCI: add cmd_ring_state
xHCI: add aborting command ring function
xHCI: cancel command after command timeout
xHCI: handle command after aborting the command ring
Flavio Leitner (1):
serial: set correct baud_base for EXSYS EX-41092 Dual 16950
Greg Kroah-Hartman (1):
Linux 3.4.13
Ian Abbott (4):
staging: comedi: s626: don't dereference insn->data
staging: comedi: jr3_pci: fix iomem dereference
staging: comedi: don't dereference user memory for INSN_INTTRIG
staging: comedi: fix memory leak for saved channel list
Jiri Slaby (1):
TTY: ttyprintk, don't touch behind tty->write_buf
Kees Cook (1):
Yama: handle 32-bit userspace prctl
Khalid Aziz (1):
firmware: Add missing attributes to EFI variable attribute print out from sysfs
Larry Finger (2):
staging: r8712u: Do not queue cloned skb
b43legacy: Fix crash on unload when firmware not available
Linus Walleij (1):
serial: pl011: handle corruption at high clock speeds
Michael Spang (1):
Increase XHCI suspend timeout to 16ms
Mike Snitzer (1):
dm: handle requests beyond end of device instead of using BUG_ON
Miklos Szeredi (1):
vfs: dcache: fix deadlock in tree traversal
Mikulas Patocka (1):
dm verity: fix overflow check
Milan Broz (1):
dm table: clear add_random unless all devices have it set
Ohad Ben-Cohen (1):
remoteproc: select VIRTIO to avoid build breakage
Patrick McHardy (1):
IPoIB: Fix use-after-free of multicast object
Russ Gorby (3):
n_gsm: uplink SKBs accumulate on list
n_gsm: added interlocking for gsm_data_lock for certain code paths
n_gsm: memory leak in uplink error path
Sarah Sharp (1):
xhci: Intel Panther Point BEI quirk.
Sebastian Andrzej Siewior (1):
usb: gadget: dummy_hcd: fixup error probe path
Stanislav Kozina (1):
Remove BUG_ON from n_tty_read()
Stephen M. Cameron (1):
SCSI: hpsa: Use LUN reset instead of target reset
Sujith Manoharan (1):
ath9k: Disable ASPM only for AR9285
Vikram Pandita (1):
serial: omap: fix software flow control
Vivek Gautam (1):
usb: host: xhci: Fix Null pointer dereferencing with 71c731a for non-x86 systems
Wei Yongjun (1):
can: mscan-mpc5xxx: fix return value check in mpc512x_can_get_clock()
xiaojin (1):
n_gsm.c: Implement 3GPP27.010 DLC start-up procedure in MUX
Makefile +1 -1
@@ -1,6 +1,6 @@ VERSION = 3 PATCHLEVEL = 4 -SUBLEVEL = 12 +SUBLEVEL = 13 EXTRAVERSION = NAME = Saber-toothed Squirrel
arch/arm/plat-omap/include/plat/omap-serial.h +2 -2
@@ -42,10 +42,10 @@#define OMAP_UART_WER_MOD_WKUP 0X7F/* Enable XON/XOFF flow control on output */ -#define OMAP_UART_SW_TX 0x04 +#define OMAP_UART_SW_TX 0x8/* Enable XON/XOFF flow control on input */ -#define OMAP_UART_SW_RX 0x04 +#define OMAP_UART_SW_RX 0x2#define OMAP_UART_SYSC_RESET 0X07#define OMAP_UART_TCR_TRIG 0X0F
arch/x86/kernel/alternative.c +1 -1
@@ -160,7 +160,7 @@ static const unsigned char * const k7_nops[ASM_NOP_MAX+2] =#endif #ifdef P6_NOP1 -static const unsigned char __initconst_or_module p6nops[] = +static const unsigned char p6nops[] = {P6_NOP1 , P6_NOP2,
drivers/char/ttyprintk.c +1 -1
@@ -67,7 +67,7 @@ static int tpk_printk(const unsigned char *buf, int count) tmp[tpk_curr +1 ] ='\0' ;printk (KERN_INFO "%s%s" , tpk_tag, tmp); tpk_curr =0 ; -if (buf[i +1 ] =='\n' ) +if ((i +1 ) < count && buf[i +1 ] =='\n' ) i++;break ;case '\n' :
drivers/firmware/efivars.c +14 -3
@@ -435,12 +435,23 @@ efivar_attr_read(struct efivar_entry *entry, char *buf)if (status !=EFI_SUCCESS )return -EIO ; -if (var->Attributes &0x1 ) +if (var->Attributes &EFI_VARIABLE_NON_VOLATILE ) str +=sprintf (str,"EFI_VARIABLE_NON_VOLATILE\n" ); -if (var->Attributes &0x2 ) +if (var->Attributes &EFI_VARIABLE_BOOTSERVICE_ACCESS ) str +=sprintf (str,"EFI_VARIABLE_BOOTSERVICE_ACCESS\n" ); -if (var->Attributes &0x4 ) +if (var->Attributes &EFI_VARIABLE_RUNTIME_ACCESS ) str +=sprintf (str,"EFI_VARIABLE_RUNTIME_ACCESS\n" ); +if (var->Attributes &EFI_VARIABLE_HARDWARE_ERROR_RECORD ) + str +=sprintf (str,"EFI_VARIABLE_HARDWARE_ERROR_RECORD\n" ); +if (var->Attributes &EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS ) + str +=sprintf (str, +"EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS\n" ); +if (var->Attributes & +EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS ) + str +=sprintf (str, +"EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS\n" ); +if (var->Attributes &EFI_VARIABLE_APPEND_WRITE ) + str +=sprintf (str,"EFI_VARIABLE_APPEND_WRITE\n" );return str - buf; }
drivers/infiniband/ulp/ipoib/ipoib_main.c +1 -1
@@ -148,7 +148,7 @@ static int ipoib_stop(struct net_device *dev)netif_stop_queue (dev); -ipoib_ib_dev_down (dev,0 ); +ipoib_ib_dev_down (dev,1 );ipoib_ib_dev_stop (dev,0 );if (!test_bit (IPOIB_FLAG_SUBINTERFACE , &priv->flags)) {
drivers/infiniband/ulp/ipoib/ipoib_multicast.c +10 -9
@@ -190,7 +190,9 @@ static int ipoib_mcast_join_finish(struct ipoib_mcast *mcast, mcast->mcmember = *mcmember; -/* Set the cached Q_Key before we attach if it's the broadcast group */ +/* Set the multicast MTU and cached Q_Key before we attach if it's +* the broadcast group. +*/ if (!memcmp (mcast->mcmember.mgid.raw, priv->dev->broadcast +4 ,sizeof (union ib_gid ))) {spin_lock_irq (&priv->lock);
@@ -198,10 +200,17 @@ static int ipoib_mcast_join_finish(struct ipoib_mcast *mcast,spin_unlock_irq (&priv->lock);return -EAGAIN ; } + priv->mcast_mtu =IPOIB_UD_MTU (ib_mtu_enum_to_int (priv->broadcast->mcmember.mtu)); priv->qkey =be32_to_cpu (priv->broadcast->mcmember.qkey);spin_unlock_irq (&priv->lock); priv->tx_wr.wr.ud.remote_qkey = priv->qkey; set_qkey =1 ; + +if (!ipoib_cm_admin_enabled (dev)) { +rtnl_lock (); +dev_set_mtu (dev,min (priv->mcast_mtu, priv->admin_mtu)); +rtnl_unlock (); + } }if (!test_bit (IPOIB_MCAST_FLAG_SENDONLY , &mcast->flags)) {
@@ -589,14 +598,6 @@ void ipoib_mcast_join_task(struct work_struct *work)return ; } - priv->mcast_mtu =IPOIB_UD_MTU (ib_mtu_enum_to_int (priv->broadcast->mcmember.mtu)); - -if (!ipoib_cm_admin_enabled (dev)) { -rtnl_lock (); -dev_set_mtu (dev,min (priv->mcast_mtu, priv->admin_mtu)); -rtnl_unlock (); - } -ipoib_dbg_mcast (priv,"successfully joined all multicast groups\n" );clear_bit (IPOIB_MCAST_RUN , &priv->flags);
drivers/infiniband/ulp/srp/ib_srp.c +2 -1
@@ -638,9 +638,9 @@ static void srp_reset_req(struct srp_target_port *target, struct srp_request *restruct scsi_cmnd *scmnd =srp_claim_req (target, req,NULL );if (scmnd) { +srp_free_req (target, req, scmnd,0 ); scmnd->result =DID_RESET <<16 ; scmnd->scsi_done (scmnd); -srp_free_req (target, req, scmnd,0 ); } }
@@ -1687,6 +1687,7 @@ static int srp_abort(struct scsi_cmnd *scmnd) SRP_TSK_ABORT_TASK);srp_free_req (target, req, scmnd,0 ); scmnd->result =DID_ABORT <<16 ; + scmnd->scsi_done (scmnd);return SUCCESS ; }
drivers/md/dm-table.c +22 -4
@@ -1351,17 +1351,25 @@ static int device_is_nonrot(struct dm_target *ti, struct dm_dev *dev,return q &&blk_queue_nonrot (q); } -static bool dm_table_is_nonrot (struct dm_table *t) +static int device_is_not_random (struct dm_target *ti,struct dm_dev *dev, +sector_t start,sector_t len,void *data) +{ +struct request_queue *q =bdev_get_queue (dev->bdev); + +return q && !blk_queue_add_random (q); +} + +static bool dm_table_all_devices_attribute (struct dm_table *t, +iterate_devices_callout_fn func) {struct dm_target *ti;unsigned i =0 ; -/* Ensure that all underlying device are non-rotational. */ while (i <dm_table_get_num_targets (t)) { ti =dm_table_get_target (t, i++);if (!ti->type->iterate_devices || - !ti->type->iterate_devices (ti, device_is_nonrot,NULL )) + !ti->type->iterate_devices (ti, func,NULL ))return 0 ; }
@@ -1393,7 +1401,8 @@ void dm_table_set_restrictions(struct dm_table *t, struct request_queue *q,if (!dm_table_discard_zeroes_data (t)) q->limits.discard_zeroes_data =0 ; -if (dm_table_is_nonrot (t)) +/* Ensure that all underlying devices are non-rotational. */ +if (dm_table_all_devices_attribute (t, device_is_nonrot))queue_flag_set_unlocked (QUEUE_FLAG_NONROT , q);else queue_flag_clear_unlocked (QUEUE_FLAG_NONROT , q);
@@ -1401,6 +1410,15 @@ void dm_table_set_restrictions(struct dm_table *t, struct request_queue *q,dm_table_set_integrity (t);/* +* Determine whether or not this queue's I/O timings contribute +* to the entropy pool, Only request-based targets use this. +* Clear QUEUE_FLAG_ADD_RANDOM if any underlying device does not +* have it set. +*/ +if (blk_queue_add_random (q) &&dm_table_all_devices_attribute (t, device_is_not_random)) +queue_flag_clear_unlocked (QUEUE_FLAG_ADD_RANDOM , q); + +/* * QUEUE_FLAG_STACKABLE must be set after all queue settings are * visible to other CPUs because, once the flag is set, incoming bios * are processed by request-based dm, which refers to the queue
drivers/md/dm-verity.c +4 -4
@@ -718,8 +718,8 @@ static int verity_ctr(struct dm_target *ti, unsigned argc, char **argv) v->hash_dev_block_bits =ffs (num) -1 ;if (sscanf (argv[5 ],"%llu%c" , &num_ll, &dummy) !=1 || - num_ll << (v->data_dev_block_bits -SECTOR_SHIFT ) != - (sector_t )num_ll << (v->data_dev_block_bits -SECTOR_SHIFT )) { + (sector_t)(num_ll << (v->data_dev_block_bits -SECTOR_SHIFT )) + >> (v->data_dev_block_bits -SECTOR_SHIFT ) != num_ll) { ti->error ="Invalid data blocks" ; r = -EINVAL ; goto bad;
@@ -733,8 +733,8 @@ static int verity_ctr(struct dm_target *ti, unsigned argc, char **argv) }if (sscanf (argv[6 ],"%llu%c" , &num_ll, &dummy) !=1 || - num_ll << (v->hash_dev_block_bits -SECTOR_SHIFT ) != - (sector_t )num_ll << (v->hash_dev_block_bits -SECTOR_SHIFT )) { + (sector_t)(num_ll << (v->hash_dev_block_bits -SECTOR_SHIFT )) + >> (v->hash_dev_block_bits -SECTOR_SHIFT ) != num_ll) { ti->error ="Invalid hash start" ; r = -EINVAL ; goto bad;
drivers/md/dm.c +38 -18
91 lines not on this page · raw message
drivers/mtd/ubi/build.c +5 -0
@@ -816,6 +816,11 @@ static int autoresize(struct ubi_device *ubi, int vol_id)struct ubi_volume *vol = ubi->volumes[vol_id];int err, old_reserved_pebs = vol->reserved_pebs; +if (ubi->ro_mode) { +ubi_warn ("skip auto-resize because of R/O mode" ); +return 0 ; + } +/* * Clear the auto-resize flag in the volume in-memory copy of the * volume table, and 'ubi_resize_volume()' will propagate this change
drivers/net/can/mscan/mpc5xxx_can.c +2 -2
@@ -181,7 +181,7 @@ static u32 __devinit mpc512x_can_get_clock(struct platform_device *ofdev,if (!clock_name || !strcmp (clock_name,"sys" )) { sys_clk =clk_get (&ofdev->dev,"sys_clk" ); -if (!sys_clk) { +if (IS_ERR (sys_clk)) {dev_err (&ofdev->dev,"couldn't get sys_clk\n" ); goto exit_unmap; }
@@ -204,7 +204,7 @@ static u32 __devinit mpc512x_can_get_clock(struct platform_device *ofdev,if (clocksrc <0 ) { ref_clk =clk_get (&ofdev->dev,"ref_clk" ); -if (!ref_clk) { +if (IS_ERR (ref_clk)) {dev_err (&ofdev->dev,"couldn't get ref_clk\n" ); goto exit_unmap; }
drivers/net/wireless/ath/ath9k/pci.c +3 -2
@@ -122,8 +122,9 @@ static void ath_pci_aspm_init(struct ath_common *common)if (!parent)return ; -if (ath9k_hw_get_btcoex_scheme (ah) !=ATH_BTCOEX_CFG_NONE ) { -/* Bluetooth coexistance requires disabling ASPM. */ +if ((ath9k_hw_get_btcoex_scheme (ah) !=ATH_BTCOEX_CFG_NONE ) && + (AR_SREV_9285 (ah))) { +/* Bluetooth coexistance requires disabling ASPM for AR9285. */ pci_read_config_byte (pdev, pos +PCI_EXP_LNKCTL , &aspm); aspm &= ~(PCIE_LINK_STATE_L0S |PCIE_LINK_STATE_L1 );pci_write_config_byte (pdev, pos +PCI_EXP_LNKCTL , aspm);
drivers/net/wireless/b43legacy/main.c +2 -0
@@ -3892,6 +3892,8 @@ static void b43legacy_remove(struct ssb_device *dev)cancel_work_sync (&wl->firmware_load);B43legacy_WARN_ON (!wl); +if (!wldev->fw.ucode) +return ;/* NULL if fw never loaded */ if (wl->current_dev == wldev)ieee80211_unregister_hw (wl->hw);
drivers/remoteproc/Kconfig +1 -0
@@ -5,6 +5,7 @@ config REMOTEPROC tristate depends on EXPERIMENTAL select FW_CONFIG + select VIRTIO config OMAP_REMOTEPROC tristate "OMAP remoteproc support"
drivers/remoteproc/remoteproc_core.c +11 -11
@@ -643,17 +643,10 @@ static int rproc_handle_carveout(struct rproc *rproc,dev_dbg (dev,"carveout rsc: da %x, pa %x, len %x, flags %x\n" , rsc->da, rsc->pa, rsc->len, rsc->flags); - mapping =kzalloc (sizeof (*mapping),GFP_KERNEL ); -if (!mapping) { -dev_err (dev,"kzalloc mapping failed\n" ); -return -ENOMEM ; - } - carveout =kzalloc (sizeof (*carveout),GFP_KERNEL );if (!carveout) {dev_err (dev,"kzalloc carveout failed\n" ); - ret = -ENOMEM ; - goto free_mapping; +return -ENOMEM ; } va =dma_alloc_coherent (dev, rsc->len, &dma,GFP_KERNEL );
@@ -683,11 +676,18 @@ static int rproc_handle_carveout(struct rproc *rproc,* physical address in this case. */ if (rproc->domain) { + mapping =kzalloc (sizeof (*mapping),GFP_KERNEL ); +if (!mapping) { +dev_err (dev,"kzalloc mapping failed\n" ); + ret = -ENOMEM ; + goto dma_free; + } + ret =iommu_map (rproc->domain, rsc->da, dma, rsc->len, rsc->flags);if (ret) {dev_err (dev,"iommu_map failed: %d\n" , ret); - goto dma_free; + goto free_mapping; }/*
@@ -728,12 +728,12 @@ static int rproc_handle_carveout(struct rproc *rproc,return 0 ; +free_mapping: +kfree (mapping); dma_free:dma_free_coherent (dev, rsc->len, va, dma); free_carv:kfree (carveout); -free_mapping: -kfree (mapping);return ret; }
drivers/scsi/device_handler/scsi_dh_alua.c +1 -2
@@ -583,8 +583,7 @@ static int alua_rtpg(struct scsi_device *sdev, struct alua_dh_data *h) h->state =TPGS_STATE_STANDBY ;break ;case TPGS_STATE_OFFLINE : -case TPGS_STATE_UNAVAILABLE : -/* Path unusable for unavailable/offline */ +/* Path unusable */ err =SCSI_DH_DEV_OFFLINED ;break ;default :
drivers/scsi/hpsa.c +1 -1
@@ -2943,7 +2943,7 @@ static void fill_cmd(struct CommandList *c, u8 cmd, struct ctlr_info *h, c->Request.Timeout =0 ;/* Don't time out */ memset (&c->Request.CDB[0 ],0 ,sizeof (c->Request.CDB)); c->Request.CDB[0 ] = cmd; - c->Request.CDB[1 ] =0x03 ;/* Reset target above */ + c->Request.CDB[1 ] =HPSA_RESET_TYPE_LUN ;/* If bytes 4-7 are zero, it means reset the */ /* LunID device */ c->Request.CDB[4 ] =0x00 ;
drivers/scsi/ibmvscsi/ibmvscsi.c +3 -0
@@ -1541,6 +1541,9 @@ static int ibmvscsi_do_host_config(struct ibmvscsi_host_data *hostdata, host_config = &evt_struct->iu.mad.host_config; +/* The transport length field is only 16-bit */ + length =min (0xffff , length); +/* Set up a lun reset SRP command */ memset (host_config,0x00 ,sizeof (*host_config)); host_config->common.type =VIOSRP_HOST_CONFIG_TYPE ;
drivers/scsi/isci/init.c +0 -1
@@ -481,7 +481,6 @@ static int __devinit isci_pci_probe(struct pci_dev *pdev, const struct pci_devic orom->hdr.version)) {dev_warn (&pdev->dev,"[%d]: invalid oem parameters detected, falling back to firmware\n" , i); -devm_kfree (&pdev->dev, orom); orom =NULL ;break ; }
drivers/scsi/isci/probe_roms.c +0 -1
@@ -104,7 +104,6 @@ struct isci_orom *isci_request_oprom(struct pci_dev *pdev)if (i >= len) {dev_err (&pdev->dev,"oprom parse error\n" ); -devm_kfree (&pdev->dev, rom); rom =NULL ; }pci_unmap_biosrom (oprom);
drivers/scsi/scsi_sysfs.c +14 -16
@@ -1023,33 +1023,31 @@ static void __scsi_remove_target(struct scsi_target *starget)void scsi_remove_target (struct device *dev) {struct Scsi_Host *shost =dev_to_shost (dev->parent); -struct scsi_target *starget, *found; +struct scsi_target *starget, *last =NULL ;unsigned long flags; - restart: - found =NULL ; +/* remove targets being careful to lookup next entry before +* deleting the last +*/ spin_lock_irqsave (shost->host_lock, flags);list_for_each_entry (starget, &shost->__targets, siblings) {if (starget->state ==STARGET_DEL )continue ;if (starget->dev.parent == dev || &starget->dev == dev) { - found = starget; - found->reap_ref++; -break ; +/* assuming new targets arrive at the end */ + starget->reap_ref++; +spin_unlock_irqrestore (shost->host_lock, flags); +if (last) +scsi_target_reap (last); + last = starget; +__scsi_remove_target (starget); +spin_lock_irqsave (shost->host_lock, flags); } }spin_unlock_irqrestore (shost->host_lock, flags); -if (found) { -__scsi_remove_target (found); -scsi_target_reap (found); -/* in the case where @dev has multiple starget children, -* continue removing. -* -* FIXME: does such a case exist? -*/ - goto restart; - } +if (last) +scsi_target_reap (last); }EXPORT_SYMBOL (scsi_remove_target);
drivers/staging/comedi/comedi_fops.c +3 -2
@@ -843,7 +843,7 @@ static int parse_insn(struct comedi_device *dev, struct comedi_insn *insn, ret = -EAGAIN ;break ; } - ret = s->async->inttrig (dev, s, insn->data[0 ]); + ret = s->async->inttrig (dev, s, data[0 ]);if (ret >=0 ) ret =1 ;break ;
@@ -1088,7 +1088,6 @@ static int do_cmd_ioctl(struct comedi_device *dev, goto cleanup; } -kfree (async->cmd.chanlist); async->cmd = user_cmd; async->cmd.data =NULL ;/* load channel/gain list */
@@ -1833,6 +1832,8 @@ void do_become_nonbusy(struct comedi_device *dev, struct comedi_subdevice *s)if (async) {comedi_reset_async_buf (async); async->inttrig =NULL ; +kfree (async->cmd.chanlist); + async->cmd.chanlist =NULL ; }else {printk (KERN_ERR "BUG: (?) do_become_nonbusy called with async=0\n" );
drivers/staging/comedi/drivers/jr3_pci.c +1 -1
@@ -905,7 +905,7 @@ static int jr3_pci_attach(struct comedi_device *dev, }/* Reset DSP card */ - devpriv->iobase->channel[0 ].reset =0 ; +writel (0 , &devpriv->iobase->channel[0 ].reset); result =comedi_load_firmware (dev,"jr3pci.idm" , jr3_download_firmware);dev_dbg (dev->hw_dev,"Firmare load %d\n" , result);
drivers/staging/comedi/drivers/s626.c +1 -1
@@ -2370,7 +2370,7 @@ static int s626_enc_insn_config(struct comedi_device *dev,/* (data==NULL) ? (Preloadvalue=0) : (Preloadvalue=data[0]); */ k->SetMode (dev, k, Setup, TRUE); -Preload (dev, k, *(insn->data)); +Preload (dev, k, data[0 ]); k->PulseIndex (dev, k);SetLatchSource (dev, k, valueSrclatch); k->SetEnable (dev, k, (uint16_t ) (enab !=0 ));
drivers/staging/rtl8712/rtl8712_recv.c +4 -1
@@ -1126,6 +1126,9 @@ static void recv_tasklet(void *priv)recvbuf2recvframe (padapter, pskb);skb_reset_tail_pointer (pskb); pskb->len =0 ; -skb_queue_tail (&precvpriv->free_recv_skb_queue, pskb); +if (!skb_cloned (pskb)) +skb_queue_tail (&precvpriv->free_recv_skb_queue, pskb); +else +consume_skb (pskb); } }
drivers/staging/speakup/speakup_soft.c +4 -9
@@ -40,7 +40,7 @@ static int softsynth_is_alive(struct spk_synth *synth);static unsigned char get_index (void );static struct miscdevice synth_device; -static int initialized; +static int init_pos;static int misc_registered;static struct var_t vars[] = {
@@ -194,7 +194,7 @@ static int softsynth_close(struct inode *inode, struct file *fp)unsigned long flags;spk_lock (flags); synth_soft.alive =0 ; - initialized =0 ; + init_pos =0 ;spk_unlock (flags);/* Make sure we let applications go before leaving */ speakup_start_ttys ();
@@ -239,13 +239,8 @@ static ssize_t softsynth_read(struct file *fp, char *buf, size_t count, ch ='\x18' ; }else if (synth_buffer_empty ()) {break ; - }else if (!initialized) { -if (*init) { - ch = *init; - init++; - }else { - initialized =1 ; - } + }else if (init[init_pos]) { + ch = init[init_pos++]; }else { ch =synth_buffer_getc (); }
drivers/tty/n_gsm.c +20 -6
@@ -875,7 +875,7 @@ static int gsm_dlci_data_output_framed(struct gsm_mux *gsm,/* dlci->skb is locked by tx_lock */ if (dlci->skb ==NULL ) { - dlci->skb =skb_dequeue (&dlci->skb_list); + dlci->skb =skb_dequeue_tail (&dlci->skb_list);if (dlci->skb ==NULL )return 0 ; first =1 ;
@@ -899,8 +899,11 @@ static int gsm_dlci_data_output_framed(struct gsm_mux *gsm,/* FIXME: need a timer or something to kick this so it can't get stuck with no work outstanding and no buffer free */ -if (msg ==NULL ) +if (msg ==NULL ) { +skb_queue_tail (&dlci->skb_list, dlci->skb); + dlci->skb =NULL ;return -ENOMEM ; + } dp = msg->data;if (dlci->adaption ==4 ) {/* Interruptible framed (Packetised Data) */
@@ -971,16 +974,19 @@ static void gsm_dlci_data_sweep(struct gsm_mux *gsm)static void gsm_dlci_data_kick (struct gsm_dlci *dlci) {unsigned long flags; +int sweep;spin_lock_irqsave (&dlci->gsm->tx_lock, flags);/* If we have nothing running then we need to fire up */ + sweep = (dlci->gsm->tx_bytes <TX_THRESH_LO );if (dlci->gsm->tx_bytes ==0 ) {if (dlci->net)gsm_dlci_data_output_framed (dlci->gsm, dlci);else gsm_dlci_data_output (dlci->gsm, dlci); - }else if (dlci->gsm->tx_bytes <TX_THRESH_LO ) -gsm_dlci_data_sweep (dlci->gsm); + } +if (sweep) +gsm_dlci_data_sweep (dlci->gsm);spin_unlock_irqrestore (&dlci->gsm->tx_lock, flags); }
@@ -1190,6 +1196,8 @@ static void gsm_control_message(struct gsm_mux *gsm, unsigned int command, u8 *data, int clen) {u8 buf[1 ]; +unsigned long flags; +switch (command) {case CMD_CLD : {struct gsm_dlci *dlci = gsm->dlci[0 ];
@@ -1215,7 +1223,9 @@ static void gsm_control_message(struct gsm_mux *gsm, unsigned int command, gsm->constipated =0 ;gsm_control_reply (gsm,CMD_FCOFF ,NULL ,0 );/* Kick the link in case it is idling */ +spin_lock_irqsave (&gsm->tx_lock, flags);gsm_data_kick (gsm); +spin_unlock_irqrestore (&gsm->tx_lock, flags);break ;case CMD_MSC :/* Out of band modem line change indicator for a DLCI */
@@ -2377,12 +2387,12 @@ static void gsmld_write_wakeup(struct tty_struct *tty)/* Queue poll */ clear_bit (TTY_DO_WRITE_WAKEUP , &tty->flags); +spin_lock_irqsave (&gsm->tx_lock, flags);gsm_data_kick (gsm);if (gsm->tx_bytes <TX_THRESH_LO ) { -spin_lock_irqsave (&gsm->tx_lock, flags);gsm_dlci_data_sweep (gsm); -spin_unlock_irqrestore (&gsm->tx_lock, flags); } +spin_unlock_irqrestore (&gsm->tx_lock, flags); }/**
@@ -2889,6 +2899,10 @@ static int gsmtty_open(struct tty_struct *tty, struct file *filp) gsm = gsm_mux[mux];if (gsm->dead)return -EL2HLT ; +/* If DLCI 0 is not yet fully open return an error. This is ok from a locking +perspective as we don't have to worry about this if DLCI0 is lost */ +if (gsm->dlci[0 ] && gsm->dlci[0 ]->state !=DLCI_OPEN ) +return -EL2NSYNC ; dlci = gsm->dlci[line];if (dlci ==NULL ) dlci =gsm_dlci_alloc (gsm, line);
drivers/tty/n_tty.c +2 -1
@@ -1727,7 +1727,8 @@ static ssize_t n_tty_read(struct tty_struct *tty, struct file *file, do_it_again: -BUG_ON (!tty->read_buf); +if (WARN_ON (!tty->read_buf)) +return -EAGAIN ; c =job_control (tty, file);if (c <0 )
drivers/tty/serial/8250/8250_pci.c +7 -2
@@ -1125,6 +1125,8 @@ pci_xr17c154_setup(struct serial_private *priv,#define PCI_SUBDEVICE_ID_OCTPRO422 0x0208#define PCI_SUBDEVICE_ID_POCTAL232 0x0308#define PCI_SUBDEVICE_ID_POCTAL422 0x0408 +#define PCI_SUBDEVICE_ID_SIIG_DUAL_00 0x2500 +#define PCI_SUBDEVICE_ID_SIIG_DUAL_30 0x2530#define PCI_VENDOR_ID_ADVANTECH 0x13fe#define PCI_DEVICE_ID_INTEL_CE4100_UART 0x2e66#define PCI_DEVICE_ID_ADVANTECH_PCI3620 0x3620
@@ -3187,8 +3189,11 @@ static struct pci_device_id serial_pci_tbl[] = {* For now just used the hex ID 0x950a. */ {PCI_VENDOR_ID_OXSEMI ,0x950a , -PCI_SUBVENDOR_ID_SIIG ,PCI_SUBDEVICE_ID_SIIG_DUAL_SERIAL ,0 ,0 , - pbn_b0_2_115200 }, +PCI_SUBVENDOR_ID_SIIG ,PCI_SUBDEVICE_ID_SIIG_DUAL_00 , + 0, 0, pbn_b0_2_115200 }, + { PCI_VENDOR_ID_OXSEMI, 0x950a, +PCI_SUBVENDOR_ID_SIIG ,PCI_SUBDEVICE_ID_SIIG_DUAL_30 , + 0, 0, pbn_b0_2_115200 }, { PCI_VENDOR_ID_OXSEMI, 0x950a,PCI_ANY_ID ,PCI_ANY_ID ,0 ,0 , pbn_b0_2_1130000 },
drivers/tty/serial/amba-pl011.c +14 -1
@@ -1654,13 +1654,26 @@ pl011_set_termios(struct uart_port *port, struct ktermios *termios, old_cr &= ~ST_UART011_CR_OVSFACT ; } +/* +* Workaround for the ST Micro oversampling variants to +* increase the bitrate slightly, by lowering the divisor, +* to avoid delayed sampling of start bit at high speeds, +* else we see data corruption. +*/ +if (uap->vendor->oversampling) { +if ((baud >=3000000 ) && (baud <3250000 ) && (quot >1 )) + quot -=1 ; +else if ((baud >3250000 ) && (quot >2 )) + quot -=2 ; + }/* Set baud rate */ writew (quot &0x3f , port->membase +UART011_FBRD );writew (quot >>6 , port->membase +UART011_IBRD );/* * ----------v----------v----------v----------v----- -* NOTE: MUST BE WRITTEN AFTER UARTLCR_M & UARTLCR_L +* NOTE: lcrh_tx and lcrh_rx MUST BE WRITTEN AFTER +* UART011_FBRD & UART011_IBRD. * ----------^----------^----------^----------^----- */ writew (lcr_h, port->membase + uap->lcrh_rx);
drivers/tty/serial/omap-serial.c +6 -6
@@ -649,19 +649,19 @@ serial_omap_configure_xonxoff/* * IXON Flag: -* Enable XON/XOFF flow control on output. -* Transmit XON1, XOFF1 +* Flow control for OMAP.TX +* OMAP.RX should listen for XON/XOFF */ if (termios->c_iflag &IXON ) - up->efr |=OMAP_UART_SW_TX ; + up->efr |=OMAP_UART_SW_RX ;/* * IXOFF Flag: -* Enable XON/XOFF flow control on input. -* Receiver compares XON1, XOFF1. +* Flow control for OMAP.RX +* OMAP.TX should send XON/XOFF */ if (termios->c_iflag &IXOFF ) - up->efr |=OMAP_UART_SW_RX ; + up->efr |=OMAP_UART_SW_TX ;serial_out (up,UART_EFR , up->efr |UART_EFR_ECB );serial_out (up,UART_LCR ,UART_LCR_CONF_MODE_A );
drivers/tty/vt/keyboard.c +0 -3
@@ -1053,13 +1053,10 @@ static int kbd_update_leds_helper(struct input_handle *handle, void *data)*/ int vt_get_leds (int console,int flag) { -unsigned long flags;struct kbd_struct * kbd = kbd_table + console;int ret; -spin_lock_irqsave (&kbd_event_lock, flags); ret =vc_kbd_led (kbd, flag); -spin_unlock_irqrestore (&kbd_event_lock, flags);return ret; }
drivers/usb/gadget/dummy_hcd.c +4 -4
@@ -2505,10 +2505,8 @@ static int dummy_hcd_probe(struct platform_device *pdev) hs_hcd->has_tt =1 ; retval =usb_add_hcd (hs_hcd,0 ,0 ); -if (retval !=0 ) { -usb_put_hcd (hs_hcd); -return retval; - } +if (retval) + goto put_usb2_hcd;if (mod_data.is_super_speed) { ss_hcd = usb_create_shared_hcd(&dummy_hcd, &pdev->dev,
@@ -2527,6 +2525,8 @@ static int dummy_hcd_probe(struct platform_device *pdev) put_usb3_hcd:usb_put_hcd (ss_hcd); dealloc_usb2_hcd: +usb_remove_hcd (hs_hcd); +put_usb2_hcd:usb_put_hcd (hs_hcd); the_controller.hs_hcd = the_controller.ss_hcd =NULL ;return retval;
drivers/usb/host/xhci-mem.c +7 -0
@@ -1772,6 +1772,7 @@ void xhci_mem_cleanup(struct xhci_hcd *xhci) {struct pci_dev *pdev =to_pci_dev (xhci_to_hcd (xhci)->self.controller);struct dev_info *dev_info, *next; +struct xhci_cd *cur_cd, *next_cd;unsigned long flags;int size;int i, j, num_ports;
@@ -1793,6 +1794,11 @@ void xhci_mem_cleanup(struct xhci_hcd *xhci)xhci_ring_free (xhci, xhci->cmd_ring); xhci->cmd_ring =NULL ;xhci_dbg (xhci,"Freed command ring\n" ); +list_for_each_entry_safe (cur_cd, next_cd, + &xhci->cancel_cmd_list, cancel_cmd_list) { +list_del (&cur_cd->cancel_cmd_list); +kfree (cur_cd); + }for (i =1 ; i <MAX_HC_SLOTS ; ++i)xhci_free_virt_device (xhci, i);
@@ -2338,6 +2344,7 @@ int xhci_mem_init(struct xhci_hcd *xhci, gfp_t flags) xhci->cmd_ring =xhci_ring_alloc (xhci,1 ,1 ,TYPE_COMMAND , flags);if (!xhci->cmd_ring) goto fail; +INIT_LIST_HEAD (&xhci->cancel_cmd_list);xhci_dbg (xhci,"Allocated command ring at %p\n" , xhci->cmd_ring);xhci_dbg (xhci,"First segment DMA is 0x%llx\n" , (unsigned long long )xhci->cmd_ring->first_seg->dma);
drivers/usb/host/xhci-pci.c +1 -0
@@ -99,6 +99,7 @@ static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci)* PPT chipsets. */ xhci->quirks |=XHCI_SPURIOUS_REBOOT ; + xhci->quirks |=XHCI_AVOID_BEI ; }if (pdev->vendor ==PCI_VENDOR_ID_ETRON && pdev->device ==PCI_DEVICE_ID_ASROCK_P67 ) {
drivers/usb/host/xhci-ring.c +279 -7
325 lines not on this page · raw message
drivers/usb/host/xhci.c +27 -11
@@ -52,7 +52,7 @@ MODULE_PARM_DESC(link_quirk, "Don't clear the chain bit on a link TRB");* handshake done). There are two failure modes: "usec" have passed (major * hardware flakeout), or the register reads as all-ones (hardware removed). */ -static int handshake (struct xhci_hcd *xhci,void __iomem *ptr, +int handshake (struct xhci_hcd *xhci,void __iomem *ptr,u32 mask,u32 done,int usec) {u32 result;
@@ -105,9 +105,10 @@ int xhci_halt(struct xhci_hcd *xhci) ret =handshake (xhci, &xhci->op_regs->status,STS_HALT ,STS_HALT ,XHCI_MAX_HALT_USEC ); -if (!ret) +if (!ret) { xhci->xhc_state |=XHCI_STATE_HALTED ; -else + xhci->cmd_ring_state =CMD_RING_STATE_STOPPED ; + }else xhci_warn (xhci,"Host not halted after %u microseconds.\n" ,XHCI_MAX_HALT_USEC );return ret;
@@ -470,6 +471,8 @@ static bool compliance_mode_recovery_timer_quirk_check(void) dmi_product_name =dmi_get_system_info (DMI_PRODUCT_NAME ); dmi_sys_vendor =dmi_get_system_info (DMI_SYS_VENDOR ); +if (!dmi_product_name || !dmi_sys_vendor) +return false;if (!(strstr (dmi_sys_vendor,"Hewlett-Packard" )))return false;
@@ -581,6 +584,7 @@ static int xhci_run_finished(struct xhci_hcd *xhci)return -ENODEV ; } xhci->shared_hcd->state =HC_STATE_RUNNING ; + xhci->cmd_ring_state =CMD_RING_STATE_RUNNING ;if (xhci->quirks &XHCI_NEC_HOST )xhci_ring_cmd_db (xhci);
@@ -886,7 +890,7 @@ int xhci_suspend(struct xhci_hcd *xhci) command &= ~CMD_RUN ;xhci_writel (xhci, command, &xhci->op_regs->command);if (handshake (xhci, &xhci->op_regs->status, -STS_HALT ,STS_HALT ,100 *100 )) { +STS_HALT ,STS_HALT ,XHCI_MAX_HALT_USEC )) {xhci_warn (xhci,"WARN: xHC CMD_RUN timeout\n" );spin_unlock_irq (&xhci->lock);return -ETIMEDOUT ;
@@ -2521,6 +2525,7 @@ static int xhci_configure_endpoint(struct xhci_hcd *xhci,struct completion *cmd_completion;u32 *cmd_status;struct xhci_virt_device *virt_dev; +union xhci_trb *cmd_trb;spin_lock_irqsave (&xhci->lock, flags); virt_dev = xhci->devs[udev->slot_id];
@@ -2566,6 +2571,7 @@ static int xhci_configure_endpoint(struct xhci_hcd *xhci, }init_completion (cmd_completion); + cmd_trb = xhci->cmd_ring->dequeue;if (!ctx_change) ret =xhci_queue_configure_endpoint (xhci, in_ctx->dma, udev->slot_id, must_succeed);
@@ -2587,14 +2593,17 @@ static int xhci_configure_endpoint(struct xhci_hcd *xhci,/* Wait for the configure endpoint command to complete */ timeleft =wait_for_completion_interruptible_timeout ( cmd_completion, -USB_CTRL_SET_TIMEOUT ); +XHCI_CMD_DEFAULT_TIMEOUT );if (timeleft <=0 ) {xhci_warn (xhci,"%s while waiting for %s command\n" , timeleft ==0 ?"Timeout" :"Signal" , ctx_change ==0 ?"configure endpoint" :"evaluate context" ); -/* FIXME cancel the configure endpoint command */ +/* cancel the configure endpoint command */ + ret =xhci_cancel_cmd (xhci, command, cmd_trb); +if (ret <0 ) +return ret;return -ETIME ; }
@@ -3543,8 +3552,10 @@ int xhci_alloc_dev(struct usb_hcd *hcd, struct usb_device *udev)unsigned long flags;int timeleft;int ret; +union xhci_trb *cmd_trb;spin_lock_irqsave (&xhci->lock, flags); + cmd_trb = xhci->cmd_ring->dequeue; ret =xhci_queue_slot_control (xhci,TRB_ENABLE_SLOT ,0 );if (ret) {spin_unlock_irqrestore (&xhci->lock, flags);
@@ -3556,12 +3567,12 @@ int xhci_alloc_dev(struct usb_hcd *hcd, struct usb_device *udev)/* XXX: how much time for xHC slot assignment? */ timeleft =wait_for_completion_interruptible_timeout (&xhci->addr_dev, -USB_CTRL_SET_TIMEOUT ); +XHCI_CMD_DEFAULT_TIMEOUT );if (timeleft <=0 ) {xhci_warn (xhci,"%s while waiting for a slot\n" , timeleft ==0 ?"Timeout" :"Signal" ); -/* FIXME cancel the enable slot request */ -return 0 ; +/* cancel the enable slot request */ +return xhci_cancel_cmd (xhci,NULL , cmd_trb); }if (!xhci->slot_id) {
@@ -3622,6 +3633,7 @@ int xhci_address_device(struct usb_hcd *hcd, struct usb_device *udev)struct xhci_slot_ctx *slot_ctx;struct xhci_input_control_ctx *ctrl_ctx;u64 temp_64; +union xhci_trb *cmd_trb;if (!udev->slot_id) {xhci_dbg (xhci,"Bad Slot ID %d\n" , udev->slot_id);
@@ -3660,6 +3672,7 @@ int xhci_address_device(struct usb_hcd *hcd, struct usb_device *udev)xhci_dbg_ctx (xhci, virt_dev->in_ctx,2 );spin_lock_irqsave (&xhci->lock, flags); + cmd_trb = xhci->cmd_ring->dequeue; ret =xhci_queue_address_device (xhci, virt_dev->in_ctx->dma, udev->slot_id);if (ret) {
@@ -3672,7 +3685,7 @@ int xhci_address_device(struct usb_hcd *hcd, struct usb_device *udev)/* ctrl tx can take up to 5 sec; XXX: need more time for xHC? */ timeleft =wait_for_completion_interruptible_timeout (&xhci->addr_dev, -USB_CTRL_SET_TIMEOUT ); +XHCI_CMD_DEFAULT_TIMEOUT );/* FIXME: From section 4.3.4: "Software shall be responsible for timing * the SetAddress() "recovery interval" required by USB and aborting the * command on a timeout.
@@ -3680,7 +3693,10 @@ int xhci_address_device(struct usb_hcd *hcd, struct usb_device *udev)if (timeleft <=0 ) {xhci_warn (xhci,"%s while waiting for address device command\n" , timeleft ==0 ?"Timeout" :"Signal" ); -/* FIXME cancel the address device command */ +/* cancel the address device command */ + ret =xhci_cancel_cmd (xhci,NULL , cmd_trb); +if (ret <0 ) +return ret;return -ETIME ; }
drivers/usb/host/xhci.h +20 -0
@@ -1252,6 +1252,16 @@ struct xhci_td {union xhci_trb *last_trb; }; +/* xHCI command default timeout value */ +#define XHCI_CMD_DEFAULT_TIMEOUT (5 * HZ) + +/* command descriptor */ +struct xhci_cd { +struct list_head cancel_cmd_list; +struct xhci_command *command; +union xhci_trb *cmd_trb; +}; +struct xhci_dequeue_state {struct xhci_segment *new_deq_seg;union xhci_trb *new_deq_ptr;
@@ -1417,6 +1427,11 @@ struct xhci_hcd {/* data structures */ struct xhci_device_context_array *dcbaa;struct xhci_ring *cmd_ring; +unsigned int cmd_ring_state; +#define CMD_RING_STATE_RUNNING (1 << 0) +#define CMD_RING_STATE_ABORTED (1 << 1) +#define CMD_RING_STATE_STOPPED (1 << 2) +struct list_head cancel_cmd_list;unsigned int cmd_ring_reserved_trbs;struct xhci_ring *event_ring;struct xhci_erst erst;
@@ -1488,6 +1503,7 @@ struct xhci_hcd {#define XHCI_TRUST_TX_LENGTH (1 << 10)#define XHCI_SPURIOUS_REBOOT (1 << 13)#define XHCI_COMP_MODE_QUIRK (1 << 14) +#define XHCI_AVOID_BEI (1 << 15)unsigned int num_active_eps;unsigned int limit_active_eps;/* There are two roothubs to keep track of bus suspend info for */
@@ -1694,6 +1710,8 @@ static inline void xhci_unregister_plat(void)/* xHCI host controller glue */ typedef void (*xhci_get_quirks_t )(struct device *,struct xhci_hcd *); +int handshake (struct xhci_hcd *xhci,void __iomem *ptr, +u32 mask,u32 done,int usec);void xhci_quiesce (struct xhci_hcd *xhci);int xhci_halt (struct xhci_hcd *xhci);int xhci_reset (struct xhci_hcd *xhci);
@@ -1784,6 +1802,8 @@ void xhci_queue_config_ep_quirk(struct xhci_hcd *xhci, unsigned int slot_id, unsigned int ep_index, struct xhci_dequeue_state *deq_state);void xhci_stop_endpoint_command_watchdog (unsigned long arg); +int xhci_cancel_cmd (struct xhci_hcd *xhci,struct xhci_command *command, +union xhci_trb *cmd_trb);void xhci_ring_ep_doorbell (struct xhci_hcd *xhci,unsigned int slot_id,unsigned int ep_index,unsigned int stream_id);
drivers/usb/serial/ftdi_sio.c +2 -0
@@ -584,6 +584,8 @@ static struct usb_device_id id_table_combined [] = { { USB_DEVICE(FTDI_VID, FTDI_IBS_PEDO_PID) }, { USB_DEVICE(FTDI_VID, FTDI_IBS_PROD_PID) }, { USB_DEVICE(FTDI_VID, FTDI_TAVIR_STK500_PID) }, + { USB_DEVICE(FTDI_VID, FTDI_TIAO_UMPA_PID), + .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },/* * ELV devices: */
drivers/usb/serial/ftdi_sio_ids.h +5 -0
@@ -517,6 +517,11 @@*/ #define FTDI_TAVIR_STK500_PID 0xFA33/* STK500 AVR programmer */ +/* +* TIAO product ids (FTDI_VID) +* http://www.tiaowiki.com/w/Main_Page +*/ +#define FTDI_TIAO_UMPA_PID 0x8a98/* TIAO/DIYGADGET USB Multi-Protocol Adapter */ /********************************/
drivers/usb/serial/option.c +2 -1
@@ -870,7 +870,8 @@ static const struct usb_device_id option_ids[] = { { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0153, 0xff, 0xff, 0xff) }, { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0155, 0xff, 0xff, 0xff) }, { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0156, 0xff, 0xff, 0xff) }, - { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0157, 0xff, 0xff, 0xff) }, + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0157, 0xff, 0xff, 0xff), + .driver_info = (kernel_ulong_t)&net_intf5_blacklist }, { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0158, 0xff, 0xff, 0xff) }, { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0159, 0xff, 0xff, 0xff) }, { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0161, 0xff, 0xff, 0xff) },
drivers/usb/serial/qcaux.c +3 -7
@@ -36,8 +36,6 @@#define UTSTARCOM_PRODUCT_UM175_V1 0x3712#define UTSTARCOM_PRODUCT_UM175_V2 0x3714#define UTSTARCOM_PRODUCT_UM175_ALLTEL 0x3715 -#define PANTECH_PRODUCT_UML190_VZW 0x3716 -#define PANTECH_PRODUCT_UML290_VZW 0x3718/* CMOTECH devices */ #define CMOTECH_VENDOR_ID 0x16d8
@@ -68,11 +66,9 @@ static struct usb_device_id id_table[] = { { USB_DEVICE_AND_INTERFACE_INFO(LG_VENDOR_ID, LG_PRODUCT_VX4400_6000, 0xff, 0xff, 0x00) }, { USB_DEVICE_AND_INTERFACE_INFO(SANYO_VENDOR_ID, SANYO_PRODUCT_KATANA_LX, 0xff, 0xff, 0x00) }, { USB_DEVICE_AND_INTERFACE_INFO(SAMSUNG_VENDOR_ID, SAMSUNG_PRODUCT_U520, 0xff, 0x00, 0x00) }, - { USB_DEVICE_AND_INTERFACE_INFO(UTSTARCOM_VENDOR_ID, PANTECH_PRODUCT_UML190_VZW, 0xff, 0xff, 0xff) }, - { USB_DEVICE_AND_INTERFACE_INFO(UTSTARCOM_VENDOR_ID, PANTECH_PRODUCT_UML190_VZW, 0xff, 0xfe, 0xff) }, - { USB_DEVICE_AND_INTERFACE_INFO(UTSTARCOM_VENDOR_ID, PANTECH_PRODUCT_UML290_VZW, 0xff, 0xfd, 0xff) }, /* NMEA */ - { USB_DEVICE_AND_INTERFACE_INFO(UTSTARCOM_VENDOR_ID, PANTECH_PRODUCT_UML290_VZW, 0xff, 0xfe, 0xff) }, /* WMC */ - { USB_DEVICE_AND_INTERFACE_INFO(UTSTARCOM_VENDOR_ID, PANTECH_PRODUCT_UML290_VZW, 0xff, 0xff, 0xff) }, /* DIAG */ + { USB_VENDOR_AND_INTERFACE_INFO(UTSTARCOM_VENDOR_ID, 0xff, 0xfd, 0xff) }, /* NMEA */ + { USB_VENDOR_AND_INTERFACE_INFO(UTSTARCOM_VENDOR_ID, 0xff, 0xfe, 0xff) }, /* WMC */ + { USB_VENDOR_AND_INTERFACE_INFO(UTSTARCOM_VENDOR_ID, 0xff, 0xff, 0xff) }, /* DIAG */ { }, };MODULE_DEVICE_TABLE (usb, id_table);
fs/binfmt_elf.c +4 -15
@@ -1698,30 +1698,19 @@ static int elf_note_info_init(struct elf_note_info *info)return 0 ; info->psinfo =kmalloc (sizeof (*info->psinfo),GFP_KERNEL );if (!info->psinfo) - goto notes_free; +return 0 ; info->prstatus =kmalloc (sizeof (*info->prstatus),GFP_KERNEL );if (!info->prstatus) - goto psinfo_free; +return 0 ; info->fpu =kmalloc (sizeof (*info->fpu),GFP_KERNEL );if (!info->fpu) - goto prstatus_free; +return 0 ;#ifdef ELF_CORE_COPY_XFPREGS info->xfpu =kmalloc (sizeof (*info->xfpu),GFP_KERNEL );if (!info->xfpu) - goto fpu_free; +return 0 ;#endif return 1 ; -#ifdef ELF_CORE_COPY_XFPREGS - fpu_free: -kfree (info->fpu); -#endif - prstatus_free: -kfree (info->prstatus); - psinfo_free: -kfree (info->psinfo); - notes_free: -kfree (info->notes); -return 0 ; } static int fill_note_info(struct elfhdr *elf, int phdrs,
fs/dcache.c +6 -0
@@ -1116,6 +1116,8 @@ positive:return 1 ; rename_retry: +if (locked) + goto again; locked =1 ;write_seqlock (&rename_lock); goto again;
@@ -1218,6 +1220,8 @@ out: rename_retry:if (found)return found; +if (locked) + goto again; locked =1 ;write_seqlock (&rename_lock); goto again;
@@ -2963,6 +2967,8 @@ resume:return ; rename_retry: +if (locked) + goto again; locked =1 ;write_seqlock (&rename_lock); goto again;
include/linux/pci_ids.h +0 -1
@@ -1846,7 +1846,6 @@#define PCI_DEVICE_ID_SIIG_8S_20x_650 0x2081#define PCI_DEVICE_ID_SIIG_8S_20x_850 0x2082#define PCI_SUBDEVICE_ID_SIIG_QUARTET_SERIAL 0x2050 -#define PCI_SUBDEVICE_ID_SIIG_DUAL_SERIAL 0x2530#define PCI_VENDOR_ID_RADISYS 0x1331
security/yama/yama_lsm.c +1 -1
@@ -138,7 +138,7 @@ static int yama_task_prctl(int option, unsigned long arg2, unsigned long arg3,if (arg2 ==0 ) {yama_ptracer_del (NULL , myself); rc =0 ; - }else if (arg2 ==PR_SET_PTRACER_ANY ) { + }else if (arg2 ==PR_SET_PTRACER_ANY || (int )arg2 ==-1 ) { rc =yama_ptracer_add (NULL , myself); }else {struct task_struct *tracer;
tools/hv/hv_kvp_daemon.c +31 -14
139 lines not on this page · raw message