diff options
Diffstat (limited to '3.10.11/1010_linux-3.10.11.patch')
-rw-r--r-- | 3.10.11/1010_linux-3.10.11.patch | 1130 |
1 files changed, 0 insertions, 1130 deletions
diff --git a/3.10.11/1010_linux-3.10.11.patch b/3.10.11/1010_linux-3.10.11.patch deleted file mode 100644 index ff57b3e..0000000 --- a/3.10.11/1010_linux-3.10.11.patch +++ /dev/null @@ -1,1130 +0,0 @@ -diff --git a/Documentation/hwmon/k10temp b/Documentation/hwmon/k10temp -index 90956b6..4dfdc8f 100644 ---- a/Documentation/hwmon/k10temp -+++ b/Documentation/hwmon/k10temp -@@ -12,6 +12,7 @@ Supported chips: - * AMD Family 12h processors: "Llano" (E2/A4/A6/A8-Series) - * AMD Family 14h processors: "Brazos" (C/E/G/Z-Series) - * AMD Family 15h processors: "Bulldozer" (FX-Series), "Trinity" -+* AMD Family 16h processors: "Kabini" - - Prefix: 'k10temp' - Addresses scanned: PCI space -diff --git a/Makefile b/Makefile -index b119684..595076d 100644 ---- a/Makefile -+++ b/Makefile -@@ -1,6 +1,6 @@ - VERSION = 3 - PATCHLEVEL = 10 --SUBLEVEL = 10 -+SUBLEVEL = 11 - EXTRAVERSION = - NAME = TOSSUG Baby Fish - -diff --git a/arch/arm/xen/enlighten.c b/arch/arm/xen/enlighten.c -index 13609e0..05db95d 100644 ---- a/arch/arm/xen/enlighten.c -+++ b/arch/arm/xen/enlighten.c -@@ -170,6 +170,7 @@ static void __init xen_percpu_init(void *unused) - per_cpu(xen_vcpu, cpu) = vcpup; - - enable_percpu_irq(xen_events_irq, 0); -+ put_cpu(); - } - - static void xen_restart(char str, const char *cmd) -diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig -index 74991fe..fe404e7 100644 ---- a/arch/powerpc/Kconfig -+++ b/arch/powerpc/Kconfig -@@ -986,6 +986,7 @@ config RELOCATABLE - must live at a different physical address than the primary - kernel. - -+# This value must have zeroes in the bottom 60 bits otherwise lots will break - config PAGE_OFFSET - hex - default "0xc000000000000000" -diff --git a/arch/powerpc/include/asm/page.h b/arch/powerpc/include/asm/page.h -index 988c812..b9f4262 100644 ---- a/arch/powerpc/include/asm/page.h -+++ b/arch/powerpc/include/asm/page.h -@@ -211,9 +211,19 @@ extern long long virt_phys_offset; - #define __va(x) ((void *)(unsigned long)((phys_addr_t)(x) + VIRT_PHYS_OFFSET)) - #define __pa(x) ((unsigned long)(x) - VIRT_PHYS_OFFSET) - #else -+#ifdef CONFIG_PPC64 -+/* -+ * gcc miscompiles (unsigned long)(&static_var) - PAGE_OFFSET -+ * with -mcmodel=medium, so we use & and | instead of - and + on 64-bit. -+ */ -+#define __va(x) ((void *)(unsigned long)((phys_addr_t)(x) | PAGE_OFFSET)) -+#define __pa(x) ((unsigned long)(x) & 0x0fffffffffffffffUL) -+ -+#else /* 32-bit, non book E */ - #define __va(x) ((void *)(unsigned long)((phys_addr_t)(x) + PAGE_OFFSET - MEMORY_START)) - #define __pa(x) ((unsigned long)(x) - PAGE_OFFSET + MEMORY_START) - #endif -+#endif - - /* - * Unfortunately the PLT is in the BSS in the PPC32 ELF ABI, -diff --git a/arch/powerpc/kernel/lparcfg.c b/arch/powerpc/kernel/lparcfg.c -index d92f387..e2a0a16 100644 ---- a/arch/powerpc/kernel/lparcfg.c -+++ b/arch/powerpc/kernel/lparcfg.c -@@ -35,7 +35,13 @@ - #include <asm/vdso_datapage.h> - #include <asm/vio.h> - #include <asm/mmu.h> -+#include <asm/machdep.h> - -+ -+/* -+ * This isn't a module but we expose that to userspace -+ * via /proc so leave the definitions here -+ */ - #define MODULE_VERS "1.9" - #define MODULE_NAME "lparcfg" - -@@ -418,7 +424,8 @@ static void parse_em_data(struct seq_file *m) - { - unsigned long retbuf[PLPAR_HCALL_BUFSIZE]; - -- if (plpar_hcall(H_GET_EM_PARMS, retbuf) == H_SUCCESS) -+ if (firmware_has_feature(FW_FEATURE_LPAR) && -+ plpar_hcall(H_GET_EM_PARMS, retbuf) == H_SUCCESS) - seq_printf(m, "power_mode_data=%016lx\n", retbuf[0]); - } - -@@ -677,7 +684,6 @@ static int lparcfg_open(struct inode *inode, struct file *file) - } - - static const struct file_operations lparcfg_fops = { -- .owner = THIS_MODULE, - .read = seq_read, - .write = lparcfg_write, - .open = lparcfg_open, -@@ -699,14 +705,4 @@ static int __init lparcfg_init(void) - } - return 0; - } -- --static void __exit lparcfg_cleanup(void) --{ -- remove_proc_subtree("powerpc/lparcfg", NULL); --} -- --module_init(lparcfg_init); --module_exit(lparcfg_cleanup); --MODULE_DESCRIPTION("Interface for LPAR configuration data"); --MODULE_AUTHOR("Dave Engebretsen"); --MODULE_LICENSE("GPL"); -+machine_device_initcall(pseries, lparcfg_init); -diff --git a/arch/x86/mm/init.c b/arch/x86/mm/init.c -index 1f34e92..7a5bf1b 100644 ---- a/arch/x86/mm/init.c -+++ b/arch/x86/mm/init.c -@@ -78,8 +78,8 @@ __ref void *alloc_low_pages(unsigned int num) - return __va(pfn << PAGE_SHIFT); - } - --/* need 4 4k for initial PMD_SIZE, 4k for 0-ISA_END_ADDRESS */ --#define INIT_PGT_BUF_SIZE (5 * PAGE_SIZE) -+/* need 3 4k for initial PMD_SIZE, 3 4k for 0-ISA_END_ADDRESS */ -+#define INIT_PGT_BUF_SIZE (6 * PAGE_SIZE) - RESERVE_BRK(early_pgt_alloc, INIT_PGT_BUF_SIZE); - void __init early_alloc_pgt_buf(void) - { -diff --git a/drivers/acpi/ec.c b/drivers/acpi/ec.c -index 80403c1..45af90a 100644 ---- a/drivers/acpi/ec.c -+++ b/drivers/acpi/ec.c -@@ -987,6 +987,10 @@ static struct dmi_system_id __initdata ec_dmi_table[] = { - ec_skip_dsdt_scan, "HP Folio 13", { - DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"), - DMI_MATCH(DMI_PRODUCT_NAME, "HP Folio 13"),}, NULL}, -+ { -+ ec_validate_ecdt, "ASUS hardware", { -+ DMI_MATCH(DMI_SYS_VENDOR, "ASUSTek Computer Inc."), -+ DMI_MATCH(DMI_PRODUCT_NAME, "L4R"),}, NULL}, - {}, - }; - -diff --git a/drivers/base/memory.c b/drivers/base/memory.c -index 14f8a69..86abbff 100644 ---- a/drivers/base/memory.c -+++ b/drivers/base/memory.c -@@ -152,6 +152,8 @@ static ssize_t show_mem_removable(struct device *dev, - container_of(dev, struct memory_block, dev); - - for (i = 0; i < sections_per_block; i++) { -+ if (!present_section_nr(mem->start_section_nr + i)) -+ continue; - pfn = section_nr_to_pfn(mem->start_section_nr + i); - ret &= is_mem_section_removable(pfn, PAGES_PER_SECTION); - } -diff --git a/drivers/base/regmap/regcache-rbtree.c b/drivers/base/regmap/regcache-rbtree.c -index 02f490b..bb8c3bb 100644 ---- a/drivers/base/regmap/regcache-rbtree.c -+++ b/drivers/base/regmap/regcache-rbtree.c -@@ -362,7 +362,7 @@ static int regcache_rbtree_write(struct regmap *map, unsigned int reg, - rbnode = kzalloc(sizeof *rbnode, GFP_KERNEL); - if (!rbnode) - return -ENOMEM; -- rbnode->blklen = sizeof(*rbnode); -+ rbnode->blklen = 1; - rbnode->base_reg = reg; - rbnode->block = kmalloc(rbnode->blklen * map->cache_word_size, - GFP_KERNEL); -diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h -index 01f6c2c..a365780 100644 ---- a/drivers/gpu/drm/i915/i915_reg.h -+++ b/drivers/gpu/drm/i915/i915_reg.h -@@ -4246,7 +4246,7 @@ - #define EDP_LINK_TRAIN_600MV_0DB_IVB (0x30 <<22) - #define EDP_LINK_TRAIN_600MV_3_5DB_IVB (0x36 <<22) - #define EDP_LINK_TRAIN_800MV_0DB_IVB (0x38 <<22) --#define EDP_LINK_TRAIN_800MV_3_5DB_IVB (0x33 <<22) -+#define EDP_LINK_TRAIN_800MV_3_5DB_IVB (0x3e <<22) - - /* legacy values */ - #define EDP_LINK_TRAIN_500MV_0DB_IVB (0x00 <<22) -diff --git a/drivers/gpu/drm/nouveau/core/include/subdev/mc.h b/drivers/gpu/drm/nouveau/core/include/subdev/mc.h -index d550226..9d2cd20 100644 ---- a/drivers/gpu/drm/nouveau/core/include/subdev/mc.h -+++ b/drivers/gpu/drm/nouveau/core/include/subdev/mc.h -@@ -20,8 +20,8 @@ nouveau_mc(void *obj) - return (void *)nv_device(obj)->subdev[NVDEV_SUBDEV_MC]; - } - --#define nouveau_mc_create(p,e,o,d) \ -- nouveau_mc_create_((p), (e), (o), sizeof(**d), (void **)d) -+#define nouveau_mc_create(p,e,o,m,d) \ -+ nouveau_mc_create_((p), (e), (o), (m), sizeof(**d), (void **)d) - #define nouveau_mc_destroy(p) ({ \ - struct nouveau_mc *pmc = (p); _nouveau_mc_dtor(nv_object(pmc)); \ - }) -@@ -33,7 +33,8 @@ nouveau_mc(void *obj) - }) - - int nouveau_mc_create_(struct nouveau_object *, struct nouveau_object *, -- struct nouveau_oclass *, int, void **); -+ struct nouveau_oclass *, const struct nouveau_mc_intr *, -+ int, void **); - void _nouveau_mc_dtor(struct nouveau_object *); - int _nouveau_mc_init(struct nouveau_object *); - int _nouveau_mc_fini(struct nouveau_object *, bool); -diff --git a/drivers/gpu/drm/nouveau/core/subdev/mc/base.c b/drivers/gpu/drm/nouveau/core/subdev/mc/base.c -index 1c0330b..ec9cd6f 100644 ---- a/drivers/gpu/drm/nouveau/core/subdev/mc/base.c -+++ b/drivers/gpu/drm/nouveau/core/subdev/mc/base.c -@@ -80,7 +80,9 @@ _nouveau_mc_dtor(struct nouveau_object *object) - - int - nouveau_mc_create_(struct nouveau_object *parent, struct nouveau_object *engine, -- struct nouveau_oclass *oclass, int length, void **pobject) -+ struct nouveau_oclass *oclass, -+ const struct nouveau_mc_intr *intr_map, -+ int length, void **pobject) - { - struct nouveau_device *device = nv_device(parent); - struct nouveau_mc *pmc; -@@ -92,6 +94,8 @@ nouveau_mc_create_(struct nouveau_object *parent, struct nouveau_object *engine, - if (ret) - return ret; - -+ pmc->intr_map = intr_map; -+ - ret = request_irq(device->pdev->irq, nouveau_mc_intr, - IRQF_SHARED, "nouveau", pmc); - if (ret < 0) -diff --git a/drivers/gpu/drm/nouveau/core/subdev/mc/nv04.c b/drivers/gpu/drm/nouveau/core/subdev/mc/nv04.c -index 8c76971..64aa4ed 100644 ---- a/drivers/gpu/drm/nouveau/core/subdev/mc/nv04.c -+++ b/drivers/gpu/drm/nouveau/core/subdev/mc/nv04.c -@@ -50,12 +50,11 @@ nv04_mc_ctor(struct nouveau_object *parent, struct nouveau_object *engine, - struct nv04_mc_priv *priv; - int ret; - -- ret = nouveau_mc_create(parent, engine, oclass, &priv); -+ ret = nouveau_mc_create(parent, engine, oclass, nv04_mc_intr, &priv); - *pobject = nv_object(priv); - if (ret) - return ret; - -- priv->base.intr_map = nv04_mc_intr; - return 0; - } - -diff --git a/drivers/gpu/drm/nouveau/core/subdev/mc/nv44.c b/drivers/gpu/drm/nouveau/core/subdev/mc/nv44.c -index 5191937..d989178 100644 ---- a/drivers/gpu/drm/nouveau/core/subdev/mc/nv44.c -+++ b/drivers/gpu/drm/nouveau/core/subdev/mc/nv44.c -@@ -36,12 +36,11 @@ nv44_mc_ctor(struct nouveau_object *parent, struct nouveau_object *engine, - struct nv44_mc_priv *priv; - int ret; - -- ret = nouveau_mc_create(parent, engine, oclass, &priv); -+ ret = nouveau_mc_create(parent, engine, oclass, nv04_mc_intr, &priv); - *pobject = nv_object(priv); - if (ret) - return ret; - -- priv->base.intr_map = nv04_mc_intr; - return 0; - } - -diff --git a/drivers/gpu/drm/nouveau/core/subdev/mc/nv50.c b/drivers/gpu/drm/nouveau/core/subdev/mc/nv50.c -index d796924..732d810 100644 ---- a/drivers/gpu/drm/nouveau/core/subdev/mc/nv50.c -+++ b/drivers/gpu/drm/nouveau/core/subdev/mc/nv50.c -@@ -52,12 +52,11 @@ nv50_mc_ctor(struct nouveau_object *parent, struct nouveau_object *engine, - struct nv50_mc_priv *priv; - int ret; - -- ret = nouveau_mc_create(parent, engine, oclass, &priv); -+ ret = nouveau_mc_create(parent, engine, oclass, nv50_mc_intr, &priv); - *pobject = nv_object(priv); - if (ret) - return ret; - -- priv->base.intr_map = nv50_mc_intr; - return 0; - } - -diff --git a/drivers/gpu/drm/nouveau/core/subdev/mc/nv98.c b/drivers/gpu/drm/nouveau/core/subdev/mc/nv98.c -index e82fd21..0d57b4d 100644 ---- a/drivers/gpu/drm/nouveau/core/subdev/mc/nv98.c -+++ b/drivers/gpu/drm/nouveau/core/subdev/mc/nv98.c -@@ -54,12 +54,11 @@ nv98_mc_ctor(struct nouveau_object *parent, struct nouveau_object *engine, - struct nv98_mc_priv *priv; - int ret; - -- ret = nouveau_mc_create(parent, engine, oclass, &priv); -+ ret = nouveau_mc_create(parent, engine, oclass, nv98_mc_intr, &priv); - *pobject = nv_object(priv); - if (ret) - return ret; - -- priv->base.intr_map = nv98_mc_intr; - return 0; - } - -diff --git a/drivers/gpu/drm/nouveau/core/subdev/mc/nvc0.c b/drivers/gpu/drm/nouveau/core/subdev/mc/nvc0.c -index 737bd4b..4c97cd2 100644 ---- a/drivers/gpu/drm/nouveau/core/subdev/mc/nvc0.c -+++ b/drivers/gpu/drm/nouveau/core/subdev/mc/nvc0.c -@@ -56,12 +56,11 @@ nvc0_mc_ctor(struct nouveau_object *parent, struct nouveau_object *engine, - struct nvc0_mc_priv *priv; - int ret; - -- ret = nouveau_mc_create(parent, engine, oclass, &priv); -+ ret = nouveau_mc_create(parent, engine, oclass, nvc0_mc_intr, &priv); - *pobject = nv_object(priv); - if (ret) - return ret; - -- priv->base.intr_map = nvc0_mc_intr; - return 0; - } - -diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_gmr.c b/drivers/gpu/drm/vmwgfx/vmwgfx_gmr.c -index 3751730..1a0bf07 100644 ---- a/drivers/gpu/drm/vmwgfx/vmwgfx_gmr.c -+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_gmr.c -@@ -29,7 +29,9 @@ - #include <drm/drmP.h> - #include <drm/ttm/ttm_bo_driver.h> - --#define VMW_PPN_SIZE sizeof(unsigned long) -+#define VMW_PPN_SIZE (sizeof(unsigned long)) -+/* A future safe maximum remap size. */ -+#define VMW_PPN_PER_REMAP ((31 * 1024) / VMW_PPN_SIZE) - - static int vmw_gmr2_bind(struct vmw_private *dev_priv, - struct page *pages[], -@@ -38,43 +40,61 @@ static int vmw_gmr2_bind(struct vmw_private *dev_priv, - { - SVGAFifoCmdDefineGMR2 define_cmd; - SVGAFifoCmdRemapGMR2 remap_cmd; -- uint32_t define_size = sizeof(define_cmd) + 4; -- uint32_t remap_size = VMW_PPN_SIZE * num_pages + sizeof(remap_cmd) + 4; - uint32_t *cmd; - uint32_t *cmd_orig; -+ uint32_t define_size = sizeof(define_cmd) + sizeof(*cmd); -+ uint32_t remap_num = num_pages / VMW_PPN_PER_REMAP + ((num_pages % VMW_PPN_PER_REMAP) > 0); -+ uint32_t remap_size = VMW_PPN_SIZE * num_pages + (sizeof(remap_cmd) + sizeof(*cmd)) * remap_num; -+ uint32_t remap_pos = 0; -+ uint32_t cmd_size = define_size + remap_size; - uint32_t i; - -- cmd_orig = cmd = vmw_fifo_reserve(dev_priv, define_size + remap_size); -+ cmd_orig = cmd = vmw_fifo_reserve(dev_priv, cmd_size); - if (unlikely(cmd == NULL)) - return -ENOMEM; - - define_cmd.gmrId = gmr_id; - define_cmd.numPages = num_pages; - -+ *cmd++ = SVGA_CMD_DEFINE_GMR2; -+ memcpy(cmd, &define_cmd, sizeof(define_cmd)); -+ cmd += sizeof(define_cmd) / sizeof(*cmd); -+ -+ /* -+ * Need to split the command if there are too many -+ * pages that goes into the gmr. -+ */ -+ - remap_cmd.gmrId = gmr_id; - remap_cmd.flags = (VMW_PPN_SIZE > sizeof(*cmd)) ? - SVGA_REMAP_GMR2_PPN64 : SVGA_REMAP_GMR2_PPN32; -- remap_cmd.offsetPages = 0; -- remap_cmd.numPages = num_pages; - -- *cmd++ = SVGA_CMD_DEFINE_GMR2; -- memcpy(cmd, &define_cmd, sizeof(define_cmd)); -- cmd += sizeof(define_cmd) / sizeof(uint32); -+ while (num_pages > 0) { -+ unsigned long nr = min(num_pages, (unsigned long)VMW_PPN_PER_REMAP); -+ -+ remap_cmd.offsetPages = remap_pos; -+ remap_cmd.numPages = nr; - -- *cmd++ = SVGA_CMD_REMAP_GMR2; -- memcpy(cmd, &remap_cmd, sizeof(remap_cmd)); -- cmd += sizeof(remap_cmd) / sizeof(uint32); -+ *cmd++ = SVGA_CMD_REMAP_GMR2; -+ memcpy(cmd, &remap_cmd, sizeof(remap_cmd)); -+ cmd += sizeof(remap_cmd) / sizeof(*cmd); - -- for (i = 0; i < num_pages; ++i) { -- if (VMW_PPN_SIZE <= 4) -- *cmd = page_to_pfn(*pages++); -- else -- *((uint64_t *)cmd) = page_to_pfn(*pages++); -+ for (i = 0; i < nr; ++i) { -+ if (VMW_PPN_SIZE <= 4) -+ *cmd = page_to_pfn(*pages++); -+ else -+ *((uint64_t *)cmd) = page_to_pfn(*pages++); - -- cmd += VMW_PPN_SIZE / sizeof(*cmd); -+ cmd += VMW_PPN_SIZE / sizeof(*cmd); -+ } -+ -+ num_pages -= nr; -+ remap_pos += nr; - } - -- vmw_fifo_commit(dev_priv, define_size + remap_size); -+ BUG_ON(cmd != cmd_orig + cmd_size / sizeof(*cmd)); -+ -+ vmw_fifo_commit(dev_priv, cmd_size); - - return 0; - } -diff --git a/drivers/hwmon/Kconfig b/drivers/hwmon/Kconfig -index 0428e8a..df064e8 100644 ---- a/drivers/hwmon/Kconfig -+++ b/drivers/hwmon/Kconfig -@@ -296,8 +296,8 @@ config SENSORS_K10TEMP - If you say yes here you get support for the temperature - sensor(s) inside your CPU. Supported are later revisions of - the AMD Family 10h and all revisions of the AMD Family 11h, -- 12h (Llano), 14h (Brazos) and 15h (Bulldozer/Trinity) -- microarchitectures. -+ 12h (Llano), 14h (Brazos), 15h (Bulldozer/Trinity) and -+ 16h (Kabini) microarchitectures. - - This driver can also be built as a module. If so, the module - will be called k10temp. -diff --git a/drivers/hwmon/k10temp.c b/drivers/hwmon/k10temp.c -index e3b037c..e633856 100644 ---- a/drivers/hwmon/k10temp.c -+++ b/drivers/hwmon/k10temp.c -@@ -1,5 +1,5 @@ - /* -- * k10temp.c - AMD Family 10h/11h/12h/14h/15h processor hardware monitoring -+ * k10temp.c - AMD Family 10h/11h/12h/14h/15h/16h processor hardware monitoring - * - * Copyright (c) 2009 Clemens Ladisch <clemens@ladisch.de> - * -@@ -211,6 +211,7 @@ static DEFINE_PCI_DEVICE_TABLE(k10temp_id_table) = { - { PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_CNB17H_F3) }, - { PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_15H_NB_F3) }, - { PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_15H_M10H_F3) }, -+ { PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_16H_NB_F3) }, - {} - }; - MODULE_DEVICE_TABLE(pci, k10temp_id_table); -diff --git a/drivers/misc/hpilo.c b/drivers/misc/hpilo.c -index 621c7a3..b83e3ca 100644 ---- a/drivers/misc/hpilo.c -+++ b/drivers/misc/hpilo.c -@@ -759,7 +759,7 @@ static int ilo_probe(struct pci_dev *pdev, - - /* Ignore subsystem_device = 0x1979 (set by BIOS) */ - if (pdev->subsystem_device == 0x1979) -- goto out; -+ return 0; - - if (max_ccb > MAX_CCB) - max_ccb = MAX_CCB; -@@ -899,7 +899,7 @@ static void __exit ilo_exit(void) - class_destroy(ilo_class); - } - --MODULE_VERSION("1.4"); -+MODULE_VERSION("1.4.1"); - MODULE_ALIAS(ILO_NAME); - MODULE_DESCRIPTION(ILO_NAME); - MODULE_AUTHOR("David Altobelli <david.altobelli@hp.com>"); -diff --git a/drivers/misc/mei/hw-me.c b/drivers/misc/mei/hw-me.c -index 700fe55..1bf3f8b 100644 ---- a/drivers/misc/mei/hw-me.c -+++ b/drivers/misc/mei/hw-me.c -@@ -176,16 +176,14 @@ static void mei_me_hw_reset(struct mei_device *dev, bool intr_enable) - struct mei_me_hw *hw = to_me_hw(dev); - u32 hcsr = mei_hcsr_read(hw); - -- dev_dbg(&dev->pdev->dev, "before reset HCSR = 0x%08x.\n", hcsr); -- -- hcsr |= (H_RST | H_IG); -+ hcsr |= H_RST | H_IG | H_IS; - - if (intr_enable) - hcsr |= H_IE; - else -- hcsr |= ~H_IE; -+ hcsr &= ~H_IE; - -- mei_hcsr_set(hw, hcsr); -+ mei_me_reg_write(hw, H_CSR, hcsr); - - if (dev->dev_state == MEI_DEV_POWER_DOWN) - mei_me_hw_reset_release(dev); -diff --git a/drivers/net/wireless/ath/ath9k/htc_drv_txrx.c b/drivers/net/wireless/ath/ath9k/htc_drv_txrx.c -index 6bd0e92..417a089 100644 ---- a/drivers/net/wireless/ath/ath9k/htc_drv_txrx.c -+++ b/drivers/net/wireless/ath/ath9k/htc_drv_txrx.c -@@ -448,6 +448,7 @@ static void ath9k_htc_tx_process(struct ath9k_htc_priv *priv, - struct ieee80211_conf *cur_conf = &priv->hw->conf; - bool txok; - int slot; -+ int hdrlen, padsize; - - slot = strip_drv_header(priv, skb); - if (slot < 0) { -@@ -504,6 +505,15 @@ send_mac80211: - - ath9k_htc_tx_clear_slot(priv, slot); - -+ /* Remove padding before handing frame back to mac80211 */ -+ hdrlen = ieee80211_get_hdrlen_from_skb(skb); -+ -+ padsize = hdrlen & 3; -+ if (padsize && skb->len > hdrlen + padsize) { -+ memmove(skb->data + padsize, skb->data, hdrlen); -+ skb_pull(skb, padsize); -+ } -+ - /* Send status to mac80211 */ - ieee80211_tx_status(priv->hw, skb); - } -diff --git a/drivers/net/wireless/ath/ath9k/init.c b/drivers/net/wireless/ath/ath9k/init.c -index 2ba4945..bd126c2 100644 ---- a/drivers/net/wireless/ath/ath9k/init.c -+++ b/drivers/net/wireless/ath/ath9k/init.c -@@ -767,7 +767,8 @@ void ath9k_set_hw_capab(struct ath_softc *sc, struct ieee80211_hw *hw) - IEEE80211_HW_PS_NULLFUNC_STACK | - IEEE80211_HW_SPECTRUM_MGMT | - IEEE80211_HW_REPORTS_TX_ACK_STATUS | -- IEEE80211_HW_SUPPORTS_RC_TABLE; -+ IEEE80211_HW_SUPPORTS_RC_TABLE | -+ IEEE80211_HW_SUPPORTS_HT_CCK_RATES; - - if (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_HT) - hw->flags |= IEEE80211_HW_AMPDU_AGGREGATION; -diff --git a/drivers/net/wireless/ath/ath9k/main.c b/drivers/net/wireless/ath/ath9k/main.c -index 35ced10..e33a659 100644 ---- a/drivers/net/wireless/ath/ath9k/main.c -+++ b/drivers/net/wireless/ath/ath9k/main.c -@@ -173,8 +173,7 @@ static void ath_restart_work(struct ath_softc *sc) - { - ieee80211_queue_delayed_work(sc->hw, &sc->tx_complete_work, 0); - -- if (AR_SREV_9340(sc->sc_ah) || AR_SREV_9485(sc->sc_ah) || -- AR_SREV_9550(sc->sc_ah)) -+ if (AR_SREV_9340(sc->sc_ah) || AR_SREV_9330(sc->sc_ah)) - ieee80211_queue_delayed_work(sc->hw, &sc->hw_pll_work, - msecs_to_jiffies(ATH_PLL_WORK_INTERVAL)); - -diff --git a/drivers/net/wireless/ath/carl9170/main.c b/drivers/net/wireless/ath/carl9170/main.c -index e9010a4..0686375 100644 ---- a/drivers/net/wireless/ath/carl9170/main.c -+++ b/drivers/net/wireless/ath/carl9170/main.c -@@ -1857,7 +1857,8 @@ void *carl9170_alloc(size_t priv_size) - IEEE80211_HW_SUPPORTS_PS | - IEEE80211_HW_PS_NULLFUNC_STACK | - IEEE80211_HW_NEED_DTIM_BEFORE_ASSOC | -- IEEE80211_HW_SIGNAL_DBM; -+ IEEE80211_HW_SIGNAL_DBM | -+ IEEE80211_HW_SUPPORTS_HT_CCK_RATES; - - if (!modparam_noht) { - /* -diff --git a/drivers/net/wireless/iwlegacy/4965-mac.c b/drivers/net/wireless/iwlegacy/4965-mac.c -index 900f5f8..a8eff95 100644 ---- a/drivers/net/wireless/iwlegacy/4965-mac.c -+++ b/drivers/net/wireless/iwlegacy/4965-mac.c -@@ -4446,9 +4446,9 @@ il4965_irq_tasklet(struct il_priv *il) - set_bit(S_RFKILL, &il->status); - } else { - clear_bit(S_RFKILL, &il->status); -- wiphy_rfkill_set_hw_state(il->hw->wiphy, hw_rf_kill); - il_force_reset(il, true); - } -+ wiphy_rfkill_set_hw_state(il->hw->wiphy, hw_rf_kill); - - handled |= CSR_INT_BIT_RF_KILL; - } -diff --git a/drivers/net/wireless/rt2x00/rt2800lib.c b/drivers/net/wireless/rt2x00/rt2800lib.c -index 705aa33..7e66a90 100644 ---- a/drivers/net/wireless/rt2x00/rt2800lib.c -+++ b/drivers/net/wireless/rt2x00/rt2800lib.c -@@ -5912,7 +5912,8 @@ static int rt2800_probe_hw_mode(struct rt2x00_dev *rt2x00dev) - IEEE80211_HW_SUPPORTS_PS | - IEEE80211_HW_PS_NULLFUNC_STACK | - IEEE80211_HW_AMPDU_AGGREGATION | -- IEEE80211_HW_REPORTS_TX_ACK_STATUS; -+ IEEE80211_HW_REPORTS_TX_ACK_STATUS | -+ IEEE80211_HW_SUPPORTS_HT_CCK_RATES; - - /* - * Don't set IEEE80211_HW_HOST_BROADCAST_PS_BUFFERING for USB devices -diff --git a/drivers/scsi/pm8001/pm8001_hwi.c b/drivers/scsi/pm8001/pm8001_hwi.c -index 69dd49c..ce3f129d 100644 ---- a/drivers/scsi/pm8001/pm8001_hwi.c -+++ b/drivers/scsi/pm8001/pm8001_hwi.c -@@ -221,7 +221,7 @@ static void init_default_table_values(struct pm8001_hba_info *pm8001_ha) - pm8001_ha->main_cfg_tbl.pm8001_tbl.fatal_err_interrupt = 0x01; - for (i = 0; i < PM8001_MAX_INB_NUM; i++) { - pm8001_ha->inbnd_q_tbl[i].element_pri_size_cnt = -- PM8001_MPI_QUEUE | (64 << 16) | (0x00<<30); -+ PM8001_MPI_QUEUE | (pm8001_ha->iomb_size << 16) | (0x00<<30); - pm8001_ha->inbnd_q_tbl[i].upper_base_addr = - pm8001_ha->memoryMap.region[IB + i].phys_addr_hi; - pm8001_ha->inbnd_q_tbl[i].lower_base_addr = -@@ -247,7 +247,7 @@ static void init_default_table_values(struct pm8001_hba_info *pm8001_ha) - } - for (i = 0; i < PM8001_MAX_OUTB_NUM; i++) { - pm8001_ha->outbnd_q_tbl[i].element_size_cnt = -- PM8001_MPI_QUEUE | (64 << 16) | (0x01<<30); -+ PM8001_MPI_QUEUE | (pm8001_ha->iomb_size << 16) | (0x01<<30); - pm8001_ha->outbnd_q_tbl[i].upper_base_addr = - pm8001_ha->memoryMap.region[OB + i].phys_addr_hi; - pm8001_ha->outbnd_q_tbl[i].lower_base_addr = -diff --git a/drivers/scsi/pm8001/pm80xx_hwi.c b/drivers/scsi/pm8001/pm80xx_hwi.c -index 302514d..e1c4896 100644 ---- a/drivers/scsi/pm8001/pm80xx_hwi.c -+++ b/drivers/scsi/pm8001/pm80xx_hwi.c -@@ -275,7 +275,7 @@ static void init_default_table_values(struct pm8001_hba_info *pm8001_ha) - - for (i = 0; i < PM8001_MAX_SPCV_INB_NUM; i++) { - pm8001_ha->inbnd_q_tbl[i].element_pri_size_cnt = -- PM8001_MPI_QUEUE | (64 << 16) | (0x00<<30); -+ PM8001_MPI_QUEUE | (pm8001_ha->iomb_size << 16) | (0x00<<30); - pm8001_ha->inbnd_q_tbl[i].upper_base_addr = - pm8001_ha->memoryMap.region[IB + i].phys_addr_hi; - pm8001_ha->inbnd_q_tbl[i].lower_base_addr = -@@ -301,7 +301,7 @@ static void init_default_table_values(struct pm8001_hba_info *pm8001_ha) - } - for (i = 0; i < PM8001_MAX_SPCV_OUTB_NUM; i++) { - pm8001_ha->outbnd_q_tbl[i].element_size_cnt = -- PM8001_MPI_QUEUE | (64 << 16) | (0x01<<30); -+ PM8001_MPI_QUEUE | (pm8001_ha->iomb_size << 16) | (0x01<<30); - pm8001_ha->outbnd_q_tbl[i].upper_base_addr = - pm8001_ha->memoryMap.region[OB + i].phys_addr_hi; - pm8001_ha->outbnd_q_tbl[i].lower_base_addr = -diff --git a/drivers/staging/imx-drm/imx-drm-core.c b/drivers/staging/imx-drm/imx-drm-core.c -index 6455305..a532ca5 100644 ---- a/drivers/staging/imx-drm/imx-drm-core.c -+++ b/drivers/staging/imx-drm/imx-drm-core.c -@@ -681,6 +681,7 @@ found: - - return i; - } -+EXPORT_SYMBOL_GPL(imx_drm_encoder_get_mux_id); - - /* - * imx_drm_remove_encoder - remove an encoder -diff --git a/drivers/target/iscsi/iscsi_target.c b/drivers/target/iscsi/iscsi_target.c -index 012ff8b..4c1b8db 100644 ---- a/drivers/target/iscsi/iscsi_target.c -+++ b/drivers/target/iscsi/iscsi_target.c -@@ -1086,7 +1086,6 @@ int iscsit_process_scsi_cmd(struct iscsi_conn *conn, struct iscsi_cmd *cmd, - if (cmd->reject_reason) - return 0; - -- target_put_sess_cmd(conn->sess->se_sess, &cmd->se_cmd); - return 1; - } - /* -@@ -1124,14 +1123,10 @@ after_immediate_data: - */ - cmdsn_ret = iscsit_sequence_cmd(cmd->conn, cmd, - (unsigned char *)hdr, hdr->cmdsn); -- if (cmdsn_ret == CMDSN_ERROR_CANNOT_RECOVER) { -+ if (cmdsn_ret == CMDSN_ERROR_CANNOT_RECOVER) - return -1; -- } else if (cmdsn_ret == CMDSN_LOWER_THAN_EXP) { -- target_put_sess_cmd(conn->sess->se_sess, &cmd->se_cmd); -- return 0; -- } - -- if (cmd->sense_reason) { -+ if (cmd->sense_reason || cmdsn_ret == CMDSN_LOWER_THAN_EXP) { - int rc; - - rc = iscsit_dump_data_payload(cmd->conn, -@@ -1541,6 +1536,10 @@ int iscsit_handle_nop_out(struct iscsi_conn *conn, struct iscsi_cmd *cmd, - if (hdr->itt == RESERVED_ITT && !(hdr->opcode & ISCSI_OP_IMMEDIATE)) { - pr_err("NOPOUT ITT is reserved, but Immediate Bit is" - " not set, protocol error.\n"); -+ if (!cmd) -+ return iscsit_add_reject(conn, ISCSI_REASON_PROTOCOL_ERROR, -+ (unsigned char *)hdr); -+ - return iscsit_reject_cmd(cmd, ISCSI_REASON_PROTOCOL_ERROR, - (unsigned char *)hdr); - } -@@ -1550,6 +1549,10 @@ int iscsit_handle_nop_out(struct iscsi_conn *conn, struct iscsi_cmd *cmd, - " greater than MaxXmitDataSegmentLength: %u, protocol" - " error.\n", payload_length, - conn->conn_ops->MaxXmitDataSegmentLength); -+ if (!cmd) -+ return iscsit_add_reject(conn, ISCSI_REASON_PROTOCOL_ERROR, -+ (unsigned char *)hdr); -+ - return iscsit_reject_cmd(cmd, ISCSI_REASON_PROTOCOL_ERROR, - (unsigned char *)hdr); - } -diff --git a/drivers/target/iscsi/iscsi_target_login.c b/drivers/target/iscsi/iscsi_target_login.c -index 3402241..bc788c5 100644 ---- a/drivers/target/iscsi/iscsi_target_login.c -+++ b/drivers/target/iscsi/iscsi_target_login.c -@@ -1163,12 +1163,11 @@ static int __iscsi_target_login_thread(struct iscsi_np *np) - if (np->np_thread_state == ISCSI_NP_THREAD_RESET) { - spin_unlock_bh(&np->np_thread_lock); - complete(&np->np_restart_comp); -- if (ret == -ENODEV) { -- iscsit_put_transport(conn->conn_transport); -- kfree(conn); -- conn = NULL; -+ iscsit_put_transport(conn->conn_transport); -+ kfree(conn); -+ conn = NULL; -+ if (ret == -ENODEV) - goto out; -- } - /* Get another socket */ - return 1; - } -diff --git a/drivers/target/target_core_spc.c b/drivers/target/target_core_spc.c -index 4cb667d..9fabbf7 100644 ---- a/drivers/target/target_core_spc.c -+++ b/drivers/target/target_core_spc.c -@@ -97,9 +97,12 @@ spc_emulate_inquiry_std(struct se_cmd *cmd, unsigned char *buf) - - buf[7] = 0x2; /* CmdQue=1 */ - -- snprintf(&buf[8], 8, "LIO-ORG"); -- snprintf(&buf[16], 16, "%s", dev->t10_wwn.model); -- snprintf(&buf[32], 4, "%s", dev->t10_wwn.revision); -+ memcpy(&buf[8], "LIO-ORG ", 8); -+ memset(&buf[16], 0x20, 16); -+ memcpy(&buf[16], dev->t10_wwn.model, -+ min_t(size_t, strlen(dev->t10_wwn.model), 16)); -+ memcpy(&buf[32], dev->t10_wwn.revision, -+ min_t(size_t, strlen(dev->t10_wwn.revision), 4)); - buf[4] = 31; /* Set additional length to 31 */ - - return 0; -diff --git a/drivers/tty/hvc/hvsi_lib.c b/drivers/tty/hvc/hvsi_lib.c -index 3396eb9..ac27671 100644 ---- a/drivers/tty/hvc/hvsi_lib.c -+++ b/drivers/tty/hvc/hvsi_lib.c -@@ -341,8 +341,8 @@ void hvsilib_establish(struct hvsi_priv *pv) - - pr_devel("HVSI@%x: ... waiting handshake\n", pv->termno); - -- /* Try for up to 200s */ -- for (timeout = 0; timeout < 20; timeout++) { -+ /* Try for up to 400ms */ -+ for (timeout = 0; timeout < 40; timeout++) { - if (pv->established) - goto established; - if (!hvsi_get_packet(pv)) -diff --git a/drivers/usb/gadget/f_acm.c b/drivers/usb/gadget/f_acm.c -index 4b7e33e..ab1065a 100644 ---- a/drivers/usb/gadget/f_acm.c -+++ b/drivers/usb/gadget/f_acm.c -@@ -285,6 +285,7 @@ static struct usb_string acm_string_defs[] = { - [ACM_CTRL_IDX].s = "CDC Abstract Control Model (ACM)", - [ACM_DATA_IDX].s = "CDC ACM Data", - [ACM_IAD_IDX ].s = "CDC Serial", -+ { } /* end of list */ - }; - - static struct usb_gadget_strings acm_string_table = { -diff --git a/fs/jfs/jfs_dtree.c b/fs/jfs/jfs_dtree.c -index 0ddbece..c450fdb 100644 ---- a/fs/jfs/jfs_dtree.c -+++ b/fs/jfs/jfs_dtree.c -@@ -3047,6 +3047,14 @@ int jfs_readdir(struct file *filp, void *dirent, filldir_t filldir) - - dir_index = (u32) filp->f_pos; - -+ /* -+ * NFSv4 reserves cookies 1 and 2 for . and .. so we add -+ * the value we return to the vfs is one greater than the -+ * one we use internally. -+ */ -+ if (dir_index) -+ dir_index--; -+ - if (dir_index > 1) { - struct dir_table_slot dirtab_slot; - -@@ -3086,7 +3094,7 @@ int jfs_readdir(struct file *filp, void *dirent, filldir_t filldir) - if (p->header.flag & BT_INTERNAL) { - jfs_err("jfs_readdir: bad index table"); - DT_PUTPAGE(mp); -- filp->f_pos = -1; -+ filp->f_pos = DIREND; - return 0; - } - } else { -@@ -3094,7 +3102,7 @@ int jfs_readdir(struct file *filp, void *dirent, filldir_t filldir) - /* - * self "." - */ -- filp->f_pos = 0; -+ filp->f_pos = 1; - if (filldir(dirent, ".", 1, 0, ip->i_ino, - DT_DIR)) - return 0; -@@ -3102,7 +3110,7 @@ int jfs_readdir(struct file *filp, void *dirent, filldir_t filldir) - /* - * parent ".." - */ -- filp->f_pos = 1; -+ filp->f_pos = 2; - if (filldir(dirent, "..", 2, 1, PARENT(ip), DT_DIR)) - return 0; - -@@ -3123,24 +3131,25 @@ int jfs_readdir(struct file *filp, void *dirent, filldir_t filldir) - /* - * Legacy filesystem - OS/2 & Linux JFS < 0.3.6 - * -- * pn = index = 0: First entry "." -- * pn = 0; index = 1: Second entry ".." -+ * pn = 0; index = 1: First entry "." -+ * pn = 0; index = 2: Second entry ".." - * pn > 0: Real entries, pn=1 -> leftmost page - * pn = index = -1: No more entries - */ - dtpos = filp->f_pos; -- if (dtpos == 0) { -+ if (dtpos < 2) { - /* build "." entry */ - -+ filp->f_pos = 1; - if (filldir(dirent, ".", 1, filp->f_pos, ip->i_ino, - DT_DIR)) - return 0; -- dtoffset->index = 1; -+ dtoffset->index = 2; - filp->f_pos = dtpos; - } - - if (dtoffset->pn == 0) { -- if (dtoffset->index == 1) { -+ if (dtoffset->index == 2) { - /* build ".." entry */ - - if (filldir(dirent, "..", 2, filp->f_pos, -@@ -3233,6 +3242,12 @@ int jfs_readdir(struct file *filp, void *dirent, filldir_t filldir) - } - jfs_dirent->position = unique_pos++; - } -+ /* -+ * We add 1 to the index because we may -+ * use a value of 2 internally, and NFSv4 -+ * doesn't like that. -+ */ -+ jfs_dirent->position++; - } else { - jfs_dirent->position = dtpos; - len = min(d_namleft, DTLHDRDATALEN_LEGACY); -diff --git a/include/linux/regmap.h b/include/linux/regmap.h -index f91bb41..98c470ce 100644 ---- a/include/linux/regmap.h -+++ b/include/linux/regmap.h -@@ -16,6 +16,7 @@ - #include <linux/list.h> - #include <linux/rbtree.h> - #include <linux/err.h> -+#include <linux/bug.h> - - struct module; - struct device; -diff --git a/include/net/mac80211.h b/include/net/mac80211.h -index 885898a..4e50d36 100644 ---- a/include/net/mac80211.h -+++ b/include/net/mac80211.h -@@ -1484,6 +1484,7 @@ enum ieee80211_hw_flags { - IEEE80211_HW_SUPPORTS_RC_TABLE = 1<<24, - IEEE80211_HW_P2P_DEV_ADDR_FOR_INTF = 1<<25, - IEEE80211_HW_TIMING_BEACON_ONLY = 1<<26, -+ IEEE80211_HW_SUPPORTS_HT_CCK_RATES = 1<<27, - }; - - /** -diff --git a/ipc/msg.c b/ipc/msg.c -index d0c6d96..f8fbe2c 100644 ---- a/ipc/msg.c -+++ b/ipc/msg.c -@@ -795,7 +795,7 @@ static inline void free_copy(struct msg_msg *copy) - - static struct msg_msg *find_msg(struct msg_queue *msq, long *msgtyp, int mode) - { -- struct msg_msg *msg; -+ struct msg_msg *msg, *found = NULL; - long count = 0; - - list_for_each_entry(msg, &msq->q_messages, m_list) { -@@ -804,6 +804,7 @@ static struct msg_msg *find_msg(struct msg_queue *msq, long *msgtyp, int mode) - *msgtyp, mode)) { - if (mode == SEARCH_LESSEQUAL && msg->m_type != 1) { - *msgtyp = msg->m_type - 1; -+ found = msg; - } else if (mode == SEARCH_NUMBER) { - if (*msgtyp == count) - return msg; -@@ -813,7 +814,7 @@ static struct msg_msg *find_msg(struct msg_queue *msq, long *msgtyp, int mode) - } - } - -- return ERR_PTR(-EAGAIN); -+ return found ?: ERR_PTR(-EAGAIN); - } - - -diff --git a/kernel/time/timer_list.c b/kernel/time/timer_list.c -index 3bdf283..61ed862 100644 ---- a/kernel/time/timer_list.c -+++ b/kernel/time/timer_list.c -@@ -265,10 +265,9 @@ static inline void timer_list_header(struct seq_file *m, u64 now) - static int timer_list_show(struct seq_file *m, void *v) - { - struct timer_list_iter *iter = v; -- u64 now = ktime_to_ns(ktime_get()); - - if (iter->cpu == -1 && !iter->second_pass) -- timer_list_header(m, now); -+ timer_list_header(m, iter->now); - else if (!iter->second_pass) - print_cpu(m, iter->cpu, iter->now); - #ifdef CONFIG_GENERIC_CLOCKEVENTS -@@ -298,33 +297,41 @@ void sysrq_timer_list_show(void) - return; - } - --static void *timer_list_start(struct seq_file *file, loff_t *offset) -+static void *move_iter(struct timer_list_iter *iter, loff_t offset) - { -- struct timer_list_iter *iter = file->private; -- -- if (!*offset) { -- iter->cpu = -1; -- iter->now = ktime_to_ns(ktime_get()); -- } else if (iter->cpu >= nr_cpu_ids) { -+ for (; offset; offset--) { -+ iter->cpu = cpumask_next(iter->cpu, cpu_online_mask); -+ if (iter->cpu >= nr_cpu_ids) { - #ifdef CONFIG_GENERIC_CLOCKEVENTS -- if (!iter->second_pass) { -- iter->cpu = -1; -- iter->second_pass = true; -- } else -- return NULL; -+ if (!iter->second_pass) { -+ iter->cpu = -1; -+ iter->second_pass = true; -+ } else -+ return NULL; - #else -- return NULL; -+ return NULL; - #endif -+ } - } - return iter; - } - -+static void *timer_list_start(struct seq_file *file, loff_t *offset) -+{ -+ struct timer_list_iter *iter = file->private; -+ -+ if (!*offset) -+ iter->now = ktime_to_ns(ktime_get()); -+ iter->cpu = -1; -+ iter->second_pass = false; -+ return move_iter(iter, *offset); -+} -+ - static void *timer_list_next(struct seq_file *file, void *v, loff_t *offset) - { - struct timer_list_iter *iter = file->private; -- iter->cpu = cpumask_next(iter->cpu, cpu_online_mask); - ++*offset; -- return timer_list_start(file, offset); -+ return move_iter(iter, 1); - } - - static void timer_list_stop(struct seq_file *seq, void *v) -diff --git a/kernel/workqueue.c b/kernel/workqueue.c -index 6f01921..e52d002 100644 ---- a/kernel/workqueue.c -+++ b/kernel/workqueue.c -@@ -2188,6 +2188,15 @@ __acquires(&pool->lock) - dump_stack(); - } - -+ /* -+ * The following prevents a kworker from hogging CPU on !PREEMPT -+ * kernels, where a requeueing work item waiting for something to -+ * happen could deadlock with stop_machine as such work item could -+ * indefinitely requeue itself while all other CPUs are trapped in -+ * stop_machine. -+ */ -+ cond_resched(); -+ - spin_lock_irq(&pool->lock); - - /* clear cpu intensive status */ -diff --git a/mm/slab.h b/mm/slab.h -index f96b49e..4d6d836 100644 ---- a/mm/slab.h -+++ b/mm/slab.h -@@ -162,6 +162,8 @@ static inline const char *cache_name(struct kmem_cache *s) - - static inline struct kmem_cache *cache_from_memcg(struct kmem_cache *s, int idx) - { -+ if (!s->memcg_params) -+ return NULL; - return s->memcg_params->memcg_caches[idx]; - } - -diff --git a/net/mac80211/ibss.c b/net/mac80211/ibss.c -index 170f9a7..3052672 100644 ---- a/net/mac80211/ibss.c -+++ b/net/mac80211/ibss.c -@@ -1166,6 +1166,7 @@ int ieee80211_ibss_leave(struct ieee80211_sub_if_data *sdata) - clear_bit(SDATA_STATE_OFFCHANNEL_BEACON_STOPPED, &sdata->state); - ieee80211_bss_info_change_notify(sdata, BSS_CHANGED_BEACON_ENABLED | - BSS_CHANGED_IBSS); -+ ieee80211_vif_release_channel(sdata); - synchronize_rcu(); - kfree(presp); - -diff --git a/net/mac80211/rc80211_minstrel_ht.c b/net/mac80211/rc80211_minstrel_ht.c -index f5aed96..f3bbea1 100644 ---- a/net/mac80211/rc80211_minstrel_ht.c -+++ b/net/mac80211/rc80211_minstrel_ht.c -@@ -828,6 +828,9 @@ minstrel_ht_update_cck(struct minstrel_priv *mp, struct minstrel_ht_sta *mi, - if (sband->band != IEEE80211_BAND_2GHZ) - return; - -+ if (!(mp->hw->flags & IEEE80211_HW_SUPPORTS_HT_CCK_RATES)) -+ return; -+ - mi->cck_supported = 0; - mi->cck_supported_short = 0; - for (i = 0; i < 4; i++) { -diff --git a/net/sunrpc/xdr.c b/net/sunrpc/xdr.c -index 75edcfa..1504bb1 100644 ---- a/net/sunrpc/xdr.c -+++ b/net/sunrpc/xdr.c -@@ -207,10 +207,13 @@ _shift_data_right_pages(struct page **pages, size_t pgto_base, - pgfrom_base -= copy; - - vto = kmap_atomic(*pgto); -- vfrom = kmap_atomic(*pgfrom); -- memmove(vto + pgto_base, vfrom + pgfrom_base, copy); -+ if (*pgto != *pgfrom) { -+ vfrom = kmap_atomic(*pgfrom); -+ memcpy(vto + pgto_base, vfrom + pgfrom_base, copy); -+ kunmap_atomic(vfrom); -+ } else -+ memmove(vto + pgto_base, vto + pgfrom_base, copy); - flush_dcache_page(*pgto); -- kunmap_atomic(vfrom); - kunmap_atomic(vto); - - } while ((len -= copy) != 0); -diff --git a/sound/isa/opti9xx/opti92x-ad1848.c b/sound/isa/opti9xx/opti92x-ad1848.c -index b41ed86..e427dbf 100644 ---- a/sound/isa/opti9xx/opti92x-ad1848.c -+++ b/sound/isa/opti9xx/opti92x-ad1848.c -@@ -173,11 +173,7 @@ MODULE_DEVICE_TABLE(pnp_card, snd_opti9xx_pnpids); - - #endif /* CONFIG_PNP */ - --#ifdef OPTi93X --#define DEV_NAME "opti93x" --#else --#define DEV_NAME "opti92x" --#endif -+#define DEV_NAME KBUILD_MODNAME - - static char * snd_opti9xx_names[] = { - "unknown", -@@ -1168,7 +1164,7 @@ static int snd_opti9xx_pnp_resume(struct pnp_card_link *pcard) - - static struct pnp_card_driver opti9xx_pnpc_driver = { - .flags = PNP_DRIVER_RES_DISABLE, -- .name = "opti9xx", -+ .name = DEV_NAME, - .id_table = snd_opti9xx_pnpids, - .probe = snd_opti9xx_pnp_probe, - .remove = snd_opti9xx_pnp_remove, -diff --git a/sound/pci/hda/patch_hdmi.c b/sound/pci/hda/patch_hdmi.c -index 496d7f2..5bc4194 100644 ---- a/sound/pci/hda/patch_hdmi.c -+++ b/sound/pci/hda/patch_hdmi.c -@@ -1715,6 +1715,9 @@ static int generic_hdmi_build_controls(struct hda_codec *codec) - struct snd_pcm_chmap *chmap; - struct snd_kcontrol *kctl; - int i; -+ -+ if (!codec->pcm_info[pin_idx].pcm) -+ break; - err = snd_pcm_add_chmap_ctls(codec->pcm_info[pin_idx].pcm, - SNDRV_PCM_STREAM_PLAYBACK, - NULL, 0, pin_idx, &chmap); -diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c -index 57f9f2a..458cf89 100644 ---- a/sound/pci/hda/patch_realtek.c -+++ b/sound/pci/hda/patch_realtek.c -@@ -4207,6 +4207,7 @@ static const struct hda_fixup alc662_fixups[] = { - - static const struct snd_pci_quirk alc662_fixup_tbl[] = { - SND_PCI_QUIRK(0x1019, 0x9087, "ECS", ALC662_FIXUP_ASUS_MODE2), -+ SND_PCI_QUIRK(0x1025, 0x022f, "Acer Aspire One", ALC662_FIXUP_INV_DMIC), - SND_PCI_QUIRK(0x1025, 0x0308, "Acer Aspire 8942G", ALC662_FIXUP_ASPIRE), - SND_PCI_QUIRK(0x1025, 0x031c, "Gateway NV79", ALC662_FIXUP_SKU_IGNORE), - SND_PCI_QUIRK(0x1025, 0x0349, "eMachines eM250", ALC662_FIXUP_INV_DMIC), |