Magellan Linux

Annotation of /trunk/kernel-alx/patches-3.14/0106-3.14.7-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2506 - (hide annotations) (download)
Fri Oct 17 07:55:45 2014 UTC (9 years, 6 months ago) by niro
File size: 90750 byte(s)
-patches for 3.14
1 niro 2506 diff --git a/Documentation/DocBook/media/Makefile b/Documentation/DocBook/media/Makefile
2     index f9fd615427fb..1d27f0a1abd1 100644
3     --- a/Documentation/DocBook/media/Makefile
4     +++ b/Documentation/DocBook/media/Makefile
5     @@ -195,7 +195,7 @@ DVB_DOCUMENTED = \
6     #
7    
8     install_media_images = \
9     - $(Q)cp $(OBJIMGFILES) $(MEDIA_SRC_DIR)/v4l/*.svg $(MEDIA_OBJ_DIR)/media_api
10     + $(Q)-cp $(OBJIMGFILES) $(MEDIA_SRC_DIR)/v4l/*.svg $(MEDIA_OBJ_DIR)/media_api
11    
12     $(MEDIA_OBJ_DIR)/%: $(MEDIA_SRC_DIR)/%.b64
13     $(Q)base64 -d $< >$@
14     diff --git a/Documentation/debugging-via-ohci1394.txt b/Documentation/debugging-via-ohci1394.txt
15     index fa0151a712f9..5c9a567b3fac 100644
16     --- a/Documentation/debugging-via-ohci1394.txt
17     +++ b/Documentation/debugging-via-ohci1394.txt
18     @@ -25,9 +25,11 @@ using data transfer rates in the order of 10MB/s or more.
19     With most FireWire controllers, memory access is limited to the low 4 GB
20     of physical address space. This can be a problem on IA64 machines where
21     memory is located mostly above that limit, but it is rarely a problem on
22     -more common hardware such as x86, x86-64 and PowerPC. However, at least
23     -Agere/LSI FW643e and FW643e2 controllers are known to support access to
24     -physical addresses above 4 GB.
25     +more common hardware such as x86, x86-64 and PowerPC.
26     +
27     +At least LSI FW643e and FW643e2 controllers are known to support access to
28     +physical addresses above 4 GB, but this feature is currently not enabled by
29     +Linux.
30    
31     Together with a early initialization of the OHCI-1394 controller for debugging,
32     this facility proved most useful for examining long debugs logs in the printk
33     @@ -101,8 +103,9 @@ Step-by-step instructions for using firescope with early OHCI initialization:
34     compliant, they are based on TI PCILynx chips and require drivers for Win-
35     dows operating systems.
36    
37     - The mentioned kernel log message contains ">4 GB phys DMA" in case of
38     - OHCI-1394 controllers which support accesses above this limit.
39     + The mentioned kernel log message contains the string "physUB" if the
40     + controller implements a writable Physical Upper Bound register. This is
41     + required for physical DMA above 4 GB (but not utilized by Linux yet).
42    
43     2) Establish a working FireWire cable connection:
44    
45     diff --git a/Documentation/device-mapper/thin-provisioning.txt b/Documentation/device-mapper/thin-provisioning.txt
46     index 05a27e9442bd..2f5173500bd9 100644
47     --- a/Documentation/device-mapper/thin-provisioning.txt
48     +++ b/Documentation/device-mapper/thin-provisioning.txt
49     @@ -309,7 +309,10 @@ ii) Status
50     error_if_no_space|queue_if_no_space
51     If the pool runs out of data or metadata space, the pool will
52     either queue or error the IO destined to the data device. The
53     - default is to queue the IO until more space is added.
54     + default is to queue the IO until more space is added or the
55     + 'no_space_timeout' expires. The 'no_space_timeout' dm-thin-pool
56     + module parameter can be used to change this timeout -- it
57     + defaults to 60 seconds but may be disabled using a value of 0.
58    
59     iii) Messages
60    
61     diff --git a/Makefile b/Makefile
62     index 0d499e6896cd..f2d1225828c2 100644
63     --- a/Makefile
64     +++ b/Makefile
65     @@ -1,6 +1,6 @@
66     VERSION = 3
67     PATCHLEVEL = 14
68     -SUBLEVEL = 6
69     +SUBLEVEL = 7
70     EXTRAVERSION =
71     NAME = Remembering Coco
72    
73     diff --git a/arch/arm/include/asm/uaccess.h b/arch/arm/include/asm/uaccess.h
74     index 72abdc541f38..7f3f3cc25d7e 100644
75     --- a/arch/arm/include/asm/uaccess.h
76     +++ b/arch/arm/include/asm/uaccess.h
77     @@ -171,8 +171,9 @@ extern int __put_user_8(void *, unsigned long long);
78     #define __put_user_check(x,p) \
79     ({ \
80     unsigned long __limit = current_thread_info()->addr_limit - 1; \
81     + const typeof(*(p)) __user *__tmp_p = (p); \
82     register const typeof(*(p)) __r2 asm("r2") = (x); \
83     - register const typeof(*(p)) __user *__p asm("r0") = (p);\
84     + register const typeof(*(p)) __user *__p asm("r0") = __tmp_p; \
85     register unsigned long __l asm("r1") = __limit; \
86     register int __e asm("r0"); \
87     switch (sizeof(*(__p))) { \
88     diff --git a/arch/arm/kernel/entry-header.S b/arch/arm/kernel/entry-header.S
89     index 39f89fbd5111..88c6babeb0b5 100644
90     --- a/arch/arm/kernel/entry-header.S
91     +++ b/arch/arm/kernel/entry-header.S
92     @@ -132,6 +132,10 @@
93     orrne r5, V7M_xPSR_FRAMEPTRALIGN
94     biceq r5, V7M_xPSR_FRAMEPTRALIGN
95    
96     + @ ensure bit 0 is cleared in the PC, otherwise behaviour is
97     + @ unpredictable
98     + bic r4, #1
99     +
100     @ write basic exception frame
101     stmdb r2!, {r1, r3-r5}
102     ldmia sp, {r1, r3-r5}
103     diff --git a/arch/arm/mach-imx/devices/platform-ipu-core.c b/arch/arm/mach-imx/devices/platform-ipu-core.c
104     index fc4dd7cedc11..6bd7c3f37ac0 100644
105     --- a/arch/arm/mach-imx/devices/platform-ipu-core.c
106     +++ b/arch/arm/mach-imx/devices/platform-ipu-core.c
107     @@ -77,7 +77,7 @@ struct platform_device *__init imx_alloc_mx3_camera(
108    
109     pdev = platform_device_alloc("mx3-camera", 0);
110     if (!pdev)
111     - goto err;
112     + return ERR_PTR(-ENOMEM);
113    
114     pdev->dev.dma_mask = kmalloc(sizeof(*pdev->dev.dma_mask), GFP_KERNEL);
115     if (!pdev->dev.dma_mask)
116     diff --git a/arch/arm/mach-omap2/board-flash.c b/arch/arm/mach-omap2/board-flash.c
117     index ac82512b9c8c..b6885e42c0a0 100644
118     --- a/arch/arm/mach-omap2/board-flash.c
119     +++ b/arch/arm/mach-omap2/board-flash.c
120     @@ -142,7 +142,7 @@ __init board_nand_init(struct mtd_partition *nand_parts, u8 nr_parts, u8 cs,
121     board_nand_data.nr_parts = nr_parts;
122     board_nand_data.devsize = nand_type;
123    
124     - board_nand_data.ecc_opt = OMAP_ECC_BCH8_CODE_HW;
125     + board_nand_data.ecc_opt = OMAP_ECC_HAM1_CODE_HW;
126     gpmc_nand_init(&board_nand_data, gpmc_t);
127     }
128     #endif /* CONFIG_MTD_NAND_OMAP2 || CONFIG_MTD_NAND_OMAP2_MODULE */
129     diff --git a/arch/arm/mach-omap2/cclock3xxx_data.c b/arch/arm/mach-omap2/cclock3xxx_data.c
130     index 11ed9152e665..793039a9bd26 100644
131     --- a/arch/arm/mach-omap2/cclock3xxx_data.c
132     +++ b/arch/arm/mach-omap2/cclock3xxx_data.c
133     @@ -456,7 +456,8 @@ static struct clk_hw_omap dpll4_m5x2_ck_hw = {
134     .clkdm_name = "dpll4_clkdm",
135     };
136    
137     -DEFINE_STRUCT_CLK(dpll4_m5x2_ck, dpll4_m5x2_ck_parent_names, dpll4_m5x2_ck_ops);
138     +DEFINE_STRUCT_CLK_FLAGS(dpll4_m5x2_ck, dpll4_m5x2_ck_parent_names,
139     + dpll4_m5x2_ck_ops, CLK_SET_RATE_PARENT);
140    
141     static struct clk dpll4_m5x2_ck_3630 = {
142     .name = "dpll4_m5x2_ck",
143     diff --git a/arch/arm/mach-omap2/cpuidle44xx.c b/arch/arm/mach-omap2/cpuidle44xx.c
144     index 01fc710c8181..2498ab025fa2 100644
145     --- a/arch/arm/mach-omap2/cpuidle44xx.c
146     +++ b/arch/arm/mach-omap2/cpuidle44xx.c
147     @@ -14,6 +14,7 @@
148     #include <linux/cpuidle.h>
149     #include <linux/cpu_pm.h>
150     #include <linux/export.h>
151     +#include <linux/clockchips.h>
152    
153     #include <asm/cpuidle.h>
154     #include <asm/proc-fns.h>
155     @@ -83,6 +84,7 @@ static int omap_enter_idle_coupled(struct cpuidle_device *dev,
156     {
157     struct idle_statedata *cx = state_ptr + index;
158     u32 mpuss_can_lose_context = 0;
159     + int cpu_id = smp_processor_id();
160    
161     /*
162     * CPU0 has to wait and stay ON until CPU1 is OFF state.
163     @@ -110,6 +112,8 @@ static int omap_enter_idle_coupled(struct cpuidle_device *dev,
164     mpuss_can_lose_context = (cx->mpu_state == PWRDM_POWER_RET) &&
165     (cx->mpu_logic_state == PWRDM_POWER_OFF);
166    
167     + clockevents_notify(CLOCK_EVT_NOTIFY_BROADCAST_ENTER, &cpu_id);
168     +
169     /*
170     * Call idle CPU PM enter notifier chain so that
171     * VFP and per CPU interrupt context is saved.
172     @@ -165,6 +169,8 @@ static int omap_enter_idle_coupled(struct cpuidle_device *dev,
173     if (dev->cpu == 0 && mpuss_can_lose_context)
174     cpu_cluster_pm_exit();
175    
176     + clockevents_notify(CLOCK_EVT_NOTIFY_BROADCAST_EXIT, &cpu_id);
177     +
178     fail:
179     cpuidle_coupled_parallel_barrier(dev, &abort_barrier);
180     cpu_done[dev->cpu] = false;
181     @@ -172,6 +178,16 @@ fail:
182     return index;
183     }
184    
185     +/*
186     + * For each cpu, setup the broadcast timer because local timers
187     + * stops for the states above C1.
188     + */
189     +static void omap_setup_broadcast_timer(void *arg)
190     +{
191     + int cpu = smp_processor_id();
192     + clockevents_notify(CLOCK_EVT_NOTIFY_BROADCAST_ON, &cpu);
193     +}
194     +
195     static struct cpuidle_driver omap4_idle_driver = {
196     .name = "omap4_idle",
197     .owner = THIS_MODULE,
198     @@ -189,8 +205,7 @@ static struct cpuidle_driver omap4_idle_driver = {
199     /* C2 - CPU0 OFF + CPU1 OFF + MPU CSWR */
200     .exit_latency = 328 + 440,
201     .target_residency = 960,
202     - .flags = CPUIDLE_FLAG_TIME_VALID | CPUIDLE_FLAG_COUPLED |
203     - CPUIDLE_FLAG_TIMER_STOP,
204     + .flags = CPUIDLE_FLAG_TIME_VALID | CPUIDLE_FLAG_COUPLED,
205     .enter = omap_enter_idle_coupled,
206     .name = "C2",
207     .desc = "CPUx OFF, MPUSS CSWR",
208     @@ -199,8 +214,7 @@ static struct cpuidle_driver omap4_idle_driver = {
209     /* C3 - CPU0 OFF + CPU1 OFF + MPU OSWR */
210     .exit_latency = 460 + 518,
211     .target_residency = 1100,
212     - .flags = CPUIDLE_FLAG_TIME_VALID | CPUIDLE_FLAG_COUPLED |
213     - CPUIDLE_FLAG_TIMER_STOP,
214     + .flags = CPUIDLE_FLAG_TIME_VALID | CPUIDLE_FLAG_COUPLED,
215     .enter = omap_enter_idle_coupled,
216     .name = "C3",
217     .desc = "CPUx OFF, MPUSS OSWR",
218     @@ -231,5 +245,8 @@ int __init omap4_idle_init(void)
219     if (!cpu_clkdm[0] || !cpu_clkdm[1])
220     return -ENODEV;
221    
222     + /* Configure the broadcast timer on each cpu */
223     + on_each_cpu(omap_setup_broadcast_timer, NULL, 1);
224     +
225     return cpuidle_register(&omap4_idle_driver, cpu_online_mask);
226     }
227     diff --git a/arch/arm/mach-omap2/omap_hwmod_54xx_data.c b/arch/arm/mach-omap2/omap_hwmod_54xx_data.c
228     index e297d6231c3a..7babf515465c 100644
229     --- a/arch/arm/mach-omap2/omap_hwmod_54xx_data.c
230     +++ b/arch/arm/mach-omap2/omap_hwmod_54xx_data.c
231     @@ -895,7 +895,7 @@ static struct omap_hwmod omap54xx_mcpdm_hwmod = {
232     * current exception.
233     */
234    
235     - .flags = HWMOD_EXT_OPT_MAIN_CLK,
236     + .flags = HWMOD_EXT_OPT_MAIN_CLK | HWMOD_SWSUP_SIDLE,
237     .main_clk = "pad_clks_ck",
238     .prcm = {
239     .omap4 = {
240     diff --git a/arch/mips/kernel/traps.c b/arch/mips/kernel/traps.c
241     index e0b499694d18..81e6ae0220bc 100644
242     --- a/arch/mips/kernel/traps.c
243     +++ b/arch/mips/kernel/traps.c
244     @@ -1429,7 +1429,7 @@ asmlinkage void cache_parity_error(void)
245     reg_val & (1<<30) ? "secondary" : "primary",
246     reg_val & (1<<31) ? "data" : "insn");
247     if (cpu_has_mips_r2 &&
248     - ((current_cpu_data.processor_id && 0xff0000) == PRID_COMP_MIPS)) {
249     + ((current_cpu_data.processor_id & 0xff0000) == PRID_COMP_MIPS)) {
250     pr_err("Error bits: %s%s%s%s%s%s%s%s\n",
251     reg_val & (1<<29) ? "ED " : "",
252     reg_val & (1<<28) ? "ET " : "",
253     @@ -1469,7 +1469,7 @@ asmlinkage void do_ftlb(void)
254    
255     /* For the moment, report the problem and hang. */
256     if (cpu_has_mips_r2 &&
257     - ((current_cpu_data.processor_id && 0xff0000) == PRID_COMP_MIPS)) {
258     + ((current_cpu_data.processor_id & 0xff0000) == PRID_COMP_MIPS)) {
259     pr_err("FTLB error exception, cp0_ecc=0x%08x:\n",
260     read_c0_ecc());
261     pr_err("cp0_errorepc == %0*lx\n", field, read_c0_errorepc());
262     diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
263     index bb26636f10c8..62fda16c8377 100644
264     --- a/drivers/ata/libata-core.c
265     +++ b/drivers/ata/libata-core.c
266     @@ -4224,10 +4224,10 @@ static const struct ata_blacklist_entry ata_device_blacklist [] = {
267     { "PIONEER DVD-RW DVR-216D", NULL, ATA_HORKAGE_NOSETXFER },
268    
269     /* devices that don't properly handle queued TRIM commands */
270     - { "Micron_M500*", "MU0[1-4]*", ATA_HORKAGE_NO_NCQ_TRIM, },
271     - { "Crucial_CT???M500SSD*", "MU0[1-4]*", ATA_HORKAGE_NO_NCQ_TRIM, },
272     - { "Micron_M550*", NULL, ATA_HORKAGE_NO_NCQ_TRIM, },
273     - { "Crucial_CT???M550SSD*", NULL, ATA_HORKAGE_NO_NCQ_TRIM, },
274     + { "Micron_M500*", NULL, ATA_HORKAGE_NO_NCQ_TRIM, },
275     + { "Crucial_CT???M500SSD*", NULL, ATA_HORKAGE_NO_NCQ_TRIM, },
276     + { "Micron_M550*", NULL, ATA_HORKAGE_NO_NCQ_TRIM, },
277     + { "Crucial_CT???M550SSD*", NULL, ATA_HORKAGE_NO_NCQ_TRIM, },
278    
279     /*
280     * Some WD SATA-I drives spin up and down erratically when the link
281     diff --git a/drivers/block/virtio_blk.c b/drivers/block/virtio_blk.c
282     index b1cb3f4c4db4..6c911c86fb5a 100644
283     --- a/drivers/block/virtio_blk.c
284     +++ b/drivers/block/virtio_blk.c
285     @@ -144,11 +144,11 @@ static void virtblk_done(struct virtqueue *vq)
286     if (unlikely(virtqueue_is_broken(vq)))
287     break;
288     } while (!virtqueue_enable_cb(vq));
289     - spin_unlock_irqrestore(&vblk->vq_lock, flags);
290    
291     /* In case queue is stopped waiting for more buffers. */
292     if (req_done)
293     blk_mq_start_stopped_hw_queues(vblk->disk->queue);
294     + spin_unlock_irqrestore(&vblk->vq_lock, flags);
295     }
296    
297     static int virtio_queue_rq(struct blk_mq_hw_ctx *hctx, struct request *req)
298     @@ -200,8 +200,8 @@ static int virtio_queue_rq(struct blk_mq_hw_ctx *hctx, struct request *req)
299     spin_lock_irqsave(&vblk->vq_lock, flags);
300     if (__virtblk_add_req(vblk->vq, vbr, vbr->sg, num) < 0) {
301     virtqueue_kick(vblk->vq);
302     - spin_unlock_irqrestore(&vblk->vq_lock, flags);
303     blk_mq_stop_hw_queue(hctx);
304     + spin_unlock_irqrestore(&vblk->vq_lock, flags);
305     return BLK_MQ_RQ_QUEUE_BUSY;
306     }
307    
308     diff --git a/drivers/cpufreq/cpufreq-cpu0.c b/drivers/cpufreq/cpufreq-cpu0.c
309     index 0c12ffc0ebcb..51322856f908 100644
310     --- a/drivers/cpufreq/cpufreq-cpu0.c
311     +++ b/drivers/cpufreq/cpufreq-cpu0.c
312     @@ -131,7 +131,7 @@ static int cpu0_cpufreq_probe(struct platform_device *pdev)
313     return -ENOENT;
314     }
315    
316     - cpu_reg = devm_regulator_get_optional(cpu_dev, "cpu0");
317     + cpu_reg = regulator_get_optional(cpu_dev, "cpu0");
318     if (IS_ERR(cpu_reg)) {
319     /*
320     * If cpu0 regulator supply node is present, but regulator is
321     @@ -146,23 +146,23 @@ static int cpu0_cpufreq_probe(struct platform_device *pdev)
322     PTR_ERR(cpu_reg));
323     }
324    
325     - cpu_clk = devm_clk_get(cpu_dev, NULL);
326     + cpu_clk = clk_get(cpu_dev, NULL);
327     if (IS_ERR(cpu_clk)) {
328     ret = PTR_ERR(cpu_clk);
329     pr_err("failed to get cpu0 clock: %d\n", ret);
330     - goto out_put_node;
331     + goto out_put_reg;
332     }
333    
334     ret = of_init_opp_table(cpu_dev);
335     if (ret) {
336     pr_err("failed to init OPP table: %d\n", ret);
337     - goto out_put_node;
338     + goto out_put_clk;
339     }
340    
341     ret = dev_pm_opp_init_cpufreq_table(cpu_dev, &freq_table);
342     if (ret) {
343     pr_err("failed to init cpufreq table: %d\n", ret);
344     - goto out_put_node;
345     + goto out_put_clk;
346     }
347    
348     of_property_read_u32(np, "voltage-tolerance", &voltage_tolerance);
349     @@ -217,6 +217,12 @@ static int cpu0_cpufreq_probe(struct platform_device *pdev)
350    
351     out_free_table:
352     dev_pm_opp_free_cpufreq_table(cpu_dev, &freq_table);
353     +out_put_clk:
354     + if (!IS_ERR(cpu_clk))
355     + clk_put(cpu_clk);
356     +out_put_reg:
357     + if (!IS_ERR(cpu_reg))
358     + regulator_put(cpu_reg);
359     out_put_node:
360     of_node_put(np);
361     return ret;
362     diff --git a/drivers/cpufreq/cpufreq_governor.c b/drivers/cpufreq/cpufreq_governor.c
363     index ba43991ba98a..e1c6433b16e0 100644
364     --- a/drivers/cpufreq/cpufreq_governor.c
365     +++ b/drivers/cpufreq/cpufreq_governor.c
366     @@ -366,6 +366,11 @@ int cpufreq_governor_dbs(struct cpufreq_policy *policy,
367     break;
368    
369     case CPUFREQ_GOV_LIMITS:
370     + mutex_lock(&dbs_data->mutex);
371     + if (!cpu_cdbs->cur_policy) {
372     + mutex_unlock(&dbs_data->mutex);
373     + break;
374     + }
375     mutex_lock(&cpu_cdbs->timer_mutex);
376     if (policy->max < cpu_cdbs->cur_policy->cur)
377     __cpufreq_driver_target(cpu_cdbs->cur_policy,
378     @@ -375,6 +380,7 @@ int cpufreq_governor_dbs(struct cpufreq_policy *policy,
379     policy->min, CPUFREQ_RELATION_L);
380     dbs_check_cpu(dbs_data, cpu);
381     mutex_unlock(&cpu_cdbs->timer_mutex);
382     + mutex_unlock(&dbs_data->mutex);
383     break;
384     }
385     return 0;
386     diff --git a/drivers/cpufreq/intel_pstate.c b/drivers/cpufreq/intel_pstate.c
387     index 9ac378380677..de9ef4a1986d 100644
388     --- a/drivers/cpufreq/intel_pstate.c
389     +++ b/drivers/cpufreq/intel_pstate.c
390     @@ -40,10 +40,10 @@
391     #define BYT_TURBO_VIDS 0x66d
392    
393    
394     -#define FRAC_BITS 6
395     +#define FRAC_BITS 8
396     #define int_tofp(X) ((int64_t)(X) << FRAC_BITS)
397     #define fp_toint(X) ((X) >> FRAC_BITS)
398     -#define FP_ROUNDUP(X) ((X) += 1 << FRAC_BITS)
399     +
400    
401     static inline int32_t mul_fp(int32_t x, int32_t y)
402     {
403     @@ -59,8 +59,8 @@ struct sample {
404     int32_t core_pct_busy;
405     u64 aperf;
406     u64 mperf;
407     - unsigned long long tsc;
408     int freq;
409     + ktime_t time;
410     };
411    
412     struct pstate_data {
413     @@ -98,11 +98,10 @@ struct cpudata {
414     struct vid_data vid;
415     struct _pid pid;
416    
417     + ktime_t last_sample_time;
418     u64 prev_aperf;
419     u64 prev_mperf;
420     - unsigned long long prev_tsc;
421     - int sample_ptr;
422     - struct sample samples[SAMPLE_COUNT];
423     + struct sample sample;
424     };
425    
426     static struct cpudata **all_cpu_data;
427     @@ -201,7 +200,10 @@ static signed int pid_calc(struct _pid *pid, int32_t busy)
428     pid->last_err = fp_error;
429    
430     result = pterm + mul_fp(pid->integral, pid->i_gain) + dterm;
431     -
432     + if (result >= 0)
433     + result = result + (1 << (FRAC_BITS-1));
434     + else
435     + result = result - (1 << (FRAC_BITS-1));
436     return (signed int)fp_toint(result);
437     }
438    
439     @@ -561,48 +563,42 @@ static void intel_pstate_get_cpu_pstates(struct cpudata *cpu)
440     static inline void intel_pstate_calc_busy(struct cpudata *cpu,
441     struct sample *sample)
442     {
443     - int32_t core_pct;
444     - int32_t c0_pct;
445     + int64_t core_pct;
446     + int32_t rem;
447    
448     - core_pct = div_fp(int_tofp((sample->aperf)),
449     - int_tofp((sample->mperf)));
450     - core_pct = mul_fp(core_pct, int_tofp(100));
451     - FP_ROUNDUP(core_pct);
452     + core_pct = int_tofp(sample->aperf) * int_tofp(100);
453     + core_pct = div_u64_rem(core_pct, int_tofp(sample->mperf), &rem);
454    
455     - c0_pct = div_fp(int_tofp(sample->mperf), int_tofp(sample->tsc));
456     + if ((rem << 1) >= int_tofp(sample->mperf))
457     + core_pct += 1;
458    
459     sample->freq = fp_toint(
460     mul_fp(int_tofp(cpu->pstate.max_pstate * 1000), core_pct));
461    
462     - sample->core_pct_busy = mul_fp(core_pct, c0_pct);
463     + sample->core_pct_busy = (int32_t)core_pct;
464     }
465    
466     static inline void intel_pstate_sample(struct cpudata *cpu)
467     {
468     u64 aperf, mperf;
469     - unsigned long long tsc;
470    
471     rdmsrl(MSR_IA32_APERF, aperf);
472     rdmsrl(MSR_IA32_MPERF, mperf);
473     - tsc = native_read_tsc();
474    
475     aperf = aperf >> FRAC_BITS;
476     mperf = mperf >> FRAC_BITS;
477     - tsc = tsc >> FRAC_BITS;
478    
479     - cpu->sample_ptr = (cpu->sample_ptr + 1) % SAMPLE_COUNT;
480     - cpu->samples[cpu->sample_ptr].aperf = aperf;
481     - cpu->samples[cpu->sample_ptr].mperf = mperf;
482     - cpu->samples[cpu->sample_ptr].tsc = tsc;
483     - cpu->samples[cpu->sample_ptr].aperf -= cpu->prev_aperf;
484     - cpu->samples[cpu->sample_ptr].mperf -= cpu->prev_mperf;
485     - cpu->samples[cpu->sample_ptr].tsc -= cpu->prev_tsc;
486     + cpu->last_sample_time = cpu->sample.time;
487     + cpu->sample.time = ktime_get();
488     + cpu->sample.aperf = aperf;
489     + cpu->sample.mperf = mperf;
490     + cpu->sample.aperf -= cpu->prev_aperf;
491     + cpu->sample.mperf -= cpu->prev_mperf;
492    
493     - intel_pstate_calc_busy(cpu, &cpu->samples[cpu->sample_ptr]);
494     + intel_pstate_calc_busy(cpu, &cpu->sample);
495    
496     cpu->prev_aperf = aperf;
497     cpu->prev_mperf = mperf;
498     - cpu->prev_tsc = tsc;
499     }
500    
501     static inline void intel_pstate_set_sample_time(struct cpudata *cpu)
502     @@ -616,13 +612,25 @@ static inline void intel_pstate_set_sample_time(struct cpudata *cpu)
503    
504     static inline int32_t intel_pstate_get_scaled_busy(struct cpudata *cpu)
505     {
506     - int32_t core_busy, max_pstate, current_pstate;
507     + int32_t core_busy, max_pstate, current_pstate, sample_ratio;
508     + u32 duration_us;
509     + u32 sample_time;
510    
511     - core_busy = cpu->samples[cpu->sample_ptr].core_pct_busy;
512     + core_busy = cpu->sample.core_pct_busy;
513     max_pstate = int_tofp(cpu->pstate.max_pstate);
514     current_pstate = int_tofp(cpu->pstate.current_pstate);
515     core_busy = mul_fp(core_busy, div_fp(max_pstate, current_pstate));
516     - return FP_ROUNDUP(core_busy);
517     +
518     + sample_time = (pid_params.sample_rate_ms * USEC_PER_MSEC);
519     + duration_us = (u32) ktime_us_delta(cpu->sample.time,
520     + cpu->last_sample_time);
521     + if (duration_us > sample_time * 3) {
522     + sample_ratio = div_fp(int_tofp(sample_time),
523     + int_tofp(duration_us));
524     + core_busy = mul_fp(core_busy, sample_ratio);
525     + }
526     +
527     + return core_busy;
528     }
529    
530     static inline void intel_pstate_adjust_busy_pstate(struct cpudata *cpu)
531     @@ -652,7 +660,7 @@ static void intel_pstate_timer_func(unsigned long __data)
532    
533     intel_pstate_sample(cpu);
534    
535     - sample = &cpu->samples[cpu->sample_ptr];
536     + sample = &cpu->sample;
537    
538     intel_pstate_adjust_busy_pstate(cpu);
539    
540     @@ -727,7 +735,7 @@ static unsigned int intel_pstate_get(unsigned int cpu_num)
541     cpu = all_cpu_data[cpu_num];
542     if (!cpu)
543     return 0;
544     - sample = &cpu->samples[cpu->sample_ptr];
545     + sample = &cpu->sample;
546     return sample->freq;
547     }
548    
549     diff --git a/drivers/firewire/core.h b/drivers/firewire/core.h
550     index c98764aeeec6..f477308b6e9c 100644
551     --- a/drivers/firewire/core.h
552     +++ b/drivers/firewire/core.h
553     @@ -237,8 +237,8 @@ static inline bool is_next_generation(int new_generation, int old_generation)
554    
555     #define LOCAL_BUS 0xffc0
556    
557     -/* arbitrarily chosen maximum range for physical DMA: 128 TB */
558     -#define FW_MAX_PHYSICAL_RANGE (128ULL << 40)
559     +/* OHCI-1394's default upper bound for physical DMA: 4 GB */
560     +#define FW_MAX_PHYSICAL_RANGE (1ULL << 32)
561    
562     void fw_core_handle_request(struct fw_card *card, struct fw_packet *request);
563     void fw_core_handle_response(struct fw_card *card, struct fw_packet *packet);
564     diff --git a/drivers/firewire/ohci.c b/drivers/firewire/ohci.c
565     index 8db663219560..586f2f7f6993 100644
566     --- a/drivers/firewire/ohci.c
567     +++ b/drivers/firewire/ohci.c
568     @@ -3716,7 +3716,7 @@ static int pci_probe(struct pci_dev *dev,
569     version >> 16, version & 0xff, ohci->card.index,
570     ohci->n_ir, ohci->n_it, ohci->quirks,
571     reg_read(ohci, OHCI1394_PhyUpperBound) ?
572     - ", >4 GB phys DMA" : "");
573     + ", physUB" : "");
574    
575     return 0;
576    
577     diff --git a/drivers/gpio/gpio-mcp23s08.c b/drivers/gpio/gpio-mcp23s08.c
578     index 1ac288ea810d..aa379971d703 100644
579     --- a/drivers/gpio/gpio-mcp23s08.c
580     +++ b/drivers/gpio/gpio-mcp23s08.c
581     @@ -895,8 +895,11 @@ static int mcp23s08_probe(struct spi_device *spi)
582     return -ENODEV;
583     }
584    
585     - for (addr = 0; addr < ARRAY_SIZE(pdata->chip); addr++)
586     + for (addr = 0; addr < ARRAY_SIZE(pdata->chip); addr++) {
587     pullups[addr] = 0;
588     + if (spi_present_mask & (1 << addr))
589     + chips++;
590     + }
591     } else {
592     type = spi_get_device_id(spi)->driver_data;
593     pdata = dev_get_platdata(&spi->dev);
594     @@ -919,12 +922,12 @@ static int mcp23s08_probe(struct spi_device *spi)
595     pullups[addr] = pdata->chip[addr].pullups;
596     }
597    
598     - if (!chips)
599     - return -ENODEV;
600     -
601     base = pdata->base;
602     }
603    
604     + if (!chips)
605     + return -ENODEV;
606     +
607     data = kzalloc(sizeof *data + chips * sizeof(struct mcp23s08),
608     GFP_KERNEL);
609     if (!data)
610     diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
611     index 697f2150a997..4677af964df7 100644
612     --- a/drivers/gpu/drm/i915/i915_drv.h
613     +++ b/drivers/gpu/drm/i915/i915_drv.h
614     @@ -2426,6 +2426,7 @@ extern void intel_modeset_suspend_hw(struct drm_device *dev);
615     extern void intel_modeset_init(struct drm_device *dev);
616     extern void intel_modeset_gem_init(struct drm_device *dev);
617     extern void intel_modeset_cleanup(struct drm_device *dev);
618     +extern void intel_connector_unregister(struct intel_connector *);
619     extern int intel_modeset_vga_set_state(struct drm_device *dev, bool state);
620     extern void intel_modeset_setup_hw_state(struct drm_device *dev,
621     bool force_restore);
622     diff --git a/drivers/gpu/drm/i915/i915_gem_execbuffer.c b/drivers/gpu/drm/i915/i915_gem_execbuffer.c
623     index d269ecf46e26..768e6665e4e3 100644
624     --- a/drivers/gpu/drm/i915/i915_gem_execbuffer.c
625     +++ b/drivers/gpu/drm/i915/i915_gem_execbuffer.c
626     @@ -766,9 +766,9 @@ i915_gem_execbuffer_relocate_slow(struct drm_device *dev,
627     * relocations were valid.
628     */
629     for (j = 0; j < exec[i].relocation_count; j++) {
630     - if (copy_to_user(&user_relocs[j].presumed_offset,
631     - &invalid_offset,
632     - sizeof(invalid_offset))) {
633     + if (__copy_to_user(&user_relocs[j].presumed_offset,
634     + &invalid_offset,
635     + sizeof(invalid_offset))) {
636     ret = -EFAULT;
637     mutex_lock(&dev->struct_mutex);
638     goto err;
639     @@ -1329,18 +1329,21 @@ i915_gem_execbuffer(struct drm_device *dev, void *data,
640     ret = i915_gem_do_execbuffer(dev, data, file, &exec2, exec2_list,
641     &dev_priv->gtt.base);
642     if (!ret) {
643     + struct drm_i915_gem_exec_object __user *user_exec_list =
644     + to_user_ptr(args->buffers_ptr);
645     +
646     /* Copy the new buffer offsets back to the user's exec list. */
647     - for (i = 0; i < args->buffer_count; i++)
648     - exec_list[i].offset = exec2_list[i].offset;
649     - /* ... and back out to userspace */
650     - ret = copy_to_user(to_user_ptr(args->buffers_ptr),
651     - exec_list,
652     - sizeof(*exec_list) * args->buffer_count);
653     - if (ret) {
654     - ret = -EFAULT;
655     - DRM_DEBUG("failed to copy %d exec entries "
656     - "back to user (%d)\n",
657     - args->buffer_count, ret);
658     + for (i = 0; i < args->buffer_count; i++) {
659     + ret = __copy_to_user(&user_exec_list[i].offset,
660     + &exec2_list[i].offset,
661     + sizeof(user_exec_list[i].offset));
662     + if (ret) {
663     + ret = -EFAULT;
664     + DRM_DEBUG("failed to copy %d exec entries "
665     + "back to user (%d)\n",
666     + args->buffer_count, ret);
667     + break;
668     + }
669     }
670     }
671    
672     @@ -1388,14 +1391,21 @@ i915_gem_execbuffer2(struct drm_device *dev, void *data,
673     &dev_priv->gtt.base);
674     if (!ret) {
675     /* Copy the new buffer offsets back to the user's exec list. */
676     - ret = copy_to_user(to_user_ptr(args->buffers_ptr),
677     - exec2_list,
678     - sizeof(*exec2_list) * args->buffer_count);
679     - if (ret) {
680     - ret = -EFAULT;
681     - DRM_DEBUG("failed to copy %d exec entries "
682     - "back to user (%d)\n",
683     - args->buffer_count, ret);
684     + struct drm_i915_gem_exec_object2 *user_exec_list =
685     + to_user_ptr(args->buffers_ptr);
686     + int i;
687     +
688     + for (i = 0; i < args->buffer_count; i++) {
689     + ret = __copy_to_user(&user_exec_list[i].offset,
690     + &exec2_list[i].offset,
691     + sizeof(user_exec_list[i].offset));
692     + if (ret) {
693     + ret = -EFAULT;
694     + DRM_DEBUG("failed to copy %d exec entries "
695     + "back to user\n",
696     + args->buffer_count);
697     + break;
698     + }
699     }
700     }
701    
702     diff --git a/drivers/gpu/drm/i915/intel_crt.c b/drivers/gpu/drm/i915/intel_crt.c
703     index a60a755f9977..b19ddacbe19d 100644
704     --- a/drivers/gpu/drm/i915/intel_crt.c
705     +++ b/drivers/gpu/drm/i915/intel_crt.c
706     @@ -841,6 +841,7 @@ void intel_crt_init(struct drm_device *dev)
707     crt->base.get_hw_state = intel_crt_get_hw_state;
708     }
709     intel_connector->get_hw_state = intel_connector_get_hw_state;
710     + intel_connector->unregister = intel_connector_unregister;
711    
712     drm_connector_helper_add(connector, &intel_crt_connector_helper_funcs);
713    
714     diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
715     index 9d4d837506d0..b6fb3ebe553a 100644
716     --- a/drivers/gpu/drm/i915/intel_display.c
717     +++ b/drivers/gpu/drm/i915/intel_display.c
718     @@ -11368,6 +11368,14 @@ void intel_modeset_gem_init(struct drm_device *dev)
719     mutex_unlock(&dev->mode_config.mutex);
720     }
721    
722     +void intel_connector_unregister(struct intel_connector *intel_connector)
723     +{
724     + struct drm_connector *connector = &intel_connector->base;
725     +
726     + intel_panel_destroy_backlight(connector);
727     + drm_sysfs_connector_remove(connector);
728     +}
729     +
730     void intel_modeset_cleanup(struct drm_device *dev)
731     {
732     struct drm_i915_private *dev_priv = dev->dev_private;
733     @@ -11412,8 +11420,10 @@ void intel_modeset_cleanup(struct drm_device *dev)
734    
735     /* destroy the backlight and sysfs files before encoders/connectors */
736     list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
737     - intel_panel_destroy_backlight(connector);
738     - drm_sysfs_connector_remove(connector);
739     + struct intel_connector *intel_connector;
740     +
741     + intel_connector = to_intel_connector(connector);
742     + intel_connector->unregister(intel_connector);
743     }
744    
745     drm_mode_config_cleanup(dev);
746     diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
747     index 2688f6d64bb9..b2d0887b3d12 100644
748     --- a/drivers/gpu/drm/i915/intel_dp.c
749     +++ b/drivers/gpu/drm/i915/intel_dp.c
750     @@ -744,6 +744,16 @@ out:
751     return ret;
752     }
753    
754     +static void
755     +intel_dp_connector_unregister(struct intel_connector *intel_connector)
756     +{
757     + struct intel_dp *intel_dp = intel_attached_dp(&intel_connector->base);
758     +
759     + sysfs_remove_link(&intel_connector->base.kdev->kobj,
760     + intel_dp->adapter.dev.kobj.name);
761     + intel_connector_unregister(intel_connector);
762     +}
763     +
764     static int
765     intel_dp_i2c_init(struct intel_dp *intel_dp,
766     struct intel_connector *intel_connector, const char *name)
767     @@ -761,9 +771,19 @@ intel_dp_i2c_init(struct intel_dp *intel_dp,
768     strncpy(intel_dp->adapter.name, name, sizeof(intel_dp->adapter.name) - 1);
769     intel_dp->adapter.name[sizeof(intel_dp->adapter.name) - 1] = '\0';
770     intel_dp->adapter.algo_data = &intel_dp->algo;
771     - intel_dp->adapter.dev.parent = intel_connector->base.kdev;
772     + intel_dp->adapter.dev.parent = intel_connector->base.dev->dev;
773    
774     ret = i2c_dp_aux_add_bus(&intel_dp->adapter);
775     + if (ret < 0)
776     + return ret;
777     +
778     + ret = sysfs_create_link(&intel_connector->base.kdev->kobj,
779     + &intel_dp->adapter.dev.kobj,
780     + intel_dp->adapter.dev.kobj.name);
781     +
782     + if (ret < 0)
783     + i2c_del_adapter(&intel_dp->adapter);
784     +
785     return ret;
786     }
787    
788     @@ -3686,6 +3706,7 @@ intel_dp_init_connector(struct intel_digital_port *intel_dig_port,
789     intel_connector->get_hw_state = intel_ddi_connector_get_hw_state;
790     else
791     intel_connector->get_hw_state = intel_connector_get_hw_state;
792     + intel_connector->unregister = intel_dp_connector_unregister;
793    
794     intel_dp->aux_ch_ctl_reg = intel_dp->output_reg + 0x10;
795     if (HAS_DDI(dev)) {
796     diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
797     index 00de120531ac..0b59914344e4 100644
798     --- a/drivers/gpu/drm/i915/intel_drv.h
799     +++ b/drivers/gpu/drm/i915/intel_drv.h
800     @@ -187,6 +187,14 @@ struct intel_connector {
801     * and active (i.e. dpms ON state). */
802     bool (*get_hw_state)(struct intel_connector *);
803    
804     + /*
805     + * Removes all interfaces through which the connector is accessible
806     + * - like sysfs, debugfs entries -, so that no new operations can be
807     + * started on the connector. Also makes sure all currently pending
808     + * operations finish before returing.
809     + */
810     + void (*unregister)(struct intel_connector *);
811     +
812     /* Panel info for eDP and LVDS */
813     struct intel_panel panel;
814    
815     diff --git a/drivers/gpu/drm/i915/intel_dsi.c b/drivers/gpu/drm/i915/intel_dsi.c
816     index fabbf0d895cf..ad05683ac5b6 100644
817     --- a/drivers/gpu/drm/i915/intel_dsi.c
818     +++ b/drivers/gpu/drm/i915/intel_dsi.c
819     @@ -586,6 +586,7 @@ bool intel_dsi_init(struct drm_device *dev)
820     intel_encoder->get_config = intel_dsi_get_config;
821    
822     intel_connector->get_hw_state = intel_connector_get_hw_state;
823     + intel_connector->unregister = intel_connector_unregister;
824    
825     for (i = 0; i < ARRAY_SIZE(intel_dsi_devices); i++) {
826     dsi = &intel_dsi_devices[i];
827     diff --git a/drivers/gpu/drm/i915/intel_dvo.c b/drivers/gpu/drm/i915/intel_dvo.c
828     index eeff998e52ef..86eeb8b7d435 100644
829     --- a/drivers/gpu/drm/i915/intel_dvo.c
830     +++ b/drivers/gpu/drm/i915/intel_dvo.c
831     @@ -477,6 +477,7 @@ void intel_dvo_init(struct drm_device *dev)
832     intel_encoder->compute_config = intel_dvo_compute_config;
833     intel_encoder->mode_set = intel_dvo_mode_set;
834     intel_connector->get_hw_state = intel_dvo_connector_get_hw_state;
835     + intel_connector->unregister = intel_connector_unregister;
836    
837     /* Now, try to find a controller */
838     for (i = 0; i < ARRAY_SIZE(intel_dvo_devices); i++) {
839     diff --git a/drivers/gpu/drm/i915/intel_hdmi.c b/drivers/gpu/drm/i915/intel_hdmi.c
840     index ca5d23d17d20..7b277c369dce 100644
841     --- a/drivers/gpu/drm/i915/intel_hdmi.c
842     +++ b/drivers/gpu/drm/i915/intel_hdmi.c
843     @@ -1262,6 +1262,7 @@ void intel_hdmi_init_connector(struct intel_digital_port *intel_dig_port,
844     intel_connector->get_hw_state = intel_ddi_connector_get_hw_state;
845     else
846     intel_connector->get_hw_state = intel_connector_get_hw_state;
847     + intel_connector->unregister = intel_connector_unregister;
848    
849     intel_hdmi_add_properties(intel_hdmi, connector);
850    
851     diff --git a/drivers/gpu/drm/i915/intel_lvds.c b/drivers/gpu/drm/i915/intel_lvds.c
852     index 8bcb93a2a9f6..eb8f64b5fb85 100644
853     --- a/drivers/gpu/drm/i915/intel_lvds.c
854     +++ b/drivers/gpu/drm/i915/intel_lvds.c
855     @@ -957,6 +957,7 @@ void intel_lvds_init(struct drm_device *dev)
856     intel_encoder->get_hw_state = intel_lvds_get_hw_state;
857     intel_encoder->get_config = intel_lvds_get_config;
858     intel_connector->get_hw_state = intel_connector_get_hw_state;
859     + intel_connector->unregister = intel_connector_unregister;
860    
861     intel_connector_attach_encoder(intel_connector, intel_encoder);
862     intel_encoder->type = INTEL_OUTPUT_LVDS;
863     diff --git a/drivers/gpu/drm/i915/intel_sdvo.c b/drivers/gpu/drm/i915/intel_sdvo.c
864     index 95bdfb3c431c..cbc2feeda59d 100644
865     --- a/drivers/gpu/drm/i915/intel_sdvo.c
866     +++ b/drivers/gpu/drm/i915/intel_sdvo.c
867     @@ -2397,6 +2397,7 @@ intel_sdvo_connector_init(struct intel_sdvo_connector *connector,
868     connector->base.base.doublescan_allowed = 0;
869     connector->base.base.display_info.subpixel_order = SubPixelHorizontalRGB;
870     connector->base.get_hw_state = intel_sdvo_connector_get_hw_state;
871     + connector->base.unregister = intel_connector_unregister;
872    
873     intel_connector_attach_encoder(&connector->base, &encoder->base);
874     drm_sysfs_connector_add(&connector->base.base);
875     diff --git a/drivers/gpu/drm/i915/intel_tv.c b/drivers/gpu/drm/i915/intel_tv.c
876     index 99faac555d3b..365c7c47c46c 100644
877     --- a/drivers/gpu/drm/i915/intel_tv.c
878     +++ b/drivers/gpu/drm/i915/intel_tv.c
879     @@ -1639,6 +1639,7 @@ intel_tv_init(struct drm_device *dev)
880     intel_encoder->disable = intel_disable_tv;
881     intel_encoder->get_hw_state = intel_tv_get_hw_state;
882     intel_connector->get_hw_state = intel_connector_get_hw_state;
883     + intel_connector->unregister = intel_connector_unregister;
884    
885     intel_connector_attach_encoder(intel_connector, intel_encoder);
886     intel_encoder->type = INTEL_OUTPUT_TVOUT;
887     diff --git a/drivers/gpu/drm/nouveau/core/engine/disp/nvd0.c b/drivers/gpu/drm/nouveau/core/engine/disp/nvd0.c
888     index 1c5e4e8b2c82..e031d7c88fa3 100644
889     --- a/drivers/gpu/drm/nouveau/core/engine/disp/nvd0.c
890     +++ b/drivers/gpu/drm/nouveau/core/engine/disp/nvd0.c
891     @@ -732,7 +732,7 @@ exec_clkcmp(struct nv50_disp_priv *priv, int head, int id,
892     }
893    
894     if (outp == 8)
895     - return false;
896     + return conf;
897    
898     data = exec_lookup(priv, head, outp, ctrl, dcb, &ver, &hdr, &cnt, &len, &info1);
899     if (data == 0x0000)
900     diff --git a/drivers/gpu/drm/radeon/atombios_crtc.c b/drivers/gpu/drm/radeon/atombios_crtc.c
901     index daa4dd375ab1..41a9a9cb271a 100644
902     --- a/drivers/gpu/drm/radeon/atombios_crtc.c
903     +++ b/drivers/gpu/drm/radeon/atombios_crtc.c
904     @@ -270,8 +270,6 @@ void atombios_crtc_dpms(struct drm_crtc *crtc, int mode)
905     switch (mode) {
906     case DRM_MODE_DPMS_ON:
907     radeon_crtc->enabled = true;
908     - /* adjust pm to dpms changes BEFORE enabling crtcs */
909     - radeon_pm_compute_clocks(rdev);
910     atombios_enable_crtc(crtc, ATOM_ENABLE);
911     if (ASIC_IS_DCE3(rdev) && !ASIC_IS_DCE6(rdev))
912     atombios_enable_crtc_memreq(crtc, ATOM_ENABLE);
913     @@ -289,10 +287,10 @@ void atombios_crtc_dpms(struct drm_crtc *crtc, int mode)
914     atombios_enable_crtc_memreq(crtc, ATOM_DISABLE);
915     atombios_enable_crtc(crtc, ATOM_DISABLE);
916     radeon_crtc->enabled = false;
917     - /* adjust pm to dpms changes AFTER disabling crtcs */
918     - radeon_pm_compute_clocks(rdev);
919     break;
920     }
921     + /* adjust pm to dpms */
922     + radeon_pm_compute_clocks(rdev);
923     }
924    
925     static void
926     diff --git a/drivers/gpu/drm/radeon/radeon_asic.c b/drivers/gpu/drm/radeon/radeon_asic.c
927     index dda02bfc10a4..5600d4c5f981 100644
928     --- a/drivers/gpu/drm/radeon/radeon_asic.c
929     +++ b/drivers/gpu/drm/radeon/radeon_asic.c
930     @@ -2034,8 +2034,8 @@ static struct radeon_asic ci_asic = {
931     .blit_ring_index = RADEON_RING_TYPE_GFX_INDEX,
932     .dma = &cik_copy_dma,
933     .dma_ring_index = R600_RING_TYPE_DMA_INDEX,
934     - .copy = &cik_copy_dma,
935     - .copy_ring_index = R600_RING_TYPE_DMA_INDEX,
936     + .copy = &cik_copy_cpdma,
937     + .copy_ring_index = RADEON_RING_TYPE_GFX_INDEX,
938     },
939     .surface = {
940     .set_reg = r600_set_surface_reg,
941     diff --git a/drivers/gpu/drm/radeon/radeon_bios.c b/drivers/gpu/drm/radeon/radeon_bios.c
942     index b3633d9a5317..9ab30976287d 100644
943     --- a/drivers/gpu/drm/radeon/radeon_bios.c
944     +++ b/drivers/gpu/drm/radeon/radeon_bios.c
945     @@ -196,6 +196,20 @@ static bool radeon_atrm_get_bios(struct radeon_device *rdev)
946     }
947     }
948    
949     + if (!found) {
950     + while ((pdev = pci_get_class(PCI_CLASS_DISPLAY_OTHER << 8, pdev)) != NULL) {
951     + dhandle = ACPI_HANDLE(&pdev->dev);
952     + if (!dhandle)
953     + continue;
954     +
955     + status = acpi_get_handle(dhandle, "ATRM", &atrm_handle);
956     + if (!ACPI_FAILURE(status)) {
957     + found = true;
958     + break;
959     + }
960     + }
961     + }
962     +
963     if (!found)
964     return false;
965    
966     diff --git a/drivers/gpu/drm/radeon/radeon_cs.c b/drivers/gpu/drm/radeon/radeon_cs.c
967     index dfb5a1db87d4..7993aec86acc 100644
968     --- a/drivers/gpu/drm/radeon/radeon_cs.c
969     +++ b/drivers/gpu/drm/radeon/radeon_cs.c
970     @@ -276,10 +276,17 @@ int radeon_cs_parser_init(struct radeon_cs_parser *p, void *data)
971     return -EINVAL;
972    
973     /* we only support VM on some SI+ rings */
974     - if ((p->rdev->asic->ring[p->ring]->cs_parse == NULL) &&
975     - ((p->cs_flags & RADEON_CS_USE_VM) == 0)) {
976     - DRM_ERROR("Ring %d requires VM!\n", p->ring);
977     - return -EINVAL;
978     + if ((p->cs_flags & RADEON_CS_USE_VM) == 0) {
979     + if (p->rdev->asic->ring[p->ring]->cs_parse == NULL) {
980     + DRM_ERROR("Ring %d requires VM!\n", p->ring);
981     + return -EINVAL;
982     + }
983     + } else {
984     + if (p->rdev->asic->ring[p->ring]->ib_parse == NULL) {
985     + DRM_ERROR("VM not supported on ring %d!\n",
986     + p->ring);
987     + return -EINVAL;
988     + }
989     }
990     }
991    
992     diff --git a/drivers/gpu/drm/radeon/radeon_device.c b/drivers/gpu/drm/radeon/radeon_device.c
993     index 7f370b309590..0bf6f4a2bb97 100644
994     --- a/drivers/gpu/drm/radeon/radeon_device.c
995     +++ b/drivers/gpu/drm/radeon/radeon_device.c
996     @@ -1536,6 +1536,10 @@ int radeon_resume_kms(struct drm_device *dev, bool resume, bool fbcon)
997    
998     radeon_restore_bios_scratch_regs(rdev);
999    
1000     + /* set the power state here in case we are a PX system or headless */
1001     + if ((rdev->pm.pm_method == PM_METHOD_DPM) && rdev->pm.dpm_enabled)
1002     + radeon_pm_compute_clocks(rdev);
1003     +
1004     if (fbcon) {
1005     radeon_fbdev_set_suspend(rdev, 0);
1006     console_unlock();
1007     diff --git a/drivers/gpu/drm/radeon/radeon_object.c b/drivers/gpu/drm/radeon/radeon_object.c
1008     index 08595cf90b01..11bb88afbac1 100644
1009     --- a/drivers/gpu/drm/radeon/radeon_object.c
1010     +++ b/drivers/gpu/drm/radeon/radeon_object.c
1011     @@ -586,22 +586,30 @@ int radeon_bo_fault_reserve_notify(struct ttm_buffer_object *bo)
1012     rbo = container_of(bo, struct radeon_bo, tbo);
1013     radeon_bo_check_tiling(rbo, 0, 0);
1014     rdev = rbo->rdev;
1015     - if (bo->mem.mem_type == TTM_PL_VRAM) {
1016     - size = bo->mem.num_pages << PAGE_SHIFT;
1017     - offset = bo->mem.start << PAGE_SHIFT;
1018     - if ((offset + size) > rdev->mc.visible_vram_size) {
1019     - /* hurrah the memory is not visible ! */
1020     - radeon_ttm_placement_from_domain(rbo, RADEON_GEM_DOMAIN_VRAM);
1021     - rbo->placement.lpfn = rdev->mc.visible_vram_size >> PAGE_SHIFT;
1022     - r = ttm_bo_validate(bo, &rbo->placement, false, false);
1023     - if (unlikely(r != 0))
1024     - return r;
1025     - offset = bo->mem.start << PAGE_SHIFT;
1026     - /* this should not happen */
1027     - if ((offset + size) > rdev->mc.visible_vram_size)
1028     - return -EINVAL;
1029     - }
1030     + if (bo->mem.mem_type != TTM_PL_VRAM)
1031     + return 0;
1032     +
1033     + size = bo->mem.num_pages << PAGE_SHIFT;
1034     + offset = bo->mem.start << PAGE_SHIFT;
1035     + if ((offset + size) <= rdev->mc.visible_vram_size)
1036     + return 0;
1037     +
1038     + /* hurrah the memory is not visible ! */
1039     + radeon_ttm_placement_from_domain(rbo, RADEON_GEM_DOMAIN_VRAM);
1040     + rbo->placement.lpfn = rdev->mc.visible_vram_size >> PAGE_SHIFT;
1041     + r = ttm_bo_validate(bo, &rbo->placement, false, false);
1042     + if (unlikely(r == -ENOMEM)) {
1043     + radeon_ttm_placement_from_domain(rbo, RADEON_GEM_DOMAIN_GTT);
1044     + return ttm_bo_validate(bo, &rbo->placement, false, false);
1045     + } else if (unlikely(r != 0)) {
1046     + return r;
1047     }
1048     +
1049     + offset = bo->mem.start << PAGE_SHIFT;
1050     + /* this should never happen */
1051     + if ((offset + size) > rdev->mc.visible_vram_size)
1052     + return -EINVAL;
1053     +
1054     return 0;
1055     }
1056    
1057     diff --git a/drivers/gpu/drm/radeon/radeon_pm.c b/drivers/gpu/drm/radeon/radeon_pm.c
1058     index a957024eae24..f77d9d0d54b5 100644
1059     --- a/drivers/gpu/drm/radeon/radeon_pm.c
1060     +++ b/drivers/gpu/drm/radeon/radeon_pm.c
1061     @@ -361,6 +361,11 @@ static ssize_t radeon_set_pm_profile(struct device *dev,
1062     struct drm_device *ddev = dev_get_drvdata(dev);
1063     struct radeon_device *rdev = ddev->dev_private;
1064    
1065     + /* Can't set profile when the card is off */
1066     + if ((rdev->flags & RADEON_IS_PX) &&
1067     + (ddev->switch_power_state != DRM_SWITCH_POWER_ON))
1068     + return -EINVAL;
1069     +
1070     mutex_lock(&rdev->pm.mutex);
1071     if (rdev->pm.pm_method == PM_METHOD_PROFILE) {
1072     if (strncmp("default", buf, strlen("default")) == 0)
1073     @@ -409,6 +414,13 @@ static ssize_t radeon_set_pm_method(struct device *dev,
1074     struct drm_device *ddev = dev_get_drvdata(dev);
1075     struct radeon_device *rdev = ddev->dev_private;
1076    
1077     + /* Can't set method when the card is off */
1078     + if ((rdev->flags & RADEON_IS_PX) &&
1079     + (ddev->switch_power_state != DRM_SWITCH_POWER_ON)) {
1080     + count = -EINVAL;
1081     + goto fail;
1082     + }
1083     +
1084     /* we don't support the legacy modes with dpm */
1085     if (rdev->pm.pm_method == PM_METHOD_DPM) {
1086     count = -EINVAL;
1087     @@ -446,6 +458,10 @@ static ssize_t radeon_get_dpm_state(struct device *dev,
1088     struct radeon_device *rdev = ddev->dev_private;
1089     enum radeon_pm_state_type pm = rdev->pm.dpm.user_state;
1090    
1091     + if ((rdev->flags & RADEON_IS_PX) &&
1092     + (ddev->switch_power_state != DRM_SWITCH_POWER_ON))
1093     + return snprintf(buf, PAGE_SIZE, "off\n");
1094     +
1095     return snprintf(buf, PAGE_SIZE, "%s\n",
1096     (pm == POWER_STATE_TYPE_BATTERY) ? "battery" :
1097     (pm == POWER_STATE_TYPE_BALANCED) ? "balanced" : "performance");
1098     @@ -459,6 +475,11 @@ static ssize_t radeon_set_dpm_state(struct device *dev,
1099     struct drm_device *ddev = dev_get_drvdata(dev);
1100     struct radeon_device *rdev = ddev->dev_private;
1101    
1102     + /* Can't set dpm state when the card is off */
1103     + if ((rdev->flags & RADEON_IS_PX) &&
1104     + (ddev->switch_power_state != DRM_SWITCH_POWER_ON))
1105     + return -EINVAL;
1106     +
1107     mutex_lock(&rdev->pm.mutex);
1108     if (strncmp("battery", buf, strlen("battery")) == 0)
1109     rdev->pm.dpm.user_state = POWER_STATE_TYPE_BATTERY;
1110     @@ -485,6 +506,10 @@ static ssize_t radeon_get_dpm_forced_performance_level(struct device *dev,
1111     struct radeon_device *rdev = ddev->dev_private;
1112     enum radeon_dpm_forced_level level = rdev->pm.dpm.forced_level;
1113    
1114     + if ((rdev->flags & RADEON_IS_PX) &&
1115     + (ddev->switch_power_state != DRM_SWITCH_POWER_ON))
1116     + return snprintf(buf, PAGE_SIZE, "off\n");
1117     +
1118     return snprintf(buf, PAGE_SIZE, "%s\n",
1119     (level == RADEON_DPM_FORCED_LEVEL_AUTO) ? "auto" :
1120     (level == RADEON_DPM_FORCED_LEVEL_LOW) ? "low" : "high");
1121     @@ -500,6 +525,11 @@ static ssize_t radeon_set_dpm_forced_performance_level(struct device *dev,
1122     enum radeon_dpm_forced_level level;
1123     int ret = 0;
1124    
1125     + /* Can't force performance level when the card is off */
1126     + if ((rdev->flags & RADEON_IS_PX) &&
1127     + (ddev->switch_power_state != DRM_SWITCH_POWER_ON))
1128     + return -EINVAL;
1129     +
1130     mutex_lock(&rdev->pm.mutex);
1131     if (strncmp("low", buf, strlen("low")) == 0) {
1132     level = RADEON_DPM_FORCED_LEVEL_LOW;
1133     @@ -538,8 +568,14 @@ static ssize_t radeon_hwmon_show_temp(struct device *dev,
1134     char *buf)
1135     {
1136     struct radeon_device *rdev = dev_get_drvdata(dev);
1137     + struct drm_device *ddev = rdev->ddev;
1138     int temp;
1139    
1140     + /* Can't get temperature when the card is off */
1141     + if ((rdev->flags & RADEON_IS_PX) &&
1142     + (ddev->switch_power_state != DRM_SWITCH_POWER_ON))
1143     + return -EINVAL;
1144     +
1145     if (rdev->asic->pm.get_temperature)
1146     temp = radeon_get_temperature(rdev);
1147     else
1148     @@ -1046,7 +1082,6 @@ static void radeon_pm_resume_dpm(struct radeon_device *rdev)
1149     if (ret)
1150     goto dpm_resume_fail;
1151     rdev->pm.dpm_enabled = true;
1152     - radeon_pm_compute_clocks(rdev);
1153     return;
1154    
1155     dpm_resume_fail:
1156     @@ -1591,8 +1626,12 @@ static int radeon_debugfs_pm_info(struct seq_file *m, void *data)
1157     struct drm_info_node *node = (struct drm_info_node *) m->private;
1158     struct drm_device *dev = node->minor->dev;
1159     struct radeon_device *rdev = dev->dev_private;
1160     + struct drm_device *ddev = rdev->ddev;
1161    
1162     - if (rdev->pm.dpm_enabled) {
1163     + if ((rdev->flags & RADEON_IS_PX) &&
1164     + (ddev->switch_power_state != DRM_SWITCH_POWER_ON)) {
1165     + seq_printf(m, "PX asic powered off\n");
1166     + } else if (rdev->pm.dpm_enabled) {
1167     mutex_lock(&rdev->pm.mutex);
1168     if (rdev->asic->dpm.debugfs_print_current_performance_level)
1169     radeon_dpm_debugfs_print_current_performance_level(rdev, m);
1170     diff --git a/drivers/gpu/drm/radeon/sid.h b/drivers/gpu/drm/radeon/sid.h
1171     index 9239a6d29128..3007cddc7e70 100644
1172     --- a/drivers/gpu/drm/radeon/sid.h
1173     +++ b/drivers/gpu/drm/radeon/sid.h
1174     @@ -107,8 +107,8 @@
1175     #define SPLL_CHG_STATUS (1 << 1)
1176     #define SPLL_CNTL_MODE 0x618
1177     #define SPLL_SW_DIR_CONTROL (1 << 0)
1178     -# define SPLL_REFCLK_SEL(x) ((x) << 8)
1179     -# define SPLL_REFCLK_SEL_MASK 0xFF00
1180     +# define SPLL_REFCLK_SEL(x) ((x) << 26)
1181     +# define SPLL_REFCLK_SEL_MASK (3 << 26)
1182    
1183     #define CG_SPLL_SPREAD_SPECTRUM 0x620
1184     #define SSEN (1 << 0)
1185     diff --git a/drivers/hwmon/Kconfig b/drivers/hwmon/Kconfig
1186     index 5ce43d8dfa98..7703e3bc604b 100644
1187     --- a/drivers/hwmon/Kconfig
1188     +++ b/drivers/hwmon/Kconfig
1189     @@ -971,7 +971,7 @@ config SENSORS_NCT6775
1190    
1191     config SENSORS_NTC_THERMISTOR
1192     tristate "NTC thermistor support"
1193     - depends on (!OF && !IIO) || (OF && IIO)
1194     + depends on !OF || IIO=n || IIO
1195     help
1196     This driver supports NTC thermistors sensor reading and its
1197     interpretation. The driver can also monitor the temperature and
1198     diff --git a/drivers/hwmon/ntc_thermistor.c b/drivers/hwmon/ntc_thermistor.c
1199     index 8a17f01e8672..e76feb86a1d4 100644
1200     --- a/drivers/hwmon/ntc_thermistor.c
1201     +++ b/drivers/hwmon/ntc_thermistor.c
1202     @@ -44,6 +44,7 @@ struct ntc_compensation {
1203     unsigned int ohm;
1204     };
1205    
1206     +/* Order matters, ntc_match references the entries by index */
1207     static const struct platform_device_id ntc_thermistor_id[] = {
1208     { "ncp15wb473", TYPE_NCPXXWB473 },
1209     { "ncp18wb473", TYPE_NCPXXWB473 },
1210     @@ -141,7 +142,7 @@ struct ntc_data {
1211     char name[PLATFORM_NAME_SIZE];
1212     };
1213    
1214     -#ifdef CONFIG_OF
1215     +#if defined(CONFIG_OF) && IS_ENABLED(CONFIG_IIO)
1216     static int ntc_adc_iio_read(struct ntc_thermistor_platform_data *pdata)
1217     {
1218     struct iio_channel *channel = pdata->chan;
1219     @@ -163,15 +164,15 @@ static int ntc_adc_iio_read(struct ntc_thermistor_platform_data *pdata)
1220    
1221     static const struct of_device_id ntc_match[] = {
1222     { .compatible = "ntc,ncp15wb473",
1223     - .data = &ntc_thermistor_id[TYPE_NCPXXWB473] },
1224     + .data = &ntc_thermistor_id[0] },
1225     { .compatible = "ntc,ncp18wb473",
1226     - .data = &ntc_thermistor_id[TYPE_NCPXXWB473] },
1227     + .data = &ntc_thermistor_id[1] },
1228     { .compatible = "ntc,ncp21wb473",
1229     - .data = &ntc_thermistor_id[TYPE_NCPXXWB473] },
1230     + .data = &ntc_thermistor_id[2] },
1231     { .compatible = "ntc,ncp03wb473",
1232     - .data = &ntc_thermistor_id[TYPE_NCPXXWB473] },
1233     + .data = &ntc_thermistor_id[3] },
1234     { .compatible = "ntc,ncp15wl333",
1235     - .data = &ntc_thermistor_id[TYPE_NCPXXWL333] },
1236     + .data = &ntc_thermistor_id[4] },
1237     { },
1238     };
1239     MODULE_DEVICE_TABLE(of, ntc_match);
1240     @@ -223,6 +224,8 @@ ntc_thermistor_parse_dt(struct platform_device *pdev)
1241     return NULL;
1242     }
1243    
1244     +#define ntc_match NULL
1245     +
1246     static void ntc_iio_channel_release(struct ntc_thermistor_platform_data *pdata)
1247     { }
1248     #endif
1249     diff --git a/drivers/infiniband/ulp/isert/ib_isert.c b/drivers/infiniband/ulp/isert/ib_isert.c
1250     index 51766b3bc678..b7794792760d 100644
1251     --- a/drivers/infiniband/ulp/isert/ib_isert.c
1252     +++ b/drivers/infiniband/ulp/isert/ib_isert.c
1253     @@ -1117,6 +1117,8 @@ sequence_cmd:
1254    
1255     if (!rc && dump_payload == false && unsol_data)
1256     iscsit_set_unsoliticed_dataout(cmd);
1257     + else if (dump_payload && imm_data)
1258     + target_put_sess_cmd(conn->sess->se_sess, &cmd->se_cmd);
1259    
1260     return 0;
1261     }
1262     diff --git a/drivers/iommu/intel-iommu.c b/drivers/iommu/intel-iommu.c
1263     index a22c86c867fa..40f6b47c28f6 100644
1264     --- a/drivers/iommu/intel-iommu.c
1265     +++ b/drivers/iommu/intel-iommu.c
1266     @@ -4075,7 +4075,7 @@ static size_t intel_iommu_unmap(struct iommu_domain *domain,
1267     unsigned long iova, size_t size)
1268     {
1269     struct dmar_domain *dmar_domain = domain->priv;
1270     - int order;
1271     + int order, iommu_id;
1272    
1273     order = dma_pte_clear_range(dmar_domain, iova >> VTD_PAGE_SHIFT,
1274     (iova + size - 1) >> VTD_PAGE_SHIFT);
1275     @@ -4083,6 +4083,22 @@ static size_t intel_iommu_unmap(struct iommu_domain *domain,
1276     if (dmar_domain->max_addr == iova + size)
1277     dmar_domain->max_addr = iova;
1278    
1279     + for_each_set_bit(iommu_id, dmar_domain->iommu_bmp, g_num_of_iommus) {
1280     + struct intel_iommu *iommu = g_iommus[iommu_id];
1281     + int num, ndomains;
1282     +
1283     + /*
1284     + * find bit position of dmar_domain
1285     + */
1286     + ndomains = cap_ndoms(iommu->cap);
1287     + for_each_set_bit(num, iommu->domain_ids, ndomains) {
1288     + if (iommu->domains[num] == dmar_domain)
1289     + iommu_flush_iotlb_psi(iommu, num,
1290     + iova >> VTD_PAGE_SHIFT,
1291     + 1 << order, 0);
1292     + }
1293     + }
1294     +
1295     return PAGE_SIZE << order;
1296     }
1297    
1298     diff --git a/drivers/md/dm-cache-target.c b/drivers/md/dm-cache-target.c
1299     index 9306e0bcb564..c0ad90d91252 100644
1300     --- a/drivers/md/dm-cache-target.c
1301     +++ b/drivers/md/dm-cache-target.c
1302     @@ -2195,6 +2195,8 @@ static int cache_create(struct cache_args *ca, struct cache **result)
1303     ti->num_discard_bios = 1;
1304     ti->discards_supported = true;
1305     ti->discard_zeroes_data_unsupported = true;
1306     + /* Discard bios must be split on a block boundary */
1307     + ti->split_discard_bios = true;
1308    
1309     cache->features = ca->features;
1310     ti->per_bio_data_size = get_per_bio_data_size(cache);
1311     diff --git a/drivers/md/dm-thin.c b/drivers/md/dm-thin.c
1312     index fa602b56b648..94d2ac1b493e 100644
1313     --- a/drivers/md/dm-thin.c
1314     +++ b/drivers/md/dm-thin.c
1315     @@ -25,7 +25,9 @@
1316     #define MAPPING_POOL_SIZE 1024
1317     #define PRISON_CELLS 1024
1318     #define COMMIT_PERIOD HZ
1319     -#define NO_SPACE_TIMEOUT (HZ * 60)
1320     +#define NO_SPACE_TIMEOUT_SECS 60
1321     +
1322     +static unsigned no_space_timeout_secs = NO_SPACE_TIMEOUT_SECS;
1323    
1324     DECLARE_DM_KCOPYD_THROTTLE_WITH_MODULE_PARM(snapshot_copy_throttle,
1325     "A percentage of time allocated for copy on write");
1326     @@ -1529,6 +1531,7 @@ static void set_pool_mode(struct pool *pool, enum pool_mode new_mode)
1327     struct pool_c *pt = pool->ti->private;
1328     bool needs_check = dm_pool_metadata_needs_check(pool->pmd);
1329     enum pool_mode old_mode = get_pool_mode(pool);
1330     + unsigned long no_space_timeout = ACCESS_ONCE(no_space_timeout_secs) * HZ;
1331    
1332     /*
1333     * Never allow the pool to transition to PM_WRITE mode if user
1334     @@ -1591,8 +1594,8 @@ static void set_pool_mode(struct pool *pool, enum pool_mode new_mode)
1335     pool->process_prepared_mapping = process_prepared_mapping;
1336     pool->process_prepared_discard = process_prepared_discard_passdown;
1337    
1338     - if (!pool->pf.error_if_no_space)
1339     - queue_delayed_work(pool->wq, &pool->no_space_timeout, NO_SPACE_TIMEOUT);
1340     + if (!pool->pf.error_if_no_space && no_space_timeout)
1341     + queue_delayed_work(pool->wq, &pool->no_space_timeout, no_space_timeout);
1342     break;
1343    
1344     case PM_WRITE:
1345     @@ -3326,6 +3329,9 @@ static void dm_thin_exit(void)
1346     module_init(dm_thin_init);
1347     module_exit(dm_thin_exit);
1348    
1349     +module_param_named(no_space_timeout, no_space_timeout_secs, uint, S_IRUGO | S_IWUSR);
1350     +MODULE_PARM_DESC(no_space_timeout, "Out of data space queue IO timeout in seconds");
1351     +
1352     MODULE_DESCRIPTION(DM_NAME " thin provisioning target");
1353     MODULE_AUTHOR("Joe Thornber <dm-devel@redhat.com>");
1354     MODULE_LICENSE("GPL");
1355     diff --git a/drivers/md/md.c b/drivers/md/md.c
1356     index 51c431c3a411..8b013f87c9d8 100644
1357     --- a/drivers/md/md.c
1358     +++ b/drivers/md/md.c
1359     @@ -7395,8 +7395,10 @@ void md_do_sync(struct md_thread *thread)
1360     /* just incase thread restarts... */
1361     if (test_bit(MD_RECOVERY_DONE, &mddev->recovery))
1362     return;
1363     - if (mddev->ro) /* never try to sync a read-only array */
1364     + if (mddev->ro) {/* never try to sync a read-only array */
1365     + set_bit(MD_RECOVERY_INTR, &mddev->recovery);
1366     return;
1367     + }
1368    
1369     if (test_bit(MD_RECOVERY_SYNC, &mddev->recovery)) {
1370     if (test_bit(MD_RECOVERY_CHECK, &mddev->recovery)) {
1371     @@ -7838,6 +7840,7 @@ void md_check_recovery(struct mddev *mddev)
1372     /* There is no thread, but we need to call
1373     * ->spare_active and clear saved_raid_disk
1374     */
1375     + set_bit(MD_RECOVERY_INTR, &mddev->recovery);
1376     md_reap_sync_thread(mddev);
1377     clear_bit(MD_RECOVERY_NEEDED, &mddev->recovery);
1378     goto unlock;
1379     diff --git a/drivers/scsi/scsi_transport_sas.c b/drivers/scsi/scsi_transport_sas.c
1380     index 1b681427dde0..c341f855fadc 100644
1381     --- a/drivers/scsi/scsi_transport_sas.c
1382     +++ b/drivers/scsi/scsi_transport_sas.c
1383     @@ -1621,8 +1621,6 @@ void sas_rphy_free(struct sas_rphy *rphy)
1384     list_del(&rphy->list);
1385     mutex_unlock(&sas_host->lock);
1386    
1387     - sas_bsg_remove(shost, rphy);
1388     -
1389     transport_destroy_device(dev);
1390    
1391     put_device(dev);
1392     @@ -1681,6 +1679,7 @@ sas_rphy_remove(struct sas_rphy *rphy)
1393     }
1394    
1395     sas_rphy_unlink(rphy);
1396     + sas_bsg_remove(NULL, rphy);
1397     transport_remove_device(dev);
1398     device_del(dev);
1399     }
1400     diff --git a/drivers/staging/comedi/drivers/ni_daq_700.c b/drivers/staging/comedi/drivers/ni_daq_700.c
1401     index e4cdca349157..6417af0bdaab 100644
1402     --- a/drivers/staging/comedi/drivers/ni_daq_700.c
1403     +++ b/drivers/staging/comedi/drivers/ni_daq_700.c
1404     @@ -122,6 +122,8 @@ static int daq700_ai_rinsn(struct comedi_device *dev,
1405     /* write channel to multiplexer */
1406     /* set mask scan bit high to disable scanning */
1407     outb(chan | 0x80, dev->iobase + CMD_R1);
1408     + /* mux needs 2us to really settle [Fred Brooks]. */
1409     + udelay(2);
1410    
1411     /* convert n samples */
1412     for (n = 0; n < insn->n; n++) {
1413     diff --git a/drivers/staging/rtl8192e/rtllib_tx.c b/drivers/staging/rtl8192e/rtllib_tx.c
1414     index 77964885b3f2..334d949afd63 100644
1415     --- a/drivers/staging/rtl8192e/rtllib_tx.c
1416     +++ b/drivers/staging/rtl8192e/rtllib_tx.c
1417     @@ -171,7 +171,7 @@ inline int rtllib_put_snap(u8 *data, u16 h_proto)
1418     snap->oui[1] = oui[1];
1419     snap->oui[2] = oui[2];
1420    
1421     - *(u16 *)(data + SNAP_SIZE) = h_proto;
1422     + *(__be16 *)(data + SNAP_SIZE) = htons(h_proto);
1423    
1424     return SNAP_SIZE + sizeof(u16);
1425     }
1426     diff --git a/drivers/staging/speakup/main.c b/drivers/staging/speakup/main.c
1427     index ef5933b93590..f61f9cf95ed7 100644
1428     --- a/drivers/staging/speakup/main.c
1429     +++ b/drivers/staging/speakup/main.c
1430     @@ -2218,6 +2218,7 @@ static void __exit speakup_exit(void)
1431     unregister_keyboard_notifier(&keyboard_notifier_block);
1432     unregister_vt_notifier(&vt_notifier_block);
1433     speakup_unregister_devsynth();
1434     + speakup_cancel_paste();
1435     del_timer(&cursor_timer);
1436     kthread_stop(speakup_task);
1437     speakup_task = NULL;
1438     diff --git a/drivers/staging/speakup/selection.c b/drivers/staging/speakup/selection.c
1439     index f0fb00392d6b..ca04d3669acc 100644
1440     --- a/drivers/staging/speakup/selection.c
1441     +++ b/drivers/staging/speakup/selection.c
1442     @@ -4,6 +4,10 @@
1443     #include <linux/sched.h>
1444     #include <linux/device.h> /* for dev_warn */
1445     #include <linux/selection.h>
1446     +#include <linux/workqueue.h>
1447     +#include <linux/tty.h>
1448     +#include <linux/tty_flip.h>
1449     +#include <asm/cmpxchg.h>
1450    
1451     #include "speakup.h"
1452    
1453     @@ -121,31 +125,61 @@ int speakup_set_selection(struct tty_struct *tty)
1454     return 0;
1455     }
1456    
1457     -/* TODO: move to some helper thread, probably. That'd fix having to check for
1458     - * in_atomic(). */
1459     -int speakup_paste_selection(struct tty_struct *tty)
1460     +struct speakup_paste_work {
1461     + struct work_struct work;
1462     + struct tty_struct *tty;
1463     +};
1464     +
1465     +static void __speakup_paste_selection(struct work_struct *work)
1466     {
1467     + struct speakup_paste_work *spw =
1468     + container_of(work, struct speakup_paste_work, work);
1469     + struct tty_struct *tty = xchg(&spw->tty, NULL);
1470     struct vc_data *vc = (struct vc_data *) tty->driver_data;
1471     int pasted = 0, count;
1472     + struct tty_ldisc *ld;
1473     DECLARE_WAITQUEUE(wait, current);
1474     +
1475     + ld = tty_ldisc_ref_wait(tty);
1476     + tty_buffer_lock_exclusive(&vc->port);
1477     +
1478     add_wait_queue(&vc->paste_wait, &wait);
1479     while (sel_buffer && sel_buffer_lth > pasted) {
1480     set_current_state(TASK_INTERRUPTIBLE);
1481     if (test_bit(TTY_THROTTLED, &tty->flags)) {
1482     - if (in_atomic())
1483     - /* if we are in an interrupt handler, abort */
1484     - break;
1485     schedule();
1486     continue;
1487     }
1488     count = sel_buffer_lth - pasted;
1489     - count = min_t(int, count, tty->receive_room);
1490     - tty->ldisc->ops->receive_buf(tty, sel_buffer + pasted,
1491     - NULL, count);
1492     + count = tty_ldisc_receive_buf(ld, sel_buffer + pasted, NULL,
1493     + count);
1494     pasted += count;
1495     }
1496     remove_wait_queue(&vc->paste_wait, &wait);
1497     current->state = TASK_RUNNING;
1498     +
1499     + tty_buffer_unlock_exclusive(&vc->port);
1500     + tty_ldisc_deref(ld);
1501     + tty_kref_put(tty);
1502     +}
1503     +
1504     +static struct speakup_paste_work speakup_paste_work = {
1505     + .work = __WORK_INITIALIZER(speakup_paste_work.work,
1506     + __speakup_paste_selection)
1507     +};
1508     +
1509     +int speakup_paste_selection(struct tty_struct *tty)
1510     +{
1511     + if (cmpxchg(&speakup_paste_work.tty, NULL, tty) != NULL)
1512     + return -EBUSY;
1513     +
1514     + tty_kref_get(tty);
1515     + schedule_work_on(WORK_CPU_UNBOUND, &speakup_paste_work.work);
1516     return 0;
1517     }
1518    
1519     +void speakup_cancel_paste(void)
1520     +{
1521     + cancel_work_sync(&speakup_paste_work.work);
1522     + tty_kref_put(speakup_paste_work.tty);
1523     +}
1524     diff --git a/drivers/staging/speakup/speakup.h b/drivers/staging/speakup/speakup.h
1525     index 0126f714821a..74fe72429b2d 100644
1526     --- a/drivers/staging/speakup/speakup.h
1527     +++ b/drivers/staging/speakup/speakup.h
1528     @@ -77,6 +77,7 @@ extern void synth_buffer_clear(void);
1529     extern void speakup_clear_selection(void);
1530     extern int speakup_set_selection(struct tty_struct *tty);
1531     extern int speakup_paste_selection(struct tty_struct *tty);
1532     +extern void speakup_cancel_paste(void);
1533     extern void speakup_register_devsynth(void);
1534     extern void speakup_unregister_devsynth(void);
1535     extern void synth_write(const char *buf, size_t count);
1536     diff --git a/drivers/target/iscsi/iscsi_target_login.c b/drivers/target/iscsi/iscsi_target_login.c
1537     index e29279e6b577..369ef10e8077 100644
1538     --- a/drivers/target/iscsi/iscsi_target_login.c
1539     +++ b/drivers/target/iscsi/iscsi_target_login.c
1540     @@ -249,6 +249,28 @@ static void iscsi_login_set_conn_values(
1541     mutex_unlock(&auth_id_lock);
1542     }
1543    
1544     +static __printf(2, 3) int iscsi_change_param_sprintf(
1545     + struct iscsi_conn *conn,
1546     + const char *fmt, ...)
1547     +{
1548     + va_list args;
1549     + unsigned char buf[64];
1550     +
1551     + memset(buf, 0, sizeof buf);
1552     +
1553     + va_start(args, fmt);
1554     + vsnprintf(buf, sizeof buf, fmt, args);
1555     + va_end(args);
1556     +
1557     + if (iscsi_change_param_value(buf, conn->param_list, 0) < 0) {
1558     + iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_TARGET_ERR,
1559     + ISCSI_LOGIN_STATUS_NO_RESOURCES);
1560     + return -1;
1561     + }
1562     +
1563     + return 0;
1564     +}
1565     +
1566     /*
1567     * This is the leading connection of a new session,
1568     * or session reinstatement.
1569     @@ -337,7 +359,6 @@ static int iscsi_login_zero_tsih_s2(
1570     {
1571     struct iscsi_node_attrib *na;
1572     struct iscsi_session *sess = conn->sess;
1573     - unsigned char buf[32];
1574     bool iser = false;
1575    
1576     sess->tpg = conn->tpg;
1577     @@ -378,26 +399,16 @@ static int iscsi_login_zero_tsih_s2(
1578     *
1579     * In our case, we have already located the struct iscsi_tiqn at this point.
1580     */
1581     - memset(buf, 0, 32);
1582     - sprintf(buf, "TargetPortalGroupTag=%hu", sess->tpg->tpgt);
1583     - if (iscsi_change_param_value(buf, conn->param_list, 0) < 0) {
1584     - iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_TARGET_ERR,
1585     - ISCSI_LOGIN_STATUS_NO_RESOURCES);
1586     + if (iscsi_change_param_sprintf(conn, "TargetPortalGroupTag=%hu", sess->tpg->tpgt))
1587     return -1;
1588     - }
1589    
1590     /*
1591     * Workaround for Initiators that have broken connection recovery logic.
1592     *
1593     * "We would really like to get rid of this." Linux-iSCSI.org team
1594     */
1595     - memset(buf, 0, 32);
1596     - sprintf(buf, "ErrorRecoveryLevel=%d", na->default_erl);
1597     - if (iscsi_change_param_value(buf, conn->param_list, 0) < 0) {
1598     - iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_TARGET_ERR,
1599     - ISCSI_LOGIN_STATUS_NO_RESOURCES);
1600     + if (iscsi_change_param_sprintf(conn, "ErrorRecoveryLevel=%d", na->default_erl))
1601     return -1;
1602     - }
1603    
1604     if (iscsi_login_disable_FIM_keys(conn->param_list, conn) < 0)
1605     return -1;
1606     @@ -409,12 +420,9 @@ static int iscsi_login_zero_tsih_s2(
1607     unsigned long mrdsl, off;
1608     int rc;
1609    
1610     - sprintf(buf, "RDMAExtensions=Yes");
1611     - if (iscsi_change_param_value(buf, conn->param_list, 0) < 0) {
1612     - iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_TARGET_ERR,
1613     - ISCSI_LOGIN_STATUS_NO_RESOURCES);
1614     + if (iscsi_change_param_sprintf(conn, "RDMAExtensions=Yes"))
1615     return -1;
1616     - }
1617     +
1618     /*
1619     * Make MaxRecvDataSegmentLength PAGE_SIZE aligned for
1620     * Immediate Data + Unsolicitied Data-OUT if necessary..
1621     @@ -444,12 +452,8 @@ static int iscsi_login_zero_tsih_s2(
1622     pr_warn("Aligning ISER MaxRecvDataSegmentLength: %lu down"
1623     " to PAGE_SIZE\n", mrdsl);
1624    
1625     - sprintf(buf, "MaxRecvDataSegmentLength=%lu\n", mrdsl);
1626     - if (iscsi_change_param_value(buf, conn->param_list, 0) < 0) {
1627     - iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_TARGET_ERR,
1628     - ISCSI_LOGIN_STATUS_NO_RESOURCES);
1629     + if (iscsi_change_param_sprintf(conn, "MaxRecvDataSegmentLength=%lu\n", mrdsl))
1630     return -1;
1631     - }
1632     }
1633    
1634     return 0;
1635     @@ -591,13 +595,8 @@ static int iscsi_login_non_zero_tsih_s2(
1636     *
1637     * In our case, we have already located the struct iscsi_tiqn at this point.
1638     */
1639     - memset(buf, 0, 32);
1640     - sprintf(buf, "TargetPortalGroupTag=%hu", sess->tpg->tpgt);
1641     - if (iscsi_change_param_value(buf, conn->param_list, 0) < 0) {
1642     - iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_TARGET_ERR,
1643     - ISCSI_LOGIN_STATUS_NO_RESOURCES);
1644     + if (iscsi_change_param_sprintf(conn, "TargetPortalGroupTag=%hu", sess->tpg->tpgt))
1645     return -1;
1646     - }
1647    
1648     return iscsi_login_disable_FIM_keys(conn->param_list, conn);
1649     }
1650     diff --git a/drivers/target/target_core_configfs.c b/drivers/target/target_core_configfs.c
1651     index f0e85b119692..483d324020a6 100644
1652     --- a/drivers/target/target_core_configfs.c
1653     +++ b/drivers/target/target_core_configfs.c
1654     @@ -2223,6 +2223,11 @@ static ssize_t target_core_alua_tg_pt_gp_store_attr_alua_access_state(
1655     " tg_pt_gp ID: %hu\n", tg_pt_gp->tg_pt_gp_valid_id);
1656     return -EINVAL;
1657     }
1658     + if (!(dev->dev_flags & DF_CONFIGURED)) {
1659     + pr_err("Unable to set alua_access_state while device is"
1660     + " not configured\n");
1661     + return -ENODEV;
1662     + }
1663    
1664     ret = kstrtoul(page, 0, &tmp);
1665     if (ret < 0) {
1666     diff --git a/drivers/tty/tty_buffer.c b/drivers/tty/tty_buffer.c
1667     index cf78d1985cd8..143deb62467d 100644
1668     --- a/drivers/tty/tty_buffer.c
1669     +++ b/drivers/tty/tty_buffer.c
1670     @@ -60,6 +60,7 @@ void tty_buffer_lock_exclusive(struct tty_port *port)
1671     atomic_inc(&buf->priority);
1672     mutex_lock(&buf->lock);
1673     }
1674     +EXPORT_SYMBOL_GPL(tty_buffer_lock_exclusive);
1675    
1676     void tty_buffer_unlock_exclusive(struct tty_port *port)
1677     {
1678     @@ -73,6 +74,7 @@ void tty_buffer_unlock_exclusive(struct tty_port *port)
1679     if (restart)
1680     queue_work(system_unbound_wq, &buf->work);
1681     }
1682     +EXPORT_SYMBOL_GPL(tty_buffer_unlock_exclusive);
1683    
1684     /**
1685     * tty_buffer_space_avail - return unused buffer space
1686     diff --git a/drivers/usb/core/driver.c b/drivers/usb/core/driver.c
1687     index 4ebf1b2034e8..39c7cd6ffa4b 100644
1688     --- a/drivers/usb/core/driver.c
1689     +++ b/drivers/usb/core/driver.c
1690     @@ -1801,10 +1801,13 @@ int usb_runtime_suspend(struct device *dev)
1691     if (status == -EAGAIN || status == -EBUSY)
1692     usb_mark_last_busy(udev);
1693    
1694     - /* The PM core reacts badly unless the return code is 0,
1695     - * -EAGAIN, or -EBUSY, so always return -EBUSY on an error.
1696     + /*
1697     + * The PM core reacts badly unless the return code is 0,
1698     + * -EAGAIN, or -EBUSY, so always return -EBUSY on an error
1699     + * (except for root hubs, because they don't suspend through
1700     + * an upstream port like other USB devices).
1701     */
1702     - if (status != 0)
1703     + if (status != 0 && udev->parent)
1704     return -EBUSY;
1705     return status;
1706     }
1707     diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
1708     index d498d03afdbd..3baa51bf8a6a 100644
1709     --- a/drivers/usb/core/hub.c
1710     +++ b/drivers/usb/core/hub.c
1711     @@ -1679,8 +1679,19 @@ static int hub_probe(struct usb_interface *intf, const struct usb_device_id *id)
1712     */
1713     pm_runtime_set_autosuspend_delay(&hdev->dev, 0);
1714    
1715     - /* Hubs have proper suspend/resume support. */
1716     - usb_enable_autosuspend(hdev);
1717     + /*
1718     + * Hubs have proper suspend/resume support, except for root hubs
1719     + * where the controller driver doesn't have bus_suspend and
1720     + * bus_resume methods.
1721     + */
1722     + if (hdev->parent) { /* normal device */
1723     + usb_enable_autosuspend(hdev);
1724     + } else { /* root hub */
1725     + const struct hc_driver *drv = bus_to_hcd(hdev->bus)->driver;
1726     +
1727     + if (drv->bus_suspend && drv->bus_resume)
1728     + usb_enable_autosuspend(hdev);
1729     + }
1730    
1731     if (hdev->level == MAX_TOPO_LEVEL) {
1732     dev_err(&intf->dev,
1733     diff --git a/drivers/usb/host/pci-quirks.c b/drivers/usb/host/pci-quirks.c
1734     index 00661d305143..4a6d3dd68572 100644
1735     --- a/drivers/usb/host/pci-quirks.c
1736     +++ b/drivers/usb/host/pci-quirks.c
1737     @@ -847,6 +847,13 @@ void usb_enable_intel_xhci_ports(struct pci_dev *xhci_pdev)
1738     bool ehci_found = false;
1739     struct pci_dev *companion = NULL;
1740    
1741     + /* Sony VAIO t-series with subsystem device ID 90a8 is not capable of
1742     + * switching ports from EHCI to xHCI
1743     + */
1744     + if (xhci_pdev->subsystem_vendor == PCI_VENDOR_ID_SONY &&
1745     + xhci_pdev->subsystem_device == 0x90a8)
1746     + return;
1747     +
1748     /* make sure an intel EHCI controller exists */
1749     for_each_pci_dev(companion) {
1750     if (companion->class == PCI_CLASS_SERIAL_USB_EHCI &&
1751     diff --git a/drivers/usb/host/xhci-mem.c b/drivers/usb/host/xhci-mem.c
1752     index bce4391a0e7d..4133a00461b1 100644
1753     --- a/drivers/usb/host/xhci-mem.c
1754     +++ b/drivers/usb/host/xhci-mem.c
1755     @@ -1722,6 +1722,16 @@ void xhci_mem_cleanup(struct xhci_hcd *xhci)
1756     kfree(cur_cd);
1757     }
1758    
1759     + num_ports = HCS_MAX_PORTS(xhci->hcs_params1);
1760     + for (i = 0; i < num_ports; i++) {
1761     + struct xhci_interval_bw_table *bwt = &xhci->rh_bw[i].bw_table;
1762     + for (j = 0; j < XHCI_MAX_INTERVAL; j++) {
1763     + struct list_head *ep = &bwt->interval_bw[j].endpoints;
1764     + while (!list_empty(ep))
1765     + list_del_init(ep->next);
1766     + }
1767     + }
1768     +
1769     for (i = 1; i < MAX_HC_SLOTS; ++i)
1770     xhci_free_virt_device(xhci, i);
1771    
1772     @@ -1757,16 +1767,6 @@ void xhci_mem_cleanup(struct xhci_hcd *xhci)
1773     if (!xhci->rh_bw)
1774     goto no_bw;
1775    
1776     - num_ports = HCS_MAX_PORTS(xhci->hcs_params1);
1777     - for (i = 0; i < num_ports; i++) {
1778     - struct xhci_interval_bw_table *bwt = &xhci->rh_bw[i].bw_table;
1779     - for (j = 0; j < XHCI_MAX_INTERVAL; j++) {
1780     - struct list_head *ep = &bwt->interval_bw[j].endpoints;
1781     - while (!list_empty(ep))
1782     - list_del_init(ep->next);
1783     - }
1784     - }
1785     -
1786     for (i = 0; i < num_ports; i++) {
1787     struct xhci_tt_bw_info *tt, *n;
1788     list_for_each_entry_safe(tt, n, &xhci->rh_bw[i].tts, tt_list) {
1789     diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c
1790     index 7c6e1dedeb06..edf3b124583c 100644
1791     --- a/drivers/usb/serial/ftdi_sio.c
1792     +++ b/drivers/usb/serial/ftdi_sio.c
1793     @@ -580,6 +580,8 @@ static const struct usb_device_id id_table_combined[] = {
1794     { USB_DEVICE(FTDI_VID, FTDI_TAVIR_STK500_PID) },
1795     { USB_DEVICE(FTDI_VID, FTDI_TIAO_UMPA_PID),
1796     .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
1797     + { USB_DEVICE(FTDI_VID, FTDI_NT_ORIONLXM_PID),
1798     + .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
1799     /*
1800     * ELV devices:
1801     */
1802     diff --git a/drivers/usb/serial/ftdi_sio_ids.h b/drivers/usb/serial/ftdi_sio_ids.h
1803     index 993c93df6874..500474c48f4b 100644
1804     --- a/drivers/usb/serial/ftdi_sio_ids.h
1805     +++ b/drivers/usb/serial/ftdi_sio_ids.h
1806     @@ -538,6 +538,11 @@
1807     */
1808     #define FTDI_TIAO_UMPA_PID 0x8a98 /* TIAO/DIYGADGET USB Multi-Protocol Adapter */
1809    
1810     +/*
1811     + * NovaTech product ids (FTDI_VID)
1812     + */
1813     +#define FTDI_NT_ORIONLXM_PID 0x7c90 /* OrionLXm Substation Automation Platform */
1814     +
1815    
1816     /********************************/
1817     /** third-party VID/PID combos **/
1818     diff --git a/drivers/usb/serial/io_ti.c b/drivers/usb/serial/io_ti.c
1819     index df90dae53eb9..c0a42e9e6777 100644
1820     --- a/drivers/usb/serial/io_ti.c
1821     +++ b/drivers/usb/serial/io_ti.c
1822     @@ -821,7 +821,7 @@ static int build_i2c_fw_hdr(__u8 *header, struct device *dev)
1823     firmware_rec = (struct ti_i2c_firmware_rec*)i2c_header->Data;
1824    
1825     i2c_header->Type = I2C_DESC_TYPE_FIRMWARE_BLANK;
1826     - i2c_header->Size = (__u16)buffer_size;
1827     + i2c_header->Size = cpu_to_le16(buffer_size);
1828     i2c_header->CheckSum = cs;
1829     firmware_rec->Ver_Major = OperationalMajorVersion;
1830     firmware_rec->Ver_Minor = OperationalMinorVersion;
1831     diff --git a/drivers/usb/serial/io_usbvend.h b/drivers/usb/serial/io_usbvend.h
1832     index 51f83fbb73bb..6f6a856bc37c 100644
1833     --- a/drivers/usb/serial/io_usbvend.h
1834     +++ b/drivers/usb/serial/io_usbvend.h
1835     @@ -594,7 +594,7 @@ struct edge_boot_descriptor {
1836    
1837     struct ti_i2c_desc {
1838     __u8 Type; // Type of descriptor
1839     - __u16 Size; // Size of data only not including header
1840     + __le16 Size; // Size of data only not including header
1841     __u8 CheckSum; // Checksum (8 bit sum of data only)
1842     __u8 Data[0]; // Data starts here
1843     } __attribute__((packed));
1844     diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c
1845     index f213ee978516..948a19f0cdf7 100644
1846     --- a/drivers/usb/serial/option.c
1847     +++ b/drivers/usb/serial/option.c
1848     @@ -161,6 +161,7 @@ static void option_instat_callback(struct urb *urb);
1849     #define NOVATELWIRELESS_PRODUCT_HSPA_EMBEDDED_FULLSPEED 0x9000
1850     #define NOVATELWIRELESS_PRODUCT_HSPA_EMBEDDED_HIGHSPEED 0x9001
1851     #define NOVATELWIRELESS_PRODUCT_E362 0x9010
1852     +#define NOVATELWIRELESS_PRODUCT_E371 0x9011
1853     #define NOVATELWIRELESS_PRODUCT_G2 0xA010
1854     #define NOVATELWIRELESS_PRODUCT_MC551 0xB001
1855    
1856     @@ -1012,6 +1013,7 @@ static const struct usb_device_id option_ids[] = {
1857     /* Novatel Ovation MC551 a.k.a. Verizon USB551L */
1858     { USB_DEVICE_AND_INTERFACE_INFO(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_MC551, 0xff, 0xff, 0xff) },
1859     { USB_DEVICE_AND_INTERFACE_INFO(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_E362, 0xff, 0xff, 0xff) },
1860     + { USB_DEVICE_AND_INTERFACE_INFO(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_E371, 0xff, 0xff, 0xff) },
1861    
1862     { USB_DEVICE(AMOI_VENDOR_ID, AMOI_PRODUCT_H01) },
1863     { USB_DEVICE(AMOI_VENDOR_ID, AMOI_PRODUCT_H01A) },
1864     diff --git a/fs/proc/task_mmu.c b/fs/proc/task_mmu.c
1865     index fb52b548080d..8f788193e3d4 100644
1866     --- a/fs/proc/task_mmu.c
1867     +++ b/fs/proc/task_mmu.c
1868     @@ -1350,7 +1350,7 @@ static int gather_hugetbl_stats(pte_t *pte, unsigned long hmask,
1869     struct numa_maps *md;
1870     struct page *page;
1871    
1872     - if (pte_none(*pte))
1873     + if (!pte_present(*pte))
1874     return 0;
1875    
1876     page = pte_page(*pte);
1877     diff --git a/include/linux/percpu-refcount.h b/include/linux/percpu-refcount.h
1878     index 95961f0bf62d..0afb48fd449d 100644
1879     --- a/include/linux/percpu-refcount.h
1880     +++ b/include/linux/percpu-refcount.h
1881     @@ -110,7 +110,7 @@ static inline void percpu_ref_get(struct percpu_ref *ref)
1882     pcpu_count = ACCESS_ONCE(ref->pcpu_count);
1883    
1884     if (likely(REF_STATUS(pcpu_count) == PCPU_REF_PTR))
1885     - __this_cpu_inc(*pcpu_count);
1886     + this_cpu_inc(*pcpu_count);
1887     else
1888     atomic_inc(&ref->count);
1889    
1890     @@ -139,7 +139,7 @@ static inline bool percpu_ref_tryget(struct percpu_ref *ref)
1891     pcpu_count = ACCESS_ONCE(ref->pcpu_count);
1892    
1893     if (likely(REF_STATUS(pcpu_count) == PCPU_REF_PTR)) {
1894     - __this_cpu_inc(*pcpu_count);
1895     + this_cpu_inc(*pcpu_count);
1896     ret = true;
1897     }
1898    
1899     @@ -164,7 +164,7 @@ static inline void percpu_ref_put(struct percpu_ref *ref)
1900     pcpu_count = ACCESS_ONCE(ref->pcpu_count);
1901    
1902     if (likely(REF_STATUS(pcpu_count) == PCPU_REF_PTR))
1903     - __this_cpu_dec(*pcpu_count);
1904     + this_cpu_dec(*pcpu_count);
1905     else if (unlikely(atomic_dec_and_test(&ref->count)))
1906     ref->release(ref);
1907    
1908     diff --git a/include/uapi/linux/usb/Kbuild b/include/uapi/linux/usb/Kbuild
1909     index 6cb4ea826834..4cc4d6e7e523 100644
1910     --- a/include/uapi/linux/usb/Kbuild
1911     +++ b/include/uapi/linux/usb/Kbuild
1912     @@ -1,6 +1,7 @@
1913     # UAPI Header export list
1914     header-y += audio.h
1915     header-y += cdc.h
1916     +header-y += cdc-wdm.h
1917     header-y += ch11.h
1918     header-y += ch9.h
1919     header-y += functionfs.h
1920     diff --git a/include/uapi/linux/usb/cdc-wdm.h b/include/uapi/linux/usb/cdc-wdm.h
1921     index f03134feebd6..0dc132e75030 100644
1922     --- a/include/uapi/linux/usb/cdc-wdm.h
1923     +++ b/include/uapi/linux/usb/cdc-wdm.h
1924     @@ -9,6 +9,8 @@
1925     #ifndef _UAPI__LINUX_USB_CDC_WDM_H
1926     #define _UAPI__LINUX_USB_CDC_WDM_H
1927    
1928     +#include <linux/types.h>
1929     +
1930     /*
1931     * This IOCTL is used to retrieve the wMaxCommand for the device,
1932     * defining the message limit for both reading and writing.
1933     diff --git a/kernel/cpu.c b/kernel/cpu.c
1934     index deff2e693766..9a1ba77d6a50 100644
1935     --- a/kernel/cpu.c
1936     +++ b/kernel/cpu.c
1937     @@ -692,10 +692,12 @@ void set_cpu_present(unsigned int cpu, bool present)
1938    
1939     void set_cpu_online(unsigned int cpu, bool online)
1940     {
1941     - if (online)
1942     + if (online) {
1943     cpumask_set_cpu(cpu, to_cpumask(cpu_online_bits));
1944     - else
1945     + cpumask_set_cpu(cpu, to_cpumask(cpu_active_bits));
1946     + } else {
1947     cpumask_clear_cpu(cpu, to_cpumask(cpu_online_bits));
1948     + }
1949     }
1950    
1951     void set_cpu_active(unsigned int cpu, bool active)
1952     diff --git a/kernel/events/core.c b/kernel/events/core.c
1953     index fa0b2d4ad83c..0e7fea78f565 100644
1954     --- a/kernel/events/core.c
1955     +++ b/kernel/events/core.c
1956     @@ -1439,6 +1439,11 @@ group_sched_out(struct perf_event *group_event,
1957     cpuctx->exclusive = 0;
1958     }
1959    
1960     +struct remove_event {
1961     + struct perf_event *event;
1962     + bool detach_group;
1963     +};
1964     +
1965     /*
1966     * Cross CPU call to remove a performance event
1967     *
1968     @@ -1447,12 +1452,15 @@ group_sched_out(struct perf_event *group_event,
1969     */
1970     static int __perf_remove_from_context(void *info)
1971     {
1972     - struct perf_event *event = info;
1973     + struct remove_event *re = info;
1974     + struct perf_event *event = re->event;
1975     struct perf_event_context *ctx = event->ctx;
1976     struct perf_cpu_context *cpuctx = __get_cpu_context(ctx);
1977    
1978     raw_spin_lock(&ctx->lock);
1979     event_sched_out(event, cpuctx, ctx);
1980     + if (re->detach_group)
1981     + perf_group_detach(event);
1982     list_del_event(event, ctx);
1983     if (!ctx->nr_events && cpuctx->task_ctx == ctx) {
1984     ctx->is_active = 0;
1985     @@ -1477,10 +1485,14 @@ static int __perf_remove_from_context(void *info)
1986     * When called from perf_event_exit_task, it's OK because the
1987     * context has been detached from its task.
1988     */
1989     -static void perf_remove_from_context(struct perf_event *event)
1990     +static void perf_remove_from_context(struct perf_event *event, bool detach_group)
1991     {
1992     struct perf_event_context *ctx = event->ctx;
1993     struct task_struct *task = ctx->task;
1994     + struct remove_event re = {
1995     + .event = event,
1996     + .detach_group = detach_group,
1997     + };
1998    
1999     lockdep_assert_held(&ctx->mutex);
2000    
2001     @@ -1489,12 +1501,12 @@ static void perf_remove_from_context(struct perf_event *event)
2002     * Per cpu events are removed via an smp call and
2003     * the removal is always successful.
2004     */
2005     - cpu_function_call(event->cpu, __perf_remove_from_context, event);
2006     + cpu_function_call(event->cpu, __perf_remove_from_context, &re);
2007     return;
2008     }
2009    
2010     retry:
2011     - if (!task_function_call(task, __perf_remove_from_context, event))
2012     + if (!task_function_call(task, __perf_remove_from_context, &re))
2013     return;
2014    
2015     raw_spin_lock_irq(&ctx->lock);
2016     @@ -1511,6 +1523,8 @@ retry:
2017     * Since the task isn't running, its safe to remove the event, us
2018     * holding the ctx->lock ensures the task won't get scheduled in.
2019     */
2020     + if (detach_group)
2021     + perf_group_detach(event);
2022     list_del_event(event, ctx);
2023     raw_spin_unlock_irq(&ctx->lock);
2024     }
2025     @@ -3279,10 +3293,7 @@ int perf_event_release_kernel(struct perf_event *event)
2026     * to trigger the AB-BA case.
2027     */
2028     mutex_lock_nested(&ctx->mutex, SINGLE_DEPTH_NESTING);
2029     - raw_spin_lock_irq(&ctx->lock);
2030     - perf_group_detach(event);
2031     - raw_spin_unlock_irq(&ctx->lock);
2032     - perf_remove_from_context(event);
2033     + perf_remove_from_context(event, true);
2034     mutex_unlock(&ctx->mutex);
2035    
2036     free_event(event);
2037     @@ -5406,6 +5417,9 @@ struct swevent_htable {
2038    
2039     /* Recursion avoidance in each contexts */
2040     int recursion[PERF_NR_CONTEXTS];
2041     +
2042     + /* Keeps track of cpu being initialized/exited */
2043     + bool online;
2044     };
2045    
2046     static DEFINE_PER_CPU(struct swevent_htable, swevent_htable);
2047     @@ -5652,8 +5666,14 @@ static int perf_swevent_add(struct perf_event *event, int flags)
2048     hwc->state = !(flags & PERF_EF_START);
2049    
2050     head = find_swevent_head(swhash, event);
2051     - if (WARN_ON_ONCE(!head))
2052     + if (!head) {
2053     + /*
2054     + * We can race with cpu hotplug code. Do not
2055     + * WARN if the cpu just got unplugged.
2056     + */
2057     + WARN_ON_ONCE(swhash->online);
2058     return -EINVAL;
2059     + }
2060    
2061     hlist_add_head_rcu(&event->hlist_entry, head);
2062    
2063     @@ -7016,6 +7036,9 @@ SYSCALL_DEFINE5(perf_event_open,
2064     if (attr.freq) {
2065     if (attr.sample_freq > sysctl_perf_event_sample_rate)
2066     return -EINVAL;
2067     + } else {
2068     + if (attr.sample_period & (1ULL << 63))
2069     + return -EINVAL;
2070     }
2071    
2072     /*
2073     @@ -7163,7 +7186,7 @@ SYSCALL_DEFINE5(perf_event_open,
2074     struct perf_event_context *gctx = group_leader->ctx;
2075    
2076     mutex_lock(&gctx->mutex);
2077     - perf_remove_from_context(group_leader);
2078     + perf_remove_from_context(group_leader, false);
2079    
2080     /*
2081     * Removing from the context ends up with disabled
2082     @@ -7173,7 +7196,7 @@ SYSCALL_DEFINE5(perf_event_open,
2083     perf_event__state_init(group_leader);
2084     list_for_each_entry(sibling, &group_leader->sibling_list,
2085     group_entry) {
2086     - perf_remove_from_context(sibling);
2087     + perf_remove_from_context(sibling, false);
2088     perf_event__state_init(sibling);
2089     put_ctx(gctx);
2090     }
2091     @@ -7303,7 +7326,7 @@ void perf_pmu_migrate_context(struct pmu *pmu, int src_cpu, int dst_cpu)
2092     mutex_lock(&src_ctx->mutex);
2093     list_for_each_entry_safe(event, tmp, &src_ctx->event_list,
2094     event_entry) {
2095     - perf_remove_from_context(event);
2096     + perf_remove_from_context(event, false);
2097     unaccount_event_cpu(event, src_cpu);
2098     put_ctx(src_ctx);
2099     list_add(&event->migrate_entry, &events);
2100     @@ -7365,13 +7388,7 @@ __perf_event_exit_task(struct perf_event *child_event,
2101     struct perf_event_context *child_ctx,
2102     struct task_struct *child)
2103     {
2104     - if (child_event->parent) {
2105     - raw_spin_lock_irq(&child_ctx->lock);
2106     - perf_group_detach(child_event);
2107     - raw_spin_unlock_irq(&child_ctx->lock);
2108     - }
2109     -
2110     - perf_remove_from_context(child_event);
2111     + perf_remove_from_context(child_event, !!child_event->parent);
2112    
2113     /*
2114     * It can happen that the parent exits first, and has events
2115     @@ -7833,6 +7850,7 @@ static void perf_event_init_cpu(int cpu)
2116     struct swevent_htable *swhash = &per_cpu(swevent_htable, cpu);
2117    
2118     mutex_lock(&swhash->hlist_mutex);
2119     + swhash->online = true;
2120     if (swhash->hlist_refcount > 0) {
2121     struct swevent_hlist *hlist;
2122    
2123     @@ -7855,14 +7873,14 @@ static void perf_pmu_rotate_stop(struct pmu *pmu)
2124    
2125     static void __perf_event_exit_context(void *__info)
2126     {
2127     + struct remove_event re = { .detach_group = false };
2128     struct perf_event_context *ctx = __info;
2129     - struct perf_event *event;
2130    
2131     perf_pmu_rotate_stop(ctx->pmu);
2132    
2133     rcu_read_lock();
2134     - list_for_each_entry_rcu(event, &ctx->event_list, event_entry)
2135     - __perf_remove_from_context(event);
2136     + list_for_each_entry_rcu(re.event, &ctx->event_list, event_entry)
2137     + __perf_remove_from_context(&re);
2138     rcu_read_unlock();
2139     }
2140    
2141     @@ -7890,6 +7908,7 @@ static void perf_event_exit_cpu(int cpu)
2142     perf_event_exit_cpu_context(cpu);
2143    
2144     mutex_lock(&swhash->hlist_mutex);
2145     + swhash->online = false;
2146     swevent_hlist_release(swhash);
2147     mutex_unlock(&swhash->hlist_mutex);
2148     }
2149     diff --git a/kernel/sched/core.c b/kernel/sched/core.c
2150     index f5c6635b806c..0aae0fcec026 100644
2151     --- a/kernel/sched/core.c
2152     +++ b/kernel/sched/core.c
2153     @@ -3242,17 +3242,40 @@ __getparam_dl(struct task_struct *p, struct sched_attr *attr)
2154     * We ask for the deadline not being zero, and greater or equal
2155     * than the runtime, as well as the period of being zero or
2156     * greater than deadline. Furthermore, we have to be sure that
2157     - * user parameters are above the internal resolution (1us); we
2158     - * check sched_runtime only since it is always the smaller one.
2159     + * user parameters are above the internal resolution of 1us (we
2160     + * check sched_runtime only since it is always the smaller one) and
2161     + * below 2^63 ns (we have to check both sched_deadline and
2162     + * sched_period, as the latter can be zero).
2163     */
2164     static bool
2165     __checkparam_dl(const struct sched_attr *attr)
2166     {
2167     - return attr && attr->sched_deadline != 0 &&
2168     - (attr->sched_period == 0 ||
2169     - (s64)(attr->sched_period - attr->sched_deadline) >= 0) &&
2170     - (s64)(attr->sched_deadline - attr->sched_runtime ) >= 0 &&
2171     - attr->sched_runtime >= (2 << (DL_SCALE - 1));
2172     + /* deadline != 0 */
2173     + if (attr->sched_deadline == 0)
2174     + return false;
2175     +
2176     + /*
2177     + * Since we truncate DL_SCALE bits, make sure we're at least
2178     + * that big.
2179     + */
2180     + if (attr->sched_runtime < (1ULL << DL_SCALE))
2181     + return false;
2182     +
2183     + /*
2184     + * Since we use the MSB for wrap-around and sign issues, make
2185     + * sure it's not set (mind that period can be equal to zero).
2186     + */
2187     + if (attr->sched_deadline & (1ULL << 63) ||
2188     + attr->sched_period & (1ULL << 63))
2189     + return false;
2190     +
2191     + /* runtime <= deadline <= period (if period != 0) */
2192     + if ((attr->sched_period != 0 &&
2193     + attr->sched_period < attr->sched_deadline) ||
2194     + attr->sched_deadline < attr->sched_runtime)
2195     + return false;
2196     +
2197     + return true;
2198     }
2199    
2200     /*
2201     @@ -3680,8 +3703,12 @@ SYSCALL_DEFINE3(sched_setattr, pid_t, pid, struct sched_attr __user *, uattr,
2202     if (!uattr || pid < 0 || flags)
2203     return -EINVAL;
2204    
2205     - if (sched_copy_attr(uattr, &attr))
2206     - return -EFAULT;
2207     + retval = sched_copy_attr(uattr, &attr);
2208     + if (retval)
2209     + return retval;
2210     +
2211     + if ((int)attr.sched_policy < 0)
2212     + return -EINVAL;
2213    
2214     rcu_read_lock();
2215     retval = -ESRCH;
2216     @@ -3731,7 +3758,7 @@ SYSCALL_DEFINE1(sched_getscheduler, pid_t, pid)
2217     */
2218     SYSCALL_DEFINE2(sched_getparam, pid_t, pid, struct sched_param __user *, param)
2219     {
2220     - struct sched_param lp;
2221     + struct sched_param lp = { .sched_priority = 0 };
2222     struct task_struct *p;
2223     int retval;
2224    
2225     @@ -3748,11 +3775,8 @@ SYSCALL_DEFINE2(sched_getparam, pid_t, pid, struct sched_param __user *, param)
2226     if (retval)
2227     goto out_unlock;
2228    
2229     - if (task_has_dl_policy(p)) {
2230     - retval = -EINVAL;
2231     - goto out_unlock;
2232     - }
2233     - lp.sched_priority = p->rt_priority;
2234     + if (task_has_rt_policy(p))
2235     + lp.sched_priority = p->rt_priority;
2236     rcu_read_unlock();
2237    
2238     /*
2239     @@ -5051,7 +5075,6 @@ static int sched_cpu_active(struct notifier_block *nfb,
2240     unsigned long action, void *hcpu)
2241     {
2242     switch (action & ~CPU_TASKS_FROZEN) {
2243     - case CPU_STARTING:
2244     case CPU_DOWN_FAILED:
2245     set_cpu_active((long)hcpu, true);
2246     return NOTIFY_OK;
2247     diff --git a/kernel/sched/cpudeadline.c b/kernel/sched/cpudeadline.c
2248     index 5b9bb42b2d47..ab001b5d5048 100644
2249     --- a/kernel/sched/cpudeadline.c
2250     +++ b/kernel/sched/cpudeadline.c
2251     @@ -210,7 +210,5 @@ int cpudl_init(struct cpudl *cp)
2252     */
2253     void cpudl_cleanup(struct cpudl *cp)
2254     {
2255     - /*
2256     - * nothing to do for the moment
2257     - */
2258     + free_cpumask_var(cp->free_cpus);
2259     }
2260     diff --git a/kernel/sched/cpupri.c b/kernel/sched/cpupri.c
2261     index 8b836b376d91..3031bac8aa3e 100644
2262     --- a/kernel/sched/cpupri.c
2263     +++ b/kernel/sched/cpupri.c
2264     @@ -70,8 +70,7 @@ int cpupri_find(struct cpupri *cp, struct task_struct *p,
2265     int idx = 0;
2266     int task_pri = convert_prio(p->prio);
2267    
2268     - if (task_pri >= MAX_RT_PRIO)
2269     - return 0;
2270     + BUG_ON(task_pri >= CPUPRI_NR_PRIORITIES);
2271    
2272     for (idx = 0; idx < task_pri; idx++) {
2273     struct cpupri_vec *vec = &cp->pri_to_cpu[idx];
2274     diff --git a/kernel/sched/cputime.c b/kernel/sched/cputime.c
2275     index 99947919e30b..cfe2f268afaa 100644
2276     --- a/kernel/sched/cputime.c
2277     +++ b/kernel/sched/cputime.c
2278     @@ -326,50 +326,50 @@ out:
2279     * softirq as those do not count in task exec_runtime any more.
2280     */
2281     static void irqtime_account_process_tick(struct task_struct *p, int user_tick,
2282     - struct rq *rq)
2283     + struct rq *rq, int ticks)
2284     {
2285     - cputime_t one_jiffy_scaled = cputime_to_scaled(cputime_one_jiffy);
2286     + cputime_t scaled = cputime_to_scaled(cputime_one_jiffy);
2287     + u64 cputime = (__force u64) cputime_one_jiffy;
2288     u64 *cpustat = kcpustat_this_cpu->cpustat;
2289    
2290     if (steal_account_process_tick())
2291     return;
2292    
2293     + cputime *= ticks;
2294     + scaled *= ticks;
2295     +
2296     if (irqtime_account_hi_update()) {
2297     - cpustat[CPUTIME_IRQ] += (__force u64) cputime_one_jiffy;
2298     + cpustat[CPUTIME_IRQ] += cputime;
2299     } else if (irqtime_account_si_update()) {
2300     - cpustat[CPUTIME_SOFTIRQ] += (__force u64) cputime_one_jiffy;
2301     + cpustat[CPUTIME_SOFTIRQ] += cputime;
2302     } else if (this_cpu_ksoftirqd() == p) {
2303     /*
2304     * ksoftirqd time do not get accounted in cpu_softirq_time.
2305     * So, we have to handle it separately here.
2306     * Also, p->stime needs to be updated for ksoftirqd.
2307     */
2308     - __account_system_time(p, cputime_one_jiffy, one_jiffy_scaled,
2309     - CPUTIME_SOFTIRQ);
2310     + __account_system_time(p, cputime, scaled, CPUTIME_SOFTIRQ);
2311     } else if (user_tick) {
2312     - account_user_time(p, cputime_one_jiffy, one_jiffy_scaled);
2313     + account_user_time(p, cputime, scaled);
2314     } else if (p == rq->idle) {
2315     - account_idle_time(cputime_one_jiffy);
2316     + account_idle_time(cputime);
2317     } else if (p->flags & PF_VCPU) { /* System time or guest time */
2318     - account_guest_time(p, cputime_one_jiffy, one_jiffy_scaled);
2319     + account_guest_time(p, cputime, scaled);
2320     } else {
2321     - __account_system_time(p, cputime_one_jiffy, one_jiffy_scaled,
2322     - CPUTIME_SYSTEM);
2323     + __account_system_time(p, cputime, scaled, CPUTIME_SYSTEM);
2324     }
2325     }
2326    
2327     static void irqtime_account_idle_ticks(int ticks)
2328     {
2329     - int i;
2330     struct rq *rq = this_rq();
2331    
2332     - for (i = 0; i < ticks; i++)
2333     - irqtime_account_process_tick(current, 0, rq);
2334     + irqtime_account_process_tick(current, 0, rq, ticks);
2335     }
2336     #else /* CONFIG_IRQ_TIME_ACCOUNTING */
2337     static inline void irqtime_account_idle_ticks(int ticks) {}
2338     static inline void irqtime_account_process_tick(struct task_struct *p, int user_tick,
2339     - struct rq *rq) {}
2340     + struct rq *rq, int nr_ticks) {}
2341     #endif /* CONFIG_IRQ_TIME_ACCOUNTING */
2342    
2343     /*
2344     @@ -458,7 +458,7 @@ void account_process_tick(struct task_struct *p, int user_tick)
2345     return;
2346    
2347     if (sched_clock_irqtime) {
2348     - irqtime_account_process_tick(p, user_tick, rq);
2349     + irqtime_account_process_tick(p, user_tick, rq, 1);
2350     return;
2351     }
2352    
2353     diff --git a/kernel/sched/deadline.c b/kernel/sched/deadline.c
2354     index 6e79b3faa4cd..ce852643854b 100644
2355     --- a/kernel/sched/deadline.c
2356     +++ b/kernel/sched/deadline.c
2357     @@ -490,9 +490,17 @@ static enum hrtimer_restart dl_task_timer(struct hrtimer *timer)
2358     struct sched_dl_entity,
2359     dl_timer);
2360     struct task_struct *p = dl_task_of(dl_se);
2361     - struct rq *rq = task_rq(p);
2362     + struct rq *rq;
2363     +again:
2364     + rq = task_rq(p);
2365     raw_spin_lock(&rq->lock);
2366    
2367     + if (rq != task_rq(p)) {
2368     + /* Task was moved, retrying. */
2369     + raw_spin_unlock(&rq->lock);
2370     + goto again;
2371     + }
2372     +
2373     /*
2374     * We need to take care of a possible races here. In fact, the
2375     * task might have changed its scheduling policy to something
2376     diff --git a/mm/memory-failure.c b/mm/memory-failure.c
2377     index 66586bb44c62..e346fa9d30ea 100644
2378     --- a/mm/memory-failure.c
2379     +++ b/mm/memory-failure.c
2380     @@ -1157,6 +1157,8 @@ int memory_failure(unsigned long pfn, int trapno, int flags)
2381     */
2382     if (!PageHWPoison(p)) {
2383     printk(KERN_ERR "MCE %#lx: just unpoisoned\n", pfn);
2384     + atomic_long_sub(nr_pages, &num_poisoned_pages);
2385     + put_page(hpage);
2386     res = 0;
2387     goto out;
2388     }
2389     diff --git a/mm/mempolicy.c b/mm/mempolicy.c
2390     index ae3c8f3595d4..56224d998c39 100644
2391     --- a/mm/mempolicy.c
2392     +++ b/mm/mempolicy.c
2393     @@ -526,9 +526,13 @@ static void queue_pages_hugetlb_pmd_range(struct vm_area_struct *vma,
2394     int nid;
2395     struct page *page;
2396     spinlock_t *ptl;
2397     + pte_t entry;
2398    
2399     ptl = huge_pte_lock(hstate_vma(vma), vma->vm_mm, (pte_t *)pmd);
2400     - page = pte_page(huge_ptep_get((pte_t *)pmd));
2401     + entry = huge_ptep_get((pte_t *)pmd);
2402     + if (!pte_present(entry))
2403     + goto unlock;
2404     + page = pte_page(entry);
2405     nid = page_to_nid(page);
2406     if (node_isset(nid, *nodes) == !!(flags & MPOL_MF_INVERT))
2407     goto unlock;
2408     diff --git a/mm/rmap.c b/mm/rmap.c
2409     index d3cbac508c2f..5d91bb71e751 100644
2410     --- a/mm/rmap.c
2411     +++ b/mm/rmap.c
2412     @@ -1554,10 +1554,9 @@ void __put_anon_vma(struct anon_vma *anon_vma)
2413     {
2414     struct anon_vma *root = anon_vma->root;
2415    
2416     + anon_vma_free(anon_vma);
2417     if (root != anon_vma && atomic_dec_and_test(&root->refcount))
2418     anon_vma_free(root);
2419     -
2420     - anon_vma_free(anon_vma);
2421     }
2422    
2423     static struct anon_vma *rmap_walk_anon_lock(struct page *page,
2424     diff --git a/mm/vmscan.c b/mm/vmscan.c
2425     index 30a4b096ff6e..a9c74b409681 100644
2426     --- a/mm/vmscan.c
2427     +++ b/mm/vmscan.c
2428     @@ -1916,24 +1916,6 @@ static void get_scan_count(struct lruvec *lruvec, struct scan_control *sc,
2429     }
2430    
2431     /*
2432     - * Prevent the reclaimer from falling into the cache trap: as
2433     - * cache pages start out inactive, every cache fault will tip
2434     - * the scan balance towards the file LRU. And as the file LRU
2435     - * shrinks, so does the window for rotation from references.
2436     - * This means we have a runaway feedback loop where a tiny
2437     - * thrashing file LRU becomes infinitely more attractive than
2438     - * anon pages. Try to detect this based on file LRU size.
2439     - */
2440     - if (global_reclaim(sc)) {
2441     - unsigned long free = zone_page_state(zone, NR_FREE_PAGES);
2442     -
2443     - if (unlikely(file + free <= high_wmark_pages(zone))) {
2444     - scan_balance = SCAN_ANON;
2445     - goto out;
2446     - }
2447     - }
2448     -
2449     - /*
2450     * There is enough inactive page cache, do not reclaim
2451     * anything from the anonymous working set right now.
2452     */
2453     diff --git a/net/bluetooth/l2cap_core.c b/net/bluetooth/l2cap_core.c
2454     index b0ad2c752d73..6afa3b45f25a 100644
2455     --- a/net/bluetooth/l2cap_core.c
2456     +++ b/net/bluetooth/l2cap_core.c
2457     @@ -7471,9 +7471,9 @@ int __init l2cap_init(void)
2458     l2cap_debugfs = debugfs_create_file("l2cap", 0444, bt_debugfs,
2459     NULL, &l2cap_debugfs_fops);
2460    
2461     - debugfs_create_u16("l2cap_le_max_credits", 0466, bt_debugfs,
2462     + debugfs_create_u16("l2cap_le_max_credits", 0644, bt_debugfs,
2463     &le_max_credits);
2464     - debugfs_create_u16("l2cap_le_default_mps", 0466, bt_debugfs,
2465     + debugfs_create_u16("l2cap_le_default_mps", 0644, bt_debugfs,
2466     &le_default_mps);
2467    
2468     bt_6lowpan_init();
2469     diff --git a/net/ipv6/netfilter.c b/net/ipv6/netfilter.c
2470     index 95f3f1da0d7f..d38e6a8d8b9f 100644
2471     --- a/net/ipv6/netfilter.c
2472     +++ b/net/ipv6/netfilter.c
2473     @@ -30,13 +30,15 @@ int ip6_route_me_harder(struct sk_buff *skb)
2474     .daddr = iph->daddr,
2475     .saddr = iph->saddr,
2476     };
2477     + int err;
2478    
2479     dst = ip6_route_output(net, skb->sk, &fl6);
2480     - if (dst->error) {
2481     + err = dst->error;
2482     + if (err) {
2483     IP6_INC_STATS(net, ip6_dst_idev(dst), IPSTATS_MIB_OUTNOROUTES);
2484     LIMIT_NETDEBUG(KERN_DEBUG "ip6_route_me_harder: No more route.\n");
2485     dst_release(dst);
2486     - return dst->error;
2487     + return err;
2488     }
2489    
2490     /* Drop old route. */
2491     diff --git a/net/netfilter/nfnetlink.c b/net/netfilter/nfnetlink.c
2492     index 046aa13b4fea..880418d3ee50 100644
2493     --- a/net/netfilter/nfnetlink.c
2494     +++ b/net/netfilter/nfnetlink.c
2495     @@ -248,15 +248,15 @@ replay:
2496     #endif
2497     {
2498     nfnl_unlock(subsys_id);
2499     - kfree_skb(nskb);
2500     - return netlink_ack(skb, nlh, -EOPNOTSUPP);
2501     + netlink_ack(skb, nlh, -EOPNOTSUPP);
2502     + return kfree_skb(nskb);
2503     }
2504     }
2505    
2506     if (!ss->commit || !ss->abort) {
2507     nfnl_unlock(subsys_id);
2508     - kfree_skb(nskb);
2509     - return netlink_ack(skb, nlh, -EOPNOTSUPP);
2510     + netlink_ack(skb, nlh, -EOPNOTSUPP);
2511     + return kfree_skb(skb);
2512     }
2513    
2514     while (skb->len >= nlmsg_total_size(0)) {
2515     diff --git a/sound/pci/hda/patch_analog.c b/sound/pci/hda/patch_analog.c
2516     index 8ed0bcc01386..eaf64ea2e1c1 100644
2517     --- a/sound/pci/hda/patch_analog.c
2518     +++ b/sound/pci/hda/patch_analog.c
2519     @@ -333,6 +333,7 @@ static const struct hda_fixup ad1986a_fixups[] = {
2520    
2521     static const struct snd_pci_quirk ad1986a_fixup_tbl[] = {
2522     SND_PCI_QUIRK(0x103c, 0x30af, "HP B2800", AD1986A_FIXUP_LAPTOP_IMIC),
2523     + SND_PCI_QUIRK(0x1043, 0x1447, "ASUS A8JN", AD1986A_FIXUP_EAPD),
2524     SND_PCI_QUIRK_MASK(0x1043, 0xff00, 0x8100, "ASUS P5", AD1986A_FIXUP_3STACK),
2525     SND_PCI_QUIRK_MASK(0x1043, 0xff00, 0x8200, "ASUS M2", AD1986A_FIXUP_3STACK),
2526     SND_PCI_QUIRK(0x10de, 0xcb84, "ASUS A8N-VM", AD1986A_FIXUP_3STACK),
2527     diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
2528     index 41106813a9aa..0b6ee2b37bdb 100644
2529     --- a/sound/pci/hda/patch_realtek.c
2530     +++ b/sound/pci/hda/patch_realtek.c
2531     @@ -1646,12 +1646,10 @@ static const struct hda_fixup alc260_fixups[] = {
2532     [ALC260_FIXUP_COEF] = {
2533     .type = HDA_FIXUP_VERBS,
2534     .v.verbs = (const struct hda_verb[]) {
2535     - { 0x20, AC_VERB_SET_COEF_INDEX, 0x07 },
2536     - { 0x20, AC_VERB_SET_PROC_COEF, 0x3040 },
2537     + { 0x1a, AC_VERB_SET_COEF_INDEX, 0x07 },
2538     + { 0x1a, AC_VERB_SET_PROC_COEF, 0x3040 },
2539     { }
2540     },
2541     - .chained = true,
2542     - .chain_id = ALC260_FIXUP_HP_PIN_0F,
2543     },
2544     [ALC260_FIXUP_GPIO1] = {
2545     .type = HDA_FIXUP_VERBS,
2546     @@ -1666,8 +1664,8 @@ static const struct hda_fixup alc260_fixups[] = {
2547     [ALC260_FIXUP_REPLACER] = {
2548     .type = HDA_FIXUP_VERBS,
2549     .v.verbs = (const struct hda_verb[]) {
2550     - { 0x20, AC_VERB_SET_COEF_INDEX, 0x07 },
2551     - { 0x20, AC_VERB_SET_PROC_COEF, 0x3050 },
2552     + { 0x1a, AC_VERB_SET_COEF_INDEX, 0x07 },
2553     + { 0x1a, AC_VERB_SET_PROC_COEF, 0x3050 },
2554     { }
2555     },
2556     .chained = true,