Magellan Linux

Contents of /trunk/kernel-magellan/patches-3.11/0103-3.11.4-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2296 - (show annotations) (download)
Mon Oct 7 12:07:09 2013 UTC (10 years, 7 months ago) by niro
File size: 64211 byte(s)
-linux-3.11.4
1 diff --git a/Makefile b/Makefile
2 index 4f91b99..97bae8a1 100644
3 --- a/Makefile
4 +++ b/Makefile
5 @@ -1,6 +1,6 @@
6 VERSION = 3
7 PATCHLEVEL = 11
8 -SUBLEVEL = 3
9 +SUBLEVEL = 4
10 EXTRAVERSION =
11 NAME = Linux for Workgroups
12
13 diff --git a/arch/arm/crypto/aes-armv4.S b/arch/arm/crypto/aes-armv4.S
14 index 19d6cd6..3a14ea8 100644
15 --- a/arch/arm/crypto/aes-armv4.S
16 +++ b/arch/arm/crypto/aes-armv4.S
17 @@ -148,7 +148,7 @@ AES_Te:
18 @ const AES_KEY *key) {
19 .align 5
20 ENTRY(AES_encrypt)
21 - sub r3,pc,#8 @ AES_encrypt
22 + adr r3,AES_encrypt
23 stmdb sp!,{r1,r4-r12,lr}
24 mov r12,r0 @ inp
25 mov r11,r2
26 @@ -381,7 +381,7 @@ _armv4_AES_encrypt:
27 .align 5
28 ENTRY(private_AES_set_encrypt_key)
29 _armv4_AES_set_encrypt_key:
30 - sub r3,pc,#8 @ AES_set_encrypt_key
31 + adr r3,_armv4_AES_set_encrypt_key
32 teq r0,#0
33 moveq r0,#-1
34 beq .Labrt
35 @@ -843,7 +843,7 @@ AES_Td:
36 @ const AES_KEY *key) {
37 .align 5
38 ENTRY(AES_decrypt)
39 - sub r3,pc,#8 @ AES_decrypt
40 + adr r3,AES_decrypt
41 stmdb sp!,{r1,r4-r12,lr}
42 mov r12,r0 @ inp
43 mov r11,r2
44 diff --git a/arch/x86/kernel/reboot.c b/arch/x86/kernel/reboot.c
45 index 563ed91..5f4ad27 100644
46 --- a/arch/x86/kernel/reboot.c
47 +++ b/arch/x86/kernel/reboot.c
48 @@ -358,6 +358,22 @@ static struct dmi_system_id __initdata reboot_dmi_table[] = {
49 DMI_MATCH(DMI_PRODUCT_NAME, "Precision M6600"),
50 },
51 },
52 + { /* Handle problems with rebooting on the Dell PowerEdge C6100. */
53 + .callback = set_pci_reboot,
54 + .ident = "Dell PowerEdge C6100",
55 + .matches = {
56 + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
57 + DMI_MATCH(DMI_PRODUCT_NAME, "C6100"),
58 + },
59 + },
60 + { /* Some C6100 machines were shipped with vendor being 'Dell'. */
61 + .callback = set_pci_reboot,
62 + .ident = "Dell PowerEdge C6100",
63 + .matches = {
64 + DMI_MATCH(DMI_SYS_VENDOR, "Dell"),
65 + DMI_MATCH(DMI_PRODUCT_NAME, "C6100"),
66 + },
67 + },
68 { }
69 };
70
71 diff --git a/arch/x86/platform/efi/efi.c b/arch/x86/platform/efi/efi.c
72 index 90f6ed1..c7e22ab 100644
73 --- a/arch/x86/platform/efi/efi.c
74 +++ b/arch/x86/platform/efi/efi.c
75 @@ -912,10 +912,13 @@ void __init efi_enter_virtual_mode(void)
76
77 for (p = memmap.map; p < memmap.map_end; p += memmap.desc_size) {
78 md = p;
79 - if (!(md->attribute & EFI_MEMORY_RUNTIME) &&
80 - md->type != EFI_BOOT_SERVICES_CODE &&
81 - md->type != EFI_BOOT_SERVICES_DATA)
82 - continue;
83 + if (!(md->attribute & EFI_MEMORY_RUNTIME)) {
84 +#ifdef CONFIG_X86_64
85 + if (md->type != EFI_BOOT_SERVICES_CODE &&
86 + md->type != EFI_BOOT_SERVICES_DATA)
87 +#endif
88 + continue;
89 + }
90
91 size = md->num_pages << EFI_PAGE_SHIFT;
92 end = md->phys_addr + size;
93 diff --git a/drivers/base/core.c b/drivers/base/core.c
94 index 8856d74..2d1c6ba 100644
95 --- a/drivers/base/core.c
96 +++ b/drivers/base/core.c
97 @@ -2033,7 +2033,7 @@ EXPORT_SYMBOL_GPL(device_move);
98 */
99 void device_shutdown(void)
100 {
101 - struct device *dev;
102 + struct device *dev, *parent;
103
104 spin_lock(&devices_kset->list_lock);
105 /*
106 @@ -2050,7 +2050,7 @@ void device_shutdown(void)
107 * prevent it from being freed because parent's
108 * lock is to be held
109 */
110 - get_device(dev->parent);
111 + parent = get_device(dev->parent);
112 get_device(dev);
113 /*
114 * Make sure the device is off the kset list, in the
115 @@ -2060,8 +2060,8 @@ void device_shutdown(void)
116 spin_unlock(&devices_kset->list_lock);
117
118 /* hold lock to avoid race with probe/release */
119 - if (dev->parent)
120 - device_lock(dev->parent);
121 + if (parent)
122 + device_lock(parent);
123 device_lock(dev);
124
125 /* Don't allow any more runtime suspends */
126 @@ -2079,11 +2079,11 @@ void device_shutdown(void)
127 }
128
129 device_unlock(dev);
130 - if (dev->parent)
131 - device_unlock(dev->parent);
132 + if (parent)
133 + device_unlock(parent);
134
135 put_device(dev);
136 - put_device(dev->parent);
137 + put_device(parent);
138
139 spin_lock(&devices_kset->list_lock);
140 }
141 diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
142 index bedf15a..7fc8a76 100644
143 --- a/drivers/gpu/drm/i915/intel_display.c
144 +++ b/drivers/gpu/drm/i915/intel_display.c
145 @@ -4735,6 +4735,10 @@ static void i9xx_set_pipeconf(struct intel_crtc *intel_crtc)
146
147 pipeconf = 0;
148
149 + if (dev_priv->quirks & QUIRK_PIPEA_FORCE &&
150 + I915_READ(PIPECONF(intel_crtc->pipe)) & PIPECONF_ENABLE)
151 + pipeconf |= PIPECONF_ENABLE;
152 +
153 if (intel_crtc->pipe == 0 && INTEL_INFO(dev)->gen < 4) {
154 /* Enable pixel doubling when the dot clock is > 90% of the (display)
155 * core speed.
156 diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
157 index 26e162b..3aed1fe 100644
158 --- a/drivers/gpu/drm/i915/intel_dp.c
159 +++ b/drivers/gpu/drm/i915/intel_dp.c
160 @@ -567,7 +567,18 @@ intel_dp_i2c_aux_ch(struct i2c_adapter *adapter, int mode,
161 DRM_DEBUG_KMS("aux_ch native nack\n");
162 return -EREMOTEIO;
163 case AUX_NATIVE_REPLY_DEFER:
164 - udelay(100);
165 + /*
166 + * For now, just give more slack to branch devices. We
167 + * could check the DPCD for I2C bit rate capabilities,
168 + * and if available, adjust the interval. We could also
169 + * be more careful with DP-to-Legacy adapters where a
170 + * long legacy cable may force very low I2C bit rates.
171 + */
172 + if (intel_dp->dpcd[DP_DOWNSTREAMPORT_PRESENT] &
173 + DP_DWN_STRM_PORT_PRESENT)
174 + usleep_range(500, 600);
175 + else
176 + usleep_range(300, 400);
177 continue;
178 default:
179 DRM_ERROR("aux_ch invalid native reply 0x%02x\n",
180 diff --git a/drivers/gpu/drm/i915/intel_tv.c b/drivers/gpu/drm/i915/intel_tv.c
181 index 39debd8..d7fe4f8 100644
182 --- a/drivers/gpu/drm/i915/intel_tv.c
183 +++ b/drivers/gpu/drm/i915/intel_tv.c
184 @@ -918,6 +918,14 @@ intel_tv_compute_config(struct intel_encoder *encoder,
185 DRM_DEBUG_KMS("forcing bpc to 8 for TV\n");
186 pipe_config->pipe_bpp = 8*3;
187
188 + /* TV has it's own notion of sync and other mode flags, so clear them. */
189 + pipe_config->adjusted_mode.flags = 0;
190 +
191 + /*
192 + * FIXME: We don't check whether the input mode is actually what we want
193 + * or whether userspace is doing something stupid.
194 + */
195 +
196 return true;
197 }
198
199 diff --git a/drivers/gpu/drm/radeon/cik.c b/drivers/gpu/drm/radeon/cik.c
200 index 7a96842..4a315da 100644
201 --- a/drivers/gpu/drm/radeon/cik.c
202 +++ b/drivers/gpu/drm/radeon/cik.c
203 @@ -2008,10 +2008,8 @@ static void cik_gpu_init(struct radeon_device *rdev)
204 rdev->config.cik.tile_config |= (3 << 0);
205 break;
206 }
207 - if ((mc_arb_ramcfg & NOOFBANK_MASK) >> NOOFBANK_SHIFT)
208 - rdev->config.cik.tile_config |= 1 << 4;
209 - else
210 - rdev->config.cik.tile_config |= 0 << 4;
211 + rdev->config.cik.tile_config |=
212 + ((mc_arb_ramcfg & NOOFBANK_MASK) >> NOOFBANK_SHIFT) << 4;
213 rdev->config.cik.tile_config |=
214 ((gb_addr_config & PIPE_INTERLEAVE_SIZE_MASK) >> PIPE_INTERLEAVE_SIZE_SHIFT) << 8;
215 rdev->config.cik.tile_config |=
216 @@ -4227,8 +4225,8 @@ static int cik_mc_init(struct radeon_device *rdev)
217 rdev->mc.aper_base = pci_resource_start(rdev->pdev, 0);
218 rdev->mc.aper_size = pci_resource_len(rdev->pdev, 0);
219 /* size in MB on si */
220 - rdev->mc.mc_vram_size = RREG32(CONFIG_MEMSIZE) * 1024 * 1024;
221 - rdev->mc.real_vram_size = RREG32(CONFIG_MEMSIZE) * 1024 * 1024;
222 + rdev->mc.mc_vram_size = RREG32(CONFIG_MEMSIZE) * 1024ULL * 1024ULL;
223 + rdev->mc.real_vram_size = RREG32(CONFIG_MEMSIZE) * 1024ULL * 1024ULL;
224 rdev->mc.visible_vram_size = rdev->mc.aper_size;
225 si_vram_gtt_location(rdev, &rdev->mc);
226 radeon_update_bandwidth_info(rdev);
227 @@ -4506,12 +4504,13 @@ static void cik_vm_decode_fault(struct radeon_device *rdev,
228 u32 mc_id = (status & MEMORY_CLIENT_ID_MASK) >> MEMORY_CLIENT_ID_SHIFT;
229 u32 vmid = (status & FAULT_VMID_MASK) >> FAULT_VMID_SHIFT;
230 u32 protections = (status & PROTECTIONS_MASK) >> PROTECTIONS_SHIFT;
231 - char *block = (char *)&mc_client;
232 + char block[5] = { mc_client >> 24, (mc_client >> 16) & 0xff,
233 + (mc_client >> 8) & 0xff, mc_client & 0xff, 0 };
234
235 - printk("VM fault (0x%02x, vmid %d) at page %u, %s from %s (%d)\n",
236 + printk("VM fault (0x%02x, vmid %d) at page %u, %s from '%s' (0x%08x) (%d)\n",
237 protections, vmid, addr,
238 (status & MEMORY_CLIENT_RW_MASK) ? "write" : "read",
239 - block, mc_id);
240 + block, mc_client, mc_id);
241 }
242
243 /**
244 diff --git a/drivers/gpu/drm/radeon/r100.c b/drivers/gpu/drm/radeon/r100.c
245 index 75349cd..5de5ad5 100644
246 --- a/drivers/gpu/drm/radeon/r100.c
247 +++ b/drivers/gpu/drm/radeon/r100.c
248 @@ -2926,9 +2926,11 @@ static int r100_debugfs_cp_ring_info(struct seq_file *m, void *data)
249 seq_printf(m, "CP_RB_RPTR 0x%08x\n", rdp);
250 seq_printf(m, "%u free dwords in ring\n", ring->ring_free_dw);
251 seq_printf(m, "%u dwords in ring\n", count);
252 - for (j = 0; j <= count; j++) {
253 - i = (rdp + j) & ring->ptr_mask;
254 - seq_printf(m, "r[%04d]=0x%08x\n", i, ring->ring[i]);
255 + if (ring->ready) {
256 + for (j = 0; j <= count; j++) {
257 + i = (rdp + j) & ring->ptr_mask;
258 + seq_printf(m, "r[%04d]=0x%08x\n", i, ring->ring[i]);
259 + }
260 }
261 return 0;
262 }
263 diff --git a/drivers/gpu/drm/radeon/r600_hdmi.c b/drivers/gpu/drm/radeon/r600_hdmi.c
264 index f264df5..a74c2aa 100644
265 --- a/drivers/gpu/drm/radeon/r600_hdmi.c
266 +++ b/drivers/gpu/drm/radeon/r600_hdmi.c
267 @@ -257,10 +257,7 @@ void r600_audio_set_dto(struct drm_encoder *encoder, u32 clock)
268 * number (coefficient of two integer numbers. DCCG_AUDIO_DTOx_PHASE
269 * is the numerator, DCCG_AUDIO_DTOx_MODULE is the denominator
270 */
271 - if (ASIC_IS_DCE3(rdev)) {
272 - /* according to the reg specs, this should DCE3.2 only, but in
273 - * practice it seems to cover DCE3.0 as well.
274 - */
275 + if (ASIC_IS_DCE32(rdev)) {
276 if (dig->dig_encoder == 0) {
277 dto_cntl = RREG32(DCCG_AUDIO_DTO0_CNTL) & ~DCCG_AUDIO_DTO_WALLCLOCK_RATIO_MASK;
278 dto_cntl |= DCCG_AUDIO_DTO_WALLCLOCK_RATIO(wallclock_ratio);
279 @@ -276,8 +273,21 @@ void r600_audio_set_dto(struct drm_encoder *encoder, u32 clock)
280 WREG32(DCCG_AUDIO_DTO1_MODULE, dto_modulo);
281 WREG32(DCCG_AUDIO_DTO_SELECT, 1); /* select DTO1 */
282 }
283 + } else if (ASIC_IS_DCE3(rdev)) {
284 + /* according to the reg specs, this should DCE3.2 only, but in
285 + * practice it seems to cover DCE3.0/3.1 as well.
286 + */
287 + if (dig->dig_encoder == 0) {
288 + WREG32(DCCG_AUDIO_DTO0_PHASE, base_rate * 100);
289 + WREG32(DCCG_AUDIO_DTO0_MODULE, clock * 100);
290 + WREG32(DCCG_AUDIO_DTO_SELECT, 0); /* select DTO0 */
291 + } else {
292 + WREG32(DCCG_AUDIO_DTO1_PHASE, base_rate * 100);
293 + WREG32(DCCG_AUDIO_DTO1_MODULE, clock * 100);
294 + WREG32(DCCG_AUDIO_DTO_SELECT, 1); /* select DTO1 */
295 + }
296 } else {
297 - /* according to the reg specs, this should be DCE2.0 and DCE3.0 */
298 + /* according to the reg specs, this should be DCE2.0 and DCE3.0/3.1 */
299 WREG32(AUDIO_DTO, AUDIO_DTO_PHASE(base_rate / 10) |
300 AUDIO_DTO_MODULE(clock / 10));
301 }
302 diff --git a/drivers/gpu/drm/radeon/radeon_asic.c b/drivers/gpu/drm/radeon/radeon_asic.c
303 index 38317b9..128279e 100644
304 --- a/drivers/gpu/drm/radeon/radeon_asic.c
305 +++ b/drivers/gpu/drm/radeon/radeon_asic.c
306 @@ -926,6 +926,8 @@ static struct radeon_asic r520_asic = {
307 .wait_for_vblank = &avivo_wait_for_vblank,
308 .set_backlight_level = &atombios_set_backlight_level,
309 .get_backlight_level = &atombios_get_backlight_level,
310 + .hdmi_enable = &r600_hdmi_enable,
311 + .hdmi_setmode = &r600_hdmi_setmode,
312 },
313 .copy = {
314 .blit = &r100_copy_blit,
315 diff --git a/drivers/gpu/drm/radeon/radeon_cs.c b/drivers/gpu/drm/radeon/radeon_cs.c
316 index 7c110ef..41b170d 100644
317 --- a/drivers/gpu/drm/radeon/radeon_cs.c
318 +++ b/drivers/gpu/drm/radeon/radeon_cs.c
319 @@ -84,7 +84,7 @@ static int radeon_cs_parser_relocs(struct radeon_cs_parser *p)
320 VRAM, also but everything into VRAM on AGP cards to avoid
321 image corruptions */
322 if (p->ring == R600_RING_TYPE_UVD_INDEX &&
323 - (i == 0 || p->rdev->flags & RADEON_IS_AGP)) {
324 + (i == 0 || drm_pci_device_is_agp(p->rdev->ddev))) {
325 /* TODO: is this still needed for NI+ ? */
326 p->relocs[i].lobj.domain =
327 RADEON_GEM_DOMAIN_VRAM;
328 diff --git a/drivers/gpu/drm/radeon/radeon_device.c b/drivers/gpu/drm/radeon/radeon_device.c
329 index 63398ae..d15f27e 100644
330 --- a/drivers/gpu/drm/radeon/radeon_device.c
331 +++ b/drivers/gpu/drm/radeon/radeon_device.c
332 @@ -1297,13 +1297,22 @@ int radeon_device_init(struct radeon_device *rdev,
333 return r;
334 }
335 if ((radeon_testing & 1)) {
336 - radeon_test_moves(rdev);
337 + if (rdev->accel_working)
338 + radeon_test_moves(rdev);
339 + else
340 + DRM_INFO("radeon: acceleration disabled, skipping move tests\n");
341 }
342 if ((radeon_testing & 2)) {
343 - radeon_test_syncing(rdev);
344 + if (rdev->accel_working)
345 + radeon_test_syncing(rdev);
346 + else
347 + DRM_INFO("radeon: acceleration disabled, skipping sync tests\n");
348 }
349 if (radeon_benchmarking) {
350 - radeon_benchmark(rdev, radeon_benchmarking);
351 + if (rdev->accel_working)
352 + radeon_benchmark(rdev, radeon_benchmarking);
353 + else
354 + DRM_INFO("radeon: acceleration disabled, skipping benchmarks\n");
355 }
356 return 0;
357 }
358 diff --git a/drivers/gpu/drm/radeon/radeon_pm.c b/drivers/gpu/drm/radeon/radeon_pm.c
359 index c557850..459eb7d 100644
360 --- a/drivers/gpu/drm/radeon/radeon_pm.c
361 +++ b/drivers/gpu/drm/radeon/radeon_pm.c
362 @@ -919,7 +919,7 @@ static void radeon_pm_resume_old(struct radeon_device *rdev)
363 {
364 /* set up the default clocks if the MC ucode is loaded */
365 if ((rdev->family >= CHIP_BARTS) &&
366 - (rdev->family <= CHIP_HAINAN) &&
367 + (rdev->family <= CHIP_CAYMAN) &&
368 rdev->mc_fw) {
369 if (rdev->pm.default_vddc)
370 radeon_atom_set_voltage(rdev, rdev->pm.default_vddc,
371 @@ -963,7 +963,7 @@ static void radeon_pm_resume_dpm(struct radeon_device *rdev)
372 if (ret) {
373 DRM_ERROR("radeon: dpm resume failed\n");
374 if ((rdev->family >= CHIP_BARTS) &&
375 - (rdev->family <= CHIP_HAINAN) &&
376 + (rdev->family <= CHIP_CAYMAN) &&
377 rdev->mc_fw) {
378 if (rdev->pm.default_vddc)
379 radeon_atom_set_voltage(rdev, rdev->pm.default_vddc,
380 @@ -1014,7 +1014,7 @@ static int radeon_pm_init_old(struct radeon_device *rdev)
381 radeon_pm_init_profile(rdev);
382 /* set up the default clocks if the MC ucode is loaded */
383 if ((rdev->family >= CHIP_BARTS) &&
384 - (rdev->family <= CHIP_HAINAN) &&
385 + (rdev->family <= CHIP_CAYMAN) &&
386 rdev->mc_fw) {
387 if (rdev->pm.default_vddc)
388 radeon_atom_set_voltage(rdev, rdev->pm.default_vddc,
389 @@ -1099,7 +1099,7 @@ static int radeon_pm_init_dpm(struct radeon_device *rdev)
390 if (ret) {
391 rdev->pm.dpm_enabled = false;
392 if ((rdev->family >= CHIP_BARTS) &&
393 - (rdev->family <= CHIP_HAINAN) &&
394 + (rdev->family <= CHIP_CAYMAN) &&
395 rdev->mc_fw) {
396 if (rdev->pm.default_vddc)
397 radeon_atom_set_voltage(rdev, rdev->pm.default_vddc,
398 diff --git a/drivers/gpu/drm/radeon/radeon_ring.c b/drivers/gpu/drm/radeon/radeon_ring.c
399 index fb5ea62..09eb679 100644
400 --- a/drivers/gpu/drm/radeon/radeon_ring.c
401 +++ b/drivers/gpu/drm/radeon/radeon_ring.c
402 @@ -846,9 +846,11 @@ static int radeon_debugfs_ring_info(struct seq_file *m, void *data)
403 * packet that is the root issue
404 */
405 i = (ring->rptr + ring->ptr_mask + 1 - 32) & ring->ptr_mask;
406 - for (j = 0; j <= (count + 32); j++) {
407 - seq_printf(m, "r[%5d]=0x%08x\n", i, ring->ring[i]);
408 - i = (i + 1) & ring->ptr_mask;
409 + if (ring->ready) {
410 + for (j = 0; j <= (count + 32); j++) {
411 + seq_printf(m, "r[%5d]=0x%08x\n", i, ring->ring[i]);
412 + i = (i + 1) & ring->ptr_mask;
413 + }
414 }
415 return 0;
416 }
417 diff --git a/drivers/hwmon/applesmc.c b/drivers/hwmon/applesmc.c
418 index 62c2e32..98814d1 100644
419 --- a/drivers/hwmon/applesmc.c
420 +++ b/drivers/hwmon/applesmc.c
421 @@ -525,16 +525,25 @@ static int applesmc_init_smcreg_try(void)
422 {
423 struct applesmc_registers *s = &smcreg;
424 bool left_light_sensor, right_light_sensor;
425 + unsigned int count;
426 u8 tmp[1];
427 int ret;
428
429 if (s->init_complete)
430 return 0;
431
432 - ret = read_register_count(&s->key_count);
433 + ret = read_register_count(&count);
434 if (ret)
435 return ret;
436
437 + if (s->cache && s->key_count != count) {
438 + pr_warn("key count changed from %d to %d\n",
439 + s->key_count, count);
440 + kfree(s->cache);
441 + s->cache = NULL;
442 + }
443 + s->key_count = count;
444 +
445 if (!s->cache)
446 s->cache = kcalloc(s->key_count, sizeof(*s->cache), GFP_KERNEL);
447 if (!s->cache)
448 diff --git a/drivers/md/bcache/bcache.h b/drivers/md/bcache/bcache.h
449 index b39f6f0..0f12382 100644
450 --- a/drivers/md/bcache/bcache.h
451 +++ b/drivers/md/bcache/bcache.h
452 @@ -498,7 +498,7 @@ struct cached_dev {
453 */
454 atomic_t has_dirty;
455
456 - struct ratelimit writeback_rate;
457 + struct bch_ratelimit writeback_rate;
458 struct delayed_work writeback_rate_update;
459
460 /*
461 @@ -507,10 +507,9 @@ struct cached_dev {
462 */
463 sector_t last_read;
464
465 - /* Number of writeback bios in flight */
466 - atomic_t in_flight;
467 + /* Limit number of writeback bios in flight */
468 + struct semaphore in_flight;
469 struct closure_with_timer writeback;
470 - struct closure_waitlist writeback_wait;
471
472 struct keybuf writeback_keys;
473
474 diff --git a/drivers/md/bcache/bset.c b/drivers/md/bcache/bset.c
475 index 8010eed..22d1ae7 100644
476 --- a/drivers/md/bcache/bset.c
477 +++ b/drivers/md/bcache/bset.c
478 @@ -926,28 +926,45 @@ struct bkey *bch_next_recurse_key(struct btree *b, struct bkey *search)
479
480 /* Mergesort */
481
482 +static void sort_key_next(struct btree_iter *iter,
483 + struct btree_iter_set *i)
484 +{
485 + i->k = bkey_next(i->k);
486 +
487 + if (i->k == i->end)
488 + *i = iter->data[--iter->used];
489 +}
490 +
491 static void btree_sort_fixup(struct btree_iter *iter)
492 {
493 while (iter->used > 1) {
494 struct btree_iter_set *top = iter->data, *i = top + 1;
495 - struct bkey *k;
496
497 if (iter->used > 2 &&
498 btree_iter_cmp(i[0], i[1]))
499 i++;
500
501 - for (k = i->k;
502 - k != i->end && bkey_cmp(top->k, &START_KEY(k)) > 0;
503 - k = bkey_next(k))
504 - if (top->k > i->k)
505 - __bch_cut_front(top->k, k);
506 - else if (KEY_SIZE(k))
507 - bch_cut_back(&START_KEY(k), top->k);
508 -
509 - if (top->k < i->k || k == i->k)
510 + if (bkey_cmp(top->k, &START_KEY(i->k)) <= 0)
511 break;
512
513 - heap_sift(iter, i - top, btree_iter_cmp);
514 + if (!KEY_SIZE(i->k)) {
515 + sort_key_next(iter, i);
516 + heap_sift(iter, i - top, btree_iter_cmp);
517 + continue;
518 + }
519 +
520 + if (top->k > i->k) {
521 + if (bkey_cmp(top->k, i->k) >= 0)
522 + sort_key_next(iter, i);
523 + else
524 + bch_cut_front(top->k, i->k);
525 +
526 + heap_sift(iter, i - top, btree_iter_cmp);
527 + } else {
528 + /* can't happen because of comparison func */
529 + BUG_ON(!bkey_cmp(&START_KEY(top->k), &START_KEY(i->k)));
530 + bch_cut_back(&START_KEY(i->k), top->k);
531 + }
532 }
533 }
534
535 diff --git a/drivers/md/bcache/btree.c b/drivers/md/bcache/btree.c
536 index ee37288..391ba90 100644
537 --- a/drivers/md/bcache/btree.c
538 +++ b/drivers/md/bcache/btree.c
539 @@ -617,7 +617,7 @@ static int bch_mca_shrink(struct shrinker *shrink, struct shrink_control *sc)
540 return mca_can_free(c) * c->btree_pages;
541
542 /* Return -1 if we can't do anything right now */
543 - if (sc->gfp_mask & __GFP_WAIT)
544 + if (sc->gfp_mask & __GFP_IO)
545 mutex_lock(&c->bucket_lock);
546 else if (!mutex_trylock(&c->bucket_lock))
547 return -1;
548 diff --git a/drivers/md/bcache/journal.c b/drivers/md/bcache/journal.c
549 index ba95ab8..8435f81 100644
550 --- a/drivers/md/bcache/journal.c
551 +++ b/drivers/md/bcache/journal.c
552 @@ -153,7 +153,8 @@ int bch_journal_read(struct cache_set *c, struct list_head *list,
553 bitmap_zero(bitmap, SB_JOURNAL_BUCKETS);
554 pr_debug("%u journal buckets", ca->sb.njournal_buckets);
555
556 - /* Read journal buckets ordered by golden ratio hash to quickly
557 + /*
558 + * Read journal buckets ordered by golden ratio hash to quickly
559 * find a sequence of buckets with valid journal entries
560 */
561 for (i = 0; i < ca->sb.njournal_buckets; i++) {
562 @@ -166,18 +167,20 @@ int bch_journal_read(struct cache_set *c, struct list_head *list,
563 goto bsearch;
564 }
565
566 - /* If that fails, check all the buckets we haven't checked
567 + /*
568 + * If that fails, check all the buckets we haven't checked
569 * already
570 */
571 pr_debug("falling back to linear search");
572
573 - for (l = 0; l < ca->sb.njournal_buckets; l++) {
574 - if (test_bit(l, bitmap))
575 - continue;
576 -
577 + for (l = find_first_zero_bit(bitmap, ca->sb.njournal_buckets);
578 + l < ca->sb.njournal_buckets;
579 + l = find_next_zero_bit(bitmap, ca->sb.njournal_buckets, l + 1))
580 if (read_bucket(l))
581 goto bsearch;
582 - }
583 +
584 + if (list_empty(list))
585 + continue;
586 bsearch:
587 /* Binary search */
588 m = r = find_next_bit(bitmap, ca->sb.njournal_buckets, l + 1);
589 @@ -197,10 +200,12 @@ bsearch:
590 r = m;
591 }
592
593 - /* Read buckets in reverse order until we stop finding more
594 + /*
595 + * Read buckets in reverse order until we stop finding more
596 * journal entries
597 */
598 - pr_debug("finishing up");
599 + pr_debug("finishing up: m %u njournal_buckets %u",
600 + m, ca->sb.njournal_buckets);
601 l = m;
602
603 while (1) {
604 @@ -228,9 +233,10 @@ bsearch:
605 }
606 }
607
608 - c->journal.seq = list_entry(list->prev,
609 - struct journal_replay,
610 - list)->j.seq;
611 + if (!list_empty(list))
612 + c->journal.seq = list_entry(list->prev,
613 + struct journal_replay,
614 + list)->j.seq;
615
616 return 0;
617 #undef read_bucket
618 @@ -428,7 +434,7 @@ static void do_journal_discard(struct cache *ca)
619 return;
620 }
621
622 - switch (atomic_read(&ja->discard_in_flight) == DISCARD_IN_FLIGHT) {
623 + switch (atomic_read(&ja->discard_in_flight)) {
624 case DISCARD_IN_FLIGHT:
625 return;
626
627 @@ -689,6 +695,7 @@ void bch_journal_meta(struct cache_set *c, struct closure *cl)
628 if (cl)
629 BUG_ON(!closure_wait(&w->wait, cl));
630
631 + closure_flush(&c->journal.io);
632 __journal_try_write(c, true);
633 }
634 }
635 diff --git a/drivers/md/bcache/request.c b/drivers/md/bcache/request.c
636 index 786a1a4..71eb233 100644
637 --- a/drivers/md/bcache/request.c
638 +++ b/drivers/md/bcache/request.c
639 @@ -997,14 +997,17 @@ static void request_write(struct cached_dev *dc, struct search *s)
640 } else {
641 bch_writeback_add(dc);
642
643 - if (s->op.flush_journal) {
644 + if (bio->bi_rw & REQ_FLUSH) {
645 /* Also need to send a flush to the backing device */
646 - s->op.cache_bio = bio_clone_bioset(bio, GFP_NOIO,
647 - dc->disk.bio_split);
648 + struct bio *flush = bio_alloc_bioset(0, GFP_NOIO,
649 + dc->disk.bio_split);
650
651 - bio->bi_size = 0;
652 - bio->bi_vcnt = 0;
653 - closure_bio_submit(bio, cl, s->d);
654 + flush->bi_rw = WRITE_FLUSH;
655 + flush->bi_bdev = bio->bi_bdev;
656 + flush->bi_end_io = request_endio;
657 + flush->bi_private = cl;
658 +
659 + closure_bio_submit(flush, cl, s->d);
660 } else {
661 s->op.cache_bio = bio;
662 }
663 diff --git a/drivers/md/bcache/sysfs.c b/drivers/md/bcache/sysfs.c
664 index 12a2c28..a87fbb5 100644
665 --- a/drivers/md/bcache/sysfs.c
666 +++ b/drivers/md/bcache/sysfs.c
667 @@ -223,8 +223,13 @@ STORE(__cached_dev)
668 }
669
670 if (attr == &sysfs_label) {
671 - /* note: endlines are preserved */
672 - memcpy(dc->sb.label, buf, SB_LABEL_SIZE);
673 + if (size > SB_LABEL_SIZE)
674 + return -EINVAL;
675 + memcpy(dc->sb.label, buf, size);
676 + if (size < SB_LABEL_SIZE)
677 + dc->sb.label[size] = '\0';
678 + if (size && dc->sb.label[size - 1] == '\n')
679 + dc->sb.label[size - 1] = '\0';
680 bch_write_bdev_super(dc, NULL);
681 if (dc->disk.c) {
682 memcpy(dc->disk.c->uuids[dc->disk.id].label,
683 diff --git a/drivers/md/bcache/util.c b/drivers/md/bcache/util.c
684 index 98eb811..420dad5 100644
685 --- a/drivers/md/bcache/util.c
686 +++ b/drivers/md/bcache/util.c
687 @@ -190,7 +190,16 @@ void bch_time_stats_update(struct time_stats *stats, uint64_t start_time)
688 stats->last = now ?: 1;
689 }
690
691 -unsigned bch_next_delay(struct ratelimit *d, uint64_t done)
692 +/**
693 + * bch_next_delay() - increment @d by the amount of work done, and return how
694 + * long to delay until the next time to do some work.
695 + *
696 + * @d - the struct bch_ratelimit to update
697 + * @done - the amount of work done, in arbitrary units
698 + *
699 + * Returns the amount of time to delay by, in jiffies
700 + */
701 +uint64_t bch_next_delay(struct bch_ratelimit *d, uint64_t done)
702 {
703 uint64_t now = local_clock();
704
705 diff --git a/drivers/md/bcache/util.h b/drivers/md/bcache/util.h
706 index 1ae2a73..ea345c6 100644
707 --- a/drivers/md/bcache/util.h
708 +++ b/drivers/md/bcache/util.h
709 @@ -450,17 +450,23 @@ read_attribute(name ## _last_ ## frequency_units)
710 (ewma) >> factor; \
711 })
712
713 -struct ratelimit {
714 +struct bch_ratelimit {
715 + /* Next time we want to do some work, in nanoseconds */
716 uint64_t next;
717 +
718 + /*
719 + * Rate at which we want to do work, in units per nanosecond
720 + * The units here correspond to the units passed to bch_next_delay()
721 + */
722 unsigned rate;
723 };
724
725 -static inline void ratelimit_reset(struct ratelimit *d)
726 +static inline void bch_ratelimit_reset(struct bch_ratelimit *d)
727 {
728 d->next = local_clock();
729 }
730
731 -unsigned bch_next_delay(struct ratelimit *d, uint64_t done);
732 +uint64_t bch_next_delay(struct bch_ratelimit *d, uint64_t done);
733
734 #define __DIV_SAFE(n, d, zero) \
735 ({ \
736 diff --git a/drivers/md/bcache/writeback.c b/drivers/md/bcache/writeback.c
737 index 22cbff5..ba3ee48 100644
738 --- a/drivers/md/bcache/writeback.c
739 +++ b/drivers/md/bcache/writeback.c
740 @@ -94,11 +94,15 @@ static void update_writeback_rate(struct work_struct *work)
741
742 static unsigned writeback_delay(struct cached_dev *dc, unsigned sectors)
743 {
744 + uint64_t ret;
745 +
746 if (atomic_read(&dc->disk.detaching) ||
747 !dc->writeback_percent)
748 return 0;
749
750 - return bch_next_delay(&dc->writeback_rate, sectors * 10000000ULL);
751 + ret = bch_next_delay(&dc->writeback_rate, sectors * 10000000ULL);
752 +
753 + return min_t(uint64_t, ret, HZ);
754 }
755
756 /* Background writeback */
757 @@ -208,7 +212,7 @@ normal_refill:
758
759 up_write(&dc->writeback_lock);
760
761 - ratelimit_reset(&dc->writeback_rate);
762 + bch_ratelimit_reset(&dc->writeback_rate);
763
764 /* Punt to workqueue only so we don't recurse and blow the stack */
765 continue_at(cl, read_dirty, dirty_wq);
766 @@ -318,9 +322,7 @@ static void write_dirty_finish(struct closure *cl)
767 }
768
769 bch_keybuf_del(&dc->writeback_keys, w);
770 - atomic_dec_bug(&dc->in_flight);
771 -
772 - closure_wake_up(&dc->writeback_wait);
773 + up(&dc->in_flight);
774
775 closure_return_with_destructor(cl, dirty_io_destructor);
776 }
777 @@ -349,7 +351,7 @@ static void write_dirty(struct closure *cl)
778
779 closure_bio_submit(&io->bio, cl, &io->dc->disk);
780
781 - continue_at(cl, write_dirty_finish, dirty_wq);
782 + continue_at(cl, write_dirty_finish, system_wq);
783 }
784
785 static void read_dirty_endio(struct bio *bio, int error)
786 @@ -369,7 +371,7 @@ static void read_dirty_submit(struct closure *cl)
787
788 closure_bio_submit(&io->bio, cl, &io->dc->disk);
789
790 - continue_at(cl, write_dirty, dirty_wq);
791 + continue_at(cl, write_dirty, system_wq);
792 }
793
794 static void read_dirty(struct closure *cl)
795 @@ -394,12 +396,8 @@ static void read_dirty(struct closure *cl)
796
797 if (delay > 0 &&
798 (KEY_START(&w->key) != dc->last_read ||
799 - jiffies_to_msecs(delay) > 50)) {
800 - w->private = NULL;
801 -
802 - closure_delay(&dc->writeback, delay);
803 - continue_at(cl, read_dirty, dirty_wq);
804 - }
805 + jiffies_to_msecs(delay) > 50))
806 + delay = schedule_timeout_uninterruptible(delay);
807
808 dc->last_read = KEY_OFFSET(&w->key);
809
810 @@ -424,15 +422,10 @@ static void read_dirty(struct closure *cl)
811
812 trace_bcache_writeback(&w->key);
813
814 - closure_call(&io->cl, read_dirty_submit, NULL, &dc->disk.cl);
815 + down(&dc->in_flight);
816 + closure_call(&io->cl, read_dirty_submit, NULL, cl);
817
818 delay = writeback_delay(dc, KEY_SIZE(&w->key));
819 -
820 - atomic_inc(&dc->in_flight);
821 -
822 - if (!closure_wait_event(&dc->writeback_wait, cl,
823 - atomic_read(&dc->in_flight) < 64))
824 - continue_at(cl, read_dirty, dirty_wq);
825 }
826
827 if (0) {
828 @@ -442,7 +435,11 @@ err:
829 bch_keybuf_del(&dc->writeback_keys, w);
830 }
831
832 - refill_dirty(cl);
833 + /*
834 + * Wait for outstanding writeback IOs to finish (and keybuf slots to be
835 + * freed) before refilling again
836 + */
837 + continue_at(cl, refill_dirty, dirty_wq);
838 }
839
840 /* Init */
841 @@ -484,6 +481,7 @@ void bch_sectors_dirty_init(struct cached_dev *dc)
842
843 void bch_cached_dev_writeback_init(struct cached_dev *dc)
844 {
845 + sema_init(&dc->in_flight, 64);
846 closure_init_unlocked(&dc->writeback);
847 init_rwsem(&dc->writeback_lock);
848
849 @@ -513,7 +511,7 @@ void bch_writeback_exit(void)
850
851 int __init bch_writeback_init(void)
852 {
853 - dirty_wq = create_singlethread_workqueue("bcache_writeback");
854 + dirty_wq = create_workqueue("bcache_writeback");
855 if (!dirty_wq)
856 return -ENOMEM;
857
858 diff --git a/drivers/md/dm-mpath.c b/drivers/md/dm-mpath.c
859 index 5adede1..c5b7b3d 100644
860 --- a/drivers/md/dm-mpath.c
861 +++ b/drivers/md/dm-mpath.c
862 @@ -1284,8 +1284,17 @@ static int do_end_io(struct multipath *m, struct request *clone,
863 if (!error && !clone->errors)
864 return 0; /* I/O complete */
865
866 - if (error == -EOPNOTSUPP || error == -EREMOTEIO || error == -EILSEQ)
867 + if (error == -EOPNOTSUPP || error == -EREMOTEIO || error == -EILSEQ) {
868 + if ((clone->cmd_flags & REQ_WRITE_SAME) &&
869 + !clone->q->limits.max_write_same_sectors) {
870 + struct queue_limits *limits;
871 +
872 + /* device doesn't really support WRITE SAME, disable it */
873 + limits = dm_get_queue_limits(dm_table_get_md(m->ti->table));
874 + limits->max_write_same_sectors = 0;
875 + }
876 return error;
877 + }
878
879 if (mpio->pgpath)
880 fail_path(mpio->pgpath);
881 diff --git a/drivers/md/dm-snap-persistent.c b/drivers/md/dm-snap-persistent.c
882 index 3ac4156..4caa8e6 100644
883 --- a/drivers/md/dm-snap-persistent.c
884 +++ b/drivers/md/dm-snap-persistent.c
885 @@ -256,7 +256,7 @@ static int chunk_io(struct pstore *ps, void *area, chunk_t chunk, int rw,
886 */
887 INIT_WORK_ONSTACK(&req.work, do_metadata);
888 queue_work(ps->metadata_wq, &req.work);
889 - flush_work(&req.work);
890 + flush_workqueue(ps->metadata_wq);
891
892 return req.result;
893 }
894 diff --git a/drivers/md/dm-snap.c b/drivers/md/dm-snap.c
895 index c434e5a..aec57d7 100644
896 --- a/drivers/md/dm-snap.c
897 +++ b/drivers/md/dm-snap.c
898 @@ -725,17 +725,16 @@ static int calc_max_buckets(void)
899 */
900 static int init_hash_tables(struct dm_snapshot *s)
901 {
902 - sector_t hash_size, cow_dev_size, origin_dev_size, max_buckets;
903 + sector_t hash_size, cow_dev_size, max_buckets;
904
905 /*
906 * Calculate based on the size of the original volume or
907 * the COW volume...
908 */
909 cow_dev_size = get_dev_size(s->cow->bdev);
910 - origin_dev_size = get_dev_size(s->origin->bdev);
911 max_buckets = calc_max_buckets();
912
913 - hash_size = min(origin_dev_size, cow_dev_size) >> s->store->chunk_shift;
914 + hash_size = cow_dev_size >> s->store->chunk_shift;
915 hash_size = min(hash_size, max_buckets);
916
917 if (hash_size < 64)
918 diff --git a/drivers/md/dm.c b/drivers/md/dm.c
919 index 9e39d2b..995e1fc 100644
920 --- a/drivers/md/dm.c
921 +++ b/drivers/md/dm.c
922 @@ -2250,6 +2250,17 @@ struct target_type *dm_get_immutable_target_type(struct mapped_device *md)
923 }
924
925 /*
926 + * The queue_limits are only valid as long as you have a reference
927 + * count on 'md'.
928 + */
929 +struct queue_limits *dm_get_queue_limits(struct mapped_device *md)
930 +{
931 + BUG_ON(!atomic_read(&md->holders));
932 + return &md->queue->limits;
933 +}
934 +EXPORT_SYMBOL_GPL(dm_get_queue_limits);
935 +
936 +/*
937 * Fully initialize a request-based queue (->elevator, ->request_fn, etc).
938 */
939 static int dm_init_request_based_queue(struct mapped_device *md)
940 diff --git a/drivers/misc/mei/amthif.c b/drivers/misc/mei/amthif.c
941 index 749452f..cf80bf5 100644
942 --- a/drivers/misc/mei/amthif.c
943 +++ b/drivers/misc/mei/amthif.c
944 @@ -57,6 +57,7 @@ void mei_amthif_reset_params(struct mei_device *dev)
945 dev->iamthif_ioctl = false;
946 dev->iamthif_state = MEI_IAMTHIF_IDLE;
947 dev->iamthif_timer = 0;
948 + dev->iamthif_stall_timer = 0;
949 }
950
951 /**
952 diff --git a/drivers/misc/mei/bus.c b/drivers/misc/mei/bus.c
953 index 9ecd49a..99cc0b0 100644
954 --- a/drivers/misc/mei/bus.c
955 +++ b/drivers/misc/mei/bus.c
956 @@ -295,10 +295,13 @@ int __mei_cl_recv(struct mei_cl *cl, u8 *buf, size_t length)
957
958 if (cl->reading_state != MEI_READ_COMPLETE &&
959 !waitqueue_active(&cl->rx_wait)) {
960 +
961 mutex_unlock(&dev->device_lock);
962
963 if (wait_event_interruptible(cl->rx_wait,
964 - (MEI_READ_COMPLETE == cl->reading_state))) {
965 + cl->reading_state == MEI_READ_COMPLETE ||
966 + mei_cl_is_transitioning(cl))) {
967 +
968 if (signal_pending(current))
969 return -EINTR;
970 return -ERESTARTSYS;
971 diff --git a/drivers/misc/mei/client.h b/drivers/misc/mei/client.h
972 index 26b157d..b1717bb 100644
973 --- a/drivers/misc/mei/client.h
974 +++ b/drivers/misc/mei/client.h
975 @@ -76,6 +76,12 @@ static inline bool mei_cl_cmp_id(const struct mei_cl *cl1,
976 (cl1->host_client_id == cl2->host_client_id) &&
977 (cl1->me_client_id == cl2->me_client_id);
978 }
979 +static inline bool mei_cl_is_transitioning(struct mei_cl *cl)
980 +{
981 + return (MEI_FILE_INITIALIZING == cl->state ||
982 + MEI_FILE_DISCONNECTED == cl->state ||
983 + MEI_FILE_DISCONNECTING == cl->state);
984 +}
985
986
987 int mei_cl_flow_ctrl_creds(struct mei_cl *cl);
988 diff --git a/drivers/misc/mei/hbm.c b/drivers/misc/mei/hbm.c
989 index 6127ab6..0a044832 100644
990 --- a/drivers/misc/mei/hbm.c
991 +++ b/drivers/misc/mei/hbm.c
992 @@ -35,11 +35,15 @@ static void mei_hbm_me_cl_allocate(struct mei_device *dev)
993 struct mei_me_client *clients;
994 int b;
995
996 + dev->me_clients_num = 0;
997 + dev->me_client_presentation_num = 0;
998 + dev->me_client_index = 0;
999 +
1000 /* count how many ME clients we have */
1001 for_each_set_bit(b, dev->me_clients_map, MEI_CLIENTS_MAX)
1002 dev->me_clients_num++;
1003
1004 - if (dev->me_clients_num <= 0)
1005 + if (dev->me_clients_num == 0)
1006 return;
1007
1008 kfree(dev->me_clients);
1009 @@ -221,7 +225,7 @@ static int mei_hbm_prop_req(struct mei_device *dev)
1010 struct hbm_props_request *prop_req;
1011 const size_t len = sizeof(struct hbm_props_request);
1012 unsigned long next_client_index;
1013 - u8 client_num;
1014 + unsigned long client_num;
1015
1016
1017 client_num = dev->me_client_presentation_num;
1018 @@ -677,8 +681,6 @@ void mei_hbm_dispatch(struct mei_device *dev, struct mei_msg_hdr *hdr)
1019 if (dev->dev_state == MEI_DEV_INIT_CLIENTS &&
1020 dev->hbm_state == MEI_HBM_ENUM_CLIENTS) {
1021 dev->init_clients_timer = 0;
1022 - dev->me_client_presentation_num = 0;
1023 - dev->me_client_index = 0;
1024 mei_hbm_me_cl_allocate(dev);
1025 dev->hbm_state = MEI_HBM_CLIENT_PROPERTIES;
1026
1027 diff --git a/drivers/misc/mei/init.c b/drivers/misc/mei/init.c
1028 index e6f16f8..012b2e0 100644
1029 --- a/drivers/misc/mei/init.c
1030 +++ b/drivers/misc/mei/init.c
1031 @@ -169,6 +169,9 @@ void mei_reset(struct mei_device *dev, int interrupts_enabled)
1032 memset(&dev->wr_ext_msg, 0, sizeof(dev->wr_ext_msg));
1033 }
1034
1035 + /* we're already in reset, cancel the init timer */
1036 + dev->init_clients_timer = 0;
1037 +
1038 dev->me_clients_num = 0;
1039 dev->rd_msg_hdr = 0;
1040 dev->wd_pending = false;
1041 diff --git a/drivers/misc/mei/main.c b/drivers/misc/mei/main.c
1042 index 5e11b5b..e67de23 100644
1043 --- a/drivers/misc/mei/main.c
1044 +++ b/drivers/misc/mei/main.c
1045 @@ -249,19 +249,16 @@ static ssize_t mei_read(struct file *file, char __user *ubuf,
1046 mutex_unlock(&dev->device_lock);
1047
1048 if (wait_event_interruptible(cl->rx_wait,
1049 - (MEI_READ_COMPLETE == cl->reading_state ||
1050 - MEI_FILE_INITIALIZING == cl->state ||
1051 - MEI_FILE_DISCONNECTED == cl->state ||
1052 - MEI_FILE_DISCONNECTING == cl->state))) {
1053 + MEI_READ_COMPLETE == cl->reading_state ||
1054 + mei_cl_is_transitioning(cl))) {
1055 +
1056 if (signal_pending(current))
1057 return -EINTR;
1058 return -ERESTARTSYS;
1059 }
1060
1061 mutex_lock(&dev->device_lock);
1062 - if (MEI_FILE_INITIALIZING == cl->state ||
1063 - MEI_FILE_DISCONNECTED == cl->state ||
1064 - MEI_FILE_DISCONNECTING == cl->state) {
1065 + if (mei_cl_is_transitioning(cl)) {
1066 rets = -EBUSY;
1067 goto out;
1068 }
1069 diff --git a/drivers/misc/mei/mei_dev.h b/drivers/misc/mei/mei_dev.h
1070 index 7b918b2..456b322 100644
1071 --- a/drivers/misc/mei/mei_dev.h
1072 +++ b/drivers/misc/mei/mei_dev.h
1073 @@ -396,9 +396,9 @@ struct mei_device {
1074 struct mei_me_client *me_clients; /* Note: memory has to be allocated */
1075 DECLARE_BITMAP(me_clients_map, MEI_CLIENTS_MAX);
1076 DECLARE_BITMAP(host_clients_map, MEI_CLIENTS_MAX);
1077 - u8 me_clients_num;
1078 - u8 me_client_presentation_num;
1079 - u8 me_client_index;
1080 + unsigned long me_clients_num;
1081 + unsigned long me_client_presentation_num;
1082 + unsigned long me_client_index;
1083
1084 struct mei_cl wd_cl;
1085 enum mei_wd_states wd_state;
1086 diff --git a/drivers/net/wireless/cw1200/cw1200_spi.c b/drivers/net/wireless/cw1200/cw1200_spi.c
1087 index f5e6b48..899cad3 100644
1088 --- a/drivers/net/wireless/cw1200/cw1200_spi.c
1089 +++ b/drivers/net/wireless/cw1200/cw1200_spi.c
1090 @@ -42,7 +42,6 @@ struct hwbus_priv {
1091 spinlock_t lock; /* Serialize all bus operations */
1092 wait_queue_head_t wq;
1093 int claimed;
1094 - int irq_disabled;
1095 };
1096
1097 #define SDIO_TO_SPI_ADDR(addr) ((addr & 0x1f)>>2)
1098 @@ -238,8 +237,6 @@ static irqreturn_t cw1200_spi_irq_handler(int irq, void *dev_id)
1099 struct hwbus_priv *self = dev_id;
1100
1101 if (self->core) {
1102 - disable_irq_nosync(self->func->irq);
1103 - self->irq_disabled = 1;
1104 cw1200_irq_handler(self->core);
1105 return IRQ_HANDLED;
1106 } else {
1107 @@ -253,9 +250,10 @@ static int cw1200_spi_irq_subscribe(struct hwbus_priv *self)
1108
1109 pr_debug("SW IRQ subscribe\n");
1110
1111 - ret = request_any_context_irq(self->func->irq, cw1200_spi_irq_handler,
1112 - IRQF_TRIGGER_HIGH,
1113 - "cw1200_wlan_irq", self);
1114 + ret = request_threaded_irq(self->func->irq, NULL,
1115 + cw1200_spi_irq_handler,
1116 + IRQF_TRIGGER_HIGH | IRQF_ONESHOT,
1117 + "cw1200_wlan_irq", self);
1118 if (WARN_ON(ret < 0))
1119 goto exit;
1120
1121 @@ -273,22 +271,13 @@ exit:
1122
1123 static int cw1200_spi_irq_unsubscribe(struct hwbus_priv *self)
1124 {
1125 + int ret = 0;
1126 +
1127 pr_debug("SW IRQ unsubscribe\n");
1128 disable_irq_wake(self->func->irq);
1129 free_irq(self->func->irq, self);
1130
1131 - return 0;
1132 -}
1133 -
1134 -static int cw1200_spi_irq_enable(struct hwbus_priv *self, int enable)
1135 -{
1136 - /* Disables are handled by the interrupt handler */
1137 - if (enable && self->irq_disabled) {
1138 - enable_irq(self->func->irq);
1139 - self->irq_disabled = 0;
1140 - }
1141 -
1142 - return 0;
1143 + return ret;
1144 }
1145
1146 static int cw1200_spi_off(const struct cw1200_platform_data_spi *pdata)
1147 @@ -368,7 +357,6 @@ static struct hwbus_ops cw1200_spi_hwbus_ops = {
1148 .unlock = cw1200_spi_unlock,
1149 .align_size = cw1200_spi_align_size,
1150 .power_mgmt = cw1200_spi_pm,
1151 - .irq_enable = cw1200_spi_irq_enable,
1152 };
1153
1154 /* Probe Function to be called by SPI stack when device is discovered */
1155 diff --git a/drivers/net/wireless/cw1200/fwio.c b/drivers/net/wireless/cw1200/fwio.c
1156 index 0b2061b..acdff0f 100644
1157 --- a/drivers/net/wireless/cw1200/fwio.c
1158 +++ b/drivers/net/wireless/cw1200/fwio.c
1159 @@ -485,7 +485,7 @@ int cw1200_load_firmware(struct cw1200_common *priv)
1160
1161 /* Enable interrupt signalling */
1162 priv->hwbus_ops->lock(priv->hwbus_priv);
1163 - ret = __cw1200_irq_enable(priv, 2);
1164 + ret = __cw1200_irq_enable(priv, 1);
1165 priv->hwbus_ops->unlock(priv->hwbus_priv);
1166 if (ret < 0)
1167 goto unsubscribe;
1168 diff --git a/drivers/net/wireless/cw1200/hwbus.h b/drivers/net/wireless/cw1200/hwbus.h
1169 index 51dfb3a..8b2fc83 100644
1170 --- a/drivers/net/wireless/cw1200/hwbus.h
1171 +++ b/drivers/net/wireless/cw1200/hwbus.h
1172 @@ -28,7 +28,6 @@ struct hwbus_ops {
1173 void (*unlock)(struct hwbus_priv *self);
1174 size_t (*align_size)(struct hwbus_priv *self, size_t size);
1175 int (*power_mgmt)(struct hwbus_priv *self, bool suspend);
1176 - int (*irq_enable)(struct hwbus_priv *self, int enable);
1177 };
1178
1179 #endif /* CW1200_HWBUS_H */
1180 diff --git a/drivers/net/wireless/cw1200/hwio.c b/drivers/net/wireless/cw1200/hwio.c
1181 index 41bd761..ff230b7 100644
1182 --- a/drivers/net/wireless/cw1200/hwio.c
1183 +++ b/drivers/net/wireless/cw1200/hwio.c
1184 @@ -273,21 +273,6 @@ int __cw1200_irq_enable(struct cw1200_common *priv, int enable)
1185 u16 val16;
1186 int ret;
1187
1188 - /* We need to do this hack because the SPI layer can sleep on I/O
1189 - and the general path involves I/O to the device in interrupt
1190 - context.
1191 -
1192 - However, the initial enable call needs to go to the hardware.
1193 -
1194 - We don't worry about shutdown because we do a full reset which
1195 - clears the interrupt enabled bits.
1196 - */
1197 - if (priv->hwbus_ops->irq_enable) {
1198 - ret = priv->hwbus_ops->irq_enable(priv->hwbus_priv, enable);
1199 - if (ret || enable < 2)
1200 - return ret;
1201 - }
1202 -
1203 if (HIF_8601_SILICON == priv->hw_type) {
1204 ret = __cw1200_reg_read_32(priv, ST90TDS_CONFIG_REG_ID, &val32);
1205 if (ret < 0) {
1206 diff --git a/drivers/staging/vt6656/iwctl.c b/drivers/staging/vt6656/iwctl.c
1207 index d0cf7d8..8872e0f 100644
1208 --- a/drivers/staging/vt6656/iwctl.c
1209 +++ b/drivers/staging/vt6656/iwctl.c
1210 @@ -1634,6 +1634,9 @@ int iwctl_siwencodeext(struct net_device *dev, struct iw_request_info *info,
1211 if (pMgmt == NULL)
1212 return -EFAULT;
1213
1214 + if (!(pDevice->flags & DEVICE_FLAGS_OPENED))
1215 + return -ENODEV;
1216 +
1217 buf = kzalloc(sizeof(struct viawget_wpa_param), GFP_KERNEL);
1218 if (buf == NULL)
1219 return -ENOMEM;
1220 diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c
1221 index 3a3fdc5..06b966c 100644
1222 --- a/drivers/staging/vt6656/main_usb.c
1223 +++ b/drivers/staging/vt6656/main_usb.c
1224 @@ -1099,6 +1099,8 @@ static int device_close(struct net_device *dev)
1225 memset(pMgmt->abyCurrBSSID, 0, 6);
1226 pMgmt->eCurrState = WMAC_STATE_IDLE;
1227
1228 + pDevice->flags &= ~DEVICE_FLAGS_OPENED;
1229 +
1230 device_free_tx_bufs(pDevice);
1231 device_free_rx_bufs(pDevice);
1232 device_free_int_bufs(pDevice);
1233 @@ -1110,7 +1112,6 @@ static int device_close(struct net_device *dev)
1234 usb_free_urb(pDevice->pInterruptURB);
1235
1236 BSSvClearNodeDBTable(pDevice, 0);
1237 - pDevice->flags &=(~DEVICE_FLAGS_OPENED);
1238
1239 DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "device_close2 \n");
1240
1241 diff --git a/drivers/tty/serial/pch_uart.c b/drivers/tty/serial/pch_uart.c
1242 index 572d481..20e4c94 100644
1243 --- a/drivers/tty/serial/pch_uart.c
1244 +++ b/drivers/tty/serial/pch_uart.c
1245 @@ -658,11 +658,12 @@ static int dma_push_rx(struct eg20t_port *priv, int size)
1246 dev_warn(port->dev, "Rx overrun: dropping %u bytes\n",
1247 size - room);
1248 if (!room)
1249 - return room;
1250 + goto out;
1251
1252 tty_insert_flip_string(tport, sg_virt(&priv->sg_rx), size);
1253
1254 port->icount.rx += room;
1255 +out:
1256 tty_kref_put(tty);
1257
1258 return room;
1259 @@ -1071,6 +1072,8 @@ static void pch_uart_err_ir(struct eg20t_port *priv, unsigned int lsr)
1260 if (tty == NULL) {
1261 for (i = 0; error_msg[i] != NULL; i++)
1262 dev_err(&priv->pdev->dev, error_msg[i]);
1263 + } else {
1264 + tty_kref_put(tty);
1265 }
1266 }
1267
1268 diff --git a/drivers/tty/serial/serial-tegra.c b/drivers/tty/serial/serial-tegra.c
1269 index ee7c812..cf1a7a1 100644
1270 --- a/drivers/tty/serial/serial-tegra.c
1271 +++ b/drivers/tty/serial/serial-tegra.c
1272 @@ -726,7 +726,7 @@ static irqreturn_t tegra_uart_isr(int irq, void *data)
1273 static void tegra_uart_stop_rx(struct uart_port *u)
1274 {
1275 struct tegra_uart_port *tup = to_tegra_uport(u);
1276 - struct tty_struct *tty = tty_port_tty_get(&tup->uport.state->port);
1277 + struct tty_struct *tty;
1278 struct tty_port *port = &u->state->port;
1279 struct dma_tx_state state;
1280 unsigned long ier;
1281 @@ -738,6 +738,8 @@ static void tegra_uart_stop_rx(struct uart_port *u)
1282 if (!tup->rx_in_progress)
1283 return;
1284
1285 + tty = tty_port_tty_get(&tup->uport.state->port);
1286 +
1287 tegra_uart_wait_sym_time(tup, 1); /* wait a character interval */
1288
1289 ier = tup->ier_shadow;
1290 diff --git a/drivers/tty/tty_ioctl.c b/drivers/tty/tty_ioctl.c
1291 index 3500d41..088b4ca 100644
1292 --- a/drivers/tty/tty_ioctl.c
1293 +++ b/drivers/tty/tty_ioctl.c
1294 @@ -1201,6 +1201,9 @@ int n_tty_ioctl_helper(struct tty_struct *tty, struct file *file,
1295 }
1296 return 0;
1297 case TCFLSH:
1298 + retval = tty_check_change(tty);
1299 + if (retval)
1300 + return retval;
1301 return __tty_perform_flush(tty, arg);
1302 default:
1303 /* Try the mode commands */
1304 diff --git a/drivers/usb/core/devio.c b/drivers/usb/core/devio.c
1305 index 0598650..342aa7f 100644
1306 --- a/drivers/usb/core/devio.c
1307 +++ b/drivers/usb/core/devio.c
1308 @@ -742,6 +742,22 @@ static int check_ctrlrecip(struct dev_state *ps, unsigned int requesttype,
1309 if ((index & ~USB_DIR_IN) == 0)
1310 return 0;
1311 ret = findintfep(ps->dev, index);
1312 + if (ret < 0) {
1313 + /*
1314 + * Some not fully compliant Win apps seem to get
1315 + * index wrong and have the endpoint number here
1316 + * rather than the endpoint address (with the
1317 + * correct direction). Win does let this through,
1318 + * so we'll not reject it here but leave it to
1319 + * the device to not break KVM. But we warn.
1320 + */
1321 + ret = findintfep(ps->dev, index ^ 0x80);
1322 + if (ret >= 0)
1323 + dev_info(&ps->dev->dev,
1324 + "%s: process %i (%s) requesting ep %02x but needs %02x\n",
1325 + __func__, task_pid_nr(current),
1326 + current->comm, index, index ^ 0x80);
1327 + }
1328 if (ret >= 0)
1329 ret = checkintf(ps, ret);
1330 break;
1331 diff --git a/drivers/usb/dwc3/dwc3-pci.c b/drivers/usb/dwc3/dwc3-pci.c
1332 index ed07ec0..db6f365 100644
1333 --- a/drivers/usb/dwc3/dwc3-pci.c
1334 +++ b/drivers/usb/dwc3/dwc3-pci.c
1335 @@ -48,6 +48,8 @@
1336 /* FIXME define these in <linux/pci_ids.h> */
1337 #define PCI_VENDOR_ID_SYNOPSYS 0x16c3
1338 #define PCI_DEVICE_ID_SYNOPSYS_HAPSUSB3 0xabcd
1339 +#define PCI_DEVICE_ID_INTEL_BYT 0x0f37
1340 +#define PCI_DEVICE_ID_INTEL_MRFLD 0x119e
1341
1342 struct dwc3_pci {
1343 struct device *dev;
1344 @@ -207,6 +209,8 @@ static DEFINE_PCI_DEVICE_TABLE(dwc3_pci_id_table) = {
1345 PCI_DEVICE(PCI_VENDOR_ID_SYNOPSYS,
1346 PCI_DEVICE_ID_SYNOPSYS_HAPSUSB3),
1347 },
1348 + { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_BYT), },
1349 + { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_MRFLD), },
1350 { } /* Terminating Entry */
1351 };
1352 MODULE_DEVICE_TABLE(pci, dwc3_pci_id_table);
1353 diff --git a/drivers/usb/gadget/f_fs.c b/drivers/usb/gadget/f_fs.c
1354 index f394f29..b6e9d91 100644
1355 --- a/drivers/usb/gadget/f_fs.c
1356 +++ b/drivers/usb/gadget/f_fs.c
1357 @@ -1034,37 +1034,19 @@ struct ffs_sb_fill_data {
1358 struct ffs_file_perms perms;
1359 umode_t root_mode;
1360 const char *dev_name;
1361 - union {
1362 - /* set by ffs_fs_mount(), read by ffs_sb_fill() */
1363 - void *private_data;
1364 - /* set by ffs_sb_fill(), read by ffs_fs_mount */
1365 - struct ffs_data *ffs_data;
1366 - };
1367 + struct ffs_data *ffs_data;
1368 };
1369
1370 static int ffs_sb_fill(struct super_block *sb, void *_data, int silent)
1371 {
1372 struct ffs_sb_fill_data *data = _data;
1373 struct inode *inode;
1374 - struct ffs_data *ffs;
1375 + struct ffs_data *ffs = data->ffs_data;
1376
1377 ENTER();
1378
1379 - /* Initialise data */
1380 - ffs = ffs_data_new();
1381 - if (unlikely(!ffs))
1382 - goto Enomem;
1383 -
1384 ffs->sb = sb;
1385 - ffs->dev_name = kstrdup(data->dev_name, GFP_KERNEL);
1386 - if (unlikely(!ffs->dev_name))
1387 - goto Enomem;
1388 - ffs->file_perms = data->perms;
1389 - ffs->private_data = data->private_data;
1390 -
1391 - /* used by the caller of this function */
1392 - data->ffs_data = ffs;
1393 -
1394 + data->ffs_data = NULL;
1395 sb->s_fs_info = ffs;
1396 sb->s_blocksize = PAGE_CACHE_SIZE;
1397 sb->s_blocksize_bits = PAGE_CACHE_SHIFT;
1398 @@ -1080,17 +1062,14 @@ static int ffs_sb_fill(struct super_block *sb, void *_data, int silent)
1399 &data->perms);
1400 sb->s_root = d_make_root(inode);
1401 if (unlikely(!sb->s_root))
1402 - goto Enomem;
1403 + return -ENOMEM;
1404
1405 /* EP0 file */
1406 if (unlikely(!ffs_sb_create_file(sb, "ep0", ffs,
1407 &ffs_ep0_operations, NULL)))
1408 - goto Enomem;
1409 + return -ENOMEM;
1410
1411 return 0;
1412 -
1413 -Enomem:
1414 - return -ENOMEM;
1415 }
1416
1417 static int ffs_fs_parse_opts(struct ffs_sb_fill_data *data, char *opts)
1418 @@ -1193,6 +1172,7 @@ ffs_fs_mount(struct file_system_type *t, int flags,
1419 struct dentry *rv;
1420 int ret;
1421 void *ffs_dev;
1422 + struct ffs_data *ffs;
1423
1424 ENTER();
1425
1426 @@ -1200,18 +1180,30 @@ ffs_fs_mount(struct file_system_type *t, int flags,
1427 if (unlikely(ret < 0))
1428 return ERR_PTR(ret);
1429
1430 + ffs = ffs_data_new();
1431 + if (unlikely(!ffs))
1432 + return ERR_PTR(-ENOMEM);
1433 + ffs->file_perms = data.perms;
1434 +
1435 + ffs->dev_name = kstrdup(dev_name, GFP_KERNEL);
1436 + if (unlikely(!ffs->dev_name)) {
1437 + ffs_data_put(ffs);
1438 + return ERR_PTR(-ENOMEM);
1439 + }
1440 +
1441 ffs_dev = functionfs_acquire_dev_callback(dev_name);
1442 - if (IS_ERR(ffs_dev))
1443 - return ffs_dev;
1444 + if (IS_ERR(ffs_dev)) {
1445 + ffs_data_put(ffs);
1446 + return ERR_CAST(ffs_dev);
1447 + }
1448 + ffs->private_data = ffs_dev;
1449 + data.ffs_data = ffs;
1450
1451 - data.dev_name = dev_name;
1452 - data.private_data = ffs_dev;
1453 rv = mount_nodev(t, flags, &data, ffs_sb_fill);
1454 -
1455 - /* data.ffs_data is set by ffs_sb_fill */
1456 - if (IS_ERR(rv))
1457 + if (IS_ERR(rv) && data.ffs_data) {
1458 functionfs_release_dev_callback(data.ffs_data);
1459 -
1460 + ffs_data_put(data.ffs_data);
1461 + }
1462 return rv;
1463 }
1464
1465 diff --git a/drivers/usb/host/ehci-fsl.c b/drivers/usb/host/ehci-fsl.c
1466 index bd831ec..87c1a2e 100644
1467 --- a/drivers/usb/host/ehci-fsl.c
1468 +++ b/drivers/usb/host/ehci-fsl.c
1469 @@ -130,7 +130,7 @@ static int usb_hcd_fsl_probe(const struct hc_driver *driver,
1470 }
1471
1472 /* Enable USB controller, 83xx or 8536 */
1473 - if (pdata->have_sysif_regs)
1474 + if (pdata->have_sysif_regs && pdata->controller_ver < FSL_USB_VER_1_6)
1475 setbits32(hcd->regs + FSL_SOC_USB_CTRL, 0x4);
1476
1477 /* Don't need to set host mode here. It will be done by tdi_reset() */
1478 @@ -232,15 +232,9 @@ static int ehci_fsl_setup_phy(struct usb_hcd *hcd,
1479 case FSL_USB2_PHY_ULPI:
1480 if (pdata->have_sysif_regs && pdata->controller_ver) {
1481 /* controller version 1.6 or above */
1482 + clrbits32(non_ehci + FSL_SOC_USB_CTRL, UTMI_PHY_EN);
1483 setbits32(non_ehci + FSL_SOC_USB_CTRL,
1484 - ULPI_PHY_CLK_SEL);
1485 - /*
1486 - * Due to controller issue of PHY_CLK_VALID in ULPI
1487 - * mode, we set USB_CTRL_USB_EN before checking
1488 - * PHY_CLK_VALID, otherwise PHY_CLK_VALID doesn't work.
1489 - */
1490 - clrsetbits_be32(non_ehci + FSL_SOC_USB_CTRL,
1491 - UTMI_PHY_EN, USB_CTRL_USB_EN);
1492 + ULPI_PHY_CLK_SEL | USB_CTRL_USB_EN);
1493 }
1494 portsc |= PORT_PTS_ULPI;
1495 break;
1496 diff --git a/drivers/usb/host/ehci-pci.c b/drivers/usb/host/ehci-pci.c
1497 index 595d210..8fe401c 100644
1498 --- a/drivers/usb/host/ehci-pci.c
1499 +++ b/drivers/usb/host/ehci-pci.c
1500 @@ -403,7 +403,7 @@ static struct pci_driver ehci_pci_driver = {
1501 .remove = usb_hcd_pci_remove,
1502 .shutdown = usb_hcd_pci_shutdown,
1503
1504 -#ifdef CONFIG_PM_SLEEP
1505 +#ifdef CONFIG_PM
1506 .driver = {
1507 .pm = &usb_hcd_pci_pm_ops
1508 },
1509 diff --git a/drivers/usb/host/ohci-hcd.c b/drivers/usb/host/ohci-hcd.c
1510 index a9d3437..c182262 100644
1511 --- a/drivers/usb/host/ohci-hcd.c
1512 +++ b/drivers/usb/host/ohci-hcd.c
1513 @@ -216,31 +216,26 @@ static int ohci_urb_enqueue (
1514 frame &= ~(ed->interval - 1);
1515 frame |= ed->branch;
1516 urb->start_frame = frame;
1517 + ed->last_iso = frame + ed->interval * (size - 1);
1518 }
1519 } else if (ed->type == PIPE_ISOCHRONOUS) {
1520 u16 next = ohci_frame_no(ohci) + 1;
1521 u16 frame = ed->last_iso + ed->interval;
1522 + u16 length = ed->interval * (size - 1);
1523
1524 /* Behind the scheduling threshold? */
1525 if (unlikely(tick_before(frame, next))) {
1526
1527 - /* USB_ISO_ASAP: Round up to the first available slot */
1528 + /* URB_ISO_ASAP: Round up to the first available slot */
1529 if (urb->transfer_flags & URB_ISO_ASAP) {
1530 frame += (next - frame + ed->interval - 1) &
1531 -ed->interval;
1532
1533 /*
1534 - * Not ASAP: Use the next slot in the stream. If
1535 - * the entire URB falls before the threshold, fail.
1536 + * Not ASAP: Use the next slot in the stream,
1537 + * no matter what.
1538 */
1539 } else {
1540 - if (tick_before(frame + ed->interval *
1541 - (urb->number_of_packets - 1), next)) {
1542 - retval = -EXDEV;
1543 - usb_hcd_unlink_urb_from_ep(hcd, urb);
1544 - goto fail;
1545 - }
1546 -
1547 /*
1548 * Some OHCI hardware doesn't handle late TDs
1549 * correctly. After retiring them it proceeds
1550 @@ -251,9 +246,16 @@ static int ohci_urb_enqueue (
1551 urb_priv->td_cnt = DIV_ROUND_UP(
1552 (u16) (next - frame),
1553 ed->interval);
1554 + if (urb_priv->td_cnt >= urb_priv->length) {
1555 + ++urb_priv->td_cnt; /* Mark it */
1556 + ohci_dbg(ohci, "iso underrun %p (%u+%u < %u)\n",
1557 + urb, frame, length,
1558 + next);
1559 + }
1560 }
1561 }
1562 urb->start_frame = frame;
1563 + ed->last_iso = frame + length;
1564 }
1565
1566 /* fill the TDs and link them to the ed; and
1567 diff --git a/drivers/usb/host/ohci-q.c b/drivers/usb/host/ohci-q.c
1568 index df4a670..e7f577e 100644
1569 --- a/drivers/usb/host/ohci-q.c
1570 +++ b/drivers/usb/host/ohci-q.c
1571 @@ -41,9 +41,13 @@ finish_urb(struct ohci_hcd *ohci, struct urb *urb, int status)
1572 __releases(ohci->lock)
1573 __acquires(ohci->lock)
1574 {
1575 - struct device *dev = ohci_to_hcd(ohci)->self.controller;
1576 + struct device *dev = ohci_to_hcd(ohci)->self.controller;
1577 + struct usb_host_endpoint *ep = urb->ep;
1578 + struct urb_priv *urb_priv;
1579 +
1580 // ASSERT (urb->hcpriv != 0);
1581
1582 + restart:
1583 urb_free_priv (ohci, urb->hcpriv);
1584 urb->hcpriv = NULL;
1585 if (likely(status == -EINPROGRESS))
1586 @@ -80,6 +84,21 @@ __acquires(ohci->lock)
1587 ohci->hc_control &= ~(OHCI_CTRL_PLE|OHCI_CTRL_IE);
1588 ohci_writel (ohci, ohci->hc_control, &ohci->regs->control);
1589 }
1590 +
1591 + /*
1592 + * An isochronous URB that is sumitted too late won't have any TDs
1593 + * (marked by the fact that the td_cnt value is larger than the
1594 + * actual number of TDs). If the next URB on this endpoint is like
1595 + * that, give it back now.
1596 + */
1597 + if (!list_empty(&ep->urb_list)) {
1598 + urb = list_first_entry(&ep->urb_list, struct urb, urb_list);
1599 + urb_priv = urb->hcpriv;
1600 + if (urb_priv->td_cnt > urb_priv->length) {
1601 + status = 0;
1602 + goto restart;
1603 + }
1604 + }
1605 }
1606
1607
1608 @@ -546,7 +565,6 @@ td_fill (struct ohci_hcd *ohci, u32 info,
1609 td->hwCBP = cpu_to_hc32 (ohci, data & 0xFFFFF000);
1610 *ohci_hwPSWp(ohci, td, 0) = cpu_to_hc16 (ohci,
1611 (data & 0x0FFF) | 0xE000);
1612 - td->ed->last_iso = info & 0xffff;
1613 } else {
1614 td->hwCBP = cpu_to_hc32 (ohci, data);
1615 }
1616 @@ -996,7 +1014,7 @@ rescan_this:
1617 urb_priv->td_cnt++;
1618
1619 /* if URB is done, clean up */
1620 - if (urb_priv->td_cnt == urb_priv->length) {
1621 + if (urb_priv->td_cnt >= urb_priv->length) {
1622 modified = completed = 1;
1623 finish_urb(ohci, urb, 0);
1624 }
1625 @@ -1086,7 +1104,7 @@ static void takeback_td(struct ohci_hcd *ohci, struct td *td)
1626 urb_priv->td_cnt++;
1627
1628 /* If all this urb's TDs are done, call complete() */
1629 - if (urb_priv->td_cnt == urb_priv->length)
1630 + if (urb_priv->td_cnt >= urb_priv->length)
1631 finish_urb(ohci, urb, status);
1632
1633 /* clean schedule: unlink EDs that are no longer busy */
1634 diff --git a/drivers/usb/host/uhci-pci.c b/drivers/usb/host/uhci-pci.c
1635 index c300bd2f7..0f228c4 100644
1636 --- a/drivers/usb/host/uhci-pci.c
1637 +++ b/drivers/usb/host/uhci-pci.c
1638 @@ -293,7 +293,7 @@ static struct pci_driver uhci_pci_driver = {
1639 .remove = usb_hcd_pci_remove,
1640 .shutdown = uhci_shutdown,
1641
1642 -#ifdef CONFIG_PM_SLEEP
1643 +#ifdef CONFIG_PM
1644 .driver = {
1645 .pm = &usb_hcd_pci_pm_ops
1646 },
1647 diff --git a/drivers/usb/host/uhci-q.c b/drivers/usb/host/uhci-q.c
1648 index 041c6dd..da6f56d 100644
1649 --- a/drivers/usb/host/uhci-q.c
1650 +++ b/drivers/usb/host/uhci-q.c
1651 @@ -1303,7 +1303,7 @@ static int uhci_submit_isochronous(struct uhci_hcd *uhci, struct urb *urb,
1652 }
1653
1654 /* Fell behind? */
1655 - if (uhci_frame_before_eq(frame, next)) {
1656 + if (!uhci_frame_before_eq(next, frame)) {
1657
1658 /* USB_ISO_ASAP: Round up to the first available slot */
1659 if (urb->transfer_flags & URB_ISO_ASAP)
1660 @@ -1311,13 +1311,17 @@ static int uhci_submit_isochronous(struct uhci_hcd *uhci, struct urb *urb,
1661 -qh->period;
1662
1663 /*
1664 - * Not ASAP: Use the next slot in the stream. If
1665 - * the entire URB falls before the threshold, fail.
1666 + * Not ASAP: Use the next slot in the stream,
1667 + * no matter what.
1668 */
1669 else if (!uhci_frame_before_eq(next,
1670 frame + (urb->number_of_packets - 1) *
1671 qh->period))
1672 - return -EXDEV;
1673 + dev_dbg(uhci_dev(uhci), "iso underrun %p (%u+%u < %u)\n",
1674 + urb, frame,
1675 + (urb->number_of_packets - 1) *
1676 + qh->period,
1677 + next);
1678 }
1679 }
1680
1681 diff --git a/drivers/usb/host/xhci-hub.c b/drivers/usb/host/xhci-hub.c
1682 index 1d35459..ad5b99b 100644
1683 --- a/drivers/usb/host/xhci-hub.c
1684 +++ b/drivers/usb/host/xhci-hub.c
1685 @@ -286,7 +286,7 @@ static int xhci_stop_device(struct xhci_hcd *xhci, int slot_id, int suspend)
1686 if (virt_dev->eps[i].ring && virt_dev->eps[i].ring->dequeue)
1687 xhci_queue_stop_endpoint(xhci, slot_id, i, suspend);
1688 }
1689 - cmd->command_trb = xhci->cmd_ring->enqueue;
1690 + cmd->command_trb = xhci_find_next_enqueue(xhci->cmd_ring);
1691 list_add_tail(&cmd->cmd_list, &virt_dev->cmd_list);
1692 xhci_queue_stop_endpoint(xhci, slot_id, 0, suspend);
1693 xhci_ring_cmd_db(xhci);
1694 diff --git a/drivers/usb/host/xhci-pci.c b/drivers/usb/host/xhci-pci.c
1695 index f00cb20..159e3c6 100644
1696 --- a/drivers/usb/host/xhci-pci.c
1697 +++ b/drivers/usb/host/xhci-pci.c
1698 @@ -345,7 +345,7 @@ static struct pci_driver xhci_pci_driver = {
1699 /* suspend and resume implemented later */
1700
1701 .shutdown = usb_hcd_pci_shutdown,
1702 -#ifdef CONFIG_PM_SLEEP
1703 +#ifdef CONFIG_PM
1704 .driver = {
1705 .pm = &usb_hcd_pci_pm_ops
1706 },
1707 diff --git a/drivers/usb/host/xhci-ring.c b/drivers/usb/host/xhci-ring.c
1708 index 5b08cd8..289e481 100644
1709 --- a/drivers/usb/host/xhci-ring.c
1710 +++ b/drivers/usb/host/xhci-ring.c
1711 @@ -122,6 +122,16 @@ static int enqueue_is_link_trb(struct xhci_ring *ring)
1712 return TRB_TYPE_LINK_LE32(link->control);
1713 }
1714
1715 +union xhci_trb *xhci_find_next_enqueue(struct xhci_ring *ring)
1716 +{
1717 + /* Enqueue pointer can be left pointing to the link TRB,
1718 + * we must handle that
1719 + */
1720 + if (TRB_TYPE_LINK_LE32(ring->enqueue->link.control))
1721 + return ring->enq_seg->next->trbs;
1722 + return ring->enqueue;
1723 +}
1724 +
1725 /* Updates trb to point to the next TRB in the ring, and updates seg if the next
1726 * TRB is in a new segment. This does not skip over link TRBs, and it does not
1727 * effect the ring dequeue or enqueue pointers.
1728 @@ -847,8 +857,12 @@ remove_finished_td:
1729 /* Otherwise ring the doorbell(s) to restart queued transfers */
1730 ring_doorbell_for_active_rings(xhci, slot_id, ep_index);
1731 }
1732 - ep->stopped_td = NULL;
1733 - ep->stopped_trb = NULL;
1734 +
1735 + /* Clear stopped_td and stopped_trb if endpoint is not halted */
1736 + if (!(ep->ep_state & EP_HALTED)) {
1737 + ep->stopped_td = NULL;
1738 + ep->stopped_trb = NULL;
1739 + }
1740
1741 /*
1742 * Drop the lock and complete the URBs in the cancelled TD list.
1743 @@ -1390,6 +1404,12 @@ static void handle_cmd_completion(struct xhci_hcd *xhci,
1744 inc_deq(xhci, xhci->cmd_ring);
1745 return;
1746 }
1747 + /* There is no command to handle if we get a stop event when the
1748 + * command ring is empty, event->cmd_trb points to the next
1749 + * unset command
1750 + */
1751 + if (xhci->cmd_ring->dequeue == xhci->cmd_ring->enqueue)
1752 + return;
1753 }
1754
1755 switch (le32_to_cpu(xhci->cmd_ring->dequeue->generic.field[3])
1756 diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c
1757 index b3c4162..d1fc37f 100644
1758 --- a/drivers/usb/host/xhci.c
1759 +++ b/drivers/usb/host/xhci.c
1760 @@ -2635,15 +2635,7 @@ static int xhci_configure_endpoint(struct xhci_hcd *xhci,
1761 if (command) {
1762 cmd_completion = command->completion;
1763 cmd_status = &command->status;
1764 - command->command_trb = xhci->cmd_ring->enqueue;
1765 -
1766 - /* Enqueue pointer can be left pointing to the link TRB,
1767 - * we must handle that
1768 - */
1769 - if (TRB_TYPE_LINK_LE32(command->command_trb->link.control))
1770 - command->command_trb =
1771 - xhci->cmd_ring->enq_seg->next->trbs;
1772 -
1773 + command->command_trb = xhci_find_next_enqueue(xhci->cmd_ring);
1774 list_add_tail(&command->cmd_list, &virt_dev->cmd_list);
1775 } else {
1776 cmd_completion = &virt_dev->cmd_completion;
1777 @@ -2651,7 +2643,7 @@ static int xhci_configure_endpoint(struct xhci_hcd *xhci,
1778 }
1779 init_completion(cmd_completion);
1780
1781 - cmd_trb = xhci->cmd_ring->dequeue;
1782 + cmd_trb = xhci_find_next_enqueue(xhci->cmd_ring);
1783 if (!ctx_change)
1784 ret = xhci_queue_configure_endpoint(xhci, in_ctx->dma,
1785 udev->slot_id, must_succeed);
1786 @@ -3468,14 +3460,7 @@ int xhci_discover_or_reset_device(struct usb_hcd *hcd, struct usb_device *udev)
1787
1788 /* Attempt to submit the Reset Device command to the command ring */
1789 spin_lock_irqsave(&xhci->lock, flags);
1790 - reset_device_cmd->command_trb = xhci->cmd_ring->enqueue;
1791 -
1792 - /* Enqueue pointer can be left pointing to the link TRB,
1793 - * we must handle that
1794 - */
1795 - if (TRB_TYPE_LINK_LE32(reset_device_cmd->command_trb->link.control))
1796 - reset_device_cmd->command_trb =
1797 - xhci->cmd_ring->enq_seg->next->trbs;
1798 + reset_device_cmd->command_trb = xhci_find_next_enqueue(xhci->cmd_ring);
1799
1800 list_add_tail(&reset_device_cmd->cmd_list, &virt_dev->cmd_list);
1801 ret = xhci_queue_reset_device(xhci, slot_id);
1802 @@ -3679,7 +3664,7 @@ int xhci_alloc_dev(struct usb_hcd *hcd, struct usb_device *udev)
1803 union xhci_trb *cmd_trb;
1804
1805 spin_lock_irqsave(&xhci->lock, flags);
1806 - cmd_trb = xhci->cmd_ring->dequeue;
1807 + cmd_trb = xhci_find_next_enqueue(xhci->cmd_ring);
1808 ret = xhci_queue_slot_control(xhci, TRB_ENABLE_SLOT, 0);
1809 if (ret) {
1810 spin_unlock_irqrestore(&xhci->lock, flags);
1811 @@ -3811,7 +3796,7 @@ int xhci_address_device(struct usb_hcd *hcd, struct usb_device *udev)
1812 xhci_dbg_ctx(xhci, virt_dev->in_ctx, 2);
1813
1814 spin_lock_irqsave(&xhci->lock, flags);
1815 - cmd_trb = xhci->cmd_ring->dequeue;
1816 + cmd_trb = xhci_find_next_enqueue(xhci->cmd_ring);
1817 ret = xhci_queue_address_device(xhci, virt_dev->in_ctx->dma,
1818 udev->slot_id);
1819 if (ret) {
1820 diff --git a/drivers/usb/host/xhci.h b/drivers/usb/host/xhci.h
1821 index 6ab1e60..e63645d 100644
1822 --- a/drivers/usb/host/xhci.h
1823 +++ b/drivers/usb/host/xhci.h
1824 @@ -1851,6 +1851,7 @@ int xhci_cancel_cmd(struct xhci_hcd *xhci, struct xhci_command *command,
1825 union xhci_trb *cmd_trb);
1826 void xhci_ring_ep_doorbell(struct xhci_hcd *xhci, unsigned int slot_id,
1827 unsigned int ep_index, unsigned int stream_id);
1828 +union xhci_trb *xhci_find_next_enqueue(struct xhci_ring *ring);
1829
1830 /* xHCI roothub code */
1831 void xhci_set_link_state(struct xhci_hcd *xhci, __le32 __iomem **port_array,
1832 diff --git a/fs/bio.c b/fs/bio.c
1833 index c5eae72..5e7507d 100644
1834 --- a/fs/bio.c
1835 +++ b/fs/bio.c
1836 @@ -917,8 +917,8 @@ void bio_copy_data(struct bio *dst, struct bio *src)
1837 src_p = kmap_atomic(src_bv->bv_page);
1838 dst_p = kmap_atomic(dst_bv->bv_page);
1839
1840 - memcpy(dst_p + dst_bv->bv_offset,
1841 - src_p + src_bv->bv_offset,
1842 + memcpy(dst_p + dst_offset,
1843 + src_p + src_offset,
1844 bytes);
1845
1846 kunmap_atomic(dst_p);
1847 diff --git a/fs/sysv/super.c b/fs/sysv/super.c
1848 index d0c6a00..eda1095 100644
1849 --- a/fs/sysv/super.c
1850 +++ b/fs/sysv/super.c
1851 @@ -487,6 +487,7 @@ static int v7_fill_super(struct super_block *sb, void *data, int silent)
1852 sbi->s_sb = sb;
1853 sbi->s_block_base = 0;
1854 sbi->s_type = FSTYPE_V7;
1855 + mutex_init(&sbi->s_lock);
1856 sb->s_fs_info = sbi;
1857
1858 sb_set_blocksize(sb, 512);
1859 diff --git a/include/linux/device-mapper.h b/include/linux/device-mapper.h
1860 index e151d4c..9109e81 100644
1861 --- a/include/linux/device-mapper.h
1862 +++ b/include/linux/device-mapper.h
1863 @@ -405,13 +405,14 @@ int dm_noflush_suspending(struct dm_target *ti);
1864 union map_info *dm_get_mapinfo(struct bio *bio);
1865 union map_info *dm_get_rq_mapinfo(struct request *rq);
1866
1867 +struct queue_limits *dm_get_queue_limits(struct mapped_device *md);
1868 +
1869 /*
1870 * Geometry functions.
1871 */
1872 int dm_get_geometry(struct mapped_device *md, struct hd_geometry *geo);
1873 int dm_set_geometry(struct mapped_device *md, struct hd_geometry *geo);
1874
1875 -
1876 /*-----------------------------------------------------------------
1877 * Functions for manipulating device-mapper tables.
1878 *---------------------------------------------------------------*/
1879 diff --git a/kernel/Makefile b/kernel/Makefile
1880 index 35ef118..ed2c9a9 100644
1881 --- a/kernel/Makefile
1882 +++ b/kernel/Makefile
1883 @@ -79,7 +79,7 @@ obj-$(CONFIG_KPROBES) += kprobes.o
1884 obj-$(CONFIG_KGDB) += debug/
1885 obj-$(CONFIG_DETECT_HUNG_TASK) += hung_task.o
1886 obj-$(CONFIG_LOCKUP_DETECTOR) += watchdog.o
1887 -obj-$(CONFIG_GENERIC_HARDIRQS) += irq/
1888 +obj-y += irq/
1889 obj-$(CONFIG_SECCOMP) += seccomp.o
1890 obj-$(CONFIG_RCU_TORTURE_TEST) += rcutorture.o
1891 obj-$(CONFIG_TREE_RCU) += rcutree.o
1892 diff --git a/kernel/irq/Makefile b/kernel/irq/Makefile
1893 index fff1738..639b2e1 100644
1894 --- a/kernel/irq/Makefile
1895 +++ b/kernel/irq/Makefile
1896 @@ -1,8 +1,10 @@
1897 -
1898 -obj-y := irqdesc.o handle.o manage.o spurious.o resend.o chip.o dummychip.o devres.o
1899 +obj-y += devres.o
1900 +ifdef CONFIG_GENERIC_HARDIRQS
1901 +obj-y += irqdesc.o handle.o manage.o spurious.o resend.o chip.o dummychip.o
1902 obj-$(CONFIG_GENERIC_IRQ_CHIP) += generic-chip.o
1903 obj-$(CONFIG_GENERIC_IRQ_PROBE) += autoprobe.o
1904 obj-$(CONFIG_IRQ_DOMAIN) += irqdomain.o
1905 obj-$(CONFIG_PROC_FS) += proc.o
1906 obj-$(CONFIG_GENERIC_PENDING_IRQ) += migration.o
1907 obj-$(CONFIG_PM_SLEEP) += pm.o
1908 +endif
1909 diff --git a/kernel/reboot.c b/kernel/reboot.c
1910 index 269ed93..f813b34 100644
1911 --- a/kernel/reboot.c
1912 +++ b/kernel/reboot.c
1913 @@ -32,7 +32,14 @@ EXPORT_SYMBOL(cad_pid);
1914 #endif
1915 enum reboot_mode reboot_mode DEFAULT_REBOOT_MODE;
1916
1917 -int reboot_default;
1918 +/*
1919 + * This variable is used privately to keep track of whether or not
1920 + * reboot_type is still set to its default value (i.e., reboot= hasn't
1921 + * been set on the command line). This is needed so that we can
1922 + * suppress DMI scanning for reboot quirks. Without it, it's
1923 + * impossible to override a faulty reboot quirk without recompiling.
1924 + */
1925 +int reboot_default = 1;
1926 int reboot_cpu;
1927 enum reboot_type reboot_type = BOOT_ACPI;
1928 int reboot_force;
1929 diff --git a/sound/core/compress_offload.c b/sound/core/compress_offload.c
1930 index 9896954..5863ba6 100644
1931 --- a/sound/core/compress_offload.c
1932 +++ b/sound/core/compress_offload.c
1933 @@ -837,7 +837,8 @@ static int snd_compress_dev_disconnect(struct snd_device *device)
1934 struct snd_compr *compr;
1935
1936 compr = device->device_data;
1937 - snd_unregister_device(compr->direction, compr->card, compr->device);
1938 + snd_unregister_device(SNDRV_DEVICE_TYPE_COMPRESS, compr->card,
1939 + compr->device);
1940 return 0;
1941 }
1942
1943 diff --git a/tools/lib/lk/debugfs.c b/tools/lib/lk/debugfs.c
1944 index 099e7cd..7c43479 100644
1945 --- a/tools/lib/lk/debugfs.c
1946 +++ b/tools/lib/lk/debugfs.c
1947 @@ -5,7 +5,6 @@
1948 #include <stdbool.h>
1949 #include <sys/vfs.h>
1950 #include <sys/mount.h>
1951 -#include <linux/magic.h>
1952 #include <linux/kernel.h>
1953
1954 #include "debugfs.h"