Linux 3.5.6
I'm announcing the release of the 3.5.6 kernel.
Note, there will probably only be one more 3.5.y kernel release, please move to the 3.6 kernel branch at this time.
All users of the 3.5 kernel series must upgrade.
The updated 3.5.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-3.5.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/hid/hid-core.c | 16 + drivers/hid/usbhid/hid-core.c | 6 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-mpath.c | 11 drivers/md/dm-table.c | 26 +- drivers/md/dm-verity.c | 8 drivers/md/dm.c | 56 +++- drivers/mtd/ubi/attach.c | 2 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/printer.c | 128 +++++------ drivers/usb/gadget/tcm_usb_gadget.c | 33 +- drivers/usb/gadget/tcm_usb_gadget.h | 14 - 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 drivers/usb/serial/usb-serial.c | 3 drivers/xen/xen-pciback/pci_stub.c | 1 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 ++- 57 files changed, 709 insertions(+), 265 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 (2):
USB: serial: fix up bug with missing {}
Linux 3.5.6Ian 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
Kevin Daughtridge (1):
HID: keep dev_rdesc unmodified and use it for comparisons
Khalid Aziz (1):
firmware: Add missing attributes to EFI variable attribute print out from sysfs
Konrad Rzeszutek Wilk (1):
xen/pciback: Restore the PCI config space after an FLR.
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
Matthieu CASTET (1):
UBI: erase free PEB with bitflip in EC header
Michael Spang (1):
Increase XHCI suspend timeout to 16ms
Mike Snitzer (2):
dm mpath: only retry ioctl when no paths if queue_if_no_path set
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 (2):
usb: gadget: make g_printer enumerate again
usb: gadget: initialize the strings in tcm_usb_gadget properly
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 = 5 -SUBLEVEL = 5 +SUBLEVEL = 6 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/hid/hid-core.c +13 -3
@@ -757,6 +757,7 @@ int hid_open_report(struct hid_device *device)struct hid_item item;unsigned int size;__u8 *start; +__u8 *buf;__u8 *end;int ret; static int (*dispatch_type[])(struct hid_parser *parser,
@@ -775,12 +776,21 @@ int hid_open_report(struct hid_device *device)return -ENODEV ; size = device->dev_rsize; + buf =kmemdup (start, size,GFP_KERNEL ); +if (buf ==NULL ) +return -ENOMEM ; +if (device->driver->report_fixup) - start = device->driver->report_fixup (device, start, &size); + start = device->driver->report_fixup (device, buf, &size); +else + start = buf; - device->rdesc =kmemdup (start, size,GFP_KERNEL ); -if (device->rdesc ==NULL ) + start =kmemdup (start, size,GFP_KERNEL ); +kfree (buf); +if (start ==NULL )return -ENOMEM ; + + device->rdesc = start; device->rsize = size; parser =vzalloc (sizeof (struct hid_parser ));
drivers/hid/usbhid/hid-core.c +3 -3
@@ -1423,20 +1423,20 @@ static int hid_post_reset(struct usb_interface *intf)* configuration descriptors passed, we already know that * the size of the HID report descriptor has not changed. */ - rdesc =kmalloc (hid->rsize,GFP_KERNEL ); + rdesc =kmalloc (hid->dev_rsize,GFP_KERNEL );if (!rdesc) {dbg_hid ("couldn't allocate rdesc memory (post_reset)\n" );return 1 ; } status =hid_get_class_descriptor (dev, interface->desc.bInterfaceNumber, -HID_DT_REPORT , rdesc, hid->rsize); +HID_DT_REPORT , rdesc, hid->dev_rsize);if (status <0 ) {dbg_hid ("reading report descriptor failed (post_reset)\n" );kfree (rdesc);return 1 ; } - status =memcmp (rdesc, hid->rdesc, hid->rsize); + status =memcmp (rdesc, hid->dev_rdesc, hid->dev_rsize);kfree (rdesc);if (status !=0 ) {dbg_hid ("report descriptor changed\n" );
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-mpath.c +7 -4
@@ -1520,6 +1520,7 @@ static int multipath_ioctl(struct dm_target *ti, unsigned int cmd, unsigned long arg) {struct multipath *m = ti->private; +struct pgpath *pgpath;struct block_device *bdev;fmode_t mode;unsigned long flags;
@@ -1535,12 +1536,14 @@ again:if (!m->current_pgpath)__choose_pgpath (m,0 ); -if (m->current_pgpath) { - bdev = m->current_pgpath->path.dev->bdev; - mode = m->current_pgpath->path.dev->mode; + pgpath = m->current_pgpath; + +if (pgpath) { + bdev = pgpath->path.dev->bdev; + mode = pgpath->path.dev->mode; } -if (m->queue_io) +if ((pgpath && m->queue_io) || (!pgpath && m->queue_if_no_path)) r = -EAGAIN ;else if (!bdev) r = -EIO ;
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/attach.c +1 -1
@@ -975,7 +975,7 @@ static int scan_peb(struct ubi_device *ubi, struct ubi_attach_info *ai,return err; goto adjust_mean_ec;case UBI_IO_FF : -if (ec_err) +if (ec_err || bitflips) err =add_to_list (ai, pnum,UBI_UNKNOWN ,UBI_UNKNOWN , ec,1 , &ai->erase);else
drivers/mtd/ubi/build.c +5 -0
@@ -759,6 +759,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
@@ -124,8 +124,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
@@ -3894,6 +3894,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
@@ -590,8 +590,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
@@ -3266,7 +3266,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
@@ -641,7 +641,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
@@ -1132,7 +1132,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 ;
@@ -1377,7 +1377,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 */
@@ -2122,6 +2121,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
@@ -883,7 +883,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
@@ -2311,7 +2311,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
@@ -1127,6 +1127,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
@@ -1728,7 +1728,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
@@ -1164,6 +1164,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
@@ -3232,8 +3234,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
@@ -1603,13 +1603,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
@@ -667,19 +667,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
@@ -1049,13 +1049,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/printer.c +65 -63
236 lines not on this page · raw message
drivers/usb/gadget/tcm_usb_gadget.c +20 -13
@@ -1983,7 +1983,6 @@ static struct usb_interface_descriptor bot_intf_desc = { .bInterfaceClass = USB_CLASS_MASS_STORAGE, .bInterfaceSubClass = USB_SC_SCSI, .bInterfaceProtocol = USB_PR_BULK, - .iInterface = USB_G_STR_INT_UAS, };static struct usb_interface_descriptor uasp_intf_desc = {
@@ -1994,7 +1993,6 @@ static struct usb_interface_descriptor uasp_intf_desc = { .bInterfaceClass = USB_CLASS_MASS_STORAGE, .bInterfaceSubClass = USB_SC_SCSI, .bInterfaceProtocol = USB_PR_UAS, - .iInterface = USB_G_STR_INT_BBB, };static struct usb_endpoint_descriptor uasp_bi_desc = {
@@ -2215,20 +2213,16 @@ static struct usb_device_descriptor usbg_device_desc = { .bDeviceClass = USB_CLASS_PER_INTERFACE, .idVendor = cpu_to_le16(UAS_VENDOR_ID), .idProduct = cpu_to_le16(UAS_PRODUCT_ID), - .iManufacturer = USB_G_STR_MANUFACTOR, - .iProduct = USB_G_STR_PRODUCT, - .iSerialNumber = USB_G_STR_SERIAL, - .bNumConfigurations = 1, };static struct usb_string usbg_us_strings[] = { - {USB_G_STR_MANUFACTOR ,"Target Manufactor" }, - {USB_G_STR_PRODUCT ,"Target Product" }, - {USB_G_STR_SERIAL ,"000000000001" }, - {USB_G_STR_CONFIG ,"default config" }, - {USB_G_STR_INT_UAS ,"USB Attached SCSI" }, - {USB_G_STR_INT_BBB ,"Bulk Only Transport" }, + [USB_G_STR_MANUFACTOR ].s ="Target Manufactor" , + [USB_G_STR_PRODUCT ].s ="Target Product" , + [USB_G_STR_SERIAL ].s ="000000000001" , + [USB_G_STR_CONFIG ].s ="default config" , + [USB_G_STR_INT_UAS ].s ="USB Attached SCSI" , + [USB_G_STR_INT_BBB ].s ="Bulk Only Transport" , { }, };
@@ -2250,7 +2244,6 @@ static int guas_unbind(struct usb_composite_dev *cdev)static struct usb_configuration usbg_config_driver = { .label ="Linux Target" , .bConfigurationValue =1 , - .iConfiguration =USB_G_STR_CONFIG , .bmAttributes =USB_CONFIG_ATT_SELFPOWER , };
@@ -2423,6 +2416,9 @@ static int usbg_cfg_bind(struct usb_configuration *c) fu->function.disable = usbg_disable; fu->tpg = the_only_tpg_I_currently_have; + bot_intf_desc.iInterface = usbg_us_strings[USB_G_STR_INT_BBB ].id; + uasp_intf_desc.iInterface = usbg_us_strings[USB_G_STR_INT_UAS ].id; + ret =usb_add_function (c, &fu->function);if (ret) goto err;
@@ -2437,6 +2433,17 @@ static int usb_target_bind(struct usb_composite_dev *cdev) {int ret; + ret =usb_string_ids_tab (cdev, usbg_us_strings); +if (ret) +return ret; + + usbg_device_desc.iManufacturer = + usbg_us_strings[USB_G_STR_MANUFACTOR ].id; + usbg_device_desc.iProduct = usbg_us_strings[USB_G_STR_PRODUCT ].id; + usbg_device_desc.iSerialNumber = usbg_us_strings[USB_G_STR_SERIAL ].id; + usbg_config_driver.iConfiguration = + usbg_us_strings[USB_G_STR_CONFIG ].id; + ret =usb_add_config (cdev, &usbg_config_driver, usbg_cfg_bind);return 0 ;
drivers/usb/gadget/tcm_usb_gadget.h +8 -6
@@ -16,12 +16,14 @@#define UASP_SS_EP_COMP_LOG_STREAMS 4#define UASP_SS_EP_COMP_NUM_STREAMS (1 << UASP_SS_EP_COMP_LOG_STREAMS) -#define USB_G_STR_MANUFACTOR 1 -#define USB_G_STR_PRODUCT 2 -#define USB_G_STR_SERIAL 3 -#define USB_G_STR_CONFIG 4 -#define USB_G_STR_INT_UAS 5 -#define USB_G_STR_INT_BBB 6 +enum { +USB_G_STR_MANUFACTOR , +USB_G_STR_PRODUCT , +USB_G_STR_SERIAL , +USB_G_STR_CONFIG , +USB_G_STR_INT_UAS , +USB_G_STR_INT_BBB , +};#define USB_G_ALT_INT_BBB 0#define USB_G_ALT_INT_UAS 1
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;
@@ -1795,6 +1796,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);
@@ -2340,6 +2346,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
@@ -103,6 +103,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
@@ -1256,6 +1256,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;
@@ -1421,6 +1431,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;
@@ -1496,6 +1511,7 @@ struct xhci_hcd {#define XHCI_INTEL_HOST (1 << 12)#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 */
@@ -1702,6 +1718,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);
@@ -1792,6 +1810,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);
drivers/usb/serial/usb-serial.c +2 -1
@@ -1426,9 +1426,10 @@ int usb_serial_register_drivers(struct usb_serial_driver *const serial_drivers[]/* we only set the reset_resume field if the serial_driver has one */ for (sd = serial_drivers; *sd; ++sd) { -if ((*sd)->reset_resume) +if ((*sd)->reset_resume) { udriver->reset_resume = usb_serial_reset_resume;break ; + } } rc =usb_register (udriver);
drivers/xen/xen-pciback/pci_stub.c +1 -0
@@ -362,6 +362,7 @@ static int __devinit pcistub_init_device(struct pci_dev *dev)else {dev_dbg (&dev->dev,"reseting (FLR, D3, etc) the device\n" );__pci_reset_function_locked (dev); +pci_restore_state (dev); }/* Now disable the device (this also ensures some private device * data is setup before we export)
fs/binfmt_elf.c +4 -15
@@ -1696,30 +1696,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
@@ -1132,6 +1132,8 @@ positive:return 1 ; rename_retry: +if (locked) + goto again; locked =1 ;write_seqlock (&rename_lock); goto again;
@@ -1234,6 +1236,8 @@ out: rename_retry:if (found)return found; +if (locked) + goto again; locked =1 ;write_seqlock (&rename_lock); goto again;
@@ -3031,6 +3035,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
@@ -143,7 +143,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