Magellan Linux

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

Parent Directory Parent Directory | Revision Log Revision Log


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