summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to '3.2.71/1070_linux-3.2.71.patch')
-rw-r--r--3.2.71/1070_linux-3.2.71.patch3488
1 files changed, 0 insertions, 3488 deletions
diff --git a/3.2.71/1070_linux-3.2.71.patch b/3.2.71/1070_linux-3.2.71.patch
deleted file mode 100644
index 8702e84..0000000
--- a/3.2.71/1070_linux-3.2.71.patch
+++ /dev/null
@@ -1,3488 +0,0 @@
-diff --git a/Makefile b/Makefile
-index 41a626b..9d5fea7 100644
---- a/Makefile
-+++ b/Makefile
-@@ -1,6 +1,6 @@
- VERSION = 3
- PATCHLEVEL = 2
--SUBLEVEL = 70
-+SUBLEVEL = 71
- EXTRAVERSION =
- NAME = Saber-toothed Squirrel
-
-diff --git a/arch/s390/kernel/process.c b/arch/s390/kernel/process.c
-index 53088e2..2ba1226 100644
---- a/arch/s390/kernel/process.c
-+++ b/arch/s390/kernel/process.c
-@@ -250,7 +250,7 @@ asmlinkage void execve_tail(void)
- {
- current->thread.fp_regs.fpc = 0;
- if (MACHINE_HAS_IEEE)
-- asm volatile("sfpc %0,%0" : : "d" (0));
-+ asm volatile("sfpc %0" : : "d" (0));
- }
-
- /*
-diff --git a/arch/s390/kernel/sclp.S b/arch/s390/kernel/sclp.S
-index 95792d8..51ca1c3 100644
---- a/arch/s390/kernel/sclp.S
-+++ b/arch/s390/kernel/sclp.S
-@@ -270,6 +270,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
-@@ -293,6 +295,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 a09b6c3..bf3e71a 100644
---- a/arch/tile/kernel/setup.c
-+++ b/arch/tile/kernel/setup.c
-@@ -973,7 +973,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
-diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h
-index 9171618..93ce7e4 100644
---- a/arch/x86/include/asm/kvm_host.h
-+++ b/arch/x86/include/asm/kvm_host.h
-@@ -472,7 +472,7 @@ struct kvm_arch {
- struct kvm_pic *vpic;
- struct kvm_ioapic *vioapic;
- struct kvm_pit *vpit;
-- int vapics_in_nmi_mode;
-+ atomic_t vapics_in_nmi_mode;
-
- unsigned int tss_addr;
- struct page *apic_access_page;
-diff --git a/arch/x86/kvm/i8254.c b/arch/x86/kvm/i8254.c
-index cced57f..ab98fe5 100644
---- a/arch/x86/kvm/i8254.c
-+++ b/arch/x86/kvm/i8254.c
-@@ -318,7 +318,7 @@ static void pit_do_work(struct work_struct *work)
- * LVT0 to NMI delivery. Other PIC interrupts are just sent to
- * VCPU0, and only if its LVT0 is in EXTINT mode.
- */
-- if (kvm->arch.vapics_in_nmi_mode > 0)
-+ if (atomic_read(&kvm->arch.vapics_in_nmi_mode) > 0)
- kvm_for_each_vcpu(i, vcpu, kvm)
- kvm_apic_nmi_wd_deliver(vcpu);
- }
-diff --git a/arch/x86/kvm/lapic.c b/arch/x86/kvm/lapic.c
-index 176205a..055cc49 100644
---- a/arch/x86/kvm/lapic.c
-+++ b/arch/x86/kvm/lapic.c
-@@ -757,10 +757,10 @@ static void apic_manage_nmi_watchdog(struct kvm_lapic *apic, u32 lvt0_val)
- if (!nmi_wd_enabled) {
- apic_debug("Receive NMI setting on APIC_LVT0 "
- "for cpu %d\n", apic->vcpu->vcpu_id);
-- apic->vcpu->kvm->arch.vapics_in_nmi_mode++;
-+ atomic_inc(&apic->vcpu->kvm->arch.vapics_in_nmi_mode);
- }
- } else if (nmi_wd_enabled)
-- apic->vcpu->kvm->arch.vapics_in_nmi_mode--;
-+ atomic_dec(&apic->vcpu->kvm->arch.vapics_in_nmi_mode);
- }
-
- static int apic_reg_write(struct kvm_lapic *apic, u32 reg, u32 val)
-@@ -1253,6 +1253,7 @@ void kvm_apic_post_state_restore(struct kvm_vcpu *vcpu)
-
- apic_update_ppr(apic);
- hrtimer_cancel(&apic->lapic_timer.timer);
-+ apic_manage_nmi_watchdog(apic, apic_get_reg(apic, APIC_LVT0));
- update_divide_count(apic);
- start_apic_timer(apic);
- apic->irr_pending = true;
-diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c
-index 5189fe8..81afe1b 100644
---- a/arch/x86/xen/enlighten.c
-+++ b/arch/x86/xen/enlighten.c
-@@ -321,6 +321,7 @@ static void set_aliased_prot(void *v, pgprot_t prot)
- pte_t pte;
- unsigned long pfn;
- struct page *page;
-+ unsigned char dummy;
-
- ptep = lookup_address((unsigned long)v, &level);
- BUG_ON(ptep == NULL);
-@@ -330,6 +331,32 @@ static void set_aliased_prot(void *v, pgprot_t prot)
-
- pte = pfn_pte(pfn, prot);
-
-+ /*
-+ * Careful: update_va_mapping() will fail if the virtual address
-+ * we're poking isn't populated in the page tables. We don't
-+ * need to worry about the direct map (that's always in the page
-+ * tables), but we need to be careful about vmap space. In
-+ * particular, the top level page table can lazily propagate
-+ * entries between processes, so if we've switched mms since we
-+ * vmapped the target in the first place, we might not have the
-+ * top-level page table entry populated.
-+ *
-+ * We disable preemption because we want the same mm active when
-+ * we probe the target and when we issue the hypercall. We'll
-+ * have the same nominal mm, but if we're a kernel thread, lazy
-+ * mm dropping could change our pgd.
-+ *
-+ * Out of an abundance of caution, this uses __get_user() to fault
-+ * in the target address just in case there's some obscure case
-+ * in which the target address isn't readable.
-+ */
-+
-+ preempt_disable();
-+
-+ pagefault_disable(); /* Avoid warnings due to being atomic. */
-+ __get_user(dummy, (unsigned char __user __force *)v);
-+ pagefault_enable();
-+
- if (HYPERVISOR_update_va_mapping((unsigned long)v, pte, 0))
- BUG();
-
-@@ -341,6 +368,8 @@ static void set_aliased_prot(void *v, pgprot_t prot)
- BUG();
- } else
- kmap_flush_unused();
-+
-+ preempt_enable();
- }
-
- static void xen_alloc_ldt(struct desc_struct *ldt, unsigned entries)
-@@ -348,6 +377,17 @@ static void xen_alloc_ldt(struct desc_struct *ldt, unsigned entries)
- const unsigned entries_per_page = PAGE_SIZE / LDT_ENTRY_SIZE;
- int i;
-
-+ /*
-+ * We need to mark the all aliases of the LDT pages RO. We
-+ * don't need to call vm_flush_aliases(), though, since that's
-+ * only responsible for flushing aliases out the TLBs, not the
-+ * page tables, and Xen will flush the TLB for us if needed.
-+ *
-+ * To avoid confusing future readers: none of this is necessary
-+ * to load the LDT. The hypervisor only checks this when the
-+ * LDT is faulted in due to subsequent descriptor access.
-+ */
-+
- for(i = 0; i < entries; i += entries_per_page)
- set_aliased_prot(ldt + i, PAGE_KERNEL_RO);
- }
-diff --git a/drivers/acpi/acpica/utxface.c b/drivers/acpi/acpica/utxface.c
-index 420ebfe..ecc428e 100644
---- a/drivers/acpi/acpica/utxface.c
-+++ b/drivers/acpi/acpica/utxface.c
-@@ -163,10 +163,12 @@ acpi_status acpi_enable_subsystem(u32 flags)
- * Obtain a permanent mapping for the FACS. This is required for the
- * Global Lock and the Firmware Waking Vector
- */
-- status = acpi_tb_initialize_facs();
-- if (ACPI_FAILURE(status)) {
-- ACPI_WARNING((AE_INFO, "Could not map the FACS table"));
-- return_ACPI_STATUS(status);
-+ if (!(flags & ACPI_NO_FACS_INIT)) {
-+ status = acpi_tb_initialize_facs();
-+ if (ACPI_FAILURE(status)) {
-+ ACPI_WARNING((AE_INFO, "Could not map the FACS table"));
-+ return_ACPI_STATUS(status);
-+ }
- }
-
- /*
-diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
-index fcd8586..4e9beff 100644
---- a/drivers/ata/libata-core.c
-+++ b/drivers/ata/libata-core.c
-@@ -4107,9 +4107,10 @@ static const struct ata_blacklist_entry ata_device_blacklist [] = {
- { "ST3320[68]13AS", "SD1[5-9]", ATA_HORKAGE_NONCQ |
- ATA_HORKAGE_FIRMWARE_WARN },
-
-- /* Seagate Momentus SpinPoint M8 seem to have FPMDA_AA issues */
-+ /* drives which fail FPDMA_AA activation (some may freeze afterwards) */
- { "ST1000LM024 HN-M101MBB", "2AR10001", ATA_HORKAGE_BROKEN_FPDMA_AA },
- { "ST1000LM024 HN-M101MBB", "2BA30001", ATA_HORKAGE_BROKEN_FPDMA_AA },
-+ { "VB0250EAVER", "HPG7", ATA_HORKAGE_BROKEN_FPDMA_AA },
-
- /* Blacklist entries taken from Silicon Image 3124/3132
- Windows driver .inf file - also several Linux problem reports */
-@@ -4154,6 +4155,9 @@ static const struct ata_blacklist_entry ata_device_blacklist [] = {
- { "PIONEER DVD-RW DVR-212D", NULL, ATA_HORKAGE_NOSETXFER },
- { "PIONEER DVD-RW DVR-216D", NULL, ATA_HORKAGE_NOSETXFER },
-
-+ /* devices that don't properly handle TRIM commands */
-+ { "SuperSSpeed S238*", NULL, ATA_HORKAGE_NOTRIM, },
-+
- /*
- * Some WD SATA-I drives spin up and down erratically when the link
- * is put into the slumber mode. We don't have full list of the
-@@ -4458,7 +4462,8 @@ static unsigned int ata_dev_set_xfermode(struct ata_device *dev)
- else /* In the ancient relic department - skip all of this */
- return 0;
-
-- err_mask = ata_exec_internal(dev, &tf, NULL, DMA_NONE, NULL, 0, 0);
-+ /* On some disks, this command causes spin-up, so we need longer timeout */
-+ err_mask = ata_exec_internal(dev, &tf, NULL, DMA_NONE, NULL, 0, 15000);
-
- DPRINTK("EXIT, err_mask=%x\n", err_mask);
- return err_mask;
-diff --git a/drivers/ata/libata-pmp.c b/drivers/ata/libata-pmp.c
-index 0ba32fe..93ea335 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/ata/libata-scsi.c b/drivers/ata/libata-scsi.c
-index 8460e62..0ac7a5e 100644
---- a/drivers/ata/libata-scsi.c
-+++ b/drivers/ata/libata-scsi.c
-@@ -2473,7 +2473,8 @@ static unsigned int ata_scsiop_read_cap(struct ata_scsi_args *args, u8 *rbuf)
- rbuf[14] = (lowest_aligned >> 8) & 0x3f;
- rbuf[15] = lowest_aligned;
-
-- if (ata_id_has_trim(args->id)) {
-+ if (ata_id_has_trim(args->id) &&
-+ !(dev->horkage & ATA_HORKAGE_NOTRIM)) {
- rbuf[14] |= 0x80; /* TPE */
-
- if (ata_id_has_zero_after_trim(args->id))
-diff --git a/drivers/bluetooth/ath3k.c b/drivers/bluetooth/ath3k.c
-index 9f32f43..e9e8f3b 100644
---- a/drivers/bluetooth/ath3k.c
-+++ b/drivers/bluetooth/ath3k.c
-@@ -78,6 +78,7 @@ static struct usb_device_id ath3k_table[] = {
- { USB_DEVICE(0x0489, 0xe057) },
- { USB_DEVICE(0x0489, 0xe056) },
- { USB_DEVICE(0x0489, 0xe05f) },
-+ { USB_DEVICE(0x0489, 0xe076) },
- { USB_DEVICE(0x0489, 0xe078) },
- { USB_DEVICE(0x04c5, 0x1330) },
- { USB_DEVICE(0x04CA, 0x3004) },
-@@ -86,6 +87,7 @@ static struct usb_device_id ath3k_table[] = {
- { USB_DEVICE(0x04CA, 0x3007) },
- { USB_DEVICE(0x04CA, 0x3008) },
- { USB_DEVICE(0x04CA, 0x300b) },
-+ { USB_DEVICE(0x04CA, 0x300f) },
- { USB_DEVICE(0x04CA, 0x3010) },
- { USB_DEVICE(0x0930, 0x0219) },
- { USB_DEVICE(0x0930, 0x0220) },
-@@ -109,6 +111,7 @@ static struct usb_device_id ath3k_table[] = {
- { USB_DEVICE(0x13d3, 0x3408) },
- { USB_DEVICE(0x13d3, 0x3423) },
- { USB_DEVICE(0x13d3, 0x3432) },
-+ { USB_DEVICE(0x13d3, 0x3474) },
-
- /* Atheros AR5BBU12 with sflash firmware */
- { USB_DEVICE(0x0489, 0xE02C) },
-@@ -133,6 +136,7 @@ static struct usb_device_id ath3k_blist_tbl[] = {
- { USB_DEVICE(0x0489, 0xe056), .driver_info = BTUSB_ATH3012 },
- { USB_DEVICE(0x0489, 0xe057), .driver_info = BTUSB_ATH3012 },
- { USB_DEVICE(0x0489, 0xe05f), .driver_info = BTUSB_ATH3012 },
-+ { USB_DEVICE(0x0489, 0xe076), .driver_info = BTUSB_ATH3012 },
- { USB_DEVICE(0x0489, 0xe078), .driver_info = BTUSB_ATH3012 },
- { USB_DEVICE(0x04c5, 0x1330), .driver_info = BTUSB_ATH3012 },
- { USB_DEVICE(0x04ca, 0x3004), .driver_info = BTUSB_ATH3012 },
-@@ -141,6 +145,7 @@ static struct usb_device_id ath3k_blist_tbl[] = {
- { USB_DEVICE(0x04ca, 0x3007), .driver_info = BTUSB_ATH3012 },
- { USB_DEVICE(0x04ca, 0x3008), .driver_info = BTUSB_ATH3012 },
- { USB_DEVICE(0x04ca, 0x300b), .driver_info = BTUSB_ATH3012 },
-+ { USB_DEVICE(0x04ca, 0x300f), .driver_info = BTUSB_ATH3012 },
- { USB_DEVICE(0x04ca, 0x3010), .driver_info = BTUSB_ATH3012 },
- { USB_DEVICE(0x0930, 0x0219), .driver_info = BTUSB_ATH3012 },
- { USB_DEVICE(0x0930, 0x0220), .driver_info = BTUSB_ATH3012 },
-@@ -164,6 +169,7 @@ static struct usb_device_id ath3k_blist_tbl[] = {
- { USB_DEVICE(0x13d3, 0x3408), .driver_info = BTUSB_ATH3012 },
- { USB_DEVICE(0x13d3, 0x3423), .driver_info = BTUSB_ATH3012 },
- { USB_DEVICE(0x13d3, 0x3432), .driver_info = BTUSB_ATH3012 },
-+ { USB_DEVICE(0x13d3, 0x3474), .driver_info = BTUSB_ATH3012 },
-
- /* Atheros AR5BBU22 with sflash firmware */
- { USB_DEVICE(0x0489, 0xE036), .driver_info = BTUSB_ATH3012 },
-diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
-index 92973a3..c5e400b 100644
---- a/drivers/bluetooth/btusb.c
-+++ b/drivers/bluetooth/btusb.c
-@@ -163,6 +163,7 @@ static struct usb_device_id blacklist_table[] = {
- { USB_DEVICE(0x0489, 0xe056), .driver_info = BTUSB_ATH3012 },
- { USB_DEVICE(0x0489, 0xe057), .driver_info = BTUSB_ATH3012 },
- { USB_DEVICE(0x0489, 0xe05f), .driver_info = BTUSB_ATH3012 },
-+ { USB_DEVICE(0x0489, 0xe076), .driver_info = BTUSB_ATH3012 },
- { USB_DEVICE(0x0489, 0xe078), .driver_info = BTUSB_ATH3012 },
- { USB_DEVICE(0x04c5, 0x1330), .driver_info = BTUSB_ATH3012 },
- { USB_DEVICE(0x04ca, 0x3004), .driver_info = BTUSB_ATH3012 },
-@@ -171,6 +172,7 @@ static struct usb_device_id blacklist_table[] = {
- { USB_DEVICE(0x04ca, 0x3007), .driver_info = BTUSB_ATH3012 },
- { USB_DEVICE(0x04ca, 0x3008), .driver_info = BTUSB_ATH3012 },
- { USB_DEVICE(0x04ca, 0x300b), .driver_info = BTUSB_ATH3012 },
-+ { USB_DEVICE(0x04ca, 0x300f), .driver_info = BTUSB_ATH3012 },
- { USB_DEVICE(0x04ca, 0x3010), .driver_info = BTUSB_ATH3012 },
- { USB_DEVICE(0x0930, 0x0219), .driver_info = BTUSB_ATH3012 },
- { USB_DEVICE(0x0930, 0x0220), .driver_info = BTUSB_ATH3012 },
-@@ -194,6 +196,7 @@ static struct usb_device_id blacklist_table[] = {
- { USB_DEVICE(0x13d3, 0x3408), .driver_info = BTUSB_ATH3012 },
- { USB_DEVICE(0x13d3, 0x3423), .driver_info = BTUSB_ATH3012 },
- { USB_DEVICE(0x13d3, 0x3432), .driver_info = BTUSB_ATH3012 },
-+ { USB_DEVICE(0x13d3, 0x3474), .driver_info = BTUSB_ATH3012 },
-
- /* Atheros AR5BBU12 with sflash firmware */
- { USB_DEVICE(0x0489, 0xe02c), .driver_info = BTUSB_IGNORE },
-diff --git a/drivers/char/agp/intel-gtt.c b/drivers/char/agp/intel-gtt.c
-index 43c4ec3..59d4697 100644
---- a/drivers/char/agp/intel-gtt.c
-+++ b/drivers/char/agp/intel-gtt.c
-@@ -1195,7 +1195,7 @@ static inline int needs_idle_maps(void)
- /* Query intel_iommu to see if we need the workaround. Presumably that
- * was loaded first.
- */
-- if ((gpu_devid == PCI_DEVICE_ID_INTEL_IRONLAKE_M_HB ||
-+ if ((gpu_devid == PCI_DEVICE_ID_INTEL_IRONLAKE_D_IG ||
- gpu_devid == PCI_DEVICE_ID_INTEL_IRONLAKE_M_IG) &&
- intel_iommu_gfx_mapped)
- return 1;
-diff --git a/drivers/crypto/talitos.c b/drivers/crypto/talitos.c
-index dbe76b5..90c76fc 100644
---- a/drivers/crypto/talitos.c
-+++ b/drivers/crypto/talitos.c
-@@ -2384,6 +2384,7 @@ static struct talitos_crypto_alg *talitos_alg_alloc(struct device *dev,
- break;
- default:
- dev_err(dev, "unknown algorithm type %d\n", t_alg->algt.type);
-+ kfree(t_alg);
- return ERR_PTR(-EINVAL);
- }
-
-diff --git a/drivers/dma/mv_xor.c b/drivers/dma/mv_xor.c
-index 9b01145..a258101 100644
---- a/drivers/dma/mv_xor.c
-+++ b/drivers/dma/mv_xor.c
-@@ -386,7 +386,8 @@ static void __mv_xor_slot_cleanup(struct mv_xor_chan *mv_chan)
- dma_cookie_t cookie = 0;
- int busy = mv_chan_is_busy(mv_chan);
- u32 current_desc = mv_chan_get_current_desc(mv_chan);
-- int seen_current = 0;
-+ int current_cleaned = 0;
-+ struct mv_xor_desc *hw_desc;
-
- dev_dbg(mv_chan->device->common.dev, "%s %d\n", __func__, __LINE__);
- dev_dbg(mv_chan->device->common.dev, "current_desc %x\n", current_desc);
-@@ -398,38 +399,57 @@ static void __mv_xor_slot_cleanup(struct mv_xor_chan *mv_chan)
-
- list_for_each_entry_safe(iter, _iter, &mv_chan->chain,
- chain_node) {
-- prefetch(_iter);
-- prefetch(&_iter->async_tx);
-
-- /* do not advance past the current descriptor loaded into the
-- * hardware channel, subsequent descriptors are either in
-- * process or have not been submitted
-- */
-- if (seen_current)
-- break;
-+ /* clean finished descriptors */
-+ hw_desc = iter->hw_desc;
-+ if (hw_desc->status & XOR_DESC_SUCCESS) {
-+ cookie = mv_xor_run_tx_complete_actions(iter, mv_chan,
-+ cookie);
-
-- /* stop the search if we reach the current descriptor and the
-- * channel is busy
-- */
-- if (iter->async_tx.phys == current_desc) {
-- seen_current = 1;
-- if (busy)
-+ /* done processing desc, clean slot */
-+ mv_xor_clean_slot(iter, mv_chan);
-+
-+ /* break if we did cleaned the current */
-+ if (iter->async_tx.phys == current_desc) {
-+ current_cleaned = 1;
-+ break;
-+ }
-+ } else {
-+ if (iter->async_tx.phys == current_desc) {
-+ current_cleaned = 0;
- break;
-+ }
- }
--
-- cookie = mv_xor_run_tx_complete_actions(iter, mv_chan, cookie);
--
-- if (mv_xor_clean_slot(iter, mv_chan))
-- break;
- }
-
- if ((busy == 0) && !list_empty(&mv_chan->chain)) {
-- struct mv_xor_desc_slot *chain_head;
-- chain_head = list_entry(mv_chan->chain.next,
-- struct mv_xor_desc_slot,
-- chain_node);
--
-- mv_xor_start_new_chain(mv_chan, chain_head);
-+ if (current_cleaned) {
-+ /*
-+ * current descriptor cleaned and removed, run
-+ * from list head
-+ */
-+ iter = list_entry(mv_chan->chain.next,
-+ struct mv_xor_desc_slot,
-+ chain_node);
-+ mv_xor_start_new_chain(mv_chan, iter);
-+ } else {
-+ if (!list_is_last(&iter->chain_node, &mv_chan->chain)) {
-+ /*
-+ * descriptors are still waiting after
-+ * current, trigger them
-+ */
-+ iter = list_entry(iter->chain_node.next,
-+ struct mv_xor_desc_slot,
-+ chain_node);
-+ mv_xor_start_new_chain(mv_chan, iter);
-+ } else {
-+ /*
-+ * some descriptors are still waiting
-+ * to be cleaned
-+ */
-+ tasklet_schedule(&mv_chan->irq_tasklet);
-+ }
-+ }
- }
-
- if (cookie > 0)
-diff --git a/drivers/dma/mv_xor.h b/drivers/dma/mv_xor.h
-index 977b592..ae2cfba 100644
---- a/drivers/dma/mv_xor.h
-+++ b/drivers/dma/mv_xor.h
-@@ -30,6 +30,7 @@
- #define XOR_OPERATION_MODE_XOR 0
- #define XOR_OPERATION_MODE_MEMCPY 2
- #define XOR_OPERATION_MODE_MEMSET 4
-+#define XOR_DESC_SUCCESS 0x40000000
-
- #define XOR_CURR_DESC(chan) (chan->mmr_base + 0x210 + (chan->idx * 4))
- #define XOR_NEXT_DESC(chan) (chan->mmr_base + 0x200 + (chan->idx * 4))
-diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c
-index 09851ce..20110b4 100644
---- a/drivers/gpu/drm/drm_crtc.c
-+++ b/drivers/gpu/drm/drm_crtc.c
-@@ -1505,6 +1505,13 @@ int drm_mode_setcrtc(struct drm_device *dev, void *data,
- if (!drm_core_check_feature(dev, DRIVER_MODESET))
- return -EINVAL;
-
-+ /*
-+ * Universal plane src offsets are only 16.16, prevent havoc for
-+ * drivers using universal plane code internally.
-+ */
-+ if (crtc_req->x & 0xffff0000 || crtc_req->y & 0xffff0000)
-+ return -ERANGE;
-+
- mutex_lock(&dev->mode_config.mutex);
- obj = drm_mode_object_find(dev, crtc_req->crtc_id,
- DRM_MODE_OBJECT_CRTC);
-diff --git a/drivers/gpu/drm/radeon/radeon_combios.c b/drivers/gpu/drm/radeon/radeon_combios.c
-index 8115557..21e689d 100644
---- a/drivers/gpu/drm/radeon/radeon_combios.c
-+++ b/drivers/gpu/drm/radeon/radeon_combios.c
-@@ -1259,10 +1259,15 @@ struct radeon_encoder_lvds *radeon_combios_get_lvds_info(struct radeon_encoder
-
- if ((RBIOS16(tmp) == lvds->native_mode.hdisplay) &&
- (RBIOS16(tmp + 2) == lvds->native_mode.vdisplay)) {
-+ u32 hss = (RBIOS16(tmp + 21) - RBIOS16(tmp + 19) - 1) * 8;
-+
-+ if (hss > lvds->native_mode.hdisplay)
-+ hss = (10 - 1) * 8;
-+
- lvds->native_mode.htotal = lvds->native_mode.hdisplay +
- (RBIOS16(tmp + 17) - RBIOS16(tmp + 19)) * 8;
- lvds->native_mode.hsync_start = lvds->native_mode.hdisplay +
-- (RBIOS16(tmp + 21) - RBIOS16(tmp + 19) - 1) * 8;
-+ hss;
- lvds->native_mode.hsync_end = lvds->native_mode.hsync_start +
- (RBIOS8(tmp + 23) * 8);
-
-diff --git a/drivers/gpu/drm/radeon/radeon_gart.c b/drivers/gpu/drm/radeon/radeon_gart.c
-index ba7ab79..d2572108 100644
---- a/drivers/gpu/drm/radeon/radeon_gart.c
-+++ b/drivers/gpu/drm/radeon/radeon_gart.c
-@@ -171,8 +171,10 @@ void radeon_gart_unbind(struct radeon_device *rdev, unsigned offset,
- }
- }
- }
-- mb();
-- radeon_gart_tlb_flush(rdev);
-+ if (rdev->gart.ptr) {
-+ mb();
-+ radeon_gart_tlb_flush(rdev);
-+ }
- }
-
- int radeon_gart_bind(struct radeon_device *rdev, unsigned offset,
-@@ -217,8 +219,10 @@ int radeon_gart_bind(struct radeon_device *rdev, unsigned offset,
- }
- }
- }
-- mb();
-- radeon_gart_tlb_flush(rdev);
-+ if (rdev->gart.ptr) {
-+ mb();
-+ radeon_gart_tlb_flush(rdev);
-+ }
- return 0;
- }
-
-diff --git a/drivers/gpu/drm/radeon/radeon_irq_kms.c b/drivers/gpu/drm/radeon/radeon_irq_kms.c
-index 4f9496e..42f5a2b 100644
---- a/drivers/gpu/drm/radeon/radeon_irq_kms.c
-+++ b/drivers/gpu/drm/radeon/radeon_irq_kms.c
-@@ -51,10 +51,12 @@ static void radeon_hotplug_work_func(struct work_struct *work)
- struct drm_mode_config *mode_config = &dev->mode_config;
- struct drm_connector *connector;
-
-+ mutex_lock(&mode_config->mutex);
- if (mode_config->num_connector) {
- list_for_each_entry(connector, &mode_config->connector_list, head)
- radeon_connector_hotplug(connector);
- }
-+ mutex_unlock(&mode_config->mutex);
- /* Just fire off a uevent and let userspace tell us what to do */
- drm_helper_hpd_irq_event(dev);
- }
-diff --git a/drivers/input/touchscreen/usbtouchscreen.c b/drivers/input/touchscreen/usbtouchscreen.c
-index 73fd664..e26a7c3 100644
---- a/drivers/input/touchscreen/usbtouchscreen.c
-+++ b/drivers/input/touchscreen/usbtouchscreen.c
-@@ -528,6 +528,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/dm-thin.c b/drivers/md/dm-thin.c
-index 80f8bd5..d9f23a4 100644
---- a/drivers/md/dm-thin.c
-+++ b/drivers/md/dm-thin.c
-@@ -13,6 +13,7 @@
- #include <linux/init.h>
- #include <linux/module.h>
- #include <linux/slab.h>
-+#include <linux/vmalloc.h>
-
- #define DM_MSG_PREFIX "thin"
-
-@@ -158,9 +159,7 @@ static struct bio_prison *prison_create(unsigned nr_cells)
- {
- unsigned i;
- uint32_t nr_buckets = calc_nr_buckets(nr_cells);
-- size_t len = sizeof(struct bio_prison) +
-- (sizeof(struct hlist_head) * nr_buckets);
-- struct bio_prison *prison = kmalloc(len, GFP_KERNEL);
-+ struct bio_prison *prison = kmalloc(sizeof(*prison), GFP_KERNEL);
-
- if (!prison)
- return NULL;
-@@ -173,9 +172,15 @@ static struct bio_prison *prison_create(unsigned nr_cells)
- return NULL;
- }
-
-+ prison->cells = vmalloc(sizeof(*prison->cells) * nr_buckets);
-+ if (!prison->cells) {
-+ mempool_destroy(prison->cell_pool);
-+ kfree(prison);
-+ return NULL;
-+ }
-+
- prison->nr_buckets = nr_buckets;
- prison->hash_mask = nr_buckets - 1;
-- prison->cells = (struct hlist_head *) (prison + 1);
- for (i = 0; i < nr_buckets; i++)
- INIT_HLIST_HEAD(prison->cells + i);
-
-@@ -184,6 +189,7 @@ static struct bio_prison *prison_create(unsigned nr_cells)
-
- static void prison_destroy(struct bio_prison *prison)
- {
-+ vfree(prison->cells);
- mempool_destroy(prison->cell_pool);
- kfree(prison);
- }
-diff --git a/drivers/md/persistent-data/dm-btree-remove.c b/drivers/md/persistent-data/dm-btree-remove.c
-index 1de0f5f..6e79c11 100644
---- a/drivers/md/persistent-data/dm-btree-remove.c
-+++ b/drivers/md/persistent-data/dm-btree-remove.c
-@@ -309,8 +309,8 @@ static void redistribute3(struct dm_btree_info *info, struct btree_node *parent,
-
- if (s < 0 && nr_center < -s) {
- /* not enough in central node */
-- shift(left, center, nr_center);
-- s = nr_center - target;
-+ shift(left, center, -nr_center);
-+ s += nr_center;
- shift(left, right, s);
- nr_right += s;
- } else
-@@ -323,7 +323,7 @@ static void redistribute3(struct dm_btree_info *info, struct btree_node *parent,
- if (s > 0 && nr_center < s) {
- /* not enough in central node */
- shift(center, right, nr_center);
-- s = target - nr_center;
-+ s -= nr_center;
- shift(left, right, s);
- nr_left -= s;
- } else
-diff --git a/drivers/md/persistent-data/dm-btree.c b/drivers/md/persistent-data/dm-btree.c
-index bbb2ec5..18f37e0 100644
---- a/drivers/md/persistent-data/dm-btree.c
-+++ b/drivers/md/persistent-data/dm-btree.c
-@@ -236,7 +236,7 @@ int dm_btree_del(struct dm_btree_info *info, dm_block_t root)
- int r;
- struct del_stack *s;
-
-- s = kmalloc(sizeof(*s), GFP_KERNEL);
-+ s = kmalloc(sizeof(*s), GFP_NOIO);
- if (!s)
- return -ENOMEM;
- s->tm = info->tm;
-diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c
-index aec029a..6e7b002 100644
---- a/drivers/md/raid1.c
-+++ b/drivers/md/raid1.c
-@@ -313,7 +313,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/media/dvb/frontends/cx24116.c b/drivers/media/dvb/frontends/cx24116.c
-index ccd0525..4ff6d15 100644
---- a/drivers/media/dvb/frontends/cx24116.c
-+++ b/drivers/media/dvb/frontends/cx24116.c
-@@ -963,6 +963,10 @@ static int cx24116_send_diseqc_msg(struct dvb_frontend *fe,
- struct cx24116_state *state = fe->demodulator_priv;
- int i, ret;
-
-+ /* Validate length */
-+ if (d->msg_len > sizeof(d->msg))
-+ return -EINVAL;
-+
- /* Dump DiSEqC message */
- if (debug) {
- printk(KERN_INFO "cx24116: %s(", __func__);
-@@ -974,10 +978,6 @@ static int cx24116_send_diseqc_msg(struct dvb_frontend *fe,
- printk(") toneburst=%d\n", toneburst);
- }
-
-- /* Validate length */
-- if (d->msg_len > (CX24116_ARGLEN - CX24116_DISEQC_MSGOFS))
-- return -EINVAL;
--
- /* DiSEqC message */
- for (i = 0; i < d->msg_len; i++)
- state->dsec_cmd.args[CX24116_DISEQC_MSGOFS + i] = d->msg[i];
-diff --git a/drivers/media/dvb/frontends/s5h1420.c b/drivers/media/dvb/frontends/s5h1420.c
-index 3879d2e..507ccae 100644
---- a/drivers/media/dvb/frontends/s5h1420.c
-+++ b/drivers/media/dvb/frontends/s5h1420.c
-@@ -180,7 +180,7 @@ static int s5h1420_send_master_cmd (struct dvb_frontend* fe,
- int result = 0;
-
- dprintk("enter %s\n", __func__);
-- if (cmd->msg_len > 8)
-+ if (cmd->msg_len > sizeof(cmd->msg))
- return -EINVAL;
-
- /* setup for DISEQC */
-diff --git a/drivers/mmc/card/block.c b/drivers/mmc/card/block.c
-index 4802f7f..f53d5c8 100644
---- a/drivers/mmc/card/block.c
-+++ b/drivers/mmc/card/block.c
-@@ -1285,9 +1285,11 @@ static int mmc_blk_issue_rw_rq(struct mmc_queue *mq, struct request *rqc)
- break;
- case MMC_BLK_CMD_ERR:
- ret = mmc_blk_cmd_err(md, card, brq, req, ret);
-- if (!mmc_blk_reset(md, card->host, type))
-- break;
-- goto cmd_abort;
-+ if (mmc_blk_reset(md, card->host, type))
-+ goto cmd_abort;
-+ if (!ret)
-+ goto start_new_req;
-+ break;
- case MMC_BLK_RETRY:
- if (retry++ < 5)
- break;
-diff --git a/drivers/mtd/maps/dc21285.c b/drivers/mtd/maps/dc21285.c
-index f43b365..9af1528 100644
---- a/drivers/mtd/maps/dc21285.c
-+++ b/drivers/mtd/maps/dc21285.c
-@@ -38,9 +38,9 @@ static void nw_en_write(void)
- * we want to write a bit pattern XXX1 to Xilinx to enable
- * the write gate, which will be open for about the next 2ms.
- */
-- spin_lock_irqsave(&nw_gpio_lock, flags);
-+ raw_spin_lock_irqsave(&nw_gpio_lock, flags);
- nw_cpld_modify(CPLD_FLASH_WR_ENABLE, CPLD_FLASH_WR_ENABLE);
-- spin_unlock_irqrestore(&nw_gpio_lock, flags);
-+ raw_spin_unlock_irqrestore(&nw_gpio_lock, flags);
-
- /*
- * let the ISA bus to catch on...
-diff --git a/drivers/mtd/mtd_blkdevs.c b/drivers/mtd/mtd_blkdevs.c
-index 424ca5f..df58db3 100644
---- a/drivers/mtd/mtd_blkdevs.c
-+++ b/drivers/mtd/mtd_blkdevs.c
-@@ -214,6 +214,7 @@ static int blktrans_open(struct block_device *bdev, fmode_t mode)
- return -ERESTARTSYS; /* FIXME: busy loop! -arnd*/
-
- mutex_lock(&dev->lock);
-+ mutex_lock(&mtd_table_mutex);
-
- if (dev->open)
- goto unlock;
-@@ -236,6 +237,7 @@ static int blktrans_open(struct block_device *bdev, fmode_t mode)
-
- unlock:
- dev->open++;
-+ mutex_unlock(&mtd_table_mutex);
- mutex_unlock(&dev->lock);
- blktrans_dev_put(dev);
- return ret;
-@@ -246,6 +248,7 @@ error_release:
- error_put:
- module_put(dev->tr->owner);
- kref_put(&dev->ref, blktrans_dev_release);
-+ mutex_unlock(&mtd_table_mutex);
- mutex_unlock(&dev->lock);
- blktrans_dev_put(dev);
- return ret;
-@@ -260,6 +263,7 @@ static int blktrans_release(struct gendisk *disk, fmode_t mode)
- return ret;
-
- mutex_lock(&dev->lock);
-+ mutex_lock(&mtd_table_mutex);
-
- if (--dev->open)
- goto unlock;
-@@ -272,6 +276,7 @@ static int blktrans_release(struct gendisk *disk, fmode_t mode)
- __put_mtd_device(dev->mtd);
- }
- unlock:
-+ mutex_unlock(&mtd_table_mutex);
- mutex_unlock(&dev->lock);
- blktrans_dev_put(dev);
- return ret;
-diff --git a/drivers/net/ethernet/stmicro/stmmac/descs.h b/drivers/net/ethernet/stmicro/stmmac/descs.h
-index 9820ec8..e93a0bf 100644
---- a/drivers/net/ethernet/stmicro/stmmac/descs.h
-+++ b/drivers/net/ethernet/stmicro/stmmac/descs.h
-@@ -153,6 +153,8 @@ struct dma_desc {
- u32 buffer2_size:13;
- u32 reserved4:3;
- } etx; /* -- enhanced -- */
-+
-+ u64 all_flags;
- } des01;
- unsigned int des2;
- unsigned int des3;
-diff --git a/drivers/net/ethernet/stmicro/stmmac/enh_desc.c b/drivers/net/ethernet/stmicro/stmmac/enh_desc.c
-index d879763..73e647b 100644
---- a/drivers/net/ethernet/stmicro/stmmac/enh_desc.c
-+++ b/drivers/net/ethernet/stmicro/stmmac/enh_desc.c
-@@ -232,6 +232,7 @@ static void enh_desc_init_rx_desc(struct dma_desc *p, unsigned int ring_size,
- {
- int i;
- for (i = 0; i < ring_size; i++) {
-+ p->des01.all_flags = 0;
- p->des01.erx.own = 1;
- p->des01.erx.buffer1_size = BUF_SIZE_8KiB - 1;
-
-@@ -248,7 +249,7 @@ static void enh_desc_init_tx_desc(struct dma_desc *p, unsigned int ring_size)
- int i;
-
- for (i = 0; i < ring_size; i++) {
-- p->des01.etx.own = 0;
-+ p->des01.all_flags = 0;
- ehn_desc_tx_set_on_ring_chain(p, (i == ring_size - 1));
- p++;
- }
-diff --git a/drivers/net/ethernet/stmicro/stmmac/norm_desc.c b/drivers/net/ethernet/stmicro/stmmac/norm_desc.c
-index fda5d2b..5bf9c37 100644
---- a/drivers/net/ethernet/stmicro/stmmac/norm_desc.c
-+++ b/drivers/net/ethernet/stmicro/stmmac/norm_desc.c
-@@ -126,6 +126,7 @@ static void ndesc_init_rx_desc(struct dma_desc *p, unsigned int ring_size,
- {
- int i;
- for (i = 0; i < ring_size; i++) {
-+ p->des01.all_flags = 0;
- p->des01.rx.own = 1;
- p->des01.rx.buffer1_size = BUF_SIZE_2KiB - 1;
-
-@@ -141,7 +142,7 @@ static void ndesc_init_tx_desc(struct dma_desc *p, unsigned int ring_size)
- {
- int i;
- for (i = 0; i < ring_size; i++) {
-- p->des01.tx.own = 0;
-+ p->des01.all_flags = 0;
- ndesc_tx_set_on_ring_chain(p, (i == (ring_size - 1)));
- p++;
- }
-diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
-index d4d2bc1..05852e3 100644
---- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
-+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
-@@ -441,19 +441,17 @@ static void init_dma_desc_rings(struct net_device *dev)
- priv->rx_skbuff =
- kmalloc(sizeof(struct sk_buff *) * rxsize, GFP_KERNEL);
- priv->dma_rx =
-- (struct dma_desc *)dma_alloc_coherent(priv->device,
-- rxsize *
-- sizeof(struct dma_desc),
-- &priv->dma_rx_phy,
-- GFP_KERNEL);
-+ (struct dma_desc *)dma_zalloc_coherent(priv->device, rxsize *
-+ sizeof(struct dma_desc),
-+ &priv->dma_rx_phy,
-+ GFP_KERNEL);
- priv->tx_skbuff = kmalloc(sizeof(struct sk_buff *) * txsize,
- GFP_KERNEL);
- priv->dma_tx =
-- (struct dma_desc *)dma_alloc_coherent(priv->device,
-- txsize *
-- sizeof(struct dma_desc),
-- &priv->dma_tx_phy,
-- GFP_KERNEL);
-+ (struct dma_desc *)dma_zalloc_coherent(priv->device, txsize *
-+ sizeof(struct dma_desc),
-+ &priv->dma_tx_phy,
-+ GFP_KERNEL);
-
- if ((priv->dma_rx == NULL) || (priv->dma_tx == NULL)) {
- pr_err("%s:ERROR allocating the DMA Tx/Rx desc\n", __func__);
-diff --git a/drivers/net/ethernet/sun/niu.c b/drivers/net/ethernet/sun/niu.c
-index 73c7081..c646a49 100644
---- a/drivers/net/ethernet/sun/niu.c
-+++ b/drivers/net/ethernet/sun/niu.c
-@@ -6670,10 +6670,8 @@ static netdev_tx_t niu_start_xmit(struct sk_buff *skb,
- struct sk_buff *skb_new;
-
- skb_new = skb_realloc_headroom(skb, len);
-- if (!skb_new) {
-- rp->tx_errors++;
-+ if (!skb_new)
- goto out_drop;
-- }
- kfree_skb(skb);
- skb = skb_new;
- } else
-diff --git a/drivers/net/wireless/ath/ath9k/main.c b/drivers/net/wireless/ath/ath9k/main.c
-index ad33126..8d64c16 100644
---- a/drivers/net/wireless/ath/ath9k/main.c
-+++ b/drivers/net/wireless/ath/ath9k/main.c
-@@ -235,7 +235,7 @@ static bool ath_prepare_reset(struct ath_softc *sc, bool retry_tx, bool flush)
- {
- struct ath_hw *ah = sc->sc_ah;
- struct ath_common *common = ath9k_hw_common(ah);
-- bool ret;
-+ bool ret = true;
-
- ieee80211_stop_queues(sc->hw);
-
-@@ -245,10 +245,13 @@ static bool ath_prepare_reset(struct ath_softc *sc, bool retry_tx, bool flush)
- ath9k_debug_samp_bb_mac(sc);
- ath9k_hw_disable_interrupts(ah);
-
-- ret = ath_drain_all_txq(sc, retry_tx);
--
-- if (!ath_stoprecv(sc))
-- ret = false;
-+ if (AR_SREV_9300_20_OR_LATER(ah)) {
-+ ret &= ath_stoprecv(sc);
-+ ret &= ath_drain_all_txq(sc, retry_tx);
-+ } else {
-+ ret &= ath_drain_all_txq(sc, retry_tx);
-+ ret &= ath_stoprecv(sc);
-+ }
-
- if (!flush) {
- if (ah->caps.hw_caps & ATH9K_HW_CAP_EDMA)
-diff --git a/drivers/pcmcia/topic.h b/drivers/pcmcia/topic.h
-index 615a45a..582688fe 100644
---- a/drivers/pcmcia/topic.h
-+++ b/drivers/pcmcia/topic.h
-@@ -104,6 +104,9 @@
- #define TOPIC_EXCA_IF_CONTROL 0x3e /* 8 bit */
- #define TOPIC_EXCA_IFC_33V_ENA 0x01
-
-+#define TOPIC_PCI_CFG_PPBCN 0x3e /* 16-bit */
-+#define TOPIC_PCI_CFG_PPBCN_WBEN 0x0400
-+
- static void topic97_zoom_video(struct pcmcia_socket *sock, int onoff)
- {
- struct yenta_socket *socket = container_of(sock, struct yenta_socket, socket);
-@@ -138,6 +141,7 @@ static int topic97_override(struct yenta_socket *socket)
- static int topic95_override(struct yenta_socket *socket)
- {
- u8 fctrl;
-+ u16 ppbcn;
-
- /* enable 3.3V support for 16bit cards */
- fctrl = exca_readb(socket, TOPIC_EXCA_IF_CONTROL);
-@@ -146,6 +150,18 @@ static int topic95_override(struct yenta_socket *socket)
- /* tell yenta to use exca registers to power 16bit cards */
- socket->flags |= YENTA_16BIT_POWER_EXCA | YENTA_16BIT_POWER_DF;
-
-+ /* Disable write buffers to prevent lockups under load with numerous
-+ Cardbus cards, observed on Tecra 500CDT and reported elsewhere on the
-+ net. This is not a power-on default according to the datasheet
-+ but some BIOSes seem to set it. */
-+ if (pci_read_config_word(socket->dev, TOPIC_PCI_CFG_PPBCN, &ppbcn) == 0
-+ && socket->dev->revision <= 7
-+ && (ppbcn & TOPIC_PCI_CFG_PPBCN_WBEN)) {
-+ ppbcn &= ~TOPIC_PCI_CFG_PPBCN_WBEN;
-+ pci_write_config_word(socket->dev, TOPIC_PCI_CFG_PPBCN, ppbcn);
-+ dev_info(&socket->dev->dev, "Disabled ToPIC95 Cardbus write buffers.\n");
-+ }
-+
- return 0;
- }
-
-diff --git a/drivers/platform/x86/dell-laptop.c b/drivers/platform/x86/dell-laptop.c
-index 1d3bcce..e57f5de 100644
---- a/drivers/platform/x86/dell-laptop.c
-+++ b/drivers/platform/x86/dell-laptop.c
-@@ -215,7 +215,6 @@ static struct dmi_system_id __devinitdata dell_quirks[] = {
- };
-
- static struct calling_interface_buffer *buffer;
--static struct page *bufferpage;
- static DEFINE_MUTEX(buffer_mutex);
-
- static int hwswitch_state;
-@@ -715,11 +714,10 @@ static int __init dell_init(void)
- * Allocate buffer below 4GB for SMI data--only 32-bit physical addr
- * is passed to SMI handler.
- */
-- bufferpage = alloc_page(GFP_KERNEL | GFP_DMA32);
-+ buffer = (void *)__get_free_page(GFP_KERNEL | GFP_DMA32);
-
-- if (!bufferpage)
-+ if (!buffer)
- goto fail_buffer;
-- buffer = page_address(bufferpage);
-
- ret = dell_setup_rfkill();
-
-@@ -788,7 +786,7 @@ fail_backlight:
- fail_filter:
- dell_cleanup_rfkill();
- fail_rfkill:
-- free_page((unsigned long)bufferpage);
-+ free_page((unsigned long)buffer);
- fail_buffer:
- platform_device_del(platform_device);
- fail_platform_device2:
-diff --git a/drivers/platform/x86/ideapad-laptop.c b/drivers/platform/x86/ideapad-laptop.c
-index a36addf..04a6928 100644
---- a/drivers/platform/x86/ideapad-laptop.c
-+++ b/drivers/platform/x86/ideapad-laptop.c
-@@ -407,7 +407,8 @@ const struct ideapad_rfk_data ideapad_rfk_data[] = {
-
- static int ideapad_rfk_set(void *data, bool blocked)
- {
-- unsigned long opcode = (unsigned long)data;
-+ unsigned long dev = (unsigned long)data;
-+ int opcode = ideapad_rfk_data[dev].opcode;
-
- return write_ec_cmd(ideapad_handle, opcode, !blocked);
- }
-diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c
-index adba3d6..2dd9838 100644
---- a/drivers/regulator/core.c
-+++ b/drivers/regulator/core.c
-@@ -726,7 +726,7 @@ static int suspend_prepare(struct regulator_dev *rdev, suspend_state_t state)
- static void print_constraints(struct regulator_dev *rdev)
- {
- struct regulation_constraints *constraints = rdev->constraints;
-- char buf[80] = "";
-+ char buf[160] = "";
- int count = 0;
- int ret;
-
-diff --git a/drivers/scsi/ipr.h b/drivers/scsi/ipr.h
-index ac84736..a9932bd 100644
---- a/drivers/scsi/ipr.h
-+++ b/drivers/scsi/ipr.h
-@@ -251,7 +251,7 @@
- #define IPR_RUNTIME_RESET 0x40000000
-
- #define IPR_IPL_INIT_MIN_STAGE_TIME 5
--#define IPR_IPL_INIT_DEFAULT_STAGE_TIME 15
-+#define IPR_IPL_INIT_DEFAULT_STAGE_TIME 30
- #define IPR_IPL_INIT_STAGE_UNKNOWN 0x0
- #define IPR_IPL_INIT_STAGE_TRANSOP 0xB0000000
- #define IPR_IPL_INIT_STAGE_MASK 0xff000000
-diff --git a/drivers/staging/iio/dac/ad5624r_spi.c b/drivers/staging/iio/dac/ad5624r_spi.c
-index 284d8790..8e81fce 100644
---- a/drivers/staging/iio/dac/ad5624r_spi.c
-+++ b/drivers/staging/iio/dac/ad5624r_spi.c
-@@ -49,7 +49,7 @@ static const struct ad5624r_chip_info ad5624r_chip_info_tbl[] = {
- };
-
- static int ad5624r_spi_write(struct spi_device *spi,
-- u8 cmd, u8 addr, u16 val, u8 len)
-+ u8 cmd, u8 addr, u16 val, u8 shift)
- {
- u32 data;
- u8 msg[3];
-@@ -62,7 +62,7 @@ static int ad5624r_spi_write(struct spi_device *spi,
- * 14-, 12-bit input code followed by 0, 2, or 4 don't care bits,
- * for the AD5664R, AD5644R, and AD5624R, respectively.
- */
-- data = (0 << 22) | (cmd << 19) | (addr << 16) | (val << (16 - len));
-+ data = (0 << 22) | (cmd << 19) | (addr << 16) | (val << shift);
- msg[0] = data >> 16;
- msg[1] = data >> 8;
- msg[2] = data;
-diff --git a/drivers/staging/rtl8712/rtl8712_recv.c b/drivers/staging/rtl8712/rtl8712_recv.c
-index 6d69265..a33bece 100644
---- a/drivers/staging/rtl8712/rtl8712_recv.c
-+++ b/drivers/staging/rtl8712/rtl8712_recv.c
-@@ -1076,7 +1076,8 @@ static int recvbuf2recvframe(struct _adapter *padapter, struct sk_buff *pskb)
- /* for first fragment packet, driver need allocate 1536 +
- * drvinfo_sz + RXDESC_SIZE to defrag packet. */
- if ((mf == 1) && (frag == 0))
-- alloc_sz = 1658;/*1658+6=1664, 1664 is 128 alignment.*/
-+ /*1658+6=1664, 1664 is 128 alignment.*/
-+ alloc_sz = max_t(u16, tmp_len, 1658);
- else
- alloc_sz = tmp_len;
- /* 2 is for IP header 4 bytes alignment in QoS packet case.
-diff --git a/drivers/staging/vt6655/device_main.c b/drivers/staging/vt6655/device_main.c
-index d540a06..077c506 100644
---- a/drivers/staging/vt6655/device_main.c
-+++ b/drivers/staging/vt6655/device_main.c
-@@ -1602,6 +1602,10 @@ static int device_rx_srv(PSDevice pDevice, unsigned int uIdx) {
- // DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "pDevice->pCurrRD = %x, works = %d\n", pRD, works);
- if (works++>15)
- break;
-+
-+ if (!pRD->pRDInfo->skb)
-+ break;
-+
- if (device_receive_frame(pDevice, pRD)) {
- if (!device_alloc_rx_buf(pDevice,pRD)) {
- DBG_PRT(MSG_LEVEL_ERR, KERN_ERR
-diff --git a/drivers/target/iscsi/iscsi_target.c b/drivers/target/iscsi/iscsi_target.c
-index ae4e7da..59fb984 100644
---- a/drivers/target/iscsi/iscsi_target.c
-+++ b/drivers/target/iscsi/iscsi_target.c
-@@ -4509,6 +4509,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);
-@@ -4530,14 +4531,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/tty/serial/atmel_serial.c b/drivers/tty/serial/atmel_serial.c
-index 99fcb8c..9645186 100644
---- a/drivers/tty/serial/atmel_serial.c
-+++ b/drivers/tty/serial/atmel_serial.c
-@@ -229,8 +229,7 @@ void atmel_config_rs485(struct uart_port *port, struct serial_rs485 *rs485conf)
- if (rs485conf->flags & SER_RS485_ENABLED) {
- dev_dbg(port->dev, "Setting UART to RS485\n");
- atmel_port->tx_done_mask = ATMEL_US_TXEMPTY;
-- if ((rs485conf->delay_rts_after_send) > 0)
-- UART_PUT_TTGR(port, rs485conf->delay_rts_after_send);
-+ UART_PUT_TTGR(port, rs485conf->delay_rts_after_send);
- mode |= ATMEL_US_USMODE_RS485;
- } else {
- dev_dbg(port->dev, "Setting UART to RS232\n");
-@@ -305,9 +304,7 @@ static void atmel_set_mctrl(struct uart_port *port, u_int mctrl)
-
- if (atmel_port->rs485.flags & SER_RS485_ENABLED) {
- dev_dbg(port->dev, "Setting UART to RS485\n");
-- if ((atmel_port->rs485.delay_rts_after_send) > 0)
-- UART_PUT_TTGR(port,
-- atmel_port->rs485.delay_rts_after_send);
-+ UART_PUT_TTGR(port, atmel_port->rs485.delay_rts_after_send);
- mode |= ATMEL_US_USMODE_RS485;
- } else {
- dev_dbg(port->dev, "Setting UART to RS232\n");
-@@ -1229,9 +1226,7 @@ static void atmel_set_termios(struct uart_port *port, struct ktermios *termios,
-
- if (atmel_port->rs485.flags & SER_RS485_ENABLED) {
- dev_dbg(port->dev, "Setting UART to RS485\n");
-- if ((atmel_port->rs485.delay_rts_after_send) > 0)
-- UART_PUT_TTGR(port,
-- atmel_port->rs485.delay_rts_after_send);
-+ UART_PUT_TTGR(port, atmel_port->rs485.delay_rts_after_send);
- mode |= ATMEL_US_USMODE_RS485;
- } else {
- dev_dbg(port->dev, "Setting UART to RS232\n");
-diff --git a/drivers/usb/class/cdc-acm.c b/drivers/usb/class/cdc-acm.c
-index 57d6302..ca666d0 100644
---- a/drivers/usb/class/cdc-acm.c
-+++ b/drivers/usb/class/cdc-acm.c
-@@ -1295,6 +1295,11 @@ skip_countries:
-
- acm_table[minor] = acm;
-
-+ if (quirks & CLEAR_HALT_CONDITIONS) {
-+ usb_clear_halt(usb_dev, usb_rcvbulkpipe(usb_dev, epread->bEndpointAddress));
-+ usb_clear_halt(usb_dev, usb_sndbulkpipe(usb_dev, epwrite->bEndpointAddress));
-+ }
-+
- return 0;
- alloc_fail7:
- for (i = 0; i < ACM_NW; i++)
-@@ -1574,6 +1579,10 @@ static const struct usb_device_id acm_ids[] = {
- .driver_info = NO_UNION_NORMAL, /* reports zero length descriptor */
- },
-
-+ { USB_DEVICE(0x2912, 0x0001), /* ATOL FPrint */
-+ .driver_info = CLEAR_HALT_CONDITIONS,
-+ },
-+
- /* Nokia S60 phones expose two ACM channels. The first is
- * a modem and is picked up by the standard AT-command
- * information below. The second is 'vendor-specific' but
-diff --git a/drivers/usb/class/cdc-acm.h b/drivers/usb/class/cdc-acm.h
-index c3f1b36..7aa5e9a 100644
---- a/drivers/usb/class/cdc-acm.h
-+++ b/drivers/usb/class/cdc-acm.h
-@@ -127,3 +127,4 @@ struct acm {
- #define NO_CAP_LINE 4
- #define NOT_A_MODEM 8
- #define NO_DATA_INTERFACE 16
-+#define CLEAR_HALT_CONDITIONS BIT(7)
-diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
-index 18286ce..7cfe286 100644
---- a/drivers/usb/core/hub.c
-+++ b/drivers/usb/core/hub.c
-@@ -2157,9 +2157,6 @@ static unsigned hub_is_wusb(struct usb_hub *hub)
- #define HUB_LONG_RESET_TIME 200
- #define HUB_RESET_TIMEOUT 800
-
--static int hub_port_reset(struct usb_hub *hub, int port1,
-- struct usb_device *udev, unsigned int delay, bool warm);
--
- /* Is a USB 3.0 port in the Inactive or Complinance Mode state?
- * Port worm reset is required to recover
- */
-@@ -2239,44 +2236,6 @@ delay:
- return -EBUSY;
- }
-
--static void hub_port_finish_reset(struct usb_hub *hub, int port1,
-- struct usb_device *udev, int *status)
--{
-- switch (*status) {
-- case 0:
-- /* TRSTRCY = 10 ms; plus some extra */
-- msleep(10 + 40);
-- if (udev) {
-- struct usb_hcd *hcd = bus_to_hcd(udev->bus);
--
-- update_devnum(udev, 0);
-- /* The xHC may think the device is already reset,
-- * so ignore the status.
-- */
-- if (hcd->driver->reset_device)
-- hcd->driver->reset_device(hcd, udev);
-- }
-- /* FALL THROUGH */
-- case -ENOTCONN:
-- case -ENODEV:
-- clear_port_feature(hub->hdev,
-- port1, USB_PORT_FEAT_C_RESET);
-- if (hub_is_superspeed(hub->hdev)) {
-- clear_port_feature(hub->hdev, port1,
-- USB_PORT_FEAT_C_BH_PORT_RESET);
-- clear_port_feature(hub->hdev, port1,
-- USB_PORT_FEAT_C_PORT_LINK_STATE);
-- clear_port_feature(hub->hdev, port1,
-- USB_PORT_FEAT_C_CONNECTION);
-- }
-- if (udev)
-- usb_set_device_state(udev, *status
-- ? USB_STATE_NOTATTACHED
-- : USB_STATE_DEFAULT);
-- break;
-- }
--}
--
- /* Handle port reset and port warm(BH) reset (for USB3 protocol ports) */
- static int hub_port_reset(struct usb_hub *hub, int port1,
- struct usb_device *udev, unsigned int delay, bool warm)
-@@ -2299,13 +2258,9 @@ static int hub_port_reset(struct usb_hub *hub, int port1,
- * If the caller hasn't explicitly requested a warm reset,
- * double check and see if one is needed.
- */
-- status = hub_port_status(hub, port1,
-- &portstatus, &portchange);
-- if (status < 0)
-- goto done;
--
-- if (hub_port_warm_reset_required(hub, portstatus))
-- warm = true;
-+ if (hub_port_status(hub, port1, &portstatus, &portchange) == 0)
-+ if (hub_port_warm_reset_required(hub, portstatus))
-+ warm = true;
- }
-
- /* Reset the port */
-@@ -2328,11 +2283,19 @@ static int hub_port_reset(struct usb_hub *hub, int port1,
-
- /* Check for disconnect or reset */
- if (status == 0 || status == -ENOTCONN || status == -ENODEV) {
-- hub_port_finish_reset(hub, port1, udev, &status);
-+ clear_port_feature(hub->hdev, port1,
-+ USB_PORT_FEAT_C_RESET);
-
- if (!hub_is_superspeed(hub->hdev))
- goto done;
-
-+ clear_port_feature(hub->hdev, port1,
-+ USB_PORT_FEAT_C_BH_PORT_RESET);
-+ clear_port_feature(hub->hdev, port1,
-+ USB_PORT_FEAT_C_PORT_LINK_STATE);
-+ clear_port_feature(hub->hdev, port1,
-+ USB_PORT_FEAT_C_CONNECTION);
-+
- /*
- * If a USB 3.0 device migrates from reset to an error
- * state, re-issue the warm reset.
-@@ -2366,6 +2329,26 @@ static int hub_port_reset(struct usb_hub *hub, int port1,
- port1);
-
- done:
-+ if (status == 0) {
-+ /* TRSTRCY = 10 ms; plus some extra */
-+ msleep(10 + 40);
-+ if (udev) {
-+ struct usb_hcd *hcd = bus_to_hcd(udev->bus);
-+
-+ update_devnum(udev, 0);
-+ /* The xHC may think the device is already reset,
-+ * so ignore the status.
-+ */
-+ if (hcd->driver->reset_device)
-+ hcd->driver->reset_device(hcd, udev);
-+
-+ usb_set_device_state(udev, USB_STATE_DEFAULT);
-+ }
-+ } else {
-+ if (udev)
-+ usb_set_device_state(udev, USB_STATE_NOTATTACHED);
-+ }
-+
- if (!hub_is_superspeed(hub->hdev))
- up_read(&ehci_cf_port_reset_rwsem);
-
-diff --git a/drivers/usb/dwc3/ep0.c b/drivers/usb/dwc3/ep0.c
-index c4134e8..24864d4 100644
---- a/drivers/usb/dwc3/ep0.c
-+++ b/drivers/usb/dwc3/ep0.c
-@@ -498,6 +498,10 @@ static int dwc3_ep0_std_request(struct dwc3 *dwc, struct usb_ctrlrequest *ctrl)
- dev_vdbg(dwc->dev, "USB_REQ_SET_CONFIGURATION\n");
- ret = dwc3_ep0_set_config(dwc, ctrl);
- break;
-+ case USB_REQ_SET_INTERFACE:
-+ dev_vdbg(dwc->dev ,"USB_REQ_SET_INTERFACE");
-+ dwc->start_config_issued = false;
-+ /* Fall through */
- default:
- dev_vdbg(dwc->dev, "Forwarding to gadget driver\n");
- ret = dwc3_ep0_delegate_req(dwc, ctrl);
-diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c
-index 5f2e3d0..b4623f1 100644
---- a/drivers/usb/dwc3/gadget.c
-+++ b/drivers/usb/dwc3/gadget.c
-@@ -171,6 +171,8 @@ int dwc3_send_gadget_ep_cmd(struct dwc3 *dwc, unsigned ep,
- if (!(reg & DWC3_DEPCMD_CMDACT)) {
- dev_vdbg(dwc->dev, "Command Complete --> %d\n",
- DWC3_DEPCMD_STATUS(reg));
-+ if (DWC3_DEPCMD_STATUS(reg))
-+ return -EINVAL;
- return 0;
- }
-
-diff --git a/drivers/usb/host/xhci-hub.c b/drivers/usb/host/xhci-hub.c
-index c1fa92e..8605813 100644
---- a/drivers/usb/host/xhci-hub.c
-+++ b/drivers/usb/host/xhci-hub.c
-@@ -449,10 +449,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
-@@ -592,7 +595,14 @@ int xhci_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue,
- status |= USB_PORT_STAT_C_RESET << 16;
- /* USB3.0 only */
- if (hcd->speed == HCD_USB3) {
-- if ((temp & 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 ((temp & PORT_PLC) &&
-+ (temp & PORT_PLS_MASK) != XDEV_RESUME)
- status |= USB_PORT_STAT_C_LINK_STATE << 16;
- if ((temp & PORT_WRC))
- status |= USB_PORT_STAT_C_BH_RESET << 16;
-diff --git a/drivers/usb/host/xhci-mem.c b/drivers/usb/host/xhci-mem.c
-index 0f4a41d..d5d2af5 100644
---- a/drivers/usb/host/xhci-mem.c
-+++ b/drivers/usb/host/xhci-mem.c
-@@ -1330,10 +1330,10 @@ int xhci_endpoint_init(struct xhci_hcd *xhci,
- /* Attempt to use the ring cache */
- if (virt_dev->num_rings_cached == 0)
- return -ENOMEM;
-+ virt_dev->num_rings_cached--;
- virt_dev->eps[ep_index].new_ring =
- virt_dev->ring_cache[virt_dev->num_rings_cached];
- virt_dev->ring_cache[virt_dev->num_rings_cached] = NULL;
-- virt_dev->num_rings_cached--;
- xhci_reinit_cached_ring(xhci, virt_dev->eps[ep_index].new_ring,
- usb_endpoint_xfer_isoc(&ep->desc) ? true : false);
- }
-diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c
-index 5c535a8..950a8cc 100644
---- a/drivers/usb/host/xhci.c
-+++ b/drivers/usb/host/xhci.c
-@@ -3361,6 +3361,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/serial/cp210x.c b/drivers/usb/serial/cp210x.c
-index 073a0f98..1a19724 100644
---- a/drivers/usb/serial/cp210x.c
-+++ b/drivers/usb/serial/cp210x.c
-@@ -193,6 +193,7 @@ static const struct usb_device_id id_table[] = {
- { USB_DEVICE(0x1FB9, 0x0602) }, /* Lake Shore Model 648 Magnet Power Supply */
- { USB_DEVICE(0x1FB9, 0x0700) }, /* Lake Shore Model 737 VSM Controller */
- { USB_DEVICE(0x1FB9, 0x0701) }, /* Lake Shore Model 776 Hall Matrix */
-+ { USB_DEVICE(0x2626, 0xEA60) }, /* Aruba Networks 7xxx USB Serial Console */
- { USB_DEVICE(0x3195, 0xF190) }, /* Link Instruments MSO-19 */
- { USB_DEVICE(0x3195, 0xF280) }, /* Link Instruments MSO-28 */
- { USB_DEVICE(0x3195, 0xF281) }, /* Link Instruments MSO-28 */
-diff --git a/drivers/usb/storage/unusual_devs.h b/drivers/usb/storage/unusual_devs.h
-index 68e8552..a0c4cc4 100644
---- a/drivers/usb/storage/unusual_devs.h
-+++ b/drivers/usb/storage/unusual_devs.h
-@@ -2019,6 +2019,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 be32b1b..738707a 100644
---- a/drivers/vhost/vhost.c
-+++ b/drivers/vhost/vhost.c
-@@ -883,6 +883,7 @@ long vhost_dev_ioctl(struct vhost_dev *d, unsigned int ioctl, unsigned long arg)
- }
- 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/drivers/watchdog/omap_wdt.c b/drivers/watchdog/omap_wdt.c
-index 2b4acb8..8a93753 100644
---- a/drivers/watchdog/omap_wdt.c
-+++ b/drivers/watchdog/omap_wdt.c
-@@ -150,6 +150,13 @@ static int omap_wdt_open(struct inode *inode, struct file *file)
-
- pm_runtime_get_sync(wdev->dev);
-
-+ /*
-+ * Make sure the watchdog is disabled. This is unfortunately required
-+ * because writing to various registers with the watchdog running has no
-+ * effect.
-+ */
-+ omap_wdt_disable(wdev);
-+
- /* initialize prescaler */
- while (__raw_readl(base + OMAP_WATCHDOG_WPS) & 0x01)
- cpu_relax();
-diff --git a/fs/9p/vfs_inode.c b/fs/9p/vfs_inode.c
-index 879ed88..bf1df72 100644
---- a/fs/9p/vfs_inode.c
-+++ b/fs/9p/vfs_inode.c
-@@ -527,8 +527,7 @@ static struct inode *v9fs_qid_iget(struct super_block *sb,
- unlock_new_inode(inode);
- return inode;
- error:
-- unlock_new_inode(inode);
-- iput(inode);
-+ iget_failed(inode);
- return ERR_PTR(retval);
-
- }
-diff --git a/fs/9p/vfs_inode_dotl.c b/fs/9p/vfs_inode_dotl.c
-index 30d4fa8..dbbc83f 100644
---- a/fs/9p/vfs_inode_dotl.c
-+++ b/fs/9p/vfs_inode_dotl.c
-@@ -169,8 +169,7 @@ static struct inode *v9fs_qid_iget_dotl(struct super_block *sb,
- unlock_new_inode(inode);
- return inode;
- error:
-- unlock_new_inode(inode);
-- iput(inode);
-+ iget_failed(inode);
- return ERR_PTR(retval);
-
- }
-diff --git a/fs/btrfs/inode-map.c b/fs/btrfs/inode-map.c
-index a1fee6f..b3d1efe 100644
---- a/fs/btrfs/inode-map.c
-+++ b/fs/btrfs/inode-map.c
-@@ -244,6 +244,7 @@ void btrfs_unpin_free_ino(struct btrfs_root *root)
- {
- struct btrfs_free_space_ctl *ctl = root->free_ino_ctl;
- struct rb_root *rbroot = &root->free_ino_pinned->free_space_offset;
-+ spinlock_t *rbroot_lock = &root->free_ino_pinned->tree_lock;
- struct btrfs_free_space *info;
- struct rb_node *n;
- u64 count;
-@@ -252,24 +253,30 @@ void btrfs_unpin_free_ino(struct btrfs_root *root)
- return;
-
- while (1) {
-+ bool add_to_ctl = true;
-+
-+ spin_lock(rbroot_lock);
- n = rb_first(rbroot);
-- if (!n)
-+ if (!n) {
-+ spin_unlock(rbroot_lock);
- break;
-+ }
-
- info = rb_entry(n, struct btrfs_free_space, offset_index);
- BUG_ON(info->bitmap);
-
- if (info->offset > root->cache_progress)
-- goto free;
-+ add_to_ctl = false;
- else if (info->offset + info->bytes > root->cache_progress)
- count = root->cache_progress - info->offset + 1;
- else
- count = info->bytes;
-
-- __btrfs_add_free_space(ctl, info->offset, count);
--free:
- rb_erase(&info->offset_index, rbroot);
-- kfree(info);
-+ spin_unlock(rbroot_lock);
-+ if (add_to_ctl)
-+ __btrfs_add_free_space(ctl, info->offset, count);
-+ kmem_cache_free(btrfs_free_space_cachep, info);
- }
- }
-
-diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c
-index 52bacff..ba26540 100644
---- a/fs/btrfs/ioctl.c
-+++ b/fs/btrfs/ioctl.c
-@@ -2448,6 +2448,20 @@ static noinline long btrfs_ioctl_clone(struct file *file, unsigned long srcfd,
- new_key.offset += skip;
- }
-
-+ /*
-+ * Don't copy an inline extent into an offset
-+ * greater than zero. Having an inline extent
-+ * at such an offset results in chaos as btrfs
-+ * isn't prepared for such cases. Just skip
-+ * this case for the same reasons as commented
-+ * at btrfs_ioctl_clone().
-+ */
-+ if (new_key.offset > 0) {
-+ ret = -EOPNOTSUPP;
-+ btrfs_end_transaction(trans, root);
-+ goto out;
-+ }
-+
- if (key.offset + datal > off+len)
- trim = key.offset + datal - (off+len);
-
-diff --git a/fs/buffer.c b/fs/buffer.c
-index c457f84..7eb4da4 100644
---- a/fs/buffer.c
-+++ b/fs/buffer.c
-@@ -1002,7 +1002,7 @@ init_page_buffers(struct page *page, struct block_device *bdev,
- */
- static int
- grow_dev_page(struct block_device *bdev, sector_t block,
-- pgoff_t index, int size, int sizebits)
-+ pgoff_t index, int size, int sizebits, gfp_t gfp)
- {
- struct inode *inode = bdev->bd_inode;
- struct page *page;
-@@ -1011,7 +1011,7 @@ grow_dev_page(struct block_device *bdev, sector_t block,
- int ret = 0; /* Will call free_more_memory() */
-
- page = find_or_create_page(inode->i_mapping, index,
-- (mapping_gfp_mask(inode->i_mapping) & ~__GFP_FS)|__GFP_MOVABLE);
-+ (mapping_gfp_mask(inode->i_mapping) & ~__GFP_FS) | gfp);
- if (!page)
- return ret;
-
-@@ -1059,7 +1059,7 @@ failed:
- * that page was dirty, the buffers are set dirty also.
- */
- static int
--grow_buffers(struct block_device *bdev, sector_t block, int size)
-+grow_buffers(struct block_device *bdev, sector_t block, int size, gfp_t gfp)
- {
- pgoff_t index;
- int sizebits;
-@@ -1086,11 +1086,12 @@ grow_buffers(struct block_device *bdev, sector_t block, int size)
- }
-
- /* Create a page with the proper size buffers.. */
-- return grow_dev_page(bdev, block, index, size, sizebits);
-+ return grow_dev_page(bdev, block, index, size, sizebits, gfp);
- }
-
--static struct buffer_head *
--__getblk_slow(struct block_device *bdev, sector_t block, int size)
-+struct buffer_head *
-+__getblk_slow(struct block_device *bdev, sector_t block,
-+ unsigned size, gfp_t gfp)
- {
- /* Size must be multiple of hard sectorsize */
- if (unlikely(size & (bdev_logical_block_size(bdev)-1) ||
-@@ -1112,13 +1113,14 @@ __getblk_slow(struct block_device *bdev, sector_t block, int size)
- if (bh)
- return bh;
-
-- ret = grow_buffers(bdev, block, size);
-+ ret = grow_buffers(bdev, block, size, gfp);
- if (ret < 0)
- return NULL;
- if (ret == 0)
- free_more_memory();
- }
- }
-+EXPORT_SYMBOL(__getblk_slow);
-
- /*
- * The relationship between dirty buffers and dirty pages:
-@@ -1369,24 +1371,25 @@ __find_get_block(struct block_device *bdev, sector_t block, unsigned size)
- EXPORT_SYMBOL(__find_get_block);
-
- /*
-- * __getblk will locate (and, if necessary, create) the buffer_head
-+ * __getblk_gfp() will locate (and, if necessary, create) the buffer_head
- * which corresponds to the passed block_device, block and size. The
- * returned buffer has its reference count incremented.
- *
-- * __getblk() will lock up the machine if grow_dev_page's try_to_free_buffers()
-- * attempt is failing. FIXME, perhaps?
-+ * __getblk_gfp() will lock up the machine if grow_dev_page's
-+ * try_to_free_buffers() attempt is failing. FIXME, perhaps?
- */
- struct buffer_head *
--__getblk(struct block_device *bdev, sector_t block, unsigned size)
-+__getblk_gfp(struct block_device *bdev, sector_t block,
-+ unsigned size, gfp_t gfp)
- {
- struct buffer_head *bh = __find_get_block(bdev, block, size);
-
- might_sleep();
- if (bh == NULL)
-- bh = __getblk_slow(bdev, block, size);
-+ bh = __getblk_slow(bdev, block, size, gfp);
- return bh;
- }
--EXPORT_SYMBOL(__getblk);
-+EXPORT_SYMBOL(__getblk_gfp);
-
- /*
- * Do async read-ahead on a buffer..
-@@ -1402,24 +1405,28 @@ void __breadahead(struct block_device *bdev, sector_t block, unsigned size)
- EXPORT_SYMBOL(__breadahead);
-
- /**
-- * __bread() - reads a specified block and returns the bh
-+ * __bread_gfp() - reads a specified block and returns the bh
- * @bdev: the block_device to read from
- * @block: number of block
- * @size: size (in bytes) to read
-- *
-+ * @gfp: page allocation flag
-+ *
- * Reads a specified block, and returns buffer head that contains it.
-+ * The page cache can be allocated from non-movable area
-+ * not to prevent page migration if you set gfp to zero.
- * It returns NULL if the block was unreadable.
- */
- struct buffer_head *
--__bread(struct block_device *bdev, sector_t block, unsigned size)
-+__bread_gfp(struct block_device *bdev, sector_t block,
-+ unsigned size, gfp_t gfp)
- {
-- struct buffer_head *bh = __getblk(bdev, block, size);
-+ struct buffer_head *bh = __getblk_gfp(bdev, block, size, gfp);
-
- if (likely(bh) && !buffer_uptodate(bh))
- bh = __bread_slow(bh);
- return bh;
- }
--EXPORT_SYMBOL(__bread);
-+EXPORT_SYMBOL(__bread_gfp);
-
- /*
- * invalidate_bh_lrus() is called rarely - but not only at unmount.
-diff --git a/fs/ext4/extents.c b/fs/ext4/extents.c
-index 2da63ab..e3d65ab 100644
---- a/fs/ext4/extents.c
-+++ b/fs/ext4/extents.c
-@@ -700,7 +700,8 @@ ext4_ext_find_extent(struct inode *inode, ext4_lblk_t block,
- path[ppos].p_depth = i;
- path[ppos].p_ext = NULL;
-
-- bh = sb_getblk(inode->i_sb, path[ppos].p_block);
-+ bh = sb_getblk_gfp(inode->i_sb, path[ppos].p_block,
-+ __GFP_MOVABLE | GFP_NOFS);
- if (unlikely(!bh)) {
- ret = -ENOMEM;
- goto err;
-@@ -905,7 +906,7 @@ static int ext4_ext_split(handle_t *handle, struct inode *inode,
- err = -EIO;
- goto cleanup;
- }
-- bh = sb_getblk(inode->i_sb, newblock);
-+ bh = sb_getblk_gfp(inode->i_sb, newblock, __GFP_MOVABLE | GFP_NOFS);
- if (!bh) {
- err = -ENOMEM;
- goto cleanup;
-@@ -1089,7 +1090,7 @@ static int ext4_ext_grow_indepth(handle_t *handle, struct inode *inode,
- if (newblock == 0)
- return err;
-
-- bh = sb_getblk(inode->i_sb, newblock);
-+ bh = sb_getblk_gfp(inode->i_sb, newblock, __GFP_MOVABLE | GFP_NOFS);
- if (!bh)
- return -ENOMEM;
- lock_buffer(bh);
-diff --git a/fs/ext4/indirect.c b/fs/ext4/indirect.c
-index 26d6dbf..ae1425a 100644
---- a/fs/ext4/indirect.c
-+++ b/fs/ext4/indirect.c
-@@ -706,7 +706,7 @@ int ext4_ind_map_blocks(handle_t *handle, struct inode *inode,
- EXT4_FEATURE_RO_COMPAT_BIGALLOC)) {
- EXT4_ERROR_INODE(inode, "Can't allocate blocks for "
- "non-extent mapped inodes with bigalloc");
-- return -ENOSPC;
-+ return -EUCLEAN;
- }
-
- goal = ext4_find_goal(inode, map->m_lblk, partial);
-diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c
-index f06857b..0610766 100644
---- a/fs/ext4/inode.c
-+++ b/fs/ext4/inode.c
-@@ -1849,18 +1849,31 @@ static int __ext4_journalled_writepage(struct page *page,
- page_bufs = page_buffers(page);
- BUG_ON(!page_bufs);
- walk_page_buffers(handle, page_bufs, 0, len, NULL, bget_one);
-- /* As soon as we unlock the page, it can go away, but we have
-- * references to buffers so we are safe */
-+ /*
-+ * We need to release the page lock before we start the
-+ * journal, so grab a reference so the page won't disappear
-+ * out from under us.
-+ */
-+ get_page(page);
- unlock_page(page);
-
- handle = ext4_journal_start(inode, ext4_writepage_trans_blocks(inode));
- if (IS_ERR(handle)) {
- ret = PTR_ERR(handle);
-- goto out;
-+ put_page(page);
-+ goto out_no_pagelock;
- }
--
- BUG_ON(!ext4_handle_valid(handle));
-
-+ lock_page(page);
-+ put_page(page);
-+ if (page->mapping != mapping) {
-+ /* The page got truncated from under us */
-+ ext4_journal_stop(handle);
-+ ret = 0;
-+ goto out;
-+ }
-+
- ret = walk_page_buffers(handle, page_bufs, 0, len, NULL,
- do_journal_get_write_access);
-
-@@ -1876,6 +1889,8 @@ static int __ext4_journalled_writepage(struct page *page,
- walk_page_buffers(handle, page_bufs, 0, len, NULL, bput_one);
- ext4_set_inode_state(inode, EXT4_STATE_JDATA);
- out:
-+ unlock_page(page);
-+out_no_pagelock:
- return ret;
- }
-
-diff --git a/fs/ext4/mballoc.c b/fs/ext4/mballoc.c
-index 5baa7ba..7c03826 100644
---- a/fs/ext4/mballoc.c
-+++ b/fs/ext4/mballoc.c
-@@ -4720,18 +4720,12 @@ do_more:
- /*
- * blocks being freed are metadata. these blocks shouldn't
- * be used until this transaction is committed
-+ *
-+ * We use __GFP_NOFAIL because ext4_free_blocks() is not allowed
-+ * to fail.
- */
-- retry:
-- new_entry = kmem_cache_alloc(ext4_free_ext_cachep, GFP_NOFS);
-- if (!new_entry) {
-- /*
-- * We use a retry loop because
-- * ext4_free_blocks() is not allowed to fail.
-- */
-- cond_resched();
-- congestion_wait(BLK_RW_ASYNC, HZ/50);
-- goto retry;
-- }
-+ new_entry = kmem_cache_alloc(ext4_free_ext_cachep,
-+ GFP_NOFS|__GFP_NOFAIL);
- new_entry->start_cluster = bit;
- new_entry->group = block_group;
- new_entry->count = count_clusters;
-diff --git a/fs/ext4/super.c b/fs/ext4/super.c
-index 422be11..be4db0e 100644
---- a/fs/ext4/super.c
-+++ b/fs/ext4/super.c
-@@ -857,6 +857,7 @@ static void ext4_put_super(struct super_block *sb)
- dump_orphan_list(sb, sbi);
- J_ASSERT(list_empty(&sbi->s_orphan));
-
-+ sync_blockdev(sb->s_bdev);
- invalidate_bdev(sb->s_bdev);
- if (sbi->journal_bdev && sbi->journal_bdev != sb->s_bdev) {
- /*
-diff --git a/fs/fuse/inode.c b/fs/fuse/inode.c
-index afc0f706..e613870 100644
---- a/fs/fuse/inode.c
-+++ b/fs/fuse/inode.c
-@@ -993,6 +993,7 @@ static int fuse_fill_super(struct super_block *sb, void *data, int silent)
- goto err_fput;
-
- fuse_conn_init(fc);
-+ fc->release = fuse_free_conn;
-
- fc->dev = sb->s_dev;
- fc->sb = sb;
-@@ -1007,7 +1008,6 @@ static int fuse_fill_super(struct super_block *sb, void *data, int silent)
- fc->dont_mask = 1;
- sb->s_flags |= MS_POSIXACL;
-
-- fc->release = fuse_free_conn;
- fc->flags = d.flags;
- fc->user_id = d.user_id;
- fc->group_id = d.group_id;
-diff --git a/fs/jbd2/checkpoint.c b/fs/jbd2/checkpoint.c
-index 16a698b..39c7059 100644
---- a/fs/jbd2/checkpoint.c
-+++ b/fs/jbd2/checkpoint.c
-@@ -478,80 +478,28 @@ out:
-
- int jbd2_cleanup_journal_tail(journal_t *journal)
- {
-- transaction_t * transaction;
- tid_t first_tid;
-- unsigned long blocknr, freed;
-+ unsigned long blocknr;
-
- if (is_journal_aborted(journal))
-- return 1;
--
-- /* OK, work out the oldest transaction remaining in the log, and
-- * the log block it starts at.
-- *
-- * If the log is now empty, we need to work out which is the
-- * next transaction ID we will write, and where it will
-- * start. */
-+ return -EIO;
-
-- write_lock(&journal->j_state_lock);
-- spin_lock(&journal->j_list_lock);
-- transaction = journal->j_checkpoint_transactions;
-- if (transaction) {
-- first_tid = transaction->t_tid;
-- blocknr = transaction->t_log_start;
-- } else if ((transaction = journal->j_committing_transaction) != NULL) {
-- first_tid = transaction->t_tid;
-- blocknr = transaction->t_log_start;
-- } else if ((transaction = journal->j_running_transaction) != NULL) {
-- first_tid = transaction->t_tid;
-- blocknr = journal->j_head;
-- } else {
-- first_tid = journal->j_transaction_sequence;
-- blocknr = journal->j_head;
-- }
-- spin_unlock(&journal->j_list_lock);
-- J_ASSERT(blocknr != 0);
--
-- /* If the oldest pinned transaction is at the tail of the log
-- already then there's not much we can do right now. */
-- if (journal->j_tail_sequence == first_tid) {
-- write_unlock(&journal->j_state_lock);
-+ if (!jbd2_journal_get_log_tail(journal, &first_tid, &blocknr))
- return 1;
-- }
--
-- /* OK, update the superblock to recover the freed space.
-- * Physical blocks come first: have we wrapped beyond the end of
-- * the log? */
-- freed = blocknr - journal->j_tail;
-- if (blocknr < journal->j_tail)
-- freed = freed + journal->j_last - journal->j_first;
--
-- trace_jbd2_cleanup_journal_tail(journal, first_tid, blocknr, freed);
-- jbd_debug(1,
-- "Cleaning journal tail from %d to %d (offset %lu), "
-- "freeing %lu\n",
-- journal->j_tail_sequence, first_tid, blocknr, freed);
--
-- journal->j_free += freed;
-- journal->j_tail_sequence = first_tid;
-- journal->j_tail = blocknr;
-- write_unlock(&journal->j_state_lock);
-+ J_ASSERT(blocknr != 0);
-
- /*
-- * If there is an external journal, we need to make sure that
-- * any data blocks that were recently written out --- perhaps
-- * by jbd2_log_do_checkpoint() --- are flushed out before we
-- * drop the transactions from the external journal. It's
-- * unlikely this will be necessary, especially with a
-- * appropriately sized journal, but we need this to guarantee
-- * correctness. Fortunately jbd2_cleanup_journal_tail()
-- * doesn't get called all that often.
-+ * We need to make sure that any blocks that were recently written out
-+ * --- perhaps by jbd2_log_do_checkpoint() --- are flushed out before
-+ * we drop the transactions from the journal. It's unlikely this will
-+ * be necessary, especially with an appropriately sized journal, but we
-+ * need this to guarantee correctness. Fortunately
-+ * jbd2_cleanup_journal_tail() doesn't get called all that often.
- */
-- if ((journal->j_fs_dev != journal->j_dev) &&
-- (journal->j_flags & JBD2_BARRIER))
-- blkdev_issue_flush(journal->j_fs_dev, GFP_KERNEL, NULL);
-- if (!(journal->j_flags & JBD2_ABORT))
-- jbd2_journal_update_superblock(journal, 1);
-- return 0;
-+ if (journal->j_flags & JBD2_BARRIER)
-+ blkdev_issue_flush(journal->j_fs_dev, GFP_NOFS, NULL);
-+
-+ return __jbd2_update_log_tail(journal, first_tid, blocknr);
- }
-
-
-diff --git a/fs/jbd2/commit.c b/fs/jbd2/commit.c
-index ab9463a..bccb605 100644
---- a/fs/jbd2/commit.c
-+++ b/fs/jbd2/commit.c
-@@ -340,7 +340,16 @@ void jbd2_journal_commit_transaction(journal_t *journal)
- /* Do we need to erase the effects of a prior jbd2_journal_flush? */
- if (journal->j_flags & JBD2_FLUSHED) {
- jbd_debug(3, "super block updated\n");
-- jbd2_journal_update_superblock(journal, 1);
-+ /*
-+ * We hold j_checkpoint_mutex so tail cannot change under us.
-+ * We don't need any special data guarantees for writing sb
-+ * since journal is empty and it is ok for write to be
-+ * flushed only with transaction commit.
-+ */
-+ jbd2_journal_update_sb_log_tail(journal,
-+ journal->j_tail_sequence,
-+ journal->j_tail,
-+ WRITE_SYNC);
- } else {
- jbd_debug(3, "superblock not updated\n");
- }
-diff --git a/fs/jbd2/journal.c b/fs/jbd2/journal.c
-index 17b04fc..9532dac 100644
---- a/fs/jbd2/journal.c
-+++ b/fs/jbd2/journal.c
-@@ -775,6 +775,92 @@ struct journal_head *jbd2_journal_get_descriptor_buffer(journal_t *journal)
- return jbd2_journal_add_journal_head(bh);
- }
-
-+/*
-+ * Return tid of the oldest transaction in the journal and block in the journal
-+ * where the transaction starts.
-+ *
-+ * If the journal is now empty, return which will be the next transaction ID
-+ * we will write and where will that transaction start.
-+ *
-+ * The return value is 0 if journal tail cannot be pushed any further, 1 if
-+ * it can.
-+ */
-+int jbd2_journal_get_log_tail(journal_t *journal, tid_t *tid,
-+ unsigned long *block)
-+{
-+ transaction_t *transaction;
-+ int ret;
-+
-+ read_lock(&journal->j_state_lock);
-+ spin_lock(&journal->j_list_lock);
-+ transaction = journal->j_checkpoint_transactions;
-+ if (transaction) {
-+ *tid = transaction->t_tid;
-+ *block = transaction->t_log_start;
-+ } else if ((transaction = journal->j_committing_transaction) != NULL) {
-+ *tid = transaction->t_tid;
-+ *block = transaction->t_log_start;
-+ } else if ((transaction = journal->j_running_transaction) != NULL) {
-+ *tid = transaction->t_tid;
-+ *block = journal->j_head;
-+ } else {
-+ *tid = journal->j_transaction_sequence;
-+ *block = journal->j_head;
-+ }
-+ ret = tid_gt(*tid, journal->j_tail_sequence);
-+ spin_unlock(&journal->j_list_lock);
-+ read_unlock(&journal->j_state_lock);
-+
-+ return ret;
-+}
-+
-+/*
-+ * Update information in journal structure and in on disk journal superblock
-+ * about log tail. This function does not check whether information passed in
-+ * really pushes log tail further. It's responsibility of the caller to make
-+ * sure provided log tail information is valid (e.g. by holding
-+ * j_checkpoint_mutex all the time between computing log tail and calling this
-+ * function as is the case with jbd2_cleanup_journal_tail()).
-+ *
-+ * Requires j_checkpoint_mutex
-+ */
-+int __jbd2_update_log_tail(journal_t *journal, tid_t tid, unsigned long block)
-+{
-+ unsigned long freed;
-+ int ret;
-+
-+ BUG_ON(!mutex_is_locked(&journal->j_checkpoint_mutex));
-+
-+ /*
-+ * We cannot afford for write to remain in drive's caches since as
-+ * soon as we update j_tail, next transaction can start reusing journal
-+ * space and if we lose sb update during power failure we'd replay
-+ * old transaction with possibly newly overwritten data.
-+ */
-+ ret = jbd2_journal_update_sb_log_tail(journal, tid, block, WRITE_FUA);
-+ if (ret)
-+ goto out;
-+
-+ write_lock(&journal->j_state_lock);
-+ freed = block - journal->j_tail;
-+ if (block < journal->j_tail)
-+ freed += journal->j_last - journal->j_first;
-+
-+ trace_jbd2_update_log_tail(journal, tid, block, freed);
-+ jbd_debug(1,
-+ "Cleaning journal tail from %d to %d (offset %lu), "
-+ "freeing %lu\n",
-+ journal->j_tail_sequence, tid, block, freed);
-+
-+ journal->j_free += freed;
-+ journal->j_tail_sequence = tid;
-+ journal->j_tail = block;
-+ write_unlock(&journal->j_state_lock);
-+
-+out:
-+ return ret;
-+}
-+
- struct jbd2_stats_proc_session {
- journal_t *journal;
- struct transaction_stats_s *stats;
-@@ -1143,40 +1229,41 @@ static int journal_reset(journal_t *journal)
-
- journal->j_max_transaction_buffers = journal->j_maxlen / 4;
-
-- /* Add the dynamic fields and write it to disk. */
-- jbd2_journal_update_superblock(journal, 1);
-- return jbd2_journal_start_thread(journal);
--}
--
--/**
-- * void jbd2_journal_update_superblock() - Update journal sb on disk.
-- * @journal: The journal to update.
-- * @wait: Set to '0' if you don't want to wait for IO completion.
-- *
-- * Update a journal's dynamic superblock fields and write it to disk,
-- * optionally waiting for the IO to complete.
-- */
--void jbd2_journal_update_superblock(journal_t *journal, int wait)
--{
-- journal_superblock_t *sb = journal->j_superblock;
-- struct buffer_head *bh = journal->j_sb_buffer;
--
- /*
- * As a special case, if the on-disk copy is already marked as needing
-- * no recovery (s_start == 0) and there are no outstanding transactions
-- * in the filesystem, then we can safely defer the superblock update
-- * until the next commit by setting JBD2_FLUSHED. This avoids
-+ * no recovery (s_start == 0), then we can safely defer the superblock
-+ * update until the next commit by setting JBD2_FLUSHED. This avoids
- * attempting a write to a potential-readonly device.
- */
-- if (sb->s_start == 0 && journal->j_tail_sequence ==
-- journal->j_transaction_sequence) {
-+ if (sb->s_start == 0) {
- jbd_debug(1, "JBD2: Skipping superblock update on recovered sb "
- "(start %ld, seq %d, errno %d)\n",
- journal->j_tail, journal->j_tail_sequence,
- journal->j_errno);
-- goto out;
-+ journal->j_flags |= JBD2_FLUSHED;
-+ } else {
-+ /*
-+ * Update log tail information. We use WRITE_FUA since new
-+ * transaction will start reusing journal space and so we
-+ * must make sure information about current log tail is on
-+ * disk before that.
-+ */
-+ jbd2_journal_update_sb_log_tail(journal,
-+ journal->j_tail_sequence,
-+ journal->j_tail,
-+ WRITE_FUA);
- }
-+ return jbd2_journal_start_thread(journal);
-+}
-
-+static int jbd2_write_superblock(journal_t *journal, int write_op)
-+{
-+ struct buffer_head *bh = journal->j_sb_buffer;
-+ int ret;
-+
-+ if (!(journal->j_flags & JBD2_BARRIER))
-+ write_op &= ~(REQ_FUA | REQ_FLUSH);
-+ lock_buffer(bh);
- if (buffer_write_io_error(bh)) {
- /*
- * Oh, dear. A previous attempt to write the journal
-@@ -1192,48 +1279,112 @@ void jbd2_journal_update_superblock(journal_t *journal, int wait)
- clear_buffer_write_io_error(bh);
- set_buffer_uptodate(bh);
- }
-+ get_bh(bh);
-+ bh->b_end_io = end_buffer_write_sync;
-+ ret = submit_bh(write_op, bh);
-+ wait_on_buffer(bh);
-+ if (buffer_write_io_error(bh)) {
-+ clear_buffer_write_io_error(bh);
-+ set_buffer_uptodate(bh);
-+ ret = -EIO;
-+ }
-+ if (ret) {
-+ printk(KERN_ERR "JBD2: Error %d detected when updating "
-+ "journal superblock for %s.\n", ret,
-+ journal->j_devname);
-+ jbd2_journal_abort(journal, ret);
-+ }
-+
-+ return ret;
-+}
-+
-+/**
-+ * jbd2_journal_update_sb_log_tail() - Update log tail in journal sb on disk.
-+ * @journal: The journal to update.
-+ * @tail_tid: TID of the new transaction at the tail of the log
-+ * @tail_block: The first block of the transaction at the tail of the log
-+ * @write_op: With which operation should we write the journal sb
-+ *
-+ * Update a journal's superblock information about log tail and write it to
-+ * disk, waiting for the IO to complete.
-+ */
-+int jbd2_journal_update_sb_log_tail(journal_t *journal, tid_t tail_tid,
-+ unsigned long tail_block, int write_op)
-+{
-+ journal_superblock_t *sb = journal->j_superblock;
-+ int ret;
-+
-+ jbd_debug(1, "JBD2: updating superblock (start %lu, seq %u)\n",
-+ tail_block, tail_tid);
-+
-+ sb->s_sequence = cpu_to_be32(tail_tid);
-+ sb->s_start = cpu_to_be32(tail_block);
-+
-+ ret = jbd2_write_superblock(journal, write_op);
-+ if (ret)
-+ goto out;
-+ /* Log is no longer empty */
-+ write_lock(&journal->j_state_lock);
-+ WARN_ON(!sb->s_sequence);
-+ journal->j_flags &= ~JBD2_FLUSHED;
-+ write_unlock(&journal->j_state_lock);
-+
-+out:
-+ return ret;
-+}
-+
-+/**
-+ * jbd2_mark_journal_empty() - Mark on disk journal as empty.
-+ * @journal: The journal to update.
-+ *
-+ * Update a journal's dynamic superblock fields to show that journal is empty.
-+ * Write updated superblock to disk waiting for IO to complete.
-+ */
-+static void jbd2_mark_journal_empty(journal_t *journal)
-+{
-+ journal_superblock_t *sb = journal->j_superblock;
-
- read_lock(&journal->j_state_lock);
-- jbd_debug(1, "JBD2: updating superblock (start %ld, seq %d, errno %d)\n",
-- journal->j_tail, journal->j_tail_sequence, journal->j_errno);
-+ jbd_debug(1, "JBD2: Marking journal as empty (seq %d)\n",
-+ journal->j_tail_sequence);
-
- sb->s_sequence = cpu_to_be32(journal->j_tail_sequence);
-- sb->s_start = cpu_to_be32(journal->j_tail);
-- sb->s_errno = cpu_to_be32(journal->j_errno);
-+ sb->s_start = cpu_to_be32(0);
- read_unlock(&journal->j_state_lock);
-
-- BUFFER_TRACE(bh, "marking dirty");
-- mark_buffer_dirty(bh);
-- if (wait) {
-- sync_dirty_buffer(bh);
-- if (buffer_write_io_error(bh)) {
-- printk(KERN_ERR "JBD2: I/O error detected "
-- "when updating journal superblock for %s.\n",
-- journal->j_devname);
-- clear_buffer_write_io_error(bh);
-- set_buffer_uptodate(bh);
-- }
-- } else
-- write_dirty_buffer(bh, WRITE);
--
--out:
-- /* If we have just flushed the log (by marking s_start==0), then
-- * any future commit will have to be careful to update the
-- * superblock again to re-record the true start of the log. */
-+ jbd2_write_superblock(journal, WRITE_FUA);
-
-+ /* Log is no longer empty */
- write_lock(&journal->j_state_lock);
-- if (sb->s_start)
-- journal->j_flags &= ~JBD2_FLUSHED;
-- else
-- journal->j_flags |= JBD2_FLUSHED;
-+ journal->j_flags |= JBD2_FLUSHED;
- write_unlock(&journal->j_state_lock);
- }
-
-+
-+/**
-+ * jbd2_journal_update_sb_errno() - Update error in the journal.
-+ * @journal: The journal to update.
-+ *
-+ * Update a journal's errno. Write updated superblock to disk waiting for IO
-+ * to complete.
-+ */
-+static void jbd2_journal_update_sb_errno(journal_t *journal)
-+{
-+ journal_superblock_t *sb = journal->j_superblock;
-+
-+ read_lock(&journal->j_state_lock);
-+ jbd_debug(1, "JBD2: updating superblock error (errno %d)\n",
-+ journal->j_errno);
-+ sb->s_errno = cpu_to_be32(journal->j_errno);
-+ read_unlock(&journal->j_state_lock);
-+
-+ jbd2_write_superblock(journal, WRITE_SYNC);
-+}
-+
- /*
- * Read the superblock for a given journal, performing initial
- * validation of the format.
- */
--
- static int journal_get_superblock(journal_t *journal)
- {
- struct buffer_head *bh;
-@@ -1426,15 +1577,10 @@ int jbd2_journal_destroy(journal_t *journal)
- spin_unlock(&journal->j_list_lock);
-
- if (journal->j_sb_buffer) {
-- if (!is_journal_aborted(journal)) {
-- /* We can now mark the journal as empty. */
-- journal->j_tail = 0;
-- journal->j_tail_sequence =
-- ++journal->j_transaction_sequence;
-- jbd2_journal_update_superblock(journal, 1);
-- } else {
-+ if (!is_journal_aborted(journal))
-+ jbd2_mark_journal_empty(journal);
-+ else
- err = -EIO;
-- }
- brelse(journal->j_sb_buffer);
- }
-
-@@ -1648,7 +1794,6 @@ int jbd2_journal_flush(journal_t *journal)
- {
- int err = 0;
- transaction_t *transaction = NULL;
-- unsigned long old_tail;
-
- write_lock(&journal->j_state_lock);
-
-@@ -1683,28 +1828,28 @@ int jbd2_journal_flush(journal_t *journal)
- if (is_journal_aborted(journal))
- return -EIO;
-
-- jbd2_cleanup_journal_tail(journal);
-+ if (!err) {
-+ err = jbd2_cleanup_journal_tail(journal);
-+ if (err < 0)
-+ goto out;
-+ err = 0;
-+ }
-
- /* Finally, mark the journal as really needing no recovery.
- * This sets s_start==0 in the underlying superblock, which is
- * the magic code for a fully-recovered superblock. Any future
- * commits of data to the journal will restore the current
- * s_start value. */
-+ jbd2_mark_journal_empty(journal);
- write_lock(&journal->j_state_lock);
-- old_tail = journal->j_tail;
-- journal->j_tail = 0;
-- write_unlock(&journal->j_state_lock);
-- jbd2_journal_update_superblock(journal, 1);
-- write_lock(&journal->j_state_lock);
-- journal->j_tail = old_tail;
--
- J_ASSERT(!journal->j_running_transaction);
- J_ASSERT(!journal->j_committing_transaction);
- J_ASSERT(!journal->j_checkpoint_transactions);
- J_ASSERT(journal->j_head == journal->j_tail);
- J_ASSERT(journal->j_tail_sequence == journal->j_transaction_sequence);
- write_unlock(&journal->j_state_lock);
-- return 0;
-+out:
-+ return err;
- }
-
- /**
-@@ -1738,7 +1883,7 @@ int jbd2_journal_wipe(journal_t *journal, int write)
-
- err = jbd2_journal_skip_recovery(journal);
- if (write)
-- jbd2_journal_update_superblock(journal, 1);
-+ jbd2_mark_journal_empty(journal);
-
- no_recovery:
- return err;
-@@ -1788,7 +1933,7 @@ static void __journal_abort_soft (journal_t *journal, int errno)
- __jbd2_journal_abort_hard(journal);
-
- if (errno)
-- jbd2_journal_update_superblock(journal, 1);
-+ jbd2_journal_update_sb_errno(journal);
- }
-
- /**
-diff --git a/fs/jbd2/recovery.c b/fs/jbd2/recovery.c
-index 421834b..875df5f 100644
---- a/fs/jbd2/recovery.c
-+++ b/fs/jbd2/recovery.c
-@@ -21,6 +21,7 @@
- #include <linux/jbd2.h>
- #include <linux/errno.h>
- #include <linux/crc32.h>
-+#include <linux/blkdev.h>
- #endif
-
- /*
-@@ -265,7 +266,9 @@ int jbd2_journal_recover(journal_t *journal)
- err2 = sync_blockdev(journal->j_fs_dev);
- if (!err)
- err = err2;
--
-+ /* Make sure all replayed data is on permanent storage */
-+ if (journal->j_flags & JBD2_BARRIER)
-+ blkdev_issue_flush(journal->j_fs_dev, GFP_KERNEL, NULL);
- return err;
- }
-
-diff --git a/fs/nfs/nfs3xdr.c b/fs/nfs/nfs3xdr.c
-index 183c6b1..bee14a3 100644
---- a/fs/nfs/nfs3xdr.c
-+++ b/fs/nfs/nfs3xdr.c
-@@ -1333,7 +1333,7 @@ static void nfs3_xdr_enc_setacl3args(struct rpc_rqst *req,
- if (args->npages != 0)
- xdr_write_pages(xdr, args->pages, 0, args->len);
- else
-- xdr_reserve_space(xdr, NFS_ACL_INLINE_BUFSIZE);
-+ xdr_reserve_space(xdr, args->len);
-
- error = nfsacl_encode(xdr->buf, base, args->inode,
- (args->mask & NFS_ACL) ?
-diff --git a/fs/nfs/nfs4state.c b/fs/nfs/nfs4state.c
-index ce4168a..cd55214 100644
---- a/fs/nfs/nfs4state.c
-+++ b/fs/nfs/nfs4state.c
-@@ -1192,6 +1192,8 @@ restart:
- }
- spin_unlock(&state->state_lock);
- nfs4_put_open_state(state);
-+ clear_bit(NFS4CLNT_RECLAIM_NOGRACE,
-+ &state->flags);
- goto restart;
- }
- }
-diff --git a/include/acpi/actypes.h b/include/acpi/actypes.h
-index b0d7ef8..31a0f4b 100644
---- a/include/acpi/actypes.h
-+++ b/include/acpi/actypes.h
-@@ -495,6 +495,7 @@ typedef u64 acpi_integer;
- #define ACPI_NO_ACPI_ENABLE 0x10
- #define ACPI_NO_DEVICE_INIT 0x20
- #define ACPI_NO_OBJECT_INIT 0x40
-+#define ACPI_NO_FACS_INIT 0x80
-
- /*
- * Initialization state
-diff --git a/include/linux/buffer_head.h b/include/linux/buffer_head.h
-index 458f497..fed3f3a 100644
---- a/include/linux/buffer_head.h
-+++ b/include/linux/buffer_head.h
-@@ -166,12 +166,13 @@ void __wait_on_buffer(struct buffer_head *);
- wait_queue_head_t *bh_waitq_head(struct buffer_head *bh);
- struct buffer_head *__find_get_block(struct block_device *bdev, sector_t block,
- unsigned size);
--struct buffer_head *__getblk(struct block_device *bdev, sector_t block,
-- unsigned size);
-+struct buffer_head *__getblk_gfp(struct block_device *bdev, sector_t block,
-+ unsigned size, gfp_t gfp);
- void __brelse(struct buffer_head *);
- void __bforget(struct buffer_head *);
- void __breadahead(struct block_device *, sector_t block, unsigned int size);
--struct buffer_head *__bread(struct block_device *, sector_t block, unsigned size);
-+struct buffer_head *__bread_gfp(struct block_device *,
-+ sector_t block, unsigned size, gfp_t gfp);
- void invalidate_bh_lrus(void);
- struct buffer_head *alloc_buffer_head(gfp_t gfp_flags);
- void free_buffer_head(struct buffer_head * bh);
-@@ -286,7 +287,13 @@ static inline void bforget(struct buffer_head *bh)
- static inline struct buffer_head *
- sb_bread(struct super_block *sb, sector_t block)
- {
-- return __bread(sb->s_bdev, block, sb->s_blocksize);
-+ return __bread_gfp(sb->s_bdev, block, sb->s_blocksize, __GFP_MOVABLE);
-+}
-+
-+static inline struct buffer_head *
-+sb_bread_unmovable(struct super_block *sb, sector_t block)
-+{
-+ return __bread_gfp(sb->s_bdev, block, sb->s_blocksize, 0);
- }
-
- static inline void
-@@ -298,7 +305,14 @@ sb_breadahead(struct super_block *sb, sector_t block)
- static inline struct buffer_head *
- sb_getblk(struct super_block *sb, sector_t block)
- {
-- return __getblk(sb->s_bdev, block, sb->s_blocksize);
-+ return __getblk_gfp(sb->s_bdev, block, sb->s_blocksize, __GFP_MOVABLE);
-+}
-+
-+
-+static inline struct buffer_head *
-+sb_getblk_gfp(struct super_block *sb, sector_t block, gfp_t gfp)
-+{
-+ return __getblk_gfp(sb->s_bdev, block, sb->s_blocksize, gfp);
- }
-
- static inline struct buffer_head *
-@@ -335,6 +349,36 @@ static inline void lock_buffer(struct buffer_head *bh)
- __lock_buffer(bh);
- }
-
-+static inline struct buffer_head *getblk_unmovable(struct block_device *bdev,
-+ sector_t block,
-+ unsigned size)
-+{
-+ return __getblk_gfp(bdev, block, size, 0);
-+}
-+
-+static inline struct buffer_head *__getblk(struct block_device *bdev,
-+ sector_t block,
-+ unsigned size)
-+{
-+ return __getblk_gfp(bdev, block, size, __GFP_MOVABLE);
-+}
-+
-+/**
-+ * __bread() - reads a specified block and returns the bh
-+ * @bdev: the block_device to read from
-+ * @block: number of block
-+ * @size: size (in bytes) to read
-+ *
-+ * Reads a specified block, and returns buffer head that contains it.
-+ * The page cache is allocated from movable area so that it can be migrated.
-+ * It returns NULL if the block was unreadable.
-+ */
-+static inline struct buffer_head *
-+__bread(struct block_device *bdev, sector_t block, unsigned size)
-+{
-+ return __bread_gfp(bdev, block, size, __GFP_MOVABLE);
-+}
-+
- extern int __set_page_dirty_buffers(struct page *page);
-
- #else /* CONFIG_BLOCK */
-diff --git a/include/linux/jbd2.h b/include/linux/jbd2.h
-index a153ed5..4920c55 100644
---- a/include/linux/jbd2.h
-+++ b/include/linux/jbd2.h
-@@ -972,6 +972,9 @@ extern void __journal_clean_data_list(transaction_t *transaction);
- /* Log buffer allocation */
- extern struct journal_head * jbd2_journal_get_descriptor_buffer(journal_t *);
- int jbd2_journal_next_log_block(journal_t *, unsigned long long *);
-+int jbd2_journal_get_log_tail(journal_t *journal, tid_t *tid,
-+ unsigned long *block);
-+int __jbd2_update_log_tail(journal_t *journal, tid_t tid, unsigned long block);
-
- /* Commit management */
- extern void jbd2_journal_commit_transaction(journal_t *);
-@@ -1083,7 +1086,8 @@ extern int jbd2_journal_destroy (journal_t *);
- extern int jbd2_journal_recover (journal_t *journal);
- extern int jbd2_journal_wipe (journal_t *, int);
- extern int jbd2_journal_skip_recovery (journal_t *);
--extern void jbd2_journal_update_superblock (journal_t *, int);
-+extern int jbd2_journal_update_sb_log_tail (journal_t *, tid_t,
-+ unsigned long, int);
- extern void __jbd2_journal_abort_hard (journal_t *);
- extern void jbd2_journal_abort (journal_t *, int);
- extern int jbd2_journal_errno (journal_t *);
-diff --git a/include/linux/libata.h b/include/linux/libata.h
-index 3d4b5b6..000434e 100644
---- a/include/linux/libata.h
-+++ b/include/linux/libata.h
-@@ -403,6 +403,8 @@ enum {
- ATA_HORKAGE_MAX_SEC_LBA48 = (1 << 17), /* Set max sects to 65535 */
- ATA_HORKAGE_NOLPM = (1 << 20), /* don't use LPM */
- ATA_HORKAGE_WD_BROKEN_LPM = (1 << 21), /* some WDs have broken LPM */
-+ ATA_HORKAGE_NOTRIM = (1 << 24), /* don't use TRIM */
-+
-
- /* DMA mask for user DMA control: User visible values; DO NOT
- renumber */
-diff --git a/include/linux/nfs_xdr.h b/include/linux/nfs_xdr.h
-index 41116ab..d2abc34 100644
---- a/include/linux/nfs_xdr.h
-+++ b/include/linux/nfs_xdr.h
-@@ -1056,7 +1056,7 @@ struct nfs_impl_id4 {
- struct nfstime4 date;
- };
-
--#define NFS4_EXCHANGE_ID_LEN (48)
-+#define NFS4_EXCHANGE_ID_LEN (127)
- struct nfs41_exchange_id_args {
- struct nfs_client *client;
- nfs4_verifier *verifier;
-diff --git a/include/trace/events/jbd2.h b/include/trace/events/jbd2.h
-index 7596441..5c74007 100644
---- a/include/trace/events/jbd2.h
-+++ b/include/trace/events/jbd2.h
-@@ -200,7 +200,7 @@ TRACE_EVENT(jbd2_checkpoint_stats,
- __entry->forced_to_close, __entry->written, __entry->dropped)
- );
-
--TRACE_EVENT(jbd2_cleanup_journal_tail,
-+TRACE_EVENT(jbd2_update_log_tail,
-
- TP_PROTO(journal_t *journal, tid_t first_tid,
- unsigned long block_nr, unsigned long freed),
-diff --git a/kernel/hrtimer.c b/kernel/hrtimer.c
-index 20e88af..d9ce3d4 100644
---- a/kernel/hrtimer.c
-+++ b/kernel/hrtimer.c
-@@ -848,6 +848,9 @@ u64 hrtimer_forward(struct hrtimer *timer, ktime_t now, ktime_t interval)
- if (delta.tv64 < 0)
- return 0;
-
-+ if (WARN_ON(timer->state & HRTIMER_STATE_ENQUEUED))
-+ return 0;
-+
- if (interval.tv64 < timer->base->resolution.tv64)
- interval.tv64 = timer->base->resolution.tv64;
-
-@@ -1260,11 +1263,14 @@ static void __run_hrtimer(struct hrtimer *timer, ktime_t *now)
- * Note: We clear the CALLBACK bit after enqueue_hrtimer and
- * we do not reprogramm the event hardware. Happens either in
- * hrtimer_start_range_ns() or in hrtimer_interrupt()
-+ *
-+ * Note: Because we dropped the cpu_base->lock above,
-+ * hrtimer_start_range_ns() can have popped in and enqueued the timer
-+ * for us already.
- */
-- if (restart != HRTIMER_NORESTART) {
-- BUG_ON(timer->state != HRTIMER_STATE_CALLBACK);
-+ if (restart != HRTIMER_NORESTART &&
-+ !(timer->state & HRTIMER_STATE_ENQUEUED))
- enqueue_hrtimer(timer, base);
-- }
-
- WARN_ON_ONCE(!(timer->state & HRTIMER_STATE_CALLBACK));
-
-diff --git a/kernel/rcutiny.c b/kernel/rcutiny.c
-index 636af6d..bc84596 100644
---- a/kernel/rcutiny.c
-+++ b/kernel/rcutiny.c
-@@ -160,6 +160,11 @@ static void __rcu_process_callbacks(struct rcu_ctrlblk *rcp)
-
- /* Move the ready-to-invoke callbacks to a local list. */
- local_irq_save(flags);
-+ if (rcp->donetail == &rcp->rcucblist) {
-+ /* No callbacks ready, so just leave. */
-+ local_irq_restore(flags);
-+ return;
-+ }
- RCU_TRACE(trace_rcu_batch_start(rcp->name, 0, -1));
- list = rcp->rcucblist;
- rcp->rcucblist = *rcp->donetail;
-diff --git a/kernel/trace/trace_events_filter.c b/kernel/trace/trace_events_filter.c
-index 47343cc..bfeb725 100644
---- a/kernel/trace/trace_events_filter.c
-+++ b/kernel/trace/trace_events_filter.c
-@@ -1027,6 +1027,9 @@ static void parse_init(struct filter_parse_state *ps,
-
- static char infix_next(struct filter_parse_state *ps)
- {
-+ if (!ps->infix.cnt)
-+ return 0;
-+
- ps->infix.cnt--;
-
- return ps->infix.string[ps->infix.tail++];
-@@ -1042,6 +1045,9 @@ static char infix_peek(struct filter_parse_state *ps)
-
- static void infix_advance(struct filter_parse_state *ps)
- {
-+ if (!ps->infix.cnt)
-+ return;
-+
- ps->infix.cnt--;
- ps->infix.tail++;
- }
-@@ -1358,7 +1364,9 @@ static int check_preds(struct filter_parse_state *ps)
- }
- cnt--;
- n_normal_preds++;
-- WARN_ON_ONCE(cnt < 0);
-+ /* all ops should have operands */
-+ if (cnt < 0)
-+ break;
- }
-
- if (cnt != 1 || !n_normal_preds || n_logical_preds >= n_normal_preds) {
-diff --git a/lib/bitmap.c b/lib/bitmap.c
-index dbc526f..389e75e 100644
---- a/lib/bitmap.c
-+++ b/lib/bitmap.c
-@@ -601,12 +601,12 @@ static int __bitmap_parselist(const char *buf, unsigned int buflen,
- unsigned a, b;
- int c, old_c, totaldigits;
- const char __user __force *ubuf = (const char __user __force *)buf;
-- int exp_digit, in_range;
-+ int at_start, in_range;
-
- totaldigits = c = 0;
- bitmap_zero(maskp, nmaskbits);
- do {
-- exp_digit = 1;
-+ at_start = 1;
- in_range = 0;
- a = b = 0;
-
-@@ -635,11 +635,10 @@ static int __bitmap_parselist(const char *buf, unsigned int buflen,
- break;
-
- if (c == '-') {
-- if (exp_digit || in_range)
-+ if (at_start || in_range)
- return -EINVAL;
- b = 0;
- in_range = 1;
-- exp_digit = 1;
- continue;
- }
-
-@@ -649,16 +648,18 @@ static int __bitmap_parselist(const char *buf, unsigned int buflen,
- b = b * 10 + (c - '0');
- if (!in_range)
- a = b;
-- exp_digit = 0;
-+ at_start = 0;
- totaldigits++;
- }
- if (!(a <= b))
- return -EINVAL;
- if (b >= nmaskbits)
- return -ERANGE;
-- while (a <= b) {
-- set_bit(a, maskp);
-- a++;
-+ if (!at_start) {
-+ while (a <= b) {
-+ set_bit(a, maskp);
-+ a++;
-+ }
- }
- } while (buflen && c == ',');
- return 0;
-diff --git a/mm/filemap.c b/mm/filemap.c
-index 556858c..6c009c2 100644
---- a/mm/filemap.c
-+++ b/mm/filemap.c
-@@ -2007,8 +2007,8 @@ int file_remove_suid(struct file *file)
- error = security_inode_killpriv(dentry);
- if (!error && killsuid)
- error = __remove_suid(dentry, killsuid);
-- if (!error && (inode->i_sb->s_flags & MS_NOSEC))
-- inode->i_flags |= S_NOSEC;
-+ if (!error)
-+ inode_has_no_xattr(inode);
-
- return error;
- }
-diff --git a/mm/kmemleak.c b/mm/kmemleak.c
-index cc8cf1d..cbae846 100644
---- a/mm/kmemleak.c
-+++ b/mm/kmemleak.c
-@@ -192,6 +192,8 @@ static struct kmem_cache *scan_area_cache;
-
- /* set if tracing memory operations is enabled */
- static atomic_t kmemleak_enabled = ATOMIC_INIT(0);
-+/* same as above but only for the kmemleak_free() callback */
-+static int kmemleak_free_enabled;
- /* set in the late_initcall if there were no errors */
- static atomic_t kmemleak_initialized = ATOMIC_INIT(0);
- /* enables or disables early logging of the memory operations */
-@@ -885,7 +887,7 @@ void __ref kmemleak_free(const void *ptr)
- {
- pr_debug("%s(0x%p)\n", __func__, ptr);
-
-- if (atomic_read(&kmemleak_enabled) && ptr && !IS_ERR(ptr))
-+ if (kmemleak_free_enabled && ptr && !IS_ERR(ptr))
- delete_object_full((unsigned long)ptr);
- else if (atomic_read(&kmemleak_early_log))
- log_early(KMEMLEAK_FREE, ptr, 0, 0);
-@@ -1614,6 +1616,13 @@ static void kmemleak_do_cleanup(struct work_struct *work)
- mutex_lock(&scan_mutex);
- stop_scan_thread();
-
-+ /*
-+ * Once the scan thread has stopped, it is safe to no longer track
-+ * object freeing. Ordering of the scan thread stopping and the memory
-+ * accesses below is guaranteed by the kthread_stop() function.
-+ */
-+ kmemleak_free_enabled = 0;
-+
- rcu_read_lock();
- list_for_each_entry_rcu(object, &object_list, object_list)
- delete_object_full(object->pointer);
-@@ -1640,6 +1649,8 @@ static void kmemleak_disable(void)
- /* check whether it is too early for a kernel thread */
- if (atomic_read(&kmemleak_initialized))
- schedule_work(&cleanup_work);
-+ else
-+ kmemleak_free_enabled = 0;
-
- pr_info("Kernel memory leak detector disabled\n");
- }
-@@ -1688,6 +1699,7 @@ void __init kmemleak_init(void)
- if (!atomic_read(&kmemleak_error)) {
- atomic_set(&kmemleak_enabled, 1);
- atomic_set(&kmemleak_early_log, 0);
-+ kmemleak_free_enabled = 1;
- }
- local_irq_restore(flags);
-
-diff --git a/mm/memory.c b/mm/memory.c
-index 452b8ba..7762b1d 100644
---- a/mm/memory.c
-+++ b/mm/memory.c
-@@ -3153,6 +3153,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;
-@@ -3412,6 +3416,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);
- }
-
-@@ -3470,11 +3477,9 @@ int handle_pte_fault(struct mm_struct *mm,
- entry = *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/9p/client.c b/net/9p/client.c
-index 854ca7a..e958178 100644
---- a/net/9p/client.c
-+++ b/net/9p/client.c
-@@ -824,7 +824,8 @@ static struct p9_req_t *p9_client_zc_rpc(struct p9_client *c, int8_t type,
- if (err < 0) {
- if (err == -EIO)
- c->status = Disconnected;
-- goto reterr;
-+ if (err != -ERESTARTSYS)
-+ goto reterr;
- }
- if (req->status == REQ_STATUS_ERROR) {
- P9_DPRINTK(P9_DEBUG_ERROR, "req_status error %d\n", req->t_err);
-diff --git a/net/bridge/br_multicast.c b/net/bridge/br_multicast.c
-index 1bd197f..5f21e53 100644
---- a/net/bridge/br_multicast.c
-+++ b/net/bridge/br_multicast.c
-@@ -36,6 +36,9 @@
- #define mlock_dereference(X, br) \
- rcu_dereference_protected(X, lockdep_is_held(&br->multicast_lock))
-
-+static void br_multicast_add_router(struct net_bridge *br,
-+ struct net_bridge_port *port);
-+
- #if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE)
- static inline int ipv6_is_transient_multicast(const struct in6_addr *addr)
- {
-@@ -842,6 +845,8 @@ void br_multicast_enable_port(struct net_bridge_port *port)
- goto out;
-
- __br_multicast_enable_port(port);
-+ if (port->multicast_router == 2 && hlist_unhashed(&port->rlist))
-+ br_multicast_add_router(br, port);
-
- out:
- spin_unlock(&br->multicast_lock);
-diff --git a/net/bridge/br_netfilter.c b/net/bridge/br_netfilter.c
-index 7c1745d..6cdd3af 100644
---- a/net/bridge/br_netfilter.c
-+++ b/net/bridge/br_netfilter.c
-@@ -822,12 +822,15 @@ static int br_nf_dev_queue_xmit(struct sk_buff *skb)
- !skb_is_gso(skb)) {
- if (br_parse_ip_options(skb))
- /* Drop invalid packet */
-- return NF_DROP;
-+ goto drop;
- ret = ip_fragment(skb, br_dev_queue_push_xmit);
- } else
- ret = br_dev_queue_push_xmit(skb);
-
- return ret;
-+ drop:
-+ kfree_skb(skb);
-+ return 0;
- }
- #else
- static int br_nf_dev_queue_xmit(struct sk_buff *skb)
-diff --git a/net/ceph/osdmap.c b/net/ceph/osdmap.c
-index fd863fe7..bb38a3c 100644
---- a/net/ceph/osdmap.c
-+++ b/net/ceph/osdmap.c
-@@ -102,7 +102,7 @@ static int crush_decode_tree_bucket(void **p, void *end,
- {
- int j;
- dout("crush_decode_tree_bucket %p to %p\n", *p, end);
-- ceph_decode_32_safe(p, end, b->num_nodes, bad);
-+ ceph_decode_8_safe(p, end, b->num_nodes, bad);
- b->node_weights = kcalloc(b->num_nodes, sizeof(u32), GFP_NOFS);
- if (b->node_weights == NULL)
- return -ENOMEM;
-diff --git a/net/core/datagram.c b/net/core/datagram.c
-index 68bbf9f..6f54d0a 100644
---- a/net/core/datagram.c
-+++ b/net/core/datagram.c
-@@ -180,18 +180,19 @@ struct sk_buff *__skb_recv_datagram(struct sock *sk, unsigned flags,
- * However, this function was correct in any case. 8)
- */
- unsigned long cpu_flags;
-+ struct sk_buff_head *queue = &sk->sk_receive_queue;
-
-- spin_lock_irqsave(&sk->sk_receive_queue.lock, cpu_flags);
-- skb = skb_peek(&sk->sk_receive_queue);
-+ spin_lock_irqsave(&queue->lock, cpu_flags);
-+ skb = skb_peek(queue);
- if (skb) {
- *peeked = skb->peeked;
- if (flags & MSG_PEEK) {
- skb->peeked = 1;
- atomic_inc(&skb->users);
- } else
-- __skb_unlink(skb, &sk->sk_receive_queue);
-+ __skb_unlink(skb, queue);
- }
-- spin_unlock_irqrestore(&sk->sk_receive_queue.lock, cpu_flags);
-+ spin_unlock_irqrestore(&queue->lock, cpu_flags);
-
- if (skb)
- return skb;
-diff --git a/net/core/dev.c b/net/core/dev.c
-index 1c0d862..7f43202 100644
---- a/net/core/dev.c
-+++ b/net/core/dev.c
-@@ -2947,6 +2947,8 @@ static int enqueue_to_backlog(struct sk_buff *skb, int cpu,
- local_irq_save(flags);
-
- rps_lock(sd);
-+ if (!netif_running(skb->dev))
-+ goto drop;
- if (skb_queue_len(&sd->input_pkt_queue) <= netdev_max_backlog) {
- if (skb_queue_len(&sd->input_pkt_queue)) {
- enqueue:
-@@ -2967,6 +2969,7 @@ enqueue:
- goto enqueue;
- }
-
-+drop:
- sd->dropped++;
- rps_unlock(sd);
-
-@@ -3258,8 +3261,6 @@ static int __netif_receive_skb(struct sk_buff *skb)
-
- pt_prev = NULL;
-
-- rcu_read_lock();
--
- another_round:
-
- __this_cpu_inc(softnet_data.processed);
-@@ -3354,7 +3355,6 @@ ncls:
- }
-
- out:
-- rcu_read_unlock();
- return ret;
- }
-
-@@ -3375,34 +3375,31 @@ out:
- */
- int netif_receive_skb(struct sk_buff *skb)
- {
-+ int ret;
-+
- if (netdev_tstamp_prequeue)
- net_timestamp_check(skb);
-
- if (skb_defer_rx_timestamp(skb))
- return NET_RX_SUCCESS;
-
-+ rcu_read_lock();
-+
- #ifdef CONFIG_RPS
- {
- struct rps_dev_flow voidflow, *rflow = &voidflow;
-- int cpu, ret;
--
-- rcu_read_lock();
--
-- cpu = get_rps_cpu(skb->dev, skb, &rflow);
-+ int cpu = get_rps_cpu(skb->dev, skb, &rflow);
-
- if (cpu >= 0) {
- ret = enqueue_to_backlog(skb, cpu, &rflow->last_qtail);
- rcu_read_unlock();
-- } else {
-- rcu_read_unlock();
-- ret = __netif_receive_skb(skb);
-+ return ret;
- }
--
-- return ret;
- }
--#else
-- return __netif_receive_skb(skb);
- #endif
-+ ret = __netif_receive_skb(skb);
-+ rcu_read_unlock();
-+ return ret;
- }
- EXPORT_SYMBOL(netif_receive_skb);
-
-@@ -3793,8 +3790,10 @@ static int process_backlog(struct napi_struct *napi, int quota)
- unsigned int qlen;
-
- while ((skb = __skb_dequeue(&sd->process_queue))) {
-+ rcu_read_lock();
- local_irq_enable();
- __netif_receive_skb(skb);
-+ rcu_read_unlock();
- local_irq_disable();
- input_queue_head_incr(sd);
- if (++work >= quota) {
-@@ -5305,6 +5304,7 @@ static void rollback_registered_many(struct list_head *head)
- unlist_netdevice(dev);
-
- dev->reg_state = NETREG_UNREGISTERING;
-+ on_each_cpu(flush_backlog, dev, 1);
- }
-
- synchronize_net();
-@@ -5877,8 +5877,6 @@ void netdev_run_todo(void)
-
- dev->reg_state = NETREG_UNREGISTERED;
-
-- on_each_cpu(flush_backlog, dev, 1);
--
- netdev_wait_allrefs(dev);
-
- /* paranoia */
-diff --git a/net/core/pktgen.c b/net/core/pktgen.c
-index 80aeac9..9dd65a9 100644
---- a/net/core/pktgen.c
-+++ b/net/core/pktgen.c
-@@ -568,7 +568,7 @@ static int pktgen_if_show(struct seq_file *seq, void *v)
- " dst_min: %s dst_max: %s\n",
- pkt_dev->dst_min, pkt_dev->dst_max);
- seq_printf(seq,
-- " src_min: %s src_max: %s\n",
-+ " src_min: %s src_max: %s\n",
- pkt_dev->src_min, pkt_dev->src_max);
- }
-
-diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c
-index 5b412f0..e77373a 100644
---- a/net/core/rtnetlink.c
-+++ b/net/core/rtnetlink.c
-@@ -1147,10 +1147,6 @@ static const struct nla_policy ifla_info_policy[IFLA_INFO_MAX+1] = {
- [IFLA_INFO_DATA] = { .type = NLA_NESTED },
- };
-
--static const struct nla_policy ifla_vfinfo_policy[IFLA_VF_INFO_MAX+1] = {
-- [IFLA_VF_INFO] = { .type = NLA_NESTED },
--};
--
- static const struct nla_policy ifla_vf_policy[IFLA_VF_MAX+1] = {
- [IFLA_VF_MAC] = { .len = sizeof(struct ifla_vf_mac) },
- [IFLA_VF_VLAN] = { .len = sizeof(struct ifla_vf_vlan) },
-@@ -1224,58 +1220,53 @@ static int validate_linkmsg(struct net_device *dev, struct nlattr *tb[])
- return 0;
- }
-
--static int do_setvfinfo(struct net_device *dev, struct nlattr *attr)
-+static int do_setvfinfo(struct net_device *dev, struct nlattr **tb)
- {
-- int rem, err = -EINVAL;
-- struct nlattr *vf;
- const struct net_device_ops *ops = dev->netdev_ops;
-+ int err = -EINVAL;
-
-- nla_for_each_nested(vf, attr, rem) {
-- switch (nla_type(vf)) {
-- case IFLA_VF_MAC: {
-- struct ifla_vf_mac *ivm;
-- ivm = nla_data(vf);
-- err = -EOPNOTSUPP;
-- if (ops->ndo_set_vf_mac)
-- err = ops->ndo_set_vf_mac(dev, ivm->vf,
-- ivm->mac);
-- break;
-- }
-- case IFLA_VF_VLAN: {
-- struct ifla_vf_vlan *ivv;
-- ivv = nla_data(vf);
-- err = -EOPNOTSUPP;
-- if (ops->ndo_set_vf_vlan)
-- err = ops->ndo_set_vf_vlan(dev, ivv->vf,
-- ivv->vlan,
-- ivv->qos);
-- break;
-- }
-- case IFLA_VF_TX_RATE: {
-- struct ifla_vf_tx_rate *ivt;
-- ivt = nla_data(vf);
-- err = -EOPNOTSUPP;
-- if (ops->ndo_set_vf_tx_rate)
-- err = ops->ndo_set_vf_tx_rate(dev, ivt->vf,
-- ivt->rate);
-- break;
-- }
-- case IFLA_VF_SPOOFCHK: {
-- struct ifla_vf_spoofchk *ivs;
-- ivs = nla_data(vf);
-- err = -EOPNOTSUPP;
-- if (ops->ndo_set_vf_spoofchk)
-- err = ops->ndo_set_vf_spoofchk(dev, ivs->vf,
-- ivs->setting);
-- break;
-- }
-- default:
-- err = -EINVAL;
-- break;
-- }
-- if (err)
-- break;
-+ if (tb[IFLA_VF_MAC]) {
-+ struct ifla_vf_mac *ivm = nla_data(tb[IFLA_VF_MAC]);
-+ err = -EOPNOTSUPP;
-+ if (ops->ndo_set_vf_mac)
-+ err = ops->ndo_set_vf_mac(dev, ivm->vf,
-+ ivm->mac);
-+ if (err < 0)
-+ return err;
- }
-+
-+ if (tb[IFLA_VF_VLAN]) {
-+ struct ifla_vf_vlan *ivv = nla_data(tb[IFLA_VF_VLAN]);
-+
-+ err = -EOPNOTSUPP;
-+ if (ops->ndo_set_vf_vlan)
-+ err = ops->ndo_set_vf_vlan(dev, ivv->vf, ivv->vlan,
-+ ivv->qos);
-+ if (err < 0)
-+ return err;
-+ }
-+
-+ if (tb[IFLA_VF_TX_RATE]) {
-+ struct ifla_vf_tx_rate *ivt = nla_data(tb[IFLA_VF_TX_RATE]);
-+
-+ if (ops->ndo_set_vf_tx_rate)
-+ err = ops->ndo_set_vf_tx_rate(dev, ivt->vf,
-+ ivt->rate);
-+ if (err < 0)
-+ return err;
-+ }
-+
-+ if (tb[IFLA_VF_SPOOFCHK]) {
-+ struct ifla_vf_spoofchk *ivs = nla_data(tb[IFLA_VF_SPOOFCHK]);
-+
-+ err = -EOPNOTSUPP;
-+ if (ops->ndo_set_vf_spoofchk)
-+ err = ops->ndo_set_vf_spoofchk(dev, ivs->vf,
-+ ivs->setting);
-+ if (err < 0)
-+ return err;
-+ }
-+
- return err;
- }
-
-@@ -1458,14 +1449,21 @@ static int do_setlink(struct net_device *dev, struct ifinfomsg *ifm,
- }
-
- if (tb[IFLA_VFINFO_LIST]) {
-+ struct nlattr *vfinfo[IFLA_VF_MAX + 1];
- struct nlattr *attr;
- int rem;
-+
- nla_for_each_nested(attr, tb[IFLA_VFINFO_LIST], rem) {
-- if (nla_type(attr) != IFLA_VF_INFO) {
-+ if (nla_type(attr) != IFLA_VF_INFO ||
-+ nla_len(attr) < NLA_HDRLEN) {
- err = -EINVAL;
- goto errout;
- }
-- err = do_setvfinfo(dev, attr);
-+ err = nla_parse_nested(vfinfo, IFLA_VF_MAX, attr,
-+ ifla_vf_policy);
-+ if (err < 0)
-+ goto errout;
-+ err = do_setvfinfo(dev, vfinfo);
- if (err < 0)
- goto errout;
- modified = 1;
-diff --git a/net/ipv4/ip_fragment.c b/net/ipv4/ip_fragment.c
-index 16e25a4..c20c356 100644
---- a/net/ipv4/ip_fragment.c
-+++ b/net/ipv4/ip_fragment.c
-@@ -385,7 +385,7 @@ static int ip_frag_queue(struct ipq *qp, struct sk_buff *skb)
- ihl = ip_hdrlen(skb);
-
- /* Determine the position of this fragment. */
-- end = offset + skb->len - ihl;
-+ end = offset + skb->len - skb_network_offset(skb) - ihl;
- err = -EINVAL;
-
- /* Is this the final fragment? */
-@@ -415,7 +415,7 @@ static int ip_frag_queue(struct ipq *qp, struct sk_buff *skb)
- goto err;
-
- err = -ENOMEM;
-- if (pskb_pull(skb, ihl) == NULL)
-+ if (!pskb_pull(skb, skb_network_offset(skb) + ihl))
- goto err;
-
- err = pskb_trim_rcsum(skb, end - offset);
-@@ -638,6 +638,8 @@ static int ip_frag_reasm(struct ipq *qp, struct sk_buff *prev,
- iph->frag_off = 0;
- iph->tot_len = htons(len);
- iph->tos |= ecn;
-+ ip_send_check(iph);
-+
- IP_INC_STATS_BH(net, IPSTATS_MIB_REASMOKS);
- qp->q.fragments = NULL;
- qp->q.fragments_tail = NULL;
-diff --git a/net/mac80211/debugfs_netdev.c b/net/mac80211/debugfs_netdev.c
-index 880a55d..0228ecb 100644
---- a/net/mac80211/debugfs_netdev.c
-+++ b/net/mac80211/debugfs_netdev.c
-@@ -598,6 +598,7 @@ void ieee80211_debugfs_remove_netdev(struct ieee80211_sub_if_data *sdata)
-
- debugfs_remove_recursive(sdata->debugfs.dir);
- sdata->debugfs.dir = NULL;
-+ sdata->debugfs.subdir_stations = NULL;
- }
-
- void ieee80211_debugfs_rename_netdev(struct ieee80211_sub_if_data *sdata)
-diff --git a/net/netfilter/nf_conntrack_expect.c b/net/netfilter/nf_conntrack_expect.c
-index 7918eb7..cec0ed5 100644
---- a/net/netfilter/nf_conntrack_expect.c
-+++ b/net/netfilter/nf_conntrack_expect.c
-@@ -205,7 +205,8 @@ static inline int expect_clash(const struct nf_conntrack_expect *a,
- a->mask.src.u3.all[count] & b->mask.src.u3.all[count];
- }
-
-- return nf_ct_tuple_mask_cmp(&a->tuple, &b->tuple, &intersect_mask);
-+ return nf_ct_tuple_mask_cmp(&a->tuple, &b->tuple, &intersect_mask) &&
-+ nf_ct_zone(a->master) == nf_ct_zone(b->master);
- }
-
- static inline int expect_matches(const struct nf_conntrack_expect *a,
-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/net/rose/af_rose.c b/net/rose/af_rose.c
-index 686fb1a..233dbe6 100644
---- a/net/rose/af_rose.c
-+++ b/net/rose/af_rose.c
-@@ -195,7 +195,8 @@ static void rose_kill_by_device(struct net_device *dev)
-
- if (rose->device == dev) {
- rose_disconnect(s, ENETUNREACH, ROSE_OUT_OF_ORDER, 0);
-- rose->neighbour->use--;
-+ if (rose->neighbour)
-+ rose->neighbour->use--;
- rose->device = NULL;
- }
- }
-diff --git a/net/sunrpc/backchannel_rqst.c b/net/sunrpc/backchannel_rqst.c
-index 3ad435a..b56f23e 100644
---- a/net/sunrpc/backchannel_rqst.c
-+++ b/net/sunrpc/backchannel_rqst.c
-@@ -59,7 +59,7 @@ static void xprt_free_allocation(struct rpc_rqst *req)
-
- dprintk("RPC: free allocations for req= %p\n", req);
- BUG_ON(test_bit(RPC_BC_PA_IN_USE, &req->rq_bc_pa_state));
-- xbufp = &req->rq_private_buf;
-+ xbufp = &req->rq_rcv_buf;
- free_page((unsigned long)xbufp->head[0].iov_base);
- xbufp = &req->rq_snd_buf;
- free_page((unsigned long)xbufp->head[0].iov_base);
-diff --git a/sound/soc/codecs/wm8737.c b/sound/soc/codecs/wm8737.c
-index f6aef58..2a012d3 100644
---- a/sound/soc/codecs/wm8737.c
-+++ b/sound/soc/codecs/wm8737.c
-@@ -485,7 +485,8 @@ static int wm8737_set_bias_level(struct snd_soc_codec *codec,
-
- /* Fast VMID ramp at 2*2.5k */
- snd_soc_update_bits(codec, WM8737_MISC_BIAS_CONTROL,
-- WM8737_VMIDSEL_MASK, 0x4);
-+ WM8737_VMIDSEL_MASK,
-+ 2 << WM8737_VMIDSEL_SHIFT);
-
- /* Bring VMID up */
- snd_soc_update_bits(codec, WM8737_POWER_MANAGEMENT,
-@@ -499,7 +500,8 @@ static int wm8737_set_bias_level(struct snd_soc_codec *codec,
-
- /* VMID at 2*300k */
- snd_soc_update_bits(codec, WM8737_MISC_BIAS_CONTROL,
-- WM8737_VMIDSEL_MASK, 2);
-+ WM8737_VMIDSEL_MASK,
-+ 1 << WM8737_VMIDSEL_SHIFT);
-
- break;
-
-diff --git a/sound/soc/codecs/wm8903.h b/sound/soc/codecs/wm8903.h
-index db94931..0bb4a64 100644
---- a/sound/soc/codecs/wm8903.h
-+++ b/sound/soc/codecs/wm8903.h
-@@ -172,7 +172,7 @@ extern int wm8903_mic_detect(struct snd_soc_codec *codec,
- #define WM8903_VMID_BUF_ENA_WIDTH 1 /* VMID_BUF_ENA */
-
- #define WM8903_VMID_RES_50K 2
--#define WM8903_VMID_RES_250K 3
-+#define WM8903_VMID_RES_250K 4
- #define WM8903_VMID_RES_5K 6
-
- /*
-diff --git a/sound/soc/codecs/wm8955.c b/sound/soc/codecs/wm8955.c
-index 77ff1d7..f8b9930 100644
---- a/sound/soc/codecs/wm8955.c
-+++ b/sound/soc/codecs/wm8955.c
-@@ -282,7 +282,7 @@ static int wm8955_configure_clocking(struct snd_soc_codec *codec)
- snd_soc_update_bits(codec, WM8955_PLL_CONTROL_2,
- WM8955_K_17_9_MASK,
- (pll.k >> 9) & WM8955_K_17_9_MASK);
-- snd_soc_update_bits(codec, WM8955_PLL_CONTROL_2,
-+ snd_soc_update_bits(codec, WM8955_PLL_CONTROL_3,
- WM8955_K_8_0_MASK,
- pll.k & WM8955_K_8_0_MASK);
- if (pll.k)
-diff --git a/sound/soc/codecs/wm8960.c b/sound/soc/codecs/wm8960.c
-index 8d26104..c7911fd 100644
---- a/sound/soc/codecs/wm8960.c
-+++ b/sound/soc/codecs/wm8960.c
-@@ -186,7 +186,7 @@ SOC_SINGLE("PCM Playback -6dB Switch", WM8960_DACCTL1, 7, 1, 0),
- SOC_ENUM("ADC Polarity", wm8960_enum[0]),
- SOC_SINGLE("ADC High Pass Filter Switch", WM8960_DACCTL1, 0, 1, 0),
-
--SOC_ENUM("DAC Polarity", wm8960_enum[2]),
-+SOC_ENUM("DAC Polarity", wm8960_enum[1]),
- SOC_SINGLE_BOOL_EXT("DAC Deemphasis Switch", 0,
- wm8960_get_deemph, wm8960_put_deemph),
-
-diff --git a/sound/usb/mixer_maps.c b/sound/usb/mixer_maps.c
-index 851786f..893b750 100644
---- a/sound/usb/mixer_maps.c
-+++ b/sound/usb/mixer_maps.c
-@@ -312,6 +312,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
- */
-@@ -394,6 +408,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 b38dde0..c014f00 100644
---- a/sound/usb/quirks-table.h
-+++ b/sound/usb/quirks-table.h
-@@ -2383,6 +2383,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),