Magellan Linux

Annotation of /trunk/kernel-alx/patches-3.10/0171-3.10.72-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2659 - (hide annotations) (download)
Tue Jul 21 16:20:23 2015 UTC (8 years, 10 months ago) by niro
File size: 73972 byte(s)
-linux-3.10.72
1 niro 2659 diff --git a/Makefile b/Makefile
2     index d8b42f71ea5a..211bb34102bf 100644
3     --- a/Makefile
4     +++ b/Makefile
5     @@ -1,6 +1,6 @@
6     VERSION = 3
7     PATCHLEVEL = 10
8     -SUBLEVEL = 71
9     +SUBLEVEL = 72
10     EXTRAVERSION =
11     NAME = TOSSUG Baby Fish
12    
13     diff --git a/arch/mips/kvm/trace.h b/arch/mips/kvm/trace.h
14     index bc9e0f406c08..e51621e36152 100644
15     --- a/arch/mips/kvm/trace.h
16     +++ b/arch/mips/kvm/trace.h
17     @@ -26,18 +26,18 @@ TRACE_EVENT(kvm_exit,
18     TP_PROTO(struct kvm_vcpu *vcpu, unsigned int reason),
19     TP_ARGS(vcpu, reason),
20     TP_STRUCT__entry(
21     - __field(struct kvm_vcpu *, vcpu)
22     + __field(unsigned long, pc)
23     __field(unsigned int, reason)
24     ),
25    
26     TP_fast_assign(
27     - __entry->vcpu = vcpu;
28     + __entry->pc = vcpu->arch.pc;
29     __entry->reason = reason;
30     ),
31    
32     TP_printk("[%s]PC: 0x%08lx",
33     kvm_mips_exit_types_str[__entry->reason],
34     - __entry->vcpu->arch.pc)
35     + __entry->pc)
36     );
37    
38     #endif /* _TRACE_KVM_H */
39     diff --git a/arch/x86/kernel/entry_64.S b/arch/x86/kernel/entry_64.S
40     index 948b2e14df8c..6ed8f16fd61b 100644
41     --- a/arch/x86/kernel/entry_64.S
42     +++ b/arch/x86/kernel/entry_64.S
43     @@ -557,11 +557,14 @@ ENTRY(ret_from_fork)
44     testl $3, CS-ARGOFFSET(%rsp) # from kernel_thread?
45     jz 1f
46    
47     - testl $_TIF_IA32, TI_flags(%rcx) # 32-bit compat task needs IRET
48     - jnz int_ret_from_sys_call
49     -
50     - RESTORE_TOP_OF_STACK %rdi, -ARGOFFSET
51     - jmp ret_from_sys_call # go to the SYSRET fastpath
52     + /*
53     + * By the time we get here, we have no idea whether our pt_regs,
54     + * ti flags, and ti status came from the 64-bit SYSCALL fast path,
55     + * the slow path, or one of the ia32entry paths.
56     + * Use int_ret_from_sys_call to return, since it can safely handle
57     + * all of the above.
58     + */
59     + jmp int_ret_from_sys_call
60    
61     1:
62     subq $REST_SKIP, %rsp # leave space for volatiles
63     diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c
64     index 4c01f022c6ac..af88fa20dbe8 100644
65     --- a/arch/x86/kvm/emulate.c
66     +++ b/arch/x86/kvm/emulate.c
67     @@ -4732,7 +4732,8 @@ int x86_emulate_insn(struct x86_emulate_ctxt *ctxt)
68     if (rc != X86EMUL_CONTINUE)
69     goto done;
70     }
71     - ctxt->dst.orig_val = ctxt->dst.val;
72     + /* Copy full 64-bit value for CMPXCHG8B. */
73     + ctxt->dst.orig_val64 = ctxt->dst.val64;
74    
75     special_insn:
76    
77     diff --git a/drivers/acpi/video.c b/drivers/acpi/video.c
78     index 82a01cc45f9c..0dc9ff61d7c2 100644
79     --- a/drivers/acpi/video.c
80     +++ b/drivers/acpi/video.c
81     @@ -1953,6 +1953,17 @@ EXPORT_SYMBOL(acpi_video_unregister);
82    
83     static int __init acpi_video_init(void)
84     {
85     + /*
86     + * Let the module load even if ACPI is disabled (e.g. due to
87     + * a broken BIOS) so that i915.ko can still be loaded on such
88     + * old systems without an AcpiOpRegion.
89     + *
90     + * acpi_video_register() will report -ENODEV later as well due
91     + * to acpi_disabled when i915.ko tries to register itself afterwards.
92     + */
93     + if (acpi_disabled)
94     + return 0;
95     +
96     dmi_check_system(video_dmi_table);
97    
98     if (intel_opregion_present())
99     diff --git a/drivers/clk/sunxi/clk-factors.c b/drivers/clk/sunxi/clk-factors.c
100     index 88523f91d9b7..7555793097f2 100644
101     --- a/drivers/clk/sunxi/clk-factors.c
102     +++ b/drivers/clk/sunxi/clk-factors.c
103     @@ -70,7 +70,7 @@ static unsigned long clk_factors_recalc_rate(struct clk_hw *hw,
104     p = FACTOR_GET(config->pshift, config->pwidth, reg);
105    
106     /* Calculate the rate */
107     - rate = (parent_rate * n * (k + 1) >> p) / (m + 1);
108     + rate = (parent_rate * (n + config->n_start) * (k + 1) >> p) / (m + 1);
109    
110     return rate;
111     }
112     diff --git a/drivers/clk/sunxi/clk-factors.h b/drivers/clk/sunxi/clk-factors.h
113     index f49851cc4380..441fdc3f5717 100644
114     --- a/drivers/clk/sunxi/clk-factors.h
115     +++ b/drivers/clk/sunxi/clk-factors.h
116     @@ -15,6 +15,7 @@ struct clk_factors_config {
117     u8 mwidth;
118     u8 pshift;
119     u8 pwidth;
120     + u8 n_start;
121     };
122    
123     struct clk *clk_register_factors(struct device *dev, const char *name,
124     diff --git a/drivers/gpu/drm/radeon/ni.c b/drivers/gpu/drm/radeon/ni.c
125     index 451d7886644c..c254e467ac62 100644
126     --- a/drivers/gpu/drm/radeon/ni.c
127     +++ b/drivers/gpu/drm/radeon/ni.c
128     @@ -930,12 +930,12 @@ static void cayman_gpu_init(struct radeon_device *rdev)
129    
130     if ((rdev->config.cayman.max_backends_per_se == 1) &&
131     (rdev->flags & RADEON_IS_IGP)) {
132     - if ((disabled_rb_mask & 3) == 1) {
133     - /* RB0 disabled, RB1 enabled */
134     - tmp = 0x11111111;
135     - } else {
136     + if ((disabled_rb_mask & 3) == 2) {
137     /* RB1 disabled, RB0 enabled */
138     tmp = 0x00000000;
139     + } else {
140     + /* RB0 disabled, RB1 enabled */
141     + tmp = 0x11111111;
142     }
143     } else {
144     tmp = gb_addr_config & NUM_PIPES_MASK;
145     diff --git a/drivers/hid/hid-input.c b/drivers/hid/hid-input.c
146     index 03a6acffed5d..a3915d12e746 100644
147     --- a/drivers/hid/hid-input.c
148     +++ b/drivers/hid/hid-input.c
149     @@ -1066,6 +1066,23 @@ void hidinput_hid_event(struct hid_device *hid, struct hid_field *field, struct
150     return;
151     }
152    
153     + /*
154     + * Ignore reports for absolute data if the data didn't change. This is
155     + * not only an optimization but also fixes 'dead' key reports. Some
156     + * RollOver implementations for localized keys (like BACKSLASH/PIPE; HID
157     + * 0x31 and 0x32) report multiple keys, even though a localized keyboard
158     + * can only have one of them physically available. The 'dead' keys
159     + * report constant 0. As all map to the same keycode, they'd confuse
160     + * the input layer. If we filter the 'dead' keys on the HID level, we
161     + * skip the keycode translation and only forward real events.
162     + */
163     + if (!(field->flags & (HID_MAIN_ITEM_RELATIVE |
164     + HID_MAIN_ITEM_BUFFERED_BYTE)) &&
165     + (field->flags & HID_MAIN_ITEM_VARIABLE) &&
166     + usage->usage_index < field->maxusage &&
167     + value == field->value[usage->usage_index])
168     + return;
169     +
170     /* report the usage code as scancode if the key status has changed */
171     if (usage->type == EV_KEY && !!test_bit(usage->code, input->key) != value)
172     input_event(input, EV_MSC, MSC_SCAN, usage->hid);
173     diff --git a/drivers/hv/vmbus_drv.c b/drivers/hv/vmbus_drv.c
174     index 4004e54ef05d..f445b0840d33 100644
175     --- a/drivers/hv/vmbus_drv.c
176     +++ b/drivers/hv/vmbus_drv.c
177     @@ -686,7 +686,7 @@ int vmbus_device_register(struct hv_device *child_device_obj)
178     if (ret)
179     pr_err("Unable to register child device\n");
180     else
181     - pr_info("child device %s registered\n",
182     + pr_debug("child device %s registered\n",
183     dev_name(&child_device_obj->device));
184    
185     return ret;
186     @@ -698,14 +698,14 @@ int vmbus_device_register(struct hv_device *child_device_obj)
187     */
188     void vmbus_device_unregister(struct hv_device *device_obj)
189     {
190     + pr_debug("child device %s unregistered\n",
191     + dev_name(&device_obj->device));
192     +
193     /*
194     * Kick off the process of unregistering the device.
195     * This will call vmbus_remove() and eventually vmbus_device_release()
196     */
197     device_unregister(&device_obj->device);
198     -
199     - pr_info("child device %s unregistered\n",
200     - dev_name(&device_obj->device));
201     }
202    
203    
204     diff --git a/drivers/iio/imu/adis16400_core.c b/drivers/iio/imu/adis16400_core.c
205     index d6ece2d17dec..7d60c85cc16d 100644
206     --- a/drivers/iio/imu/adis16400_core.c
207     +++ b/drivers/iio/imu/adis16400_core.c
208     @@ -26,6 +26,7 @@
209     #include <linux/list.h>
210     #include <linux/module.h>
211     #include <linux/debugfs.h>
212     +#include <linux/bitops.h>
213    
214     #include <linux/iio/iio.h>
215     #include <linux/iio/sysfs.h>
216     @@ -447,7 +448,7 @@ static int adis16400_read_raw(struct iio_dev *indio_dev,
217     mutex_unlock(&indio_dev->mlock);
218     if (ret)
219     return ret;
220     - val16 = ((val16 & 0xFFF) << 4) >> 4;
221     + val16 = sign_extend32(val16, 11);
222     *val = val16;
223     return IIO_VAL_INT;
224     case IIO_CHAN_INFO_OFFSET:
225     diff --git a/drivers/infiniband/hw/qib/qib.h b/drivers/infiniband/hw/qib/qib.h
226     index 4d11575c2010..d1b30c66d604 100644
227     --- a/drivers/infiniband/hw/qib/qib.h
228     +++ b/drivers/infiniband/hw/qib/qib.h
229     @@ -1055,12 +1055,6 @@ struct qib_devdata {
230     /* control high-level access to EEPROM */
231     struct mutex eep_lock;
232     uint64_t traffic_wds;
233     - /* active time is kept in seconds, but logged in hours */
234     - atomic_t active_time;
235     - /* Below are nominal shadow of EEPROM, new since last EEPROM update */
236     - uint8_t eep_st_errs[QIB_EEP_LOG_CNT];
237     - uint8_t eep_st_new_errs[QIB_EEP_LOG_CNT];
238     - uint16_t eep_hrs;
239     /*
240     * masks for which bits of errs, hwerrs that cause
241     * each of the counters to increment.
242     @@ -1278,8 +1272,7 @@ int qib_twsi_blk_rd(struct qib_devdata *dd, int dev, int addr, void *buffer,
243     int qib_twsi_blk_wr(struct qib_devdata *dd, int dev, int addr,
244     const void *buffer, int len);
245     void qib_get_eeprom_info(struct qib_devdata *);
246     -int qib_update_eeprom_log(struct qib_devdata *dd);
247     -void qib_inc_eeprom_err(struct qib_devdata *dd, u32 eidx, u32 incr);
248     +#define qib_inc_eeprom_err(dd, eidx, incr)
249     void qib_dump_lookup_output_queue(struct qib_devdata *);
250     void qib_force_pio_avail_update(struct qib_devdata *);
251     void qib_clear_symerror_on_linkup(unsigned long opaque);
252     diff --git a/drivers/infiniband/hw/qib/qib_eeprom.c b/drivers/infiniband/hw/qib/qib_eeprom.c
253     index 4d5d71aaa2b4..e2280b07df02 100644
254     --- a/drivers/infiniband/hw/qib/qib_eeprom.c
255     +++ b/drivers/infiniband/hw/qib/qib_eeprom.c
256     @@ -267,190 +267,9 @@ void qib_get_eeprom_info(struct qib_devdata *dd)
257     "Board SN %s did not pass functional test: %s\n",
258     dd->serial, ifp->if_comment);
259    
260     - memcpy(&dd->eep_st_errs, &ifp->if_errcntp, QIB_EEP_LOG_CNT);
261     - /*
262     - * Power-on (actually "active") hours are kept as little-endian value
263     - * in EEPROM, but as seconds in a (possibly as small as 24-bit)
264     - * atomic_t while running.
265     - */
266     - atomic_set(&dd->active_time, 0);
267     - dd->eep_hrs = ifp->if_powerhour[0] | (ifp->if_powerhour[1] << 8);
268     -
269     done:
270     vfree(buf);
271    
272     bail:;
273     }
274    
275     -/**
276     - * qib_update_eeprom_log - copy active-time and error counters to eeprom
277     - * @dd: the qlogic_ib device
278     - *
279     - * Although the time is kept as seconds in the qib_devdata struct, it is
280     - * rounded to hours for re-write, as we have only 16 bits in EEPROM.
281     - * First-cut code reads whole (expected) struct qib_flash, modifies,
282     - * re-writes. Future direction: read/write only what we need, assuming
283     - * that the EEPROM had to have been "good enough" for driver init, and
284     - * if not, we aren't making it worse.
285     - *
286     - */
287     -int qib_update_eeprom_log(struct qib_devdata *dd)
288     -{
289     - void *buf;
290     - struct qib_flash *ifp;
291     - int len, hi_water;
292     - uint32_t new_time, new_hrs;
293     - u8 csum;
294     - int ret, idx;
295     - unsigned long flags;
296     -
297     - /* first, check if we actually need to do anything. */
298     - ret = 0;
299     - for (idx = 0; idx < QIB_EEP_LOG_CNT; ++idx) {
300     - if (dd->eep_st_new_errs[idx]) {
301     - ret = 1;
302     - break;
303     - }
304     - }
305     - new_time = atomic_read(&dd->active_time);
306     -
307     - if (ret == 0 && new_time < 3600)
308     - goto bail;
309     -
310     - /*
311     - * The quick-check above determined that there is something worthy
312     - * of logging, so get current contents and do a more detailed idea.
313     - * read full flash, not just currently used part, since it may have
314     - * been written with a newer definition
315     - */
316     - len = sizeof(struct qib_flash);
317     - buf = vmalloc(len);
318     - ret = 1;
319     - if (!buf) {
320     - qib_dev_err(dd,
321     - "Couldn't allocate memory to read %u bytes from eeprom for logging\n",
322     - len);
323     - goto bail;
324     - }
325     -
326     - /* Grab semaphore and read current EEPROM. If we get an
327     - * error, let go, but if not, keep it until we finish write.
328     - */
329     - ret = mutex_lock_interruptible(&dd->eep_lock);
330     - if (ret) {
331     - qib_dev_err(dd, "Unable to acquire EEPROM for logging\n");
332     - goto free_bail;
333     - }
334     - ret = qib_twsi_blk_rd(dd, dd->twsi_eeprom_dev, 0, buf, len);
335     - if (ret) {
336     - mutex_unlock(&dd->eep_lock);
337     - qib_dev_err(dd, "Unable read EEPROM for logging\n");
338     - goto free_bail;
339     - }
340     - ifp = (struct qib_flash *)buf;
341     -
342     - csum = flash_csum(ifp, 0);
343     - if (csum != ifp->if_csum) {
344     - mutex_unlock(&dd->eep_lock);
345     - qib_dev_err(dd, "EEPROM cks err (0x%02X, S/B 0x%02X)\n",
346     - csum, ifp->if_csum);
347     - ret = 1;
348     - goto free_bail;
349     - }
350     - hi_water = 0;
351     - spin_lock_irqsave(&dd->eep_st_lock, flags);
352     - for (idx = 0; idx < QIB_EEP_LOG_CNT; ++idx) {
353     - int new_val = dd->eep_st_new_errs[idx];
354     - if (new_val) {
355     - /*
356     - * If we have seen any errors, add to EEPROM values
357     - * We need to saturate at 0xFF (255) and we also
358     - * would need to adjust the checksum if we were
359     - * trying to minimize EEPROM traffic
360     - * Note that we add to actual current count in EEPROM,
361     - * in case it was altered while we were running.
362     - */
363     - new_val += ifp->if_errcntp[idx];
364     - if (new_val > 0xFF)
365     - new_val = 0xFF;
366     - if (ifp->if_errcntp[idx] != new_val) {
367     - ifp->if_errcntp[idx] = new_val;
368     - hi_water = offsetof(struct qib_flash,
369     - if_errcntp) + idx;
370     - }
371     - /*
372     - * update our shadow (used to minimize EEPROM
373     - * traffic), to match what we are about to write.
374     - */
375     - dd->eep_st_errs[idx] = new_val;
376     - dd->eep_st_new_errs[idx] = 0;
377     - }
378     - }
379     - /*
380     - * Now update active-time. We would like to round to the nearest hour
381     - * but unless atomic_t are sure to be proper signed ints we cannot,
382     - * because we need to account for what we "transfer" to EEPROM and
383     - * if we log an hour at 31 minutes, then we would need to set
384     - * active_time to -29 to accurately count the _next_ hour.
385     - */
386     - if (new_time >= 3600) {
387     - new_hrs = new_time / 3600;
388     - atomic_sub((new_hrs * 3600), &dd->active_time);
389     - new_hrs += dd->eep_hrs;
390     - if (new_hrs > 0xFFFF)
391     - new_hrs = 0xFFFF;
392     - dd->eep_hrs = new_hrs;
393     - if ((new_hrs & 0xFF) != ifp->if_powerhour[0]) {
394     - ifp->if_powerhour[0] = new_hrs & 0xFF;
395     - hi_water = offsetof(struct qib_flash, if_powerhour);
396     - }
397     - if ((new_hrs >> 8) != ifp->if_powerhour[1]) {
398     - ifp->if_powerhour[1] = new_hrs >> 8;
399     - hi_water = offsetof(struct qib_flash, if_powerhour) + 1;
400     - }
401     - }
402     - /*
403     - * There is a tiny possibility that we could somehow fail to write
404     - * the EEPROM after updating our shadows, but problems from holding
405     - * the spinlock too long are a much bigger issue.
406     - */
407     - spin_unlock_irqrestore(&dd->eep_st_lock, flags);
408     - if (hi_water) {
409     - /* we made some change to the data, uopdate cksum and write */
410     - csum = flash_csum(ifp, 1);
411     - ret = eeprom_write_with_enable(dd, 0, buf, hi_water + 1);
412     - }
413     - mutex_unlock(&dd->eep_lock);
414     - if (ret)
415     - qib_dev_err(dd, "Failed updating EEPROM\n");
416     -
417     -free_bail:
418     - vfree(buf);
419     -bail:
420     - return ret;
421     -}
422     -
423     -/**
424     - * qib_inc_eeprom_err - increment one of the four error counters
425     - * that are logged to EEPROM.
426     - * @dd: the qlogic_ib device
427     - * @eidx: 0..3, the counter to increment
428     - * @incr: how much to add
429     - *
430     - * Each counter is 8-bits, and saturates at 255 (0xFF). They
431     - * are copied to the EEPROM (aka flash) whenever qib_update_eeprom_log()
432     - * is called, but it can only be called in a context that allows sleep.
433     - * This function can be called even at interrupt level.
434     - */
435     -void qib_inc_eeprom_err(struct qib_devdata *dd, u32 eidx, u32 incr)
436     -{
437     - uint new_val;
438     - unsigned long flags;
439     -
440     - spin_lock_irqsave(&dd->eep_st_lock, flags);
441     - new_val = dd->eep_st_new_errs[eidx] + incr;
442     - if (new_val > 255)
443     - new_val = 255;
444     - dd->eep_st_new_errs[eidx] = new_val;
445     - spin_unlock_irqrestore(&dd->eep_st_lock, flags);
446     -}
447     diff --git a/drivers/infiniband/hw/qib/qib_iba6120.c b/drivers/infiniband/hw/qib/qib_iba6120.c
448     index 0232ae56b1fa..4e2613325183 100644
449     --- a/drivers/infiniband/hw/qib/qib_iba6120.c
450     +++ b/drivers/infiniband/hw/qib/qib_iba6120.c
451     @@ -2682,8 +2682,6 @@ static void qib_get_6120_faststats(unsigned long opaque)
452     spin_lock_irqsave(&dd->eep_st_lock, flags);
453     traffic_wds -= dd->traffic_wds;
454     dd->traffic_wds += traffic_wds;
455     - if (traffic_wds >= QIB_TRAFFIC_ACTIVE_THRESHOLD)
456     - atomic_add(5, &dd->active_time); /* S/B #define */
457     spin_unlock_irqrestore(&dd->eep_st_lock, flags);
458    
459     qib_chk_6120_errormask(dd);
460     diff --git a/drivers/infiniband/hw/qib/qib_iba7220.c b/drivers/infiniband/hw/qib/qib_iba7220.c
461     index 64d0ecb90cdc..3dbabf3a5d6d 100644
462     --- a/drivers/infiniband/hw/qib/qib_iba7220.c
463     +++ b/drivers/infiniband/hw/qib/qib_iba7220.c
464     @@ -3299,8 +3299,6 @@ static void qib_get_7220_faststats(unsigned long opaque)
465     spin_lock_irqsave(&dd->eep_st_lock, flags);
466     traffic_wds -= dd->traffic_wds;
467     dd->traffic_wds += traffic_wds;
468     - if (traffic_wds >= QIB_TRAFFIC_ACTIVE_THRESHOLD)
469     - atomic_add(5, &dd->active_time); /* S/B #define */
470     spin_unlock_irqrestore(&dd->eep_st_lock, flags);
471     done:
472     mod_timer(&dd->stats_timer, jiffies + HZ * ACTIVITY_TIMER);
473     diff --git a/drivers/infiniband/hw/qib/qib_iba7322.c b/drivers/infiniband/hw/qib/qib_iba7322.c
474     index 14103ffb4839..5f5f20f42231 100644
475     --- a/drivers/infiniband/hw/qib/qib_iba7322.c
476     +++ b/drivers/infiniband/hw/qib/qib_iba7322.c
477     @@ -4854,8 +4854,6 @@ static void qib_get_7322_faststats(unsigned long opaque)
478     spin_lock_irqsave(&ppd->dd->eep_st_lock, flags);
479     traffic_wds -= ppd->dd->traffic_wds;
480     ppd->dd->traffic_wds += traffic_wds;
481     - if (traffic_wds >= QIB_TRAFFIC_ACTIVE_THRESHOLD)
482     - atomic_add(ACTIVITY_TIMER, &ppd->dd->active_time);
483     spin_unlock_irqrestore(&ppd->dd->eep_st_lock, flags);
484     if (ppd->cpspec->qdr_dfe_on && (ppd->link_speed_active &
485     QIB_IB_QDR) &&
486     diff --git a/drivers/infiniband/hw/qib/qib_init.c b/drivers/infiniband/hw/qib/qib_init.c
487     index 173f805790da..8f936e36dd53 100644
488     --- a/drivers/infiniband/hw/qib/qib_init.c
489     +++ b/drivers/infiniband/hw/qib/qib_init.c
490     @@ -892,7 +892,6 @@ static void qib_shutdown_device(struct qib_devdata *dd)
491     }
492     }
493    
494     - qib_update_eeprom_log(dd);
495     }
496    
497     /**
498     diff --git a/drivers/infiniband/hw/qib/qib_sysfs.c b/drivers/infiniband/hw/qib/qib_sysfs.c
499     index 3c8e4e3caca6..b9ccbda7817d 100644
500     --- a/drivers/infiniband/hw/qib/qib_sysfs.c
501     +++ b/drivers/infiniband/hw/qib/qib_sysfs.c
502     @@ -611,28 +611,6 @@ bail:
503     return ret < 0 ? ret : count;
504     }
505    
506     -static ssize_t show_logged_errs(struct device *device,
507     - struct device_attribute *attr, char *buf)
508     -{
509     - struct qib_ibdev *dev =
510     - container_of(device, struct qib_ibdev, ibdev.dev);
511     - struct qib_devdata *dd = dd_from_dev(dev);
512     - int idx, count;
513     -
514     - /* force consistency with actual EEPROM */
515     - if (qib_update_eeprom_log(dd) != 0)
516     - return -ENXIO;
517     -
518     - count = 0;
519     - for (idx = 0; idx < QIB_EEP_LOG_CNT; ++idx) {
520     - count += scnprintf(buf + count, PAGE_SIZE - count, "%d%c",
521     - dd->eep_st_errs[idx],
522     - idx == (QIB_EEP_LOG_CNT - 1) ? '\n' : ' ');
523     - }
524     -
525     - return count;
526     -}
527     -
528     /*
529     * Dump tempsense regs. in decimal, to ease shell-scripts.
530     */
531     @@ -679,7 +657,6 @@ static DEVICE_ATTR(nctxts, S_IRUGO, show_nctxts, NULL);
532     static DEVICE_ATTR(nfreectxts, S_IRUGO, show_nfreectxts, NULL);
533     static DEVICE_ATTR(serial, S_IRUGO, show_serial, NULL);
534     static DEVICE_ATTR(boardversion, S_IRUGO, show_boardversion, NULL);
535     -static DEVICE_ATTR(logged_errors, S_IRUGO, show_logged_errs, NULL);
536     static DEVICE_ATTR(tempsense, S_IRUGO, show_tempsense, NULL);
537     static DEVICE_ATTR(localbus_info, S_IRUGO, show_localbus_info, NULL);
538     static DEVICE_ATTR(chip_reset, S_IWUSR, NULL, store_chip_reset);
539     @@ -693,7 +670,6 @@ static struct device_attribute *qib_attributes[] = {
540     &dev_attr_nfreectxts,
541     &dev_attr_serial,
542     &dev_attr_boardversion,
543     - &dev_attr_logged_errors,
544     &dev_attr_tempsense,
545     &dev_attr_localbus_info,
546     &dev_attr_chip_reset,
547     diff --git a/drivers/md/dm-io.c b/drivers/md/dm-io.c
548     index d1de1626a9d2..17cb2170e9d8 100644
549     --- a/drivers/md/dm-io.c
550     +++ b/drivers/md/dm-io.c
551     @@ -291,6 +291,12 @@ static void do_region(int rw, unsigned region, struct dm_io_region *where,
552     unsigned short logical_block_size = queue_logical_block_size(q);
553     sector_t num_sectors;
554    
555     + /* Reject unsupported discard requests */
556     + if ((rw & REQ_DISCARD) && !blk_queue_discard(q)) {
557     + dec_count(io, region, -EOPNOTSUPP);
558     + return;
559     + }
560     +
561     /*
562     * where->count may be zero if rw holds a flush and we need to
563     * send a zero-sized flush.
564     diff --git a/drivers/md/dm-raid1.c b/drivers/md/dm-raid1.c
565     index 699b5be68d31..678556b8ee4d 100644
566     --- a/drivers/md/dm-raid1.c
567     +++ b/drivers/md/dm-raid1.c
568     @@ -604,6 +604,15 @@ static void write_callback(unsigned long error, void *context)
569     return;
570     }
571    
572     + /*
573     + * If the bio is discard, return an error, but do not
574     + * degrade the array.
575     + */
576     + if (bio->bi_rw & REQ_DISCARD) {
577     + bio_endio(bio, -EOPNOTSUPP);
578     + return;
579     + }
580     +
581     for (i = 0; i < ms->nr_mirrors; i++)
582     if (test_bit(i, &error))
583     fail_mirror(ms->mirror + i, DM_RAID1_WRITE_ERROR);
584     diff --git a/drivers/md/dm-snap.c b/drivers/md/dm-snap.c
585     index 944690bafd93..d892a05c84f4 100644
586     --- a/drivers/md/dm-snap.c
587     +++ b/drivers/md/dm-snap.c
588     @@ -1439,8 +1439,6 @@ out:
589     full_bio->bi_end_io = pe->full_bio_end_io;
590     full_bio->bi_private = pe->full_bio_private;
591     }
592     - free_pending_exception(pe);
593     -
594     increment_pending_exceptions_done_count();
595    
596     up_write(&s->lock);
597     @@ -1457,6 +1455,8 @@ out:
598     }
599    
600     retry_origin_bios(s, origin_bios);
601     +
602     + free_pending_exception(pe);
603     }
604    
605     static void commit_callback(void *context, int success)
606     diff --git a/drivers/md/dm.c b/drivers/md/dm.c
607     index 204a59fd872f..a87f0c42cb8b 100644
608     --- a/drivers/md/dm.c
609     +++ b/drivers/md/dm.c
610     @@ -2270,7 +2270,7 @@ int dm_setup_md_queue(struct mapped_device *md)
611     return 0;
612     }
613    
614     -static struct mapped_device *dm_find_md(dev_t dev)
615     +struct mapped_device *dm_get_md(dev_t dev)
616     {
617     struct mapped_device *md;
618     unsigned minor = MINOR(dev);
619     @@ -2281,12 +2281,15 @@ static struct mapped_device *dm_find_md(dev_t dev)
620     spin_lock(&_minor_lock);
621    
622     md = idr_find(&_minor_idr, minor);
623     - if (md && (md == MINOR_ALLOCED ||
624     - (MINOR(disk_devt(dm_disk(md))) != minor) ||
625     - dm_deleting_md(md) ||
626     - test_bit(DMF_FREEING, &md->flags))) {
627     - md = NULL;
628     - goto out;
629     + if (md) {
630     + if ((md == MINOR_ALLOCED ||
631     + (MINOR(disk_devt(dm_disk(md))) != minor) ||
632     + dm_deleting_md(md) ||
633     + test_bit(DMF_FREEING, &md->flags))) {
634     + md = NULL;
635     + goto out;
636     + }
637     + dm_get(md);
638     }
639    
640     out:
641     @@ -2294,16 +2297,6 @@ out:
642    
643     return md;
644     }
645     -
646     -struct mapped_device *dm_get_md(dev_t dev)
647     -{
648     - struct mapped_device *md = dm_find_md(dev);
649     -
650     - if (md)
651     - dm_get(md);
652     -
653     - return md;
654     -}
655     EXPORT_SYMBOL_GPL(dm_get_md);
656    
657     void *dm_get_mdptr(struct mapped_device *md)
658     diff --git a/drivers/net/macvtap.c b/drivers/net/macvtap.c
659     index 2d255ba911d5..8fc46fcaee54 100644
660     --- a/drivers/net/macvtap.c
661     +++ b/drivers/net/macvtap.c
662     @@ -658,12 +658,15 @@ static unsigned long iov_pages(const struct iovec *iv, int offset,
663     return pages;
664     }
665    
666     +/* Neighbour code has some assumptions on HH_DATA_MOD alignment */
667     +#define MACVTAP_RESERVE HH_DATA_OFF(ETH_HLEN)
668     +
669     /* Get packet from user space buffer */
670     static ssize_t macvtap_get_user(struct macvtap_queue *q, struct msghdr *m,
671     const struct iovec *iv, unsigned long total_len,
672     size_t count, int noblock)
673     {
674     - int good_linear = SKB_MAX_HEAD(NET_IP_ALIGN);
675     + int good_linear = SKB_MAX_HEAD(MACVTAP_RESERVE);
676     struct sk_buff *skb;
677     struct macvlan_dev *vlan;
678     unsigned long len = total_len;
679     @@ -722,7 +725,7 @@ static ssize_t macvtap_get_user(struct macvtap_queue *q, struct msghdr *m,
680     linear = vnet_hdr.hdr_len;
681     }
682    
683     - skb = macvtap_alloc_skb(&q->sk, NET_IP_ALIGN, copylen,
684     + skb = macvtap_alloc_skb(&q->sk, MACVTAP_RESERVE, copylen,
685     linear, noblock, &err);
686     if (!skb)
687     goto err;
688     diff --git a/drivers/net/phy/phy.c b/drivers/net/phy/phy.c
689     index 38f0b312ff85..427e48a80efa 100644
690     --- a/drivers/net/phy/phy.c
691     +++ b/drivers/net/phy/phy.c
692     @@ -203,6 +203,25 @@ static inline int phy_find_valid(int idx, u32 features)
693     }
694    
695     /**
696     + * phy_check_valid - check if there is a valid PHY setting which matches
697     + * speed, duplex, and feature mask
698     + * @speed: speed to match
699     + * @duplex: duplex to match
700     + * @features: A mask of the valid settings
701     + *
702     + * Description: Returns true if there is a valid setting, false otherwise.
703     + */
704     +static inline bool phy_check_valid(int speed, int duplex, u32 features)
705     +{
706     + unsigned int idx;
707     +
708     + idx = phy_find_valid(phy_find_setting(speed, duplex), features);
709     +
710     + return settings[idx].speed == speed && settings[idx].duplex == duplex &&
711     + (settings[idx].setting & features);
712     +}
713     +
714     +/**
715     * phy_sanitize_settings - make sure the PHY is set to supported speed and duplex
716     * @phydev: the target phy_device struct
717     *
718     @@ -1011,7 +1030,7 @@ int phy_init_eee(struct phy_device *phydev, bool clk_stop_enable)
719     (phydev->interface == PHY_INTERFACE_MODE_RGMII))) {
720     int eee_lp, eee_cap, eee_adv;
721     u32 lp, cap, adv;
722     - int idx, status;
723     + int status;
724    
725     /* Read phy status to properly get the right settings */
726     status = phy_read_status(phydev);
727     @@ -1043,8 +1062,7 @@ int phy_init_eee(struct phy_device *phydev, bool clk_stop_enable)
728    
729     adv = mmd_eee_adv_to_ethtool_adv_t(eee_adv);
730     lp = mmd_eee_adv_to_ethtool_adv_t(eee_lp);
731     - idx = phy_find_setting(phydev->speed, phydev->duplex);
732     - if (!(lp & adv & settings[idx].setting))
733     + if (!phy_check_valid(phydev->speed, phydev->duplex, lp & adv))
734     goto eee_exit;
735    
736     if (clk_stop_enable) {
737     diff --git a/drivers/net/team/team.c b/drivers/net/team/team.c
738     index 12222290c802..14179a6593ef 100644
739     --- a/drivers/net/team/team.c
740     +++ b/drivers/net/team/team.c
741     @@ -42,9 +42,7 @@
742    
743     static struct team_port *team_port_get_rcu(const struct net_device *dev)
744     {
745     - struct team_port *port = rcu_dereference(dev->rx_handler_data);
746     -
747     - return team_port_exists(dev) ? port : NULL;
748     + return rcu_dereference(dev->rx_handler_data);
749     }
750    
751     static struct team_port *team_port_get_rtnl(const struct net_device *dev)
752     @@ -1523,11 +1521,11 @@ static int team_set_mac_address(struct net_device *dev, void *p)
753     if (dev->type == ARPHRD_ETHER && !is_valid_ether_addr(addr->sa_data))
754     return -EADDRNOTAVAIL;
755     memcpy(dev->dev_addr, addr->sa_data, dev->addr_len);
756     - rcu_read_lock();
757     - list_for_each_entry_rcu(port, &team->port_list, list)
758     + mutex_lock(&team->lock);
759     + list_for_each_entry(port, &team->port_list, list)
760     if (team->ops.port_change_dev_addr)
761     team->ops.port_change_dev_addr(team, port);
762     - rcu_read_unlock();
763     + mutex_unlock(&team->lock);
764     return 0;
765     }
766    
767     diff --git a/drivers/net/usb/plusb.c b/drivers/net/usb/plusb.c
768     index 0fcc8e65a068..74323e9d9004 100644
769     --- a/drivers/net/usb/plusb.c
770     +++ b/drivers/net/usb/plusb.c
771     @@ -136,6 +136,11 @@ static const struct usb_device_id products [] = {
772     }, {
773     USB_DEVICE(0x050d, 0x258a), /* Belkin F5U258/F5U279 (PL-25A1) */
774     .driver_info = (unsigned long) &prolific_info,
775     +}, {
776     + USB_DEVICE(0x3923, 0x7825), /* National Instruments USB
777     + * Host-to-Host Cable
778     + */
779     + .driver_info = (unsigned long) &prolific_info,
780     },
781    
782     { }, // END
783     diff --git a/drivers/net/wireless/ath/ath5k/reset.c b/drivers/net/wireless/ath/ath5k/reset.c
784     index a3399c4f13a9..b9b651ea9851 100644
785     --- a/drivers/net/wireless/ath/ath5k/reset.c
786     +++ b/drivers/net/wireless/ath/ath5k/reset.c
787     @@ -478,7 +478,7 @@ ath5k_hw_wisoc_reset(struct ath5k_hw *ah, u32 flags)
788     regval = ioread32(reg);
789     iowrite32(regval | val, reg);
790     regval = ioread32(reg);
791     - usleep_range(100, 150);
792     + udelay(100); /* NB: should be atomic */
793    
794     /* Bring BB/MAC out of reset */
795     iowrite32(regval & ~val, reg);
796     diff --git a/drivers/scsi/be2iscsi/be_main.c b/drivers/scsi/be2iscsi/be_main.c
797     index d24a2867bc21..1ad39c799c74 100644
798     --- a/drivers/scsi/be2iscsi/be_main.c
799     +++ b/drivers/scsi/be2iscsi/be_main.c
800     @@ -564,7 +564,6 @@ static struct beiscsi_hba *beiscsi_hba_alloc(struct pci_dev *pcidev)
801     "beiscsi_hba_alloc - iscsi_host_alloc failed\n");
802     return NULL;
803     }
804     - shost->dma_boundary = pcidev->dma_mask;
805     shost->max_id = BE2_MAX_SESSIONS;
806     shost->max_channel = 0;
807     shost->max_cmd_len = BEISCSI_MAX_CMD_LEN;
808     diff --git a/drivers/scsi/sg.c b/drivers/scsi/sg.c
809     index df5e961484e1..eb81c98386b9 100644
810     --- a/drivers/scsi/sg.c
811     +++ b/drivers/scsi/sg.c
812     @@ -522,7 +522,7 @@ static ssize_t
813     sg_new_read(Sg_fd * sfp, char __user *buf, size_t count, Sg_request * srp)
814     {
815     sg_io_hdr_t *hp = &srp->header;
816     - int err = 0;
817     + int err = 0, err2;
818     int len;
819    
820     if (count < SZ_SG_IO_HDR) {
821     @@ -551,8 +551,8 @@ sg_new_read(Sg_fd * sfp, char __user *buf, size_t count, Sg_request * srp)
822     goto err_out;
823     }
824     err_out:
825     - err = sg_finish_rem_req(srp);
826     - return (0 == err) ? count : err;
827     + err2 = sg_finish_rem_req(srp);
828     + return err ? : err2 ? : count;
829     }
830    
831     static ssize_t
832     diff --git a/drivers/staging/comedi/comedi_compat32.c b/drivers/staging/comedi/comedi_compat32.c
833     index ad208cdd53d4..83bcf968ac63 100644
834     --- a/drivers/staging/comedi/comedi_compat32.c
835     +++ b/drivers/staging/comedi/comedi_compat32.c
836     @@ -270,7 +270,7 @@ static int compat_cmd(struct file *file, unsigned long arg)
837     {
838     struct comedi_cmd __user *cmd;
839     struct comedi32_cmd_struct __user *cmd32;
840     - int rc;
841     + int rc, err;
842    
843     cmd32 = compat_ptr(arg);
844     cmd = compat_alloc_user_space(sizeof(*cmd));
845     @@ -279,7 +279,15 @@ static int compat_cmd(struct file *file, unsigned long arg)
846     if (rc)
847     return rc;
848    
849     - return translated_ioctl(file, COMEDI_CMD, (unsigned long)cmd);
850     + rc = translated_ioctl(file, COMEDI_CMD, (unsigned long)cmd);
851     + if (rc == -EAGAIN) {
852     + /* Special case: copy cmd back to user. */
853     + err = put_compat_cmd(cmd32, cmd);
854     + if (err)
855     + rc = err;
856     + }
857     +
858     + return rc;
859     }
860    
861     /* Handle 32-bit COMEDI_CMDTEST ioctl. */
862     diff --git a/drivers/staging/comedi/drivers/cb_pcidas64.c b/drivers/staging/comedi/drivers/cb_pcidas64.c
863     index c3e5495b4f06..4220a44186c4 100644
864     --- a/drivers/staging/comedi/drivers/cb_pcidas64.c
865     +++ b/drivers/staging/comedi/drivers/cb_pcidas64.c
866     @@ -455,6 +455,29 @@ static const struct comedi_lrange ai_ranges_64xx = {
867     }
868     };
869    
870     +static const uint8_t ai_range_code_64xx[8] = {
871     + 0x0, 0x1, 0x2, 0x3, /* bipolar 10, 5, 2,5, 1.25 */
872     + 0x8, 0x9, 0xa, 0xb /* unipolar 10, 5, 2.5, 1.25 */
873     +};
874     +
875     +/* analog input ranges for 64-Mx boards */
876     +static const struct comedi_lrange ai_ranges_64_mx = {
877     + 7, {
878     + BIP_RANGE(5),
879     + BIP_RANGE(2.5),
880     + BIP_RANGE(1.25),
881     + BIP_RANGE(0.625),
882     + UNI_RANGE(5),
883     + UNI_RANGE(2.5),
884     + UNI_RANGE(1.25)
885     + }
886     +};
887     +
888     +static const uint8_t ai_range_code_64_mx[7] = {
889     + 0x0, 0x1, 0x2, 0x3, /* bipolar 5, 2.5, 1.25, 0.625 */
890     + 0x9, 0xa, 0xb /* unipolar 5, 2.5, 1.25 */
891     +};
892     +
893     /* analog input ranges for 60xx boards */
894     static const struct comedi_lrange ai_ranges_60xx = {
895     4,
896     @@ -466,6 +489,10 @@ static const struct comedi_lrange ai_ranges_60xx = {
897     }
898     };
899    
900     +static const uint8_t ai_range_code_60xx[4] = {
901     + 0x0, 0x1, 0x4, 0x7 /* bipolar 10, 5, 0.5, 0.05 */
902     +};
903     +
904     /* analog input ranges for 6030, etc boards */
905     static const struct comedi_lrange ai_ranges_6030 = {
906     14,
907     @@ -487,6 +514,11 @@ static const struct comedi_lrange ai_ranges_6030 = {
908     }
909     };
910    
911     +static const uint8_t ai_range_code_6030[14] = {
912     + 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, /* bip 10, 5, 2, 1, 0.5, 0.2, 0.1 */
913     + 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf /* uni 10, 5, 2, 1, 0.5, 0.2, 0.1 */
914     +};
915     +
916     /* analog input ranges for 6052, etc boards */
917     static const struct comedi_lrange ai_ranges_6052 = {
918     15,
919     @@ -509,6 +541,11 @@ static const struct comedi_lrange ai_ranges_6052 = {
920     }
921     };
922    
923     +static const uint8_t ai_range_code_6052[15] = {
924     + 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, /* bipolar 10 ... 0.05 */
925     + 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf /* unipolar 10 ... 0.1 */
926     +};
927     +
928     /* analog input ranges for 4020 board */
929     static const struct comedi_lrange ai_ranges_4020 = {
930     2,
931     @@ -616,6 +653,7 @@ struct pcidas64_board {
932     int ai_bits; /* analog input resolution */
933     int ai_speed; /* fastest conversion period in ns */
934     const struct comedi_lrange *ai_range_table;
935     + const uint8_t *ai_range_code;
936     int ao_nchan; /* number of analog out channels */
937     int ao_bits; /* analog output resolution */
938     int ao_scan_speed; /* analog output scan speed */
939     @@ -674,6 +712,7 @@ static const struct pcidas64_board pcidas64_boards[] = {
940     .ao_scan_speed = 10000,
941     .layout = LAYOUT_64XX,
942     .ai_range_table = &ai_ranges_64xx,
943     + .ai_range_code = ai_range_code_64xx,
944     .ao_range_table = &ao_ranges_64xx,
945     .ao_range_code = ao_range_code_64xx,
946     .ai_fifo = &ai_fifo_64xx,
947     @@ -689,6 +728,7 @@ static const struct pcidas64_board pcidas64_boards[] = {
948     .ao_scan_speed = 10000,
949     .layout = LAYOUT_64XX,
950     .ai_range_table = &ai_ranges_64xx,
951     + .ai_range_code = ai_range_code_64xx,
952     .ao_range_table = &ao_ranges_64xx,
953     .ao_range_code = ao_range_code_64xx,
954     .ai_fifo = &ai_fifo_64xx,
955     @@ -703,7 +743,8 @@ static const struct pcidas64_board pcidas64_boards[] = {
956     .ao_bits = 16,
957     .ao_scan_speed = 10000,
958     .layout = LAYOUT_64XX,
959     - .ai_range_table = &ai_ranges_64xx,
960     + .ai_range_table = &ai_ranges_64_mx,
961     + .ai_range_code = ai_range_code_64_mx,
962     .ao_range_table = &ao_ranges_64xx,
963     .ao_range_code = ao_range_code_64xx,
964     .ai_fifo = &ai_fifo_64xx,
965     @@ -718,7 +759,8 @@ static const struct pcidas64_board pcidas64_boards[] = {
966     .ao_bits = 16,
967     .ao_scan_speed = 10000,
968     .layout = LAYOUT_64XX,
969     - .ai_range_table = &ai_ranges_64xx,
970     + .ai_range_table = &ai_ranges_64_mx,
971     + .ai_range_code = ai_range_code_64_mx,
972     .ao_range_table = &ao_ranges_64xx,
973     .ao_range_code = ao_range_code_64xx,
974     .ai_fifo = &ai_fifo_64xx,
975     @@ -733,7 +775,8 @@ static const struct pcidas64_board pcidas64_boards[] = {
976     .ao_bits = 16,
977     .ao_scan_speed = 10000,
978     .layout = LAYOUT_64XX,
979     - .ai_range_table = &ai_ranges_64xx,
980     + .ai_range_table = &ai_ranges_64_mx,
981     + .ai_range_code = ai_range_code_64_mx,
982     .ao_range_table = &ao_ranges_64xx,
983     .ao_range_code = ao_range_code_64xx,
984     .ai_fifo = &ai_fifo_64xx,
985     @@ -748,6 +791,7 @@ static const struct pcidas64_board pcidas64_boards[] = {
986     .ao_bits = 16,
987     .layout = LAYOUT_60XX,
988     .ai_range_table = &ai_ranges_60xx,
989     + .ai_range_code = ai_range_code_60xx,
990     .ao_range_table = &range_bipolar10,
991     .ao_range_code = ao_range_code_60xx,
992     .ai_fifo = &ai_fifo_60xx,
993     @@ -763,6 +807,7 @@ static const struct pcidas64_board pcidas64_boards[] = {
994     .ao_scan_speed = 100000,
995     .layout = LAYOUT_60XX,
996     .ai_range_table = &ai_ranges_60xx,
997     + .ai_range_code = ai_range_code_60xx,
998     .ao_range_table = &range_bipolar10,
999     .ao_range_code = ao_range_code_60xx,
1000     .ai_fifo = &ai_fifo_60xx,
1001     @@ -777,6 +822,7 @@ static const struct pcidas64_board pcidas64_boards[] = {
1002     .ao_scan_speed = 100000,
1003     .layout = LAYOUT_60XX,
1004     .ai_range_table = &ai_ranges_60xx,
1005     + .ai_range_code = ai_range_code_60xx,
1006     .ao_range_table = &range_bipolar10,
1007     .ao_range_code = ao_range_code_60xx,
1008     .ai_fifo = &ai_fifo_60xx,
1009     @@ -792,6 +838,7 @@ static const struct pcidas64_board pcidas64_boards[] = {
1010     .ao_scan_speed = 100000,
1011     .layout = LAYOUT_60XX,
1012     .ai_range_table = &ai_ranges_60xx,
1013     + .ai_range_code = ai_range_code_60xx,
1014     .ao_range_table = &range_bipolar10,
1015     .ao_range_code = ao_range_code_60xx,
1016     .ai_fifo = &ai_fifo_60xx,
1017     @@ -807,6 +854,7 @@ static const struct pcidas64_board pcidas64_boards[] = {
1018     .ao_scan_speed = 10000,
1019     .layout = LAYOUT_60XX,
1020     .ai_range_table = &ai_ranges_6030,
1021     + .ai_range_code = ai_range_code_6030,
1022     .ao_range_table = &ao_ranges_6030,
1023     .ao_range_code = ao_range_code_6030,
1024     .ai_fifo = &ai_fifo_60xx,
1025     @@ -822,6 +870,7 @@ static const struct pcidas64_board pcidas64_boards[] = {
1026     .ao_scan_speed = 10000,
1027     .layout = LAYOUT_60XX,
1028     .ai_range_table = &ai_ranges_6030,
1029     + .ai_range_code = ai_range_code_6030,
1030     .ao_range_table = &ao_ranges_6030,
1031     .ao_range_code = ao_range_code_6030,
1032     .ai_fifo = &ai_fifo_60xx,
1033     @@ -835,6 +884,7 @@ static const struct pcidas64_board pcidas64_boards[] = {
1034     .ao_nchan = 0,
1035     .layout = LAYOUT_60XX,
1036     .ai_range_table = &ai_ranges_6030,
1037     + .ai_range_code = ai_range_code_6030,
1038     .ai_fifo = &ai_fifo_60xx,
1039     .has_8255 = 0,
1040     },
1041     @@ -846,6 +896,7 @@ static const struct pcidas64_board pcidas64_boards[] = {
1042     .ao_nchan = 0,
1043     .layout = LAYOUT_60XX,
1044     .ai_range_table = &ai_ranges_6030,
1045     + .ai_range_code = ai_range_code_6030,
1046     .ai_fifo = &ai_fifo_60xx,
1047     .has_8255 = 0,
1048     },
1049     @@ -858,6 +909,7 @@ static const struct pcidas64_board pcidas64_boards[] = {
1050     .ao_scan_speed = 0,
1051     .layout = LAYOUT_60XX,
1052     .ai_range_table = &ai_ranges_60xx,
1053     + .ai_range_code = ai_range_code_60xx,
1054     .ai_fifo = &ai_fifo_60xx,
1055     .has_8255 = 0,
1056     },
1057     @@ -871,6 +923,7 @@ static const struct pcidas64_board pcidas64_boards[] = {
1058     .ao_scan_speed = 100000,
1059     .layout = LAYOUT_60XX,
1060     .ai_range_table = &ai_ranges_60xx,
1061     + .ai_range_code = ai_range_code_60xx,
1062     .ao_range_table = &range_bipolar10,
1063     .ao_range_code = ao_range_code_60xx,
1064     .ai_fifo = &ai_fifo_60xx,
1065     @@ -886,6 +939,7 @@ static const struct pcidas64_board pcidas64_boards[] = {
1066     .ao_scan_speed = 100000,
1067     .layout = LAYOUT_60XX,
1068     .ai_range_table = &ai_ranges_60xx,
1069     + .ai_range_code = ai_range_code_60xx,
1070     .ao_range_table = &range_bipolar10,
1071     .ao_range_code = ao_range_code_60xx,
1072     .ai_fifo = &ai_fifo_60xx,
1073     @@ -901,6 +955,7 @@ static const struct pcidas64_board pcidas64_boards[] = {
1074     .ao_scan_speed = 1000,
1075     .layout = LAYOUT_60XX,
1076     .ai_range_table = &ai_ranges_6052,
1077     + .ai_range_code = ai_range_code_6052,
1078     .ao_range_table = &ao_ranges_6030,
1079     .ao_range_code = ao_range_code_6030,
1080     .ai_fifo = &ai_fifo_60xx,
1081     @@ -916,6 +971,7 @@ static const struct pcidas64_board pcidas64_boards[] = {
1082     .ao_scan_speed = 3333,
1083     .layout = LAYOUT_60XX,
1084     .ai_range_table = &ai_ranges_6052,
1085     + .ai_range_code = ai_range_code_6052,
1086     .ao_range_table = &ao_ranges_6030,
1087     .ao_range_code = ao_range_code_6030,
1088     .ai_fifo = &ai_fifo_60xx,
1089     @@ -931,6 +987,7 @@ static const struct pcidas64_board pcidas64_boards[] = {
1090     .ao_scan_speed = 1000,
1091     .layout = LAYOUT_60XX,
1092     .ai_range_table = &ai_ranges_6052,
1093     + .ai_range_code = ai_range_code_6052,
1094     .ao_range_table = &ao_ranges_6030,
1095     .ao_range_code = ao_range_code_6030,
1096     .ai_fifo = &ai_fifo_60xx,
1097     @@ -946,6 +1003,7 @@ static const struct pcidas64_board pcidas64_boards[] = {
1098     .ao_scan_speed = 1000,
1099     .layout = LAYOUT_60XX,
1100     .ai_range_table = &ai_ranges_6052,
1101     + .ai_range_code = ai_range_code_6052,
1102     .ao_range_table = &ao_ranges_6030,
1103     .ao_range_code = ao_range_code_6030,
1104     .ai_fifo = &ai_fifo_60xx,
1105     @@ -980,6 +1038,7 @@ static const struct pcidas64_board pcidas64_boards[] = {
1106     .ao_scan_speed = 10000,
1107     .layout = LAYOUT_64XX,
1108     .ai_range_table = &ai_ranges_64xx,
1109     + .ai_range_code = ai_range_code_64xx,
1110     .ai_fifo = ai_fifo_64xx,
1111     .has_8255 = 1,
1112     },
1113     @@ -991,7 +1050,8 @@ static const struct pcidas64_board pcidas64_boards[] = {
1114     .ao_nchan = 0,
1115     .ao_scan_speed = 10000,
1116     .layout = LAYOUT_64XX,
1117     - .ai_range_table = &ai_ranges_64xx,
1118     + .ai_range_table = &ai_ranges_64_mx,
1119     + .ai_range_code = ai_range_code_64_mx,
1120     .ai_fifo = ai_fifo_64xx,
1121     .has_8255 = 1,
1122     },
1123     @@ -1003,7 +1063,8 @@ static const struct pcidas64_board pcidas64_boards[] = {
1124     .ao_nchan = 0,
1125     .ao_scan_speed = 10000,
1126     .layout = LAYOUT_64XX,
1127     - .ai_range_table = &ai_ranges_64xx,
1128     + .ai_range_table = &ai_ranges_64_mx,
1129     + .ai_range_code = ai_range_code_64_mx,
1130     .ai_fifo = ai_fifo_64xx,
1131     .has_8255 = 1,
1132     },
1133     @@ -1015,7 +1076,8 @@ static const struct pcidas64_board pcidas64_boards[] = {
1134     .ao_nchan = 0,
1135     .ao_scan_speed = 10000,
1136     .layout = LAYOUT_64XX,
1137     - .ai_range_table = &ai_ranges_64xx,
1138     + .ai_range_table = &ai_ranges_64_mx,
1139     + .ai_range_code = ai_range_code_64_mx,
1140     .ai_fifo = ai_fifo_64xx,
1141     .has_8255 = 1,
1142     },
1143     @@ -1027,7 +1089,8 @@ static const struct pcidas64_board pcidas64_boards[] = {
1144     .ao_nchan = 2,
1145     .ao_scan_speed = 10000,
1146     .layout = LAYOUT_64XX,
1147     - .ai_range_table = &ai_ranges_64xx,
1148     + .ai_range_table = &ai_ranges_64_mx,
1149     + .ai_range_code = ai_range_code_64_mx,
1150     .ai_fifo = ai_fifo_64xx,
1151     .has_8255 = 1,
1152     },
1153     @@ -1039,7 +1102,8 @@ static const struct pcidas64_board pcidas64_boards[] = {
1154     .ao_nchan = 2,
1155     .ao_scan_speed = 10000,
1156     .layout = LAYOUT_64XX,
1157     - .ai_range_table = &ai_ranges_64xx,
1158     + .ai_range_table = &ai_ranges_64_mx,
1159     + .ai_range_code = ai_range_code_64_mx,
1160     .ai_fifo = ai_fifo_64xx,
1161     .has_8255 = 1,
1162     },
1163     @@ -1051,7 +1115,8 @@ static const struct pcidas64_board pcidas64_boards[] = {
1164     .ao_nchan = 2,
1165     .ao_scan_speed = 10000,
1166     .layout = LAYOUT_64XX,
1167     - .ai_range_table = &ai_ranges_64xx,
1168     + .ai_range_table = &ai_ranges_64_mx,
1169     + .ai_range_code = ai_range_code_64_mx,
1170     .ai_fifo = ai_fifo_64xx,
1171     .has_8255 = 1,
1172     },
1173     @@ -1148,45 +1213,8 @@ static unsigned int ai_range_bits_6xxx(const struct comedi_device *dev,
1174     unsigned int range_index)
1175     {
1176     const struct pcidas64_board *thisboard = comedi_board(dev);
1177     - const struct comedi_krange *range =
1178     - &thisboard->ai_range_table->range[range_index];
1179     - unsigned int bits = 0;
1180    
1181     - switch (range->max) {
1182     - case 10000000:
1183     - bits = 0x000;
1184     - break;
1185     - case 5000000:
1186     - bits = 0x100;
1187     - break;
1188     - case 2000000:
1189     - case 2500000:
1190     - bits = 0x200;
1191     - break;
1192     - case 1000000:
1193     - case 1250000:
1194     - bits = 0x300;
1195     - break;
1196     - case 500000:
1197     - bits = 0x400;
1198     - break;
1199     - case 200000:
1200     - case 250000:
1201     - bits = 0x500;
1202     - break;
1203     - case 100000:
1204     - bits = 0x600;
1205     - break;
1206     - case 50000:
1207     - bits = 0x700;
1208     - break;
1209     - default:
1210     - comedi_error(dev, "bug! in ai_range_bits_6xxx");
1211     - break;
1212     - }
1213     - if (range->min == 0)
1214     - bits += 0x900;
1215     - return bits;
1216     + return thisboard->ai_range_code[range_index] << 8;
1217     }
1218    
1219     static unsigned int hw_revision(const struct comedi_device *dev,
1220     diff --git a/drivers/target/target_core_sbc.c b/drivers/target/target_core_sbc.c
1221     index 92e6c510e5d0..70b0d265c37d 100644
1222     --- a/drivers/target/target_core_sbc.c
1223     +++ b/drivers/target/target_core_sbc.c
1224     @@ -562,7 +562,8 @@ sbc_parse_cdb(struct se_cmd *cmd, struct sbc_ops *ops)
1225     unsigned long long end_lba;
1226    
1227     end_lba = dev->transport->get_blocks(dev) + 1;
1228     - if (cmd->t_task_lba + sectors > end_lba) {
1229     + if (((cmd->t_task_lba + sectors) < cmd->t_task_lba) ||
1230     + ((cmd->t_task_lba + sectors) > end_lba)) {
1231     pr_err("cmd exceeds last lba %llu "
1232     "(lba %llu, sectors %u)\n",
1233     end_lba, cmd->t_task_lba, sectors);
1234     diff --git a/drivers/tty/tty_io.c b/drivers/tty/tty_io.c
1235     index d35afccdb6c9..2967b6eb4c70 100644
1236     --- a/drivers/tty/tty_io.c
1237     +++ b/drivers/tty/tty_io.c
1238     @@ -992,8 +992,8 @@ EXPORT_SYMBOL(start_tty);
1239     /* We limit tty time update visibility to every 8 seconds or so. */
1240     static void tty_update_time(struct timespec *time)
1241     {
1242     - unsigned long sec = get_seconds() & ~7;
1243     - if ((long)(sec - time->tv_sec) > 0)
1244     + unsigned long sec = get_seconds();
1245     + if (abs(sec - time->tv_sec) & ~7)
1246     time->tv_sec = sec;
1247     }
1248    
1249     diff --git a/drivers/tty/tty_ioctl.c b/drivers/tty/tty_ioctl.c
1250     index 088b4ca7d805..b46aca5cc23c 100644
1251     --- a/drivers/tty/tty_ioctl.c
1252     +++ b/drivers/tty/tty_ioctl.c
1253     @@ -217,11 +217,17 @@ void tty_wait_until_sent(struct tty_struct *tty, long timeout)
1254     #endif
1255     if (!timeout)
1256     timeout = MAX_SCHEDULE_TIMEOUT;
1257     +
1258     if (wait_event_interruptible_timeout(tty->write_wait,
1259     - !tty_chars_in_buffer(tty), timeout) >= 0) {
1260     - if (tty->ops->wait_until_sent)
1261     - tty->ops->wait_until_sent(tty, timeout);
1262     + !tty_chars_in_buffer(tty), timeout) < 0) {
1263     + return;
1264     }
1265     +
1266     + if (timeout == MAX_SCHEDULE_TIMEOUT)
1267     + timeout = 0;
1268     +
1269     + if (tty->ops->wait_until_sent)
1270     + tty->ops->wait_until_sent(tty, timeout);
1271     }
1272     EXPORT_SYMBOL(tty_wait_until_sent);
1273    
1274     diff --git a/drivers/usb/core/devio.c b/drivers/usb/core/devio.c
1275     index ce773cca2bf5..78ddfb43750a 100644
1276     --- a/drivers/usb/core/devio.c
1277     +++ b/drivers/usb/core/devio.c
1278     @@ -501,6 +501,7 @@ static void async_completed(struct urb *urb)
1279     as->status = urb->status;
1280     signr = as->signr;
1281     if (signr) {
1282     + memset(&sinfo, 0, sizeof(sinfo));
1283     sinfo.si_signo = as->signr;
1284     sinfo.si_errno = as->status;
1285     sinfo.si_code = SI_ASYNCIO;
1286     @@ -2228,6 +2229,7 @@ static void usbdev_remove(struct usb_device *udev)
1287     wake_up_all(&ps->wait);
1288     list_del_init(&ps->list);
1289     if (ps->discsignr) {
1290     + memset(&sinfo, 0, sizeof(sinfo));
1291     sinfo.si_signo = ps->discsignr;
1292     sinfo.si_errno = EPIPE;
1293     sinfo.si_code = SI_ASYNCIO;
1294     diff --git a/drivers/usb/host/xhci-ring.c b/drivers/usb/host/xhci-ring.c
1295     index eb45ac843712..9948890ef93e 100644
1296     --- a/drivers/usb/host/xhci-ring.c
1297     +++ b/drivers/usb/host/xhci-ring.c
1298     @@ -2064,7 +2064,7 @@ static int process_ctrl_td(struct xhci_hcd *xhci, struct xhci_td *td,
1299     if (event_trb != ep_ring->dequeue) {
1300     /* The event was for the status stage */
1301     if (event_trb == td->last_trb) {
1302     - if (td->urb->actual_length != 0) {
1303     + if (td->urb_length_set) {
1304     /* Don't overwrite a previously set error code
1305     */
1306     if ((*status == -EINPROGRESS || *status == 0) &&
1307     @@ -2078,7 +2078,13 @@ static int process_ctrl_td(struct xhci_hcd *xhci, struct xhci_td *td,
1308     td->urb->transfer_buffer_length;
1309     }
1310     } else {
1311     - /* Maybe the event was for the data stage? */
1312     + /*
1313     + * Maybe the event was for the data stage? If so, update
1314     + * already the actual_length of the URB and flag it as
1315     + * set, so that it is not overwritten in the event for
1316     + * the last TRB.
1317     + */
1318     + td->urb_length_set = true;
1319     td->urb->actual_length =
1320     td->urb->transfer_buffer_length -
1321     EVENT_TRB_LEN(le32_to_cpu(event->transfer_len));
1322     diff --git a/drivers/usb/host/xhci.h b/drivers/usb/host/xhci.h
1323     index 627fcd9388ca..373d4dada565 100644
1324     --- a/drivers/usb/host/xhci.h
1325     +++ b/drivers/usb/host/xhci.h
1326     @@ -1,3 +1,4 @@
1327     +
1328     /*
1329     * xHCI host controller driver
1330     *
1331     @@ -88,9 +89,10 @@ struct xhci_cap_regs {
1332     #define HCS_IST(p) (((p) >> 0) & 0xf)
1333     /* bits 4:7, max number of Event Ring segments */
1334     #define HCS_ERST_MAX(p) (((p) >> 4) & 0xf)
1335     +/* bits 21:25 Hi 5 bits of Scratchpad buffers SW must allocate for the HW */
1336     /* bit 26 Scratchpad restore - for save/restore HW state - not used yet */
1337     -/* bits 27:31 number of Scratchpad buffers SW must allocate for the HW */
1338     -#define HCS_MAX_SCRATCHPAD(p) (((p) >> 27) & 0x1f)
1339     +/* bits 27:31 Lo 5 bits of Scratchpad buffers SW must allocate for the HW */
1340     +#define HCS_MAX_SCRATCHPAD(p) ((((p) >> 16) & 0x3e0) | (((p) >> 27) & 0x1f))
1341    
1342     /* HCSPARAMS3 - hcs_params3 - bitmasks */
1343     /* bits 0:7, Max U1 to U0 latency for the roothub ports */
1344     @@ -1258,6 +1260,8 @@ struct xhci_td {
1345     struct xhci_segment *start_seg;
1346     union xhci_trb *first_trb;
1347     union xhci_trb *last_trb;
1348     + /* actual_length of the URB has already been set */
1349     + bool urb_length_set;
1350     };
1351    
1352     /* xHCI command default timeout value */
1353     diff --git a/drivers/usb/serial/bus.c b/drivers/usb/serial/bus.c
1354     index 7229b265870a..5c56efeaf202 100644
1355     --- a/drivers/usb/serial/bus.c
1356     +++ b/drivers/usb/serial/bus.c
1357     @@ -76,7 +76,7 @@ static int usb_serial_device_probe(struct device *dev)
1358     retval = device_create_file(dev, &dev_attr_port_number);
1359     if (retval) {
1360     if (driver->port_remove)
1361     - retval = driver->port_remove(port);
1362     + driver->port_remove(port);
1363     goto exit_with_autopm;
1364     }
1365    
1366     diff --git a/drivers/usb/serial/cp210x.c b/drivers/usb/serial/cp210x.c
1367     index f48f5dfab245..79e9ea005c63 100644
1368     --- a/drivers/usb/serial/cp210x.c
1369     +++ b/drivers/usb/serial/cp210x.c
1370     @@ -147,6 +147,8 @@ static const struct usb_device_id id_table[] = {
1371     { USB_DEVICE(0x166A, 0x0305) }, /* Clipsal C-5000CT2 C-Bus Spectrum Colour Touchscreen */
1372     { USB_DEVICE(0x166A, 0x0401) }, /* Clipsal L51xx C-Bus Architectural Dimmer */
1373     { USB_DEVICE(0x166A, 0x0101) }, /* Clipsal 5560884 C-Bus Multi-room Audio Matrix Switcher */
1374     + { USB_DEVICE(0x16C0, 0x09B0) }, /* Lunatico Seletek */
1375     + { USB_DEVICE(0x16C0, 0x09B1) }, /* Lunatico Seletek */
1376     { USB_DEVICE(0x16D6, 0x0001) }, /* Jablotron serial interface */
1377     { USB_DEVICE(0x16DC, 0x0010) }, /* W-IE-NE-R Plein & Baus GmbH PL512 Power Supply */
1378     { USB_DEVICE(0x16DC, 0x0011) }, /* W-IE-NE-R Plein & Baus GmbH RCM Remote Control for MARATON Power Supply */
1379     diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c
1380     index c625f55667f1..cf127a080644 100644
1381     --- a/drivers/usb/serial/ftdi_sio.c
1382     +++ b/drivers/usb/serial/ftdi_sio.c
1383     @@ -815,6 +815,8 @@ static struct usb_device_id id_table_combined [] = {
1384     { USB_DEVICE(FTDI_VID, FTDI_ELSTER_UNICOM_PID) },
1385     { USB_DEVICE(FTDI_VID, FTDI_PROPOX_JTAGCABLEII_PID) },
1386     { USB_DEVICE(FTDI_VID, FTDI_PROPOX_ISPCABLEIII_PID) },
1387     + { USB_DEVICE(FTDI_VID, CYBER_CORTEX_AV_PID),
1388     + .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
1389     { USB_DEVICE(OLIMEX_VID, OLIMEX_ARM_USB_OCD_PID),
1390     .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
1391     { USB_DEVICE(OLIMEX_VID, OLIMEX_ARM_USB_OCD_H_PID),
1392     diff --git a/drivers/usb/serial/ftdi_sio_ids.h b/drivers/usb/serial/ftdi_sio_ids.h
1393     index ac703a6e2115..e8d352615297 100644
1394     --- a/drivers/usb/serial/ftdi_sio_ids.h
1395     +++ b/drivers/usb/serial/ftdi_sio_ids.h
1396     @@ -38,6 +38,9 @@
1397    
1398     #define FTDI_LUMEL_PD12_PID 0x6002
1399    
1400     +/* Cyber Cortex AV by Fabulous Silicon (http://fabuloussilicon.com) */
1401     +#define CYBER_CORTEX_AV_PID 0x8698
1402     +
1403     /*
1404     * Marvell OpenRD Base, Client
1405     * http://www.open-rd.org
1406     diff --git a/drivers/usb/serial/generic.c b/drivers/usb/serial/generic.c
1407     index 8335b484f14e..a10648d2596b 100644
1408     --- a/drivers/usb/serial/generic.c
1409     +++ b/drivers/usb/serial/generic.c
1410     @@ -261,7 +261,8 @@ void usb_serial_generic_wait_until_sent(struct tty_struct *tty, long timeout)
1411     * character or at least one jiffy.
1412     */
1413     period = max_t(unsigned long, (10 * HZ / bps), 1);
1414     - period = min_t(unsigned long, period, timeout);
1415     + if (timeout)
1416     + period = min_t(unsigned long, period, timeout);
1417    
1418     dev_dbg(&port->dev, "%s - timeout = %u ms, period = %u ms\n",
1419     __func__, jiffies_to_msecs(timeout),
1420     @@ -271,7 +272,7 @@ void usb_serial_generic_wait_until_sent(struct tty_struct *tty, long timeout)
1421     schedule_timeout_interruptible(period);
1422     if (signal_pending(current))
1423     break;
1424     - if (time_after(jiffies, expire))
1425     + if (timeout && time_after(jiffies, expire))
1426     break;
1427     }
1428     }
1429     diff --git a/fs/autofs4/dev-ioctl.c b/fs/autofs4/dev-ioctl.c
1430     index 743c7c2c949d..6aa8312ad89f 100644
1431     --- a/fs/autofs4/dev-ioctl.c
1432     +++ b/fs/autofs4/dev-ioctl.c
1433     @@ -95,7 +95,7 @@ static int check_dev_ioctl_version(int cmd, struct autofs_dev_ioctl *param)
1434     */
1435     static struct autofs_dev_ioctl *copy_dev_ioctl(struct autofs_dev_ioctl __user *in)
1436     {
1437     - struct autofs_dev_ioctl tmp;
1438     + struct autofs_dev_ioctl tmp, *res;
1439    
1440     if (copy_from_user(&tmp, in, sizeof(tmp)))
1441     return ERR_PTR(-EFAULT);
1442     @@ -103,7 +103,11 @@ static struct autofs_dev_ioctl *copy_dev_ioctl(struct autofs_dev_ioctl __user *i
1443     if (tmp.size < sizeof(tmp))
1444     return ERR_PTR(-EINVAL);
1445    
1446     - return memdup_user(in, tmp.size);
1447     + res = memdup_user(in, tmp.size);
1448     + if (!IS_ERR(res))
1449     + res->size = tmp.size;
1450     +
1451     + return res;
1452     }
1453    
1454     static inline void free_dev_ioctl(struct autofs_dev_ioctl *param)
1455     diff --git a/fs/btrfs/file.c b/fs/btrfs/file.c
1456     index 4205ba752d40..caaf30f9f27f 100644
1457     --- a/fs/btrfs/file.c
1458     +++ b/fs/btrfs/file.c
1459     @@ -1593,22 +1593,10 @@ static ssize_t btrfs_file_aio_write(struct kiocb *iocb,
1460     mutex_unlock(&inode->i_mutex);
1461    
1462     /*
1463     - * we want to make sure fsync finds this change
1464     - * but we haven't joined a transaction running right now.
1465     - *
1466     - * Later on, someone is sure to update the inode and get the
1467     - * real transid recorded.
1468     - *
1469     - * We set last_trans now to the fs_info generation + 1,
1470     - * this will either be one more than the running transaction
1471     - * or the generation used for the next transaction if there isn't
1472     - * one running right now.
1473     - *
1474     * We also have to set last_sub_trans to the current log transid,
1475     * otherwise subsequent syncs to a file that's been synced in this
1476     * transaction will appear to have already occured.
1477     */
1478     - BTRFS_I(inode)->last_trans = root->fs_info->generation + 1;
1479     BTRFS_I(inode)->last_sub_trans = root->log_transid;
1480     if (num_written > 0 || num_written == -EIOCBQUEUED) {
1481     err = generic_write_sync(file, pos, num_written);
1482     @@ -1706,25 +1694,37 @@ int btrfs_sync_file(struct file *file, loff_t start, loff_t end, int datasync)
1483     atomic_inc(&root->log_batch);
1484    
1485     /*
1486     - * check the transaction that last modified this inode
1487     - * and see if its already been committed
1488     - */
1489     - if (!BTRFS_I(inode)->last_trans) {
1490     - mutex_unlock(&inode->i_mutex);
1491     - goto out;
1492     - }
1493     -
1494     - /*
1495     - * if the last transaction that changed this file was before
1496     - * the current transaction, we can bail out now without any
1497     - * syncing
1498     + * If the last transaction that changed this file was before the current
1499     + * transaction and we have the full sync flag set in our inode, we can
1500     + * bail out now without any syncing.
1501     + *
1502     + * Note that we can't bail out if the full sync flag isn't set. This is
1503     + * because when the full sync flag is set we start all ordered extents
1504     + * and wait for them to fully complete - when they complete they update
1505     + * the inode's last_trans field through:
1506     + *
1507     + * btrfs_finish_ordered_io() ->
1508     + * btrfs_update_inode_fallback() ->
1509     + * btrfs_update_inode() ->
1510     + * btrfs_set_inode_last_trans()
1511     + *
1512     + * So we are sure that last_trans is up to date and can do this check to
1513     + * bail out safely. For the fast path, when the full sync flag is not
1514     + * set in our inode, we can not do it because we start only our ordered
1515     + * extents and don't wait for them to complete (that is when
1516     + * btrfs_finish_ordered_io runs), so here at this point their last_trans
1517     + * value might be less than or equals to fs_info->last_trans_committed,
1518     + * and setting a speculative last_trans for an inode when a buffered
1519     + * write is made (such as fs_info->generation + 1 for example) would not
1520     + * be reliable since after setting the value and before fsync is called
1521     + * any number of transactions can start and commit (transaction kthread
1522     + * commits the current transaction periodically), and a transaction
1523     + * commit does not start nor waits for ordered extents to complete.
1524     */
1525     smp_mb();
1526     if (btrfs_inode_in_log(inode, root->fs_info->generation) ||
1527     - BTRFS_I(inode)->last_trans <=
1528     - root->fs_info->last_trans_committed) {
1529     - BTRFS_I(inode)->last_trans = 0;
1530     -
1531     + (full_sync && BTRFS_I(inode)->last_trans <=
1532     + root->fs_info->last_trans_committed)) {
1533     /*
1534     * We'v had everything committed since the last time we were
1535     * modified so clear this flag in case it was set for whatever
1536     diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
1537     index 187911fbabce..d20db6437723 100644
1538     --- a/fs/btrfs/inode.c
1539     +++ b/fs/btrfs/inode.c
1540     @@ -6825,7 +6825,6 @@ static int btrfs_get_blocks_direct(struct inode *inode, sector_t iblock,
1541     ((BTRFS_I(inode)->flags & BTRFS_INODE_NODATACOW) &&
1542     em->block_start != EXTENT_MAP_HOLE)) {
1543     int type;
1544     - int ret;
1545     u64 block_start, orig_start, orig_block_len, ram_bytes;
1546    
1547     if (test_bit(EXTENT_FLAG_PREALLOC, &em->flags))
1548     diff --git a/fs/btrfs/tree-log.c b/fs/btrfs/tree-log.c
1549     index bca436330681..7d3331cbccba 100644
1550     --- a/fs/btrfs/tree-log.c
1551     +++ b/fs/btrfs/tree-log.c
1552     @@ -943,7 +943,7 @@ again:
1553     base = btrfs_item_ptr_offset(leaf, path->slots[0]);
1554    
1555     while (cur_offset < item_size) {
1556     - extref = (struct btrfs_inode_extref *)base + cur_offset;
1557     + extref = (struct btrfs_inode_extref *)(base + cur_offset);
1558    
1559     victim_name_len = btrfs_inode_extref_name_len(leaf, extref);
1560    
1561     diff --git a/fs/debugfs/inode.c b/fs/debugfs/inode.c
1562     index c7c83ff0f752..7269ec329c01 100644
1563     --- a/fs/debugfs/inode.c
1564     +++ b/fs/debugfs/inode.c
1565     @@ -245,10 +245,19 @@ static int debugfs_show_options(struct seq_file *m, struct dentry *root)
1566     return 0;
1567     }
1568    
1569     +static void debugfs_evict_inode(struct inode *inode)
1570     +{
1571     + truncate_inode_pages(&inode->i_data, 0);
1572     + clear_inode(inode);
1573     + if (S_ISLNK(inode->i_mode))
1574     + kfree(inode->i_private);
1575     +}
1576     +
1577     static const struct super_operations debugfs_super_operations = {
1578     .statfs = simple_statfs,
1579     .remount_fs = debugfs_remount,
1580     .show_options = debugfs_show_options,
1581     + .evict_inode = debugfs_evict_inode,
1582     };
1583    
1584     static int debug_fill_super(struct super_block *sb, void *data, int silent)
1585     @@ -465,23 +474,14 @@ static int __debugfs_remove(struct dentry *dentry, struct dentry *parent)
1586     int ret = 0;
1587    
1588     if (debugfs_positive(dentry)) {
1589     - if (dentry->d_inode) {
1590     - dget(dentry);
1591     - switch (dentry->d_inode->i_mode & S_IFMT) {
1592     - case S_IFDIR:
1593     - ret = simple_rmdir(parent->d_inode, dentry);
1594     - break;
1595     - case S_IFLNK:
1596     - kfree(dentry->d_inode->i_private);
1597     - /* fall through */
1598     - default:
1599     - simple_unlink(parent->d_inode, dentry);
1600     - break;
1601     - }
1602     - if (!ret)
1603     - d_delete(dentry);
1604     - dput(dentry);
1605     - }
1606     + dget(dentry);
1607     + if (S_ISDIR(dentry->d_inode->i_mode))
1608     + ret = simple_rmdir(parent->d_inode, dentry);
1609     + else
1610     + simple_unlink(parent->d_inode, dentry);
1611     + if (!ret)
1612     + d_delete(dentry);
1613     + dput(dentry);
1614     }
1615     return ret;
1616     }
1617     diff --git a/fs/nilfs2/btree.c b/fs/nilfs2/btree.c
1618     index b2e3ff347620..ecdbae19a766 100644
1619     --- a/fs/nilfs2/btree.c
1620     +++ b/fs/nilfs2/btree.c
1621     @@ -31,6 +31,8 @@
1622     #include "alloc.h"
1623     #include "dat.h"
1624    
1625     +static void __nilfs_btree_init(struct nilfs_bmap *bmap);
1626     +
1627     static struct nilfs_btree_path *nilfs_btree_alloc_path(void)
1628     {
1629     struct nilfs_btree_path *path;
1630     @@ -368,6 +370,34 @@ static int nilfs_btree_node_broken(const struct nilfs_btree_node *node,
1631     return ret;
1632     }
1633    
1634     +/**
1635     + * nilfs_btree_root_broken - verify consistency of btree root node
1636     + * @node: btree root node to be examined
1637     + * @ino: inode number
1638     + *
1639     + * Return Value: If node is broken, 1 is returned. Otherwise, 0 is returned.
1640     + */
1641     +static int nilfs_btree_root_broken(const struct nilfs_btree_node *node,
1642     + unsigned long ino)
1643     +{
1644     + int level, flags, nchildren;
1645     + int ret = 0;
1646     +
1647     + level = nilfs_btree_node_get_level(node);
1648     + flags = nilfs_btree_node_get_flags(node);
1649     + nchildren = nilfs_btree_node_get_nchildren(node);
1650     +
1651     + if (unlikely(level < NILFS_BTREE_LEVEL_NODE_MIN ||
1652     + level > NILFS_BTREE_LEVEL_MAX ||
1653     + nchildren < 0 ||
1654     + nchildren > NILFS_BTREE_ROOT_NCHILDREN_MAX)) {
1655     + pr_crit("NILFS: bad btree root (inode number=%lu): level = %d, flags = 0x%x, nchildren = %d\n",
1656     + ino, level, flags, nchildren);
1657     + ret = 1;
1658     + }
1659     + return ret;
1660     +}
1661     +
1662     int nilfs_btree_broken_node_block(struct buffer_head *bh)
1663     {
1664     int ret;
1665     @@ -1713,7 +1743,7 @@ nilfs_btree_commit_convert_and_insert(struct nilfs_bmap *btree,
1666    
1667     /* convert and insert */
1668     dat = NILFS_BMAP_USE_VBN(btree) ? nilfs_bmap_get_dat(btree) : NULL;
1669     - nilfs_btree_init(btree);
1670     + __nilfs_btree_init(btree);
1671     if (nreq != NULL) {
1672     nilfs_bmap_commit_alloc_ptr(btree, dreq, dat);
1673     nilfs_bmap_commit_alloc_ptr(btree, nreq, dat);
1674     @@ -2294,12 +2324,23 @@ static const struct nilfs_bmap_operations nilfs_btree_ops_gc = {
1675     .bop_gather_data = NULL,
1676     };
1677    
1678     -int nilfs_btree_init(struct nilfs_bmap *bmap)
1679     +static void __nilfs_btree_init(struct nilfs_bmap *bmap)
1680     {
1681     bmap->b_ops = &nilfs_btree_ops;
1682     bmap->b_nchildren_per_block =
1683     NILFS_BTREE_NODE_NCHILDREN_MAX(nilfs_btree_node_size(bmap));
1684     - return 0;
1685     +}
1686     +
1687     +int nilfs_btree_init(struct nilfs_bmap *bmap)
1688     +{
1689     + int ret = 0;
1690     +
1691     + __nilfs_btree_init(bmap);
1692     +
1693     + if (nilfs_btree_root_broken(nilfs_btree_get_root(bmap),
1694     + bmap->b_inode->i_ino))
1695     + ret = -EIO;
1696     + return ret;
1697     }
1698    
1699     void nilfs_btree_init_gc(struct nilfs_bmap *bmap)
1700     diff --git a/fs/proc/generic.c b/fs/proc/generic.c
1701     index a2596afffae6..846b1d7852ed 100644
1702     --- a/fs/proc/generic.c
1703     +++ b/fs/proc/generic.c
1704     @@ -19,7 +19,6 @@
1705     #include <linux/mount.h>
1706     #include <linux/init.h>
1707     #include <linux/idr.h>
1708     -#include <linux/namei.h>
1709     #include <linux/bitops.h>
1710     #include <linux/spinlock.h>
1711     #include <linux/completion.h>
1712     @@ -163,17 +162,6 @@ void proc_free_inum(unsigned int inum)
1713     spin_unlock_irqrestore(&proc_inum_lock, flags);
1714     }
1715    
1716     -static void *proc_follow_link(struct dentry *dentry, struct nameidata *nd)
1717     -{
1718     - nd_set_link(nd, __PDE_DATA(dentry->d_inode));
1719     - return NULL;
1720     -}
1721     -
1722     -static const struct inode_operations proc_link_inode_operations = {
1723     - .readlink = generic_readlink,
1724     - .follow_link = proc_follow_link,
1725     -};
1726     -
1727     /*
1728     * As some entries in /proc are volatile, we want to
1729     * get rid of unused dentries. This could be made
1730     diff --git a/fs/proc/inode.c b/fs/proc/inode.c
1731     index 073aea60cf8f..843b8ef04e84 100644
1732     --- a/fs/proc/inode.c
1733     +++ b/fs/proc/inode.c
1734     @@ -23,6 +23,7 @@
1735     #include <linux/slab.h>
1736     #include <linux/mount.h>
1737     #include <linux/magic.h>
1738     +#include <linux/namei.h>
1739    
1740     #include <asm/uaccess.h>
1741    
1742     @@ -373,6 +374,26 @@ static const struct file_operations proc_reg_file_ops_no_compat = {
1743     };
1744     #endif
1745    
1746     +static void *proc_follow_link(struct dentry *dentry, struct nameidata *nd)
1747     +{
1748     + struct proc_dir_entry *pde = PDE(dentry->d_inode);
1749     + if (unlikely(!use_pde(pde)))
1750     + return ERR_PTR(-EINVAL);
1751     + nd_set_link(nd, pde->data);
1752     + return pde;
1753     +}
1754     +
1755     +static void proc_put_link(struct dentry *dentry, struct nameidata *nd, void *p)
1756     +{
1757     + unuse_pde(p);
1758     +}
1759     +
1760     +const struct inode_operations proc_link_inode_operations = {
1761     + .readlink = generic_readlink,
1762     + .follow_link = proc_follow_link,
1763     + .put_link = proc_put_link,
1764     +};
1765     +
1766     struct inode *proc_get_inode(struct super_block *sb, struct proc_dir_entry *de)
1767     {
1768     struct inode *inode = new_inode_pseudo(sb);
1769     diff --git a/fs/proc/internal.h b/fs/proc/internal.h
1770     index d600fb098b6a..ec335ef62533 100644
1771     --- a/fs/proc/internal.h
1772     +++ b/fs/proc/internal.h
1773     @@ -202,6 +202,7 @@ struct pde_opener {
1774     int closing;
1775     struct completion *c;
1776     };
1777     +extern const struct inode_operations proc_link_inode_operations;
1778    
1779     extern const struct inode_operations proc_pid_link_inode_operations;
1780    
1781     diff --git a/kernel/power/qos.c b/kernel/power/qos.c
1782     index 25cf89bc659e..8703fc729fb4 100644
1783     --- a/kernel/power/qos.c
1784     +++ b/kernel/power/qos.c
1785     @@ -369,12 +369,6 @@ void pm_qos_update_request(struct pm_qos_request *req,
1786     }
1787    
1788     cancel_delayed_work_sync(&req->work);
1789     -
1790     - if (new_value != req->node.prio)
1791     - pm_qos_update_target(
1792     - pm_qos_array[req->pm_qos_class]->constraints,
1793     - &req->node, PM_QOS_UPDATE_REQ, new_value);
1794     -
1795     __pm_qos_update_request(req, new_value);
1796     }
1797     EXPORT_SYMBOL_GPL(pm_qos_update_request);
1798     diff --git a/mm/compaction.c b/mm/compaction.c
1799     index fb797a32362f..eeaaa929d1de 100644
1800     --- a/mm/compaction.c
1801     +++ b/mm/compaction.c
1802     @@ -881,7 +881,7 @@ static int compact_finished(struct zone *zone,
1803     return COMPACT_PARTIAL;
1804    
1805     /* Job done if allocation would set block type */
1806     - if (cc->order >= pageblock_order && area->nr_free)
1807     + if (order >= pageblock_order && area->nr_free)
1808     return COMPACT_PARTIAL;
1809     }
1810    
1811     diff --git a/mm/hugetlb.c b/mm/hugetlb.c
1812     index 7de4f67c81fe..d9bc87ca062b 100644
1813     --- a/mm/hugetlb.c
1814     +++ b/mm/hugetlb.c
1815     @@ -2451,9 +2451,10 @@ again:
1816     continue;
1817    
1818     /*
1819     - * HWPoisoned hugepage is already unmapped and dropped reference
1820     + * Migrating hugepage or HWPoisoned hugepage is already
1821     + * unmapped and its refcount is dropped, so just clear pte here.
1822     */
1823     - if (unlikely(is_hugetlb_entry_hwpoisoned(pte))) {
1824     + if (unlikely(!pte_present(pte))) {
1825     huge_pte_clear(mm, address, ptep);
1826     continue;
1827     }
1828     diff --git a/mm/memory.c b/mm/memory.c
1829     index 8b2d75f61b32..04232bb173f0 100644
1830     --- a/mm/memory.c
1831     +++ b/mm/memory.c
1832     @@ -4088,7 +4088,7 @@ int generic_access_phys(struct vm_area_struct *vma, unsigned long addr,
1833     if (follow_phys(vma, addr, write, &prot, &phys_addr))
1834     return -EINVAL;
1835    
1836     - maddr = ioremap_prot(phys_addr, PAGE_SIZE, prot);
1837     + maddr = ioremap_prot(phys_addr, PAGE_ALIGN(len + offset), prot);
1838     if (write)
1839     memcpy_toio(maddr + offset, buf, len);
1840     else
1841     diff --git a/mm/mmap.c b/mm/mmap.c
1842     index 43a7089c6a7c..70ff9b41c970 100644
1843     --- a/mm/mmap.c
1844     +++ b/mm/mmap.c
1845     @@ -127,7 +127,7 @@ EXPORT_SYMBOL_GPL(vm_memory_committed);
1846     */
1847     int __vm_enough_memory(struct mm_struct *mm, long pages, int cap_sys_admin)
1848     {
1849     - unsigned long free, allowed, reserve;
1850     + long free, allowed, reserve;
1851    
1852     vm_acct_memory(pages);
1853    
1854     @@ -193,7 +193,7 @@ int __vm_enough_memory(struct mm_struct *mm, long pages, int cap_sys_admin)
1855     */
1856     if (mm) {
1857     reserve = sysctl_user_reserve_kbytes >> (PAGE_SHIFT - 10);
1858     - allowed -= min(mm->total_vm / 32, reserve);
1859     + allowed -= min_t(long, mm->total_vm / 32, reserve);
1860     }
1861    
1862     if (percpu_counter_read_positive(&vm_committed_as) < allowed)
1863     diff --git a/mm/nommu.c b/mm/nommu.c
1864     index 298884dcd6e7..d9d07a5d2318 100644
1865     --- a/mm/nommu.c
1866     +++ b/mm/nommu.c
1867     @@ -1898,7 +1898,7 @@ EXPORT_SYMBOL(unmap_mapping_range);
1868     */
1869     int __vm_enough_memory(struct mm_struct *mm, long pages, int cap_sys_admin)
1870     {
1871     - unsigned long free, allowed, reserve;
1872     + long free, allowed, reserve;
1873    
1874     vm_acct_memory(pages);
1875    
1876     @@ -1963,7 +1963,7 @@ int __vm_enough_memory(struct mm_struct *mm, long pages, int cap_sys_admin)
1877     */
1878     if (mm) {
1879     reserve = sysctl_user_reserve_kbytes >> (PAGE_SHIFT - 10);
1880     - allowed -= min(mm->total_vm / 32, reserve);
1881     + allowed -= min_t(long, mm->total_vm / 32, reserve);
1882     }
1883    
1884     if (percpu_counter_read_positive(&vm_committed_as) < allowed)
1885     diff --git a/net/compat.c b/net/compat.c
1886     index cbc1a2a26587..275af79c131b 100644
1887     --- a/net/compat.c
1888     +++ b/net/compat.c
1889     @@ -738,24 +738,18 @@ static unsigned char nas[21] = {
1890    
1891     asmlinkage long compat_sys_sendmsg(int fd, struct compat_msghdr __user *msg, unsigned int flags)
1892     {
1893     - if (flags & MSG_CMSG_COMPAT)
1894     - return -EINVAL;
1895     return __sys_sendmsg(fd, (struct msghdr __user *)msg, flags | MSG_CMSG_COMPAT);
1896     }
1897    
1898     asmlinkage long compat_sys_sendmmsg(int fd, struct compat_mmsghdr __user *mmsg,
1899     unsigned int vlen, unsigned int flags)
1900     {
1901     - if (flags & MSG_CMSG_COMPAT)
1902     - return -EINVAL;
1903     return __sys_sendmmsg(fd, (struct mmsghdr __user *)mmsg, vlen,
1904     flags | MSG_CMSG_COMPAT);
1905     }
1906    
1907     asmlinkage long compat_sys_recvmsg(int fd, struct compat_msghdr __user *msg, unsigned int flags)
1908     {
1909     - if (flags & MSG_CMSG_COMPAT)
1910     - return -EINVAL;
1911     return __sys_recvmsg(fd, (struct msghdr __user *)msg, flags | MSG_CMSG_COMPAT);
1912     }
1913    
1914     @@ -778,9 +772,6 @@ asmlinkage long compat_sys_recvmmsg(int fd, struct compat_mmsghdr __user *mmsg,
1915     int datagrams;
1916     struct timespec ktspec;
1917    
1918     - if (flags & MSG_CMSG_COMPAT)
1919     - return -EINVAL;
1920     -
1921     if (timeout == NULL)
1922     return __sys_recvmmsg(fd, (struct mmsghdr __user *)mmsg, vlen,
1923     flags | MSG_CMSG_COMPAT, NULL);
1924     diff --git a/net/core/dev.c b/net/core/dev.c
1925     index c310440309bb..aeca8dd88b2a 100644
1926     --- a/net/core/dev.c
1927     +++ b/net/core/dev.c
1928     @@ -927,7 +927,7 @@ bool dev_valid_name(const char *name)
1929     return false;
1930    
1931     while (*name) {
1932     - if (*name == '/' || isspace(*name))
1933     + if (*name == '/' || *name == ':' || isspace(*name))
1934     return false;
1935     name++;
1936     }
1937     diff --git a/net/core/gen_stats.c b/net/core/gen_stats.c
1938     index ddedf211e588..b96437b6e82b 100644
1939     --- a/net/core/gen_stats.c
1940     +++ b/net/core/gen_stats.c
1941     @@ -32,6 +32,9 @@ gnet_stats_copy(struct gnet_dump *d, int type, void *buf, int size)
1942     return 0;
1943    
1944     nla_put_failure:
1945     + kfree(d->xstats);
1946     + d->xstats = NULL;
1947     + d->xstats_len = 0;
1948     spin_unlock_bh(d->lock);
1949     return -1;
1950     }
1951     @@ -205,7 +208,9 @@ int
1952     gnet_stats_copy_app(struct gnet_dump *d, void *st, int len)
1953     {
1954     if (d->compat_xstats) {
1955     - d->xstats = st;
1956     + d->xstats = kmemdup(st, len, GFP_ATOMIC);
1957     + if (!d->xstats)
1958     + goto err_out;
1959     d->xstats_len = len;
1960     }
1961    
1962     @@ -213,6 +218,11 @@ gnet_stats_copy_app(struct gnet_dump *d, void *st, int len)
1963     return gnet_stats_copy(d, TCA_STATS_APP, st, len);
1964    
1965     return 0;
1966     +
1967     +err_out:
1968     + d->xstats_len = 0;
1969     + spin_unlock_bh(d->lock);
1970     + return -1;
1971     }
1972     EXPORT_SYMBOL(gnet_stats_copy_app);
1973    
1974     @@ -245,6 +255,9 @@ gnet_stats_finish_copy(struct gnet_dump *d)
1975     return -1;
1976     }
1977    
1978     + kfree(d->xstats);
1979     + d->xstats = NULL;
1980     + d->xstats_len = 0;
1981     spin_unlock_bh(d->lock);
1982     return 0;
1983     }
1984     diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c
1985     index 279b5dcf09ae..a67310e00b3f 100644
1986     --- a/net/core/rtnetlink.c
1987     +++ b/net/core/rtnetlink.c
1988     @@ -1138,14 +1138,10 @@ static const struct nla_policy ifla_vfinfo_policy[IFLA_VF_INFO_MAX+1] = {
1989     };
1990    
1991     static const struct nla_policy ifla_vf_policy[IFLA_VF_MAX+1] = {
1992     - [IFLA_VF_MAC] = { .type = NLA_BINARY,
1993     - .len = sizeof(struct ifla_vf_mac) },
1994     - [IFLA_VF_VLAN] = { .type = NLA_BINARY,
1995     - .len = sizeof(struct ifla_vf_vlan) },
1996     - [IFLA_VF_TX_RATE] = { .type = NLA_BINARY,
1997     - .len = sizeof(struct ifla_vf_tx_rate) },
1998     - [IFLA_VF_SPOOFCHK] = { .type = NLA_BINARY,
1999     - .len = sizeof(struct ifla_vf_spoofchk) },
2000     + [IFLA_VF_MAC] = { .len = sizeof(struct ifla_vf_mac) },
2001     + [IFLA_VF_VLAN] = { .len = sizeof(struct ifla_vf_vlan) },
2002     + [IFLA_VF_TX_RATE] = { .len = sizeof(struct ifla_vf_tx_rate) },
2003     + [IFLA_VF_SPOOFCHK] = { .len = sizeof(struct ifla_vf_spoofchk) },
2004     };
2005    
2006     static const struct nla_policy ifla_port_policy[IFLA_PORT_MAX+1] = {
2007     @@ -1855,8 +1851,16 @@ replay:
2008     goto out;
2009    
2010     err = rtnl_configure_link(dev, ifm);
2011     - if (err < 0)
2012     - unregister_netdevice(dev);
2013     + if (err < 0) {
2014     + if (ops->newlink) {
2015     + LIST_HEAD(list_kill);
2016     +
2017     + ops->dellink(dev, &list_kill);
2018     + unregister_netdevice_many(&list_kill);
2019     + } else {
2020     + unregister_netdevice(dev);
2021     + }
2022     + }
2023     out:
2024     put_net(dest_net);
2025     return err;
2026     diff --git a/net/ipv4/ip_fragment.c b/net/ipv4/ip_fragment.c
2027     index b66910aaef4d..4c1884fed548 100644
2028     --- a/net/ipv4/ip_fragment.c
2029     +++ b/net/ipv4/ip_fragment.c
2030     @@ -678,27 +678,30 @@ EXPORT_SYMBOL(ip_defrag);
2031     struct sk_buff *ip_check_defrag(struct sk_buff *skb, u32 user)
2032     {
2033     struct iphdr iph;
2034     + int netoff;
2035     u32 len;
2036    
2037     if (skb->protocol != htons(ETH_P_IP))
2038     return skb;
2039    
2040     - if (!skb_copy_bits(skb, 0, &iph, sizeof(iph)))
2041     + netoff = skb_network_offset(skb);
2042     +
2043     + if (skb_copy_bits(skb, netoff, &iph, sizeof(iph)) < 0)
2044     return skb;
2045    
2046     if (iph.ihl < 5 || iph.version != 4)
2047     return skb;
2048    
2049     len = ntohs(iph.tot_len);
2050     - if (skb->len < len || len < (iph.ihl * 4))
2051     + if (skb->len < netoff + len || len < (iph.ihl * 4))
2052     return skb;
2053    
2054     if (ip_is_fragment(&iph)) {
2055     skb = skb_share_check(skb, GFP_ATOMIC);
2056     if (skb) {
2057     - if (!pskb_may_pull(skb, iph.ihl*4))
2058     + if (!pskb_may_pull(skb, netoff + iph.ihl * 4))
2059     return skb;
2060     - if (pskb_trim_rcsum(skb, len))
2061     + if (pskb_trim_rcsum(skb, netoff + len))
2062     return skb;
2063     memset(IPCB(skb), 0, sizeof(struct inet_skb_parm));
2064     if (ip_defrag(skb, user))
2065     diff --git a/net/ipv4/ip_output.c b/net/ipv4/ip_output.c
2066     index def18547748e..57e745086302 100644
2067     --- a/net/ipv4/ip_output.c
2068     +++ b/net/ipv4/ip_output.c
2069     @@ -845,7 +845,8 @@ static int __ip_append_data(struct sock *sk,
2070     cork->length += length;
2071     if (((length > mtu) || (skb && skb_has_frags(skb))) &&
2072     (sk->sk_protocol == IPPROTO_UDP) &&
2073     - (rt->dst.dev->features & NETIF_F_UFO) && !rt->dst.header_len) {
2074     + (rt->dst.dev->features & NETIF_F_UFO) && !rt->dst.header_len &&
2075     + (sk->sk_type == SOCK_DGRAM)) {
2076     err = ip_ufo_append_data(sk, queue, getfrag, from, length,
2077     hh_len, fragheaderlen, transhdrlen,
2078     maxfraglen, flags);
2079     diff --git a/net/ipv6/ip6_output.c b/net/ipv6/ip6_output.c
2080     index 071edcba4158..1ce7ea1f40b7 100644
2081     --- a/net/ipv6/ip6_output.c
2082     +++ b/net/ipv6/ip6_output.c
2083     @@ -1286,7 +1286,8 @@ int ip6_append_data(struct sock *sk, int getfrag(void *from, char *to,
2084     if (((length > mtu) ||
2085     (skb && skb_has_frags(skb))) &&
2086     (sk->sk_protocol == IPPROTO_UDP) &&
2087     - (rt->dst.dev->features & NETIF_F_UFO)) {
2088     + (rt->dst.dev->features & NETIF_F_UFO) &&
2089     + (sk->sk_type == SOCK_DGRAM)) {
2090     err = ip6_ufo_append_data(sk, getfrag, from, length,
2091     hh_len, fragheaderlen,
2092     transhdrlen, mtu, flags, rt);
2093     diff --git a/net/ipv6/route.c b/net/ipv6/route.c
2094     index 92274796eb71..d94d224f7e68 100644
2095     --- a/net/ipv6/route.c
2096     +++ b/net/ipv6/route.c
2097     @@ -109,7 +109,7 @@ static u32 *ipv6_cow_metrics(struct dst_entry *dst, unsigned long old)
2098     u32 *p = NULL;
2099    
2100     if (!(rt->dst.flags & DST_HOST))
2101     - return NULL;
2102     + return dst_cow_metrics_generic(dst, old);
2103    
2104     peer = rt6_get_peer_create(rt);
2105     if (peer) {
2106     diff --git a/net/irda/ircomm/ircomm_tty.c b/net/irda/ircomm/ircomm_tty.c
2107     index 41ac7938268b..2ee29ed13bd4 100644
2108     --- a/net/irda/ircomm/ircomm_tty.c
2109     +++ b/net/irda/ircomm/ircomm_tty.c
2110     @@ -820,7 +820,9 @@ static void ircomm_tty_wait_until_sent(struct tty_struct *tty, int timeout)
2111     orig_jiffies = jiffies;
2112    
2113     /* Set poll time to 200 ms */
2114     - poll_time = IRDA_MIN(timeout, msecs_to_jiffies(200));
2115     + poll_time = msecs_to_jiffies(200);
2116     + if (timeout)
2117     + poll_time = min_t(unsigned long, timeout, poll_time);
2118    
2119     spin_lock_irqsave(&self->spinlock, flags);
2120     while (self->tx_skb && self->tx_skb->len) {
2121     diff --git a/net/sched/ematch.c b/net/sched/ematch.c
2122     index 3a633debb6df..a2abc449ce8f 100644
2123     --- a/net/sched/ematch.c
2124     +++ b/net/sched/ematch.c
2125     @@ -227,6 +227,7 @@ static int tcf_em_validate(struct tcf_proto *tp,
2126     * to replay the request.
2127     */
2128     module_put(em->ops->owner);
2129     + em->ops = NULL;
2130     err = -EAGAIN;
2131     }
2132     #endif
2133     diff --git a/net/sunrpc/cache.c b/net/sunrpc/cache.c
2134     index 80fe5c86efd1..231b71944c52 100644
2135     --- a/net/sunrpc/cache.c
2136     +++ b/net/sunrpc/cache.c
2137     @@ -930,7 +930,7 @@ static unsigned int cache_poll(struct file *filp, poll_table *wait,
2138     poll_wait(filp, &queue_wait, wait);
2139    
2140     /* alway allow write */
2141     - mask = POLL_OUT | POLLWRNORM;
2142     + mask = POLLOUT | POLLWRNORM;
2143    
2144     if (!rp)
2145     return mask;
2146     diff --git a/sound/core/pcm_native.c b/sound/core/pcm_native.c
2147     index 175dca44c97e..707405cbc5c9 100644
2148     --- a/sound/core/pcm_native.c
2149     +++ b/sound/core/pcm_native.c
2150     @@ -1404,6 +1404,8 @@ static int snd_pcm_do_drain_init(struct snd_pcm_substream *substream, int state)
2151     if (! snd_pcm_playback_empty(substream)) {
2152     snd_pcm_do_start(substream, SNDRV_PCM_STATE_DRAINING);
2153     snd_pcm_post_start(substream, SNDRV_PCM_STATE_DRAINING);
2154     + } else {
2155     + runtime->status->state = SNDRV_PCM_STATE_SETUP;
2156     }
2157     break;
2158     case SNDRV_PCM_STATE_RUNNING:
2159     diff --git a/sound/pci/hda/patch_sigmatel.c b/sound/pci/hda/patch_sigmatel.c
2160     index 4ae5767a2cf5..44d3fb95ebba 100644
2161     --- a/sound/pci/hda/patch_sigmatel.c
2162     +++ b/sound/pci/hda/patch_sigmatel.c
2163     @@ -85,6 +85,7 @@ enum {
2164     STAC_ALIENWARE_M17X,
2165     STAC_92HD89XX_HP_FRONT_JACK,
2166     STAC_92HD89XX_HP_Z1_G2_RIGHT_MIC_JACK,
2167     + STAC_92HD73XX_ASUS_MOBO,
2168     STAC_92HD73XX_MODELS
2169     };
2170    
2171     @@ -1915,7 +1916,18 @@ static const struct hda_fixup stac92hd73xx_fixups[] = {
2172     [STAC_92HD89XX_HP_Z1_G2_RIGHT_MIC_JACK] = {
2173     .type = HDA_FIXUP_PINS,
2174     .v.pins = stac92hd89xx_hp_z1_g2_right_mic_jack_pin_configs,
2175     - }
2176     + },
2177     + [STAC_92HD73XX_ASUS_MOBO] = {
2178     + .type = HDA_FIXUP_PINS,
2179     + .v.pins = (const struct hda_pintbl[]) {
2180     + /* enable 5.1 and SPDIF out */
2181     + { 0x0c, 0x01014411 },
2182     + { 0x0d, 0x01014410 },
2183     + { 0x0e, 0x01014412 },
2184     + { 0x22, 0x014b1180 },
2185     + { }
2186     + }
2187     + },
2188     };
2189    
2190     static const struct hda_model_fixup stac92hd73xx_models[] = {
2191     @@ -1927,6 +1939,7 @@ static const struct hda_model_fixup stac92hd73xx_models[] = {
2192     { .id = STAC_DELL_M6_BOTH, .name = "dell-m6" },
2193     { .id = STAC_DELL_EQ, .name = "dell-eq" },
2194     { .id = STAC_ALIENWARE_M17X, .name = "alienware" },
2195     + { .id = STAC_92HD73XX_ASUS_MOBO, .name = "asus-mobo" },
2196     {}
2197     };
2198    
2199     @@ -1979,6 +1992,8 @@ static const struct snd_pci_quirk stac92hd73xx_fixup_tbl[] = {
2200     "HP Z1 G2", STAC_92HD89XX_HP_Z1_G2_RIGHT_MIC_JACK),
2201     SND_PCI_QUIRK(PCI_VENDOR_ID_HP, 0x2b17,
2202     "unknown HP", STAC_92HD89XX_HP_FRONT_JACK),
2203     + SND_PCI_QUIRK(PCI_VENDOR_ID_ASUSTEK, 0x83f8, "ASUS AT4NM10",
2204     + STAC_92HD73XX_ASUS_MOBO),
2205     {} /* terminator */
2206     };
2207