Annotation of /trunk/kernel-magellan/patches-4.0/0106-4.0.7-all-fixes.patch
Parent Directory | Revision Log
Revision 2603 -
(hide annotations)
(download)
Tue Jun 30 07:51:58 2015 UTC (9 years, 2 months ago) by niro
File size: 23824 byte(s)
Tue Jun 30 07:51:58 2015 UTC (9 years, 2 months ago) by niro
File size: 23824 byte(s)
-linux-4.0.7
1 | niro | 2603 | diff --git a/Makefile b/Makefile |
2 | index af6da040b952..bd76a8e94395 100644 | ||
3 | --- a/Makefile | ||
4 | +++ b/Makefile | ||
5 | @@ -1,6 +1,6 @@ | ||
6 | VERSION = 4 | ||
7 | PATCHLEVEL = 0 | ||
8 | -SUBLEVEL = 6 | ||
9 | +SUBLEVEL = 7 | ||
10 | EXTRAVERSION = | ||
11 | NAME = Hurr durr I'ma sheep | ||
12 | |||
13 | diff --git a/arch/arm/mach-exynos/common.h b/arch/arm/mach-exynos/common.h | ||
14 | index f70eca7ee705..0ef8d4b47102 100644 | ||
15 | --- a/arch/arm/mach-exynos/common.h | ||
16 | +++ b/arch/arm/mach-exynos/common.h | ||
17 | @@ -153,6 +153,8 @@ extern void exynos_enter_aftr(void); | ||
18 | |||
19 | extern struct cpuidle_exynos_data cpuidle_coupled_exynos_data; | ||
20 | |||
21 | +extern void exynos_set_delayed_reset_assertion(bool enable); | ||
22 | + | ||
23 | extern void s5p_init_cpu(void __iomem *cpuid_addr); | ||
24 | extern unsigned int samsung_rev(void); | ||
25 | extern void __iomem *cpu_boot_reg_base(void); | ||
26 | diff --git a/arch/arm/mach-exynos/exynos.c b/arch/arm/mach-exynos/exynos.c | ||
27 | index 9e9dfdfad9d7..1081ff1f03c6 100644 | ||
28 | --- a/arch/arm/mach-exynos/exynos.c | ||
29 | +++ b/arch/arm/mach-exynos/exynos.c | ||
30 | @@ -166,6 +166,33 @@ static void __init exynos_init_io(void) | ||
31 | exynos_map_io(); | ||
32 | } | ||
33 | |||
34 | +/* | ||
35 | + * Set or clear the USE_DELAYED_RESET_ASSERTION option. Used by smp code | ||
36 | + * and suspend. | ||
37 | + * | ||
38 | + * This is necessary only on Exynos4 SoCs. When system is running | ||
39 | + * USE_DELAYED_RESET_ASSERTION should be set so the ARM CLK clock down | ||
40 | + * feature could properly detect global idle state when secondary CPU is | ||
41 | + * powered down. | ||
42 | + * | ||
43 | + * However this should not be set when such system is going into suspend. | ||
44 | + */ | ||
45 | +void exynos_set_delayed_reset_assertion(bool enable) | ||
46 | +{ | ||
47 | + if (soc_is_exynos4()) { | ||
48 | + unsigned int tmp, core_id; | ||
49 | + | ||
50 | + for (core_id = 0; core_id < num_possible_cpus(); core_id++) { | ||
51 | + tmp = pmu_raw_readl(EXYNOS_ARM_CORE_OPTION(core_id)); | ||
52 | + if (enable) | ||
53 | + tmp |= S5P_USE_DELAYED_RESET_ASSERTION; | ||
54 | + else | ||
55 | + tmp &= ~(S5P_USE_DELAYED_RESET_ASSERTION); | ||
56 | + pmu_raw_writel(tmp, EXYNOS_ARM_CORE_OPTION(core_id)); | ||
57 | + } | ||
58 | + } | ||
59 | +} | ||
60 | + | ||
61 | static const struct of_device_id exynos_dt_pmu_match[] = { | ||
62 | { .compatible = "samsung,exynos3250-pmu" }, | ||
63 | { .compatible = "samsung,exynos4210-pmu" }, | ||
64 | diff --git a/arch/arm/mach-exynos/platsmp.c b/arch/arm/mach-exynos/platsmp.c | ||
65 | index d2e9f12d12f1..d45e8cd23925 100644 | ||
66 | --- a/arch/arm/mach-exynos/platsmp.c | ||
67 | +++ b/arch/arm/mach-exynos/platsmp.c | ||
68 | @@ -34,30 +34,6 @@ | ||
69 | |||
70 | extern void exynos4_secondary_startup(void); | ||
71 | |||
72 | -/* | ||
73 | - * Set or clear the USE_DELAYED_RESET_ASSERTION option, set on Exynos4 SoCs | ||
74 | - * during hot-(un)plugging CPUx. | ||
75 | - * | ||
76 | - * The feature can be cleared safely during first boot of secondary CPU. | ||
77 | - * | ||
78 | - * Exynos4 SoCs require setting USE_DELAYED_RESET_ASSERTION during powering | ||
79 | - * down a CPU so the CPU idle clock down feature could properly detect global | ||
80 | - * idle state when CPUx is off. | ||
81 | - */ | ||
82 | -static void exynos_set_delayed_reset_assertion(u32 core_id, bool enable) | ||
83 | -{ | ||
84 | - if (soc_is_exynos4()) { | ||
85 | - unsigned int tmp; | ||
86 | - | ||
87 | - tmp = pmu_raw_readl(EXYNOS_ARM_CORE_OPTION(core_id)); | ||
88 | - if (enable) | ||
89 | - tmp |= S5P_USE_DELAYED_RESET_ASSERTION; | ||
90 | - else | ||
91 | - tmp &= ~(S5P_USE_DELAYED_RESET_ASSERTION); | ||
92 | - pmu_raw_writel(tmp, EXYNOS_ARM_CORE_OPTION(core_id)); | ||
93 | - } | ||
94 | -} | ||
95 | - | ||
96 | #ifdef CONFIG_HOTPLUG_CPU | ||
97 | static inline void cpu_leave_lowpower(u32 core_id) | ||
98 | { | ||
99 | @@ -73,8 +49,6 @@ static inline void cpu_leave_lowpower(u32 core_id) | ||
100 | : "=&r" (v) | ||
101 | : "Ir" (CR_C), "Ir" (0x40) | ||
102 | : "cc"); | ||
103 | - | ||
104 | - exynos_set_delayed_reset_assertion(core_id, false); | ||
105 | } | ||
106 | |||
107 | static inline void platform_do_lowpower(unsigned int cpu, int *spurious) | ||
108 | @@ -87,14 +61,6 @@ static inline void platform_do_lowpower(unsigned int cpu, int *spurious) | ||
109 | /* Turn the CPU off on next WFI instruction. */ | ||
110 | exynos_cpu_power_down(core_id); | ||
111 | |||
112 | - /* | ||
113 | - * Exynos4 SoCs require setting | ||
114 | - * USE_DELAYED_RESET_ASSERTION so the CPU idle | ||
115 | - * clock down feature could properly detect | ||
116 | - * global idle state when CPUx is off. | ||
117 | - */ | ||
118 | - exynos_set_delayed_reset_assertion(core_id, true); | ||
119 | - | ||
120 | wfi(); | ||
121 | |||
122 | if (pen_release == core_id) { | ||
123 | @@ -354,9 +320,6 @@ static int exynos_boot_secondary(unsigned int cpu, struct task_struct *idle) | ||
124 | udelay(10); | ||
125 | } | ||
126 | |||
127 | - /* No harm if this is called during first boot of secondary CPU */ | ||
128 | - exynos_set_delayed_reset_assertion(core_id, false); | ||
129 | - | ||
130 | /* | ||
131 | * now the secondary core is starting up let it run its | ||
132 | * calibrations, then wait for it to finish | ||
133 | @@ -403,6 +366,8 @@ static void __init exynos_smp_prepare_cpus(unsigned int max_cpus) | ||
134 | |||
135 | exynos_sysram_init(); | ||
136 | |||
137 | + exynos_set_delayed_reset_assertion(true); | ||
138 | + | ||
139 | if (read_cpuid_part() == ARM_CPU_PART_CORTEX_A9) | ||
140 | scu_enable(scu_base_addr()); | ||
141 | |||
142 | diff --git a/arch/arm/mach-exynos/suspend.c b/arch/arm/mach-exynos/suspend.c | ||
143 | index 318d127df147..582ef2df960d 100644 | ||
144 | --- a/arch/arm/mach-exynos/suspend.c | ||
145 | +++ b/arch/arm/mach-exynos/suspend.c | ||
146 | @@ -235,6 +235,8 @@ static void exynos_pm_enter_sleep_mode(void) | ||
147 | |||
148 | static void exynos_pm_prepare(void) | ||
149 | { | ||
150 | + exynos_set_delayed_reset_assertion(false); | ||
151 | + | ||
152 | /* Set wake-up mask registers */ | ||
153 | exynos_pm_set_wakeup_mask(); | ||
154 | |||
155 | @@ -383,6 +385,7 @@ early_wakeup: | ||
156 | |||
157 | /* Clear SLEEP mode set in INFORM1 */ | ||
158 | pmu_raw_writel(0x0, S5P_INFORM1); | ||
159 | + exynos_set_delayed_reset_assertion(true); | ||
160 | } | ||
161 | |||
162 | static void exynos3250_pm_resume(void) | ||
163 | diff --git a/arch/powerpc/kernel/idle_power7.S b/arch/powerpc/kernel/idle_power7.S | ||
164 | index 05adc8bbdef8..401d8d0085aa 100644 | ||
165 | --- a/arch/powerpc/kernel/idle_power7.S | ||
166 | +++ b/arch/powerpc/kernel/idle_power7.S | ||
167 | @@ -500,9 +500,11 @@ BEGIN_FTR_SECTION | ||
168 | CHECK_HMI_INTERRUPT | ||
169 | END_FTR_SECTION_IFSET(CPU_FTR_HVMODE) | ||
170 | ld r1,PACAR1(r13) | ||
171 | + ld r6,_CCR(r1) | ||
172 | ld r4,_MSR(r1) | ||
173 | ld r5,_NIP(r1) | ||
174 | addi r1,r1,INT_FRAME_SIZE | ||
175 | + mtcr r6 | ||
176 | mtspr SPRN_SRR1,r4 | ||
177 | mtspr SPRN_SRR0,r5 | ||
178 | rfid | ||
179 | diff --git a/arch/x86/kernel/kprobes/core.c b/arch/x86/kernel/kprobes/core.c | ||
180 | index 4e3d5a9621fe..03189d86357d 100644 | ||
181 | --- a/arch/x86/kernel/kprobes/core.c | ||
182 | +++ b/arch/x86/kernel/kprobes/core.c | ||
183 | @@ -354,6 +354,7 @@ int __copy_instruction(u8 *dest, u8 *src) | ||
184 | { | ||
185 | struct insn insn; | ||
186 | kprobe_opcode_t buf[MAX_INSN_SIZE]; | ||
187 | + int length; | ||
188 | unsigned long recovered_insn = | ||
189 | recover_probed_instruction(buf, (unsigned long)src); | ||
190 | |||
191 | @@ -361,16 +362,18 @@ int __copy_instruction(u8 *dest, u8 *src) | ||
192 | return 0; | ||
193 | kernel_insn_init(&insn, (void *)recovered_insn, MAX_INSN_SIZE); | ||
194 | insn_get_length(&insn); | ||
195 | + length = insn.length; | ||
196 | + | ||
197 | /* Another subsystem puts a breakpoint, failed to recover */ | ||
198 | if (insn.opcode.bytes[0] == BREAKPOINT_INSTRUCTION) | ||
199 | return 0; | ||
200 | - memcpy(dest, insn.kaddr, insn.length); | ||
201 | + memcpy(dest, insn.kaddr, length); | ||
202 | |||
203 | #ifdef CONFIG_X86_64 | ||
204 | if (insn_rip_relative(&insn)) { | ||
205 | s64 newdisp; | ||
206 | u8 *disp; | ||
207 | - kernel_insn_init(&insn, dest, insn.length); | ||
208 | + kernel_insn_init(&insn, dest, length); | ||
209 | insn_get_displacement(&insn); | ||
210 | /* | ||
211 | * The copied instruction uses the %rip-relative addressing | ||
212 | @@ -394,7 +397,7 @@ int __copy_instruction(u8 *dest, u8 *src) | ||
213 | *(s32 *) disp = (s32) newdisp; | ||
214 | } | ||
215 | #endif | ||
216 | - return insn.length; | ||
217 | + return length; | ||
218 | } | ||
219 | |||
220 | static int arch_copy_kprobe(struct kprobe *p) | ||
221 | diff --git a/arch/x86/kvm/lapic.c b/arch/x86/kvm/lapic.c | ||
222 | index 4ee827d7bf36..3cb2b58fa26b 100644 | ||
223 | --- a/arch/x86/kvm/lapic.c | ||
224 | +++ b/arch/x86/kvm/lapic.c | ||
225 | @@ -1064,6 +1064,17 @@ static void update_divide_count(struct kvm_lapic *apic) | ||
226 | apic->divide_count); | ||
227 | } | ||
228 | |||
229 | +static void apic_update_lvtt(struct kvm_lapic *apic) | ||
230 | +{ | ||
231 | + u32 timer_mode = kvm_apic_get_reg(apic, APIC_LVTT) & | ||
232 | + apic->lapic_timer.timer_mode_mask; | ||
233 | + | ||
234 | + if (apic->lapic_timer.timer_mode != timer_mode) { | ||
235 | + apic->lapic_timer.timer_mode = timer_mode; | ||
236 | + hrtimer_cancel(&apic->lapic_timer.timer); | ||
237 | + } | ||
238 | +} | ||
239 | + | ||
240 | static void apic_timer_expired(struct kvm_lapic *apic) | ||
241 | { | ||
242 | struct kvm_vcpu *vcpu = apic->vcpu; | ||
243 | @@ -1272,6 +1283,7 @@ static int apic_reg_write(struct kvm_lapic *apic, u32 reg, u32 val) | ||
244 | apic_set_reg(apic, APIC_LVTT + 0x10 * i, | ||
245 | lvt_val | APIC_LVT_MASKED); | ||
246 | } | ||
247 | + apic_update_lvtt(apic); | ||
248 | atomic_set(&apic->lapic_timer.pending, 0); | ||
249 | |||
250 | } | ||
251 | @@ -1304,20 +1316,13 @@ static int apic_reg_write(struct kvm_lapic *apic, u32 reg, u32 val) | ||
252 | |||
253 | break; | ||
254 | |||
255 | - case APIC_LVTT: { | ||
256 | - u32 timer_mode = val & apic->lapic_timer.timer_mode_mask; | ||
257 | - | ||
258 | - if (apic->lapic_timer.timer_mode != timer_mode) { | ||
259 | - apic->lapic_timer.timer_mode = timer_mode; | ||
260 | - hrtimer_cancel(&apic->lapic_timer.timer); | ||
261 | - } | ||
262 | - | ||
263 | + case APIC_LVTT: | ||
264 | if (!kvm_apic_sw_enabled(apic)) | ||
265 | val |= APIC_LVT_MASKED; | ||
266 | val &= (apic_lvt_mask[0] | apic->lapic_timer.timer_mode_mask); | ||
267 | apic_set_reg(apic, APIC_LVTT, val); | ||
268 | + apic_update_lvtt(apic); | ||
269 | break; | ||
270 | - } | ||
271 | |||
272 | case APIC_TMICT: | ||
273 | if (apic_lvtt_tscdeadline(apic)) | ||
274 | @@ -1552,7 +1557,7 @@ void kvm_lapic_reset(struct kvm_vcpu *vcpu) | ||
275 | |||
276 | for (i = 0; i < APIC_LVT_NUM; i++) | ||
277 | apic_set_reg(apic, APIC_LVTT + 0x10 * i, APIC_LVT_MASKED); | ||
278 | - apic->lapic_timer.timer_mode = 0; | ||
279 | + apic_update_lvtt(apic); | ||
280 | apic_set_reg(apic, APIC_LVT0, | ||
281 | SET_APIC_DELIVERY_MODE(0, APIC_MODE_EXTINT)); | ||
282 | |||
283 | @@ -1778,6 +1783,7 @@ void kvm_apic_post_state_restore(struct kvm_vcpu *vcpu, | ||
284 | |||
285 | apic_update_ppr(apic); | ||
286 | hrtimer_cancel(&apic->lapic_timer.timer); | ||
287 | + apic_update_lvtt(apic); | ||
288 | update_divide_count(apic); | ||
289 | start_apic_timer(apic); | ||
290 | apic->irr_pending = true; | ||
291 | diff --git a/drivers/bluetooth/ath3k.c b/drivers/bluetooth/ath3k.c | ||
292 | index 288547a3c566..f26ebc5e0be6 100644 | ||
293 | --- a/drivers/bluetooth/ath3k.c | ||
294 | +++ b/drivers/bluetooth/ath3k.c | ||
295 | @@ -80,6 +80,7 @@ static const struct usb_device_id ath3k_table[] = { | ||
296 | { USB_DEVICE(0x0489, 0xe057) }, | ||
297 | { USB_DEVICE(0x0489, 0xe056) }, | ||
298 | { USB_DEVICE(0x0489, 0xe05f) }, | ||
299 | + { USB_DEVICE(0x0489, 0xe076) }, | ||
300 | { USB_DEVICE(0x0489, 0xe078) }, | ||
301 | { USB_DEVICE(0x04c5, 0x1330) }, | ||
302 | { USB_DEVICE(0x04CA, 0x3004) }, | ||
303 | @@ -111,6 +112,7 @@ static const struct usb_device_id ath3k_table[] = { | ||
304 | { USB_DEVICE(0x13d3, 0x3408) }, | ||
305 | { USB_DEVICE(0x13d3, 0x3423) }, | ||
306 | { USB_DEVICE(0x13d3, 0x3432) }, | ||
307 | + { USB_DEVICE(0x13d3, 0x3474) }, | ||
308 | |||
309 | /* Atheros AR5BBU12 with sflash firmware */ | ||
310 | { USB_DEVICE(0x0489, 0xE02C) }, | ||
311 | @@ -135,6 +137,7 @@ static const struct usb_device_id ath3k_blist_tbl[] = { | ||
312 | { USB_DEVICE(0x0489, 0xe056), .driver_info = BTUSB_ATH3012 }, | ||
313 | { USB_DEVICE(0x0489, 0xe057), .driver_info = BTUSB_ATH3012 }, | ||
314 | { USB_DEVICE(0x0489, 0xe05f), .driver_info = BTUSB_ATH3012 }, | ||
315 | + { USB_DEVICE(0x0489, 0xe076), .driver_info = BTUSB_ATH3012 }, | ||
316 | { USB_DEVICE(0x0489, 0xe078), .driver_info = BTUSB_ATH3012 }, | ||
317 | { USB_DEVICE(0x04c5, 0x1330), .driver_info = BTUSB_ATH3012 }, | ||
318 | { USB_DEVICE(0x04ca, 0x3004), .driver_info = BTUSB_ATH3012 }, | ||
319 | @@ -166,6 +169,7 @@ static const struct usb_device_id ath3k_blist_tbl[] = { | ||
320 | { USB_DEVICE(0x13d3, 0x3408), .driver_info = BTUSB_ATH3012 }, | ||
321 | { USB_DEVICE(0x13d3, 0x3423), .driver_info = BTUSB_ATH3012 }, | ||
322 | { USB_DEVICE(0x13d3, 0x3432), .driver_info = BTUSB_ATH3012 }, | ||
323 | + { USB_DEVICE(0x13d3, 0x3474), .driver_info = BTUSB_ATH3012 }, | ||
324 | |||
325 | /* Atheros AR5BBU22 with sflash firmware */ | ||
326 | { USB_DEVICE(0x0489, 0xE036), .driver_info = BTUSB_ATH3012 }, | ||
327 | diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c | ||
328 | index 2c527da668ae..4fc415703ffc 100644 | ||
329 | --- a/drivers/bluetooth/btusb.c | ||
330 | +++ b/drivers/bluetooth/btusb.c | ||
331 | @@ -174,6 +174,7 @@ static const struct usb_device_id blacklist_table[] = { | ||
332 | { USB_DEVICE(0x0489, 0xe056), .driver_info = BTUSB_ATH3012 }, | ||
333 | { USB_DEVICE(0x0489, 0xe057), .driver_info = BTUSB_ATH3012 }, | ||
334 | { USB_DEVICE(0x0489, 0xe05f), .driver_info = BTUSB_ATH3012 }, | ||
335 | + { USB_DEVICE(0x0489, 0xe076), .driver_info = BTUSB_ATH3012 }, | ||
336 | { USB_DEVICE(0x0489, 0xe078), .driver_info = BTUSB_ATH3012 }, | ||
337 | { USB_DEVICE(0x04c5, 0x1330), .driver_info = BTUSB_ATH3012 }, | ||
338 | { USB_DEVICE(0x04ca, 0x3004), .driver_info = BTUSB_ATH3012 }, | ||
339 | @@ -205,6 +206,7 @@ static const struct usb_device_id blacklist_table[] = { | ||
340 | { USB_DEVICE(0x13d3, 0x3408), .driver_info = BTUSB_ATH3012 }, | ||
341 | { USB_DEVICE(0x13d3, 0x3423), .driver_info = BTUSB_ATH3012 }, | ||
342 | { USB_DEVICE(0x13d3, 0x3432), .driver_info = BTUSB_ATH3012 }, | ||
343 | + { USB_DEVICE(0x13d3, 0x3474), .driver_info = BTUSB_ATH3012 }, | ||
344 | |||
345 | /* Atheros AR5BBU12 with sflash firmware */ | ||
346 | { USB_DEVICE(0x0489, 0xe02c), .driver_info = BTUSB_IGNORE }, | ||
347 | diff --git a/drivers/clk/at91/clk-pll.c b/drivers/clk/at91/clk-pll.c | ||
348 | index 6ec79dbc0840..cbbe40377ad6 100644 | ||
349 | --- a/drivers/clk/at91/clk-pll.c | ||
350 | +++ b/drivers/clk/at91/clk-pll.c | ||
351 | @@ -173,8 +173,7 @@ static long clk_pll_get_best_div_mul(struct clk_pll *pll, unsigned long rate, | ||
352 | int i = 0; | ||
353 | |||
354 | /* Check if parent_rate is a valid input rate */ | ||
355 | - if (parent_rate < characteristics->input.min || | ||
356 | - parent_rate > characteristics->input.max) | ||
357 | + if (parent_rate < characteristics->input.min) | ||
358 | return -ERANGE; | ||
359 | |||
360 | /* | ||
361 | @@ -187,6 +186,15 @@ static long clk_pll_get_best_div_mul(struct clk_pll *pll, unsigned long rate, | ||
362 | if (!mindiv) | ||
363 | mindiv = 1; | ||
364 | |||
365 | + if (parent_rate > characteristics->input.max) { | ||
366 | + tmpdiv = DIV_ROUND_UP(parent_rate, characteristics->input.max); | ||
367 | + if (tmpdiv > PLL_DIV_MAX) | ||
368 | + return -ERANGE; | ||
369 | + | ||
370 | + if (tmpdiv > mindiv) | ||
371 | + mindiv = tmpdiv; | ||
372 | + } | ||
373 | + | ||
374 | /* | ||
375 | * Calculate the maximum divider which is limited by PLL register | ||
376 | * layout (limited by the MUL or DIV field size). | ||
377 | diff --git a/drivers/clk/at91/pmc.h b/drivers/clk/at91/pmc.h | ||
378 | index 69abb08cf146..eb8e5dc9076d 100644 | ||
379 | --- a/drivers/clk/at91/pmc.h | ||
380 | +++ b/drivers/clk/at91/pmc.h | ||
381 | @@ -121,7 +121,7 @@ extern void __init of_at91sam9x5_clk_smd_setup(struct device_node *np, | ||
382 | struct at91_pmc *pmc); | ||
383 | #endif | ||
384 | |||
385 | -#if defined(CONFIG_HAVE_AT91_SMD) | ||
386 | +#if defined(CONFIG_HAVE_AT91_H32MX) | ||
387 | extern void __init of_sama5d4_clk_h32mx_setup(struct device_node *np, | ||
388 | struct at91_pmc *pmc); | ||
389 | #endif | ||
390 | diff --git a/drivers/crypto/caam/caamhash.c b/drivers/crypto/caam/caamhash.c | ||
391 | index f347ab7eea95..08b0da23c4ab 100644 | ||
392 | --- a/drivers/crypto/caam/caamhash.c | ||
393 | +++ b/drivers/crypto/caam/caamhash.c | ||
394 | @@ -1543,6 +1543,8 @@ static int ahash_init(struct ahash_request *req) | ||
395 | |||
396 | state->current_buf = 0; | ||
397 | state->buf_dma = 0; | ||
398 | + state->buflen_0 = 0; | ||
399 | + state->buflen_1 = 0; | ||
400 | |||
401 | return 0; | ||
402 | } | ||
403 | diff --git a/drivers/crypto/caam/caamrng.c b/drivers/crypto/caam/caamrng.c | ||
404 | index ae31e555793c..a48dc251b14f 100644 | ||
405 | --- a/drivers/crypto/caam/caamrng.c | ||
406 | +++ b/drivers/crypto/caam/caamrng.c | ||
407 | @@ -56,7 +56,7 @@ | ||
408 | |||
409 | /* Buffer, its dma address and lock */ | ||
410 | struct buf_data { | ||
411 | - u8 buf[RN_BUF_SIZE]; | ||
412 | + u8 buf[RN_BUF_SIZE] ____cacheline_aligned; | ||
413 | dma_addr_t addr; | ||
414 | struct completion filled; | ||
415 | u32 hw_desc[DESC_JOB_O_LEN]; | ||
416 | diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c | ||
417 | index ec4d932f8be4..169123a6ad0e 100644 | ||
418 | --- a/drivers/gpu/drm/i915/i915_drv.c | ||
419 | +++ b/drivers/gpu/drm/i915/i915_drv.c | ||
420 | @@ -693,6 +693,16 @@ static int i915_drm_resume(struct drm_device *dev) | ||
421 | intel_init_pch_refclk(dev); | ||
422 | drm_mode_config_reset(dev); | ||
423 | |||
424 | + /* | ||
425 | + * Interrupts have to be enabled before any batches are run. | ||
426 | + * If not the GPU will hang. i915_gem_init_hw() will initiate | ||
427 | + * batches to update/restore the context. | ||
428 | + * | ||
429 | + * Modeset enabling in intel_modeset_init_hw() also needs | ||
430 | + * working interrupts. | ||
431 | + */ | ||
432 | + intel_runtime_pm_enable_interrupts(dev_priv); | ||
433 | + | ||
434 | mutex_lock(&dev->struct_mutex); | ||
435 | if (i915_gem_init_hw(dev)) { | ||
436 | DRM_ERROR("failed to re-initialize GPU, declaring wedged!\n"); | ||
437 | @@ -700,9 +710,6 @@ static int i915_drm_resume(struct drm_device *dev) | ||
438 | } | ||
439 | mutex_unlock(&dev->struct_mutex); | ||
440 | |||
441 | - /* We need working interrupts for modeset enabling ... */ | ||
442 | - intel_runtime_pm_enable_interrupts(dev_priv); | ||
443 | - | ||
444 | intel_modeset_init_hw(dev); | ||
445 | |||
446 | spin_lock_irq(&dev_priv->irq_lock); | ||
447 | diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c | ||
448 | index 7a628e4cb27a..9536ec390614 100644 | ||
449 | --- a/drivers/gpu/drm/i915/i915_gem.c | ||
450 | +++ b/drivers/gpu/drm/i915/i915_gem.c | ||
451 | @@ -2732,6 +2732,9 @@ void i915_gem_reset(struct drm_device *dev) | ||
452 | void | ||
453 | i915_gem_retire_requests_ring(struct intel_engine_cs *ring) | ||
454 | { | ||
455 | + if (list_empty(&ring->request_list)) | ||
456 | + return; | ||
457 | + | ||
458 | WARN_ON(i915_verify_lists(ring->dev)); | ||
459 | |||
460 | /* Retire requests first as we use it above for the early return. | ||
461 | @@ -3088,8 +3091,8 @@ int i915_vma_unbind(struct i915_vma *vma) | ||
462 | } else if (vma->ggtt_view.pages) { | ||
463 | sg_free_table(vma->ggtt_view.pages); | ||
464 | kfree(vma->ggtt_view.pages); | ||
465 | - vma->ggtt_view.pages = NULL; | ||
466 | } | ||
467 | + vma->ggtt_view.pages = NULL; | ||
468 | } | ||
469 | |||
470 | drm_mm_remove_node(&vma->node); | ||
471 | diff --git a/drivers/gpu/drm/mgag200/mgag200_mode.c b/drivers/gpu/drm/mgag200/mgag200_mode.c | ||
472 | index 9872ba9abf1a..2ffeda3589c2 100644 | ||
473 | --- a/drivers/gpu/drm/mgag200/mgag200_mode.c | ||
474 | +++ b/drivers/gpu/drm/mgag200/mgag200_mode.c | ||
475 | @@ -1526,6 +1526,11 @@ static int mga_vga_mode_valid(struct drm_connector *connector, | ||
476 | return MODE_BANDWIDTH; | ||
477 | } | ||
478 | |||
479 | + if ((mode->hdisplay % 8) != 0 || (mode->hsync_start % 8) != 0 || | ||
480 | + (mode->hsync_end % 8) != 0 || (mode->htotal % 8) != 0) { | ||
481 | + return MODE_H_ILLEGAL; | ||
482 | + } | ||
483 | + | ||
484 | if (mode->crtc_hdisplay > 2048 || mode->crtc_hsync_start > 4096 || | ||
485 | mode->crtc_hsync_end > 4096 || mode->crtc_htotal > 4096 || | ||
486 | mode->crtc_vdisplay > 2048 || mode->crtc_vsync_start > 4096 || | ||
487 | diff --git a/drivers/gpu/drm/radeon/radeon_kms.c b/drivers/gpu/drm/radeon/radeon_kms.c | ||
488 | index 686411e4e4f6..b82f2dd1fc32 100644 | ||
489 | --- a/drivers/gpu/drm/radeon/radeon_kms.c | ||
490 | +++ b/drivers/gpu/drm/radeon/radeon_kms.c | ||
491 | @@ -547,6 +547,9 @@ static int radeon_info_ioctl(struct drm_device *dev, void *data, struct drm_file | ||
492 | else | ||
493 | *value = 1; | ||
494 | break; | ||
495 | + case RADEON_INFO_VA_UNMAP_WORKING: | ||
496 | + *value = true; | ||
497 | + break; | ||
498 | default: | ||
499 | DRM_DEBUG_KMS("Invalid request %d\n", info->request); | ||
500 | return -EINVAL; | ||
501 | diff --git a/drivers/infiniband/ulp/isert/ib_isert.c b/drivers/infiniband/ulp/isert/ib_isert.c | ||
502 | index 147029adb885..ac72ece70160 100644 | ||
503 | --- a/drivers/infiniband/ulp/isert/ib_isert.c | ||
504 | +++ b/drivers/infiniband/ulp/isert/ib_isert.c | ||
505 | @@ -2316,7 +2316,6 @@ isert_build_rdma_wr(struct isert_conn *isert_conn, struct isert_cmd *isert_cmd, | ||
506 | page_off = offset % PAGE_SIZE; | ||
507 | |||
508 | send_wr->sg_list = ib_sge; | ||
509 | - send_wr->num_sge = sg_nents; | ||
510 | send_wr->wr_id = (uintptr_t)&isert_cmd->tx_desc; | ||
511 | /* | ||
512 | * Perform mapping of TCM scatterlist memory ib_sge dma_addr. | ||
513 | @@ -2336,14 +2335,17 @@ isert_build_rdma_wr(struct isert_conn *isert_conn, struct isert_cmd *isert_cmd, | ||
514 | ib_sge->addr, ib_sge->length, ib_sge->lkey); | ||
515 | page_off = 0; | ||
516 | data_left -= ib_sge->length; | ||
517 | + if (!data_left) | ||
518 | + break; | ||
519 | ib_sge++; | ||
520 | isert_dbg("Incrementing ib_sge pointer to %p\n", ib_sge); | ||
521 | } | ||
522 | |||
523 | + send_wr->num_sge = ++i; | ||
524 | isert_dbg("Set outgoing sg_list: %p num_sg: %u from TCM SGLs\n", | ||
525 | send_wr->sg_list, send_wr->num_sge); | ||
526 | |||
527 | - return sg_nents; | ||
528 | + return send_wr->num_sge; | ||
529 | } | ||
530 | |||
531 | static int | ||
532 | @@ -3311,6 +3313,7 @@ static void isert_free_conn(struct iscsi_conn *conn) | ||
533 | { | ||
534 | struct isert_conn *isert_conn = conn->context; | ||
535 | |||
536 | + isert_wait4flush(isert_conn); | ||
537 | isert_put_conn(isert_conn); | ||
538 | } | ||
539 | |||
540 | diff --git a/drivers/md/dm.c b/drivers/md/dm.c | ||
541 | index 9b4e30a82e4a..beda011cb741 100644 | ||
542 | --- a/drivers/md/dm.c | ||
543 | +++ b/drivers/md/dm.c | ||
544 | @@ -1889,8 +1889,8 @@ static int map_request(struct dm_target *ti, struct request *rq, | ||
545 | dm_kill_unmapped_request(rq, r); | ||
546 | return r; | ||
547 | } | ||
548 | - if (IS_ERR(clone)) | ||
549 | - return DM_MAPIO_REQUEUE; | ||
550 | + if (r != DM_MAPIO_REMAPPED) | ||
551 | + return r; | ||
552 | if (setup_clone(clone, rq, tio, GFP_KERNEL)) { | ||
553 | /* -ENOMEM */ | ||
554 | ti->type->release_clone_rq(clone); | ||
555 | diff --git a/drivers/net/wireless/b43/main.c b/drivers/net/wireless/b43/main.c | ||
556 | index 75345c1e8c34..5c91df5c1f4f 100644 | ||
557 | --- a/drivers/net/wireless/b43/main.c | ||
558 | +++ b/drivers/net/wireless/b43/main.c | ||
559 | @@ -5365,6 +5365,10 @@ static void b43_supported_bands(struct b43_wldev *dev, bool *have_2ghz_phy, | ||
560 | *have_5ghz_phy = true; | ||
561 | return; | ||
562 | case 0x4321: /* BCM4306 */ | ||
563 | + /* There are 14e4:4321 PCI devs with 2.4 GHz BCM4321 (N-PHY) */ | ||
564 | + if (dev->phy.type != B43_PHYTYPE_G) | ||
565 | + break; | ||
566 | + /* fall through */ | ||
567 | case 0x4313: /* BCM4311 */ | ||
568 | case 0x431a: /* BCM4318 */ | ||
569 | case 0x432a: /* BCM4321 */ | ||
570 | diff --git a/drivers/usb/class/cdc-acm.c b/drivers/usb/class/cdc-acm.c | ||
571 | index 220c0fd059bb..50faef4f056f 100644 | ||
572 | --- a/drivers/usb/class/cdc-acm.c | ||
573 | +++ b/drivers/usb/class/cdc-acm.c | ||
574 | @@ -1468,6 +1468,11 @@ skip_countries: | ||
575 | goto alloc_fail8; | ||
576 | } | ||
577 | |||
578 | + if (quirks & CLEAR_HALT_CONDITIONS) { | ||
579 | + usb_clear_halt(usb_dev, usb_rcvbulkpipe(usb_dev, epread->bEndpointAddress)); | ||
580 | + usb_clear_halt(usb_dev, usb_sndbulkpipe(usb_dev, epwrite->bEndpointAddress)); | ||
581 | + } | ||
582 | + | ||
583 | return 0; | ||
584 | alloc_fail8: | ||
585 | if (acm->country_codes) { | ||
586 | @@ -1747,6 +1752,10 @@ static const struct usb_device_id acm_ids[] = { | ||
587 | .driver_info = NO_UNION_NORMAL, /* reports zero length descriptor */ | ||
588 | }, | ||
589 | |||
590 | + { USB_DEVICE(0x2912, 0x0001), /* ATOL FPrint */ | ||
591 | + .driver_info = CLEAR_HALT_CONDITIONS, | ||
592 | + }, | ||
593 | + | ||
594 | /* Nokia S60 phones expose two ACM channels. The first is | ||
595 | * a modem and is picked up by the standard AT-command | ||
596 | * information below. The second is 'vendor-specific' but | ||
597 | diff --git a/drivers/usb/class/cdc-acm.h b/drivers/usb/class/cdc-acm.h | ||
598 | index ffeb3c83941f..b3b6c9db6fe5 100644 | ||
599 | --- a/drivers/usb/class/cdc-acm.h | ||
600 | +++ b/drivers/usb/class/cdc-acm.h | ||
601 | @@ -133,3 +133,4 @@ struct acm { | ||
602 | #define NO_DATA_INTERFACE BIT(4) | ||
603 | #define IGNORE_DEVICE BIT(5) | ||
604 | #define QUIRK_CONTROL_LINE_STATE BIT(6) | ||
605 | +#define CLEAR_HALT_CONDITIONS BIT(7) | ||
606 | diff --git a/include/uapi/drm/radeon_drm.h b/include/uapi/drm/radeon_drm.h | ||
607 | index 50d0fb41a3bf..76d2edea5bd1 100644 | ||
608 | --- a/include/uapi/drm/radeon_drm.h | ||
609 | +++ b/include/uapi/drm/radeon_drm.h | ||
610 | @@ -1034,6 +1034,7 @@ struct drm_radeon_cs { | ||
611 | #define RADEON_INFO_VRAM_USAGE 0x1e | ||
612 | #define RADEON_INFO_GTT_USAGE 0x1f | ||
613 | #define RADEON_INFO_ACTIVE_CU_COUNT 0x20 | ||
614 | +#define RADEON_INFO_VA_UNMAP_WORKING 0x25 | ||
615 | |||
616 | struct drm_radeon_info { | ||
617 | uint32_t request; | ||
618 | diff --git a/kernel/trace/trace_events_filter.c b/kernel/trace/trace_events_filter.c | ||
619 | index ced69da0ff55..7f2e97ce71a7 100644 | ||
620 | --- a/kernel/trace/trace_events_filter.c | ||
621 | +++ b/kernel/trace/trace_events_filter.c | ||
622 | @@ -1369,19 +1369,26 @@ static int check_preds(struct filter_parse_state *ps) | ||
623 | { | ||
624 | int n_normal_preds = 0, n_logical_preds = 0; | ||
625 | struct postfix_elt *elt; | ||
626 | + int cnt = 0; | ||
627 | |||
628 | list_for_each_entry(elt, &ps->postfix, list) { | ||
629 | - if (elt->op == OP_NONE) | ||
630 | + if (elt->op == OP_NONE) { | ||
631 | + cnt++; | ||
632 | continue; | ||
633 | + } | ||
634 | |||
635 | if (elt->op == OP_AND || elt->op == OP_OR) { | ||
636 | n_logical_preds++; | ||
637 | + cnt--; | ||
638 | continue; | ||
639 | } | ||
640 | + if (elt->op != OP_NOT) | ||
641 | + cnt--; | ||
642 | n_normal_preds++; | ||
643 | + WARN_ON_ONCE(cnt < 0); | ||
644 | } | ||
645 | |||
646 | - if (!n_normal_preds || n_logical_preds >= n_normal_preds) { | ||
647 | + if (cnt != 1 || !n_normal_preds || n_logical_preds >= n_normal_preds) { | ||
648 | parse_error(ps, FILT_ERR_INVALID_FILTER, 0); | ||
649 | return -EINVAL; | ||
650 | } | ||
651 | diff --git a/sound/pci/hda/patch_sigmatel.c b/sound/pci/hda/patch_sigmatel.c | ||
652 | index 87eff3173ce9..60b3100a2120 100644 | ||
653 | --- a/sound/pci/hda/patch_sigmatel.c | ||
654 | +++ b/sound/pci/hda/patch_sigmatel.c | ||
655 | @@ -100,6 +100,7 @@ enum { | ||
656 | STAC_HP_ENVY_BASS, | ||
657 | STAC_HP_BNB13_EQ, | ||
658 | STAC_HP_ENVY_TS_BASS, | ||
659 | + STAC_HP_ENVY_TS_DAC_BIND, | ||
660 | STAC_92HD83XXX_GPIO10_EAPD, | ||
661 | STAC_92HD83XXX_MODELS | ||
662 | }; | ||
663 | @@ -2170,6 +2171,22 @@ static void stac92hd83xxx_fixup_gpio10_eapd(struct hda_codec *codec, | ||
664 | spec->eapd_switch = 0; | ||
665 | } | ||
666 | |||
667 | +static void hp_envy_ts_fixup_dac_bind(struct hda_codec *codec, | ||
668 | + const struct hda_fixup *fix, | ||
669 | + int action) | ||
670 | +{ | ||
671 | + struct sigmatel_spec *spec = codec->spec; | ||
672 | + static hda_nid_t preferred_pairs[] = { | ||
673 | + 0xd, 0x13, | ||
674 | + 0 | ||
675 | + }; | ||
676 | + | ||
677 | + if (action != HDA_FIXUP_ACT_PRE_PROBE) | ||
678 | + return; | ||
679 | + | ||
680 | + spec->gen.preferred_dacs = preferred_pairs; | ||
681 | +} | ||
682 | + | ||
683 | static const struct hda_verb hp_bnb13_eq_verbs[] = { | ||
684 | /* 44.1KHz base */ | ||
685 | { 0x22, 0x7A6, 0x3E }, | ||
686 | @@ -2685,6 +2702,12 @@ static const struct hda_fixup stac92hd83xxx_fixups[] = { | ||
687 | {} | ||
688 | }, | ||
689 | }, | ||
690 | + [STAC_HP_ENVY_TS_DAC_BIND] = { | ||
691 | + .type = HDA_FIXUP_FUNC, | ||
692 | + .v.func = hp_envy_ts_fixup_dac_bind, | ||
693 | + .chained = true, | ||
694 | + .chain_id = STAC_HP_ENVY_TS_BASS, | ||
695 | + }, | ||
696 | [STAC_92HD83XXX_GPIO10_EAPD] = { | ||
697 | .type = HDA_FIXUP_FUNC, | ||
698 | .v.func = stac92hd83xxx_fixup_gpio10_eapd, | ||
699 | @@ -2763,6 +2786,8 @@ static const struct snd_pci_quirk stac92hd83xxx_fixup_tbl[] = { | ||
700 | "HP bNB13", STAC_HP_BNB13_EQ), | ||
701 | SND_PCI_QUIRK(PCI_VENDOR_ID_HP, 0x190e, | ||
702 | "HP ENVY TS", STAC_HP_ENVY_TS_BASS), | ||
703 | + SND_PCI_QUIRK(PCI_VENDOR_ID_HP, 0x1967, | ||
704 | + "HP ENVY TS", STAC_HP_ENVY_TS_DAC_BIND), | ||
705 | SND_PCI_QUIRK(PCI_VENDOR_ID_HP, 0x1940, | ||
706 | "HP bNB13", STAC_HP_BNB13_EQ), | ||
707 | SND_PCI_QUIRK(PCI_VENDOR_ID_HP, 0x1941, |