Annotation of /trunk/kernel-alx/patches-3.10/0170-3.10.71-all-fixes.patch
Parent Directory | Revision Log
Revision 2658 -
(hide annotations)
(download)
Tue Jul 21 16:20:23 2015 UTC (9 years, 2 months ago) by niro
File size: 49394 byte(s)
Tue Jul 21 16:20:23 2015 UTC (9 years, 2 months ago) by niro
File size: 49394 byte(s)
-linux-3.10.71
1 | niro | 2658 | diff --git a/Makefile b/Makefile |
2 | index 402cbb7c27f1..d8b42f71ea5a 100644 | ||
3 | --- a/Makefile | ||
4 | +++ b/Makefile | ||
5 | @@ -1,6 +1,6 @@ | ||
6 | VERSION = 3 | ||
7 | PATCHLEVEL = 10 | ||
8 | -SUBLEVEL = 70 | ||
9 | +SUBLEVEL = 71 | ||
10 | EXTRAVERSION = | ||
11 | NAME = TOSSUG Baby Fish | ||
12 | |||
13 | diff --git a/arch/arc/include/asm/pgtable.h b/arch/arc/include/asm/pgtable.h | ||
14 | index 95b1522212a7..ecf23eaa20c1 100644 | ||
15 | --- a/arch/arc/include/asm/pgtable.h | ||
16 | +++ b/arch/arc/include/asm/pgtable.h | ||
17 | @@ -270,7 +270,8 @@ static inline void pmd_set(pmd_t *pmdp, pte_t *ptep) | ||
18 | #define pmd_clear(xp) do { pmd_val(*(xp)) = 0; } while (0) | ||
19 | |||
20 | #define pte_page(x) (mem_map + \ | ||
21 | - (unsigned long)(((pte_val(x) - PAGE_OFFSET) >> PAGE_SHIFT))) | ||
22 | + (unsigned long)(((pte_val(x) - CONFIG_LINUX_LINK_BASE) >> \ | ||
23 | + PAGE_SHIFT))) | ||
24 | |||
25 | #define mk_pte(page, pgprot) \ | ||
26 | ({ \ | ||
27 | diff --git a/arch/arm/mach-pxa/corgi.c b/arch/arm/mach-pxa/corgi.c | ||
28 | index a5b8fead7d61..9cb7ea776ecd 100644 | ||
29 | --- a/arch/arm/mach-pxa/corgi.c | ||
30 | +++ b/arch/arm/mach-pxa/corgi.c | ||
31 | @@ -26,6 +26,7 @@ | ||
32 | #include <linux/i2c.h> | ||
33 | #include <linux/i2c/pxa-i2c.h> | ||
34 | #include <linux/io.h> | ||
35 | +#include <linux/regulator/machine.h> | ||
36 | #include <linux/spi/spi.h> | ||
37 | #include <linux/spi/ads7846.h> | ||
38 | #include <linux/spi/corgi_lcd.h> | ||
39 | @@ -711,6 +712,8 @@ static void __init corgi_init(void) | ||
40 | sharpsl_nand_partitions[1].size = 53 * 1024 * 1024; | ||
41 | |||
42 | platform_add_devices(devices, ARRAY_SIZE(devices)); | ||
43 | + | ||
44 | + regulator_has_full_constraints(); | ||
45 | } | ||
46 | |||
47 | static void __init fixup_corgi(struct tag *tags, char **cmdline, | ||
48 | diff --git a/arch/arm/mach-pxa/hx4700.c b/arch/arm/mach-pxa/hx4700.c | ||
49 | index 133109ec7332..a07accfb3aec 100644 | ||
50 | --- a/arch/arm/mach-pxa/hx4700.c | ||
51 | +++ b/arch/arm/mach-pxa/hx4700.c | ||
52 | @@ -891,6 +891,8 @@ static void __init hx4700_init(void) | ||
53 | mdelay(10); | ||
54 | gpio_set_value(GPIO71_HX4700_ASIC3_nRESET, 1); | ||
55 | mdelay(10); | ||
56 | + | ||
57 | + regulator_has_full_constraints(); | ||
58 | } | ||
59 | |||
60 | MACHINE_START(H4700, "HP iPAQ HX4700") | ||
61 | diff --git a/arch/arm/mach-pxa/poodle.c b/arch/arm/mach-pxa/poodle.c | ||
62 | index 50ccd5f1d560..362c05fffc28 100644 | ||
63 | --- a/arch/arm/mach-pxa/poodle.c | ||
64 | +++ b/arch/arm/mach-pxa/poodle.c | ||
65 | @@ -25,6 +25,7 @@ | ||
66 | #include <linux/gpio.h> | ||
67 | #include <linux/i2c.h> | ||
68 | #include <linux/i2c/pxa-i2c.h> | ||
69 | +#include <linux/regulator/machine.h> | ||
70 | #include <linux/spi/spi.h> | ||
71 | #include <linux/spi/ads7846.h> | ||
72 | #include <linux/spi/pxa2xx_spi.h> | ||
73 | @@ -452,6 +453,7 @@ static void __init poodle_init(void) | ||
74 | pxa_set_i2c_info(NULL); | ||
75 | i2c_register_board_info(0, ARRAY_AND_SIZE(poodle_i2c_devices)); | ||
76 | poodle_init_spi(); | ||
77 | + regulator_has_full_constraints(); | ||
78 | } | ||
79 | |||
80 | static void __init fixup_poodle(struct tag *tags, char **cmdline, | ||
81 | diff --git a/arch/arm/mach-sa1100/pm.c b/arch/arm/mach-sa1100/pm.c | ||
82 | index 6645d1e31f14..34853d5dfda2 100644 | ||
83 | --- a/arch/arm/mach-sa1100/pm.c | ||
84 | +++ b/arch/arm/mach-sa1100/pm.c | ||
85 | @@ -81,6 +81,7 @@ static int sa11x0_pm_enter(suspend_state_t state) | ||
86 | /* | ||
87 | * Ensure not to come back here if it wasn't intended | ||
88 | */ | ||
89 | + RCSR = RCSR_SMR; | ||
90 | PSPR = 0; | ||
91 | |||
92 | /* | ||
93 | diff --git a/arch/arm64/kernel/signal32.c b/arch/arm64/kernel/signal32.c | ||
94 | index e393174fe859..3d478102b1c0 100644 | ||
95 | --- a/arch/arm64/kernel/signal32.c | ||
96 | +++ b/arch/arm64/kernel/signal32.c | ||
97 | @@ -179,8 +179,7 @@ int copy_siginfo_to_user32(compat_siginfo_t __user *to, siginfo_t *from) | ||
98 | case __SI_TIMER: | ||
99 | err |= __put_user(from->si_tid, &to->si_tid); | ||
100 | err |= __put_user(from->si_overrun, &to->si_overrun); | ||
101 | - err |= __put_user((compat_uptr_t)(unsigned long)from->si_ptr, | ||
102 | - &to->si_ptr); | ||
103 | + err |= __put_user(from->si_int, &to->si_int); | ||
104 | break; | ||
105 | case __SI_POLL: | ||
106 | err |= __put_user(from->si_band, &to->si_band); | ||
107 | @@ -209,7 +208,7 @@ int copy_siginfo_to_user32(compat_siginfo_t __user *to, siginfo_t *from) | ||
108 | case __SI_MESGQ: /* But this is */ | ||
109 | err |= __put_user(from->si_pid, &to->si_pid); | ||
110 | err |= __put_user(from->si_uid, &to->si_uid); | ||
111 | - err |= __put_user((compat_uptr_t)(unsigned long)from->si_ptr, &to->si_ptr); | ||
112 | + err |= __put_user(from->si_int, &to->si_int); | ||
113 | break; | ||
114 | default: /* this is just in case for now ... */ | ||
115 | err |= __put_user(from->si_pid, &to->si_pid); | ||
116 | diff --git a/arch/metag/include/asm/processor.h b/arch/metag/include/asm/processor.h | ||
117 | index 579e3d93a5ca..b88e9cbdc64b 100644 | ||
118 | --- a/arch/metag/include/asm/processor.h | ||
119 | +++ b/arch/metag/include/asm/processor.h | ||
120 | @@ -149,8 +149,8 @@ extern void exit_thread(void); | ||
121 | |||
122 | unsigned long get_wchan(struct task_struct *p); | ||
123 | |||
124 | -#define KSTK_EIP(tsk) ((tsk)->thread.kernel_context->CurrPC) | ||
125 | -#define KSTK_ESP(tsk) ((tsk)->thread.kernel_context->AX[0].U0) | ||
126 | +#define KSTK_EIP(tsk) (task_pt_regs(tsk)->ctx.CurrPC) | ||
127 | +#define KSTK_ESP(tsk) (task_pt_regs(tsk)->ctx.AX[0].U0) | ||
128 | |||
129 | #define user_stack_pointer(regs) ((regs)->ctx.AX[0].U0) | ||
130 | |||
131 | diff --git a/arch/mips/kernel/mips_ksyms.c b/arch/mips/kernel/mips_ksyms.c | ||
132 | index 6e58e97fcd39..cedeb5686eb5 100644 | ||
133 | --- a/arch/mips/kernel/mips_ksyms.c | ||
134 | +++ b/arch/mips/kernel/mips_ksyms.c | ||
135 | @@ -14,6 +14,7 @@ | ||
136 | #include <linux/mm.h> | ||
137 | #include <asm/uaccess.h> | ||
138 | #include <asm/ftrace.h> | ||
139 | +#include <asm/fpu.h> | ||
140 | |||
141 | extern void *__bzero(void *__s, size_t __count); | ||
142 | extern long __strncpy_from_user_nocheck_asm(char *__to, | ||
143 | @@ -26,6 +27,13 @@ extern long __strnlen_user_nocheck_asm(const char *s); | ||
144 | extern long __strnlen_user_asm(const char *s); | ||
145 | |||
146 | /* | ||
147 | + * Core architecture code | ||
148 | + */ | ||
149 | +#ifdef CONFIG_CPU_R4K_FPU | ||
150 | +EXPORT_SYMBOL_GPL(_save_fp); | ||
151 | +#endif | ||
152 | + | ||
153 | +/* | ||
154 | * String functions | ||
155 | */ | ||
156 | EXPORT_SYMBOL(memset); | ||
157 | diff --git a/arch/mips/kvm/kvm_locore.S b/arch/mips/kvm/kvm_locore.S | ||
158 | index dca2aa665993..920b63210806 100644 | ||
159 | --- a/arch/mips/kvm/kvm_locore.S | ||
160 | +++ b/arch/mips/kvm/kvm_locore.S | ||
161 | @@ -431,7 +431,7 @@ __kvm_mips_return_to_guest: | ||
162 | /* Setup status register for running guest in UM */ | ||
163 | .set at | ||
164 | or v1, v1, (ST0_EXL | KSU_USER | ST0_IE) | ||
165 | - and v1, v1, ~ST0_CU0 | ||
166 | + and v1, v1, ~(ST0_CU0 | ST0_MX) | ||
167 | .set noat | ||
168 | mtc0 v1, CP0_STATUS | ||
169 | ehb | ||
170 | diff --git a/arch/mips/kvm/kvm_mips.c b/arch/mips/kvm/kvm_mips.c | ||
171 | index 2c7b3ade8ec0..843ec38fec7b 100644 | ||
172 | --- a/arch/mips/kvm/kvm_mips.c | ||
173 | +++ b/arch/mips/kvm/kvm_mips.c | ||
174 | @@ -15,6 +15,7 @@ | ||
175 | #include <linux/vmalloc.h> | ||
176 | #include <linux/fs.h> | ||
177 | #include <linux/bootmem.h> | ||
178 | +#include <asm/fpu.h> | ||
179 | #include <asm/page.h> | ||
180 | #include <asm/cacheflush.h> | ||
181 | #include <asm/mmu_context.h> | ||
182 | @@ -413,11 +414,13 @@ int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu, struct kvm_run *run) | ||
183 | vcpu->mmio_needed = 0; | ||
184 | } | ||
185 | |||
186 | + lose_fpu(1); | ||
187 | + | ||
188 | + local_irq_disable(); | ||
189 | /* Check if we have any exceptions/interrupts pending */ | ||
190 | kvm_mips_deliver_interrupts(vcpu, | ||
191 | kvm_read_c0_guest_cause(vcpu->arch.cop0)); | ||
192 | |||
193 | - local_irq_disable(); | ||
194 | kvm_guest_enter(); | ||
195 | |||
196 | r = __kvm_mips_vcpu_run(run, vcpu); | ||
197 | @@ -1017,9 +1020,6 @@ void kvm_mips_set_c0_status(void) | ||
198 | { | ||
199 | uint32_t status = read_c0_status(); | ||
200 | |||
201 | - if (cpu_has_fpu) | ||
202 | - status |= (ST0_CU1); | ||
203 | - | ||
204 | if (cpu_has_dsp) | ||
205 | status |= (ST0_MX); | ||
206 | |||
207 | diff --git a/arch/powerpc/sysdev/axonram.c b/arch/powerpc/sysdev/axonram.c | ||
208 | index 1c16141c031c..1fea24944ff4 100644 | ||
209 | --- a/arch/powerpc/sysdev/axonram.c | ||
210 | +++ b/arch/powerpc/sysdev/axonram.c | ||
211 | @@ -155,7 +155,7 @@ axon_ram_direct_access(struct block_device *device, sector_t sector, | ||
212 | } | ||
213 | |||
214 | *kaddr = (void *)(bank->ph_addr + offset); | ||
215 | - *pfn = virt_to_phys(kaddr) >> PAGE_SHIFT; | ||
216 | + *pfn = virt_to_phys(*kaddr) >> PAGE_SHIFT; | ||
217 | |||
218 | return 0; | ||
219 | } | ||
220 | diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c | ||
221 | index adfc30d9f9f4..41ba726c1ce2 100644 | ||
222 | --- a/arch/x86/kvm/x86.c | ||
223 | +++ b/arch/x86/kvm/x86.c | ||
224 | @@ -1182,21 +1182,22 @@ void kvm_track_tsc_matching(struct kvm_vcpu *vcpu) | ||
225 | { | ||
226 | #ifdef CONFIG_X86_64 | ||
227 | bool vcpus_matched; | ||
228 | - bool do_request = false; | ||
229 | struct kvm_arch *ka = &vcpu->kvm->arch; | ||
230 | struct pvclock_gtod_data *gtod = &pvclock_gtod_data; | ||
231 | |||
232 | vcpus_matched = (ka->nr_vcpus_matched_tsc + 1 == | ||
233 | atomic_read(&vcpu->kvm->online_vcpus)); | ||
234 | |||
235 | - if (vcpus_matched && gtod->clock.vclock_mode == VCLOCK_TSC) | ||
236 | - if (!ka->use_master_clock) | ||
237 | - do_request = 1; | ||
238 | - | ||
239 | - if (!vcpus_matched && ka->use_master_clock) | ||
240 | - do_request = 1; | ||
241 | - | ||
242 | - if (do_request) | ||
243 | + /* | ||
244 | + * Once the masterclock is enabled, always perform request in | ||
245 | + * order to update it. | ||
246 | + * | ||
247 | + * In order to enable masterclock, the host clocksource must be TSC | ||
248 | + * and the vcpus need to have matched TSCs. When that happens, | ||
249 | + * perform request to enable masterclock. | ||
250 | + */ | ||
251 | + if (ka->use_master_clock || | ||
252 | + (gtod->clock.vclock_mode == VCLOCK_TSC && vcpus_matched)) | ||
253 | kvm_make_request(KVM_REQ_MASTERCLOCK_UPDATE, vcpu); | ||
254 | |||
255 | trace_kvm_track_tsc(vcpu->vcpu_id, ka->nr_vcpus_matched_tsc, | ||
256 | diff --git a/arch/x86/mm/mmap.c b/arch/x86/mm/mmap.c | ||
257 | index 5c1ae28825cd..75f9e5d80d02 100644 | ||
258 | --- a/arch/x86/mm/mmap.c | ||
259 | +++ b/arch/x86/mm/mmap.c | ||
260 | @@ -35,12 +35,12 @@ struct __read_mostly va_alignment va_align = { | ||
261 | .flags = -1, | ||
262 | }; | ||
263 | |||
264 | -static unsigned int stack_maxrandom_size(void) | ||
265 | +static unsigned long stack_maxrandom_size(void) | ||
266 | { | ||
267 | - unsigned int max = 0; | ||
268 | + unsigned long max = 0; | ||
269 | if ((current->flags & PF_RANDOMIZE) && | ||
270 | !(current->personality & ADDR_NO_RANDOMIZE)) { | ||
271 | - max = ((-1U) & STACK_RND_MASK) << PAGE_SHIFT; | ||
272 | + max = ((-1UL) & STACK_RND_MASK) << PAGE_SHIFT; | ||
273 | } | ||
274 | |||
275 | return max; | ||
276 | diff --git a/block/blk-throttle.c b/block/blk-throttle.c | ||
277 | index 31146225f3d0..7cddfe6baf66 100644 | ||
278 | --- a/block/blk-throttle.c | ||
279 | +++ b/block/blk-throttle.c | ||
280 | @@ -942,6 +942,9 @@ static u64 tg_prfill_cpu_rwstat(struct seq_file *sf, | ||
281 | struct blkg_rwstat rwstat = { }, tmp; | ||
282 | int i, cpu; | ||
283 | |||
284 | + if (tg->stats_cpu == NULL) | ||
285 | + return 0; | ||
286 | + | ||
287 | for_each_possible_cpu(cpu) { | ||
288 | struct tg_stats_cpu *sc = per_cpu_ptr(tg->stats_cpu, cpu); | ||
289 | |||
290 | diff --git a/block/cfq-iosched.c b/block/cfq-iosched.c | ||
291 | index c981097dd634..69111c5c352c 100644 | ||
292 | --- a/block/cfq-iosched.c | ||
293 | +++ b/block/cfq-iosched.c | ||
294 | @@ -3575,6 +3575,11 @@ retry: | ||
295 | |||
296 | blkcg = bio_blkcg(bio); | ||
297 | cfqg = cfq_lookup_create_cfqg(cfqd, blkcg); | ||
298 | + if (!cfqg) { | ||
299 | + cfqq = &cfqd->oom_cfqq; | ||
300 | + goto out; | ||
301 | + } | ||
302 | + | ||
303 | cfqq = cic_to_cfqq(cic, is_sync); | ||
304 | |||
305 | /* | ||
306 | @@ -3611,7 +3616,7 @@ retry: | ||
307 | } else | ||
308 | cfqq = &cfqd->oom_cfqq; | ||
309 | } | ||
310 | - | ||
311 | +out: | ||
312 | if (new_cfqq) | ||
313 | kmem_cache_free(cfq_pool, new_cfqq); | ||
314 | |||
315 | @@ -3641,12 +3646,17 @@ static struct cfq_queue * | ||
316 | cfq_get_queue(struct cfq_data *cfqd, bool is_sync, struct cfq_io_cq *cic, | ||
317 | struct bio *bio, gfp_t gfp_mask) | ||
318 | { | ||
319 | - const int ioprio_class = IOPRIO_PRIO_CLASS(cic->ioprio); | ||
320 | - const int ioprio = IOPRIO_PRIO_DATA(cic->ioprio); | ||
321 | + int ioprio_class = IOPRIO_PRIO_CLASS(cic->ioprio); | ||
322 | + int ioprio = IOPRIO_PRIO_DATA(cic->ioprio); | ||
323 | struct cfq_queue **async_cfqq = NULL; | ||
324 | struct cfq_queue *cfqq = NULL; | ||
325 | |||
326 | if (!is_sync) { | ||
327 | + if (!ioprio_valid(cic->ioprio)) { | ||
328 | + struct task_struct *tsk = current; | ||
329 | + ioprio = task_nice_ioprio(tsk); | ||
330 | + ioprio_class = task_nice_ioclass(tsk); | ||
331 | + } | ||
332 | async_cfqq = cfq_async_queue_prio(cfqd, ioprio_class, ioprio); | ||
333 | cfqq = *async_cfqq; | ||
334 | } | ||
335 | diff --git a/drivers/bluetooth/ath3k.c b/drivers/bluetooth/ath3k.c | ||
336 | index 2acabdaecec8..dad8891ecbfa 100644 | ||
337 | --- a/drivers/bluetooth/ath3k.c | ||
338 | +++ b/drivers/bluetooth/ath3k.c | ||
339 | @@ -151,6 +151,8 @@ static struct usb_device_id ath3k_blist_tbl[] = { | ||
340 | #define USB_REQ_DFU_DNLOAD 1 | ||
341 | #define BULK_SIZE 4096 | ||
342 | #define FW_HDR_SIZE 20 | ||
343 | +#define TIMEGAP_USEC_MIN 50 | ||
344 | +#define TIMEGAP_USEC_MAX 100 | ||
345 | |||
346 | static int ath3k_load_firmware(struct usb_device *udev, | ||
347 | const struct firmware *firmware) | ||
348 | @@ -181,6 +183,9 @@ static int ath3k_load_firmware(struct usb_device *udev, | ||
349 | count -= 20; | ||
350 | |||
351 | while (count) { | ||
352 | + /* workaround the compatibility issue with xHCI controller*/ | ||
353 | + usleep_range(TIMEGAP_USEC_MIN, TIMEGAP_USEC_MAX); | ||
354 | + | ||
355 | size = min_t(uint, count, BULK_SIZE); | ||
356 | pipe = usb_sndbulkpipe(udev, 0x02); | ||
357 | memcpy(send_buf, firmware->data + sent, size); | ||
358 | @@ -277,6 +282,9 @@ static int ath3k_load_fwfile(struct usb_device *udev, | ||
359 | count -= size; | ||
360 | |||
361 | while (count) { | ||
362 | + /* workaround the compatibility issue with xHCI controller*/ | ||
363 | + usleep_range(TIMEGAP_USEC_MIN, TIMEGAP_USEC_MAX); | ||
364 | + | ||
365 | size = min_t(uint, count, BULK_SIZE); | ||
366 | pipe = usb_sndbulkpipe(udev, 0x02); | ||
367 | |||
368 | diff --git a/drivers/char/tpm/tpm_i2c_stm_st33.c b/drivers/char/tpm/tpm_i2c_stm_st33.c | ||
369 | index 156bd3c72770..3925f7b86841 100644 | ||
370 | --- a/drivers/char/tpm/tpm_i2c_stm_st33.c | ||
371 | +++ b/drivers/char/tpm/tpm_i2c_stm_st33.c | ||
372 | @@ -488,7 +488,7 @@ static int tpm_stm_i2c_send(struct tpm_chip *chip, unsigned char *buf, | ||
373 | if (burstcnt < 0) | ||
374 | return burstcnt; | ||
375 | size = min_t(int, len - i - 1, burstcnt); | ||
376 | - ret = I2C_WRITE_DATA(client, TPM_DATA_FIFO, buf, size); | ||
377 | + ret = I2C_WRITE_DATA(client, TPM_DATA_FIFO, buf + i, size); | ||
378 | if (ret < 0) | ||
379 | goto out_err; | ||
380 | |||
381 | diff --git a/drivers/char/tpm/tpm_ibmvtpm.c b/drivers/char/tpm/tpm_ibmvtpm.c | ||
382 | index 56b07c35a13e..538856f3e68a 100644 | ||
383 | --- a/drivers/char/tpm/tpm_ibmvtpm.c | ||
384 | +++ b/drivers/char/tpm/tpm_ibmvtpm.c | ||
385 | @@ -148,7 +148,8 @@ static int tpm_ibmvtpm_send(struct tpm_chip *chip, u8 *buf, size_t count) | ||
386 | crq.len = (u16)count; | ||
387 | crq.data = ibmvtpm->rtce_dma_handle; | ||
388 | |||
389 | - rc = ibmvtpm_send_crq(ibmvtpm->vdev, word[0], word[1]); | ||
390 | + rc = ibmvtpm_send_crq(ibmvtpm->vdev, cpu_to_be64(word[0]), | ||
391 | + cpu_to_be64(word[1])); | ||
392 | if (rc != H_SUCCESS) { | ||
393 | dev_err(ibmvtpm->dev, "tpm_ibmvtpm_send failed rc=%d\n", rc); | ||
394 | rc = 0; | ||
395 | @@ -186,7 +187,8 @@ static int ibmvtpm_crq_get_rtce_size(struct ibmvtpm_dev *ibmvtpm) | ||
396 | crq.valid = (u8)IBMVTPM_VALID_CMD; | ||
397 | crq.msg = (u8)VTPM_GET_RTCE_BUFFER_SIZE; | ||
398 | |||
399 | - rc = ibmvtpm_send_crq(ibmvtpm->vdev, buf[0], buf[1]); | ||
400 | + rc = ibmvtpm_send_crq(ibmvtpm->vdev, cpu_to_be64(buf[0]), | ||
401 | + cpu_to_be64(buf[1])); | ||
402 | if (rc != H_SUCCESS) | ||
403 | dev_err(ibmvtpm->dev, | ||
404 | "ibmvtpm_crq_get_rtce_size failed rc=%d\n", rc); | ||
405 | @@ -212,7 +214,8 @@ static int ibmvtpm_crq_get_version(struct ibmvtpm_dev *ibmvtpm) | ||
406 | crq.valid = (u8)IBMVTPM_VALID_CMD; | ||
407 | crq.msg = (u8)VTPM_GET_VERSION; | ||
408 | |||
409 | - rc = ibmvtpm_send_crq(ibmvtpm->vdev, buf[0], buf[1]); | ||
410 | + rc = ibmvtpm_send_crq(ibmvtpm->vdev, cpu_to_be64(buf[0]), | ||
411 | + cpu_to_be64(buf[1])); | ||
412 | if (rc != H_SUCCESS) | ||
413 | dev_err(ibmvtpm->dev, | ||
414 | "ibmvtpm_crq_get_version failed rc=%d\n", rc); | ||
415 | @@ -307,6 +310,14 @@ static int tpm_ibmvtpm_remove(struct vio_dev *vdev) | ||
416 | static unsigned long tpm_ibmvtpm_get_desired_dma(struct vio_dev *vdev) | ||
417 | { | ||
418 | struct ibmvtpm_dev *ibmvtpm = ibmvtpm_get_data(&vdev->dev); | ||
419 | + | ||
420 | + /* ibmvtpm initializes at probe time, so the data we are | ||
421 | + * asking for may not be set yet. Estimate that 4K required | ||
422 | + * for TCE-mapped buffer in addition to CRQ. | ||
423 | + */ | ||
424 | + if (!ibmvtpm) | ||
425 | + return CRQ_RES_BUF_SIZE + PAGE_SIZE; | ||
426 | + | ||
427 | return CRQ_RES_BUF_SIZE + ibmvtpm->rtce_size; | ||
428 | } | ||
429 | |||
430 | @@ -327,7 +338,8 @@ static int tpm_ibmvtpm_suspend(struct device *dev) | ||
431 | crq.valid = (u8)IBMVTPM_VALID_CMD; | ||
432 | crq.msg = (u8)VTPM_PREPARE_TO_SUSPEND; | ||
433 | |||
434 | - rc = ibmvtpm_send_crq(ibmvtpm->vdev, buf[0], buf[1]); | ||
435 | + rc = ibmvtpm_send_crq(ibmvtpm->vdev, cpu_to_be64(buf[0]), | ||
436 | + cpu_to_be64(buf[1])); | ||
437 | if (rc != H_SUCCESS) | ||
438 | dev_err(ibmvtpm->dev, | ||
439 | "tpm_ibmvtpm_suspend failed rc=%d\n", rc); | ||
440 | @@ -511,11 +523,11 @@ static void ibmvtpm_crq_process(struct ibmvtpm_crq *crq, | ||
441 | case IBMVTPM_VALID_CMD: | ||
442 | switch (crq->msg) { | ||
443 | case VTPM_GET_RTCE_BUFFER_SIZE_RES: | ||
444 | - if (crq->len <= 0) { | ||
445 | + if (be16_to_cpu(crq->len) <= 0) { | ||
446 | dev_err(ibmvtpm->dev, "Invalid rtce size\n"); | ||
447 | return; | ||
448 | } | ||
449 | - ibmvtpm->rtce_size = crq->len; | ||
450 | + ibmvtpm->rtce_size = be16_to_cpu(crq->len); | ||
451 | ibmvtpm->rtce_buf = kmalloc(ibmvtpm->rtce_size, | ||
452 | GFP_KERNEL); | ||
453 | if (!ibmvtpm->rtce_buf) { | ||
454 | @@ -536,11 +548,11 @@ static void ibmvtpm_crq_process(struct ibmvtpm_crq *crq, | ||
455 | |||
456 | return; | ||
457 | case VTPM_GET_VERSION_RES: | ||
458 | - ibmvtpm->vtpm_version = crq->data; | ||
459 | + ibmvtpm->vtpm_version = be32_to_cpu(crq->data); | ||
460 | return; | ||
461 | case VTPM_TPM_COMMAND_RES: | ||
462 | /* len of the data in rtce buffer */ | ||
463 | - ibmvtpm->res_len = crq->len; | ||
464 | + ibmvtpm->res_len = be16_to_cpu(crq->len); | ||
465 | wake_up_interruptible(&ibmvtpm->wq); | ||
466 | return; | ||
467 | default: | ||
468 | diff --git a/drivers/char/tpm/tpm_tis.c b/drivers/char/tpm/tpm_tis.c | ||
469 | index 72f21377fa02..323d02d33c70 100644 | ||
470 | --- a/drivers/char/tpm/tpm_tis.c | ||
471 | +++ b/drivers/char/tpm/tpm_tis.c | ||
472 | @@ -75,6 +75,10 @@ enum tis_defaults { | ||
473 | #define TPM_DID_VID(l) (0x0F00 | ((l) << 12)) | ||
474 | #define TPM_RID(l) (0x0F04 | ((l) << 12)) | ||
475 | |||
476 | +struct priv_data { | ||
477 | + bool irq_tested; | ||
478 | +}; | ||
479 | + | ||
480 | static LIST_HEAD(tis_chips); | ||
481 | static DEFINE_MUTEX(tis_lock); | ||
482 | |||
483 | @@ -338,12 +342,27 @@ out_err: | ||
484 | return rc; | ||
485 | } | ||
486 | |||
487 | +static void disable_interrupts(struct tpm_chip *chip) | ||
488 | +{ | ||
489 | + u32 intmask; | ||
490 | + | ||
491 | + intmask = | ||
492 | + ioread32(chip->vendor.iobase + | ||
493 | + TPM_INT_ENABLE(chip->vendor.locality)); | ||
494 | + intmask &= ~TPM_GLOBAL_INT_ENABLE; | ||
495 | + iowrite32(intmask, | ||
496 | + chip->vendor.iobase + | ||
497 | + TPM_INT_ENABLE(chip->vendor.locality)); | ||
498 | + free_irq(chip->vendor.irq, chip); | ||
499 | + chip->vendor.irq = 0; | ||
500 | +} | ||
501 | + | ||
502 | /* | ||
503 | * If interrupts are used (signaled by an irq set in the vendor structure) | ||
504 | * tpm.c can skip polling for the data to be available as the interrupt is | ||
505 | * waited for here | ||
506 | */ | ||
507 | -static int tpm_tis_send(struct tpm_chip *chip, u8 *buf, size_t len) | ||
508 | +static int tpm_tis_send_main(struct tpm_chip *chip, u8 *buf, size_t len) | ||
509 | { | ||
510 | int rc; | ||
511 | u32 ordinal; | ||
512 | @@ -373,6 +392,30 @@ out_err: | ||
513 | return rc; | ||
514 | } | ||
515 | |||
516 | +static int tpm_tis_send(struct tpm_chip *chip, u8 *buf, size_t len) | ||
517 | +{ | ||
518 | + int rc, irq; | ||
519 | + struct priv_data *priv = chip->vendor.priv; | ||
520 | + | ||
521 | + if (!chip->vendor.irq || priv->irq_tested) | ||
522 | + return tpm_tis_send_main(chip, buf, len); | ||
523 | + | ||
524 | + /* Verify receipt of the expected IRQ */ | ||
525 | + irq = chip->vendor.irq; | ||
526 | + chip->vendor.irq = 0; | ||
527 | + rc = tpm_tis_send_main(chip, buf, len); | ||
528 | + chip->vendor.irq = irq; | ||
529 | + if (!priv->irq_tested) | ||
530 | + msleep(1); | ||
531 | + if (!priv->irq_tested) { | ||
532 | + disable_interrupts(chip); | ||
533 | + dev_err(chip->dev, | ||
534 | + FW_BUG "TPM interrupt not working, polling instead\n"); | ||
535 | + } | ||
536 | + priv->irq_tested = true; | ||
537 | + return rc; | ||
538 | +} | ||
539 | + | ||
540 | struct tis_vendor_timeout_override { | ||
541 | u32 did_vid; | ||
542 | unsigned long timeout_us[4]; | ||
543 | @@ -546,6 +589,7 @@ static irqreturn_t tis_int_handler(int dummy, void *dev_id) | ||
544 | if (interrupt == 0) | ||
545 | return IRQ_NONE; | ||
546 | |||
547 | + ((struct priv_data *)chip->vendor.priv)->irq_tested = true; | ||
548 | if (interrupt & TPM_INTF_DATA_AVAIL_INT) | ||
549 | wake_up_interruptible(&chip->vendor.read_queue); | ||
550 | if (interrupt & TPM_INTF_LOCALITY_CHANGE_INT) | ||
551 | @@ -575,9 +619,14 @@ static int tpm_tis_init(struct device *dev, resource_size_t start, | ||
552 | u32 vendor, intfcaps, intmask; | ||
553 | int rc, i, irq_s, irq_e, probe; | ||
554 | struct tpm_chip *chip; | ||
555 | + struct priv_data *priv; | ||
556 | |||
557 | + priv = devm_kzalloc(dev, sizeof(struct priv_data), GFP_KERNEL); | ||
558 | + if (priv == NULL) | ||
559 | + return -ENOMEM; | ||
560 | if (!(chip = tpm_register_hardware(dev, &tpm_tis))) | ||
561 | return -ENODEV; | ||
562 | + chip->vendor.priv = priv; | ||
563 | |||
564 | chip->vendor.iobase = ioremap(start, len); | ||
565 | if (!chip->vendor.iobase) { | ||
566 | @@ -646,19 +695,6 @@ static int tpm_tis_init(struct device *dev, resource_size_t start, | ||
567 | if (intfcaps & TPM_INTF_DATA_AVAIL_INT) | ||
568 | dev_dbg(dev, "\tData Avail Int Support\n"); | ||
569 | |||
570 | - /* get the timeouts before testing for irqs */ | ||
571 | - if (tpm_get_timeouts(chip)) { | ||
572 | - dev_err(dev, "Could not get TPM timeouts and durations\n"); | ||
573 | - rc = -ENODEV; | ||
574 | - goto out_err; | ||
575 | - } | ||
576 | - | ||
577 | - if (tpm_do_selftest(chip)) { | ||
578 | - dev_err(dev, "TPM self test failed\n"); | ||
579 | - rc = -ENODEV; | ||
580 | - goto out_err; | ||
581 | - } | ||
582 | - | ||
583 | /* INTERRUPT Setup */ | ||
584 | init_waitqueue_head(&chip->vendor.read_queue); | ||
585 | init_waitqueue_head(&chip->vendor.int_queue); | ||
586 | @@ -760,6 +796,18 @@ static int tpm_tis_init(struct device *dev, resource_size_t start, | ||
587 | } | ||
588 | } | ||
589 | |||
590 | + if (tpm_get_timeouts(chip)) { | ||
591 | + dev_err(dev, "Could not get TPM timeouts and durations\n"); | ||
592 | + rc = -ENODEV; | ||
593 | + goto out_err; | ||
594 | + } | ||
595 | + | ||
596 | + if (tpm_do_selftest(chip)) { | ||
597 | + dev_err(dev, "TPM self test failed\n"); | ||
598 | + rc = -ENODEV; | ||
599 | + goto out_err; | ||
600 | + } | ||
601 | + | ||
602 | INIT_LIST_HEAD(&chip->vendor.list); | ||
603 | mutex_lock(&tis_lock); | ||
604 | list_add(&chip->vendor.list, &tis_chips); | ||
605 | diff --git a/drivers/cpufreq/speedstep-lib.c b/drivers/cpufreq/speedstep-lib.c | ||
606 | index 7047821a7f8a..4ab7a2156672 100644 | ||
607 | --- a/drivers/cpufreq/speedstep-lib.c | ||
608 | +++ b/drivers/cpufreq/speedstep-lib.c | ||
609 | @@ -400,6 +400,7 @@ unsigned int speedstep_get_freqs(enum speedstep_processor processor, | ||
610 | |||
611 | pr_debug("previous speed is %u\n", prev_speed); | ||
612 | |||
613 | + preempt_disable(); | ||
614 | local_irq_save(flags); | ||
615 | |||
616 | /* switch to low state */ | ||
617 | @@ -464,6 +465,8 @@ unsigned int speedstep_get_freqs(enum speedstep_processor processor, | ||
618 | |||
619 | out: | ||
620 | local_irq_restore(flags); | ||
621 | + preempt_enable(); | ||
622 | + | ||
623 | return ret; | ||
624 | } | ||
625 | EXPORT_SYMBOL_GPL(speedstep_get_freqs); | ||
626 | diff --git a/drivers/cpufreq/speedstep-smi.c b/drivers/cpufreq/speedstep-smi.c | ||
627 | index f5a6b70ee6c0..2844009135f8 100644 | ||
628 | --- a/drivers/cpufreq/speedstep-smi.c | ||
629 | +++ b/drivers/cpufreq/speedstep-smi.c | ||
630 | @@ -188,6 +188,7 @@ static void speedstep_set_state(unsigned int state) | ||
631 | return; | ||
632 | |||
633 | /* Disable IRQs */ | ||
634 | + preempt_disable(); | ||
635 | local_irq_save(flags); | ||
636 | |||
637 | command = (smi_sig & 0xffffff00) | (smi_cmd & 0xff); | ||
638 | @@ -198,9 +199,19 @@ static void speedstep_set_state(unsigned int state) | ||
639 | |||
640 | do { | ||
641 | if (retry) { | ||
642 | + /* | ||
643 | + * We need to enable interrupts, otherwise the blockage | ||
644 | + * won't resolve. | ||
645 | + * | ||
646 | + * We disable preemption so that other processes don't | ||
647 | + * run. If other processes were running, they could | ||
648 | + * submit more DMA requests, making the blockage worse. | ||
649 | + */ | ||
650 | pr_debug("retry %u, previous result %u, waiting...\n", | ||
651 | retry, result); | ||
652 | + local_irq_enable(); | ||
653 | mdelay(retry * 50); | ||
654 | + local_irq_disable(); | ||
655 | } | ||
656 | retry++; | ||
657 | __asm__ __volatile__( | ||
658 | @@ -217,6 +228,7 @@ static void speedstep_set_state(unsigned int state) | ||
659 | |||
660 | /* enable IRQs */ | ||
661 | local_irq_restore(flags); | ||
662 | + preempt_enable(); | ||
663 | |||
664 | if (new_state == state) | ||
665 | pr_debug("change to %u MHz succeeded after %u tries " | ||
666 | diff --git a/drivers/gpio/gpio-tps65912.c b/drivers/gpio/gpio-tps65912.c | ||
667 | index 30a5844a7dca..845730469945 100644 | ||
668 | --- a/drivers/gpio/gpio-tps65912.c | ||
669 | +++ b/drivers/gpio/gpio-tps65912.c | ||
670 | @@ -26,9 +26,12 @@ struct tps65912_gpio_data { | ||
671 | struct gpio_chip gpio_chip; | ||
672 | }; | ||
673 | |||
674 | +#define to_tgd(gc) container_of(gc, struct tps65912_gpio_data, gpio_chip) | ||
675 | + | ||
676 | static int tps65912_gpio_get(struct gpio_chip *gc, unsigned offset) | ||
677 | { | ||
678 | - struct tps65912 *tps65912 = container_of(gc, struct tps65912, gpio); | ||
679 | + struct tps65912_gpio_data *tps65912_gpio = to_tgd(gc); | ||
680 | + struct tps65912 *tps65912 = tps65912_gpio->tps65912; | ||
681 | int val; | ||
682 | |||
683 | val = tps65912_reg_read(tps65912, TPS65912_GPIO1 + offset); | ||
684 | @@ -42,7 +45,8 @@ static int tps65912_gpio_get(struct gpio_chip *gc, unsigned offset) | ||
685 | static void tps65912_gpio_set(struct gpio_chip *gc, unsigned offset, | ||
686 | int value) | ||
687 | { | ||
688 | - struct tps65912 *tps65912 = container_of(gc, struct tps65912, gpio); | ||
689 | + struct tps65912_gpio_data *tps65912_gpio = to_tgd(gc); | ||
690 | + struct tps65912 *tps65912 = tps65912_gpio->tps65912; | ||
691 | |||
692 | if (value) | ||
693 | tps65912_set_bits(tps65912, TPS65912_GPIO1 + offset, | ||
694 | @@ -55,7 +59,8 @@ static void tps65912_gpio_set(struct gpio_chip *gc, unsigned offset, | ||
695 | static int tps65912_gpio_output(struct gpio_chip *gc, unsigned offset, | ||
696 | int value) | ||
697 | { | ||
698 | - struct tps65912 *tps65912 = container_of(gc, struct tps65912, gpio); | ||
699 | + struct tps65912_gpio_data *tps65912_gpio = to_tgd(gc); | ||
700 | + struct tps65912 *tps65912 = tps65912_gpio->tps65912; | ||
701 | |||
702 | /* Set the initial value */ | ||
703 | tps65912_gpio_set(gc, offset, value); | ||
704 | @@ -66,7 +71,8 @@ static int tps65912_gpio_output(struct gpio_chip *gc, unsigned offset, | ||
705 | |||
706 | static int tps65912_gpio_input(struct gpio_chip *gc, unsigned offset) | ||
707 | { | ||
708 | - struct tps65912 *tps65912 = container_of(gc, struct tps65912, gpio); | ||
709 | + struct tps65912_gpio_data *tps65912_gpio = to_tgd(gc); | ||
710 | + struct tps65912 *tps65912 = tps65912_gpio->tps65912; | ||
711 | |||
712 | return tps65912_clear_bits(tps65912, TPS65912_GPIO1 + offset, | ||
713 | GPIO_CFG_MASK); | ||
714 | diff --git a/drivers/hid/i2c-hid/i2c-hid.c b/drivers/hid/i2c-hid/i2c-hid.c | ||
715 | index 469daa04dadb..ccc2f36bb334 100644 | ||
716 | --- a/drivers/hid/i2c-hid/i2c-hid.c | ||
717 | +++ b/drivers/hid/i2c-hid/i2c-hid.c | ||
718 | @@ -341,7 +341,10 @@ static int i2c_hid_hwreset(struct i2c_client *client) | ||
719 | static void i2c_hid_get_input(struct i2c_hid *ihid) | ||
720 | { | ||
721 | int ret, ret_size; | ||
722 | - int size = ihid->bufsize; | ||
723 | + int size = le16_to_cpu(ihid->hdesc.wMaxInputLength); | ||
724 | + | ||
725 | + if (size > ihid->bufsize) | ||
726 | + size = ihid->bufsize; | ||
727 | |||
728 | ret = i2c_master_recv(ihid->client, ihid->inbuf, size); | ||
729 | if (ret != size) { | ||
730 | diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c | ||
731 | index e885dbf08c40..86ac4a4ccc01 100644 | ||
732 | --- a/drivers/md/raid1.c | ||
733 | +++ b/drivers/md/raid1.c | ||
734 | @@ -557,7 +557,7 @@ static int read_balance(struct r1conf *conf, struct r1bio *r1_bio, int *max_sect | ||
735 | if (test_bit(WriteMostly, &rdev->flags)) { | ||
736 | /* Don't balance among write-mostly, just | ||
737 | * use the first as a last resort */ | ||
738 | - if (best_disk < 0) { | ||
739 | + if (best_dist_disk < 0) { | ||
740 | if (is_badblock(rdev, this_sector, sectors, | ||
741 | &first_bad, &bad_sectors)) { | ||
742 | if (first_bad < this_sector) | ||
743 | @@ -566,7 +566,8 @@ static int read_balance(struct r1conf *conf, struct r1bio *r1_bio, int *max_sect | ||
744 | best_good_sectors = first_bad - this_sector; | ||
745 | } else | ||
746 | best_good_sectors = sectors; | ||
747 | - best_disk = disk; | ||
748 | + best_dist_disk = disk; | ||
749 | + best_pending_disk = disk; | ||
750 | } | ||
751 | continue; | ||
752 | } | ||
753 | diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c | ||
754 | index 4daf5c03b33b..1b6986ce5da9 100644 | ||
755 | --- a/drivers/md/raid5.c | ||
756 | +++ b/drivers/md/raid5.c | ||
757 | @@ -2853,7 +2853,8 @@ static void handle_stripe_dirtying(struct r5conf *conf, | ||
758 | * generate correct data from the parity. | ||
759 | */ | ||
760 | if (conf->max_degraded == 2 || | ||
761 | - (recovery_cp < MaxSector && sh->sector >= recovery_cp)) { | ||
762 | + (recovery_cp < MaxSector && sh->sector >= recovery_cp && | ||
763 | + s->failed == 0)) { | ||
764 | /* Calculate the real rcw later - for now make it | ||
765 | * look like rcw is cheaper | ||
766 | */ | ||
767 | diff --git a/drivers/media/usb/dvb-usb-v2/lmedm04.c b/drivers/media/usb/dvb-usb-v2/lmedm04.c | ||
768 | index b3fd0ffa3c3f..fc28d514bff0 100644 | ||
769 | --- a/drivers/media/usb/dvb-usb-v2/lmedm04.c | ||
770 | +++ b/drivers/media/usb/dvb-usb-v2/lmedm04.c | ||
771 | @@ -350,6 +350,7 @@ static int lme2510_int_read(struct dvb_usb_adapter *adap) | ||
772 | { | ||
773 | struct dvb_usb_device *d = adap_to_d(adap); | ||
774 | struct lme2510_state *lme_int = adap_to_priv(adap); | ||
775 | + struct usb_host_endpoint *ep; | ||
776 | |||
777 | lme_int->lme_urb = usb_alloc_urb(0, GFP_ATOMIC); | ||
778 | |||
779 | @@ -371,6 +372,12 @@ static int lme2510_int_read(struct dvb_usb_adapter *adap) | ||
780 | adap, | ||
781 | 8); | ||
782 | |||
783 | + /* Quirk of pipe reporting PIPE_BULK but behaves as interrupt */ | ||
784 | + ep = usb_pipe_endpoint(d->udev, lme_int->lme_urb->pipe); | ||
785 | + | ||
786 | + if (usb_endpoint_type(&ep->desc) == USB_ENDPOINT_XFER_BULK) | ||
787 | + lme_int->lme_urb->pipe = usb_rcvbulkpipe(d->udev, 0xa), | ||
788 | + | ||
789 | lme_int->lme_urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP; | ||
790 | |||
791 | usb_submit_urb(lme_int->lme_urb, GFP_ATOMIC); | ||
792 | diff --git a/drivers/mmc/host/sdhci-pxav3.c b/drivers/mmc/host/sdhci-pxav3.c | ||
793 | index 1ae358e0662d..4edb24bf56f8 100644 | ||
794 | --- a/drivers/mmc/host/sdhci-pxav3.c | ||
795 | +++ b/drivers/mmc/host/sdhci-pxav3.c | ||
796 | @@ -201,8 +201,8 @@ static struct sdhci_pxa_platdata *pxav3_get_mmc_pdata(struct device *dev) | ||
797 | if (!pdata) | ||
798 | return NULL; | ||
799 | |||
800 | - of_property_read_u32(np, "mrvl,clk-delay-cycles", &clk_delay_cycles); | ||
801 | - if (clk_delay_cycles > 0) | ||
802 | + if (!of_property_read_u32(np, "mrvl,clk-delay-cycles", | ||
803 | + &clk_delay_cycles)) | ||
804 | pdata->clk_delay_cycles = clk_delay_cycles; | ||
805 | |||
806 | return pdata; | ||
807 | diff --git a/drivers/net/wireless/iwlwifi/mvm/mac80211.c b/drivers/net/wireless/iwlwifi/mvm/mac80211.c | ||
808 | index 88b9c0964696..e6660d692008 100644 | ||
809 | --- a/drivers/net/wireless/iwlwifi/mvm/mac80211.c | ||
810 | +++ b/drivers/net/wireless/iwlwifi/mvm/mac80211.c | ||
811 | @@ -360,9 +360,6 @@ static void iwl_mvm_cleanup_iterator(void *data, u8 *mac, | ||
812 | mvmvif->uploaded = false; | ||
813 | mvmvif->ap_sta_id = IWL_MVM_STATION_COUNT; | ||
814 | |||
815 | - /* does this make sense at all? */ | ||
816 | - mvmvif->color++; | ||
817 | - | ||
818 | spin_lock_bh(&mvm->time_event_lock); | ||
819 | iwl_mvm_te_clear_data(mvm, &mvmvif->time_event_data); | ||
820 | spin_unlock_bh(&mvm->time_event_lock); | ||
821 | @@ -544,7 +541,7 @@ static int iwl_mvm_mac_add_interface(struct ieee80211_hw *hw, | ||
822 | |||
823 | ret = iwl_mvm_mac_ctxt_add(mvm, vif); | ||
824 | if (ret) | ||
825 | - goto out_release; | ||
826 | + goto out_remove_mac; | ||
827 | |||
828 | /* | ||
829 | * Update power state on the new interface. Admittedly, based on | ||
830 | diff --git a/drivers/net/wireless/iwlwifi/mvm/tx.c b/drivers/net/wireless/iwlwifi/mvm/tx.c | ||
831 | index 4ec8385e4307..3dd0e5bfa0fc 100644 | ||
832 | --- a/drivers/net/wireless/iwlwifi/mvm/tx.c | ||
833 | +++ b/drivers/net/wireless/iwlwifi/mvm/tx.c | ||
834 | @@ -832,6 +832,11 @@ int iwl_mvm_rx_ba_notif(struct iwl_mvm *mvm, struct iwl_rx_cmd_buffer *rxb, | ||
835 | sta_id = ba_notif->sta_id; | ||
836 | tid = ba_notif->tid; | ||
837 | |||
838 | + if (WARN_ONCE(sta_id >= IWL_MVM_STATION_COUNT || | ||
839 | + tid >= IWL_MAX_TID_COUNT, | ||
840 | + "sta_id %d tid %d", sta_id, tid)) | ||
841 | + return 0; | ||
842 | + | ||
843 | rcu_read_lock(); | ||
844 | |||
845 | sta = rcu_dereference(mvm->fw_id_to_mac_id[sta_id]); | ||
846 | diff --git a/drivers/net/wireless/iwlwifi/pcie/tx.c b/drivers/net/wireless/iwlwifi/pcie/tx.c | ||
847 | index 48acfc620191..f05962c32497 100644 | ||
848 | --- a/drivers/net/wireless/iwlwifi/pcie/tx.c | ||
849 | +++ b/drivers/net/wireless/iwlwifi/pcie/tx.c | ||
850 | @@ -720,7 +720,12 @@ void iwl_trans_pcie_tx_reset(struct iwl_trans *trans) | ||
851 | iwl_write_direct32(trans, FH_KW_MEM_ADDR_REG, | ||
852 | trans_pcie->kw.dma >> 4); | ||
853 | |||
854 | - iwl_pcie_tx_start(trans, trans_pcie->scd_base_addr); | ||
855 | + /* | ||
856 | + * Send 0 as the scd_base_addr since the device may have be reset | ||
857 | + * while we were in WoWLAN in which case SCD_SRAM_BASE_ADDR will | ||
858 | + * contain garbage. | ||
859 | + */ | ||
860 | + iwl_pcie_tx_start(trans, 0); | ||
861 | } | ||
862 | |||
863 | /* | ||
864 | diff --git a/drivers/pci/pci-driver.c b/drivers/pci/pci-driver.c | ||
865 | index 66aabde82727..5548a13617ab 100644 | ||
866 | --- a/drivers/pci/pci-driver.c | ||
867 | +++ b/drivers/pci/pci-driver.c | ||
868 | @@ -1267,7 +1267,7 @@ static int pci_uevent(struct device *dev, struct kobj_uevent_env *env) | ||
869 | if (add_uevent_var(env, "PCI_SLOT_NAME=%s", pci_name(pdev))) | ||
870 | return -ENOMEM; | ||
871 | |||
872 | - if (add_uevent_var(env, "MODALIAS=pci:v%08Xd%08Xsv%08Xsd%08Xbc%02Xsc%02Xi%02x", | ||
873 | + if (add_uevent_var(env, "MODALIAS=pci:v%08Xd%08Xsv%08Xsd%08Xbc%02Xsc%02Xi%02X", | ||
874 | pdev->vendor, pdev->device, | ||
875 | pdev->subsystem_vendor, pdev->subsystem_device, | ||
876 | (u8)(pdev->class >> 16), (u8)(pdev->class >> 8), | ||
877 | diff --git a/drivers/pci/rom.c b/drivers/pci/rom.c | ||
878 | index c5d0a08a8747..d6d499782fb4 100644 | ||
879 | --- a/drivers/pci/rom.c | ||
880 | +++ b/drivers/pci/rom.c | ||
881 | @@ -69,6 +69,7 @@ size_t pci_get_rom_size(struct pci_dev *pdev, void __iomem *rom, size_t size) | ||
882 | { | ||
883 | void __iomem *image; | ||
884 | int last_image; | ||
885 | + unsigned length; | ||
886 | |||
887 | image = rom; | ||
888 | do { | ||
889 | @@ -91,9 +92,9 @@ size_t pci_get_rom_size(struct pci_dev *pdev, void __iomem *rom, size_t size) | ||
890 | if (readb(pds + 3) != 'R') | ||
891 | break; | ||
892 | last_image = readb(pds + 21) & 0x80; | ||
893 | - /* this length is reliable */ | ||
894 | - image += readw(pds + 16) * 512; | ||
895 | - } while (!last_image); | ||
896 | + length = readw(pds + 16); | ||
897 | + image += length * 512; | ||
898 | + } while (length && !last_image); | ||
899 | |||
900 | /* never return a size larger than the PCI resource window */ | ||
901 | /* there are known ROMs that get the size wrong */ | ||
902 | diff --git a/drivers/power/88pm860x_charger.c b/drivers/power/88pm860x_charger.c | ||
903 | index 36fb4b5a4b0d..1ef35ab79d0f 100644 | ||
904 | --- a/drivers/power/88pm860x_charger.c | ||
905 | +++ b/drivers/power/88pm860x_charger.c | ||
906 | @@ -711,6 +711,7 @@ static int pm860x_charger_probe(struct platform_device *pdev) | ||
907 | return 0; | ||
908 | |||
909 | out_irq: | ||
910 | + power_supply_unregister(&info->usb); | ||
911 | while (--i >= 0) | ||
912 | free_irq(info->irq[i], info); | ||
913 | out: | ||
914 | diff --git a/drivers/target/iscsi/iscsi_target_tq.c b/drivers/target/iscsi/iscsi_target_tq.c | ||
915 | index 81289520f96b..bd53364b75e8 100644 | ||
916 | --- a/drivers/target/iscsi/iscsi_target_tq.c | ||
917 | +++ b/drivers/target/iscsi/iscsi_target_tq.c | ||
918 | @@ -26,36 +26,22 @@ | ||
919 | #include "iscsi_target_tq.h" | ||
920 | #include "iscsi_target.h" | ||
921 | |||
922 | -static LIST_HEAD(active_ts_list); | ||
923 | static LIST_HEAD(inactive_ts_list); | ||
924 | -static DEFINE_SPINLOCK(active_ts_lock); | ||
925 | static DEFINE_SPINLOCK(inactive_ts_lock); | ||
926 | static DEFINE_SPINLOCK(ts_bitmap_lock); | ||
927 | |||
928 | -static void iscsi_add_ts_to_active_list(struct iscsi_thread_set *ts) | ||
929 | -{ | ||
930 | - spin_lock(&active_ts_lock); | ||
931 | - list_add_tail(&ts->ts_list, &active_ts_list); | ||
932 | - iscsit_global->active_ts++; | ||
933 | - spin_unlock(&active_ts_lock); | ||
934 | -} | ||
935 | - | ||
936 | static void iscsi_add_ts_to_inactive_list(struct iscsi_thread_set *ts) | ||
937 | { | ||
938 | + if (!list_empty(&ts->ts_list)) { | ||
939 | + WARN_ON(1); | ||
940 | + return; | ||
941 | + } | ||
942 | spin_lock(&inactive_ts_lock); | ||
943 | list_add_tail(&ts->ts_list, &inactive_ts_list); | ||
944 | iscsit_global->inactive_ts++; | ||
945 | spin_unlock(&inactive_ts_lock); | ||
946 | } | ||
947 | |||
948 | -static void iscsi_del_ts_from_active_list(struct iscsi_thread_set *ts) | ||
949 | -{ | ||
950 | - spin_lock(&active_ts_lock); | ||
951 | - list_del(&ts->ts_list); | ||
952 | - iscsit_global->active_ts--; | ||
953 | - spin_unlock(&active_ts_lock); | ||
954 | -} | ||
955 | - | ||
956 | static struct iscsi_thread_set *iscsi_get_ts_from_inactive_list(void) | ||
957 | { | ||
958 | struct iscsi_thread_set *ts; | ||
959 | @@ -68,7 +54,7 @@ static struct iscsi_thread_set *iscsi_get_ts_from_inactive_list(void) | ||
960 | |||
961 | ts = list_first_entry(&inactive_ts_list, struct iscsi_thread_set, ts_list); | ||
962 | |||
963 | - list_del(&ts->ts_list); | ||
964 | + list_del_init(&ts->ts_list); | ||
965 | iscsit_global->inactive_ts--; | ||
966 | spin_unlock(&inactive_ts_lock); | ||
967 | |||
968 | @@ -219,8 +205,6 @@ static void iscsi_deallocate_extra_thread_sets(void) | ||
969 | |||
970 | void iscsi_activate_thread_set(struct iscsi_conn *conn, struct iscsi_thread_set *ts) | ||
971 | { | ||
972 | - iscsi_add_ts_to_active_list(ts); | ||
973 | - | ||
974 | spin_lock_bh(&ts->ts_state_lock); | ||
975 | conn->thread_set = ts; | ||
976 | ts->conn = conn; | ||
977 | @@ -423,7 +407,6 @@ struct iscsi_conn *iscsi_rx_thread_pre_handler(struct iscsi_thread_set *ts) | ||
978 | |||
979 | if (ts->delay_inactive && (--ts->thread_count == 0)) { | ||
980 | spin_unlock_bh(&ts->ts_state_lock); | ||
981 | - iscsi_del_ts_from_active_list(ts); | ||
982 | |||
983 | if (!iscsit_global->in_shutdown) | ||
984 | iscsi_deallocate_extra_thread_sets(); | ||
985 | @@ -476,7 +459,6 @@ struct iscsi_conn *iscsi_tx_thread_pre_handler(struct iscsi_thread_set *ts) | ||
986 | |||
987 | if (ts->delay_inactive && (--ts->thread_count == 0)) { | ||
988 | spin_unlock_bh(&ts->ts_state_lock); | ||
989 | - iscsi_del_ts_from_active_list(ts); | ||
990 | |||
991 | if (!iscsit_global->in_shutdown) | ||
992 | iscsi_deallocate_extra_thread_sets(); | ||
993 | diff --git a/drivers/tty/pty.c b/drivers/tty/pty.c | ||
994 | index abfd99089781..7cb36813aac2 100644 | ||
995 | --- a/drivers/tty/pty.c | ||
996 | +++ b/drivers/tty/pty.c | ||
997 | @@ -215,6 +215,9 @@ static int pty_signal(struct tty_struct *tty, int sig) | ||
998 | unsigned long flags; | ||
999 | struct pid *pgrp; | ||
1000 | |||
1001 | + if (sig != SIGINT && sig != SIGQUIT && sig != SIGTSTP) | ||
1002 | + return -EINVAL; | ||
1003 | + | ||
1004 | if (tty->link) { | ||
1005 | spin_lock_irqsave(&tty->link->ctrl_lock, flags); | ||
1006 | pgrp = get_pid(tty->link->pgrp); | ||
1007 | diff --git a/drivers/tty/vt/vt.c b/drivers/tty/vt/vt.c | ||
1008 | index 0d1b3757cfb6..db9d69fa1085 100644 | ||
1009 | --- a/drivers/tty/vt/vt.c | ||
1010 | +++ b/drivers/tty/vt/vt.c | ||
1011 | @@ -498,6 +498,7 @@ void invert_screen(struct vc_data *vc, int offset, int count, int viewed) | ||
1012 | #endif | ||
1013 | if (DO_UPDATE(vc)) | ||
1014 | do_update_region(vc, (unsigned long) p, count); | ||
1015 | + notify_update(vc); | ||
1016 | } | ||
1017 | |||
1018 | /* used by selection: complement pointer position */ | ||
1019 | @@ -514,6 +515,7 @@ void complement_pos(struct vc_data *vc, int offset) | ||
1020 | scr_writew(old, screenpos(vc, old_offset, 1)); | ||
1021 | if (DO_UPDATE(vc)) | ||
1022 | vc->vc_sw->con_putc(vc, old, oldy, oldx); | ||
1023 | + notify_update(vc); | ||
1024 | } | ||
1025 | |||
1026 | old_offset = offset; | ||
1027 | @@ -531,8 +533,8 @@ void complement_pos(struct vc_data *vc, int offset) | ||
1028 | oldy = (offset >> 1) / vc->vc_cols; | ||
1029 | vc->vc_sw->con_putc(vc, new, oldy, oldx); | ||
1030 | } | ||
1031 | + notify_update(vc); | ||
1032 | } | ||
1033 | - | ||
1034 | } | ||
1035 | |||
1036 | static void insert_char(struct vc_data *vc, unsigned int nr) | ||
1037 | diff --git a/drivers/usb/core/buffer.c b/drivers/usb/core/buffer.c | ||
1038 | index b0585e623ba9..19fa68a732f3 100644 | ||
1039 | --- a/drivers/usb/core/buffer.c | ||
1040 | +++ b/drivers/usb/core/buffer.c | ||
1041 | @@ -22,17 +22,25 @@ | ||
1042 | */ | ||
1043 | |||
1044 | /* FIXME tune these based on pool statistics ... */ | ||
1045 | -static const size_t pool_max[HCD_BUFFER_POOLS] = { | ||
1046 | - /* platforms without dma-friendly caches might need to | ||
1047 | - * prevent cacheline sharing... | ||
1048 | - */ | ||
1049 | - 32, | ||
1050 | - 128, | ||
1051 | - 512, | ||
1052 | - PAGE_SIZE / 2 | ||
1053 | - /* bigger --> allocate pages */ | ||
1054 | +static size_t pool_max[HCD_BUFFER_POOLS] = { | ||
1055 | + 32, 128, 512, 2048, | ||
1056 | }; | ||
1057 | |||
1058 | +void __init usb_init_pool_max(void) | ||
1059 | +{ | ||
1060 | + /* | ||
1061 | + * The pool_max values must never be smaller than | ||
1062 | + * ARCH_KMALLOC_MINALIGN. | ||
1063 | + */ | ||
1064 | + if (ARCH_KMALLOC_MINALIGN <= 32) | ||
1065 | + ; /* Original value is okay */ | ||
1066 | + else if (ARCH_KMALLOC_MINALIGN <= 64) | ||
1067 | + pool_max[0] = 64; | ||
1068 | + else if (ARCH_KMALLOC_MINALIGN <= 128) | ||
1069 | + pool_max[0] = 0; /* Don't use this pool */ | ||
1070 | + else | ||
1071 | + BUILD_BUG(); /* We don't allow this */ | ||
1072 | +} | ||
1073 | |||
1074 | /* SETUP primitives */ | ||
1075 | |||
1076 | diff --git a/drivers/usb/core/hcd.c b/drivers/usb/core/hcd.c | ||
1077 | index f6e5ceb03afb..cbfd3d14fa5a 100644 | ||
1078 | --- a/drivers/usb/core/hcd.c | ||
1079 | +++ b/drivers/usb/core/hcd.c | ||
1080 | @@ -1593,6 +1593,7 @@ static int unlink1(struct usb_hcd *hcd, struct urb *urb, int status) | ||
1081 | int usb_hcd_unlink_urb (struct urb *urb, int status) | ||
1082 | { | ||
1083 | struct usb_hcd *hcd; | ||
1084 | + struct usb_device *udev = urb->dev; | ||
1085 | int retval = -EIDRM; | ||
1086 | unsigned long flags; | ||
1087 | |||
1088 | @@ -1604,20 +1605,19 @@ int usb_hcd_unlink_urb (struct urb *urb, int status) | ||
1089 | spin_lock_irqsave(&hcd_urb_unlink_lock, flags); | ||
1090 | if (atomic_read(&urb->use_count) > 0) { | ||
1091 | retval = 0; | ||
1092 | - usb_get_dev(urb->dev); | ||
1093 | + usb_get_dev(udev); | ||
1094 | } | ||
1095 | spin_unlock_irqrestore(&hcd_urb_unlink_lock, flags); | ||
1096 | if (retval == 0) { | ||
1097 | hcd = bus_to_hcd(urb->dev->bus); | ||
1098 | retval = unlink1(hcd, urb, status); | ||
1099 | - usb_put_dev(urb->dev); | ||
1100 | + if (retval == 0) | ||
1101 | + retval = -EINPROGRESS; | ||
1102 | + else if (retval != -EIDRM && retval != -EBUSY) | ||
1103 | + dev_dbg(&udev->dev, "hcd_unlink_urb %p fail %d\n", | ||
1104 | + urb, retval); | ||
1105 | + usb_put_dev(udev); | ||
1106 | } | ||
1107 | - | ||
1108 | - if (retval == 0) | ||
1109 | - retval = -EINPROGRESS; | ||
1110 | - else if (retval != -EIDRM && retval != -EBUSY) | ||
1111 | - dev_dbg(&urb->dev->dev, "hcd_unlink_urb %p fail %d\n", | ||
1112 | - urb, retval); | ||
1113 | return retval; | ||
1114 | } | ||
1115 | |||
1116 | diff --git a/drivers/usb/core/usb.c b/drivers/usb/core/usb.c | ||
1117 | index b10da720f2b4..e54b1bdcd66e 100644 | ||
1118 | --- a/drivers/usb/core/usb.c | ||
1119 | +++ b/drivers/usb/core/usb.c | ||
1120 | @@ -1003,6 +1003,7 @@ static int __init usb_init(void) | ||
1121 | pr_info("%s: USB support disabled\n", usbcore_name); | ||
1122 | return 0; | ||
1123 | } | ||
1124 | + usb_init_pool_max(); | ||
1125 | |||
1126 | retval = usb_debugfs_init(); | ||
1127 | if (retval) | ||
1128 | diff --git a/drivers/usb/serial/cp210x.c b/drivers/usb/serial/cp210x.c | ||
1129 | index 8e15acd204ef..f48f5dfab245 100644 | ||
1130 | --- a/drivers/usb/serial/cp210x.c | ||
1131 | +++ b/drivers/usb/serial/cp210x.c | ||
1132 | @@ -56,6 +56,7 @@ static const struct usb_device_id id_table[] = { | ||
1133 | { USB_DEVICE(0x0846, 0x1100) }, /* NetGear Managed Switch M4100 series, M5300 series, M7100 series */ | ||
1134 | { USB_DEVICE(0x08e6, 0x5501) }, /* Gemalto Prox-PU/CU contactless smartcard reader */ | ||
1135 | { USB_DEVICE(0x08FD, 0x000A) }, /* Digianswer A/S , ZigBee/802.15.4 MAC Device */ | ||
1136 | + { USB_DEVICE(0x0908, 0x01FF) }, /* Siemens RUGGEDCOM USB Serial Console */ | ||
1137 | { USB_DEVICE(0x0BED, 0x1100) }, /* MEI (TM) Cashflow-SC Bill/Voucher Acceptor */ | ||
1138 | { USB_DEVICE(0x0BED, 0x1101) }, /* MEI series 2000 Combo Acceptor */ | ||
1139 | { USB_DEVICE(0x0FCF, 0x1003) }, /* Dynastream ANT development board */ | ||
1140 | diff --git a/fs/binfmt_elf.c b/fs/binfmt_elf.c | ||
1141 | index 3aac8e9edac3..3c4d8797ea9a 100644 | ||
1142 | --- a/fs/binfmt_elf.c | ||
1143 | +++ b/fs/binfmt_elf.c | ||
1144 | @@ -552,11 +552,12 @@ out: | ||
1145 | |||
1146 | static unsigned long randomize_stack_top(unsigned long stack_top) | ||
1147 | { | ||
1148 | - unsigned int random_variable = 0; | ||
1149 | + unsigned long random_variable = 0; | ||
1150 | |||
1151 | if ((current->flags & PF_RANDOMIZE) && | ||
1152 | !(current->personality & ADDR_NO_RANDOMIZE)) { | ||
1153 | - random_variable = get_random_int() & STACK_RND_MASK; | ||
1154 | + random_variable = (unsigned long) get_random_int(); | ||
1155 | + random_variable &= STACK_RND_MASK; | ||
1156 | random_variable <<= PAGE_SHIFT; | ||
1157 | } | ||
1158 | #ifdef CONFIG_STACK_GROWSUP | ||
1159 | diff --git a/fs/jffs2/scan.c b/fs/jffs2/scan.c | ||
1160 | index 7654e87b0428..9ad5ba4b299b 100644 | ||
1161 | --- a/fs/jffs2/scan.c | ||
1162 | +++ b/fs/jffs2/scan.c | ||
1163 | @@ -510,6 +510,10 @@ static int jffs2_scan_eraseblock (struct jffs2_sb_info *c, struct jffs2_eraseblo | ||
1164 | sumlen = c->sector_size - je32_to_cpu(sm->offset); | ||
1165 | sumptr = buf + buf_size - sumlen; | ||
1166 | |||
1167 | + /* sm->offset maybe wrong but MAGIC maybe right */ | ||
1168 | + if (sumlen > c->sector_size) | ||
1169 | + goto full_scan; | ||
1170 | + | ||
1171 | /* Now, make sure the summary itself is available */ | ||
1172 | if (sumlen > buf_size) { | ||
1173 | /* Need to kmalloc for this. */ | ||
1174 | @@ -544,6 +548,7 @@ static int jffs2_scan_eraseblock (struct jffs2_sb_info *c, struct jffs2_eraseblo | ||
1175 | } | ||
1176 | } | ||
1177 | |||
1178 | +full_scan: | ||
1179 | buf_ofs = jeb->offset; | ||
1180 | |||
1181 | if (!buf_size) { | ||
1182 | diff --git a/fs/nfs/callback.c b/fs/nfs/callback.c | ||
1183 | index cff089a412c7..e05c96ebb27d 100644 | ||
1184 | --- a/fs/nfs/callback.c | ||
1185 | +++ b/fs/nfs/callback.c | ||
1186 | @@ -128,22 +128,24 @@ nfs41_callback_svc(void *vrqstp) | ||
1187 | if (try_to_freeze()) | ||
1188 | continue; | ||
1189 | |||
1190 | - prepare_to_wait(&serv->sv_cb_waitq, &wq, TASK_INTERRUPTIBLE); | ||
1191 | + prepare_to_wait(&serv->sv_cb_waitq, &wq, TASK_UNINTERRUPTIBLE); | ||
1192 | spin_lock_bh(&serv->sv_cb_lock); | ||
1193 | if (!list_empty(&serv->sv_cb_list)) { | ||
1194 | req = list_first_entry(&serv->sv_cb_list, | ||
1195 | struct rpc_rqst, rq_bc_list); | ||
1196 | list_del(&req->rq_bc_list); | ||
1197 | spin_unlock_bh(&serv->sv_cb_lock); | ||
1198 | + finish_wait(&serv->sv_cb_waitq, &wq); | ||
1199 | dprintk("Invoking bc_svc_process()\n"); | ||
1200 | error = bc_svc_process(serv, req, rqstp); | ||
1201 | dprintk("bc_svc_process() returned w/ error code= %d\n", | ||
1202 | error); | ||
1203 | } else { | ||
1204 | spin_unlock_bh(&serv->sv_cb_lock); | ||
1205 | - schedule(); | ||
1206 | + /* schedule_timeout to game the hung task watchdog */ | ||
1207 | + schedule_timeout(60 * HZ); | ||
1208 | + finish_wait(&serv->sv_cb_waitq, &wq); | ||
1209 | } | ||
1210 | - finish_wait(&serv->sv_cb_waitq, &wq); | ||
1211 | } | ||
1212 | return 0; | ||
1213 | } | ||
1214 | diff --git a/fs/nfs/callback_xdr.c b/fs/nfs/callback_xdr.c | ||
1215 | index a35582c9d444..e98ecf8d2588 100644 | ||
1216 | --- a/fs/nfs/callback_xdr.c | ||
1217 | +++ b/fs/nfs/callback_xdr.c | ||
1218 | @@ -464,8 +464,10 @@ static __be32 decode_cb_sequence_args(struct svc_rqst *rqstp, | ||
1219 | |||
1220 | for (i = 0; i < args->csa_nrclists; i++) { | ||
1221 | status = decode_rc_list(xdr, &args->csa_rclists[i]); | ||
1222 | - if (status) | ||
1223 | + if (status) { | ||
1224 | + args->csa_nrclists = i; | ||
1225 | goto out_free; | ||
1226 | + } | ||
1227 | } | ||
1228 | } | ||
1229 | status = 0; | ||
1230 | diff --git a/fs/xfs/xfs_buf_item.c b/fs/xfs/xfs_buf_item.c | ||
1231 | index 4ec431777048..e0451f4201cf 100644 | ||
1232 | --- a/fs/xfs/xfs_buf_item.c | ||
1233 | +++ b/fs/xfs/xfs_buf_item.c | ||
1234 | @@ -296,6 +296,10 @@ xfs_buf_item_format( | ||
1235 | ASSERT(atomic_read(&bip->bli_refcount) > 0); | ||
1236 | ASSERT((bip->bli_flags & XFS_BLI_LOGGED) || | ||
1237 | (bip->bli_flags & XFS_BLI_STALE)); | ||
1238 | + ASSERT((bip->bli_flags & XFS_BLI_STALE) || | ||
1239 | + (xfs_blft_from_flags(&bip->__bli_format) > XFS_BLFT_UNKNOWN_BUF | ||
1240 | + && xfs_blft_from_flags(&bip->__bli_format) < XFS_BLFT_MAX_BUF)); | ||
1241 | + | ||
1242 | |||
1243 | /* | ||
1244 | * If it is an inode buffer, transfer the in-memory state to the | ||
1245 | diff --git a/fs/xfs/xfs_inode.c b/fs/xfs/xfs_inode.c | ||
1246 | index 7f7be5f98f52..f010ab4594f1 100644 | ||
1247 | --- a/fs/xfs/xfs_inode.c | ||
1248 | +++ b/fs/xfs/xfs_inode.c | ||
1249 | @@ -1655,6 +1655,7 @@ xfs_iunlink( | ||
1250 | agi->agi_unlinked[bucket_index] = cpu_to_be32(agino); | ||
1251 | offset = offsetof(xfs_agi_t, agi_unlinked) + | ||
1252 | (sizeof(xfs_agino_t) * bucket_index); | ||
1253 | + xfs_trans_buf_set_type(tp, agibp, XFS_BLFT_AGI_BUF); | ||
1254 | xfs_trans_log_buf(tp, agibp, offset, | ||
1255 | (offset + sizeof(xfs_agino_t) - 1)); | ||
1256 | return 0; | ||
1257 | @@ -1746,6 +1747,7 @@ xfs_iunlink_remove( | ||
1258 | agi->agi_unlinked[bucket_index] = cpu_to_be32(next_agino); | ||
1259 | offset = offsetof(xfs_agi_t, agi_unlinked) + | ||
1260 | (sizeof(xfs_agino_t) * bucket_index); | ||
1261 | + xfs_trans_buf_set_type(tp, agibp, XFS_BLFT_AGI_BUF); | ||
1262 | xfs_trans_log_buf(tp, agibp, offset, | ||
1263 | (offset + sizeof(xfs_agino_t) - 1)); | ||
1264 | } else { | ||
1265 | diff --git a/fs/xfs/xfs_trans.c b/fs/xfs/xfs_trans.c | ||
1266 | index 2fd7c1ff1d21..b5d5beb7df3a 100644 | ||
1267 | --- a/fs/xfs/xfs_trans.c | ||
1268 | +++ b/fs/xfs/xfs_trans.c | ||
1269 | @@ -1100,6 +1100,7 @@ xfs_trans_apply_sb_deltas( | ||
1270 | whole = 1; | ||
1271 | } | ||
1272 | |||
1273 | + xfs_trans_buf_set_type(tp, bp, XFS_BLFT_SB_BUF); | ||
1274 | if (whole) | ||
1275 | /* | ||
1276 | * Log the whole thing, the fields are noncontiguous. | ||
1277 | diff --git a/include/linux/fsnotify.h b/include/linux/fsnotify.h | ||
1278 | index a78680a92dba..661c0aeef1c4 100644 | ||
1279 | --- a/include/linux/fsnotify.h | ||
1280 | +++ b/include/linux/fsnotify.h | ||
1281 | @@ -101,8 +101,10 @@ static inline void fsnotify_move(struct inode *old_dir, struct inode *new_dir, | ||
1282 | new_dir_mask |= FS_ISDIR; | ||
1283 | } | ||
1284 | |||
1285 | - fsnotify(old_dir, old_dir_mask, old_dir, FSNOTIFY_EVENT_INODE, old_name, fs_cookie); | ||
1286 | - fsnotify(new_dir, new_dir_mask, new_dir, FSNOTIFY_EVENT_INODE, new_name, fs_cookie); | ||
1287 | + fsnotify(old_dir, old_dir_mask, source, FSNOTIFY_EVENT_INODE, old_name, | ||
1288 | + fs_cookie); | ||
1289 | + fsnotify(new_dir, new_dir_mask, source, FSNOTIFY_EVENT_INODE, new_name, | ||
1290 | + fs_cookie); | ||
1291 | |||
1292 | if (target) | ||
1293 | fsnotify_link_count(target); | ||
1294 | diff --git a/include/linux/usb/hcd.h b/include/linux/usb/hcd.h | ||
1295 | index 0fdff28d5015..287b906f5d59 100644 | ||
1296 | --- a/include/linux/usb/hcd.h | ||
1297 | +++ b/include/linux/usb/hcd.h | ||
1298 | @@ -416,6 +416,7 @@ extern const struct dev_pm_ops usb_hcd_pci_pm_ops; | ||
1299 | #endif /* CONFIG_PCI */ | ||
1300 | |||
1301 | /* pci-ish (pdev null is ok) buffer alloc/mapping support */ | ||
1302 | +void usb_init_pool_max(void); | ||
1303 | int hcd_buffer_create(struct usb_hcd *hcd); | ||
1304 | void hcd_buffer_destroy(struct usb_hcd *hcd); | ||
1305 | |||
1306 | diff --git a/kernel/debug/kdb/kdb_main.c b/kernel/debug/kdb/kdb_main.c | ||
1307 | index 00eb8f7fbf41..545241de23bf 100644 | ||
1308 | --- a/kernel/debug/kdb/kdb_main.c | ||
1309 | +++ b/kernel/debug/kdb/kdb_main.c | ||
1310 | @@ -2532,7 +2532,7 @@ static int kdb_summary(int argc, const char **argv) | ||
1311 | #define K(x) ((x) << (PAGE_SHIFT - 10)) | ||
1312 | kdb_printf("\nMemTotal: %8lu kB\nMemFree: %8lu kB\n" | ||
1313 | "Buffers: %8lu kB\n", | ||
1314 | - val.totalram, val.freeram, val.bufferram); | ||
1315 | + K(val.totalram), K(val.freeram), K(val.bufferram)); | ||
1316 | return 0; | ||
1317 | } | ||
1318 | |||
1319 | diff --git a/kernel/time/ntp.c b/kernel/time/ntp.c | ||
1320 | index 28db9bedc857..6211d5d6d465 100644 | ||
1321 | --- a/kernel/time/ntp.c | ||
1322 | +++ b/kernel/time/ntp.c | ||
1323 | @@ -631,10 +631,14 @@ int ntp_validate_timex(struct timex *txc) | ||
1324 | if ((txc->modes & ADJ_SETOFFSET) && (!capable(CAP_SYS_TIME))) | ||
1325 | return -EPERM; | ||
1326 | |||
1327 | - if (txc->modes & ADJ_FREQUENCY) { | ||
1328 | - if (LONG_MIN / PPM_SCALE > txc->freq) | ||
1329 | + /* | ||
1330 | + * Check for potential multiplication overflows that can | ||
1331 | + * only happen on 64-bit systems: | ||
1332 | + */ | ||
1333 | + if ((txc->modes & ADJ_FREQUENCY) && (BITS_PER_LONG == 64)) { | ||
1334 | + if (LLONG_MIN / PPM_SCALE > txc->freq) | ||
1335 | return -EINVAL; | ||
1336 | - if (LONG_MAX / PPM_SCALE < txc->freq) | ||
1337 | + if (LLONG_MAX / PPM_SCALE < txc->freq) | ||
1338 | return -EINVAL; | ||
1339 | } | ||
1340 | |||
1341 | diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c | ||
1342 | index 18cdf91b2f85..8d7e8098e768 100644 | ||
1343 | --- a/kernel/trace/trace.c | ||
1344 | +++ b/kernel/trace/trace.c | ||
1345 | @@ -4588,7 +4588,7 @@ tracing_mark_write(struct file *filp, const char __user *ubuf, | ||
1346 | *fpos += written; | ||
1347 | |||
1348 | out_unlock: | ||
1349 | - for (i = 0; i < nr_pages; i++){ | ||
1350 | + for (i = nr_pages - 1; i >= 0; i--) { | ||
1351 | kunmap_atomic(map_page[i]); | ||
1352 | put_page(pages[i]); | ||
1353 | } | ||
1354 | diff --git a/net/ceph/osd_client.c b/net/ceph/osd_client.c | ||
1355 | index 3663a305daf7..1b51d9216e7e 100644 | ||
1356 | --- a/net/ceph/osd_client.c | ||
1357 | +++ b/net/ceph/osd_client.c | ||
1358 | @@ -967,12 +967,24 @@ static void put_osd(struct ceph_osd *osd) | ||
1359 | */ | ||
1360 | static void __remove_osd(struct ceph_osd_client *osdc, struct ceph_osd *osd) | ||
1361 | { | ||
1362 | - dout("__remove_osd %p\n", osd); | ||
1363 | - BUG_ON(!list_empty(&osd->o_requests)); | ||
1364 | - rb_erase(&osd->o_node, &osdc->osds); | ||
1365 | + dout("%s %p osd%d\n", __func__, osd, osd->o_osd); | ||
1366 | + WARN_ON(!list_empty(&osd->o_requests)); | ||
1367 | + WARN_ON(!list_empty(&osd->o_linger_requests)); | ||
1368 | + | ||
1369 | list_del_init(&osd->o_osd_lru); | ||
1370 | - ceph_con_close(&osd->o_con); | ||
1371 | - put_osd(osd); | ||
1372 | + rb_erase(&osd->o_node, &osdc->osds); | ||
1373 | + RB_CLEAR_NODE(&osd->o_node); | ||
1374 | +} | ||
1375 | + | ||
1376 | +static void remove_osd(struct ceph_osd_client *osdc, struct ceph_osd *osd) | ||
1377 | +{ | ||
1378 | + dout("%s %p osd%d\n", __func__, osd, osd->o_osd); | ||
1379 | + | ||
1380 | + if (!RB_EMPTY_NODE(&osd->o_node)) { | ||
1381 | + ceph_con_close(&osd->o_con); | ||
1382 | + __remove_osd(osdc, osd); | ||
1383 | + put_osd(osd); | ||
1384 | + } | ||
1385 | } | ||
1386 | |||
1387 | static void remove_all_osds(struct ceph_osd_client *osdc) | ||
1388 | @@ -982,7 +994,7 @@ static void remove_all_osds(struct ceph_osd_client *osdc) | ||
1389 | while (!RB_EMPTY_ROOT(&osdc->osds)) { | ||
1390 | struct ceph_osd *osd = rb_entry(rb_first(&osdc->osds), | ||
1391 | struct ceph_osd, o_node); | ||
1392 | - __remove_osd(osdc, osd); | ||
1393 | + remove_osd(osdc, osd); | ||
1394 | } | ||
1395 | mutex_unlock(&osdc->request_mutex); | ||
1396 | } | ||
1397 | @@ -1012,7 +1024,7 @@ static void remove_old_osds(struct ceph_osd_client *osdc) | ||
1398 | list_for_each_entry_safe(osd, nosd, &osdc->osd_lru, o_osd_lru) { | ||
1399 | if (time_before(jiffies, osd->lru_ttl)) | ||
1400 | break; | ||
1401 | - __remove_osd(osdc, osd); | ||
1402 | + remove_osd(osdc, osd); | ||
1403 | } | ||
1404 | mutex_unlock(&osdc->request_mutex); | ||
1405 | } | ||
1406 | @@ -1027,8 +1039,7 @@ static int __reset_osd(struct ceph_osd_client *osdc, struct ceph_osd *osd) | ||
1407 | dout("__reset_osd %p osd%d\n", osd, osd->o_osd); | ||
1408 | if (list_empty(&osd->o_requests) && | ||
1409 | list_empty(&osd->o_linger_requests)) { | ||
1410 | - __remove_osd(osdc, osd); | ||
1411 | - | ||
1412 | + remove_osd(osdc, osd); | ||
1413 | return -ENODEV; | ||
1414 | } | ||
1415 | |||
1416 | @@ -1610,6 +1621,7 @@ static void reset_changed_osds(struct ceph_osd_client *osdc) | ||
1417 | { | ||
1418 | struct rb_node *p, *n; | ||
1419 | |||
1420 | + dout("%s %p\n", __func__, osdc); | ||
1421 | for (p = rb_first(&osdc->osds); p; p = n) { | ||
1422 | struct ceph_osd *osd = rb_entry(p, struct ceph_osd, o_node); | ||
1423 | |||
1424 | diff --git a/sound/pci/riptide/riptide.c b/sound/pci/riptide/riptide.c | ||
1425 | index 63c1c8041554..fa66ba30470e 100644 | ||
1426 | --- a/sound/pci/riptide/riptide.c | ||
1427 | +++ b/sound/pci/riptide/riptide.c | ||
1428 | @@ -2032,32 +2032,43 @@ snd_riptide_joystick_probe(struct pci_dev *pci, const struct pci_device_id *id) | ||
1429 | { | ||
1430 | static int dev; | ||
1431 | struct gameport *gameport; | ||
1432 | + int ret; | ||
1433 | |||
1434 | if (dev >= SNDRV_CARDS) | ||
1435 | return -ENODEV; | ||
1436 | + | ||
1437 | if (!enable[dev]) { | ||
1438 | - dev++; | ||
1439 | - return -ENOENT; | ||
1440 | + ret = -ENOENT; | ||
1441 | + goto inc_dev; | ||
1442 | } | ||
1443 | |||
1444 | - if (!joystick_port[dev++]) | ||
1445 | - return 0; | ||
1446 | + if (!joystick_port[dev]) { | ||
1447 | + ret = 0; | ||
1448 | + goto inc_dev; | ||
1449 | + } | ||
1450 | |||
1451 | gameport = gameport_allocate_port(); | ||
1452 | - if (!gameport) | ||
1453 | - return -ENOMEM; | ||
1454 | + if (!gameport) { | ||
1455 | + ret = -ENOMEM; | ||
1456 | + goto inc_dev; | ||
1457 | + } | ||
1458 | if (!request_region(joystick_port[dev], 8, "Riptide gameport")) { | ||
1459 | snd_printk(KERN_WARNING | ||
1460 | "Riptide: cannot grab gameport 0x%x\n", | ||
1461 | joystick_port[dev]); | ||
1462 | gameport_free_port(gameport); | ||
1463 | - return -EBUSY; | ||
1464 | + ret = -EBUSY; | ||
1465 | + goto inc_dev; | ||
1466 | } | ||
1467 | |||
1468 | gameport->io = joystick_port[dev]; | ||
1469 | gameport_register_port(gameport); | ||
1470 | pci_set_drvdata(pci, gameport); | ||
1471 | - return 0; | ||
1472 | + | ||
1473 | + ret = 0; | ||
1474 | +inc_dev: | ||
1475 | + dev++; | ||
1476 | + return ret; | ||
1477 | } | ||
1478 | |||
1479 | static void snd_riptide_joystick_remove(struct pci_dev *pci) | ||
1480 | diff --git a/sound/pci/rme9652/hdspm.c b/sound/pci/rme9652/hdspm.c | ||
1481 | index 9ea05e956474..dd910d249987 100644 | ||
1482 | --- a/sound/pci/rme9652/hdspm.c | ||
1483 | +++ b/sound/pci/rme9652/hdspm.c | ||
1484 | @@ -5789,6 +5789,9 @@ static int snd_hdspm_playback_open(struct snd_pcm_substream *substream) | ||
1485 | snd_pcm_hw_constraint_minmax(runtime, | ||
1486 | SNDRV_PCM_HW_PARAM_PERIOD_SIZE, | ||
1487 | 64, 8192); | ||
1488 | + snd_pcm_hw_constraint_minmax(runtime, | ||
1489 | + SNDRV_PCM_HW_PARAM_PERIODS, | ||
1490 | + 2, 2); | ||
1491 | break; | ||
1492 | } | ||
1493 | |||
1494 | @@ -5863,6 +5866,9 @@ static int snd_hdspm_capture_open(struct snd_pcm_substream *substream) | ||
1495 | snd_pcm_hw_constraint_minmax(runtime, | ||
1496 | SNDRV_PCM_HW_PARAM_PERIOD_SIZE, | ||
1497 | 64, 8192); | ||
1498 | + snd_pcm_hw_constraint_minmax(runtime, | ||
1499 | + SNDRV_PCM_HW_PARAM_PERIODS, | ||
1500 | + 2, 2); | ||
1501 | break; | ||
1502 | } | ||
1503 |