Linux 3.0.45
I'm announcing the release of the 3.0.45 kernel.
All users of the 3.0 kernel series must upgrade.
The updated 3.0.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-3.0.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/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.c | 56 ++++++++++++++++--------- drivers/mtd/ubi/build.c | 5 ++ drivers/net/can/mscan/mpc5xxx_can.c | 4 - drivers/net/wireless/b43legacy/main.c | 2 drivers/pci/setup-bus.c | 26 +++++++++++ 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/speakup/speakup_soft.c | 13 +---- drivers/tty/n_gsm.c | 15 ++++-- drivers/tty/n_tty.c | 3 - drivers/tty/serial/8250_pci.c | 9 +++- drivers/tty/serial/amba-pl011.c | 15 ++++++ drivers/usb/host/xhci-pci.c | 1 drivers/usb/host/xhci-ring.c | 4 + drivers/usb/host/xhci.c | 2 drivers/usb/host/xhci.h | 1 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 37 files changed, 193 insertions(+), 105 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 (1):
staging: speakup_soft: Fix reading of init string
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
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
Flavio Leitner (1):
serial: set correct baud_base for EXSYS EX-41092 Dual 16950
Greg Kroah-Hartman (1):
Linux 3.0.45
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
Khalid Aziz (1):
firmware: Add missing attributes to EFI variable attribute print out from sysfs
Larry Finger (1):
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
Patrick McHardy (1):
IPoIB: Fix use-after-free of multicast object
Russ Gorby (2):
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.
Stanislav Kozina (1):
Remove BUG_ON from n_tty_read()
Stephen M. Cameron (1):
SCSI: hpsa: Use LUN reset instead of target reset
Wei Yongjun (1):
can: mscan-mpc5xxx: fix return value check in mpc512x_can_get_clock()
Yinghai Lu (1):
PCI: honor child buses add_size in hot plug configuration
Makefile +1 -1
@@ -1,6 +1,6 @@ VERSION = 3 PATCHLEVEL = 0 -SUBLEVEL = 44 +SUBLEVEL = 45 EXTRAVERSION = NAME = Sneaky Weasel
arch/x86/kernel/alternative.c +1 -1
@@ -161,7 +161,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
@@ -66,7 +66,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
@@ -400,12 +400,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
@@ -189,7 +189,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);
@@ -197,10 +199,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)) {
@@ -586,14 +595,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
@@ -620,9 +620,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 ); } }
@@ -1669,6 +1669,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.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/b43legacy/main.c +2 -0
@@ -3843,6 +3843,8 @@ static void b43legacy_remove(struct ssb_device *dev)cancel_work_sync (&wldev->restart_work);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/pci/setup-bus.c +26 -0
@@ -543,6 +543,20 @@ static resource_size_t calculate_memsize(resource_size_t size,return size; } +static resource_size_t get_res_add_size (struct resource_list_x *add_head, +struct resource *res) +{ +struct resource_list_x *list; + +/* check if it is in add_head list */ +for (list = add_head->next; list && list->res != res; + list = list->next); +if (list) +return list->add_size; + +return 0 ; +} +/** * pbus_size_io() - size the io window of a given bus *
@@ -562,6 +576,7 @@ static void pbus_size_io(struct pci_bus *bus, resource_size_t min_size,struct pci_dev *dev;struct resource *b_res =find_free_bus_resource (bus,IORESOURCE_IO );unsigned long size =0 , size0 =0 , size1 =0 ; +resource_size_t children_add_size =0 ;if (!b_res)return ;
@@ -582,10 +597,15 @@ static void pbus_size_io(struct pci_bus *bus, resource_size_t min_size, size += r_size; else size1 += r_size; + +if (add_head) + children_add_size +=get_res_add_size (add_head, r); } } size0 =calculate_iosize (size, min_size, size1,resource_size (b_res),4096 ); +if (children_add_size > add_size) + add_size = children_add_size; size1 = (!add_head || (add_head && !add_size)) ? size0 :calculate_iosize (size, min_size+add_size, size1,resource_size (b_res),4096 );
@@ -627,6 +647,7 @@ static int pbus_size_mem(struct pci_bus *bus, unsigned long mask,int order, max_order;struct resource *b_res =find_free_bus_resource (bus, type);unsigned int mem64_mask =0 ; +resource_size_t children_add_size =0 ;if (!b_res)return 0 ;
@@ -668,6 +689,9 @@ static int pbus_size_mem(struct pci_bus *bus, unsigned long mask,if (order > max_order) max_order = order; mem64_mask &= r->flags &IORESOURCE_MEM_64 ; + +if (add_head) + children_add_size +=get_res_add_size (add_head, r); } } align =0 ;
@@ -684,6 +708,8 @@ static int pbus_size_mem(struct pci_bus *bus, unsigned long mask, align += aligns[order]; } size0 =calculate_memsize (size, min_size,0 ,resource_size (b_res), min_align); +if (children_add_size > add_size) + add_size = children_add_size; size1 = (!add_head || (add_head && !add_size)) ? size0 :calculate_memsize (size, min_size+add_size,0 ,resource_size (b_res), min_align);
drivers/scsi/device_handler/scsi_dh_alua.c +1 -2
@@ -619,8 +619,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
@@ -2893,7 +2893,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
@@ -1547,6 +1547,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
@@ -458,7 +458,6 @@ static int __devinit isci_pci_probe(struct pci_dev *pdev, const struct pci_devicif (sci_oem_parameters_validate (&orom->ctrl[i])) {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
@@ -988,33 +988,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
@@ -913,7 +913,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);printk ("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/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 +11 -4
@@ -842,7 +842,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 ;
@@ -866,8 +866,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) */
@@ -1152,6 +1155,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 ];
@@ -1177,7 +1182,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 */
@@ -2269,12 +2276,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); }/**
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_pci.c +7 -2
@@ -1011,6 +1011,8 @@ static int pci_eg20t_init(struct pci_dev *dev)#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
@@ -3009,8 +3011,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
@@ -1620,13 +1620,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/usb/host/xhci-pci.c +1 -0
@@ -149,6 +149,7 @@ static int xhci_pci_setup(struct usb_hcd *hcd)* 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 +3 -1
@@ -3365,7 +3365,9 @@ static int xhci_queue_isoc_tx(struct xhci_hcd *xhci, gfp_t mem_flags, }else { td->last_trb = ep_ring->enqueue; field |=TRB_IOC ; -if (xhci->hci_version ==0x100 ) { +if (xhci->hci_version ==0x100 && + !(xhci->quirks & +XHCI_AVOID_BEI )) {/* Set BEI bit except for the last td */ if (i < num_tds -1 ) field |=TRB_BEI ;
drivers/usb/host/xhci.c +1 -1
@@ -720,7 +720,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 ;
drivers/usb/host/xhci.h +1 -0
@@ -1317,6 +1317,7 @@ struct xhci_hcd {#define XHCI_AMD_0x96_HOST (1 << 9)#define XHCI_TRUST_TX_LENGTH (1 << 10)#define XHCI_SPURIOUS_REBOOT (1 << 13) +#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 */
drivers/usb/serial/ftdi_sio.c +2 -0
@@ -582,6 +582,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
@@ -1669,30 +1669,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
@@ -1101,6 +1101,8 @@ positive:return 1 ; rename_retry: +if (locked) + goto again; locked =1 ;write_seqlock (&rename_lock); goto again;
@@ -1203,6 +1205,8 @@ out: rename_retry:if (found)return found; +if (locked) + goto again; locked =1 ;write_seqlock (&rename_lock); goto again;
@@ -2990,6 +2994,8 @@ resume:return ; rename_retry: +if (locked) + goto again; locked =1 ;write_seqlock (&rename_lock); goto again;
include/linux/pci_ids.h +0 -1
@@ -1818,7 +1818,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