Magellan Linux

Contents of /trunk/kernel-alx/patches-3.10/0170-3.10.71-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2658 - (show annotations) (download)
Tue Jul 21 16:20:23 2015 UTC (8 years, 9 months ago) by niro
File size: 49394 byte(s)
-linux-3.10.71
1 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