Magellan Linux

Annotation of /trunk/kernel-lts/patches-3.4/0135-3.4.36-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2119 - (hide annotations) (download)
Mon Mar 18 13:00:55 2013 UTC (11 years, 3 months ago) by niro
File size: 42160 byte(s)
-linux-3.4.36
1 niro 2119 diff --git a/arch/arm/kernel/perf_event_v7.c b/arch/arm/kernel/perf_event_v7.c
2     index 00755d8..7deaa7f 100644
3     --- a/arch/arm/kernel/perf_event_v7.c
4     +++ b/arch/arm/kernel/perf_event_v7.c
5     @@ -775,7 +775,7 @@ static const unsigned armv7_a7_perf_cache_map[PERF_COUNT_HW_CACHE_MAX]
6     /*
7     * PMXEVTYPER: Event selection reg
8     */
9     -#define ARMV7_EVTYPE_MASK 0xc00000ff /* Mask for writable bits */
10     +#define ARMV7_EVTYPE_MASK 0xc80000ff /* Mask for writable bits */
11     #define ARMV7_EVTYPE_EVENT 0xff /* Mask for EVENT bits */
12    
13     /*
14     diff --git a/arch/arm/mm/alignment.c b/arch/arm/mm/alignment.c
15     index 9107231..fc000e3 100644
16     --- a/arch/arm/mm/alignment.c
17     +++ b/arch/arm/mm/alignment.c
18     @@ -750,7 +750,6 @@ do_alignment(unsigned long addr, unsigned int fsr, struct pt_regs *regs)
19     unsigned long instr = 0, instrptr;
20     int (*handler)(unsigned long addr, unsigned long instr, struct pt_regs *regs);
21     unsigned int type;
22     - mm_segment_t fs;
23     unsigned int fault;
24     u16 tinstr = 0;
25     int isize = 4;
26     @@ -761,16 +760,15 @@ do_alignment(unsigned long addr, unsigned int fsr, struct pt_regs *regs)
27    
28     instrptr = instruction_pointer(regs);
29    
30     - fs = get_fs();
31     - set_fs(KERNEL_DS);
32     if (thumb_mode(regs)) {
33     - fault = __get_user(tinstr, (u16 *)(instrptr & ~1));
34     + u16 *ptr = (u16 *)(instrptr & ~1);
35     + fault = probe_kernel_address(ptr, tinstr);
36     if (!fault) {
37     if (cpu_architecture() >= CPU_ARCH_ARMv7 &&
38     IS_T32(tinstr)) {
39     /* Thumb-2 32-bit */
40     u16 tinst2 = 0;
41     - fault = __get_user(tinst2, (u16 *)(instrptr+2));
42     + fault = probe_kernel_address(ptr + 1, tinst2);
43     instr = (tinstr << 16) | tinst2;
44     thumb2_32b = 1;
45     } else {
46     @@ -779,8 +777,7 @@ do_alignment(unsigned long addr, unsigned int fsr, struct pt_regs *regs)
47     }
48     }
49     } else
50     - fault = __get_user(instr, (u32 *)instrptr);
51     - set_fs(fs);
52     + fault = probe_kernel_address(instrptr, instr);
53    
54     if (fault) {
55     type = TYPE_FAULT;
56     diff --git a/arch/arm/vfp/vfpmodule.c b/arch/arm/vfp/vfpmodule.c
57     index 3b36062..eede545 100644
58     --- a/arch/arm/vfp/vfpmodule.c
59     +++ b/arch/arm/vfp/vfpmodule.c
60     @@ -413,7 +413,7 @@ void VFP_bounce(u32 trigger, u32 fpexc, struct pt_regs *regs)
61     * If there isn't a second FP instruction, exit now. Note that
62     * the FPEXC.FP2V bit is valid only if FPEXC.EX is 1.
63     */
64     - if (fpexc ^ (FPEXC_EX | FPEXC_FP2V))
65     + if ((fpexc & (FPEXC_EX | FPEXC_FP2V)) != (FPEXC_EX | FPEXC_FP2V))
66     goto exit;
67    
68     /*
69     diff --git a/arch/x86/pci/xen.c b/arch/x86/pci/xen.c
70     index 56ab749..94e7662 100644
71     --- a/arch/x86/pci/xen.c
72     +++ b/arch/x86/pci/xen.c
73     @@ -162,6 +162,9 @@ static int xen_setup_msi_irqs(struct pci_dev *dev, int nvec, int type)
74     struct msi_desc *msidesc;
75     int *v;
76    
77     + if (type == PCI_CAP_ID_MSI && nvec > 1)
78     + return 1;
79     +
80     v = kzalloc(sizeof(int) * max(1, nvec), GFP_KERNEL);
81     if (!v)
82     return -ENOMEM;
83     @@ -220,6 +223,9 @@ static int xen_hvm_setup_msi_irqs(struct pci_dev *dev, int nvec, int type)
84     struct msi_desc *msidesc;
85     struct msi_msg msg;
86    
87     + if (type == PCI_CAP_ID_MSI && nvec > 1)
88     + return 1;
89     +
90     list_for_each_entry(msidesc, &dev->msi_list, list) {
91     __read_msi_msg(msidesc, &msg);
92     pirq = MSI_ADDR_EXT_DEST_ID(msg.address_hi) |
93     @@ -263,6 +269,9 @@ static int xen_initdom_setup_msi_irqs(struct pci_dev *dev, int nvec, int type)
94     int ret = 0;
95     struct msi_desc *msidesc;
96    
97     + if (type == PCI_CAP_ID_MSI && nvec > 1)
98     + return 1;
99     +
100     list_for_each_entry(msidesc, &dev->msi_list, list) {
101     struct physdev_map_pirq map_irq;
102     domid_t domid;
103     diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c
104     index 5910054..194dbcd 100644
105     --- a/arch/x86/xen/enlighten.c
106     +++ b/arch/x86/xen/enlighten.c
107     @@ -64,6 +64,7 @@
108     #include <asm/hypervisor.h>
109     #include <asm/mwait.h>
110     #include <asm/pci_x86.h>
111     +#include <asm/pat.h>
112    
113     #ifdef CONFIG_ACPI
114     #include <linux/acpi.h>
115     @@ -1355,7 +1356,14 @@ asmlinkage void __init xen_start_kernel(void)
116     */
117     acpi_numa = -1;
118     #endif
119     -
120     +#ifdef CONFIG_X86_PAT
121     + /*
122     + * For right now disable the PAT. We should remove this once
123     + * git commit 8eaffa67b43e99ae581622c5133e20b0f48bcef1
124     + * (xen/pat: Disable PAT support for now) is reverted.
125     + */
126     + pat_enabled = 0;
127     +#endif
128     pgd = (pgd_t *)xen_start_info->pt_base;
129    
130     /* Don't do the full vcpu_info placement stuff until we have a
131     diff --git a/crypto/ablkcipher.c b/crypto/ablkcipher.c
132     index 8d3a056..45fe410 100644
133     --- a/crypto/ablkcipher.c
134     +++ b/crypto/ablkcipher.c
135     @@ -388,9 +388,9 @@ static int crypto_ablkcipher_report(struct sk_buff *skb, struct crypto_alg *alg)
136     {
137     struct crypto_report_blkcipher rblkcipher;
138    
139     - snprintf(rblkcipher.type, CRYPTO_MAX_ALG_NAME, "%s", "ablkcipher");
140     - snprintf(rblkcipher.geniv, CRYPTO_MAX_ALG_NAME, "%s",
141     - alg->cra_ablkcipher.geniv ?: "<default>");
142     + strncpy(rblkcipher.type, "ablkcipher", sizeof(rblkcipher.type));
143     + strncpy(rblkcipher.geniv, alg->cra_ablkcipher.geniv ?: "<default>",
144     + sizeof(rblkcipher.geniv));
145    
146     rblkcipher.blocksize = alg->cra_blocksize;
147     rblkcipher.min_keysize = alg->cra_ablkcipher.min_keysize;
148     @@ -469,9 +469,9 @@ static int crypto_givcipher_report(struct sk_buff *skb, struct crypto_alg *alg)
149     {
150     struct crypto_report_blkcipher rblkcipher;
151    
152     - snprintf(rblkcipher.type, CRYPTO_MAX_ALG_NAME, "%s", "givcipher");
153     - snprintf(rblkcipher.geniv, CRYPTO_MAX_ALG_NAME, "%s",
154     - alg->cra_ablkcipher.geniv ?: "<built-in>");
155     + strncpy(rblkcipher.type, "givcipher", sizeof(rblkcipher.type));
156     + strncpy(rblkcipher.geniv, alg->cra_ablkcipher.geniv ?: "<built-in>",
157     + sizeof(rblkcipher.geniv));
158    
159     rblkcipher.blocksize = alg->cra_blocksize;
160     rblkcipher.min_keysize = alg->cra_ablkcipher.min_keysize;
161     diff --git a/crypto/aead.c b/crypto/aead.c
162     index e4cb351..c706d74 100644
163     --- a/crypto/aead.c
164     +++ b/crypto/aead.c
165     @@ -117,9 +117,8 @@ static int crypto_aead_report(struct sk_buff *skb, struct crypto_alg *alg)
166     struct crypto_report_aead raead;
167     struct aead_alg *aead = &alg->cra_aead;
168    
169     - snprintf(raead.type, CRYPTO_MAX_ALG_NAME, "%s", "aead");
170     - snprintf(raead.geniv, CRYPTO_MAX_ALG_NAME, "%s",
171     - aead->geniv ?: "<built-in>");
172     + strncpy(raead.type, "aead", sizeof(raead.type));
173     + strncpy(raead.geniv, aead->geniv ?: "<built-in>", sizeof(raead.geniv));
174    
175     raead.blocksize = alg->cra_blocksize;
176     raead.maxauthsize = aead->maxauthsize;
177     @@ -203,8 +202,8 @@ static int crypto_nivaead_report(struct sk_buff *skb, struct crypto_alg *alg)
178     struct crypto_report_aead raead;
179     struct aead_alg *aead = &alg->cra_aead;
180    
181     - snprintf(raead.type, CRYPTO_MAX_ALG_NAME, "%s", "nivaead");
182     - snprintf(raead.geniv, CRYPTO_MAX_ALG_NAME, "%s", aead->geniv);
183     + strncpy(raead.type, "nivaead", sizeof(raead.type));
184     + strncpy(raead.geniv, aead->geniv, sizeof(raead.geniv));
185    
186     raead.blocksize = alg->cra_blocksize;
187     raead.maxauthsize = aead->maxauthsize;
188     diff --git a/crypto/ahash.c b/crypto/ahash.c
189     index 33bc9b6..0ec05fe 100644
190     --- a/crypto/ahash.c
191     +++ b/crypto/ahash.c
192     @@ -404,7 +404,7 @@ static int crypto_ahash_report(struct sk_buff *skb, struct crypto_alg *alg)
193     {
194     struct crypto_report_hash rhash;
195    
196     - snprintf(rhash.type, CRYPTO_MAX_ALG_NAME, "%s", "ahash");
197     + strncpy(rhash.type, "ahash", sizeof(rhash.type));
198    
199     rhash.blocksize = alg->cra_blocksize;
200     rhash.digestsize = __crypto_hash_alg_common(alg)->digestsize;
201     diff --git a/crypto/blkcipher.c b/crypto/blkcipher.c
202     index 4dd80c7..0a1ebea 100644
203     --- a/crypto/blkcipher.c
204     +++ b/crypto/blkcipher.c
205     @@ -499,9 +499,9 @@ static int crypto_blkcipher_report(struct sk_buff *skb, struct crypto_alg *alg)
206     {
207     struct crypto_report_blkcipher rblkcipher;
208    
209     - snprintf(rblkcipher.type, CRYPTO_MAX_ALG_NAME, "%s", "blkcipher");
210     - snprintf(rblkcipher.geniv, CRYPTO_MAX_ALG_NAME, "%s",
211     - alg->cra_blkcipher.geniv ?: "<default>");
212     + strncpy(rblkcipher.type, "blkcipher", sizeof(rblkcipher.type));
213     + strncpy(rblkcipher.geniv, alg->cra_blkcipher.geniv ?: "<default>",
214     + sizeof(rblkcipher.geniv));
215    
216     rblkcipher.blocksize = alg->cra_blocksize;
217     rblkcipher.min_keysize = alg->cra_blkcipher.min_keysize;
218     diff --git a/crypto/crypto_user.c b/crypto/crypto_user.c
219     index f1ea0a0..910497b 100644
220     --- a/crypto/crypto_user.c
221     +++ b/crypto/crypto_user.c
222     @@ -75,7 +75,7 @@ static int crypto_report_cipher(struct sk_buff *skb, struct crypto_alg *alg)
223     {
224     struct crypto_report_cipher rcipher;
225    
226     - snprintf(rcipher.type, CRYPTO_MAX_ALG_NAME, "%s", "cipher");
227     + strncpy(rcipher.type, "cipher", sizeof(rcipher.type));
228    
229     rcipher.blocksize = alg->cra_blocksize;
230     rcipher.min_keysize = alg->cra_cipher.cia_min_keysize;
231     @@ -94,8 +94,7 @@ static int crypto_report_comp(struct sk_buff *skb, struct crypto_alg *alg)
232     {
233     struct crypto_report_comp rcomp;
234    
235     - snprintf(rcomp.type, CRYPTO_MAX_ALG_NAME, "%s", "compression");
236     -
237     + strncpy(rcomp.type, "compression", sizeof(rcomp.type));
238     NLA_PUT(skb, CRYPTOCFGA_REPORT_COMPRESS,
239     sizeof(struct crypto_report_comp), &rcomp);
240    
241     @@ -108,12 +107,14 @@ nla_put_failure:
242     static int crypto_report_one(struct crypto_alg *alg,
243     struct crypto_user_alg *ualg, struct sk_buff *skb)
244     {
245     - memcpy(&ualg->cru_name, &alg->cra_name, sizeof(ualg->cru_name));
246     - memcpy(&ualg->cru_driver_name, &alg->cra_driver_name,
247     - sizeof(ualg->cru_driver_name));
248     - memcpy(&ualg->cru_module_name, module_name(alg->cra_module),
249     - CRYPTO_MAX_ALG_NAME);
250     -
251     + strncpy(ualg->cru_name, alg->cra_name, sizeof(ualg->cru_name));
252     + strncpy(ualg->cru_driver_name, alg->cra_driver_name,
253     + sizeof(ualg->cru_driver_name));
254     + strncpy(ualg->cru_module_name, module_name(alg->cra_module),
255     + sizeof(ualg->cru_module_name));
256     +
257     + ualg->cru_type = 0;
258     + ualg->cru_mask = 0;
259     ualg->cru_flags = alg->cra_flags;
260     ualg->cru_refcnt = atomic_read(&alg->cra_refcnt);
261    
262     @@ -122,8 +123,7 @@ static int crypto_report_one(struct crypto_alg *alg,
263     if (alg->cra_flags & CRYPTO_ALG_LARVAL) {
264     struct crypto_report_larval rl;
265    
266     - snprintf(rl.type, CRYPTO_MAX_ALG_NAME, "%s", "larval");
267     -
268     + strncpy(rl.type, "larval", sizeof(rl.type));
269     NLA_PUT(skb, CRYPTOCFGA_REPORT_LARVAL,
270     sizeof(struct crypto_report_larval), &rl);
271    
272     diff --git a/crypto/pcompress.c b/crypto/pcompress.c
273     index 2e458e5..6f2a361 100644
274     --- a/crypto/pcompress.c
275     +++ b/crypto/pcompress.c
276     @@ -53,8 +53,7 @@ static int crypto_pcomp_report(struct sk_buff *skb, struct crypto_alg *alg)
277     {
278     struct crypto_report_comp rpcomp;
279    
280     - snprintf(rpcomp.type, CRYPTO_MAX_ALG_NAME, "%s", "pcomp");
281     -
282     + strncpy(rpcomp.type, "pcomp", sizeof(rpcomp.type));
283     NLA_PUT(skb, CRYPTOCFGA_REPORT_COMPRESS,
284     sizeof(struct crypto_report_comp), &rpcomp);
285    
286     diff --git a/crypto/rng.c b/crypto/rng.c
287     index 64f864f..1966c1d 100644
288     --- a/crypto/rng.c
289     +++ b/crypto/rng.c
290     @@ -65,7 +65,7 @@ static int crypto_rng_report(struct sk_buff *skb, struct crypto_alg *alg)
291     {
292     struct crypto_report_rng rrng;
293    
294     - snprintf(rrng.type, CRYPTO_MAX_ALG_NAME, "%s", "rng");
295     + strncpy(rrng.type, "rng", sizeof(rrng.type));
296    
297     rrng.seedsize = alg->cra_rng.seedsize;
298    
299     diff --git a/crypto/shash.c b/crypto/shash.c
300     index 21fc12e..3b2a71f 100644
301     --- a/crypto/shash.c
302     +++ b/crypto/shash.c
303     @@ -530,7 +530,8 @@ static int crypto_shash_report(struct sk_buff *skb, struct crypto_alg *alg)
304     struct crypto_report_hash rhash;
305     struct shash_alg *salg = __crypto_shash_alg(alg);
306    
307     - snprintf(rhash.type, CRYPTO_MAX_ALG_NAME, "%s", "shash");
308     + strncpy(rhash.type, "shash", sizeof(rhash.type));
309     +
310     rhash.blocksize = alg->cra_blocksize;
311     rhash.digestsize = salg->digestsize;
312    
313     diff --git a/drivers/ata/ata_piix.c b/drivers/ata/ata_piix.c
314     index 88f6908..47bd6ab 100644
315     --- a/drivers/ata/ata_piix.c
316     +++ b/drivers/ata/ata_piix.c
317     @@ -1594,12 +1594,31 @@ static void piix_ignore_devices_quirk(struct ata_host *host)
318     },
319     { } /* terminate list */
320     };
321     - const struct dmi_system_id *dmi = dmi_first_match(ignore_hyperv);
322     + static const struct dmi_system_id allow_virtual_pc[] = {
323     + {
324     + /* In MS Virtual PC guests the DMI ident is nearly
325     + * identical to a Hyper-V guest. One difference is the
326     + * product version which is used here to identify
327     + * a Virtual PC guest. This entry allows ata_piix to
328     + * drive the emulated hardware.
329     + */
330     + .ident = "MS Virtual PC 2007",
331     + .matches = {
332     + DMI_MATCH(DMI_SYS_VENDOR,
333     + "Microsoft Corporation"),
334     + DMI_MATCH(DMI_PRODUCT_NAME, "Virtual Machine"),
335     + DMI_MATCH(DMI_PRODUCT_VERSION, "VS2005R2"),
336     + },
337     + },
338     + { } /* terminate list */
339     + };
340     + const struct dmi_system_id *ignore = dmi_first_match(ignore_hyperv);
341     + const struct dmi_system_id *allow = dmi_first_match(allow_virtual_pc);
342    
343     - if (dmi && prefer_ms_hyperv) {
344     + if (ignore && !allow && prefer_ms_hyperv) {
345     host->flags |= ATA_HOST_IGNORE_ATA;
346     dev_info(host->dev, "%s detected, ATA device ignore set\n",
347     - dmi->ident);
348     + ignore->ident);
349     }
350     #endif
351     }
352     diff --git a/drivers/char/hw_random/core.c b/drivers/char/hw_random/core.c
353     index 1bafb40..69ae597 100644
354     --- a/drivers/char/hw_random/core.c
355     +++ b/drivers/char/hw_random/core.c
356     @@ -40,6 +40,7 @@
357     #include <linux/init.h>
358     #include <linux/miscdevice.h>
359     #include <linux/delay.h>
360     +#include <linux/slab.h>
361     #include <asm/uaccess.h>
362    
363    
364     @@ -52,8 +53,12 @@ static struct hwrng *current_rng;
365     static LIST_HEAD(rng_list);
366     static DEFINE_MUTEX(rng_mutex);
367     static int data_avail;
368     -static u8 rng_buffer[SMP_CACHE_BYTES < 32 ? 32 : SMP_CACHE_BYTES]
369     - __cacheline_aligned;
370     +static u8 *rng_buffer;
371     +
372     +static size_t rng_buffer_size(void)
373     +{
374     + return SMP_CACHE_BYTES < 32 ? 32 : SMP_CACHE_BYTES;
375     +}
376    
377     static inline int hwrng_init(struct hwrng *rng)
378     {
379     @@ -116,7 +121,7 @@ static ssize_t rng_dev_read(struct file *filp, char __user *buf,
380    
381     if (!data_avail) {
382     bytes_read = rng_get_data(current_rng, rng_buffer,
383     - sizeof(rng_buffer),
384     + rng_buffer_size(),
385     !(filp->f_flags & O_NONBLOCK));
386     if (bytes_read < 0) {
387     err = bytes_read;
388     @@ -307,6 +312,14 @@ int hwrng_register(struct hwrng *rng)
389    
390     mutex_lock(&rng_mutex);
391    
392     + /* kmalloc makes this safe for virt_to_page() in virtio_rng.c */
393     + err = -ENOMEM;
394     + if (!rng_buffer) {
395     + rng_buffer = kmalloc(rng_buffer_size(), GFP_KERNEL);
396     + if (!rng_buffer)
397     + goto out_unlock;
398     + }
399     +
400     /* Must not register two RNGs with the same name. */
401     err = -EEXIST;
402     list_for_each_entry(tmp, &rng_list, list) {
403     diff --git a/drivers/cpufreq/cpufreq_stats.c b/drivers/cpufreq/cpufreq_stats.c
404     index b40ee14..3998316 100644
405     --- a/drivers/cpufreq/cpufreq_stats.c
406     +++ b/drivers/cpufreq/cpufreq_stats.c
407     @@ -328,6 +328,7 @@ static int __cpuinit cpufreq_stat_cpu_callback(struct notifier_block *nfb,
408     cpufreq_update_policy(cpu);
409     break;
410     case CPU_DOWN_PREPARE:
411     + case CPU_DOWN_PREPARE_FROZEN:
412     cpufreq_stats_free_sysfs(cpu);
413     break;
414     case CPU_DEAD:
415     diff --git a/drivers/firmware/dmi_scan.c b/drivers/firmware/dmi_scan.c
416     index 982f1f5..4cd392d 100644
417     --- a/drivers/firmware/dmi_scan.c
418     +++ b/drivers/firmware/dmi_scan.c
419     @@ -442,7 +442,6 @@ static int __init dmi_present(const char __iomem *p)
420     static int __init smbios_present(const char __iomem *p)
421     {
422     u8 buf[32];
423     - int offset = 0;
424    
425     memcpy_fromio(buf, p, 32);
426     if ((buf[5] < 32) && dmi_checksum(buf, buf[5])) {
427     @@ -461,9 +460,9 @@ static int __init smbios_present(const char __iomem *p)
428     dmi_ver = 0x0206;
429     break;
430     }
431     - offset = 16;
432     + return memcmp(p + 16, "_DMI_", 5) || dmi_present(p + 16);
433     }
434     - return dmi_present(buf + offset);
435     + return 1;
436     }
437    
438     void __init dmi_scan_machine(void)
439     diff --git a/drivers/gpu/drm/radeon/radeon_combios.c b/drivers/gpu/drm/radeon/radeon_combios.c
440     index a2470d9..2b2c557 100644
441     --- a/drivers/gpu/drm/radeon/radeon_combios.c
442     +++ b/drivers/gpu/drm/radeon/radeon_combios.c
443     @@ -958,6 +958,15 @@ struct radeon_encoder_primary_dac *radeon_combios_get_primary_dac_info(struct
444     found = 1;
445     }
446    
447     + /* quirks */
448     + /* Radeon 9100 (R200) */
449     + if ((dev->pdev->device == 0x514D) &&
450     + (dev->pdev->subsystem_vendor == 0x174B) &&
451     + (dev->pdev->subsystem_device == 0x7149)) {
452     + /* vbios value is bad, use the default */
453     + found = 0;
454     + }
455     +
456     if (!found) /* fallback to defaults */
457     radeon_legacy_get_primary_dac_info_from_table(rdev, p_dac);
458    
459     diff --git a/drivers/hid/hid-logitech-dj.c b/drivers/hid/hid-logitech-dj.c
460     index 88d2010..73b67ab 100644
461     --- a/drivers/hid/hid-logitech-dj.c
462     +++ b/drivers/hid/hid-logitech-dj.c
463     @@ -451,19 +451,25 @@ static int logi_dj_recv_send_report(struct dj_receiver_dev *djrcv_dev,
464     struct dj_report *dj_report)
465     {
466     struct hid_device *hdev = djrcv_dev->hdev;
467     - int sent_bytes;
468     + struct hid_report *report;
469     + struct hid_report_enum *output_report_enum;
470     + u8 *data = (u8 *)(&dj_report->device_index);
471     + int i;
472    
473     - if (!hdev->hid_output_raw_report) {
474     - dev_err(&hdev->dev, "%s:"
475     - "hid_output_raw_report is null\n", __func__);
476     + output_report_enum = &hdev->report_enum[HID_OUTPUT_REPORT];
477     + report = output_report_enum->report_id_hash[REPORT_ID_DJ_SHORT];
478     +
479     + if (!report) {
480     + dev_err(&hdev->dev, "%s: unable to find dj report\n", __func__);
481     return -ENODEV;
482     }
483    
484     - sent_bytes = hdev->hid_output_raw_report(hdev, (u8 *) dj_report,
485     - sizeof(struct dj_report),
486     - HID_OUTPUT_REPORT);
487     + for (i = 0; i < report->field[0]->report_count; i++)
488     + report->field[0]->value[i] = data[i];
489     +
490     + usbhid_submit_report(hdev, report, USB_DIR_OUT);
491    
492     - return (sent_bytes < 0) ? sent_bytes : 0;
493     + return 0;
494     }
495    
496     static int logi_dj_recv_query_paired_devices(struct dj_receiver_dev *djrcv_dev)
497     diff --git a/drivers/hwmon/pmbus/ltc2978.c b/drivers/hwmon/pmbus/ltc2978.c
498     index 9652a2c..a58de38 100644
499     --- a/drivers/hwmon/pmbus/ltc2978.c
500     +++ b/drivers/hwmon/pmbus/ltc2978.c
501     @@ -62,7 +62,7 @@ struct ltc2978_data {
502     int temp_min, temp_max;
503     int vout_min[8], vout_max[8];
504     int iout_max[2];
505     - int temp2_max[2];
506     + int temp2_max;
507     struct pmbus_driver_info info;
508     };
509    
510     @@ -204,10 +204,9 @@ static int ltc3880_read_word_data(struct i2c_client *client, int page, int reg)
511     ret = pmbus_read_word_data(client, page,
512     LTC3880_MFR_TEMPERATURE2_PEAK);
513     if (ret >= 0) {
514     - if (lin11_to_val(ret)
515     - > lin11_to_val(data->temp2_max[page]))
516     - data->temp2_max[page] = ret;
517     - ret = data->temp2_max[page];
518     + if (lin11_to_val(ret) > lin11_to_val(data->temp2_max))
519     + data->temp2_max = ret;
520     + ret = data->temp2_max;
521     }
522     break;
523     case PMBUS_VIRT_READ_VIN_MIN:
524     @@ -248,11 +247,11 @@ static int ltc2978_write_word_data(struct i2c_client *client, int page,
525    
526     switch (reg) {
527     case PMBUS_VIRT_RESET_IOUT_HISTORY:
528     - data->iout_max[page] = 0x7fff;
529     + data->iout_max[page] = 0x7c00;
530     ret = ltc2978_clear_peaks(client, page, data->id);
531     break;
532     case PMBUS_VIRT_RESET_TEMP2_HISTORY:
533     - data->temp2_max[page] = 0x7fff;
534     + data->temp2_max = 0x7c00;
535     ret = ltc2978_clear_peaks(client, page, data->id);
536     break;
537     case PMBUS_VIRT_RESET_VOUT_HISTORY:
538     @@ -262,12 +261,12 @@ static int ltc2978_write_word_data(struct i2c_client *client, int page,
539     break;
540     case PMBUS_VIRT_RESET_VIN_HISTORY:
541     data->vin_min = 0x7bff;
542     - data->vin_max = 0;
543     + data->vin_max = 0x7c00;
544     ret = ltc2978_clear_peaks(client, page, data->id);
545     break;
546     case PMBUS_VIRT_RESET_TEMP_HISTORY:
547     data->temp_min = 0x7bff;
548     - data->temp_max = 0x7fff;
549     + data->temp_max = 0x7c00;
550     ret = ltc2978_clear_peaks(client, page, data->id);
551     break;
552     default:
553     @@ -321,12 +320,13 @@ static int ltc2978_probe(struct i2c_client *client,
554     info = &data->info;
555     info->write_word_data = ltc2978_write_word_data;
556    
557     - data->vout_min[0] = 0xffff;
558     data->vin_min = 0x7bff;
559     + data->vin_max = 0x7c00;
560     data->temp_min = 0x7bff;
561     - data->temp_max = 0x7fff;
562     + data->temp_max = 0x7c00;
563     + data->temp2_max = 0x7c00;
564    
565     - switch (id->driver_data) {
566     + switch (data->id) {
567     case ltc2978:
568     info->read_word_data = ltc2978_read_word_data;
569     info->pages = 8;
570     @@ -336,7 +336,6 @@ static int ltc2978_probe(struct i2c_client *client,
571     for (i = 1; i < 8; i++) {
572     info->func[i] = PMBUS_HAVE_VOUT
573     | PMBUS_HAVE_STATUS_VOUT;
574     - data->vout_min[i] = 0xffff;
575     }
576     break;
577     case ltc3880:
578     @@ -352,11 +351,14 @@ static int ltc2978_probe(struct i2c_client *client,
579     | PMBUS_HAVE_IOUT | PMBUS_HAVE_STATUS_IOUT
580     | PMBUS_HAVE_POUT
581     | PMBUS_HAVE_TEMP | PMBUS_HAVE_STATUS_TEMP;
582     - data->vout_min[1] = 0xffff;
583     + data->iout_max[0] = 0x7c00;
584     + data->iout_max[1] = 0x7c00;
585     break;
586     default:
587     return -ENODEV;
588     }
589     + for (i = 0; i < info->pages; i++)
590     + data->vout_min[i] = 0xffff;
591    
592     return pmbus_do_probe(client, id, info);
593     }
594     diff --git a/drivers/hwmon/sht15.c b/drivers/hwmon/sht15.c
595     index 8b011d0..eb01802 100644
596     --- a/drivers/hwmon/sht15.c
597     +++ b/drivers/hwmon/sht15.c
598     @@ -926,7 +926,13 @@ static int __devinit sht15_probe(struct platform_device *pdev)
599     if (voltage)
600     data->supply_uV = voltage;
601    
602     - regulator_enable(data->reg);
603     + ret = regulator_enable(data->reg);
604     + if (ret != 0) {
605     + dev_err(&pdev->dev,
606     + "failed to enable regulator: %d\n", ret);
607     + return ret;
608     + }
609     +
610     /*
611     * Setup a notifier block to update this if another device
612     * causes the voltage to change
613     diff --git a/drivers/md/md.c b/drivers/md/md.c
614     index 0a447a1..e0930bb 100644
615     --- a/drivers/md/md.c
616     +++ b/drivers/md/md.c
617     @@ -344,6 +344,10 @@ static void md_make_request(struct request_queue *q, struct bio *bio)
618     bio_io_error(bio);
619     return;
620     }
621     + if (mddev->ro == 1 && unlikely(rw == WRITE)) {
622     + bio_endio(bio, bio_sectors(bio) == 0 ? 0 : -EROFS);
623     + return;
624     + }
625     smp_rmb(); /* Ensure implications of 'active' are visible */
626     rcu_read_lock();
627     if (mddev->suspended) {
628     @@ -2882,6 +2886,9 @@ rdev_size_store(struct md_rdev *rdev, const char *buf, size_t len)
629     } else if (!sectors)
630     sectors = (i_size_read(rdev->bdev->bd_inode) >> 9) -
631     rdev->data_offset;
632     + if (!my_mddev->pers->resize)
633     + /* Cannot change size for RAID0 or Linear etc */
634     + return -EINVAL;
635     }
636     if (sectors < my_mddev->dev_sectors)
637     return -EINVAL; /* component must fit device */
638     diff --git a/drivers/md/raid0.c b/drivers/md/raid0.c
639     index de63a1f..06a0257 100644
640     --- a/drivers/md/raid0.c
641     +++ b/drivers/md/raid0.c
642     @@ -280,7 +280,7 @@ abort:
643     kfree(conf->strip_zone);
644     kfree(conf->devlist);
645     kfree(conf);
646     - *private_conf = NULL;
647     + *private_conf = ERR_PTR(err);
648     return err;
649     }
650    
651     @@ -402,7 +402,8 @@ static sector_t raid0_size(struct mddev *mddev, sector_t sectors, int raid_disks
652     "%s does not support generic reshape\n", __func__);
653    
654     rdev_for_each(rdev, mddev)
655     - array_sectors += rdev->sectors;
656     + array_sectors += (rdev->sectors &
657     + ~(sector_t)(mddev->chunk_sectors-1));
658    
659     return array_sectors;
660     }
661     diff --git a/drivers/net/ethernet/intel/e1000e/netdev.c b/drivers/net/ethernet/intel/e1000e/netdev.c
662     index 7e88aaf..c80b4b4 100644
663     --- a/drivers/net/ethernet/intel/e1000e/netdev.c
664     +++ b/drivers/net/ethernet/intel/e1000e/netdev.c
665     @@ -5535,7 +5535,7 @@ static int __e1000_shutdown(struct pci_dev *pdev, bool *enable_wake,
666     */
667     e1000e_release_hw_control(adapter);
668    
669     - pci_disable_device(pdev);
670     + pci_clear_master(pdev);
671    
672     return 0;
673     }
674     diff --git a/drivers/net/wireless/ath/ath9k/common.h b/drivers/net/wireless/ath/ath9k/common.h
675     index ad14fec..f1c32a5 100644
676     --- a/drivers/net/wireless/ath/ath9k/common.h
677     +++ b/drivers/net/wireless/ath/ath9k/common.h
678     @@ -35,7 +35,7 @@
679     #define WME_AC_BK 3
680     #define WME_NUM_AC 4
681    
682     -#define ATH_RSSI_DUMMY_MARKER 0x127
683     +#define ATH_RSSI_DUMMY_MARKER 127
684     #define ATH_RSSI_LPF_LEN 10
685     #define RSSI_LPF_THRESHOLD -20
686     #define ATH_RSSI_EP_MULTIPLIER (1<<7)
687     diff --git a/drivers/net/wireless/ath/ath9k/hw.c b/drivers/net/wireless/ath/ath9k/hw.c
688     index 28a0edd..20baf70 100644
689     --- a/drivers/net/wireless/ath/ath9k/hw.c
690     +++ b/drivers/net/wireless/ath/ath9k/hw.c
691     @@ -1404,7 +1404,9 @@ static bool ath9k_hw_chip_reset(struct ath_hw *ah,
692     reset_type = ATH9K_RESET_POWER_ON;
693     else
694     reset_type = ATH9K_RESET_COLD;
695     - }
696     + } else if (ah->chip_fullsleep || REG_READ(ah, AR_Q_TXE) ||
697     + (REG_READ(ah, AR_CR) & AR_CR_RXE))
698     + reset_type = ATH9K_RESET_COLD;
699    
700     if (!ath9k_hw_set_reset_reg(ah, reset_type))
701     return false;
702     diff --git a/drivers/net/wireless/mwifiex/pcie.c b/drivers/net/wireless/mwifiex/pcie.c
703     index 6ca3d8a..9abb8f5 100644
704     --- a/drivers/net/wireless/mwifiex/pcie.c
705     +++ b/drivers/net/wireless/mwifiex/pcie.c
706     @@ -288,7 +288,7 @@ static int mwifiex_pm_wakeup_card(struct mwifiex_adapter *adapter)
707     i++;
708     usleep_range(10, 20);
709     /* 50ms max wait */
710     - if (i == 50000)
711     + if (i == 5000)
712     break;
713     }
714    
715     diff --git a/drivers/scsi/dc395x.c b/drivers/scsi/dc395x.c
716     index 13aeca3..48105fc 100644
717     --- a/drivers/scsi/dc395x.c
718     +++ b/drivers/scsi/dc395x.c
719     @@ -3747,13 +3747,13 @@ static struct DeviceCtlBlk *device_alloc(struct AdapterCtlBlk *acb,
720     dcb->max_command = 1;
721     dcb->target_id = target;
722     dcb->target_lun = lun;
723     + dcb->dev_mode = eeprom->target[target].cfg0;
724     #ifndef DC395x_NO_DISCONNECT
725     dcb->identify_msg =
726     IDENTIFY(dcb->dev_mode & NTC_DO_DISCONNECT, lun);
727     #else
728     dcb->identify_msg = IDENTIFY(0, lun);
729     #endif
730     - dcb->dev_mode = eeprom->target[target].cfg0;
731     dcb->inquiry7 = 0;
732     dcb->sync_mode = 0;
733     dcb->min_nego_period = clock_period[period_index];
734     diff --git a/drivers/scsi/storvsc_drv.c b/drivers/scsi/storvsc_drv.c
735     index 40a4570..f9986cc 100644
736     --- a/drivers/scsi/storvsc_drv.c
737     +++ b/drivers/scsi/storvsc_drv.c
738     @@ -467,6 +467,7 @@ static struct scatterlist *create_bounce_buffer(struct scatterlist *sgl,
739     if (!bounce_sgl)
740     return NULL;
741    
742     + sg_init_table(bounce_sgl, num_pages);
743     for (i = 0; i < num_pages; i++) {
744     page_buf = alloc_page(GFP_ATOMIC);
745     if (!page_buf)
746     diff --git a/drivers/target/target_core_pscsi.c b/drivers/target/target_core_pscsi.c
747     index 94c905f..d084ba3 100644
748     --- a/drivers/target/target_core_pscsi.c
749     +++ b/drivers/target/target_core_pscsi.c
750     @@ -1042,7 +1042,6 @@ static int pscsi_map_sg(struct se_task *task, struct scatterlist *task_sg,
751     bio = NULL;
752     }
753    
754     - page++;
755     len -= bytes;
756     data_len -= bytes;
757     off = 0;
758     diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
759     index 67dda0d..49b139c 100644
760     --- a/drivers/usb/core/hub.c
761     +++ b/drivers/usb/core/hub.c
762     @@ -2207,70 +2207,35 @@ static int hub_port_wait_reset(struct usb_hub *hub, int port1,
763     if ((portstatus & USB_PORT_STAT_RESET))
764     goto delay;
765    
766     - /*
767     - * Some buggy devices require a warm reset to be issued even
768     - * when the port appears not to be connected.
769     + if (hub_port_warm_reset_required(hub, portstatus))
770     + return -ENOTCONN;
771     +
772     + /* Device went away? */
773     + if (!(portstatus & USB_PORT_STAT_CONNECTION))
774     + return -ENOTCONN;
775     +
776     + /* bomb out completely if the connection bounced. A USB 3.0
777     + * connection may bounce if multiple warm resets were issued,
778     + * but the device may have successfully re-connected. Ignore it.
779     */
780     - if (!warm) {
781     - /*
782     - * Some buggy devices can cause an NEC host controller
783     - * to transition to the "Error" state after a hot port
784     - * reset. This will show up as the port state in
785     - * "Inactive", and the port may also report a
786     - * disconnect. Forcing a warm port reset seems to make
787     - * the device work.
788     - *
789     - * See https://bugzilla.kernel.org/show_bug.cgi?id=41752
790     - */
791     - if (hub_port_warm_reset_required(hub, portstatus)) {
792     - int ret;
793     -
794     - if ((portchange & USB_PORT_STAT_C_CONNECTION))
795     - clear_port_feature(hub->hdev, port1,
796     - USB_PORT_FEAT_C_CONNECTION);
797     - if (portchange & USB_PORT_STAT_C_LINK_STATE)
798     - clear_port_feature(hub->hdev, port1,
799     - USB_PORT_FEAT_C_PORT_LINK_STATE);
800     - if (portchange & USB_PORT_STAT_C_RESET)
801     - clear_port_feature(hub->hdev, port1,
802     - USB_PORT_FEAT_C_RESET);
803     - dev_dbg(hub->intfdev, "hot reset failed, warm reset port %d\n",
804     - port1);
805     - ret = hub_port_reset(hub, port1,
806     - udev, HUB_BH_RESET_TIME,
807     - true);
808     - if ((portchange & USB_PORT_STAT_C_CONNECTION))
809     - clear_port_feature(hub->hdev, port1,
810     - USB_PORT_FEAT_C_CONNECTION);
811     - return ret;
812     - }
813     - /* Device went away? */
814     - if (!(portstatus & USB_PORT_STAT_CONNECTION))
815     - return -ENOTCONN;
816     -
817     - /* bomb out completely if the connection bounced */
818     - if ((portchange & USB_PORT_STAT_C_CONNECTION))
819     - return -ENOTCONN;
820     -
821     - if ((portstatus & USB_PORT_STAT_ENABLE)) {
822     - if (hub_is_wusb(hub))
823     - udev->speed = USB_SPEED_WIRELESS;
824     - else if (hub_is_superspeed(hub->hdev))
825     - udev->speed = USB_SPEED_SUPER;
826     - else if (portstatus & USB_PORT_STAT_HIGH_SPEED)
827     - udev->speed = USB_SPEED_HIGH;
828     - else if (portstatus & USB_PORT_STAT_LOW_SPEED)
829     - udev->speed = USB_SPEED_LOW;
830     - else
831     - udev->speed = USB_SPEED_FULL;
832     + if (!hub_is_superspeed(hub->hdev) &&
833     + (portchange & USB_PORT_STAT_C_CONNECTION))
834     + return -ENOTCONN;
835     +
836     + if ((portstatus & USB_PORT_STAT_ENABLE)) {
837     + if (!udev)
838     return 0;
839     - }
840     - } else {
841     - if (!(portstatus & USB_PORT_STAT_CONNECTION) ||
842     - hub_port_warm_reset_required(hub,
843     - portstatus))
844     - return -ENOTCONN;
845    
846     + if (hub_is_wusb(hub))
847     + udev->speed = USB_SPEED_WIRELESS;
848     + else if (hub_is_superspeed(hub->hdev))
849     + udev->speed = USB_SPEED_SUPER;
850     + else if (portstatus & USB_PORT_STAT_HIGH_SPEED)
851     + udev->speed = USB_SPEED_HIGH;
852     + else if (portstatus & USB_PORT_STAT_LOW_SPEED)
853     + udev->speed = USB_SPEED_LOW;
854     + else
855     + udev->speed = USB_SPEED_FULL;
856     return 0;
857     }
858    
859     @@ -2288,16 +2253,16 @@ delay:
860     }
861    
862     static void hub_port_finish_reset(struct usb_hub *hub, int port1,
863     - struct usb_device *udev, int *status, bool warm)
864     + struct usb_device *udev, int *status)
865     {
866     switch (*status) {
867     case 0:
868     - if (!warm) {
869     - struct usb_hcd *hcd;
870     - /* TRSTRCY = 10 ms; plus some extra */
871     - msleep(10 + 40);
872     + /* TRSTRCY = 10 ms; plus some extra */
873     + msleep(10 + 40);
874     + if (udev) {
875     + struct usb_hcd *hcd = bus_to_hcd(udev->bus);
876     +
877     update_devnum(udev, 0);
878     - hcd = bus_to_hcd(udev->bus);
879     /* The xHC may think the device is already reset,
880     * so ignore the status.
881     */
882     @@ -2309,14 +2274,15 @@ static void hub_port_finish_reset(struct usb_hub *hub, int port1,
883     case -ENODEV:
884     clear_port_feature(hub->hdev,
885     port1, USB_PORT_FEAT_C_RESET);
886     - /* FIXME need disconnect() for NOTATTACHED device */
887     if (hub_is_superspeed(hub->hdev)) {
888     clear_port_feature(hub->hdev, port1,
889     USB_PORT_FEAT_C_BH_PORT_RESET);
890     clear_port_feature(hub->hdev, port1,
891     USB_PORT_FEAT_C_PORT_LINK_STATE);
892     + clear_port_feature(hub->hdev, port1,
893     + USB_PORT_FEAT_C_CONNECTION);
894     }
895     - if (!warm)
896     + if (udev)
897     usb_set_device_state(udev, *status
898     ? USB_STATE_NOTATTACHED
899     : USB_STATE_DEFAULT);
900     @@ -2329,18 +2295,30 @@ static int hub_port_reset(struct usb_hub *hub, int port1,
901     struct usb_device *udev, unsigned int delay, bool warm)
902     {
903     int i, status;
904     + u16 portchange, portstatus;
905    
906     - if (!warm) {
907     - /* Block EHCI CF initialization during the port reset.
908     - * Some companion controllers don't like it when they mix.
909     - */
910     - down_read(&ehci_cf_port_reset_rwsem);
911     - } else {
912     - if (!hub_is_superspeed(hub->hdev)) {
913     + if (!hub_is_superspeed(hub->hdev)) {
914     + if (warm) {
915     dev_err(hub->intfdev, "only USB3 hub support "
916     "warm reset\n");
917     return -EINVAL;
918     }
919     + /* Block EHCI CF initialization during the port reset.
920     + * Some companion controllers don't like it when they mix.
921     + */
922     + down_read(&ehci_cf_port_reset_rwsem);
923     + } else if (!warm) {
924     + /*
925     + * If the caller hasn't explicitly requested a warm reset,
926     + * double check and see if one is needed.
927     + */
928     + status = hub_port_status(hub, port1,
929     + &portstatus, &portchange);
930     + if (status < 0)
931     + goto done;
932     +
933     + if (hub_port_warm_reset_required(hub, portstatus))
934     + warm = true;
935     }
936    
937     /* Reset the port */
938     @@ -2361,10 +2339,33 @@ static int hub_port_reset(struct usb_hub *hub, int port1,
939     status);
940     }
941    
942     - /* return on disconnect or reset */
943     + /* Check for disconnect or reset */
944     if (status == 0 || status == -ENOTCONN || status == -ENODEV) {
945     - hub_port_finish_reset(hub, port1, udev, &status, warm);
946     - goto done;
947     + hub_port_finish_reset(hub, port1, udev, &status);
948     +
949     + if (!hub_is_superspeed(hub->hdev))
950     + goto done;
951     +
952     + /*
953     + * If a USB 3.0 device migrates from reset to an error
954     + * state, re-issue the warm reset.
955     + */
956     + if (hub_port_status(hub, port1,
957     + &portstatus, &portchange) < 0)
958     + goto done;
959     +
960     + if (!hub_port_warm_reset_required(hub, portstatus))
961     + goto done;
962     +
963     + /*
964     + * If the port is in SS.Inactive or Compliance Mode, the
965     + * hot or warm reset failed. Try another warm reset.
966     + */
967     + if (!warm) {
968     + dev_dbg(hub->intfdev, "hot reset failed, warm reset port %d\n",
969     + port1);
970     + warm = true;
971     + }
972     }
973    
974     dev_dbg (hub->intfdev,
975     @@ -2378,7 +2379,7 @@ static int hub_port_reset(struct usb_hub *hub, int port1,
976     port1);
977    
978     done:
979     - if (!warm)
980     + if (!hub_is_superspeed(hub->hdev))
981     up_read(&ehci_cf_port_reset_rwsem);
982    
983     return status;
984     @@ -3876,12 +3877,21 @@ static void hub_events(void)
985     */
986     if (hub_port_warm_reset_required(hub, portstatus)) {
987     int status;
988     + struct usb_device *udev =
989     + hub->hdev->children[i - 1];
990    
991     dev_dbg(hub_dev, "warm reset port %d\n", i);
992     - status = hub_port_reset(hub, i, NULL,
993     - HUB_BH_RESET_TIME, true);
994     - if (status < 0)
995     - hub_port_disable(hub, i, 1);
996     + if (!udev) {
997     + status = hub_port_reset(hub, i,
998     + NULL, HUB_BH_RESET_TIME,
999     + true);
1000     + if (status < 0)
1001     + hub_port_disable(hub, i, 1);
1002     + } else {
1003     + usb_lock_device(udev);
1004     + status = usb_reset_device(udev);
1005     + usb_unlock_device(udev);
1006     + }
1007     connect_change = 0;
1008     }
1009    
1010     diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c
1011     index 1411b99..3ad7ee9 100644
1012     --- a/fs/btrfs/volumes.c
1013     +++ b/fs/btrfs/volumes.c
1014     @@ -557,6 +557,7 @@ static int __btrfs_close_devices(struct btrfs_fs_devices *fs_devices)
1015     new_device->writeable = 0;
1016     new_device->in_fs_metadata = 0;
1017     new_device->can_discard = 0;
1018     + spin_lock_init(&new_device->io_lock);
1019     list_replace_rcu(&device->dev_list, &new_device->dev_list);
1020    
1021     call_rcu(&device->rcu, free_device);
1022     diff --git a/fs/cifs/cifsfs.c b/fs/cifs/cifsfs.c
1023     index 541ef81..d7561e0 100644
1024     --- a/fs/cifs/cifsfs.c
1025     +++ b/fs/cifs/cifsfs.c
1026     @@ -557,6 +557,11 @@ cifs_get_root(struct smb_vol *vol, struct super_block *sb)
1027     dentry = ERR_PTR(-ENOENT);
1028     break;
1029     }
1030     + if (!S_ISDIR(dir->i_mode)) {
1031     + dput(dentry);
1032     + dentry = ERR_PTR(-ENOTDIR);
1033     + break;
1034     + }
1035    
1036     /* skip separators */
1037     while (*s == sep)
1038     diff --git a/fs/compat.c b/fs/compat.c
1039     index 2b371b3..56acdcb 100644
1040     --- a/fs/compat.c
1041     +++ b/fs/compat.c
1042     @@ -558,6 +558,10 @@ ssize_t compat_rw_copy_check_uvector(int type,
1043     }
1044     *ret_pointer = iov;
1045    
1046     + ret = -EFAULT;
1047     + if (!access_ok(VERIFY_READ, uvector, nr_segs*sizeof(*uvector)))
1048     + goto out;
1049     +
1050     /*
1051     * Single unix specification:
1052     * We should -EINVAL if an element length is not >= 0 and fitting an
1053     @@ -1089,17 +1093,12 @@ static ssize_t compat_do_readv_writev(int type, struct file *file,
1054     if (!file->f_op)
1055     goto out;
1056    
1057     - ret = -EFAULT;
1058     - if (!access_ok(VERIFY_READ, uvector, nr_segs*sizeof(*uvector)))
1059     - goto out;
1060     -
1061     - tot_len = compat_rw_copy_check_uvector(type, uvector, nr_segs,
1062     + ret = compat_rw_copy_check_uvector(type, uvector, nr_segs,
1063     UIO_FASTIOV, iovstack, &iov, 1);
1064     - if (tot_len == 0) {
1065     - ret = 0;
1066     + if (ret <= 0)
1067     goto out;
1068     - }
1069    
1070     + tot_len = ret;
1071     ret = rw_verify_area(type, file, pos, tot_len);
1072     if (ret < 0)
1073     goto out;
1074     diff --git a/fs/nfs/unlink.c b/fs/nfs/unlink.c
1075     index 3210a03..2781563 100644
1076     --- a/fs/nfs/unlink.c
1077     +++ b/fs/nfs/unlink.c
1078     @@ -336,20 +336,14 @@ static void nfs_async_rename_done(struct rpc_task *task, void *calldata)
1079     struct inode *old_dir = data->old_dir;
1080     struct inode *new_dir = data->new_dir;
1081     struct dentry *old_dentry = data->old_dentry;
1082     - struct dentry *new_dentry = data->new_dentry;
1083    
1084     if (!NFS_PROTO(old_dir)->rename_done(task, old_dir, new_dir)) {
1085     rpc_restart_call_prepare(task);
1086     return;
1087     }
1088    
1089     - if (task->tk_status != 0) {
1090     + if (task->tk_status != 0)
1091     nfs_cancel_async_unlink(old_dentry);
1092     - return;
1093     - }
1094     -
1095     - d_drop(old_dentry);
1096     - d_drop(new_dentry);
1097     }
1098    
1099     /**
1100     @@ -550,6 +544,18 @@ nfs_sillyrename(struct inode *dir, struct dentry *dentry)
1101     error = rpc_wait_for_completion_task(task);
1102     if (error == 0)
1103     error = task->tk_status;
1104     + switch (error) {
1105     + case 0:
1106     + /* The rename succeeded */
1107     + nfs_set_verifier(dentry, nfs_save_change_attribute(dir));
1108     + d_move(dentry, sdentry);
1109     + break;
1110     + case -ERESTARTSYS:
1111     + /* The result of the rename is unknown. Play it safe by
1112     + * forcing a new lookup */
1113     + d_drop(dentry);
1114     + d_drop(sdentry);
1115     + }
1116     rpc_put_task(task);
1117     out_dput:
1118     dput(sdentry);
1119     diff --git a/fs/pipe.c b/fs/pipe.c
1120     index fec5e4a..1667e6f 100644
1121     --- a/fs/pipe.c
1122     +++ b/fs/pipe.c
1123     @@ -860,6 +860,9 @@ pipe_rdwr_open(struct inode *inode, struct file *filp)
1124     {
1125     int ret = -ENOENT;
1126    
1127     + if (!(filp->f_mode & (FMODE_READ|FMODE_WRITE)))
1128     + return -EINVAL;
1129     +
1130     mutex_lock(&inode->i_mutex);
1131    
1132     if (inode->i_pipe) {
1133     diff --git a/kernel/trace/Kconfig b/kernel/trace/Kconfig
1134     index a1d2849..b659cd6 100644
1135     --- a/kernel/trace/Kconfig
1136     +++ b/kernel/trace/Kconfig
1137     @@ -386,24 +386,28 @@ config KPROBE_EVENT
1138     If you want to use perf tools, this option is strongly recommended.
1139    
1140     config DYNAMIC_FTRACE
1141     - bool "enable/disable ftrace tracepoints dynamically"
1142     + bool "enable/disable function tracing dynamically"
1143     depends on FUNCTION_TRACER
1144     depends on HAVE_DYNAMIC_FTRACE
1145     default y
1146     help
1147     - This option will modify all the calls to ftrace dynamically
1148     - (will patch them out of the binary image and replace them
1149     - with a No-Op instruction) as they are called. A table is
1150     - created to dynamically enable them again.
1151     + This option will modify all the calls to function tracing
1152     + dynamically (will patch them out of the binary image and
1153     + replace them with a No-Op instruction) on boot up. During
1154     + compile time, a table is made of all the locations that ftrace
1155     + can function trace, and this table is linked into the kernel
1156     + image. When this is enabled, functions can be individually
1157     + enabled, and the functions not enabled will not affect
1158     + performance of the system.
1159     +
1160     + See the files in /sys/kernel/debug/tracing:
1161     + available_filter_functions
1162     + set_ftrace_filter
1163     + set_ftrace_notrace
1164    
1165     This way a CONFIG_FUNCTION_TRACER kernel is slightly larger, but
1166     otherwise has native performance as long as no tracing is active.
1167    
1168     - The changes to the code are done by a kernel thread that
1169     - wakes up once a second and checks to see if any ftrace calls
1170     - were made. If so, it runs stop_machine (stops all CPUS)
1171     - and modifies the code to jump over the call to ftrace.
1172     -
1173     config FUNCTION_PROFILER
1174     bool "Kernel function profiler"
1175     depends on FUNCTION_TRACER
1176     diff --git a/mm/process_vm_access.c b/mm/process_vm_access.c
1177     index c20ff48..b63e84a 100644
1178     --- a/mm/process_vm_access.c
1179     +++ b/mm/process_vm_access.c
1180     @@ -429,12 +429,6 @@ compat_process_vm_rw(compat_pid_t pid,
1181     if (flags != 0)
1182     return -EINVAL;
1183    
1184     - if (!access_ok(VERIFY_READ, lvec, liovcnt * sizeof(*lvec)))
1185     - goto out;
1186     -
1187     - if (!access_ok(VERIFY_READ, rvec, riovcnt * sizeof(*rvec)))
1188     - goto out;
1189     -
1190     if (vm_write)
1191     rc = compat_rw_copy_check_uvector(WRITE, lvec, liovcnt,
1192     UIO_FASTIOV, iovstack_l,
1193     @@ -459,8 +453,6 @@ free_iovecs:
1194     kfree(iov_r);
1195     if (iov_l != iovstack_l)
1196     kfree(iov_l);
1197     -
1198     -out:
1199     return rc;
1200     }
1201    
1202     diff --git a/net/sunrpc/xprt.c b/net/sunrpc/xprt.c
1203     index feea474..f1a63c1 100644
1204     --- a/net/sunrpc/xprt.c
1205     +++ b/net/sunrpc/xprt.c
1206     @@ -485,13 +485,17 @@ EXPORT_SYMBOL_GPL(xprt_wake_pending_tasks);
1207     * xprt_wait_for_buffer_space - wait for transport output buffer to clear
1208     * @task: task to be put to sleep
1209     * @action: function pointer to be executed after wait
1210     + *
1211     + * Note that we only set the timer for the case of RPC_IS_SOFT(), since
1212     + * we don't in general want to force a socket disconnection due to
1213     + * an incomplete RPC call transmission.
1214     */
1215     void xprt_wait_for_buffer_space(struct rpc_task *task, rpc_action action)
1216     {
1217     struct rpc_rqst *req = task->tk_rqstp;
1218     struct rpc_xprt *xprt = req->rq_xprt;
1219    
1220     - task->tk_timeout = req->rq_timeout;
1221     + task->tk_timeout = RPC_IS_SOFT(task) ? req->rq_timeout : 0;
1222     rpc_sleep_on(&xprt->pending, task, action);
1223     }
1224     EXPORT_SYMBOL_GPL(xprt_wait_for_buffer_space);
1225     diff --git a/security/keys/compat.c b/security/keys/compat.c
1226     index 4c48e13..1b0b7bf 100644
1227     --- a/security/keys/compat.c
1228     +++ b/security/keys/compat.c
1229     @@ -40,12 +40,12 @@ long compat_keyctl_instantiate_key_iov(
1230     ARRAY_SIZE(iovstack),
1231     iovstack, &iov, 1);
1232     if (ret < 0)
1233     - return ret;
1234     + goto err;
1235     if (ret == 0)
1236     goto no_payload_free;
1237    
1238     ret = keyctl_instantiate_key_common(id, iov, ioc, ret, ringid);
1239     -
1240     +err:
1241     if (iov != iovstack)
1242     kfree(iov);
1243     return ret;
1244     diff --git a/security/keys/process_keys.c b/security/keys/process_keys.c
1245     index be7ecb2..adbfddd 100644
1246     --- a/security/keys/process_keys.c
1247     +++ b/security/keys/process_keys.c
1248     @@ -54,7 +54,7 @@ int install_user_keyrings(void)
1249    
1250     kenter("%p{%u}", user, user->uid);
1251    
1252     - if (user->uid_keyring) {
1253     + if (user->uid_keyring && user->session_keyring) {
1254     kleave(" = 0 [exist]");
1255     return 0;
1256     }
1257     diff --git a/sound/core/vmaster.c b/sound/core/vmaster.c
1258     index 8575861..0097f36 100644
1259     --- a/sound/core/vmaster.c
1260     +++ b/sound/core/vmaster.c
1261     @@ -213,7 +213,10 @@ static int slave_put(struct snd_kcontrol *kcontrol,
1262     }
1263     if (!changed)
1264     return 0;
1265     - return slave_put_val(slave, ucontrol);
1266     + err = slave_put_val(slave, ucontrol);
1267     + if (err < 0)
1268     + return err;
1269     + return 1;
1270     }
1271    
1272     static int slave_tlv_cmd(struct snd_kcontrol *kcontrol,
1273     diff --git a/sound/pci/hda/patch_hdmi.c b/sound/pci/hda/patch_hdmi.c
1274     index fa2ce0c..02a6e3f 100644
1275     --- a/sound/pci/hda/patch_hdmi.c
1276     +++ b/sound/pci/hda/patch_hdmi.c
1277     @@ -1244,9 +1244,6 @@ static int generic_hdmi_build_jack(struct hda_codec *codec, int pin_idx)
1278    
1279     if (pcmdev > 0)
1280     sprintf(hdmi_str + strlen(hdmi_str), ",pcm=%d", pcmdev);
1281     - if (!is_jack_detectable(codec, per_pin->pin_nid))
1282     - strncat(hdmi_str, " Phantom",
1283     - sizeof(hdmi_str) - strlen(hdmi_str) - 1);
1284    
1285     return snd_hda_jack_add_kctl(codec, per_pin->pin_nid, hdmi_str, 0);
1286     }
1287     diff --git a/sound/pci/ice1712/ice1712.c b/sound/pci/ice1712/ice1712.c
1288     index 132a86e..08c7f3a 100644
1289     --- a/sound/pci/ice1712/ice1712.c
1290     +++ b/sound/pci/ice1712/ice1712.c
1291     @@ -2595,6 +2595,8 @@ static int __devinit snd_ice1712_create(struct snd_card *card,
1292     snd_ice1712_proc_init(ice);
1293     synchronize_irq(pci->irq);
1294    
1295     + card->private_data = ice;
1296     +
1297     err = pci_request_regions(pci, "ICE1712");
1298     if (err < 0) {
1299     kfree(ice);