Merge tag 'v3.10.86' into update
This is the 3.10.86 stable release
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
VERSION = 3
|
||||
PATCHLEVEL = 10
|
||||
SUBLEVEL = 85
|
||||
SUBLEVEL = 86
|
||||
EXTRAVERSION =
|
||||
NAME = TOSSUG Baby Fish
|
||||
|
||||
|
||||
@@ -83,7 +83,7 @@ struct callee_regs {
|
||||
long r13;
|
||||
};
|
||||
|
||||
#define instruction_pointer(regs) ((regs)->ret)
|
||||
#define instruction_pointer(regs) (unsigned long)((regs)->ret)
|
||||
#define profile_pc(regs) instruction_pointer(regs)
|
||||
|
||||
/* return 1 if user mode or 0 if kernel mode */
|
||||
|
||||
@@ -276,6 +276,8 @@ ENTRY(_sclp_print_early)
|
||||
jno .Lesa2
|
||||
ahi %r15,-80
|
||||
stmh %r6,%r15,96(%r15) # store upper register halves
|
||||
basr %r13,0
|
||||
lmh %r0,%r15,.Lzeroes-.(%r13) # clear upper register halves
|
||||
.Lesa2:
|
||||
#endif
|
||||
lr %r10,%r2 # save string pointer
|
||||
@@ -299,6 +301,8 @@ ENTRY(_sclp_print_early)
|
||||
#endif
|
||||
lm %r6,%r15,120(%r15) # restore registers
|
||||
br %r14
|
||||
.Lzeroes:
|
||||
.fill 64,4,0
|
||||
|
||||
.LwritedataS4:
|
||||
.long 0x00760005 # SCLP command for write data
|
||||
|
||||
@@ -1064,7 +1064,7 @@ static void __init load_hv_initrd(void)
|
||||
|
||||
void __init free_initrd_mem(unsigned long begin, unsigned long end)
|
||||
{
|
||||
free_bootmem(__pa(begin), end - begin);
|
||||
free_bootmem_late(__pa(begin), end - begin);
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
@@ -54,7 +54,7 @@ ENTRY(efi_pe_entry)
|
||||
call reloc
|
||||
reloc:
|
||||
popl %ecx
|
||||
subl reloc, %ecx
|
||||
subl $reloc, %ecx
|
||||
movl %ecx, BP_code32_start(%eax)
|
||||
|
||||
sub $0x4, %esp
|
||||
|
||||
+5
-1
@@ -720,8 +720,12 @@ int blkg_conf_prep(struct blkcg *blkcg, const struct blkcg_policy *pol,
|
||||
return -EINVAL;
|
||||
|
||||
disk = get_gendisk(MKDEV(major, minor), &part);
|
||||
if (!disk || part)
|
||||
if (!disk)
|
||||
return -EINVAL;
|
||||
if (part) {
|
||||
put_disk(disk);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
rcu_read_lock();
|
||||
spin_lock_irq(disk->queue->queue_lock);
|
||||
|
||||
@@ -460,6 +460,13 @@ static void sata_pmp_quirks(struct ata_port *ap)
|
||||
ATA_LFLAG_NO_SRST |
|
||||
ATA_LFLAG_ASSUME_ATA;
|
||||
}
|
||||
} else if (vendor == 0x11ab && devid == 0x4140) {
|
||||
/* Marvell 4140 quirks */
|
||||
ata_for_each_link(link, ap, EDGE) {
|
||||
/* port 4 is for SEMB device and it doesn't like SRST */
|
||||
if (link->pmp == 4)
|
||||
link->flags |= ATA_LFLAG_DISABLED;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -626,6 +626,9 @@ static int dmc_tsc10_init(struct usbtouch_usb *usbtouch)
|
||||
goto err_out;
|
||||
}
|
||||
|
||||
/* TSC-25 data sheet specifies a delay after the RESET command */
|
||||
msleep(150);
|
||||
|
||||
/* set coordinate output rate */
|
||||
buf[0] = buf[1] = 0xFF;
|
||||
ret = usb_control_msg(dev, usb_rcvctrlpipe (dev, 0),
|
||||
|
||||
+1
-1
@@ -327,7 +327,7 @@ static void raid1_end_read_request(struct bio *bio, int error)
|
||||
spin_lock_irqsave(&conf->device_lock, flags);
|
||||
if (r1_bio->mddev->degraded == conf->raid_disks ||
|
||||
(r1_bio->mddev->degraded == conf->raid_disks-1 &&
|
||||
!test_bit(Faulty, &conf->mirrors[mirror].rdev->flags)))
|
||||
test_bit(In_sync, &conf->mirrors[mirror].rdev->flags)))
|
||||
uptodate = 1;
|
||||
spin_unlock_irqrestore(&conf->device_lock, flags);
|
||||
}
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
#define ESDHC_DMA_SYSCTL 0x40c
|
||||
#define ESDHC_DMA_SNOOP 0x00000040
|
||||
|
||||
#define ESDHC_HOST_CONTROL_RES 0x05
|
||||
#define ESDHC_HOST_CONTROL_RES 0x01
|
||||
|
||||
static inline void esdhc_set_clock(struct sdhci_host *host, unsigned int clock)
|
||||
{
|
||||
|
||||
@@ -255,6 +255,7 @@ static int sdhci_pxav3_probe(struct platform_device *pdev)
|
||||
mmc_of_parse(host->mmc);
|
||||
sdhci_get_of_property(pdev);
|
||||
pdata = pxav3_get_mmc_pdata(dev);
|
||||
pdev->dev.platform_data = pdata;
|
||||
} else if (pdata) {
|
||||
/* on-chip device */
|
||||
if (pdata->flags & PXA_FLAG_CARD_PERMANENT)
|
||||
|
||||
+1
-1
@@ -1262,9 +1262,9 @@ static int st_open(struct inode *inode, struct file *filp)
|
||||
spin_lock(&st_use_lock);
|
||||
STp->in_use = 0;
|
||||
spin_unlock(&st_use_lock);
|
||||
scsi_tape_put(STp);
|
||||
if (resumed)
|
||||
scsi_autopm_put_device(STp->device);
|
||||
scsi_tape_put(STp);
|
||||
return retval;
|
||||
|
||||
}
|
||||
|
||||
@@ -4416,7 +4416,18 @@ static void iscsit_logout_post_handler_closesession(
|
||||
struct iscsi_conn *conn)
|
||||
{
|
||||
struct iscsi_session *sess = conn->sess;
|
||||
int sleep = cmpxchg(&conn->tx_thread_active, true, false);
|
||||
int sleep = 1;
|
||||
/*
|
||||
* Traditional iscsi/tcp will invoke this logic from TX thread
|
||||
* context during session logout, so clear tx_thread_active and
|
||||
* sleep if iscsit_close_connection() has not already occured.
|
||||
*
|
||||
* Since iser-target invokes this logic from it's own workqueue,
|
||||
* always sleep waiting for RX/TX thread shutdown to complete
|
||||
* within iscsit_close_connection().
|
||||
*/
|
||||
if (conn->conn_transport->transport_type == ISCSI_TCP)
|
||||
sleep = cmpxchg(&conn->tx_thread_active, true, false);
|
||||
|
||||
atomic_set(&conn->conn_logout_remove, 0);
|
||||
complete(&conn->conn_logout_comp);
|
||||
@@ -4430,7 +4441,10 @@ static void iscsit_logout_post_handler_closesession(
|
||||
static void iscsit_logout_post_handler_samecid(
|
||||
struct iscsi_conn *conn)
|
||||
{
|
||||
int sleep = cmpxchg(&conn->tx_thread_active, true, false);
|
||||
int sleep = 1;
|
||||
|
||||
if (conn->conn_transport->transport_type == ISCSI_TCP)
|
||||
sleep = cmpxchg(&conn->tx_thread_active, true, false);
|
||||
|
||||
atomic_set(&conn->conn_logout_remove, 0);
|
||||
complete(&conn->conn_logout_comp);
|
||||
@@ -4649,6 +4663,7 @@ int iscsit_release_sessions_for_tpg(struct iscsi_portal_group *tpg, int force)
|
||||
struct iscsi_session *sess;
|
||||
struct se_portal_group *se_tpg = &tpg->tpg_se_tpg;
|
||||
struct se_session *se_sess, *se_sess_tmp;
|
||||
LIST_HEAD(free_list);
|
||||
int session_count = 0;
|
||||
|
||||
spin_lock_bh(&se_tpg->session_lock);
|
||||
@@ -4670,15 +4685,18 @@ int iscsit_release_sessions_for_tpg(struct iscsi_portal_group *tpg, int force)
|
||||
}
|
||||
atomic_set(&sess->session_reinstatement, 1);
|
||||
spin_unlock(&sess->conn_lock);
|
||||
spin_unlock_bh(&se_tpg->session_lock);
|
||||
|
||||
iscsit_free_session(sess);
|
||||
spin_lock_bh(&se_tpg->session_lock);
|
||||
|
||||
session_count++;
|
||||
list_move_tail(&se_sess->sess_list, &free_list);
|
||||
}
|
||||
spin_unlock_bh(&se_tpg->session_lock);
|
||||
|
||||
list_for_each_entry_safe(se_sess, se_sess_tmp, &free_list, sess_list) {
|
||||
sess = (struct iscsi_session *)se_sess->fabric_sess_ptr;
|
||||
|
||||
iscsit_free_session(sess);
|
||||
session_count++;
|
||||
}
|
||||
|
||||
pr_debug("Released %d iSCSI Session(s) from Target Portal"
|
||||
" Group: %hu\n", session_count, tpg->tpgt);
|
||||
return 0;
|
||||
|
||||
@@ -468,10 +468,13 @@ static void xhci_hub_report_link_state(struct xhci_hcd *xhci,
|
||||
u32 pls = status_reg & PORT_PLS_MASK;
|
||||
|
||||
/* resume state is a xHCI internal state.
|
||||
* Do not report it to usb core.
|
||||
* Do not report it to usb core, instead, pretend to be U3,
|
||||
* thus usb core knows it's not ready for transfer
|
||||
*/
|
||||
if (pls == XDEV_RESUME)
|
||||
if (pls == XDEV_RESUME) {
|
||||
*status |= USB_SS_PORT_LS_U3;
|
||||
return;
|
||||
}
|
||||
|
||||
/* When the CAS bit is set then warm reset
|
||||
* should be performed on port
|
||||
@@ -1045,10 +1048,10 @@ int xhci_bus_suspend(struct usb_hcd *hcd)
|
||||
spin_lock_irqsave(&xhci->lock, flags);
|
||||
|
||||
if (hcd->self.root_hub->do_remote_wakeup) {
|
||||
if (bus_state->resuming_ports) {
|
||||
if (bus_state->resuming_ports || /* USB2 */
|
||||
bus_state->port_remote_wakeup) { /* USB3 */
|
||||
spin_unlock_irqrestore(&xhci->lock, flags);
|
||||
xhci_dbg(xhci, "suspend failed because "
|
||||
"a port is resuming\n");
|
||||
xhci_dbg(xhci, "suspend failed because a port is resuming\n");
|
||||
return -EBUSY;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1679,6 +1679,9 @@ static void handle_port_status(struct xhci_hcd *xhci,
|
||||
usb_hcd_resume_root_hub(hcd);
|
||||
}
|
||||
|
||||
if (hcd->speed == HCD_USB3 && (temp & PORT_PLS_MASK) == XDEV_INACTIVE)
|
||||
bus_state->port_remote_wakeup &= ~(1 << faked_port_index);
|
||||
|
||||
if ((temp & PORT_PLC) && (temp & PORT_PLS_MASK) == XDEV_RESUME) {
|
||||
xhci_dbg(xhci, "port resume event for port %d\n", port_id);
|
||||
|
||||
|
||||
@@ -3492,6 +3492,9 @@ int xhci_discover_or_reset_device(struct usb_hcd *hcd, struct usb_device *udev)
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (virt_dev->tt_info)
|
||||
old_active_eps = virt_dev->tt_info->active_eps;
|
||||
|
||||
if (virt_dev->udev != udev) {
|
||||
/* If the virt_dev and the udev does not match, this virt_dev
|
||||
* may belong to another udev.
|
||||
|
||||
@@ -281,6 +281,7 @@ struct xhci_op_regs {
|
||||
#define XDEV_U0 (0x0 << 5)
|
||||
#define XDEV_U2 (0x2 << 5)
|
||||
#define XDEV_U3 (0x3 << 5)
|
||||
#define XDEV_INACTIVE (0x6 << 5)
|
||||
#define XDEV_RESUME (0xf << 5)
|
||||
/* true: port has power (see HCC_PPC) */
|
||||
#define PORT_POWER (1 << 9)
|
||||
|
||||
@@ -2049,6 +2049,18 @@ UNUSUAL_DEV( 0x1908, 0x3335, 0x0200, 0x0200,
|
||||
USB_SC_DEVICE, USB_PR_DEVICE, NULL,
|
||||
US_FL_NO_READ_DISC_INFO ),
|
||||
|
||||
/* Reported by Oliver Neukum <oneukum@suse.com>
|
||||
* This device morphes spontaneously into another device if the access
|
||||
* pattern of Windows isn't followed. Thus writable media would be dirty
|
||||
* if the initial instance is used. So the device is limited to its
|
||||
* virtual CD.
|
||||
* And yes, the concept that BCD goes up to 9 is not heeded */
|
||||
UNUSUAL_DEV( 0x19d2, 0x1225, 0x0000, 0xffff,
|
||||
"ZTE,Incorporated",
|
||||
"ZTE WCDMA Technologies MSM",
|
||||
USB_SC_DEVICE, USB_PR_DEVICE, NULL,
|
||||
US_FL_SINGLE_LUN ),
|
||||
|
||||
/* Reported by Sven Geggus <sven-usbst@geggus.net>
|
||||
* This encrypted pen drive returns bogus data for the initial READ(10).
|
||||
*/
|
||||
|
||||
@@ -855,6 +855,7 @@ long vhost_dev_ioctl(struct vhost_dev *d, unsigned int ioctl, void __user *argp)
|
||||
}
|
||||
if (eventfp != d->log_file) {
|
||||
filep = d->log_file;
|
||||
d->log_file = eventfp;
|
||||
ctx = d->log_ctx;
|
||||
d->log_ctx = eventfp ?
|
||||
eventfd_ctx_fileget(eventfp) : NULL;
|
||||
|
||||
@@ -520,6 +520,9 @@ repeat:
|
||||
return;
|
||||
}
|
||||
|
||||
if (unlikely(dentry->d_flags & DCACHE_DISCONNECTED))
|
||||
goto kill_it;
|
||||
|
||||
if (dentry->d_flags & DCACHE_OP_DELETE) {
|
||||
if (dentry->d_op->d_delete(dentry))
|
||||
goto kill_it;
|
||||
|
||||
+13
-5
@@ -75,13 +75,21 @@ void check_irq_resend(struct irq_desc *desc, unsigned int irq)
|
||||
!desc->irq_data.chip->irq_retrigger(&desc->irq_data)) {
|
||||
#ifdef CONFIG_HARDIRQS_SW_RESEND
|
||||
/*
|
||||
* If the interrupt has a parent irq and runs
|
||||
* in the thread context of the parent irq,
|
||||
* retrigger the parent.
|
||||
* If the interrupt is running in the thread
|
||||
* context of the parent irq we need to be
|
||||
* careful, because we cannot trigger it
|
||||
* directly.
|
||||
*/
|
||||
if (desc->parent_irq &&
|
||||
irq_settings_is_nested_thread(desc))
|
||||
if (irq_settings_is_nested_thread(desc)) {
|
||||
/*
|
||||
* If the parent_irq is valid, we
|
||||
* retrigger the parent, otherwise we
|
||||
* do nothing.
|
||||
*/
|
||||
if (!desc->parent_irq)
|
||||
return;
|
||||
irq = desc->parent_irq;
|
||||
}
|
||||
/* Set it pending and activate the softirq: */
|
||||
set_bit(irq, irqs_resend);
|
||||
tasklet_schedule(&resend_tasklet);
|
||||
|
||||
+5
-3
@@ -3538,6 +3538,9 @@ static int do_linear_fault(struct mm_struct *mm, struct vm_area_struct *vma,
|
||||
return VM_FAULT_SIGBUS;
|
||||
|
||||
pte_unmap(page_table);
|
||||
/* The VMA was not fully populated on mmap() or missing VM_DONTEXPAND */
|
||||
if (!vma->vm_ops->fault)
|
||||
return VM_FAULT_SIGBUS;
|
||||
return __do_fault(mm, vma, address, pmd, pgoff, flags, orig_pte);
|
||||
}
|
||||
|
||||
@@ -3749,10 +3752,9 @@ int handle_pte_fault(struct mm_struct *mm,
|
||||
entry = *pte;
|
||||
if (!pte_present(entry)) {
|
||||
if (pte_none(entry)) {
|
||||
if (vma->vm_ops) {
|
||||
if (vma->vm_ops)
|
||||
return do_linear_fault(mm, vma, address,
|
||||
pte, pmd, flags, entry);
|
||||
}
|
||||
pte, pmd, flags, entry);
|
||||
return do_anonymous_page(mm, vma, address,
|
||||
pte, pmd, flags);
|
||||
}
|
||||
|
||||
@@ -697,6 +697,7 @@ void ieee80211_debugfs_remove_netdev(struct ieee80211_sub_if_data *sdata)
|
||||
|
||||
debugfs_remove_recursive(sdata->vif.debugfs_dir);
|
||||
sdata->vif.debugfs_dir = NULL;
|
||||
sdata->debugfs.subdir_stations = NULL;
|
||||
}
|
||||
|
||||
void ieee80211_debugfs_rename_netdev(struct ieee80211_sub_if_data *sdata)
|
||||
|
||||
+3
-1
@@ -759,8 +759,10 @@ void *rds_ib_get_mr(struct scatterlist *sg, unsigned long nents,
|
||||
}
|
||||
|
||||
ibmr = rds_ib_alloc_fmr(rds_ibdev);
|
||||
if (IS_ERR(ibmr))
|
||||
if (IS_ERR(ibmr)) {
|
||||
rds_ib_dev_put(rds_ibdev);
|
||||
return ibmr;
|
||||
}
|
||||
|
||||
ret = rds_ib_map_fmr(rds_ibdev, ibmr, sg, nents);
|
||||
if (ret == 0)
|
||||
|
||||
@@ -2204,7 +2204,7 @@ static const struct snd_pci_quirk alc882_fixup_tbl[] = {
|
||||
SND_PCI_QUIRK(0x106b, 0x4300, "iMac 9,1", ALC889_FIXUP_IMAC91_VREF),
|
||||
SND_PCI_QUIRK(0x106b, 0x4600, "MacbookPro 5,2", ALC889_FIXUP_IMAC91_VREF),
|
||||
SND_PCI_QUIRK(0x106b, 0x4900, "iMac 9,1 Aluminum", ALC889_FIXUP_IMAC91_VREF),
|
||||
SND_PCI_QUIRK(0x106b, 0x4a00, "Macbook 5,2", ALC889_FIXUP_IMAC91_VREF),
|
||||
SND_PCI_QUIRK(0x106b, 0x4a00, "Macbook 5,2", ALC889_FIXUP_MBA11_VREF),
|
||||
|
||||
SND_PCI_QUIRK(0x1071, 0x8258, "Evesham Voyaeger", ALC882_FIXUP_EAPD),
|
||||
SND_PCI_QUIRK(0x1462, 0x7350, "MSI-7350", ALC889_FIXUP_CD),
|
||||
|
||||
@@ -330,6 +330,20 @@ static const struct usbmix_name_map scms_usb3318_map[] = {
|
||||
{ 0 }
|
||||
};
|
||||
|
||||
/* Bose companion 5, the dB conversion factor is 16 instead of 256 */
|
||||
static struct usbmix_dB_map bose_companion5_dB = {-5006, -6};
|
||||
static struct usbmix_name_map bose_companion5_map[] = {
|
||||
{ 3, NULL, .dB = &bose_companion5_dB },
|
||||
{ 0 } /* terminator */
|
||||
};
|
||||
|
||||
/* Dragonfly DAC 1.2, the dB conversion factor is 1 instead of 256 */
|
||||
static struct usbmix_dB_map dragonfly_1_2_dB = {0, 5000};
|
||||
static struct usbmix_name_map dragonfly_1_2_map[] = {
|
||||
{ 7, NULL, .dB = &dragonfly_1_2_dB },
|
||||
{ 0 } /* terminator */
|
||||
};
|
||||
|
||||
/*
|
||||
* Control map entries
|
||||
*/
|
||||
@@ -432,6 +446,16 @@ static struct usbmix_ctl_map usbmix_ctl_maps[] = {
|
||||
.id = USB_ID(0x25c4, 0x0003),
|
||||
.map = scms_usb3318_map,
|
||||
},
|
||||
{
|
||||
/* Bose Companion 5 */
|
||||
.id = USB_ID(0x05a7, 0x1020),
|
||||
.map = bose_companion5_map,
|
||||
},
|
||||
{
|
||||
/* Dragonfly DAC 1.2 */
|
||||
.id = USB_ID(0x21b4, 0x0081),
|
||||
.map = dragonfly_1_2_map,
|
||||
},
|
||||
{ 0 } /* terminator */
|
||||
};
|
||||
|
||||
|
||||
@@ -2773,6 +2773,74 @@ YAMAHA_DEVICE(0x7010, "UB99"),
|
||||
}
|
||||
},
|
||||
|
||||
/* Steinberg devices */
|
||||
{
|
||||
/* Steinberg MI2 */
|
||||
USB_DEVICE_VENDOR_SPEC(0x0a4e, 0x2040),
|
||||
.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
|
||||
.ifnum = QUIRK_ANY_INTERFACE,
|
||||
.type = QUIRK_COMPOSITE,
|
||||
.data = & (const struct snd_usb_audio_quirk[]) {
|
||||
{
|
||||
.ifnum = 0,
|
||||
.type = QUIRK_AUDIO_STANDARD_INTERFACE
|
||||
},
|
||||
{
|
||||
.ifnum = 1,
|
||||
.type = QUIRK_AUDIO_STANDARD_INTERFACE
|
||||
},
|
||||
{
|
||||
.ifnum = 2,
|
||||
.type = QUIRK_AUDIO_STANDARD_INTERFACE
|
||||
},
|
||||
{
|
||||
.ifnum = 3,
|
||||
.type = QUIRK_MIDI_FIXED_ENDPOINT,
|
||||
.data = &(const struct snd_usb_midi_endpoint_info) {
|
||||
.out_cables = 0x0001,
|
||||
.in_cables = 0x0001
|
||||
}
|
||||
},
|
||||
{
|
||||
.ifnum = -1
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
/* Steinberg MI4 */
|
||||
USB_DEVICE_VENDOR_SPEC(0x0a4e, 0x4040),
|
||||
.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
|
||||
.ifnum = QUIRK_ANY_INTERFACE,
|
||||
.type = QUIRK_COMPOSITE,
|
||||
.data = & (const struct snd_usb_audio_quirk[]) {
|
||||
{
|
||||
.ifnum = 0,
|
||||
.type = QUIRK_AUDIO_STANDARD_INTERFACE
|
||||
},
|
||||
{
|
||||
.ifnum = 1,
|
||||
.type = QUIRK_AUDIO_STANDARD_INTERFACE
|
||||
},
|
||||
{
|
||||
.ifnum = 2,
|
||||
.type = QUIRK_AUDIO_STANDARD_INTERFACE
|
||||
},
|
||||
{
|
||||
.ifnum = 3,
|
||||
.type = QUIRK_MIDI_FIXED_ENDPOINT,
|
||||
.data = &(const struct snd_usb_midi_endpoint_info) {
|
||||
.out_cables = 0x0001,
|
||||
.in_cables = 0x0001
|
||||
}
|
||||
},
|
||||
{
|
||||
.ifnum = -1
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
/* TerraTec devices */
|
||||
{
|
||||
USB_DEVICE_VENDOR_SPEC(0x0ccd, 0x0012),
|
||||
|
||||
Reference in New Issue
Block a user