summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to '3.14.50/1049_linux-3.14.50.patch')
-rw-r--r--3.14.50/1049_linux-3.14.50.patch700
1 files changed, 0 insertions, 700 deletions
diff --git a/3.14.50/1049_linux-3.14.50.patch b/3.14.50/1049_linux-3.14.50.patch
deleted file mode 100644
index bd7d238..0000000
--- a/3.14.50/1049_linux-3.14.50.patch
+++ /dev/null
@@ -1,700 +0,0 @@
-diff --git a/Makefile b/Makefile
-index fee8460..d71c40a 100644
---- a/Makefile
-+++ b/Makefile
-@@ -1,6 +1,6 @@
- VERSION = 3
- PATCHLEVEL = 14
--SUBLEVEL = 49
-+SUBLEVEL = 50
- EXTRAVERSION =
- NAME = Remembering Coco
-
-diff --git a/arch/arc/include/asm/ptrace.h b/arch/arc/include/asm/ptrace.h
-index 1bfeec2..2a58af7 100644
---- a/arch/arc/include/asm/ptrace.h
-+++ b/arch/arc/include/asm/ptrace.h
-@@ -63,7 +63,7 @@ struct callee_regs {
- long r25, r24, r23, r22, r21, r20, r19, r18, r17, r16, r15, r14, 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 */
-diff --git a/arch/avr32/mach-at32ap/clock.c b/arch/avr32/mach-at32ap/clock.c
-index 23b1a97..52c179b 100644
---- a/arch/avr32/mach-at32ap/clock.c
-+++ b/arch/avr32/mach-at32ap/clock.c
-@@ -80,6 +80,9 @@ int clk_enable(struct clk *clk)
- {
- unsigned long flags;
-
-+ if (!clk)
-+ return 0;
-+
- spin_lock_irqsave(&clk_lock, flags);
- __clk_enable(clk);
- spin_unlock_irqrestore(&clk_lock, flags);
-@@ -106,6 +109,9 @@ void clk_disable(struct clk *clk)
- {
- unsigned long flags;
-
-+ if (IS_ERR_OR_NULL(clk))
-+ return;
-+
- spin_lock_irqsave(&clk_lock, flags);
- __clk_disable(clk);
- spin_unlock_irqrestore(&clk_lock, flags);
-@@ -117,6 +123,9 @@ unsigned long clk_get_rate(struct clk *clk)
- unsigned long flags;
- unsigned long rate;
-
-+ if (!clk)
-+ return 0;
-+
- spin_lock_irqsave(&clk_lock, flags);
- rate = clk->get_rate(clk);
- spin_unlock_irqrestore(&clk_lock, flags);
-@@ -129,6 +138,9 @@ long clk_round_rate(struct clk *clk, unsigned long rate)
- {
- unsigned long flags, actual_rate;
-
-+ if (!clk)
-+ return 0;
-+
- if (!clk->set_rate)
- return -ENOSYS;
-
-@@ -145,6 +157,9 @@ int clk_set_rate(struct clk *clk, unsigned long rate)
- unsigned long flags;
- long ret;
-
-+ if (!clk)
-+ return 0;
-+
- if (!clk->set_rate)
- return -ENOSYS;
-
-@@ -161,6 +176,9 @@ int clk_set_parent(struct clk *clk, struct clk *parent)
- unsigned long flags;
- int ret;
-
-+ if (!clk)
-+ return 0;
-+
- if (!clk->set_parent)
- return -ENOSYS;
-
-@@ -174,7 +192,7 @@ EXPORT_SYMBOL(clk_set_parent);
-
- struct clk *clk_get_parent(struct clk *clk)
- {
-- return clk->parent;
-+ return !clk ? NULL : clk->parent;
- }
- EXPORT_SYMBOL(clk_get_parent);
-
-diff --git a/arch/s390/kernel/sclp.S b/arch/s390/kernel/sclp.S
-index 29bd7be..1ecd47b 100644
---- a/arch/s390/kernel/sclp.S
-+++ b/arch/s390/kernel/sclp.S
-@@ -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
-diff --git a/arch/tile/kernel/setup.c b/arch/tile/kernel/setup.c
-index 74c9172..bdb3ecf 100644
---- a/arch/tile/kernel/setup.c
-+++ b/arch/tile/kernel/setup.c
-@@ -1146,7 +1146,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);
- }
-
- static int __init setup_initrd(char *str)
-diff --git a/arch/x86/boot/compressed/eboot.c b/arch/x86/boot/compressed/eboot.c
-index 78cbb2d..ec5a3c7 100644
---- a/arch/x86/boot/compressed/eboot.c
-+++ b/arch/x86/boot/compressed/eboot.c
-@@ -560,6 +560,10 @@ static efi_status_t setup_e820(struct boot_params *params,
- unsigned int e820_type = 0;
- unsigned long m = efi->efi_memmap;
-
-+#ifdef CONFIG_X86_64
-+ m |= (u64)efi->efi_memmap_hi << 32;
-+#endif
-+
- d = (efi_memory_desc_t *)(m + (i * efi->efi_memdesc_size));
- switch (d->type) {
- case EFI_RESERVED_TYPE:
-diff --git a/arch/x86/boot/compressed/head_32.S b/arch/x86/boot/compressed/head_32.S
-index c5b56ed..a814c80 100644
---- a/arch/x86/boot/compressed/head_32.S
-+++ b/arch/x86/boot/compressed/head_32.S
-@@ -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
-diff --git a/block/blk-cgroup.c b/block/blk-cgroup.c
-index d8f80e7..a717585 100644
---- a/block/blk-cgroup.c
-+++ b/block/blk-cgroup.c
-@@ -703,8 +703,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);
-diff --git a/drivers/ata/libata-pmp.c b/drivers/ata/libata-pmp.c
-index 7ccc084..85aa761 100644
---- a/drivers/ata/libata-pmp.c
-+++ b/drivers/ata/libata-pmp.c
-@@ -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;
-+ }
- }
- }
-
-diff --git a/drivers/input/touchscreen/usbtouchscreen.c b/drivers/input/touchscreen/usbtouchscreen.c
-index a096633..c6f7e91 100644
---- a/drivers/input/touchscreen/usbtouchscreen.c
-+++ b/drivers/input/touchscreen/usbtouchscreen.c
-@@ -625,6 +625,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),
-diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c
-index b96ee9d..9be97e0 100644
---- a/drivers/md/raid1.c
-+++ b/drivers/md/raid1.c
-@@ -336,7 +336,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);
- }
-diff --git a/drivers/mmc/host/sdhci-esdhc.h b/drivers/mmc/host/sdhci-esdhc.h
-index a7d9f95..7fd86be 100644
---- a/drivers/mmc/host/sdhci-esdhc.h
-+++ b/drivers/mmc/host/sdhci-esdhc.h
-@@ -47,6 +47,6 @@
- #define ESDHC_DMA_SYSCTL 0x40c
- #define ESDHC_DMA_SNOOP 0x00000040
-
--#define ESDHC_HOST_CONTROL_RES 0x05
-+#define ESDHC_HOST_CONTROL_RES 0x01
-
- #endif /* _DRIVERS_MMC_SDHCI_ESDHC_H */
-diff --git a/drivers/mmc/host/sdhci-pxav3.c b/drivers/mmc/host/sdhci-pxav3.c
-index 561c6b4..b807666 100644
---- a/drivers/mmc/host/sdhci-pxav3.c
-+++ b/drivers/mmc/host/sdhci-pxav3.c
-@@ -257,6 +257,7 @@ static int sdhci_pxav3_probe(struct platform_device *pdev)
- goto err_of_parse;
- 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)
-diff --git a/drivers/scsi/st.c b/drivers/scsi/st.c
-index a1d6986..f310982 100644
---- a/drivers/scsi/st.c
-+++ b/drivers/scsi/st.c
-@@ -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;
-
- }
-diff --git a/drivers/target/iscsi/iscsi_target.c b/drivers/target/iscsi/iscsi_target.c
-index c8d7b30..55ec9b4 100644
---- a/drivers/target/iscsi/iscsi_target.c
-+++ b/drivers/target/iscsi/iscsi_target.c
-@@ -4476,7 +4476,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);
-@@ -4490,7 +4501,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);
-@@ -4709,6 +4723,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);
-@@ -4730,14 +4745,17 @@ 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);
-+ 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++;
- }
-- spin_unlock_bh(&se_tpg->session_lock);
-
- pr_debug("Released %d iSCSI Session(s) from Target Portal"
- " Group: %hu\n", session_count, tpg->tpgt);
-diff --git a/drivers/usb/host/xhci-hub.c b/drivers/usb/host/xhci-hub.c
-index b9e16abb..5c95765 100644
---- a/drivers/usb/host/xhci-hub.c
-+++ b/drivers/usb/host/xhci-hub.c
-@@ -480,10 +480,13 @@ static void xhci_hub_report_usb3_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
-@@ -584,7 +587,14 @@ static u32 xhci_get_port_status(struct usb_hcd *hcd,
- status |= USB_PORT_STAT_C_RESET << 16;
- /* USB3.0 only */
- if (hcd->speed == HCD_USB3) {
-- if ((raw_port_status & PORT_PLC))
-+ /* Port link change with port in resume state should not be
-+ * reported to usbcore, as this is an internal state to be
-+ * handled by xhci driver. Reporting PLC to usbcore may
-+ * cause usbcore clearing PLC first and port change event
-+ * irq won't be generated.
-+ */
-+ if ((raw_port_status & PORT_PLC) &&
-+ (raw_port_status & PORT_PLS_MASK) != XDEV_RESUME)
- status |= USB_PORT_STAT_C_LINK_STATE << 16;
- if ((raw_port_status & PORT_WRC))
- status |= USB_PORT_STAT_C_BH_RESET << 16;
-@@ -1114,10 +1124,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;
- }
- }
-diff --git a/drivers/usb/host/xhci-ring.c b/drivers/usb/host/xhci-ring.c
-index f615712..bcc43a2 100644
---- a/drivers/usb/host/xhci-ring.c
-+++ b/drivers/usb/host/xhci-ring.c
-@@ -1740,6 +1740,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);
-
-diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c
-index 16f4f8d..fc61e663b 100644
---- a/drivers/usb/host/xhci.c
-+++ b/drivers/usb/host/xhci.c
-@@ -3424,6 +3424,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.
-diff --git a/drivers/usb/host/xhci.h b/drivers/usb/host/xhci.h
-index 70facb7..c167485 100644
---- a/drivers/usb/host/xhci.h
-+++ b/drivers/usb/host/xhci.h
-@@ -285,6 +285,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)
-diff --git a/drivers/usb/storage/unusual_devs.h b/drivers/usb/storage/unusual_devs.h
-index 821e1e2..da380a9 100644
---- a/drivers/usb/storage/unusual_devs.h
-+++ b/drivers/usb/storage/unusual_devs.h
-@@ -2032,6 +2032,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).
- */
-diff --git a/drivers/vhost/vhost.c b/drivers/vhost/vhost.c
-index 78987e4..85095d7 100644
---- a/drivers/vhost/vhost.c
-+++ b/drivers/vhost/vhost.c
-@@ -876,6 +876,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;
-diff --git a/fs/dcache.c b/fs/dcache.c
-index aa24f7d..3d2f27b 100644
---- a/fs/dcache.c
-+++ b/fs/dcache.c
-@@ -587,6 +587,9 @@ repeat:
- if (unlikely(d_unhashed(dentry)))
- goto kill_it;
-
-+ if (unlikely(dentry->d_flags & DCACHE_DISCONNECTED))
-+ goto kill_it;
-+
- if (unlikely(dentry->d_flags & DCACHE_OP_DELETE)) {
- if (dentry->d_op->d_delete(dentry))
- goto kill_it;
-diff --git a/kernel/irq/resend.c b/kernel/irq/resend.c
-index 9065107..7a5237a 100644
---- a/kernel/irq/resend.c
-+++ b/kernel/irq/resend.c
-@@ -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);
-diff --git a/mm/memory.c b/mm/memory.c
-index 749e1c6..e9ddc7a 100644
---- a/mm/memory.c
-+++ b/mm/memory.c
-@@ -3234,6 +3234,10 @@ static int do_anonymous_page(struct mm_struct *mm, struct vm_area_struct *vma,
-
- pte_unmap(page_table);
-
-+ /* File mapping without ->vm_ops ? */
-+ if (vma->vm_flags & VM_SHARED)
-+ return VM_FAULT_SIGBUS;
-+
- /* Check if we need to add a guard page to the stack */
- if (check_stack_guard_page(vma, address) < 0)
- return VM_FAULT_SIGSEGV;
-@@ -3502,6 +3506,9 @@ static int do_linear_fault(struct mm_struct *mm, struct vm_area_struct *vma,
- - vma->vm_start) >> PAGE_SHIFT) + vma->vm_pgoff;
-
- 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);
- }
-
-@@ -3650,11 +3657,9 @@ static int handle_pte_fault(struct mm_struct *mm,
- entry = ACCESS_ONCE(*pte);
- if (!pte_present(entry)) {
- if (pte_none(entry)) {
-- if (vma->vm_ops) {
-- if (likely(vma->vm_ops->fault))
-- return do_linear_fault(mm, vma, address,
-+ if (vma->vm_ops)
-+ return do_linear_fault(mm, vma, address,
- pte, pmd, flags, entry);
-- }
- return do_anonymous_page(mm, vma, address,
- pte, pmd, flags);
- }
-diff --git a/net/mac80211/debugfs_netdev.c b/net/mac80211/debugfs_netdev.c
-index 653ce5d..5d8bc1f 100644
---- a/net/mac80211/debugfs_netdev.c
-+++ b/net/mac80211/debugfs_netdev.c
-@@ -712,6 +712,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)
-diff --git a/net/rds/ib_rdma.c b/net/rds/ib_rdma.c
-index e8fdb17..a985158 100644
---- a/net/rds/ib_rdma.c
-+++ b/net/rds/ib_rdma.c
-@@ -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)
-diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
-index 2f503c0..907371d 100644
---- a/sound/pci/hda/patch_realtek.c
-+++ b/sound/pci/hda/patch_realtek.c
-@@ -2282,7 +2282,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),
-diff --git a/sound/usb/mixer_maps.c b/sound/usb/mixer_maps.c
-index b16be39..9a3e107 100644
---- a/sound/usb/mixer_maps.c
-+++ b/sound/usb/mixer_maps.c
-@@ -336,6 +336,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
- */
-@@ -442,6 +456,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 */
- };
-
-diff --git a/sound/usb/quirks-table.h b/sound/usb/quirks-table.h
-index 5293b5a..7c24088 100644
---- a/sound/usb/quirks-table.h
-+++ b/sound/usb/quirks-table.h
-@@ -2516,6 +2516,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),