/[linux-patches]/genpatches-2.6/tags/2.6.31-8/1006_linux-2.6.31.7.patch
Gentoo

Contents of /genpatches-2.6/tags/2.6.31-8/1006_linux-2.6.31.7.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1640 - (show annotations) (download)
Tue Dec 8 22:17:18 2009 UTC (8 years, 6 months ago) by mpagano
File size: 133338 byte(s)
2.6.31-8 release
1 diff --git a/Documentation/video4linux/gspca.txt b/Documentation/video4linux/gspca.txt
2 index 573f95b..d0a9ee3 100644
3 --- a/Documentation/video4linux/gspca.txt
4 +++ b/Documentation/video4linux/gspca.txt
5 @@ -284,6 +284,7 @@ sonixj 0c45:613a Microdia Sonix PC Camera
6 sonixj 0c45:613b Surfer SN-206
7 sonixj 0c45:613c Sonix Pccam168
8 sonixj 0c45:6143 Sonix Pccam168
9 +sonixj 0c45:6148 Digitus DA-70811/ZSMC USB PC Camera ZS211/Microdia
10 sn9c20x 0c45:6240 PC Camera (SN9C201 + MT9M001)
11 sn9c20x 0c45:6242 PC Camera (SN9C201 + MT9M111)
12 sn9c20x 0c45:6248 PC Camera (SN9C201 + OV9655)
13 diff --git a/arch/arm/include/asm/kmap_types.h b/arch/arm/include/asm/kmap_types.h
14 index d16ec97..c019949 100644
15 --- a/arch/arm/include/asm/kmap_types.h
16 +++ b/arch/arm/include/asm/kmap_types.h
17 @@ -22,4 +22,10 @@ enum km_type {
18 KM_TYPE_NR
19 };
20
21 +#ifdef CONFIG_DEBUG_HIGHMEM
22 +#define KM_NMI (-1)
23 +#define KM_NMI_PTE (-1)
24 +#define KM_IRQ_PTE (-1)
25 +#endif
26 +
27 #endif
28 diff --git a/arch/powerpc/include/asm/kmap_types.h b/arch/powerpc/include/asm/kmap_types.h
29 index b6bac6f..9163695 100644
30 --- a/arch/powerpc/include/asm/kmap_types.h
31 +++ b/arch/powerpc/include/asm/kmap_types.h
32 @@ -29,5 +29,16 @@ enum km_type {
33 KM_TYPE_NR
34 };
35
36 +/*
37 + * This is a temporary build fix that (so they say on lkml....) should no longer
38 + * be required after 2.6.33, because of changes planned to the kmap code.
39 + * Let's try to remove this cruft then.
40 + */
41 +#ifdef CONFIG_DEBUG_HIGHMEM
42 +#define KM_NMI (-1)
43 +#define KM_NMI_PTE (-1)
44 +#define KM_IRQ_PTE (-1)
45 +#endif
46 +
47 #endif /* __KERNEL__ */
48 #endif /* _ASM_POWERPC_KMAP_TYPES_H */
49 diff --git a/arch/sparc/kernel/prom_common.c b/arch/sparc/kernel/prom_common.c
50 index 0fb5789..7b4adbc 100644
51 --- a/arch/sparc/kernel/prom_common.c
52 +++ b/arch/sparc/kernel/prom_common.c
53 @@ -76,6 +76,7 @@ int of_set_property(struct device_node *dp, const char *name, void *val, int len
54
55 err = -ENODEV;
56
57 + mutex_lock(&of_set_property_mutex);
58 write_lock(&devtree_lock);
59 prevp = &dp->properties;
60 while (*prevp) {
61 @@ -85,9 +86,7 @@ int of_set_property(struct device_node *dp, const char *name, void *val, int len
62 void *old_val = prop->value;
63 int ret;
64
65 - mutex_lock(&of_set_property_mutex);
66 ret = prom_setprop(dp->node, name, val, len);
67 - mutex_unlock(&of_set_property_mutex);
68
69 err = -EINVAL;
70 if (ret >= 0) {
71 @@ -106,6 +105,7 @@ int of_set_property(struct device_node *dp, const char *name, void *val, int len
72 prevp = &(*prevp)->next;
73 }
74 write_unlock(&devtree_lock);
75 + mutex_unlock(&of_set_property_mutex);
76
77 /* XXX Upate procfs if necessary... */
78
79 diff --git a/arch/sparc/kernel/visemul.c b/arch/sparc/kernel/visemul.c
80 index b956fd7..d231cbd 100644
81 --- a/arch/sparc/kernel/visemul.c
82 +++ b/arch/sparc/kernel/visemul.c
83 @@ -617,7 +617,7 @@ static void pmul(struct pt_regs *regs, unsigned int insn, unsigned int opf)
84 rs2 = fps_regval(f, RS2(insn));
85
86 rd_val = 0;
87 - src2 = (rs2 >> (opf == FMUL8x16AU_OPF) ? 16 : 0);
88 + src2 = rs2 >> (opf == FMUL8x16AU_OPF ? 16 : 0);
89 for (byte = 0; byte < 4; byte++) {
90 u16 src1 = (rs1 >> (byte * 8)) & 0x00ff;
91 u32 prod = src1 * src2;
92 diff --git a/arch/x86/kernel/acpi/processor.c b/arch/x86/kernel/acpi/processor.c
93 index d296f4a..d85d1b2 100644
94 --- a/arch/x86/kernel/acpi/processor.c
95 +++ b/arch/x86/kernel/acpi/processor.c
96 @@ -79,7 +79,8 @@ void arch_acpi_processor_init_pdc(struct acpi_processor *pr)
97 struct cpuinfo_x86 *c = &cpu_data(pr->id);
98
99 pr->pdc = NULL;
100 - if (c->x86_vendor == X86_VENDOR_INTEL)
101 + if (c->x86_vendor == X86_VENDOR_INTEL ||
102 + c->x86_vendor == X86_VENDOR_CENTAUR)
103 init_intel_pdc(pr, c);
104
105 return;
106 diff --git a/arch/x86/kernel/cpu/cpufreq/speedstep-ich.c b/arch/x86/kernel/cpu/cpufreq/speedstep-ich.c
107 index 6911e91..3ae5a7a 100644
108 --- a/arch/x86/kernel/cpu/cpufreq/speedstep-ich.c
109 +++ b/arch/x86/kernel/cpu/cpufreq/speedstep-ich.c
110 @@ -232,28 +232,23 @@ static unsigned int speedstep_detect_chipset(void)
111 return 0;
112 }
113
114 -struct get_freq_data {
115 - unsigned int speed;
116 - unsigned int processor;
117 -};
118 -
119 -static void get_freq_data(void *_data)
120 +static void get_freq_data(void *_speed)
121 {
122 - struct get_freq_data *data = _data;
123 + unsigned int *speed = _speed;
124
125 - data->speed = speedstep_get_frequency(data->processor);
126 + *speed = speedstep_get_frequency(speedstep_processor);
127 }
128
129 static unsigned int speedstep_get(unsigned int cpu)
130 {
131 - struct get_freq_data data = { .processor = cpu };
132 + unsigned int speed;
133
134 /* You're supposed to ensure CPU is online. */
135 - if (smp_call_function_single(cpu, get_freq_data, &data, 1) != 0)
136 + if (smp_call_function_single(cpu, get_freq_data, &speed, 1) != 0)
137 BUG();
138
139 - dprintk("detected %u kHz as current frequency\n", data.speed);
140 - return data.speed;
141 + dprintk("detected %u kHz as current frequency\n", speed);
142 + return speed;
143 }
144
145 /**
146 diff --git a/drivers/char/agp/intel-agp.c b/drivers/char/agp/intel-agp.c
147 index 6a45365..62711dd 100644
148 --- a/drivers/char/agp/intel-agp.c
149 +++ b/drivers/char/agp/intel-agp.c
150 @@ -52,6 +52,7 @@
151 #define PCI_DEVICE_ID_INTEL_IGDNG_D_IG 0x0042
152 #define PCI_DEVICE_ID_INTEL_IGDNG_M_HB 0x0044
153 #define PCI_DEVICE_ID_INTEL_IGDNG_MA_HB 0x0062
154 +#define PCI_DEVICE_ID_INTEL_IGDNG_MC2_HB 0x006a
155 #define PCI_DEVICE_ID_INTEL_IGDNG_M_IG 0x0046
156
157 /* cover 915 and 945 variants */
158 @@ -86,7 +87,8 @@
159 agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_B43_HB || \
160 agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_IGDNG_D_HB || \
161 agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_IGDNG_M_HB || \
162 - agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_IGDNG_MA_HB)
163 + agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_IGDNG_MA_HB || \
164 + agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_IGDNG_MC2_HB)
165
166 extern int agp_memory_reserved;
167
168 @@ -1239,6 +1241,7 @@ static void intel_i965_get_gtt_range(int *gtt_offset, int *gtt_size)
169 case PCI_DEVICE_ID_INTEL_IGDNG_D_HB:
170 case PCI_DEVICE_ID_INTEL_IGDNG_M_HB:
171 case PCI_DEVICE_ID_INTEL_IGDNG_MA_HB:
172 + case PCI_DEVICE_ID_INTEL_IGDNG_MC2_HB:
173 *gtt_offset = *gtt_size = MB(2);
174 break;
175 default:
176 @@ -2222,6 +2225,8 @@ static const struct intel_driver_description {
177 "IGDNG/M", NULL, &intel_i965_driver },
178 { PCI_DEVICE_ID_INTEL_IGDNG_MA_HB, PCI_DEVICE_ID_INTEL_IGDNG_M_IG, 0,
179 "IGDNG/MA", NULL, &intel_i965_driver },
180 + { PCI_DEVICE_ID_INTEL_IGDNG_MC2_HB, PCI_DEVICE_ID_INTEL_IGDNG_M_IG, 0,
181 + "IGDNG/MC2", NULL, &intel_i965_driver },
182 { 0, 0, 0, NULL, NULL, NULL }
183 };
184
185 @@ -2418,6 +2423,7 @@ static struct pci_device_id agp_intel_pci_table[] = {
186 ID(PCI_DEVICE_ID_INTEL_IGDNG_D_HB),
187 ID(PCI_DEVICE_ID_INTEL_IGDNG_M_HB),
188 ID(PCI_DEVICE_ID_INTEL_IGDNG_MA_HB),
189 + ID(PCI_DEVICE_ID_INTEL_IGDNG_MC2_HB),
190 { }
191 };
192
193 diff --git a/drivers/char/keyboard.c b/drivers/char/keyboard.c
194 index 737be95..950837c 100644
195 --- a/drivers/char/keyboard.c
196 +++ b/drivers/char/keyboard.c
197 @@ -1249,7 +1249,7 @@ static void kbd_keycode(unsigned int keycode, int down, int hw_raw)
198
199 if (keycode >= NR_KEYS)
200 if (keycode >= KEY_BRL_DOT1 && keycode <= KEY_BRL_DOT8)
201 - keysym = K(KT_BRL, keycode - KEY_BRL_DOT1 + 1);
202 + keysym = U(K(KT_BRL, keycode - KEY_BRL_DOT1 + 1));
203 else
204 return;
205 else
206 diff --git a/drivers/char/tty_port.c b/drivers/char/tty_port.c
207 index fa4ce67..c0ff7ee 100644
208 --- a/drivers/char/tty_port.c
209 +++ b/drivers/char/tty_port.c
210 @@ -217,8 +217,14 @@ int tty_port_block_til_ready(struct tty_port *port,
211
212 /* if non-blocking mode is set we can pass directly to open unless
213 the port has just hung up or is in another error state */
214 - if ((filp->f_flags & O_NONBLOCK) ||
215 - (tty->flags & (1 << TTY_IO_ERROR))) {
216 + if (tty->flags & (1 << TTY_IO_ERROR)) {
217 + port->flags |= ASYNC_NORMAL_ACTIVE;
218 + return 0;
219 + }
220 + if (filp->f_flags & O_NONBLOCK) {
221 + /* Indicate we are open */
222 + if (tty->termios->c_cflag & CBAUD)
223 + tty_port_raise_dtr_rts(port);
224 port->flags |= ASYNC_NORMAL_ACTIVE;
225 return 0;
226 }
227 diff --git a/drivers/crypto/padlock-aes.c b/drivers/crypto/padlock-aes.c
228 index a9952b1..84c51e1 100644
229 --- a/drivers/crypto/padlock-aes.c
230 +++ b/drivers/crypto/padlock-aes.c
231 @@ -236,7 +236,7 @@ static inline void ecb_crypt(const u8 *in, u8 *out, u32 *key,
232 /* Padlock in ECB mode fetches at least ecb_fetch_bytes of data.
233 * We could avoid some copying here but it's probably not worth it.
234 */
235 - if (unlikely(((unsigned long)in & PAGE_SIZE) + ecb_fetch_bytes > PAGE_SIZE)) {
236 + if (unlikely(((unsigned long)in & ~PAGE_MASK) + ecb_fetch_bytes > PAGE_SIZE)) {
237 ecb_crypt_copy(in, out, key, cword, count);
238 return;
239 }
240 @@ -248,7 +248,7 @@ static inline u8 *cbc_crypt(const u8 *in, u8 *out, u32 *key,
241 u8 *iv, struct cword *cword, int count)
242 {
243 /* Padlock in CBC mode fetches at least cbc_fetch_bytes of data. */
244 - if (unlikely(((unsigned long)in & PAGE_SIZE) + cbc_fetch_bytes > PAGE_SIZE))
245 + if (unlikely(((unsigned long)in & ~PAGE_MASK) + cbc_fetch_bytes > PAGE_SIZE))
246 return cbc_crypt_copy(in, out, key, iv, cword, count);
247
248 return rep_xcrypt_cbc(in, out, key, iv, cword, count);
249 diff --git a/drivers/gpu/drm/Kconfig b/drivers/gpu/drm/Kconfig
250 index 39b393d..012cf1f 100644
251 --- a/drivers/gpu/drm/Kconfig
252 +++ b/drivers/gpu/drm/Kconfig
253 @@ -82,6 +82,7 @@ config DRM_I830
254 config DRM_I915
255 tristate "i915 driver"
256 depends on AGP_INTEL
257 + select SHMEM
258 select FB_CFB_FILLRECT
259 select FB_CFB_COPYAREA
260 select FB_CFB_IMAGEBLIT
261 diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c
262 index 7f2728b..55fb98d 100644
263 --- a/drivers/gpu/drm/drm_edid.c
264 +++ b/drivers/gpu/drm/drm_edid.c
265 @@ -333,6 +333,12 @@ static struct drm_display_mode *drm_mode_detailed(struct drm_device *dev,
266 mode->vsync_end = mode->vsync_start + vsync_pulse_width;
267 mode->vtotal = mode->vdisplay + vblank;
268
269 + /* Some EDIDs have bogus h/vtotal values */
270 + if (mode->hsync_end > mode->htotal)
271 + mode->htotal = mode->hsync_end + 1;
272 + if (mode->vsync_end > mode->vtotal)
273 + mode->vtotal = mode->vsync_end + 1;
274 +
275 drm_mode_set_name(mode);
276
277 if (pt->misc & DRM_EDID_PT_INTERLACED)
278 diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c
279 index 7ebc84c..9431a72 100644
280 --- a/drivers/gpu/drm/i915/i915_irq.c
281 +++ b/drivers/gpu/drm/i915/i915_irq.c
282 @@ -253,10 +253,15 @@ irqreturn_t igdng_irq_handler(struct drm_device *dev)
283 {
284 drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
285 int ret = IRQ_NONE;
286 - u32 de_iir, gt_iir;
287 + u32 de_iir, gt_iir, de_ier;
288 u32 new_de_iir, new_gt_iir;
289 struct drm_i915_master_private *master_priv;
290
291 + /* disable master interrupt before clearing iir */
292 + de_ier = I915_READ(DEIER);
293 + I915_WRITE(DEIER, de_ier & ~DE_MASTER_IRQ_CONTROL);
294 + (void)I915_READ(DEIER);
295 +
296 de_iir = I915_READ(DEIIR);
297 gt_iir = I915_READ(GTIIR);
298
299 @@ -287,6 +292,9 @@ irqreturn_t igdng_irq_handler(struct drm_device *dev)
300 gt_iir = new_gt_iir;
301 }
302
303 + I915_WRITE(DEIER, de_ier);
304 + (void)I915_READ(DEIER);
305 +
306 return ret;
307 }
308
309 diff --git a/drivers/gpu/drm/i915/intel_fb.c b/drivers/gpu/drm/i915/intel_fb.c
310 index 1d30802..75a9b83 100644
311 --- a/drivers/gpu/drm/i915/intel_fb.c
312 +++ b/drivers/gpu/drm/i915/intel_fb.c
313 @@ -114,7 +114,7 @@ static int intelfb_check_var(struct fb_var_screeninfo *var,
314 struct drm_framebuffer *fb = &intel_fb->base;
315 int depth;
316
317 - if (var->pixclock == -1 || !var->pixclock)
318 + if (var->pixclock != 0)
319 return -EINVAL;
320
321 /* Need to resize the fb object !!! */
322 @@ -205,7 +205,7 @@ static int intelfb_set_par(struct fb_info *info)
323
324 DRM_DEBUG("%d %d\n", var->xres, var->pixclock);
325
326 - if (var->pixclock != -1) {
327 + if (var->pixclock != 0) {
328
329 DRM_ERROR("PIXEL CLOCK SET\n");
330 return -EINVAL;
331 @@ -692,7 +692,7 @@ static int intelfb_multi_fb_probe_crtc(struct drm_device *dev, struct drm_crtc *
332 par->crtc_count = 1;
333
334 if (new_fb) {
335 - info->var.pixclock = -1;
336 + info->var.pixclock = 0;
337 if (register_framebuffer(info) < 0)
338 return -EINVAL;
339 } else
340 @@ -846,7 +846,7 @@ static int intelfb_single_fb_probe(struct drm_device *dev)
341 par->crtc_count = crtc_count;
342
343 if (new_fb) {
344 - info->var.pixclock = -1;
345 + info->var.pixclock = 0;
346 if (register_framebuffer(info) < 0)
347 return -EINVAL;
348 } else
349 diff --git a/drivers/gpu/drm/radeon/radeon_fb.c b/drivers/gpu/drm/radeon/radeon_fb.c
350 index ec383ed..f1d6d3d 100644
351 --- a/drivers/gpu/drm/radeon/radeon_fb.c
352 +++ b/drivers/gpu/drm/radeon/radeon_fb.c
353 @@ -120,7 +120,7 @@ static int radeonfb_check_var(struct fb_var_screeninfo *var,
354 struct drm_framebuffer *fb = &rfb->base;
355 int depth;
356
357 - if (var->pixclock == -1 || !var->pixclock) {
358 + if (var->pixclock != 0) {
359 return -EINVAL;
360 }
361 /* Need to resize the fb object !!! */
362 @@ -234,7 +234,7 @@ static int radeonfb_set_par(struct fb_info *info)
363 int ret;
364 int i;
365
366 - if (var->pixclock != -1) {
367 + if (var->pixclock != 0) {
368 DRM_ERROR("PIXEL CLCOK SET\n");
369 return -EINVAL;
370 }
371 @@ -828,7 +828,7 @@ static int radeonfb_single_fb_probe(struct radeon_device *rdev)
372 rfbdev->crtc_count = crtc_count;
373
374 if (new_fb) {
375 - info->var.pixclock = -1;
376 + info->var.pixclock = 0;
377 if (register_framebuffer(info) < 0)
378 return -EINVAL;
379 } else {
380 diff --git a/drivers/hwmon/adt7475.c b/drivers/hwmon/adt7475.c
381 index d39877a..20579fa 100644
382 --- a/drivers/hwmon/adt7475.c
383 +++ b/drivers/hwmon/adt7475.c
384 @@ -350,8 +350,7 @@ static ssize_t show_temp(struct device *dev, struct device_attribute *attr,
385
386 case FAULT:
387 /* Note - only for remote1 and remote2 */
388 - out = data->alarms & (sattr->index ? 0x8000 : 0x4000);
389 - out = out ? 0 : 1;
390 + out = !!(data->alarms & (sattr->index ? 0x8000 : 0x4000));
391 break;
392
393 default:
394 @@ -1152,7 +1151,7 @@ static struct adt7475_data *adt7475_update_device(struct device *dev)
395 }
396
397 /* Limits and settings, should never change update every 60 seconds */
398 - if (time_after(jiffies, data->limits_updated + HZ * 2) ||
399 + if (time_after(jiffies, data->limits_updated + HZ * 60) ||
400 !data->valid) {
401 data->config5 = adt7475_read(REG_CONFIG5);
402
403 diff --git a/drivers/i2c/i2c-core.c b/drivers/i2c/i2c-core.c
404 index 0e45c29..529d82c 100644
405 --- a/drivers/i2c/i2c-core.c
406 +++ b/drivers/i2c/i2c-core.c
407 @@ -718,6 +718,7 @@ int i2c_del_adapter(struct i2c_adapter *adap)
408 {
409 int res = 0;
410 struct i2c_adapter *found;
411 + struct i2c_client *client, *next;
412
413 /* First make sure that this adapter was ever added */
414 mutex_lock(&core_lock);
415 @@ -737,6 +738,16 @@ int i2c_del_adapter(struct i2c_adapter *adap)
416 if (res)
417 return res;
418
419 + /* Remove devices instantiated from sysfs */
420 + list_for_each_entry_safe(client, next, &userspace_devices, detected) {
421 + if (client->adapter == adap) {
422 + dev_dbg(&adap->dev, "Removing %s at 0x%x\n",
423 + client->name, client->addr);
424 + list_del(&client->detected);
425 + i2c_unregister_device(client);
426 + }
427 + }
428 +
429 /* Detach any active clients. This can't fail, thus we do not
430 checking the returned value. */
431 res = device_for_each_child(&adap->dev, NULL, __unregister_client);
432 diff --git a/drivers/isdn/hisax/hfc_usb.c b/drivers/isdn/hisax/hfc_usb.c
433 index 9de5420..a420b64 100644
434 --- a/drivers/isdn/hisax/hfc_usb.c
435 +++ b/drivers/isdn/hisax/hfc_usb.c
436 @@ -817,8 +817,8 @@ collect_rx_frame(usb_fifo * fifo, __u8 * data, int len, int finish)
437 }
438 /* we have a complete hdlc packet */
439 if (finish) {
440 - if ((!fifo->skbuff->data[fifo->skbuff->len - 1])
441 - && (fifo->skbuff->len > 3)) {
442 + if (fifo->skbuff->len > 3 &&
443 + !fifo->skbuff->data[fifo->skbuff->len - 1]) {
444
445 if (fifon == HFCUSB_D_RX) {
446 DBG(HFCUSB_DBG_DCHANNEL,
447 diff --git a/drivers/md/md.c b/drivers/md/md.c
448 index 9dd8720..78871cd 100644
449 --- a/drivers/md/md.c
450 +++ b/drivers/md/md.c
451 @@ -6495,8 +6495,9 @@ void md_do_sync(mddev_t *mddev)
452 skip:
453 mddev->curr_resync = 0;
454 mddev->curr_resync_completed = 0;
455 - mddev->resync_min = 0;
456 - mddev->resync_max = MaxSector;
457 + if (!test_bit(MD_RECOVERY_INTR, &mddev->recovery))
458 + /* We completed so max setting can be forgotten. */
459 + mddev->resync_max = MaxSector;
460 sysfs_notify(&mddev->kobj, NULL, "sync_completed");
461 wake_up(&resync_wait);
462 set_bit(MD_RECOVERY_DONE, &mddev->recovery);
463 diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c
464 index 8726fd7..d3e492e 100644
465 --- a/drivers/md/raid1.c
466 +++ b/drivers/md/raid1.c
467 @@ -1643,11 +1643,12 @@ static void raid1d(mddev_t *mddev)
468 r1_bio->sector,
469 r1_bio->sectors);
470 unfreeze_array(conf);
471 - }
472 + } else
473 + md_error(mddev,
474 + conf->mirrors[r1_bio->read_disk].rdev);
475
476 bio = r1_bio->bios[r1_bio->read_disk];
477 - if ((disk=read_balance(conf, r1_bio)) == -1 ||
478 - disk == r1_bio->read_disk) {
479 + if ((disk=read_balance(conf, r1_bio)) == -1) {
480 printk(KERN_ALERT "raid1: %s: unrecoverable I/O"
481 " read error for block %llu\n",
482 bdevname(bio->bi_bdev,b),
483 @@ -1676,6 +1677,7 @@ static void raid1d(mddev_t *mddev)
484 generic_make_request(bio);
485 }
486 }
487 + cond_resched();
488 }
489 if (unplug)
490 unplug_slaves(mddev);
491 diff --git a/drivers/md/raid10.c b/drivers/md/raid10.c
492 index 3d9020c..6a5a5fb 100644
493 --- a/drivers/md/raid10.c
494 +++ b/drivers/md/raid10.c
495 @@ -1630,6 +1630,7 @@ static void raid10d(mddev_t *mddev)
496 generic_make_request(bio);
497 }
498 }
499 + cond_resched();
500 }
501 if (unplug)
502 unplug_slaves(mddev);
503 diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c
504 index b8a2c5d..c339c8f 100644
505 --- a/drivers/md/raid5.c
506 +++ b/drivers/md/raid5.c
507 @@ -3790,6 +3790,8 @@ static sector_t reshape_request(mddev_t *mddev, sector_t sector_nr, int *skipped
508 sector_nr = conf->reshape_progress;
509 sector_div(sector_nr, new_data_disks);
510 if (sector_nr) {
511 + mddev->curr_resync_completed = sector_nr;
512 + sysfs_notify(&mddev->kobj, NULL, "sync_completed");
513 *skipped = 1;
514 return sector_nr;
515 }
516 diff --git a/drivers/media/common/tuners/tda18271-fe.c b/drivers/media/common/tuners/tda18271-fe.c
517 index b109356..f446f9a 100644
518 --- a/drivers/media/common/tuners/tda18271-fe.c
519 +++ b/drivers/media/common/tuners/tda18271-fe.c
520 @@ -595,13 +595,13 @@ static int tda18271_rf_tracking_filters_init(struct dvb_frontend *fe, u32 freq)
521 case RF2:
522 map[i].rf_a1 = (prog_cal[RF2] - prog_tab[RF2] -
523 prog_cal[RF1] + prog_tab[RF1]) /
524 - ((rf_freq[RF2] - rf_freq[RF1]) / 1000);
525 + (s32)((rf_freq[RF2] - rf_freq[RF1]) / 1000);
526 map[i].rf2 = rf_freq[RF2] / 1000;
527 break;
528 case RF3:
529 map[i].rf_a2 = (prog_cal[RF3] - prog_tab[RF3] -
530 prog_cal[RF2] + prog_tab[RF2]) /
531 - ((rf_freq[RF3] - rf_freq[RF2]) / 1000);
532 + (s32)((rf_freq[RF3] - rf_freq[RF2]) / 1000);
533 map[i].rf_b2 = prog_cal[RF2] - prog_tab[RF2];
534 map[i].rf3 = rf_freq[RF3] / 1000;
535 break;
536 @@ -963,12 +963,12 @@ static int tda18271_set_analog_params(struct dvb_frontend *fe,
537 struct tda18271_std_map_item *map;
538 char *mode;
539 int ret;
540 - u32 freq = params->frequency * 62500;
541 + u32 freq = params->frequency * 125 *
542 + ((params->mode == V4L2_TUNER_RADIO) ? 1 : 1000) / 2;
543
544 priv->mode = TDA18271_ANALOG;
545
546 if (params->mode == V4L2_TUNER_RADIO) {
547 - freq = freq / 1000;
548 map = &std_map->fm_radio;
549 mode = "fm";
550 } else if (params->std & V4L2_STD_MN) {
551 diff --git a/drivers/media/dvb/dvb-usb/cxusb.c b/drivers/media/dvb/dvb-usb/cxusb.c
552 index 406d7fb..f32b332 100644
553 --- a/drivers/media/dvb/dvb-usb/cxusb.c
554 +++ b/drivers/media/dvb/dvb-usb/cxusb.c
555 @@ -663,6 +663,14 @@ static struct zl10353_config cxusb_zl10353_xc3028_config = {
556 .parallel_ts = 1,
557 };
558
559 +static struct zl10353_config cxusb_zl10353_xc3028_config_no_i2c_gate = {
560 + .demod_address = 0x0f,
561 + .if2 = 45600,
562 + .no_tuner = 1,
563 + .parallel_ts = 1,
564 + .disable_i2c_gate_ctrl = 1,
565 +};
566 +
567 static struct mt352_config cxusb_mt352_xc3028_config = {
568 .demod_address = 0x0f,
569 .if2 = 4560,
570 @@ -894,7 +902,7 @@ static int cxusb_dualdig4_frontend_attach(struct dvb_usb_adapter *adap)
571 cxusb_bluebird_gpio_pulse(adap->dev, 0x02, 1);
572
573 if ((adap->fe = dvb_attach(zl10353_attach,
574 - &cxusb_zl10353_xc3028_config,
575 + &cxusb_zl10353_xc3028_config_no_i2c_gate,
576 &adap->dev->i2c_adap)) == NULL)
577 return -EIO;
578
579 diff --git a/drivers/media/dvb/frontends/dib7000p.c b/drivers/media/dvb/frontends/dib7000p.c
580 index 8217e5b..ac10fff 100644
581 --- a/drivers/media/dvb/frontends/dib7000p.c
582 +++ b/drivers/media/dvb/frontends/dib7000p.c
583 @@ -1344,6 +1344,11 @@ struct dvb_frontend * dib7000p_attach(struct i2c_adapter *i2c_adap, u8 i2c_addr,
584 if (dib7000p_identify(st) != 0)
585 goto error;
586
587 + /* FIXME: make sure the dev.parent field is initialized, or else
588 + request_firmware() will hit an OOPS (this should be moved somewhere
589 + more common) */
590 + st->i2c_master.gated_tuner_i2c_adap.dev.parent = i2c_adap->dev.parent;
591 +
592 dibx000_init_i2c_master(&st->i2c_master, DIB7000P, st->i2c_adap, st->i2c_addr);
593
594 dib7000p_demod_reset(st);
595 diff --git a/drivers/media/dvb/siano/smsusb.c b/drivers/media/dvb/siano/smsusb.c
596 index cb8a358..8f88a58 100644
597 --- a/drivers/media/dvb/siano/smsusb.c
598 +++ b/drivers/media/dvb/siano/smsusb.c
599 @@ -529,6 +529,12 @@ struct usb_device_id smsusb_id_table[] = {
600 .driver_info = SMS1XXX_BOARD_SIANO_NICE },
601 { USB_DEVICE(0x187f, 0x0301),
602 .driver_info = SMS1XXX_BOARD_SIANO_VENICE },
603 + { USB_DEVICE(0x2040, 0xb900),
604 + .driver_info = SMS1XXX_BOARD_HAUPPAUGE_WINDHAM },
605 + { USB_DEVICE(0x2040, 0xb910),
606 + .driver_info = SMS1XXX_BOARD_HAUPPAUGE_WINDHAM },
607 + { USB_DEVICE(0x2040, 0xc000),
608 + .driver_info = SMS1XXX_BOARD_HAUPPAUGE_WINDHAM },
609 { } /* Terminating entry */
610 };
611
612 diff --git a/drivers/media/radio/radio-gemtek-pci.c b/drivers/media/radio/radio-gemtek-pci.c
613 index c3f579d..c6cf116 100644
614 --- a/drivers/media/radio/radio-gemtek-pci.c
615 +++ b/drivers/media/radio/radio-gemtek-pci.c
616 @@ -181,12 +181,10 @@ static void gemtek_pci_mute(struct gemtek_pci *card)
617
618 static void gemtek_pci_unmute(struct gemtek_pci *card)
619 {
620 - mutex_lock(&card->lock);
621 if (card->mute) {
622 gemtek_pci_setfrequency(card, card->current_frequency);
623 card->mute = false;
624 }
625 - mutex_unlock(&card->lock);
626 }
627
628 static int gemtek_pci_getsignal(struct gemtek_pci *card)
629 diff --git a/drivers/media/video/bt8xx/bttv-driver.c b/drivers/media/video/bt8xx/bttv-driver.c
630 index 8cc6dd2..b8e276c 100644
631 --- a/drivers/media/video/bt8xx/bttv-driver.c
632 +++ b/drivers/media/video/bt8xx/bttv-driver.c
633 @@ -1299,7 +1299,7 @@ set_tvnorm(struct bttv *btv, unsigned int norm)
634
635 tvnorm = &bttv_tvnorms[norm];
636
637 - if (!memcmp(&bttv_tvnorms[btv->tvnorm].cropcap, &tvnorm->cropcap,
638 + if (memcmp(&bttv_tvnorms[btv->tvnorm].cropcap, &tvnorm->cropcap,
639 sizeof (tvnorm->cropcap))) {
640 bttv_crop_reset(&btv->crop[0], norm);
641 btv->crop[1] = btv->crop[0]; /* current = default */
642 @@ -3798,11 +3798,34 @@ bttv_irq_next_video(struct bttv *btv, struct bttv_buffer_set *set)
643 if (!V4L2_FIELD_HAS_BOTH(item->vb.field) &&
644 (item->vb.queue.next != &btv->capture)) {
645 item = list_entry(item->vb.queue.next, struct bttv_buffer, vb.queue);
646 + /* Mike Isely <isely@pobox.com> - Only check
647 + * and set up the bottom field in the logic
648 + * below. Don't ever do the top field. This
649 + * of course means that if we set up the
650 + * bottom field in the above code that we'll
651 + * actually skip a field. But that's OK.
652 + * Having processed only a single buffer this
653 + * time, then the next time around the first
654 + * available buffer should be for a top field.
655 + * That will then cause us here to set up a
656 + * top then a bottom field in the normal way.
657 + * The alternative to this understanding is
658 + * that we set up the second available buffer
659 + * as a top field, but that's out of order
660 + * since this driver always processes the top
661 + * field first - the effect will be the two
662 + * buffers being returned in the wrong order,
663 + * with the second buffer also being delayed
664 + * by one field time (owing to the fifo nature
665 + * of videobuf). Worse still, we'll be stuck
666 + * doing fields out of order now every time
667 + * until something else causes a field to be
668 + * dropped. By effectively forcing a field to
669 + * drop this way then we always get back into
670 + * sync within a single frame time. (Out of
671 + * order fields can screw up deinterlacing
672 + * algorithms.) */
673 if (!V4L2_FIELD_HAS_BOTH(item->vb.field)) {
674 - if (NULL == set->top &&
675 - V4L2_FIELD_TOP == item->vb.field) {
676 - set->top = item;
677 - }
678 if (NULL == set->bottom &&
679 V4L2_FIELD_BOTTOM == item->vb.field) {
680 set->bottom = item;
681 diff --git a/drivers/media/video/em28xx/em28xx-audio.c b/drivers/media/video/em28xx/em28xx-audio.c
682 index 7bd8a70..ac947ae 100644
683 --- a/drivers/media/video/em28xx/em28xx-audio.c
684 +++ b/drivers/media/video/em28xx/em28xx-audio.c
685 @@ -383,6 +383,11 @@ static int snd_em28xx_hw_capture_free(struct snd_pcm_substream *substream)
686
687 static int snd_em28xx_prepare(struct snd_pcm_substream *substream)
688 {
689 + struct em28xx *dev = snd_pcm_substream_chip(substream);
690 +
691 + dev->adev.hwptr_done_capture = 0;
692 + dev->adev.capture_transfer_done = 0;
693 +
694 return 0;
695 }
696
697 diff --git a/drivers/media/video/gspca/m5602/m5602_s5k4aa.c b/drivers/media/video/gspca/m5602/m5602_s5k4aa.c
698 index 0163903..3b159e4 100644
699 --- a/drivers/media/video/gspca/m5602/m5602_s5k4aa.c
700 +++ b/drivers/media/video/gspca/m5602/m5602_s5k4aa.c
701 @@ -35,12 +35,25 @@ static
702 const
703 struct dmi_system_id s5k4aa_vflip_dmi_table[] = {
704 {
705 + .ident = "BRUNEINIT",
706 + .matches = {
707 + DMI_MATCH(DMI_SYS_VENDOR, "BRUNENIT"),
708 + DMI_MATCH(DMI_PRODUCT_NAME, "BRUNENIT"),
709 + DMI_MATCH(DMI_BOARD_VERSION, "00030D0000000001")
710 + }
711 + }, {
712 .ident = "Fujitsu-Siemens Amilo Xa 2528",
713 .matches = {
714 DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU SIEMENS"),
715 DMI_MATCH(DMI_PRODUCT_NAME, "AMILO Xa 2528")
716 }
717 }, {
718 + .ident = "Fujitsu-Siemens Amilo Xi 2528",
719 + .matches = {
720 + DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU SIEMENS"),
721 + DMI_MATCH(DMI_PRODUCT_NAME, "AMILO Xi 2528")
722 + }
723 + }, {
724 .ident = "Fujitsu-Siemens Amilo Xi 2550",
725 .matches = {
726 DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU SIEMENS"),
727 @@ -51,6 +64,13 @@ static
728 .matches = {
729 DMI_MATCH(DMI_SYS_VENDOR, "Micro-Star International"),
730 DMI_MATCH(DMI_PRODUCT_NAME, "GX700"),
731 + DMI_MATCH(DMI_BIOS_DATE, "12/02/2008")
732 + }
733 + }, {
734 + .ident = "MSI GX700",
735 + .matches = {
736 + DMI_MATCH(DMI_SYS_VENDOR, "Micro-Star International"),
737 + DMI_MATCH(DMI_PRODUCT_NAME, "GX700"),
738 DMI_MATCH(DMI_BIOS_DATE, "07/26/2007")
739 }
740 }, {
741 diff --git a/drivers/media/video/gspca/sonixj.c b/drivers/media/video/gspca/sonixj.c
742 index d6332ab..33f4d0a 100644
743 --- a/drivers/media/video/gspca/sonixj.c
744 +++ b/drivers/media/video/gspca/sonixj.c
745 @@ -727,7 +727,7 @@ static const u8 ov7660_sensor_init[][8] = {
746 {0xa1, 0x21, 0x12, 0x05, 0x00, 0x00, 0x00, 0x10},
747 /* Outformat = rawRGB */
748 {0xa1, 0x21, 0x13, 0xb8, 0x00, 0x00, 0x00, 0x10}, /* init COM8 */
749 - {0xd1, 0x21, 0x00, 0x01, 0x74, 0x74, 0x00, 0x10},
750 + {0xd1, 0x21, 0x00, 0x01, 0x74, 0x92, 0x00, 0x10},
751 /* GAIN BLUE RED VREF */
752 {0xd1, 0x21, 0x04, 0x00, 0x7d, 0x62, 0x00, 0x10},
753 /* COM 1 BAVE GEAVE AECHH */
754 @@ -783,7 +783,7 @@ static const u8 ov7660_sensor_init[][8] = {
755 {0xc1, 0x21, 0x88, 0xaf, 0xc7, 0xdf, 0x00, 0x10}, /* gamma curve */
756 {0xc1, 0x21, 0x8b, 0x99, 0x99, 0xcf, 0x00, 0x10}, /* reserved */
757 {0xb1, 0x21, 0x92, 0x00, 0x00, 0x00, 0x00, 0x10}, /* DM_LNL/H */
758 - {0xb1, 0x21, 0xa1, 0x00, 0x00, 0x00, 0x00, 0x10},
759 + {0xa1, 0x21, 0xa1, 0x00, 0x00, 0x00, 0x00, 0x10},
760 /****** (some exchanges in the win trace) ******/
761 {0xa1, 0x21, 0x1e, 0x01, 0x00, 0x00, 0x00, 0x10}, /* MVFP */
762 /* bits[3..0]reserved */
763 @@ -1145,17 +1145,12 @@ static int configure_gpio(struct gspca_dev *gspca_dev,
764 reg_w1(gspca_dev, 0x01, 0x42);
765 break;
766 case SENSOR_OV7660:
767 - reg_w1(gspca_dev, 0x01, 0x61);
768 - reg_w1(gspca_dev, 0x17, 0x20);
769 - reg_w1(gspca_dev, 0x01, 0x60);
770 - reg_w1(gspca_dev, 0x01, 0x40);
771 - break;
772 case SENSOR_SP80708:
773 reg_w1(gspca_dev, 0x01, 0x63);
774 reg_w1(gspca_dev, 0x17, 0x20);
775 reg_w1(gspca_dev, 0x01, 0x62);
776 reg_w1(gspca_dev, 0x01, 0x42);
777 - mdelay(100);
778 + msleep(100);
779 reg_w1(gspca_dev, 0x02, 0x62);
780 break;
781 /* case SENSOR_HV7131R: */
782 @@ -1624,6 +1619,8 @@ static void setvflip(struct sd *sd)
783
784 static void setinfrared(struct sd *sd)
785 {
786 + if (sd->gspca_dev.ctrl_dis & (1 << INFRARED_IDX))
787 + return;
788 /*fixme: different sequence for StarCam Clip and StarCam 370i */
789 /* Clip */
790 i2c_w1(&sd->gspca_dev, 0x02, /* gpio */
791 @@ -1637,16 +1634,19 @@ static void setfreq(struct gspca_dev *gspca_dev)
792 if (gspca_dev->ctrl_dis & (1 << FREQ_IDX))
793 return;
794 if (sd->sensor == SENSOR_OV7660) {
795 + u8 com8;
796 +
797 + com8 = 0xdf; /* auto gain/wb/expo */
798 switch (sd->freq) {
799 case 0: /* Banding filter disabled */
800 - i2c_w1(gspca_dev, 0x13, 0xdf);
801 + i2c_w1(gspca_dev, 0x13, com8 | 0x20);
802 break;
803 case 1: /* 50 hz */
804 - i2c_w1(gspca_dev, 0x13, 0xff);
805 + i2c_w1(gspca_dev, 0x13, com8);
806 i2c_w1(gspca_dev, 0x3b, 0x0a);
807 break;
808 case 2: /* 60 hz */
809 - i2c_w1(gspca_dev, 0x13, 0xff);
810 + i2c_w1(gspca_dev, 0x13, com8);
811 i2c_w1(gspca_dev, 0x3b, 0x02);
812 break;
813 }
814 @@ -1796,12 +1796,6 @@ static int sd_start(struct gspca_dev *gspca_dev)
815 reg_w1(gspca_dev, 0x99, 0x60);
816 break;
817 case SENSOR_OV7660:
818 - reg_w1(gspca_dev, 0x9a, 0x05);
819 - if (sd->bridge == BRIDGE_SN9C105)
820 - reg_w1(gspca_dev, 0x99, 0xff);
821 - else
822 - reg_w1(gspca_dev, 0x99, 0x5b);
823 - break;
824 case SENSOR_SP80708:
825 reg_w1(gspca_dev, 0x9a, 0x05);
826 reg_w1(gspca_dev, 0x99, 0x59);
827 @@ -2325,18 +2319,19 @@ static const __devinitdata struct usb_device_id device_table[] = {
828 {USB_DEVICE(0x0c45, 0x607c), BSI(SN9C102P, HV7131R, 0x11)},
829 /* {USB_DEVICE(0x0c45, 0x607e), BSI(SN9C102P, OV7630, 0x??)}, */
830 {USB_DEVICE(0x0c45, 0x60c0), BSI(SN9C105, MI0360, 0x5d)},
831 -/* {USB_DEVICE(0x0c45, 0x60c8), BSI(SN9C105, OM6801, 0x??)}, */
832 +/* {USB_DEVICE(0x0c45, 0x60c8), BSI(SN9C105, OM6802, 0x??)}, */
833 /* {USB_DEVICE(0x0c45, 0x60cc), BSI(SN9C105, HV7131GP, 0x??)}, */
834 {USB_DEVICE(0x0c45, 0x60ec), BSI(SN9C105, MO4000, 0x21)},
835 /* {USB_DEVICE(0x0c45, 0x60ef), BSI(SN9C105, ICM105C, 0x??)}, */
836 /* {USB_DEVICE(0x0c45, 0x60fa), BSI(SN9C105, OV7648, 0x??)}, */
837 {USB_DEVICE(0x0c45, 0x60fb), BSI(SN9C105, OV7660, 0x21)},
838 - {USB_DEVICE(0x0c45, 0x60fc), BSI(SN9C105, HV7131R, 0x11)},
839 #if !defined CONFIG_USB_SN9C102 && !defined CONFIG_USB_SN9C102_MODULE
840 + {USB_DEVICE(0x0c45, 0x60fc), BSI(SN9C105, HV7131R, 0x11)},
841 {USB_DEVICE(0x0c45, 0x60fe), BSI(SN9C105, OV7630, 0x21)},
842 #endif
843 {USB_DEVICE(0x0c45, 0x6100), BSI(SN9C120, MI0360, 0x5d)}, /*sn9c128*/
844 -/* {USB_DEVICE(0x0c45, 0x6108), BSI(SN9C120, OM6801, 0x??)}, */
845 +/* {USB_DEVICE(0x0c45, 0x6102), BSI(SN9C120, PO2030N, ??)}, */
846 +/* {USB_DEVICE(0x0c45, 0x6108), BSI(SN9C120, OM6802, 0x21)}, */
847 {USB_DEVICE(0x0c45, 0x610a), BSI(SN9C120, OV7648, 0x21)}, /*sn9c128*/
848 {USB_DEVICE(0x0c45, 0x610b), BSI(SN9C120, OV7660, 0x21)}, /*sn9c128*/
849 {USB_DEVICE(0x0c45, 0x610c), BSI(SN9C120, HV7131R, 0x11)}, /*sn9c128*/
850 @@ -2352,6 +2347,7 @@ static const __devinitdata struct usb_device_id device_table[] = {
851 #if !defined CONFIG_USB_SN9C102 && !defined CONFIG_USB_SN9C102_MODULE
852 {USB_DEVICE(0x0c45, 0x6130), BSI(SN9C120, MI0360, 0x5d)},
853 #endif
854 +/* {USB_DEVICE(0x0c45, 0x6132), BSI(SN9C120, OV7670, 0x21)}, */
855 {USB_DEVICE(0x0c45, 0x6138), BSI(SN9C120, MO4000, 0x21)},
856 {USB_DEVICE(0x0c45, 0x613a), BSI(SN9C120, OV7648, 0x21)},
857 #if !defined CONFIG_USB_SN9C102 && !defined CONFIG_USB_SN9C102_MODULE
858 @@ -2359,7 +2355,9 @@ static const __devinitdata struct usb_device_id device_table[] = {
859 #endif
860 {USB_DEVICE(0x0c45, 0x613c), BSI(SN9C120, HV7131R, 0x11)},
861 {USB_DEVICE(0x0c45, 0x613e), BSI(SN9C120, OV7630, 0x21)},
862 - {USB_DEVICE(0x0c45, 0x6143), BSI(SN9C120, SP80708, 0x18)},
863 +/* {USB_DEVICE(0x0c45, 0x6142), BSI(SN9C120, PO2030N, ??)}, *sn9c120b*/
864 + {USB_DEVICE(0x0c45, 0x6143), BSI(SN9C120, SP80708, 0x18)}, /*sn9c120b*/
865 + {USB_DEVICE(0x0c45, 0x6148), BSI(SN9C120, OM6802, 0x21)}, /*sn9c120b*/
866 {}
867 };
868 MODULE_DEVICE_TABLE(usb, device_table);
869 diff --git a/drivers/media/video/s2255drv.c b/drivers/media/video/s2255drv.c
870 index 9e3262c..2c0bb06 100644
871 --- a/drivers/media/video/s2255drv.c
872 +++ b/drivers/media/video/s2255drv.c
873 @@ -598,11 +598,6 @@ static int s2255_got_frame(struct s2255_dev *dev, int chn, int jpgsize)
874 buf = list_entry(dma_q->active.next,
875 struct s2255_buffer, vb.queue);
876
877 - if (!waitqueue_active(&buf->vb.done)) {
878 - /* no one active */
879 - rc = -1;
880 - goto unlock;
881 - }
882 list_del(&buf->vb.queue);
883 do_gettimeofday(&buf->vb.ts);
884 dprintk(100, "[%p/%d] wakeup\n", buf, buf->vb.i);
885 diff --git a/drivers/media/video/saa7134/saa7134-cards.c b/drivers/media/video/saa7134/saa7134-cards.c
886 index 6eebe3e..52a79b3 100644
887 --- a/drivers/media/video/saa7134/saa7134-cards.c
888 +++ b/drivers/media/video/saa7134/saa7134-cards.c
889 @@ -3373,6 +3373,7 @@ struct saa7134_board saa7134_boards[] = {
890 .tuner_config = 3,
891 .mpeg = SAA7134_MPEG_DVB,
892 .ts_type = SAA7134_MPEG_TS_SERIAL,
893 + .ts_force_val = 1,
894 .gpiomask = 0x0800100, /* GPIO 21 is an INPUT */
895 .inputs = {{
896 .name = name_tv,
897 diff --git a/drivers/media/video/saa7134/saa7134-ts.c b/drivers/media/video/saa7134/saa7134-ts.c
898 index 3fa6522..03488ba 100644
899 --- a/drivers/media/video/saa7134/saa7134-ts.c
900 +++ b/drivers/media/video/saa7134/saa7134-ts.c
901 @@ -262,11 +262,13 @@ int saa7134_ts_start(struct saa7134_dev *dev)
902 switch (saa7134_boards[dev->board].ts_type) {
903 case SAA7134_MPEG_TS_PARALLEL:
904 saa_writeb(SAA7134_TS_SERIAL0, 0x40);
905 - saa_writeb(SAA7134_TS_PARALLEL, 0xec);
906 + saa_writeb(SAA7134_TS_PARALLEL, 0xec |
907 + (saa7134_boards[dev->board].ts_force_val << 4));
908 break;
909 case SAA7134_MPEG_TS_SERIAL:
910 saa_writeb(SAA7134_TS_SERIAL0, 0xd8);
911 - saa_writeb(SAA7134_TS_PARALLEL, 0x6c);
912 + saa_writeb(SAA7134_TS_PARALLEL, 0x6c |
913 + (saa7134_boards[dev->board].ts_force_val << 4));
914 saa_writeb(SAA7134_TS_PARALLEL_SERIAL, 0xbc);
915 saa_writeb(SAA7134_TS_SERIAL1, 0x02);
916 break;
917 diff --git a/drivers/media/video/saa7134/saa7134.h b/drivers/media/video/saa7134/saa7134.h
918 index 4d85f5c..f50734f 100644
919 --- a/drivers/media/video/saa7134/saa7134.h
920 +++ b/drivers/media/video/saa7134/saa7134.h
921 @@ -355,6 +355,7 @@ struct saa7134_board {
922 enum saa7134_mpeg_type mpeg;
923 enum saa7134_mpeg_ts_type ts_type;
924 unsigned int vid_port_opts;
925 + unsigned int ts_force_val:1;
926 };
927
928 #define card_has_radio(dev) (NULL != saa7134_boards[dev->board].radio.name)
929 diff --git a/drivers/media/video/sn9c102/sn9c102_devtable.h b/drivers/media/video/sn9c102/sn9c102_devtable.h
930 index 38a7160..36ee43a 100644
931 --- a/drivers/media/video/sn9c102/sn9c102_devtable.h
932 +++ b/drivers/media/video/sn9c102/sn9c102_devtable.h
933 @@ -123,8 +123,8 @@ static const struct usb_device_id sn9c102_id_table[] = {
934 { SN9C102_USB_DEVICE(0x0c45, 0x613b, BRIDGE_SN9C120), },
935 #if !defined CONFIG_USB_GSPCA && !defined CONFIG_USB_GSPCA_MODULE
936 { SN9C102_USB_DEVICE(0x0c45, 0x613c, BRIDGE_SN9C120), },
937 -#endif
938 { SN9C102_USB_DEVICE(0x0c45, 0x613e, BRIDGE_SN9C120), },
939 +#endif
940 { }
941 };
942
943 diff --git a/drivers/media/video/v4l1-compat.c b/drivers/media/video/v4l1-compat.c
944 index 02f2a6d..ec76693 100644
945 --- a/drivers/media/video/v4l1-compat.c
946 +++ b/drivers/media/video/v4l1-compat.c
947 @@ -565,10 +565,9 @@ static noinline long v4l1_compat_get_input_info(
948 break;
949 }
950 chan->norm = 0;
951 - err = drv(file, VIDIOC_G_STD, &sid);
952 - if (err < 0)
953 - dprintk("VIDIOCGCHAN / VIDIOC_G_STD: %ld\n", err);
954 - if (err == 0) {
955 + /* Note: G_STD might not be present for radio receivers,
956 + * so we should ignore any errors. */
957 + if (drv(file, VIDIOC_G_STD, &sid) == 0) {
958 if (sid & V4L2_STD_PAL)
959 chan->norm = VIDEO_MODE_PAL;
960 if (sid & V4L2_STD_NTSC)
961 @@ -777,10 +776,9 @@ static noinline long v4l1_compat_get_tuner(
962 tun->flags |= VIDEO_TUNER_SECAM;
963 }
964
965 - err = drv(file, VIDIOC_G_STD, &sid);
966 - if (err < 0)
967 - dprintk("VIDIOCGTUNER / VIDIOC_G_STD: %ld\n", err);
968 - if (err == 0) {
969 + /* Note: G_STD might not be present for radio receivers,
970 + * so we should ignore any errors. */
971 + if (drv(file, VIDIOC_G_STD, &sid) == 0) {
972 if (sid & V4L2_STD_PAL)
973 tun->mode = VIDEO_MODE_PAL;
974 if (sid & V4L2_STD_NTSC)
975 diff --git a/drivers/mmc/host/pxamci.c b/drivers/mmc/host/pxamci.c
976 index e55ac79..c8c0a7e 100644
977 --- a/drivers/mmc/host/pxamci.c
978 +++ b/drivers/mmc/host/pxamci.c
979 @@ -694,14 +694,14 @@ static int pxamci_remove(struct platform_device *pdev)
980 if (mmc) {
981 struct pxamci_host *host = mmc_priv(mmc);
982
983 + mmc_remove_host(mmc);
984 +
985 if (host->vcc)
986 regulator_put(host->vcc);
987
988 if (host->pdata && host->pdata->exit)
989 host->pdata->exit(&pdev->dev, mmc);
990
991 - mmc_remove_host(mmc);
992 -
993 pxamci_stop_clock(host);
994 writel(TXFIFO_WR_REQ|RXFIFO_RD_REQ|CLK_IS_OFF|STOP_CMD|
995 END_CMD_RES|PRG_DONE|DATA_TRAN_DONE,
996 diff --git a/drivers/net/acenic.c b/drivers/net/acenic.c
997 index 08419ee..12bfc44 100644
998 --- a/drivers/net/acenic.c
999 +++ b/drivers/net/acenic.c
1000 @@ -1209,7 +1209,8 @@ static int __devinit ace_init(struct net_device *dev)
1001 memset(ap->info, 0, sizeof(struct ace_info));
1002 memset(ap->skb, 0, sizeof(struct ace_skb));
1003
1004 - if (ace_load_firmware(dev))
1005 + ecode = ace_load_firmware(dev);
1006 + if (ecode)
1007 goto init_error;
1008
1009 ap->fw_running = 0;
1010 diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c
1011 index 7029d53..bcd8df9 100644
1012 --- a/drivers/net/bonding/bond_main.c
1013 +++ b/drivers/net/bonding/bond_main.c
1014 @@ -3707,10 +3707,10 @@ static int bond_xmit_hash_policy_l23(struct sk_buff *skb,
1015
1016 if (skb->protocol == htons(ETH_P_IP)) {
1017 return ((ntohl(iph->saddr ^ iph->daddr) & 0xffff) ^
1018 - (data->h_dest[5] ^ bond_dev->dev_addr[5])) % count;
1019 + (data->h_dest[5] ^ data->h_source[5])) % count;
1020 }
1021
1022 - return (data->h_dest[5] ^ bond_dev->dev_addr[5]) % count;
1023 + return (data->h_dest[5] ^ data->h_source[5]) % count;
1024 }
1025
1026 /*
1027 @@ -3737,7 +3737,7 @@ static int bond_xmit_hash_policy_l34(struct sk_buff *skb,
1028
1029 }
1030
1031 - return (data->h_dest[5] ^ bond_dev->dev_addr[5]) % count;
1032 + return (data->h_dest[5] ^ data->h_source[5]) % count;
1033 }
1034
1035 /*
1036 @@ -3748,7 +3748,7 @@ static int bond_xmit_hash_policy_l2(struct sk_buff *skb,
1037 {
1038 struct ethhdr *data = (struct ethhdr *)skb->data;
1039
1040 - return (data->h_dest[5] ^ bond_dev->dev_addr[5]) % count;
1041 + return (data->h_dest[5] ^ data->h_source[5]) % count;
1042 }
1043
1044 /*-------------------------- Device entry points ----------------------------*/
1045 diff --git a/drivers/net/sfc/rx.c b/drivers/net/sfc/rx.c
1046 index 01f9432..98bff5a 100644
1047 --- a/drivers/net/sfc/rx.c
1048 +++ b/drivers/net/sfc/rx.c
1049 @@ -444,7 +444,8 @@ static void efx_rx_packet__check_len(struct efx_rx_queue *rx_queue,
1050 * the appropriate LRO method
1051 */
1052 static void efx_rx_packet_lro(struct efx_channel *channel,
1053 - struct efx_rx_buffer *rx_buf)
1054 + struct efx_rx_buffer *rx_buf,
1055 + bool checksummed)
1056 {
1057 struct napi_struct *napi = &channel->napi_str;
1058
1059 @@ -466,7 +467,8 @@ static void efx_rx_packet_lro(struct efx_channel *channel,
1060 skb->len = rx_buf->len;
1061 skb->data_len = rx_buf->len;
1062 skb->truesize += rx_buf->len;
1063 - skb->ip_summed = CHECKSUM_UNNECESSARY;
1064 + skb->ip_summed =
1065 + checksummed ? CHECKSUM_UNNECESSARY : CHECKSUM_NONE;
1066
1067 napi_gro_frags(napi);
1068
1069 @@ -475,6 +477,7 @@ out:
1070 rx_buf->page = NULL;
1071 } else {
1072 EFX_BUG_ON_PARANOID(!rx_buf->skb);
1073 + EFX_BUG_ON_PARANOID(!checksummed);
1074
1075 napi_gro_receive(napi, rx_buf->skb);
1076 rx_buf->skb = NULL;
1077 @@ -570,7 +573,7 @@ void __efx_rx_packet(struct efx_channel *channel,
1078 }
1079
1080 if (likely(checksummed || rx_buf->page)) {
1081 - efx_rx_packet_lro(channel, rx_buf);
1082 + efx_rx_packet_lro(channel, rx_buf, checksummed);
1083 goto done;
1084 }
1085
1086 diff --git a/drivers/net/sky2.c b/drivers/net/sky2.c
1087 index a606e7f..329f447 100644
1088 --- a/drivers/net/sky2.c
1089 +++ b/drivers/net/sky2.c
1090 @@ -4528,6 +4528,8 @@ static int __devinit sky2_probe(struct pci_dev *pdev,
1091 goto err_out_free_netdev;
1092 }
1093
1094 + netif_carrier_off(dev);
1095 +
1096 netif_napi_add(dev, &hw->napi, sky2_poll, NAPI_WEIGHT);
1097
1098 err = request_irq(pdev->irq, sky2_intr,
1099 diff --git a/drivers/net/usb/hso.c b/drivers/net/usb/hso.c
1100 index f8c6d7e..9e1fc29 100644
1101 --- a/drivers/net/usb/hso.c
1102 +++ b/drivers/net/usb/hso.c
1103 @@ -1362,7 +1362,7 @@ static void hso_serial_close(struct tty_struct *tty, struct file *filp)
1104 /* reset the rts and dtr */
1105 /* do the actual close */
1106 serial->open_count--;
1107 - kref_put(&serial->parent->ref, hso_serial_ref_free);
1108 +
1109 if (serial->open_count <= 0) {
1110 serial->open_count = 0;
1111 spin_lock_irq(&serial->serial_lock);
1112 @@ -1382,6 +1382,8 @@ static void hso_serial_close(struct tty_struct *tty, struct file *filp)
1113 usb_autopm_put_interface(serial->parent->interface);
1114
1115 mutex_unlock(&serial->parent->mutex);
1116 +
1117 + kref_put(&serial->parent->ref, hso_serial_ref_free);
1118 }
1119
1120 /* close the requested serial port */
1121 diff --git a/drivers/net/wireless/ath/ath5k/phy.c b/drivers/net/wireless/ath/ath5k/phy.c
1122 index a876ca8..0981fb4 100644
1123 --- a/drivers/net/wireless/ath/ath5k/phy.c
1124 +++ b/drivers/net/wireless/ath/ath5k/phy.c
1125 @@ -740,13 +740,22 @@ int ath5k_hw_rfregs_init(struct ath5k_hw *ah, struct ieee80211_channel *channel,
1126 AR5K_RF_XPD_GAIN, true);
1127
1128 } else {
1129 - /* TODO: Set high and low gain bits */
1130 - ath5k_hw_rfb_op(ah, rf_regs,
1131 - ee->ee_x_gain[ee_mode],
1132 + u8 *pdg_curve_to_idx = ee->ee_pdc_to_idx[ee_mode];
1133 + if (ee->ee_pd_gains[ee_mode] > 1) {
1134 + ath5k_hw_rfb_op(ah, rf_regs,
1135 + pdg_curve_to_idx[0],
1136 AR5K_RF_PD_GAIN_LO, true);
1137 - ath5k_hw_rfb_op(ah, rf_regs,
1138 - ee->ee_x_gain[ee_mode],
1139 + ath5k_hw_rfb_op(ah, rf_regs,
1140 + pdg_curve_to_idx[1],
1141 AR5K_RF_PD_GAIN_HI, true);
1142 + } else {
1143 + ath5k_hw_rfb_op(ah, rf_regs,
1144 + pdg_curve_to_idx[0],
1145 + AR5K_RF_PD_GAIN_LO, true);
1146 + ath5k_hw_rfb_op(ah, rf_regs,
1147 + pdg_curve_to_idx[0],
1148 + AR5K_RF_PD_GAIN_HI, true);
1149 + }
1150
1151 /* Lower synth voltage on Rev 2 */
1152 ath5k_hw_rfb_op(ah, rf_regs, 2,
1153 @@ -1897,8 +1906,9 @@ ath5k_get_linear_pcdac_min(const u8 *stepL, const u8 *stepR,
1154 s16 min_pwrL, min_pwrR;
1155 s16 pwr_i;
1156
1157 - if (WARN_ON(stepL[0] == stepL[1] || stepR[0] == stepR[1]))
1158 - return 0;
1159 + /* Some vendors write the same pcdac value twice !!! */
1160 + if (stepL[0] == stepL[1] || stepR[0] == stepR[1])
1161 + return max(pwrL[0], pwrR[0]);
1162
1163 if (pwrL[0] == pwrL[1])
1164 min_pwrL = pwrL[0];
1165 diff --git a/drivers/net/wireless/b43/dma.c b/drivers/net/wireless/b43/dma.c
1166 index 7964cc3..32e9513 100644
1167 --- a/drivers/net/wireless/b43/dma.c
1168 +++ b/drivers/net/wireless/b43/dma.c
1169 @@ -1158,8 +1158,9 @@ struct b43_dmaring *parse_cookie(struct b43_wldev *dev, u16 cookie, int *slot)
1170 }
1171
1172 static int dma_tx_fragment(struct b43_dmaring *ring,
1173 - struct sk_buff *skb)
1174 + struct sk_buff **in_skb)
1175 {
1176 + struct sk_buff *skb = *in_skb;
1177 const struct b43_dma_ops *ops = ring->ops;
1178 struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
1179 u8 *header;
1180 @@ -1225,8 +1226,14 @@ static int dma_tx_fragment(struct b43_dmaring *ring,
1181 }
1182
1183 memcpy(skb_put(bounce_skb, skb->len), skb->data, skb->len);
1184 + memcpy(bounce_skb->cb, skb->cb, sizeof(skb->cb));
1185 + bounce_skb->dev = skb->dev;
1186 + skb_set_queue_mapping(bounce_skb, skb_get_queue_mapping(skb));
1187 + info = IEEE80211_SKB_CB(bounce_skb);
1188 +
1189 dev_kfree_skb_any(skb);
1190 skb = bounce_skb;
1191 + *in_skb = bounce_skb;
1192 meta->skb = skb;
1193 meta->dmaaddr = map_descbuffer(ring, skb->data, skb->len, 1);
1194 if (b43_dma_mapping_error(ring, meta->dmaaddr, skb->len, 1)) {
1195 @@ -1334,13 +1341,22 @@ int b43_dma_tx(struct b43_wldev *dev, struct sk_buff *skb)
1196 spin_lock_irqsave(&ring->lock, flags);
1197
1198 B43_WARN_ON(!ring->tx);
1199 - /* Check if the queue was stopped in mac80211,
1200 - * but we got called nevertheless.
1201 - * That would be a mac80211 bug. */
1202 - B43_WARN_ON(ring->stopped);
1203
1204 - if (unlikely(free_slots(ring) < TX_SLOTS_PER_FRAME)) {
1205 - b43warn(dev->wl, "DMA queue overflow\n");
1206 + if (unlikely(ring->stopped)) {
1207 + /* We get here only because of a bug in mac80211.
1208 + * Because of a race, one packet may be queued after
1209 + * the queue is stopped, thus we got called when we shouldn't.
1210 + * For now, just refuse the transmit. */
1211 + if (b43_debug(dev, B43_DBG_DMAVERBOSE))
1212 + b43err(dev->wl, "Packet after queue stopped\n");
1213 + err = -ENOSPC;
1214 + goto out_unlock;
1215 + }
1216 +
1217 + if (unlikely(WARN_ON(free_slots(ring) < TX_SLOTS_PER_FRAME))) {
1218 + /* If we get here, we have a real error with the queue
1219 + * full, but queues not stopped. */
1220 + b43err(dev->wl, "DMA queue overflow\n");
1221 err = -ENOSPC;
1222 goto out_unlock;
1223 }
1224 @@ -1350,7 +1366,11 @@ int b43_dma_tx(struct b43_wldev *dev, struct sk_buff *skb)
1225 * static, so we don't need to store it per frame. */
1226 ring->queue_prio = skb_get_queue_mapping(skb);
1227
1228 - err = dma_tx_fragment(ring, skb);
1229 + /* dma_tx_fragment might reallocate the skb, so invalidate pointers pointing
1230 + * into the skb data or cb now. */
1231 + hdr = NULL;
1232 + info = NULL;
1233 + err = dma_tx_fragment(ring, &skb);
1234 if (unlikely(err == -ENOKEY)) {
1235 /* Drop this packet, as we don't have the encryption key
1236 * anymore and must not transmit it unencrypted. */
1237 diff --git a/drivers/net/wireless/iwlwifi/iwl-1000.c b/drivers/net/wireless/iwlwifi/iwl-1000.c
1238 index d83d430..44baa60 100644
1239 --- a/drivers/net/wireless/iwlwifi/iwl-1000.c
1240 +++ b/drivers/net/wireless/iwlwifi/iwl-1000.c
1241 @@ -71,5 +71,6 @@ struct iwl_cfg iwl1000_bgn_cfg = {
1242 .need_pll_cfg = true,
1243 .max_ll_items = OTP_MAX_LL_ITEMS_1000,
1244 .shadow_ram_support = false,
1245 + .use_rts_for_ht = true, /* use rts/cts protection */
1246 };
1247
1248 diff --git a/drivers/net/wireless/iwlwifi/iwl-6000.c b/drivers/net/wireless/iwlwifi/iwl-6000.c
1249 index e4a405f..ee7b48e 100644
1250 --- a/drivers/net/wireless/iwlwifi/iwl-6000.c
1251 +++ b/drivers/net/wireless/iwlwifi/iwl-6000.c
1252 @@ -109,6 +109,7 @@ struct iwl_cfg iwl6000_2agn_cfg = {
1253 .need_pll_cfg = false,
1254 .max_ll_items = OTP_MAX_LL_ITEMS_6x00,
1255 .shadow_ram_support = true,
1256 + .use_rts_for_ht = true, /* use rts/cts protection */
1257 };
1258
1259 struct iwl_cfg iwl6050_2agn_cfg = {
1260 @@ -127,6 +128,7 @@ struct iwl_cfg iwl6050_2agn_cfg = {
1261 .need_pll_cfg = false,
1262 .max_ll_items = OTP_MAX_LL_ITEMS_6x00,
1263 .shadow_ram_support = true,
1264 + .use_rts_for_ht = true, /* use rts/cts protection */
1265 };
1266
1267 struct iwl_cfg iwl6000_3agn_cfg = {
1268 @@ -145,6 +147,7 @@ struct iwl_cfg iwl6000_3agn_cfg = {
1269 .need_pll_cfg = false,
1270 .max_ll_items = OTP_MAX_LL_ITEMS_6x00,
1271 .shadow_ram_support = true,
1272 + .use_rts_for_ht = true, /* use rts/cts protection */
1273 };
1274
1275 struct iwl_cfg iwl6050_3agn_cfg = {
1276 @@ -163,6 +166,7 @@ struct iwl_cfg iwl6050_3agn_cfg = {
1277 .need_pll_cfg = false,
1278 .max_ll_items = OTP_MAX_LL_ITEMS_6x00,
1279 .shadow_ram_support = true,
1280 + .use_rts_for_ht = true, /* use rts/cts protection */
1281 };
1282
1283 MODULE_FIRMWARE(IWL6000_MODULE_FIRMWARE(IWL6000_UCODE_API_MAX));
1284 diff --git a/drivers/net/wireless/iwlwifi/iwl-agn-rs.c b/drivers/net/wireless/iwlwifi/iwl-agn-rs.c
1285 index ff20e50..f5c108b 100644
1286 --- a/drivers/net/wireless/iwlwifi/iwl-agn-rs.c
1287 +++ b/drivers/net/wireless/iwlwifi/iwl-agn-rs.c
1288 @@ -415,6 +415,15 @@ static void rs_tl_turn_on_agg(struct iwl_priv *priv, u8 tid,
1289 else if (tid == IWL_AGG_ALL_TID)
1290 for (tid = 0; tid < TID_MAX_LOAD_COUNT; tid++)
1291 rs_tl_turn_on_agg_for_tid(priv, lq_data, tid, sta);
1292 + if (priv->cfg->use_rts_for_ht) {
1293 + /*
1294 + * switch to RTS/CTS if it is the prefer protection method
1295 + * for HT traffic
1296 + */
1297 + IWL_DEBUG_HT(priv, "use RTS/CTS protection for HT\n");
1298 + priv->staging_rxon.flags &= ~RXON_FLG_SELF_CTS_EN;
1299 + iwlcore_commit_rxon(priv);
1300 + }
1301 }
1302
1303 static inline int get_num_of_ant_from_rate(u32 rate_n_flags)
1304 diff --git a/drivers/net/wireless/iwlwifi/iwl-agn.c b/drivers/net/wireless/iwlwifi/iwl-agn.c
1305 index 2a577ae..fc33b29 100644
1306 --- a/drivers/net/wireless/iwlwifi/iwl-agn.c
1307 +++ b/drivers/net/wireless/iwlwifi/iwl-agn.c
1308 @@ -115,9 +115,6 @@ int iwl_commit_rxon(struct iwl_priv *priv)
1309
1310 /* always get timestamp with Rx frame */
1311 priv->staging_rxon.flags |= RXON_FLG_TSF2HOST_MSK;
1312 - /* allow CTS-to-self if possible. this is relevant only for
1313 - * 5000, but will not damage 4965 */
1314 - priv->staging_rxon.flags |= RXON_FLG_SELF_CTS_EN;
1315
1316 ret = iwl_check_rxon_cmd(priv);
1317 if (ret) {
1318 @@ -217,6 +214,13 @@ int iwl_commit_rxon(struct iwl_priv *priv)
1319 "Could not send WEP static key.\n");
1320 }
1321
1322 + /*
1323 + * allow CTS-to-self if possible for new association.
1324 + * this is relevant only for 5000 series and up,
1325 + * but will not damage 4965
1326 + */
1327 + priv->staging_rxon.flags |= RXON_FLG_SELF_CTS_EN;
1328 +
1329 /* Apply the new configuration
1330 * RXON assoc doesn't clear the station table in uCode,
1331 */
1332 diff --git a/drivers/net/wireless/iwlwifi/iwl-core.h b/drivers/net/wireless/iwlwifi/iwl-core.h
1333 index 1e51891..4e616ec 100644
1334 --- a/drivers/net/wireless/iwlwifi/iwl-core.h
1335 +++ b/drivers/net/wireless/iwlwifi/iwl-core.h
1336 @@ -209,6 +209,7 @@ struct iwl_mod_params {
1337 * @ucode_api_min: Lowest version of uCode API supported by driver.
1338 * @max_ll_items: max number of OTP blocks
1339 * @shadow_ram_support: shadow support for OTP memory
1340 + * @use_rts_for_ht: use rts/cts protection for HT traffic
1341 *
1342 * We enable the driver to be backward compatible wrt API version. The
1343 * driver specifies which APIs it supports (with @ucode_api_max being the
1344 @@ -247,6 +248,7 @@ struct iwl_cfg {
1345 bool use_isr_legacy;
1346 const u16 max_ll_items;
1347 const bool shadow_ram_support;
1348 + bool use_rts_for_ht;
1349 };
1350
1351 /***************************
1352 diff --git a/drivers/net/wireless/iwlwifi/iwl-tx.c b/drivers/net/wireless/iwlwifi/iwl-tx.c
1353 index 2e89040..c17b8f9 100644
1354 --- a/drivers/net/wireless/iwlwifi/iwl-tx.c
1355 +++ b/drivers/net/wireless/iwlwifi/iwl-tx.c
1356 @@ -1233,8 +1233,16 @@ int iwl_tx_agg_stop(struct iwl_priv *priv , const u8 *ra, u16 tid)
1357 return -ENXIO;
1358 }
1359
1360 + if (priv->stations[sta_id].tid[tid].agg.state ==
1361 + IWL_EMPTYING_HW_QUEUE_ADDBA) {
1362 + IWL_DEBUG_HT(priv, "AGG stop before setup done\n");
1363 + ieee80211_stop_tx_ba_cb_irqsafe(priv->hw, ra, tid);
1364 + priv->stations[sta_id].tid[tid].agg.state = IWL_AGG_OFF;
1365 + return 0;
1366 + }
1367 +
1368 if (priv->stations[sta_id].tid[tid].agg.state != IWL_AGG_ON)
1369 - IWL_WARN(priv, "Stopping AGG while state not IWL_AGG_ON\n");
1370 + IWL_WARN(priv, "Stopping AGG while state not ON or starting\n");
1371
1372 tid_data = &priv->stations[sta_id].tid[tid];
1373 ssn = (tid_data->seq_number & IEEE80211_SCTL_SEQ) >> 4;
1374 diff --git a/drivers/net/wireless/rtl818x/rtl8187_leds.c b/drivers/net/wireless/rtl818x/rtl8187_leds.c
1375 index cf9f899..75648dd 100644
1376 --- a/drivers/net/wireless/rtl818x/rtl8187_leds.c
1377 +++ b/drivers/net/wireless/rtl818x/rtl8187_leds.c
1378 @@ -210,10 +210,10 @@ void rtl8187_leds_exit(struct ieee80211_hw *dev)
1379
1380 /* turn the LED off before exiting */
1381 queue_delayed_work(dev->workqueue, &priv->led_off, 0);
1382 - cancel_delayed_work_sync(&priv->led_off);
1383 - cancel_delayed_work_sync(&priv->led_on);
1384 rtl8187_unregister_led(&priv->led_rx);
1385 rtl8187_unregister_led(&priv->led_tx);
1386 + cancel_delayed_work_sync(&priv->led_off);
1387 + cancel_delayed_work_sync(&priv->led_on);
1388 }
1389 #endif /* def CONFIG_RTL8187_LED */
1390
1391 diff --git a/drivers/pci/pcie/aer/aerdrv.c b/drivers/pci/pcie/aer/aerdrv.c
1392 index 4770f13..e2504be 100644
1393 --- a/drivers/pci/pcie/aer/aerdrv.c
1394 +++ b/drivers/pci/pcie/aer/aerdrv.c
1395 @@ -52,7 +52,7 @@ static struct pci_error_handlers aer_error_handlers = {
1396
1397 static struct pcie_port_service_driver aerdriver = {
1398 .name = "aer",
1399 - .port_type = PCIE_ANY_PORT,
1400 + .port_type = PCIE_RC_PORT,
1401 .service = PCIE_PORT_SERVICE_AER,
1402
1403 .probe = aer_probe,
1404 diff --git a/drivers/platform/x86/acerhdf.c b/drivers/platform/x86/acerhdf.c
1405 index bdfee17..ec13977 100644
1406 --- a/drivers/platform/x86/acerhdf.c
1407 +++ b/drivers/platform/x86/acerhdf.c
1408 @@ -52,7 +52,7 @@
1409 */
1410 #undef START_IN_KERNEL_MODE
1411
1412 -#define DRV_VER "0.5.13"
1413 +#define DRV_VER "0.5.16"
1414
1415 /*
1416 * According to the Atom N270 datasheet,
1417 @@ -61,7 +61,7 @@
1418 * measured by the on-die thermal monitor are within 0 <= Tj <= 90. So,
1419 * assume 89°C is critical temperature.
1420 */
1421 -#define ACERHDF_TEMP_CRIT 89
1422 +#define ACERHDF_TEMP_CRIT 89000
1423 #define ACERHDF_FAN_OFF 0
1424 #define ACERHDF_FAN_AUTO 1
1425
1426 @@ -69,7 +69,7 @@
1427 * No matter what value the user puts into the fanon variable, turn on the fan
1428 * at 80 degree Celsius to prevent hardware damage
1429 */
1430 -#define ACERHDF_MAX_FANON 80
1431 +#define ACERHDF_MAX_FANON 80000
1432
1433 /*
1434 * Maximum interval between two temperature checks is 15 seconds, as the die
1435 @@ -85,11 +85,12 @@ static int kernelmode;
1436 #endif
1437
1438 static unsigned int interval = 10;
1439 -static unsigned int fanon = 63;
1440 -static unsigned int fanoff = 58;
1441 +static unsigned int fanon = 63000;
1442 +static unsigned int fanoff = 58000;
1443 static unsigned int verbose;
1444 static unsigned int fanstate = ACERHDF_FAN_AUTO;
1445 static char force_bios[16];
1446 +static char force_product[16];
1447 static unsigned int prev_interval;
1448 struct thermal_zone_device *thz_dev;
1449 struct thermal_cooling_device *cl_dev;
1450 @@ -107,34 +108,62 @@ module_param(verbose, uint, 0600);
1451 MODULE_PARM_DESC(verbose, "Enable verbose dmesg output");
1452 module_param_string(force_bios, force_bios, 16, 0);
1453 MODULE_PARM_DESC(force_bios, "Force BIOS version and omit BIOS check");
1454 +module_param_string(force_product, force_product, 16, 0);
1455 +MODULE_PARM_DESC(force_product, "Force BIOS product and omit BIOS check");
1456 +
1457 +/*
1458 + * cmd_off: to switch the fan completely off / to check if the fan is off
1459 + * cmd_auto: to set the BIOS in control of the fan. The BIOS regulates then
1460 + * the fan speed depending on the temperature
1461 + */
1462 +struct fancmd {
1463 + u8 cmd_off;
1464 + u8 cmd_auto;
1465 +};
1466
1467 /* BIOS settings */
1468 struct bios_settings_t {
1469 const char *vendor;
1470 + const char *product;
1471 const char *version;
1472 unsigned char fanreg;
1473 unsigned char tempreg;
1474 - unsigned char fancmd[2]; /* fan off and auto commands */
1475 + struct fancmd cmd;
1476 };
1477
1478 /* Register addresses and values for different BIOS versions */
1479 static const struct bios_settings_t bios_tbl[] = {
1480 - {"Acer", "v0.3109", 0x55, 0x58, {0x1f, 0x00} },
1481 - {"Acer", "v0.3114", 0x55, 0x58, {0x1f, 0x00} },
1482 - {"Acer", "v0.3301", 0x55, 0x58, {0xaf, 0x00} },
1483 - {"Acer", "v0.3304", 0x55, 0x58, {0xaf, 0x00} },
1484 - {"Acer", "v0.3305", 0x55, 0x58, {0xaf, 0x00} },
1485 - {"Acer", "v0.3308", 0x55, 0x58, {0x21, 0x00} },
1486 - {"Acer", "v0.3309", 0x55, 0x58, {0x21, 0x00} },
1487 - {"Acer", "v0.3310", 0x55, 0x58, {0x21, 0x00} },
1488 - {"Gateway", "v0.3103", 0x55, 0x58, {0x21, 0x00} },
1489 - {"Packard Bell", "v0.3105", 0x55, 0x58, {0x21, 0x00} },
1490 - {"", "", 0, 0, {0, 0} }
1491 + /* AOA110 */
1492 + {"Acer", "AOA110", "v0.3109", 0x55, 0x58, {0x1f, 0x00} },
1493 + {"Acer", "AOA110", "v0.3114", 0x55, 0x58, {0x1f, 0x00} },
1494 + {"Acer", "AOA110", "v0.3301", 0x55, 0x58, {0xaf, 0x00} },
1495 + {"Acer", "AOA110", "v0.3304", 0x55, 0x58, {0xaf, 0x00} },
1496 + {"Acer", "AOA110", "v0.3305", 0x55, 0x58, {0xaf, 0x00} },
1497 + {"Acer", "AOA110", "v0.3307", 0x55, 0x58, {0xaf, 0x00} },
1498 + {"Acer", "AOA110", "v0.3308", 0x55, 0x58, {0x21, 0x00} },
1499 + {"Acer", "AOA110", "v0.3309", 0x55, 0x58, {0x21, 0x00} },
1500 + {"Acer", "AOA110", "v0.3310", 0x55, 0x58, {0x21, 0x00} },
1501 + /* AOA150 */
1502 + {"Acer", "AOA150", "v0.3114", 0x55, 0x58, {0x20, 0x00} },
1503 + {"Acer", "AOA150", "v0.3301", 0x55, 0x58, {0x20, 0x00} },
1504 + {"Acer", "AOA150", "v0.3304", 0x55, 0x58, {0x20, 0x00} },
1505 + {"Acer", "AOA150", "v0.3305", 0x55, 0x58, {0x20, 0x00} },
1506 + {"Acer", "AOA150", "v0.3307", 0x55, 0x58, {0x20, 0x00} },
1507 + {"Acer", "AOA150", "v0.3308", 0x55, 0x58, {0x20, 0x00} },
1508 + {"Acer", "AOA150", "v0.3309", 0x55, 0x58, {0x20, 0x00} },
1509 + {"Acer", "AOA150", "v0.3310", 0x55, 0x58, {0x20, 0x00} },
1510 + /* special BIOS / other */
1511 + {"Gateway", "AOA110", "v0.3103", 0x55, 0x58, {0x21, 0x00} },
1512 + {"Gateway", "AOA150", "v0.3103", 0x55, 0x58, {0x20, 0x00} },
1513 + {"Packard Bell", "DOA150", "v0.3104", 0x55, 0x58, {0x21, 0x00} },
1514 + {"Packard Bell", "AOA110", "v0.3105", 0x55, 0x58, {0x21, 0x00} },
1515 + {"Packard Bell", "AOA150", "v0.3105", 0x55, 0x58, {0x20, 0x00} },
1516 + /* pewpew-terminator */
1517 + {"", "", "", 0, 0, {0, 0} }
1518 };
1519
1520 static const struct bios_settings_t *bios_cfg __read_mostly;
1521
1522 -
1523 static int acerhdf_get_temp(int *temp)
1524 {
1525 u8 read_temp;
1526 @@ -142,7 +171,7 @@ static int acerhdf_get_temp(int *temp)
1527 if (ec_read(bios_cfg->tempreg, &read_temp))
1528 return -EINVAL;
1529
1530 - *temp = read_temp;
1531 + *temp = read_temp * 1000;
1532
1533 return 0;
1534 }
1535 @@ -150,13 +179,14 @@ static int acerhdf_get_temp(int *temp)
1536 static int acerhdf_get_fanstate(int *state)
1537 {
1538 u8 fan;
1539 - bool tmp;
1540
1541 if (ec_read(bios_cfg->fanreg, &fan))
1542 return -EINVAL;
1543
1544 - tmp = (fan == bios_cfg->fancmd[ACERHDF_FAN_OFF]);
1545 - *state = tmp ? ACERHDF_FAN_OFF : ACERHDF_FAN_AUTO;
1546 + if (fan != bios_cfg->cmd.cmd_off)
1547 + *state = ACERHDF_FAN_AUTO;
1548 + else
1549 + *state = ACERHDF_FAN_OFF;
1550
1551 return 0;
1552 }
1553 @@ -175,7 +205,8 @@ static void acerhdf_change_fanstate(int state)
1554 state = ACERHDF_FAN_AUTO;
1555 }
1556
1557 - cmd = bios_cfg->fancmd[state];
1558 + cmd = (state == ACERHDF_FAN_OFF) ? bios_cfg->cmd.cmd_off
1559 + : bios_cfg->cmd.cmd_auto;
1560 fanstate = state;
1561
1562 ec_write(bios_cfg->fanreg, cmd);
1563 @@ -437,7 +468,7 @@ static int acerhdf_remove(struct platform_device *device)
1564 return 0;
1565 }
1566
1567 -struct platform_driver acerhdf_drv = {
1568 +static struct platform_driver acerhdf_driver = {
1569 .driver = {
1570 .name = "acerhdf",
1571 .owner = THIS_MODULE,
1572 @@ -454,32 +485,40 @@ static int acerhdf_check_hardware(void)
1573 {
1574 char const *vendor, *version, *product;
1575 int i;
1576 + unsigned long prod_len = 0;
1577
1578 /* get BIOS data */
1579 vendor = dmi_get_system_info(DMI_SYS_VENDOR);
1580 version = dmi_get_system_info(DMI_BIOS_VERSION);
1581 product = dmi_get_system_info(DMI_PRODUCT_NAME);
1582
1583 +
1584 pr_info("Acer Aspire One Fan driver, v.%s\n", DRV_VER);
1585
1586 - if (!force_bios[0]) {
1587 - if (strncmp(product, "AO", 2)) {
1588 - pr_err("no Aspire One hardware found\n");
1589 - return -EINVAL;
1590 - }
1591 - } else {
1592 - pr_info("forcing BIOS version: %s\n", version);
1593 + if (force_bios[0]) {
1594 version = force_bios;
1595 + pr_info("forcing BIOS version: %s\n", version);
1596 kernelmode = 0;
1597 }
1598
1599 + if (force_product[0]) {
1600 + product = force_product;
1601 + pr_info("forcing BIOS product: %s\n", product);
1602 + kernelmode = 0;
1603 + }
1604 +
1605 + prod_len = strlen(product);
1606 +
1607 if (verbose)
1608 pr_info("BIOS info: %s %s, product: %s\n",
1609 vendor, version, product);
1610
1611 /* search BIOS version and vendor in BIOS settings table */
1612 for (i = 0; bios_tbl[i].version[0]; i++) {
1613 - if (!strcmp(bios_tbl[i].vendor, vendor) &&
1614 + if (strlen(bios_tbl[i].product) >= prod_len &&
1615 + !strncmp(bios_tbl[i].product, product,
1616 + strlen(bios_tbl[i].product)) &&
1617 + !strcmp(bios_tbl[i].vendor, vendor) &&
1618 !strcmp(bios_tbl[i].version, version)) {
1619 bios_cfg = &bios_tbl[i];
1620 break;
1621 @@ -487,8 +526,8 @@ static int acerhdf_check_hardware(void)
1622 }
1623
1624 if (!bios_cfg) {
1625 - pr_err("unknown (unsupported) BIOS version %s/%s, "
1626 - "please report, aborting!\n", vendor, version);
1627 + pr_err("unknown (unsupported) BIOS version %s/%s/%s, "
1628 + "please report, aborting!\n", vendor, product, version);
1629 return -EINVAL;
1630 }
1631
1632 @@ -509,7 +548,7 @@ static int acerhdf_register_platform(void)
1633 {
1634 int err = 0;
1635
1636 - err = platform_driver_register(&acerhdf_drv);
1637 + err = platform_driver_register(&acerhdf_driver);
1638 if (err)
1639 return err;
1640
1641 @@ -525,7 +564,7 @@ static void acerhdf_unregister_platform(void)
1642 return;
1643
1644 platform_device_del(acerhdf_dev);
1645 - platform_driver_unregister(&acerhdf_drv);
1646 + platform_driver_unregister(&acerhdf_driver);
1647 }
1648
1649 static int acerhdf_register_thermal(void)
1650 diff --git a/drivers/platform/x86/thinkpad_acpi.c b/drivers/platform/x86/thinkpad_acpi.c
1651 index d287283..e5a7eab 100644
1652 --- a/drivers/platform/x86/thinkpad_acpi.c
1653 +++ b/drivers/platform/x86/thinkpad_acpi.c
1654 @@ -5863,7 +5863,7 @@ static int brightness_write(char *buf)
1655 * Doing it this way makes the syscall restartable in case of EINTR
1656 */
1657 rc = brightness_set(level);
1658 - return (rc == -EINTR)? ERESTARTSYS : rc;
1659 + return (rc == -EINTR)? -ERESTARTSYS : rc;
1660 }
1661
1662 static struct ibm_struct brightness_driver_data = {
1663 diff --git a/drivers/pps/kapi.c b/drivers/pps/kapi.c
1664 index 35a0b19..2d414e2 100644
1665 --- a/drivers/pps/kapi.c
1666 +++ b/drivers/pps/kapi.c
1667 @@ -271,6 +271,7 @@ void pps_event(int source, struct pps_ktime *ts, int event, void *data)
1668 {
1669 struct pps_device *pps;
1670 unsigned long flags;
1671 + int captured = 0;
1672
1673 if ((event & (PPS_CAPTUREASSERT | PPS_CAPTURECLEAR)) == 0) {
1674 printk(KERN_ERR "pps: unknown event (%x) for source %d\n",
1675 @@ -293,7 +294,8 @@ void pps_event(int source, struct pps_ktime *ts, int event, void *data)
1676
1677 /* Check the event */
1678 pps->current_mode = pps->params.mode;
1679 - if (event & PPS_CAPTUREASSERT) {
1680 + if ((event & PPS_CAPTUREASSERT) &
1681 + (pps->params.mode & PPS_CAPTUREASSERT)) {
1682 /* We have to add an offset? */
1683 if (pps->params.mode & PPS_OFFSETASSERT)
1684 pps_add_offset(ts, &pps->params.assert_off_tu);
1685 @@ -303,8 +305,11 @@ void pps_event(int source, struct pps_ktime *ts, int event, void *data)
1686 pps->assert_sequence++;
1687 pr_debug("capture assert seq #%u for source %d\n",
1688 pps->assert_sequence, source);
1689 +
1690 + captured = ~0;
1691 }
1692 - if (event & PPS_CAPTURECLEAR) {
1693 + if ((event & PPS_CAPTURECLEAR) &
1694 + (pps->params.mode & PPS_CAPTURECLEAR)) {
1695 /* We have to add an offset? */
1696 if (pps->params.mode & PPS_OFFSETCLEAR)
1697 pps_add_offset(ts, &pps->params.clear_off_tu);
1698 @@ -314,12 +319,17 @@ void pps_event(int source, struct pps_ktime *ts, int event, void *data)
1699 pps->clear_sequence++;
1700 pr_debug("capture clear seq #%u for source %d\n",
1701 pps->clear_sequence, source);
1702 +
1703 + captured = ~0;
1704 }
1705
1706 - pps->go = ~0;
1707 - wake_up_interruptible(&pps->queue);
1708 + /* Wake up iif captured somthing */
1709 + if (captured) {
1710 + pps->go = ~0;
1711 + wake_up_interruptible(&pps->queue);
1712
1713 - kill_fasync(&pps->async_queue, SIGIO, POLL_IN);
1714 + kill_fasync(&pps->async_queue, SIGIO, POLL_IN);
1715 + }
1716
1717 spin_unlock_irqrestore(&pps->lock, flags);
1718
1719 diff --git a/drivers/pps/pps.c b/drivers/pps/pps.c
1720 index fea17e7..ca5183b 100644
1721 --- a/drivers/pps/pps.c
1722 +++ b/drivers/pps/pps.c
1723 @@ -71,9 +71,14 @@ static long pps_cdev_ioctl(struct file *file,
1724 case PPS_GETPARAMS:
1725 pr_debug("PPS_GETPARAMS: source %d\n", pps->id);
1726
1727 - /* Return current parameters */
1728 - err = copy_to_user(uarg, &pps->params,
1729 - sizeof(struct pps_kparams));
1730 + spin_lock_irq(&pps->lock);
1731 +
1732 + /* Get the current parameters */
1733 + params = pps->params;
1734 +
1735 + spin_unlock_irq(&pps->lock);
1736 +
1737 + err = copy_to_user(uarg, &params, sizeof(struct pps_kparams));
1738 if (err)
1739 return -EFAULT;
1740
1741 diff --git a/drivers/rtc/rtc-v3020.c b/drivers/rtc/rtc-v3020.c
1742 index ad16405..423cd5a 100644
1743 --- a/drivers/rtc/rtc-v3020.c
1744 +++ b/drivers/rtc/rtc-v3020.c
1745 @@ -96,7 +96,7 @@ static void v3020_mmio_write_bit(struct v3020 *chip, unsigned char bit)
1746
1747 static unsigned char v3020_mmio_read_bit(struct v3020 *chip)
1748 {
1749 - return readl(chip->ioaddress) & (1 << chip->leftshift);
1750 + return !!(readl(chip->ioaddress) & (1 << chip->leftshift));
1751 }
1752
1753 static struct v3020_chip_ops v3020_mmio_ops = {
1754 diff --git a/drivers/scsi/gdth.c b/drivers/scsi/gdth.c
1755 index 185e6bc..9e8fce0 100644
1756 --- a/drivers/scsi/gdth.c
1757 +++ b/drivers/scsi/gdth.c
1758 @@ -2900,7 +2900,7 @@ static int gdth_read_event(gdth_ha_str *ha, int handle, gdth_evt_str *estr)
1759 eindex = handle;
1760 estr->event_source = 0;
1761
1762 - if (eindex >= MAX_EVENTS) {
1763 + if (eindex < 0 || eindex >= MAX_EVENTS) {
1764 spin_unlock_irqrestore(&ha->smp_lock, flags);
1765 return eindex;
1766 }
1767 diff --git a/drivers/serial/of_serial.c b/drivers/serial/of_serial.c
1768 index 02406ba..cdf172e 100644
1769 --- a/drivers/serial/of_serial.c
1770 +++ b/drivers/serial/of_serial.c
1771 @@ -161,6 +161,7 @@ static int of_platform_serial_remove(struct of_device *ofdev)
1772 static struct of_device_id __devinitdata of_platform_serial_table[] = {
1773 { .type = "serial", .compatible = "ns8250", .data = (void *)PORT_8250, },
1774 { .type = "serial", .compatible = "ns16450", .data = (void *)PORT_16450, },
1775 + { .type = "serial", .compatible = "ns16550a", .data = (void *)PORT_16550A, },
1776 { .type = "serial", .compatible = "ns16550", .data = (void *)PORT_16550, },
1777 { .type = "serial", .compatible = "ns16750", .data = (void *)PORT_16750, },
1778 { .type = "serial", .compatible = "ns16850", .data = (void *)PORT_16850, },
1779 diff --git a/drivers/usb/class/cdc-acm.c b/drivers/usb/class/cdc-acm.c
1780 index e3861b2..b72fa49 100644
1781 --- a/drivers/usb/class/cdc-acm.c
1782 +++ b/drivers/usb/class/cdc-acm.c
1783 @@ -609,9 +609,9 @@ static int acm_tty_open(struct tty_struct *tty, struct file *filp)
1784
1785 acm->throttle = 0;
1786
1787 - tasklet_schedule(&acm->urb_task);
1788 set_bit(ASYNCB_INITIALIZED, &acm->port.flags);
1789 rv = tty_port_block_til_ready(&acm->port, tty, filp);
1790 + tasklet_schedule(&acm->urb_task);
1791 done:
1792 mutex_unlock(&acm->mutex);
1793 err_out:
1794 diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
1795 index 71f86c6..b41989e 100644
1796 --- a/drivers/usb/core/hub.c
1797 +++ b/drivers/usb/core/hub.c
1798 @@ -439,7 +439,7 @@ resubmit:
1799 static inline int
1800 hub_clear_tt_buffer (struct usb_device *hdev, u16 devinfo, u16 tt)
1801 {
1802 - return usb_control_msg(hdev, usb_rcvctrlpipe(hdev, 0),
1803 + return usb_control_msg(hdev, usb_sndctrlpipe(hdev, 0),
1804 HUB_CLEAR_TT_BUFFER, USB_RT_PORT, devinfo,
1805 tt, NULL, 0, 1000);
1806 }
1807 diff --git a/drivers/usb/gadget/amd5536udc.c b/drivers/usb/gadget/amd5536udc.c
1808 index 77352cc..fb09766 100644
1809 --- a/drivers/usb/gadget/amd5536udc.c
1810 +++ b/drivers/usb/gadget/amd5536udc.c
1811 @@ -1213,7 +1213,12 @@ udc_queue(struct usb_ep *usbep, struct usb_request *usbreq, gfp_t gfp)
1812 tmp &= AMD_UNMASK_BIT(ep->num);
1813 writel(tmp, &dev->regs->ep_irqmsk);
1814 }
1815 - }
1816 + } else if (ep->in) {
1817 + /* enable ep irq */
1818 + tmp = readl(&dev->regs->ep_irqmsk);
1819 + tmp &= AMD_UNMASK_BIT(ep->num);
1820 + writel(tmp, &dev->regs->ep_irqmsk);
1821 + }
1822
1823 } else if (ep->dma) {
1824
1825 @@ -2005,18 +2010,17 @@ __acquires(dev->lock)
1826 {
1827 int tmp;
1828
1829 - /* empty queues and init hardware */
1830 - udc_basic_init(dev);
1831 - for (tmp = 0; tmp < UDC_EP_NUM; tmp++) {
1832 - empty_req_queue(&dev->ep[tmp]);
1833 - }
1834 -
1835 if (dev->gadget.speed != USB_SPEED_UNKNOWN) {
1836 spin_unlock(&dev->lock);
1837 driver->disconnect(&dev->gadget);
1838 spin_lock(&dev->lock);
1839 }
1840 - /* init */
1841 +
1842 + /* empty queues and init hardware */
1843 + udc_basic_init(dev);
1844 + for (tmp = 0; tmp < UDC_EP_NUM; tmp++)
1845 + empty_req_queue(&dev->ep[tmp]);
1846 +
1847 udc_setup_endpoints(dev);
1848 }
1849
1850 @@ -2478,6 +2482,13 @@ static irqreturn_t udc_data_in_isr(struct udc *dev, int ep_ix)
1851 }
1852 }
1853
1854 + } else if (!use_dma && ep->in) {
1855 + /* disable interrupt */
1856 + tmp = readl(
1857 + &dev->regs->ep_irqmsk);
1858 + tmp |= AMD_BIT(ep->num);
1859 + writel(tmp,
1860 + &dev->regs->ep_irqmsk);
1861 }
1862 }
1863 /* clear status bits */
1864 @@ -3285,6 +3296,17 @@ static int udc_pci_probe(
1865 goto finished;
1866 }
1867
1868 + spin_lock_init(&dev->lock);
1869 + /* udc csr registers base */
1870 + dev->csr = dev->virt_addr + UDC_CSR_ADDR;
1871 + /* dev registers base */
1872 + dev->regs = dev->virt_addr + UDC_DEVCFG_ADDR;
1873 + /* ep registers base */
1874 + dev->ep_regs = dev->virt_addr + UDC_EPREGS_ADDR;
1875 + /* fifo's base */
1876 + dev->rxfifo = (u32 __iomem *)(dev->virt_addr + UDC_RXFIFO_ADDR);
1877 + dev->txfifo = (u32 __iomem *)(dev->virt_addr + UDC_TXFIFO_ADDR);
1878 +
1879 if (request_irq(pdev->irq, udc_irq, IRQF_SHARED, name, dev) != 0) {
1880 dev_dbg(&dev->pdev->dev, "request_irq(%d) fail\n", pdev->irq);
1881 kfree(dev);
1882 @@ -3337,7 +3359,6 @@ static int udc_probe(struct udc *dev)
1883 udc_pollstall_timer.data = 0;
1884
1885 /* device struct setup */
1886 - spin_lock_init(&dev->lock);
1887 dev->gadget.ops = &udc_ops;
1888
1889 dev_set_name(&dev->gadget.dev, "gadget");
1890 @@ -3346,16 +3367,6 @@ static int udc_probe(struct udc *dev)
1891 dev->gadget.name = name;
1892 dev->gadget.is_dualspeed = 1;
1893
1894 - /* udc csr registers base */
1895 - dev->csr = dev->virt_addr + UDC_CSR_ADDR;
1896 - /* dev registers base */
1897 - dev->regs = dev->virt_addr + UDC_DEVCFG_ADDR;
1898 - /* ep registers base */
1899 - dev->ep_regs = dev->virt_addr + UDC_EPREGS_ADDR;
1900 - /* fifo's base */
1901 - dev->rxfifo = (u32 __iomem *)(dev->virt_addr + UDC_RXFIFO_ADDR);
1902 - dev->txfifo = (u32 __iomem *)(dev->virt_addr + UDC_TXFIFO_ADDR);
1903 -
1904 /* init registers, interrupts, ... */
1905 startup_registers(dev);
1906
1907 diff --git a/drivers/usb/host/ehci-hcd.c b/drivers/usb/host/ehci-hcd.c
1908 index 11c627c..7e4b381 100644
1909 --- a/drivers/usb/host/ehci-hcd.c
1910 +++ b/drivers/usb/host/ehci-hcd.c
1911 @@ -28,6 +28,7 @@
1912 #include <linux/errno.h>
1913 #include <linux/init.h>
1914 #include <linux/timer.h>
1915 +#include <linux/ktime.h>
1916 #include <linux/list.h>
1917 #include <linux/interrupt.h>
1918 #include <linux/reboot.h>
1919 @@ -655,6 +656,7 @@ static int ehci_run (struct usb_hcd *hcd)
1920 ehci_readl(ehci, &ehci->regs->command); /* unblock posted writes */
1921 msleep(5);
1922 up_write(&ehci_cf_port_reset_rwsem);
1923 + ehci->last_periodic_enable = ktime_get_real();
1924
1925 temp = HC_VERSION(ehci_readl(ehci, &ehci->caps->hc_capbase));
1926 ehci_info (ehci,
1927 diff --git a/drivers/usb/host/ehci-pci.c b/drivers/usb/host/ehci-pci.c
1928 index c2f1b7d..c757a70 100644
1929 --- a/drivers/usb/host/ehci-pci.c
1930 +++ b/drivers/usb/host/ehci-pci.c
1931 @@ -72,6 +72,12 @@ static int ehci_pci_setup(struct usb_hcd *hcd)
1932 int retval;
1933
1934 switch (pdev->vendor) {
1935 + case PCI_VENDOR_ID_INTEL:
1936 + if (pdev->device == 0x27cc) {
1937 + ehci->broken_periodic = 1;
1938 + ehci_info(ehci, "using broken periodic workaround\n");
1939 + }
1940 + break;
1941 case PCI_VENDOR_ID_TOSHIBA_2:
1942 /* celleb's companion chip */
1943 if (pdev->device == 0x01b5) {
1944 diff --git a/drivers/usb/host/ehci-q.c b/drivers/usb/host/ehci-q.c
1945 index 7673554..6b6c240 100644
1946 --- a/drivers/usb/host/ehci-q.c
1947 +++ b/drivers/usb/host/ehci-q.c
1948 @@ -475,8 +475,20 @@ halt:
1949 * we must clear the TT buffer (11.17.5).
1950 */
1951 if (unlikely(last_status != -EINPROGRESS &&
1952 - last_status != -EREMOTEIO))
1953 - ehci_clear_tt_buffer(ehci, qh, urb, token);
1954 + last_status != -EREMOTEIO)) {
1955 + /* The TT's in some hubs malfunction when they
1956 + * receive this request following a STALL (they
1957 + * stop sending isochronous packets). Since a
1958 + * STALL can't leave the TT buffer in a busy
1959 + * state (if you believe Figures 11-48 - 11-51
1960 + * in the USB 2.0 spec), we won't clear the TT
1961 + * buffer in this case. Strictly speaking this
1962 + * is a violation of the spec.
1963 + */
1964 + if (last_status != -EPIPE)
1965 + ehci_clear_tt_buffer(ehci, qh, urb,
1966 + token);
1967 + }
1968 }
1969
1970 /* if we're removing something not at the queue head,
1971 diff --git a/drivers/usb/host/ehci-sched.c b/drivers/usb/host/ehci-sched.c
1972 index edd61ee..c340f1f 100644
1973 --- a/drivers/usb/host/ehci-sched.c
1974 +++ b/drivers/usb/host/ehci-sched.c
1975 @@ -456,6 +456,8 @@ static int enable_periodic (struct ehci_hcd *ehci)
1976 /* make sure ehci_work scans these */
1977 ehci->next_uframe = ehci_readl(ehci, &ehci->regs->frame_index)
1978 % (ehci->periodic_size << 3);
1979 + if (unlikely(ehci->broken_periodic))
1980 + ehci->last_periodic_enable = ktime_get_real();
1981 return 0;
1982 }
1983
1984 @@ -467,6 +469,16 @@ static int disable_periodic (struct ehci_hcd *ehci)
1985 if (--ehci->periodic_sched)
1986 return 0;
1987
1988 + if (unlikely(ehci->broken_periodic)) {
1989 + /* delay experimentally determined */
1990 + ktime_t safe = ktime_add_us(ehci->last_periodic_enable, 1000);
1991 + ktime_t now = ktime_get_real();
1992 + s64 delay = ktime_us_delta(safe, now);
1993 +
1994 + if (unlikely(delay > 0))
1995 + udelay(delay);
1996 + }
1997 +
1998 /* did setting PSE not take effect yet?
1999 * takes effect only at frame boundaries...
2000 */
2001 diff --git a/drivers/usb/host/ehci.h b/drivers/usb/host/ehci.h
2002 index 2bfff30..aab3cbc 100644
2003 --- a/drivers/usb/host/ehci.h
2004 +++ b/drivers/usb/host/ehci.h
2005 @@ -118,6 +118,7 @@ struct ehci_hcd { /* one per controller */
2006 unsigned stamp;
2007 unsigned random_frame;
2008 unsigned long next_statechange;
2009 + ktime_t last_periodic_enable;
2010 u32 command;
2011
2012 /* SILICON QUIRKS */
2013 @@ -126,6 +127,7 @@ struct ehci_hcd { /* one per controller */
2014 unsigned big_endian_mmio:1;
2015 unsigned big_endian_desc:1;
2016 unsigned has_amcc_usb23:1;
2017 + unsigned broken_periodic:1;
2018
2019 /* required for usb32 quirk */
2020 #define OHCI_CTRL_HCFS (3 << 6)
2021 diff --git a/drivers/usb/host/ohci-hcd.c b/drivers/usb/host/ohci-hcd.c
2022 index 5815168..1ed2a16 100644
2023 --- a/drivers/usb/host/ohci-hcd.c
2024 +++ b/drivers/usb/host/ohci-hcd.c
2025 @@ -88,6 +88,7 @@ static int ohci_restart (struct ohci_hcd *ohci);
2026 #ifdef CONFIG_PCI
2027 static void quirk_amd_pll(int state);
2028 static void amd_iso_dev_put(void);
2029 +static void sb800_prefetch(struct ohci_hcd *ohci, int on);
2030 #else
2031 static inline void quirk_amd_pll(int state)
2032 {
2033 @@ -97,6 +98,10 @@ static inline void amd_iso_dev_put(void)
2034 {
2035 return;
2036 }
2037 +static inline void sb800_prefetch(struct ohci_hcd *ohci, int on)
2038 +{
2039 + return;
2040 +}
2041 #endif
2042
2043
2044 diff --git a/drivers/usb/host/ohci-pci.c b/drivers/usb/host/ohci-pci.c
2045 index d2ba04d..b8a1148 100644
2046 --- a/drivers/usb/host/ohci-pci.c
2047 +++ b/drivers/usb/host/ohci-pci.c
2048 @@ -177,6 +177,13 @@ static int ohci_quirk_amd700(struct usb_hcd *hcd)
2049 return 0;
2050
2051 pci_read_config_byte(amd_smbus_dev, PCI_REVISION_ID, &rev);
2052 +
2053 + /* SB800 needs pre-fetch fix */
2054 + if ((rev >= 0x40) && (rev <= 0x4f)) {
2055 + ohci->flags |= OHCI_QUIRK_AMD_PREFETCH;
2056 + ohci_dbg(ohci, "enabled AMD prefetch quirk\n");
2057 + }
2058 +
2059 if ((rev > 0x3b) || (rev < 0x30)) {
2060 pci_dev_put(amd_smbus_dev);
2061 amd_smbus_dev = NULL;
2062 @@ -262,6 +269,19 @@ static void amd_iso_dev_put(void)
2063
2064 }
2065
2066 +static void sb800_prefetch(struct ohci_hcd *ohci, int on)
2067 +{
2068 + struct pci_dev *pdev;
2069 + u16 misc;
2070 +
2071 + pdev = to_pci_dev(ohci_to_hcd(ohci)->self.controller);
2072 + pci_read_config_word(pdev, 0x50, &misc);
2073 + if (on == 0)
2074 + pci_write_config_word(pdev, 0x50, misc & 0xfcff);
2075 + else
2076 + pci_write_config_word(pdev, 0x50, misc | 0x0300);
2077 +}
2078 +
2079 /* List of quirks for OHCI */
2080 static const struct pci_device_id ohci_pci_quirks[] = {
2081 {
2082 diff --git a/drivers/usb/host/ohci-q.c b/drivers/usb/host/ohci-q.c
2083 index c2d80f8..2c7409b 100644
2084 --- a/drivers/usb/host/ohci-q.c
2085 +++ b/drivers/usb/host/ohci-q.c
2086 @@ -49,9 +49,12 @@ __acquires(ohci->lock)
2087 switch (usb_pipetype (urb->pipe)) {
2088 case PIPE_ISOCHRONOUS:
2089 ohci_to_hcd(ohci)->self.bandwidth_isoc_reqs--;
2090 - if (ohci_to_hcd(ohci)->self.bandwidth_isoc_reqs == 0
2091 - && quirk_amdiso(ohci))
2092 - quirk_amd_pll(1);
2093 + if (ohci_to_hcd(ohci)->self.bandwidth_isoc_reqs == 0) {
2094 + if (quirk_amdiso(ohci))
2095 + quirk_amd_pll(1);
2096 + if (quirk_amdprefetch(ohci))
2097 + sb800_prefetch(ohci, 0);
2098 + }
2099 break;
2100 case PIPE_INTERRUPT:
2101 ohci_to_hcd(ohci)->self.bandwidth_int_reqs--;
2102 @@ -680,9 +683,12 @@ static void td_submit_urb (
2103 data + urb->iso_frame_desc [cnt].offset,
2104 urb->iso_frame_desc [cnt].length, urb, cnt);
2105 }
2106 - if (ohci_to_hcd(ohci)->self.bandwidth_isoc_reqs == 0
2107 - && quirk_amdiso(ohci))
2108 - quirk_amd_pll(0);
2109 + if (ohci_to_hcd(ohci)->self.bandwidth_isoc_reqs == 0) {
2110 + if (quirk_amdiso(ohci))
2111 + quirk_amd_pll(0);
2112 + if (quirk_amdprefetch(ohci))
2113 + sb800_prefetch(ohci, 1);
2114 + }
2115 periodic = ohci_to_hcd(ohci)->self.bandwidth_isoc_reqs++ == 0
2116 && ohci_to_hcd(ohci)->self.bandwidth_int_reqs == 0;
2117 break;
2118 diff --git a/drivers/usb/host/ohci.h b/drivers/usb/host/ohci.h
2119 index 222011f..5bf15fe 100644
2120 --- a/drivers/usb/host/ohci.h
2121 +++ b/drivers/usb/host/ohci.h
2122 @@ -402,6 +402,7 @@ struct ohci_hcd {
2123 #define OHCI_QUIRK_FRAME_NO 0x80 /* no big endian frame_no shift */
2124 #define OHCI_QUIRK_HUB_POWER 0x100 /* distrust firmware power/oc setup */
2125 #define OHCI_QUIRK_AMD_ISO 0x200 /* ISO transfers*/
2126 +#define OHCI_QUIRK_AMD_PREFETCH 0x400 /* pre-fetch for ISO transfer */
2127 // there are also chip quirks/bugs in init logic
2128
2129 struct work_struct nec_work; /* Worker for NEC quirk */
2130 @@ -433,6 +434,10 @@ static inline int quirk_amdiso(struct ohci_hcd *ohci)
2131 {
2132 return ohci->flags & OHCI_QUIRK_AMD_ISO;
2133 }
2134 +static inline int quirk_amdprefetch(struct ohci_hcd *ohci)
2135 +{
2136 + return ohci->flags & OHCI_QUIRK_AMD_PREFETCH;
2137 +}
2138 #else
2139 static inline int quirk_nec(struct ohci_hcd *ohci)
2140 {
2141 @@ -446,6 +451,10 @@ static inline int quirk_amdiso(struct ohci_hcd *ohci)
2142 {
2143 return 0;
2144 }
2145 +static inline int quirk_amdprefetch(struct ohci_hcd *ohci)
2146 +{
2147 + return 0;
2148 +}
2149 #endif
2150
2151 /* convert between an hcd pointer and the corresponding ohci_hcd */
2152 diff --git a/drivers/usb/host/xhci-mem.c b/drivers/usb/host/xhci-mem.c
2153 index 55920b3..2114648 100644
2154 --- a/drivers/usb/host/xhci-mem.c
2155 +++ b/drivers/usb/host/xhci-mem.c
2156 @@ -756,9 +756,11 @@ void xhci_mem_cleanup(struct xhci_hcd *xhci)
2157 int i;
2158
2159 /* Free the Event Ring Segment Table and the actual Event Ring */
2160 - xhci_writel(xhci, 0, &xhci->ir_set->erst_size);
2161 - xhci_write_64(xhci, 0, &xhci->ir_set->erst_base);
2162 - xhci_write_64(xhci, 0, &xhci->ir_set->erst_dequeue);
2163 + if (xhci->ir_set) {
2164 + xhci_writel(xhci, 0, &xhci->ir_set->erst_size);
2165 + xhci_write_64(xhci, 0, &xhci->ir_set->erst_base);
2166 + xhci_write_64(xhci, 0, &xhci->ir_set->erst_dequeue);
2167 + }
2168 size = sizeof(struct xhci_erst_entry)*(xhci->erst.num_entries);
2169 if (xhci->erst.entries)
2170 pci_free_consistent(pdev, size,
2171 @@ -795,9 +797,9 @@ void xhci_mem_cleanup(struct xhci_hcd *xhci)
2172 xhci->dcbaa, xhci->dcbaa->dma);
2173 xhci->dcbaa = NULL;
2174
2175 + scratchpad_free(xhci);
2176 xhci->page_size = 0;
2177 xhci->page_shift = 0;
2178 - scratchpad_free(xhci);
2179 }
2180
2181 int xhci_mem_init(struct xhci_hcd *xhci, gfp_t flags)
2182 diff --git a/drivers/usb/host/xhci-ring.c b/drivers/usb/host/xhci-ring.c
2183 index ff5e6bc..9874d9a 100644
2184 --- a/drivers/usb/host/xhci-ring.c
2185 +++ b/drivers/usb/host/xhci-ring.c
2186 @@ -822,9 +822,11 @@ static struct xhci_segment *trb_in_td(
2187 cur_seg = start_seg;
2188
2189 do {
2190 + if (start_dma == 0)
2191 + return 0;
2192 /* We may get an event for a Link TRB in the middle of a TD */
2193 end_seg_dma = xhci_trb_virt_to_dma(cur_seg,
2194 - &start_seg->trbs[TRBS_PER_SEGMENT - 1]);
2195 + &cur_seg->trbs[TRBS_PER_SEGMENT - 1]);
2196 /* If the end TRB isn't in this segment, this is set to 0 */
2197 end_trb_dma = xhci_trb_virt_to_dma(cur_seg, end_trb);
2198
2199 @@ -851,8 +853,9 @@ static struct xhci_segment *trb_in_td(
2200 }
2201 cur_seg = cur_seg->next;
2202 start_dma = xhci_trb_virt_to_dma(cur_seg, &cur_seg->trbs[0]);
2203 - } while (1);
2204 + } while (cur_seg != start_seg);
2205
2206 + return 0;
2207 }
2208
2209 /*
2210 diff --git a/drivers/usb/mon/mon_bin.c b/drivers/usb/mon/mon_bin.c
2211 index 0f7a30b..fb1dd27 100644
2212 --- a/drivers/usb/mon/mon_bin.c
2213 +++ b/drivers/usb/mon/mon_bin.c
2214 @@ -350,12 +350,12 @@ static unsigned int mon_buff_area_alloc_contiguous(struct mon_reader_bin *rp,
2215
2216 /*
2217 * Return a few (kilo-)bytes to the head of the buffer.
2218 - * This is used if a DMA fetch fails.
2219 + * This is used if a data fetch fails.
2220 */
2221 static void mon_buff_area_shrink(struct mon_reader_bin *rp, unsigned int size)
2222 {
2223
2224 - size = (size + PKT_ALIGN-1) & ~(PKT_ALIGN-1);
2225 + /* size &= ~(PKT_ALIGN-1); -- we're called with aligned size */
2226 rp->b_cnt -= size;
2227 if (rp->b_in < size)
2228 rp->b_in += rp->b_size;
2229 @@ -442,6 +442,7 @@ static void mon_bin_event(struct mon_reader_bin *rp, struct urb *urb,
2230 unsigned int urb_length;
2231 unsigned int offset;
2232 unsigned int length;
2233 + unsigned int delta;
2234 unsigned int ndesc, lendesc;
2235 unsigned char dir;
2236 struct mon_bin_hdr *ep;
2237 @@ -546,8 +547,10 @@ static void mon_bin_event(struct mon_reader_bin *rp, struct urb *urb,
2238 if (length != 0) {
2239 ep->flag_data = mon_bin_get_data(rp, offset, urb, length);
2240 if (ep->flag_data != 0) { /* Yes, it's 0x00, not '0' */
2241 - ep->len_cap = 0;
2242 - mon_buff_area_shrink(rp, length);
2243 + delta = (ep->len_cap + PKT_ALIGN-1) & ~(PKT_ALIGN-1);
2244 + ep->len_cap -= length;
2245 + delta -= (ep->len_cap + PKT_ALIGN-1) & ~(PKT_ALIGN-1);
2246 + mon_buff_area_shrink(rp, delta);
2247 }
2248 } else {
2249 ep->flag_data = data_tag;
2250 diff --git a/drivers/usb/musb/musb_gadget.c b/drivers/usb/musb/musb_gadget.c
2251 index 8b3c4e2..74073f9 100644
2252 --- a/drivers/usb/musb/musb_gadget.c
2253 +++ b/drivers/usb/musb/musb_gadget.c
2254 @@ -4,6 +4,7 @@
2255 * Copyright 2005 Mentor Graphics Corporation
2256 * Copyright (C) 2005-2006 by Texas Instruments
2257 * Copyright (C) 2006-2007 Nokia Corporation
2258 + * Copyright (C) 2009 MontaVista Software, Inc. <source@mvista.com>
2259 *
2260 * This program is free software; you can redistribute it and/or
2261 * modify it under the terms of the GNU General Public License
2262 @@ -436,14 +437,6 @@ void musb_g_tx(struct musb *musb, u8 epnum)
2263 csr |= MUSB_TXCSR_P_WZC_BITS;
2264 csr &= ~MUSB_TXCSR_P_SENTSTALL;
2265 musb_writew(epio, MUSB_TXCSR, csr);
2266 - if (dma_channel_status(dma) == MUSB_DMA_STATUS_BUSY) {
2267 - dma->status = MUSB_DMA_STATUS_CORE_ABORT;
2268 - musb->dma_controller->channel_abort(dma);
2269 - }
2270 -
2271 - if (request)
2272 - musb_g_giveback(musb_ep, request, -EPIPE);
2273 -
2274 break;
2275 }
2276
2277 @@ -582,15 +575,25 @@ void musb_g_tx(struct musb *musb, u8 epnum)
2278 */
2279 static void rxstate(struct musb *musb, struct musb_request *req)
2280 {
2281 - u16 csr = 0;
2282 const u8 epnum = req->epnum;
2283 struct usb_request *request = &req->request;
2284 struct musb_ep *musb_ep = &musb->endpoints[epnum].ep_out;
2285 void __iomem *epio = musb->endpoints[epnum].regs;
2286 unsigned fifo_count = 0;
2287 u16 len = musb_ep->packet_sz;
2288 + u16 csr = musb_readw(epio, MUSB_RXCSR);
2289
2290 - csr = musb_readw(epio, MUSB_RXCSR);
2291 + /* We shouldn't get here while DMA is active, but we do... */
2292 + if (dma_channel_status(musb_ep->dma) == MUSB_DMA_STATUS_BUSY) {
2293 + DBG(4, "DMA pending...\n");
2294 + return;
2295 + }
2296 +
2297 + if (csr & MUSB_RXCSR_P_SENDSTALL) {
2298 + DBG(5, "%s stalling, RXCSR %04x\n",
2299 + musb_ep->end_point.name, csr);
2300 + return;
2301 + }
2302
2303 if (is_cppi_enabled() && musb_ep->dma) {
2304 struct dma_controller *c = musb->dma_controller;
2305 @@ -761,19 +764,10 @@ void musb_g_rx(struct musb *musb, u8 epnum)
2306 csr, dma ? " (dma)" : "", request);
2307
2308 if (csr & MUSB_RXCSR_P_SENTSTALL) {
2309 - if (dma_channel_status(dma) == MUSB_DMA_STATUS_BUSY) {
2310 - dma->status = MUSB_DMA_STATUS_CORE_ABORT;
2311 - (void) musb->dma_controller->channel_abort(dma);
2312 - request->actual += musb_ep->dma->actual_len;
2313 - }
2314 -
2315 csr |= MUSB_RXCSR_P_WZC_BITS;
2316 csr &= ~MUSB_RXCSR_P_SENTSTALL;
2317 musb_writew(epio, MUSB_RXCSR, csr);
2318 -
2319 - if (request)
2320 - musb_g_giveback(musb_ep, request, -EPIPE);
2321 - goto done;
2322 + return;
2323 }
2324
2325 if (csr & MUSB_RXCSR_P_OVERRUN) {
2326 @@ -795,7 +789,7 @@ void musb_g_rx(struct musb *musb, u8 epnum)
2327 DBG((csr & MUSB_RXCSR_DMAENAB) ? 4 : 1,
2328 "%s busy, csr %04x\n",
2329 musb_ep->end_point.name, csr);
2330 - goto done;
2331 + return;
2332 }
2333
2334 if (dma && (csr & MUSB_RXCSR_DMAENAB)) {
2335 @@ -826,22 +820,15 @@ void musb_g_rx(struct musb *musb, u8 epnum)
2336 if ((request->actual < request->length)
2337 && (musb_ep->dma->actual_len
2338 == musb_ep->packet_sz))
2339 - goto done;
2340 + return;
2341 #endif
2342 musb_g_giveback(musb_ep, request, 0);
2343
2344 request = next_request(musb_ep);
2345 if (!request)
2346 - goto done;
2347 -
2348 - /* don't start more i/o till the stall clears */
2349 - musb_ep_select(mbase, epnum);
2350 - csr = musb_readw(epio, MUSB_RXCSR);
2351 - if (csr & MUSB_RXCSR_P_SENDSTALL)
2352 - goto done;
2353 + return;
2354 }
2355
2356 -
2357 /* analyze request if the ep is hot */
2358 if (request)
2359 rxstate(musb, to_musb_request(request));
2360 @@ -849,8 +836,6 @@ void musb_g_rx(struct musb *musb, u8 epnum)
2361 DBG(3, "packet waiting for %s%s request\n",
2362 musb_ep->desc ? "" : "inactive ",
2363 musb_ep->end_point.name);
2364 -
2365 -done:
2366 return;
2367 }
2368
2369 @@ -1244,7 +1229,7 @@ int musb_gadget_set_halt(struct usb_ep *ep, int value)
2370 void __iomem *mbase;
2371 unsigned long flags;
2372 u16 csr;
2373 - struct musb_request *request = NULL;
2374 + struct musb_request *request;
2375 int status = 0;
2376
2377 if (!ep)
2378 @@ -1260,24 +1245,29 @@ int musb_gadget_set_halt(struct usb_ep *ep, int value)
2379
2380 musb_ep_select(mbase, epnum);
2381
2382 - /* cannot portably stall with non-empty FIFO */
2383 request = to_musb_request(next_request(musb_ep));
2384 - if (value && musb_ep->is_in) {
2385 - csr = musb_readw(epio, MUSB_TXCSR);
2386 - if (csr & MUSB_TXCSR_FIFONOTEMPTY) {
2387 - DBG(3, "%s fifo busy, cannot halt\n", ep->name);
2388 - spin_unlock_irqrestore(&musb->lock, flags);
2389 - return -EAGAIN;
2390 + if (value) {
2391 + if (request) {
2392 + DBG(3, "request in progress, cannot halt %s\n",
2393 + ep->name);
2394 + status = -EAGAIN;
2395 + goto done;
2396 + }
2397 + /* Cannot portably stall with non-empty FIFO */
2398 + if (musb_ep->is_in) {
2399 + csr = musb_readw(epio, MUSB_TXCSR);
2400 + if (csr & MUSB_TXCSR_FIFONOTEMPTY) {
2401 + DBG(3, "FIFO busy, cannot halt %s\n", ep->name);
2402 + status = -EAGAIN;
2403 + goto done;
2404 + }
2405 }
2406 -
2407 }
2408
2409 /* set/clear the stall and toggle bits */
2410 DBG(2, "%s: %s stall\n", ep->name, value ? "set" : "clear");
2411 if (musb_ep->is_in) {
2412 csr = musb_readw(epio, MUSB_TXCSR);
2413 - if (csr & MUSB_TXCSR_FIFONOTEMPTY)
2414 - csr |= MUSB_TXCSR_FLUSHFIFO;
2415 csr |= MUSB_TXCSR_P_WZC_BITS
2416 | MUSB_TXCSR_CLRDATATOG;
2417 if (value)
2418 @@ -1300,14 +1290,13 @@ int musb_gadget_set_halt(struct usb_ep *ep, int value)
2419 musb_writew(epio, MUSB_RXCSR, csr);
2420 }
2421
2422 -done:
2423 -
2424 /* maybe start the first request in the queue */
2425 if (!musb_ep->busy && !value && request) {
2426 DBG(3, "restarting the request\n");
2427 musb_ep_restart(musb, request);
2428 }
2429
2430 +done:
2431 spin_unlock_irqrestore(&musb->lock, flags);
2432 return status;
2433 }
2434 diff --git a/drivers/usb/serial/cp210x.c b/drivers/usb/serial/cp210x.c
2435 index a69457f..2367325 100644
2436 --- a/drivers/usb/serial/cp210x.c
2437 +++ b/drivers/usb/serial/cp210x.c
2438 @@ -51,6 +51,8 @@ static int cp210x_tiocmset_port(struct usb_serial_port *port, struct file *,
2439 static void cp210x_break_ctl(struct tty_struct *, int);
2440 static int cp210x_startup(struct usb_serial *);
2441 static void cp210x_disconnect(struct usb_serial *);
2442 +static void cp210x_dtr_rts(struct usb_serial_port *p, int on);
2443 +static int cp210x_carrier_raised(struct usb_serial_port *p);
2444
2445 static int debug;
2446
2447 @@ -144,6 +146,8 @@ static struct usb_serial_driver cp210x_device = {
2448 .tiocmset = cp210x_tiocmset,
2449 .attach = cp210x_startup,
2450 .disconnect = cp210x_disconnect,
2451 + .dtr_rts = cp210x_dtr_rts,
2452 + .carrier_raised = cp210x_carrier_raised
2453 };
2454
2455 /* Config request types */
2456 @@ -748,6 +752,14 @@ static int cp210x_tiocmset_port(struct usb_serial_port *port, struct file *file,
2457 return cp210x_set_config(port, CP210X_SET_MHS, &control, 2);
2458 }
2459
2460 +static void cp210x_dtr_rts(struct usb_serial_port *p, int on)
2461 +{
2462 + if (on)
2463 + cp210x_tiocmset_port(p, NULL, TIOCM_DTR|TIOCM_RTS, 0);
2464 + else
2465 + cp210x_tiocmset_port(p, NULL, 0, TIOCM_DTR|TIOCM_RTS);
2466 +}
2467 +
2468 static int cp210x_tiocmget (struct tty_struct *tty, struct file *file)
2469 {
2470 struct usb_serial_port *port = tty->driver_data;
2471 @@ -770,6 +782,15 @@ static int cp210x_tiocmget (struct tty_struct *tty, struct file *file)
2472 return result;
2473 }
2474
2475 +static int cp210x_carrier_raised(struct usb_serial_port *p)
2476 +{
2477 + unsigned int control;
2478 + cp210x_get_config(p, CP210X_GET_MDMSTS, &control, 1);
2479 + if (control & CONTROL_DCD)
2480 + return 1;
2481 + return 0;
2482 +}
2483 +
2484 static void cp210x_break_ctl (struct tty_struct *tty, int break_state)
2485 {
2486 struct usb_serial_port *port = tty->driver_data;
2487 diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c
2488 index 048b563..8410201 100644
2489 --- a/drivers/usb/serial/ftdi_sio.c
2490 +++ b/drivers/usb/serial/ftdi_sio.c
2491 @@ -1939,7 +1939,7 @@ static void ftdi_write_bulk_callback(struct urb *urb)
2492 return;
2493 }
2494 /* account for transferred data */
2495 - countback = urb->actual_length;
2496 + countback = urb->transfer_buffer_length;
2497 data_offset = priv->write_offset;
2498 if (data_offset > 0) {
2499 /* Subtract the control bytes */
2500 @@ -1952,7 +1952,6 @@ static void ftdi_write_bulk_callback(struct urb *urb)
2501
2502 if (status) {
2503 dbg("nonzero write bulk status received: %d", status);
2504 - return;
2505 }
2506
2507 usb_serial_port_softint(port);
2508 diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c
2509 index 7c99185..dd50b78 100644
2510 --- a/drivers/usb/serial/option.c
2511 +++ b/drivers/usb/serial/option.c
2512 @@ -309,6 +309,7 @@ static int option_resume(struct usb_serial *serial);
2513
2514 #define DLINK_VENDOR_ID 0x1186
2515 #define DLINK_PRODUCT_DWM_652 0x3e04
2516 +#define DLINK_PRODUCT_DWM_652_U5 0xce16
2517
2518 #define QISDA_VENDOR_ID 0x1da5
2519 #define QISDA_PRODUCT_H21_4512 0x4512
2520 @@ -587,6 +588,7 @@ static struct usb_device_id option_ids[] = {
2521 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, ZTE_PRODUCT_AC2726, 0xff, 0xff, 0xff) },
2522 { USB_DEVICE(BENQ_VENDOR_ID, BENQ_PRODUCT_H10) },
2523 { USB_DEVICE(DLINK_VENDOR_ID, DLINK_PRODUCT_DWM_652) },
2524 + { USB_DEVICE(ALINK_VENDOR_ID, DLINK_PRODUCT_DWM_652_U5) }, /* Yes, ALINK_VENDOR_ID */
2525 { USB_DEVICE(QISDA_VENDOR_ID, QISDA_PRODUCT_H21_4512) },
2526 { USB_DEVICE(QISDA_VENDOR_ID, QISDA_PRODUCT_H21_4523) },
2527 { USB_DEVICE(QISDA_VENDOR_ID, QISDA_PRODUCT_H20_4515) },
2528 diff --git a/fs/block_dev.c b/fs/block_dev.c
2529 index 94dfda2..9d544ea 100644
2530 --- a/fs/block_dev.c
2531 +++ b/fs/block_dev.c
2532 @@ -1243,8 +1243,8 @@ static int __blkdev_get(struct block_device *bdev, fmode_t mode, int for_part)
2533 bd_set_size(bdev, (loff_t)bdev->bd_part->nr_sects << 9);
2534 }
2535 } else {
2536 - put_disk(disk);
2537 module_put(disk->fops->owner);
2538 + put_disk(disk);
2539 disk = NULL;
2540 if (bdev->bd_contains == bdev) {
2541 if (bdev->bd_disk->fops->open) {
2542 diff --git a/fs/cifs/cifsproto.h b/fs/cifs/cifsproto.h
2543 index da8fbf5..3949ae1 100644
2544 --- a/fs/cifs/cifsproto.h
2545 +++ b/fs/cifs/cifsproto.h
2546 @@ -389,4 +389,5 @@ extern int CIFSSMBSetPosixACL(const int xid, struct cifsTconInfo *tcon,
2547 const struct nls_table *nls_codepage, int remap_special_chars);
2548 extern int CIFSGetExtAttr(const int xid, struct cifsTconInfo *tcon,
2549 const int netfid, __u64 *pExtAttrBits, __u64 *pMask);
2550 +extern void cifs_autodisable_serverino(struct cifs_sb_info *cifs_sb);
2551 #endif /* _CIFSPROTO_H */
2552 diff --git a/fs/cifs/connect.c b/fs/cifs/connect.c
2553 index 1b056d4..5c084e5 100644
2554 --- a/fs/cifs/connect.c
2555 +++ b/fs/cifs/connect.c
2556 @@ -2200,16 +2200,8 @@ is_path_accessible(int xid, struct cifsTconInfo *tcon,
2557 struct cifs_sb_info *cifs_sb, const char *full_path)
2558 {
2559 int rc;
2560 - __u64 inode_num;
2561 FILE_ALL_INFO *pfile_info;
2562
2563 - rc = CIFSGetSrvInodeNumber(xid, tcon, full_path, &inode_num,
2564 - cifs_sb->local_nls,
2565 - cifs_sb->mnt_cifs_flags &
2566 - CIFS_MOUNT_MAP_SPECIAL_CHR);
2567 - if (rc != -EOPNOTSUPP)
2568 - return rc;
2569 -
2570 pfile_info = kmalloc(sizeof(FILE_ALL_INFO), GFP_KERNEL);
2571 if (pfile_info == NULL)
2572 return -ENOMEM;
2573 diff --git a/fs/cifs/dir.c b/fs/cifs/dir.c
2574 index 4326ffd..9652690 100644
2575 --- a/fs/cifs/dir.c
2576 +++ b/fs/cifs/dir.c
2577 @@ -212,8 +212,6 @@ int cifs_posix_open(char *full_path, struct inode **pinode,
2578 posix_flags |= SMB_O_EXCL;
2579 if (oflags & O_TRUNC)
2580 posix_flags |= SMB_O_TRUNC;
2581 - if (oflags & O_APPEND)
2582 - posix_flags |= SMB_O_APPEND;
2583 if (oflags & O_SYNC)
2584 posix_flags |= SMB_O_SYNC;
2585 if (oflags & O_DIRECTORY)
2586 @@ -648,7 +646,7 @@ cifs_lookup(struct inode *parent_dir_inode, struct dentry *direntry,
2587 * O_EXCL: optimize away the lookup, but don't hash the dentry. Let
2588 * the VFS handle the create.
2589 */
2590 - if (nd->flags & LOOKUP_EXCL) {
2591 + if (nd && (nd->flags & LOOKUP_EXCL)) {
2592 d_instantiate(direntry, NULL);
2593 return 0;
2594 }
2595 @@ -680,7 +678,7 @@ cifs_lookup(struct inode *parent_dir_inode, struct dentry *direntry,
2596 * reduction in network traffic in the other paths.
2597 */
2598 if (pTcon->unix_ext) {
2599 - if (!(nd->flags & (LOOKUP_PARENT | LOOKUP_DIRECTORY)) &&
2600 + if (nd && !(nd->flags & (LOOKUP_PARENT | LOOKUP_DIRECTORY)) &&
2601 (nd->flags & LOOKUP_OPEN) && !pTcon->broken_posix_open &&
2602 (nd->intent.open.flags & O_CREAT)) {
2603 rc = cifs_posix_open(full_path, &newInode,
2604 diff --git a/fs/cifs/inode.c b/fs/cifs/inode.c
2605 index 82d8383..9a77a30 100644
2606 --- a/fs/cifs/inode.c
2607 +++ b/fs/cifs/inode.c
2608 @@ -512,13 +512,10 @@ int cifs_get_inode_info(struct inode **pinode,
2609 cifs_sb->local_nls,
2610 cifs_sb->mnt_cifs_flags &
2611 CIFS_MOUNT_MAP_SPECIAL_CHR);
2612 - if (rc1) {
2613 + if (rc1 || !fattr.cf_uniqueid) {
2614 cFYI(1, ("GetSrvInodeNum rc %d", rc1));
2615 fattr.cf_uniqueid = iunique(sb, ROOT_I);
2616 - /* disable serverino if call not supported */
2617 - if (rc1 == -EINVAL)
2618 - cifs_sb->mnt_cifs_flags &=
2619 - ~CIFS_MOUNT_SERVER_INUM;
2620 + cifs_autodisable_serverino(cifs_sb);
2621 }
2622 } else {
2623 fattr.cf_uniqueid = iunique(sb, ROOT_I);
2624 diff --git a/fs/cifs/misc.c b/fs/cifs/misc.c
2625 index e079a91..b8dc3ed 100644
2626 --- a/fs/cifs/misc.c
2627 +++ b/fs/cifs/misc.c
2628 @@ -705,3 +705,17 @@ cifsConvertToUCS(__le16 *target, const char *source, int maxlen,
2629 ctoUCS_out:
2630 return i;
2631 }
2632 +
2633 +void
2634 +cifs_autodisable_serverino(struct cifs_sb_info *cifs_sb)
2635 +{
2636 + if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_SERVER_INUM) {
2637 + cifs_sb->mnt_cifs_flags &= ~CIFS_MOUNT_SERVER_INUM;
2638 + cERROR(1, ("Autodisabling the use of server inode numbers on "
2639 + "%s. This server doesn't seem to support them "
2640 + "properly. Hardlinks will not be recognized on this "
2641 + "mount. Consider mounting with the \"noserverino\" "
2642 + "option to silence this message.",
2643 + cifs_sb->tcon->treeName));
2644 + }
2645 +}
2646 diff --git a/fs/cifs/readdir.c b/fs/cifs/readdir.c
2647 index f823a4a..01ce279 100644
2648 --- a/fs/cifs/readdir.c
2649 +++ b/fs/cifs/readdir.c
2650 @@ -727,11 +727,12 @@ static int cifs_filldir(char *pfindEntry, struct file *file, filldir_t filldir,
2651 cifs_dir_info_to_fattr(&fattr, (FILE_DIRECTORY_INFO *)
2652 pfindEntry, cifs_sb);
2653
2654 - /* FIXME: make _to_fattr functions fill this out */
2655 - if (pCifsF->srch_inf.info_level == SMB_FIND_FILE_ID_FULL_DIR_INFO)
2656 + if (inum && (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_SERVER_INUM)) {
2657 fattr.cf_uniqueid = inum;
2658 - else
2659 + } else {
2660 fattr.cf_uniqueid = iunique(sb, ROOT_I);
2661 + cifs_autodisable_serverino(cifs_sb);
2662 + }
2663
2664 ino = cifs_uniqueid_to_ino_t(fattr.cf_uniqueid);
2665 tmp_dentry = cifs_readdir_lookup(file->f_dentry, &qstring, &fattr);
2666 diff --git a/fs/compat_ioctl.c b/fs/compat_ioctl.c
2667 index f91fd51..d84e705 100644
2668 --- a/fs/compat_ioctl.c
2669 +++ b/fs/compat_ioctl.c
2670 @@ -1800,7 +1800,7 @@ struct space_resv_32 {
2671 /* just account for different alignment */
2672 static int compat_ioctl_preallocate(struct file *file, unsigned long arg)
2673 {
2674 - struct space_resv_32 __user *p32 = (void __user *)arg;
2675 + struct space_resv_32 __user *p32 = compat_ptr(arg);
2676 struct space_resv __user *p = compat_alloc_user_space(sizeof(*p));
2677
2678 if (copy_in_user(&p->l_type, &p32->l_type, sizeof(s16)) ||
2679 @@ -2802,7 +2802,7 @@ asmlinkage long compat_sys_ioctl(unsigned int fd, unsigned int cmd,
2680 #else
2681 case FS_IOC_RESVSP:
2682 case FS_IOC_RESVSP64:
2683 - error = ioctl_preallocate(filp, (void __user *)arg);
2684 + error = ioctl_preallocate(filp, compat_ptr(arg));
2685 goto out_fput;
2686 #endif
2687
2688 diff --git a/fs/fuse/dir.c b/fs/fuse/dir.c
2689 index e703654..d0dcaef 100644
2690 --- a/fs/fuse/dir.c
2691 +++ b/fs/fuse/dir.c
2692 @@ -385,6 +385,9 @@ static int fuse_create_open(struct inode *dir, struct dentry *entry, int mode,
2693 if (fc->no_create)
2694 return -ENOSYS;
2695
2696 + if (flags & O_DIRECT)
2697 + return -EINVAL;
2698 +
2699 forget_req = fuse_get_req(fc);
2700 if (IS_ERR(forget_req))
2701 return PTR_ERR(forget_req);
2702 diff --git a/fs/jffs2/read.c b/fs/jffs2/read.c
2703 index cfe05c1..3f39be1 100644
2704 --- a/fs/jffs2/read.c
2705 +++ b/fs/jffs2/read.c
2706 @@ -164,12 +164,15 @@ int jffs2_read_inode_range(struct jffs2_sb_info *c, struct jffs2_inode_info *f,
2707
2708 /* XXX FIXME: Where a single physical node actually shows up in two
2709 frags, we read it twice. Don't do that. */
2710 - /* Now we're pointing at the first frag which overlaps our page */
2711 + /* Now we're pointing at the first frag which overlaps our page
2712 + * (or perhaps is before it, if we've been asked to read off the
2713 + * end of the file). */
2714 while(offset < end) {
2715 D2(printk(KERN_DEBUG "jffs2_read_inode_range: offset %d, end %d\n", offset, end));
2716 - if (unlikely(!frag || frag->ofs > offset)) {
2717 + if (unlikely(!frag || frag->ofs > offset ||
2718 + frag->ofs + frag->size <= offset)) {
2719 uint32_t holesize = end - offset;
2720 - if (frag) {
2721 + if (frag && frag->ofs > offset) {
2722 D1(printk(KERN_NOTICE "Eep. Hole in ino #%u fraglist. frag->ofs = 0x%08x, offset = 0x%08x\n", f->inocache->ino, frag->ofs, offset));
2723 holesize = min(holesize, frag->ofs - offset);
2724 }
2725 diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
2726 index 2aa2396..54baaef 100644
2727 --- a/fs/nfs/nfs4proc.c
2728 +++ b/fs/nfs/nfs4proc.c
2729 @@ -2740,7 +2740,7 @@ static int _nfs4_proc_readdir(struct dentry *dentry, struct rpc_cred *cred,
2730 .pages = &page,
2731 .pgbase = 0,
2732 .count = count,
2733 - .bitmask = NFS_SERVER(dentry->d_inode)->cache_consistency_bitmask,
2734 + .bitmask = NFS_SERVER(dentry->d_inode)->attr_bitmask,
2735 };
2736 struct nfs4_readdir_res res;
2737 struct rpc_message msg = {
2738 diff --git a/fs/nilfs2/ioctl.c b/fs/nilfs2/ioctl.c
2739 index 6ea5f87..f6b6016 100644
2740 --- a/fs/nilfs2/ioctl.c
2741 +++ b/fs/nilfs2/ioctl.c
2742 @@ -297,7 +297,18 @@ static int nilfs_ioctl_move_inode_block(struct inode *inode,
2743 (unsigned long long)vdesc->vd_vblocknr);
2744 return ret;
2745 }
2746 - bh->b_private = vdesc;
2747 + if (unlikely(!list_empty(&bh->b_assoc_buffers))) {
2748 + printk(KERN_CRIT "%s: conflicting %s buffer: ino=%llu, "
2749 + "cno=%llu, offset=%llu, blocknr=%llu, vblocknr=%llu\n",
2750 + __func__, vdesc->vd_flags ? "node" : "data",
2751 + (unsigned long long)vdesc->vd_ino,
2752 + (unsigned long long)vdesc->vd_cno,
2753 + (unsigned long long)vdesc->vd_offset,
2754 + (unsigned long long)vdesc->vd_blocknr,
2755 + (unsigned long long)vdesc->vd_vblocknr);
2756 + brelse(bh);
2757 + return -EEXIST;
2758 + }
2759 list_add_tail(&bh->b_assoc_buffers, buffers);
2760 return 0;
2761 }
2762 @@ -335,24 +346,10 @@ static int nilfs_ioctl_move_blocks(struct the_nilfs *nilfs,
2763 list_for_each_entry_safe(bh, n, &buffers, b_assoc_buffers) {
2764 ret = nilfs_gccache_wait_and_mark_dirty(bh);
2765 if (unlikely(ret < 0)) {
2766 - if (ret == -EEXIST) {
2767 - vdesc = bh->b_private;
2768 - printk(KERN_CRIT
2769 - "%s: conflicting %s buffer: "
2770 - "ino=%llu, cno=%llu, offset=%llu, "
2771 - "blocknr=%llu, vblocknr=%llu\n",
2772 - __func__,
2773 - vdesc->vd_flags ? "node" : "data",
2774 - (unsigned long long)vdesc->vd_ino,
2775 - (unsigned long long)vdesc->vd_cno,
2776 - (unsigned long long)vdesc->vd_offset,
2777 - (unsigned long long)vdesc->vd_blocknr,
2778 - (unsigned long long)vdesc->vd_vblocknr);
2779 - }
2780 + WARN_ON(ret == -EEXIST);
2781 goto failed;
2782 }
2783 list_del_init(&bh->b_assoc_buffers);
2784 - bh->b_private = NULL;
2785 brelse(bh);
2786 }
2787 return nmembs;
2788 @@ -360,7 +357,6 @@ static int nilfs_ioctl_move_blocks(struct the_nilfs *nilfs,
2789 failed:
2790 list_for_each_entry_safe(bh, n, &buffers, b_assoc_buffers) {
2791 list_del_init(&bh->b_assoc_buffers);
2792 - bh->b_private = NULL;
2793 brelse(bh);
2794 }
2795 return ret;
2796 diff --git a/fs/proc/base.c b/fs/proc/base.c
2797 index 6f742f6..baf53d9 100644
2798 --- a/fs/proc/base.c
2799 +++ b/fs/proc/base.c
2800 @@ -2580,8 +2580,7 @@ static void proc_flush_task_mnt(struct vfsmount *mnt, pid_t pid, pid_t tgid)
2801 name.len = snprintf(buf, sizeof(buf), "%d", pid);
2802 dentry = d_hash_and_lookup(mnt->mnt_root, &name);
2803 if (dentry) {
2804 - if (!(current->flags & PF_EXITING))
2805 - shrink_dcache_parent(dentry);
2806 + shrink_dcache_parent(dentry);
2807 d_drop(dentry);
2808 dput(dentry);
2809 }
2810 diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h
2811 index f2c69a2..ff06fb2 100644
2812 --- a/include/linux/skbuff.h
2813 +++ b/include/linux/skbuff.h
2814 @@ -1761,6 +1761,8 @@ extern int skb_copy_datagram_const_iovec(const struct sk_buff *from,
2815 int to_offset,
2816 int size);
2817 extern void skb_free_datagram(struct sock *sk, struct sk_buff *skb);
2818 +extern void skb_free_datagram_locked(struct sock *sk,
2819 + struct sk_buff *skb);
2820 extern int skb_kill_datagram(struct sock *sk, struct sk_buff *skb,
2821 unsigned int flags);
2822 extern __wsum skb_checksum(const struct sk_buff *skb, int offset,
2823 diff --git a/include/net/mac80211.h b/include/net/mac80211.h
2824 index c061044..5edf792 100644
2825 --- a/include/net/mac80211.h
2826 +++ b/include/net/mac80211.h
2827 @@ -1244,6 +1244,12 @@ enum ieee80211_filter_flags {
2828 *
2829 * These flags are used with the ampdu_action() callback in
2830 * &struct ieee80211_ops to indicate which action is needed.
2831 + *
2832 + * Note that drivers MUST be able to deal with a TX aggregation
2833 + * session being stopped even before they OK'ed starting it by
2834 + * calling ieee80211_start_tx_ba_cb(_irqsafe), because the peer
2835 + * might receive the addBA frame and send a delBA right away!
2836 + *
2837 * @IEEE80211_AMPDU_RX_START: start Rx aggregation
2838 * @IEEE80211_AMPDU_RX_STOP: stop Rx aggregation
2839 * @IEEE80211_AMPDU_TX_START: start Tx aggregation
2840 diff --git a/include/net/netfilter/nf_conntrack.h b/include/net/netfilter/nf_conntrack.h
2841 index cbdd628..5cf7270 100644
2842 --- a/include/net/netfilter/nf_conntrack.h
2843 +++ b/include/net/netfilter/nf_conntrack.h
2844 @@ -255,11 +255,9 @@ static inline bool nf_ct_kill(struct nf_conn *ct)
2845 }
2846
2847 /* These are for NAT. Icky. */
2848 -/* Update TCP window tracking data when NAT mangles the packet */
2849 -extern void nf_conntrack_tcp_update(const struct sk_buff *skb,
2850 - unsigned int dataoff,
2851 - struct nf_conn *ct, int dir,
2852 - s16 offset);
2853 +extern s16 (*nf_ct_nat_offset)(const struct nf_conn *ct,
2854 + enum ip_conntrack_dir dir,
2855 + u32 seq);
2856
2857 /* Fake conntrack entry for untracked connections */
2858 extern struct nf_conn nf_conntrack_untracked;
2859 diff --git a/include/net/netfilter/nf_nat_helper.h b/include/net/netfilter/nf_nat_helper.h
2860 index 237a961..4222220 100644
2861 --- a/include/net/netfilter/nf_nat_helper.h
2862 +++ b/include/net/netfilter/nf_nat_helper.h
2863 @@ -32,4 +32,8 @@ extern int (*nf_nat_seq_adjust_hook)(struct sk_buff *skb,
2864 * to port ct->master->saved_proto. */
2865 extern void nf_nat_follow_master(struct nf_conn *ct,
2866 struct nf_conntrack_expect *this);
2867 +
2868 +extern s16 nf_nat_get_offset(const struct nf_conn *ct,
2869 + enum ip_conntrack_dir dir,
2870 + u32 seq);
2871 #endif
2872 diff --git a/init/main.c b/init/main.c
2873 index 11f4f14..1ec6347 100644
2874 --- a/init/main.c
2875 +++ b/init/main.c
2876 @@ -250,7 +250,7 @@ early_param("loglevel", loglevel);
2877
2878 /*
2879 * Unknown boot options get handed to init, unless they look like
2880 - * failed parameters
2881 + * unused parameters (modprobe will find them in /proc/cmdline).
2882 */
2883 static int __init unknown_bootoption(char *param, char *val)
2884 {
2885 @@ -271,14 +271,9 @@ static int __init unknown_bootoption(char *param, char *val)
2886 if (obsolete_checksetup(param))
2887 return 0;
2888
2889 - /*
2890 - * Preemptive maintenance for "why didn't my misspelled command
2891 - * line work?"
2892 - */
2893 - if (strchr(param, '.') && (!val || strchr(param, '.') < val)) {
2894 - printk(KERN_ERR "Unknown boot option `%s': ignoring\n", param);
2895 + /* Unused module parameter. */
2896 + if (strchr(param, '.') && (!val || strchr(param, '.') < val))
2897 return 0;
2898 - }
2899
2900 if (panic_later)
2901 return 0;
2902 diff --git a/kernel/module.c b/kernel/module.c
2903 index 2d53718..cda4d76 100644
2904 --- a/kernel/module.c
2905 +++ b/kernel/module.c
2906 @@ -1179,7 +1179,8 @@ static void add_sect_attrs(struct module *mod, unsigned int nsect,
2907
2908 /* Count loaded sections and allocate structures */
2909 for (i = 0; i < nsect; i++)
2910 - if (sechdrs[i].sh_flags & SHF_ALLOC)
2911 + if (sechdrs[i].sh_flags & SHF_ALLOC
2912 + && sechdrs[i].sh_size)
2913 nloaded++;
2914 size[0] = ALIGN(sizeof(*sect_attrs)
2915 + nloaded * sizeof(sect_attrs->attrs[0]),
2916 @@ -1199,6 +1200,8 @@ static void add_sect_attrs(struct module *mod, unsigned int nsect,
2917 for (i = 0; i < nsect; i++) {
2918 if (! (sechdrs[i].sh_flags & SHF_ALLOC))
2919 continue;
2920 + if (!sechdrs[i].sh_size)
2921 + continue;
2922 sattr->address = sechdrs[i].sh_addr;
2923 sattr->name = kstrdup(secstrings + sechdrs[i].sh_name,
2924 GFP_KERNEL);
2925 diff --git a/kernel/perf_counter.c b/kernel/perf_counter.c
2926 index b1dc468..237fd07 100644
2927 --- a/kernel/perf_counter.c
2928 +++ b/kernel/perf_counter.c
2929 @@ -1363,7 +1363,7 @@ static void perf_ctx_adjust_freq(struct perf_counter_context *ctx)
2930 u64 interrupts, freq;
2931
2932 spin_lock(&ctx->lock);
2933 - list_for_each_entry(counter, &ctx->counter_list, list_entry) {
2934 + list_for_each_entry_rcu(counter, &ctx->counter_list, event_entry) {
2935 if (counter->state != PERF_COUNTER_STATE_ACTIVE)
2936 continue;
2937
2938 diff --git a/kernel/sched.c b/kernel/sched.c
2939 index 1b59e26..81ede13 100644
2940 --- a/kernel/sched.c
2941 +++ b/kernel/sched.c
2942 @@ -7945,6 +7945,7 @@ static cpumask_var_t cpu_isolated_map;
2943 /* Setup the mask of cpus configured for isolated domains */
2944 static int __init isolated_cpu_setup(char *str)
2945 {
2946 + alloc_bootmem_cpumask_var(&cpu_isolated_map);
2947 cpulist_parse(str, cpu_isolated_map);
2948 return 1;
2949 }
2950 @@ -9383,13 +9384,15 @@ void __init sched_init(void)
2951 current->sched_class = &fair_sched_class;
2952
2953 /* Allocate the nohz_cpu_mask if CONFIG_CPUMASK_OFFSTACK */
2954 - alloc_cpumask_var(&nohz_cpu_mask, GFP_NOWAIT);
2955 + zalloc_cpumask_var(&nohz_cpu_mask, GFP_NOWAIT);
2956 #ifdef CONFIG_SMP
2957 #ifdef CONFIG_NO_HZ
2958 - alloc_cpumask_var(&nohz.cpu_mask, GFP_NOWAIT);
2959 + zalloc_cpumask_var(&nohz.cpu_mask, GFP_NOWAIT);
2960 alloc_cpumask_var(&nohz.ilb_grp_nohz_mask, GFP_NOWAIT);
2961 #endif
2962 - alloc_cpumask_var(&cpu_isolated_map, GFP_NOWAIT);
2963 + /* May be allocated at isolcpus cmdline parse time */
2964 + if (cpu_isolated_map == NULL)
2965 + zalloc_cpumask_var(&cpu_isolated_map, GFP_NOWAIT);
2966 #endif /* SMP */
2967
2968 perf_counter_init();
2969 diff --git a/kernel/user.c b/kernel/user.c
2970 index 2c000e7..46d0165 100644
2971 --- a/kernel/user.c
2972 +++ b/kernel/user.c
2973 @@ -330,9 +330,9 @@ done:
2974 */
2975 static void free_user(struct user_struct *up, unsigned long flags)
2976 {
2977 - spin_unlock_irqrestore(&uidhash_lock, flags);
2978 INIT_DELAYED_WORK(&up->work, cleanup_user_struct);
2979 schedule_delayed_work(&up->work, msecs_to_jiffies(1000));
2980 + spin_unlock_irqrestore(&uidhash_lock, flags);
2981 }
2982
2983 #else /* CONFIG_USER_SCHED && CONFIG_SYSFS */
2984 diff --git a/mm/highmem.c b/mm/highmem.c
2985 index 25878cc..9c1e627 100644
2986 --- a/mm/highmem.c
2987 +++ b/mm/highmem.c
2988 @@ -426,16 +426,21 @@ void __init page_address_init(void)
2989
2990 void debug_kmap_atomic(enum km_type type)
2991 {
2992 - static unsigned warn_count = 10;
2993 + static int warn_count = 10;
2994
2995 - if (unlikely(warn_count == 0))
2996 + if (unlikely(warn_count < 0))
2997 return;
2998
2999 if (unlikely(in_interrupt())) {
3000 - if (in_irq()) {
3001 + if (in_nmi()) {
3002 + if (type != KM_NMI && type != KM_NMI_PTE) {
3003 + WARN_ON(1);
3004 + warn_count--;
3005 + }
3006 + } else if (in_irq()) {
3007 if (type != KM_IRQ0 && type != KM_IRQ1 &&
3008 type != KM_BIO_SRC_IRQ && type != KM_BIO_DST_IRQ &&
3009 - type != KM_BOUNCE_READ) {
3010 + type != KM_BOUNCE_READ && type != KM_IRQ_PTE) {
3011 WARN_ON(1);
3012 warn_count--;
3013 }
3014 @@ -452,7 +457,9 @@ void debug_kmap_atomic(enum km_type type)
3015 }
3016
3017 if (type == KM_IRQ0 || type == KM_IRQ1 || type == KM_BOUNCE_READ ||
3018 - type == KM_BIO_SRC_IRQ || type == KM_BIO_DST_IRQ) {
3019 + type == KM_BIO_SRC_IRQ || type == KM_BIO_DST_IRQ ||
3020 + type == KM_IRQ_PTE || type == KM_NMI ||
3021 + type == KM_NMI_PTE ) {
3022 if (!irqs_disabled()) {
3023 WARN_ON(1);
3024 warn_count--;
3025 diff --git a/mm/migrate.c b/mm/migrate.c
3026 index 939888f..598abad 100644
3027 --- a/mm/migrate.c
3028 +++ b/mm/migrate.c
3029 @@ -597,7 +597,7 @@ static int unmap_and_move(new_page_t get_new_page, unsigned long private,
3030 struct page *newpage = get_new_page(page, private, &result);
3031 int rcu_locked = 0;
3032 int charge = 0;
3033 - struct mem_cgroup *mem;
3034 + struct mem_cgroup *mem = NULL;
3035
3036 if (!newpage)
3037 return -ENOMEM;
3038 diff --git a/mm/page_alloc.c b/mm/page_alloc.c
3039 index 0b3c6cb..957b551 100644
3040 --- a/mm/page_alloc.c
3041 +++ b/mm/page_alloc.c
3042 @@ -1715,7 +1715,7 @@ gfp_to_alloc_flags(gfp_t gfp_mask)
3043 * See also cpuset_zone_allowed() comment in kernel/cpuset.c.
3044 */
3045 alloc_flags &= ~ALLOC_CPUSET;
3046 - } else if (unlikely(rt_task(p)))
3047 + } else if (unlikely(rt_task(p)) && !in_interrupt())
3048 alloc_flags |= ALLOC_HARDER;
3049
3050 if (likely(!(gfp_mask & __GFP_NOMEMALLOC))) {
3051 @@ -1763,6 +1763,7 @@ __alloc_pages_slowpath(gfp_t gfp_mask, unsigned int order,
3052 if (NUMA_BUILD && (gfp_mask & GFP_THISNODE) == GFP_THISNODE)
3053 goto nopage;
3054
3055 +restart:
3056 wake_all_kswapd(order, zonelist, high_zoneidx);
3057
3058 /*
3059 @@ -1772,7 +1773,6 @@ __alloc_pages_slowpath(gfp_t gfp_mask, unsigned int order,
3060 */
3061 alloc_flags = gfp_to_alloc_flags(gfp_mask);
3062
3063 -restart:
3064 /* This is the last chance, in general, before the goto nopage. */
3065 page = get_page_from_freelist(gfp_mask, nodemask, order, zonelist,
3066 high_zoneidx, alloc_flags & ~ALLOC_NO_WATERMARKS,
3067 diff --git a/net/core/datagram.c b/net/core/datagram.c
3068 index b0fe692..caeb285 100644
3069 --- a/net/core/datagram.c
3070 +++ b/net/core/datagram.c
3071 @@ -223,6 +223,15 @@ void skb_free_datagram(struct sock *sk, struct sk_buff *skb)
3072 consume_skb(skb);
3073 sk_mem_reclaim_partial(sk);
3074 }
3075 +EXPORT_SYMBOL(skb_free_datagram);
3076 +
3077 +void skb_free_datagram_locked(struct sock *sk, struct sk_buff *skb)
3078 +{
3079 + lock_sock(sk);
3080 + skb_free_datagram(sk, skb);
3081 + release_sock(sk);
3082 +}
3083 +EXPORT_SYMBOL(skb_free_datagram_locked);
3084
3085 /**
3086 * skb_kill_datagram - Free a datagram skbuff forcibly
3087 @@ -749,5 +758,4 @@ unsigned int datagram_poll(struct file *file, struct socket *sock,
3088 EXPORT_SYMBOL(datagram_poll);
3089 EXPORT_SYMBOL(skb_copy_and_csum_datagram_iovec);
3090 EXPORT_SYMBOL(skb_copy_datagram_iovec);
3091 -EXPORT_SYMBOL(skb_free_datagram);
3092 EXPORT_SYMBOL(skb_recv_datagram);
3093 diff --git a/net/ipv4/ip_fragment.c b/net/ipv4/ip_fragment.c
3094 index 575f9bd..d3fe10b 100644
3095 --- a/net/ipv4/ip_fragment.c
3096 +++ b/net/ipv4/ip_fragment.c
3097 @@ -563,7 +563,7 @@ out_oversize:
3098 printk(KERN_INFO "Oversized IP packet from %pI4.\n",
3099 &qp->saddr);
3100 out_fail:
3101 - IP_INC_STATS_BH(dev_net(dev), IPSTATS_MIB_REASMFAILS);
3102 + IP_INC_STATS_BH(net, IPSTATS_MIB_REASMFAILS);
3103 return err;
3104 }
3105
3106 diff --git a/net/ipv4/netfilter/nf_nat_core.c b/net/ipv4/netfilter/nf_nat_core.c
3107 index b6ddd56..d396abf 100644
3108 --- a/net/ipv4/netfilter/nf_nat_core.c
3109 +++ b/net/ipv4/netfilter/nf_nat_core.c
3110 @@ -750,6 +750,8 @@ static int __init nf_nat_init(void)
3111 BUG_ON(nfnetlink_parse_nat_setup_hook != NULL);
3112 rcu_assign_pointer(nfnetlink_parse_nat_setup_hook,
3113 nfnetlink_parse_nat_setup);
3114 + BUG_ON(nf_ct_nat_offset != NULL);
3115 + rcu_assign_pointer(nf_ct_nat_offset, nf_nat_get_offset);
3116 return 0;
3117
3118 cleanup_extend:
3119 @@ -764,6 +766,7 @@ static void __exit nf_nat_cleanup(void)
3120 nf_ct_extend_unregister(&nat_extend);
3121 rcu_assign_pointer(nf_nat_seq_adjust_hook, NULL);
3122 rcu_assign_pointer(nfnetlink_parse_nat_setup_hook, NULL);
3123 + rcu_assign_pointer(nf_ct_nat_offset, NULL);
3124 synchronize_net();
3125 }
3126
3127 diff --git a/net/ipv4/netfilter/nf_nat_helper.c b/net/ipv4/netfilter/nf_nat_helper.c
3128 index 09172a6..f9520fa 100644
3129 --- a/net/ipv4/netfilter/nf_nat_helper.c
3130 +++ b/net/ipv4/netfilter/nf_nat_helper.c
3131 @@ -73,6 +73,28 @@ adjust_tcp_sequence(u32 seq,
3132 DUMP_OFFSET(this_way);
3133 }
3134
3135 +/* Get the offset value, for conntrack */
3136 +s16 nf_nat_get_offset(const struct nf_conn *ct,
3137 + enum ip_conntrack_dir dir,
3138 + u32 seq)
3139 +{
3140 + struct nf_conn_nat *nat = nfct_nat(ct);
3141 + struct nf_nat_seq *this_way;
3142 + s16 offset;
3143 +
3144 + if (!nat)
3145 + return 0;
3146 +
3147 + this_way = &nat->seq[dir];
3148 + spin_lock_bh(&nf_nat_seqofs_lock);
3149 + offset = after(seq, this_way->correction_pos)
3150 + ? this_way->offset_after : this_way->offset_before;
3151 + spin_unlock_bh(&nf_nat_seqofs_lock);
3152 +
3153 + return offset;
3154 +}
3155 +EXPORT_SYMBOL_GPL(nf_nat_get_offset);
3156 +
3157 /* Frobs data inside this packet, which is linear. */
3158 static void mangle_contents(struct sk_buff *skb,
3159 unsigned int dataoff,
3160 @@ -189,11 +211,6 @@ nf_nat_mangle_tcp_packet(struct sk_buff *skb,
3161 adjust_tcp_sequence(ntohl(tcph->seq),
3162 (int)rep_len - (int)match_len,
3163 ct, ctinfo);
3164 - /* Tell TCP window tracking about seq change */
3165 - nf_conntrack_tcp_update(skb, ip_hdrlen(skb),
3166 - ct, CTINFO2DIR(ctinfo),
3167 - (int)rep_len - (int)match_len);
3168 -
3169 nf_conntrack_event_cache(IPCT_NATSEQADJ, ct);
3170 }
3171 return 1;
3172 @@ -415,12 +432,7 @@ nf_nat_seq_adjust(struct sk_buff *skb,
3173 tcph->seq = newseq;
3174 tcph->ack_seq = newack;
3175
3176 - if (!nf_nat_sack_adjust(skb, tcph, ct, ctinfo))
3177 - return 0;
3178 -
3179 - nf_conntrack_tcp_update(skb, ip_hdrlen(skb), ct, dir, seqoff);
3180 -
3181 - return 1;
3182 + return nf_nat_sack_adjust(skb, tcph, ct, ctinfo);
3183 }
3184
3185 /* Setup NAT on this expected conntrack so it follows master. */
3186 diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c
3187 index 80e3812..00d1f6d 100644
3188 --- a/net/ipv4/udp.c
3189 +++ b/net/ipv4/udp.c
3190 @@ -831,6 +831,42 @@ out:
3191 return ret;
3192 }
3193
3194 +
3195 +/**
3196 + * first_packet_length - return length of first packet in receive queue
3197 + * @sk: socket
3198 + *
3199 + * Drops all bad checksum frames, until a valid one is found.
3200 + * Returns the length of found skb, or 0 if none is found.
3201 + */
3202 +static unsigned int first_packet_length(struct sock *sk)
3203 +{
3204 + struct sk_buff_head list_kill, *rcvq = &sk->sk_receive_queue;
3205 + struct sk_buff *skb;
3206 + unsigned int res;
3207 +
3208 + __skb_queue_head_init(&list_kill);
3209 +
3210 + spin_lock_bh(&rcvq->lock);
3211 + while ((skb = skb_peek(rcvq)) != NULL &&
3212 + udp_lib_checksum_complete(skb)) {
3213 + UDP_INC_STATS_BH(sock_net(sk), UDP_MIB_INERRORS,
3214 + IS_UDPLITE(sk));
3215 + __skb_unlink(skb, rcvq);
3216 + __skb_queue_tail(&list_kill, skb);
3217 + }
3218 + res = skb ? skb->len : 0;
3219 + spin_unlock_bh(&rcvq->lock);
3220 +
3221 + if (!skb_queue_empty(&list_kill)) {
3222 + lock_sock(sk);
3223 + __skb_queue_purge(&list_kill);
3224 + sk_mem_reclaim_partial(sk);
3225 + release_sock(sk);
3226 + }
3227 + return res;
3228 +}
3229 +
3230 /*
3231 * IOCTL requests applicable to the UDP protocol
3232 */
3233 @@ -847,21 +883,16 @@ int udp_ioctl(struct sock *sk, int cmd, unsigned long arg)
3234
3235 case SIOCINQ:
3236 {
3237 - struct sk_buff *skb;
3238 - unsigned long amount;
3239 + unsigned int amount = first_packet_length(sk);
3240
3241 - amount = 0;
3242 - spin_lock_bh(&sk->sk_receive_queue.lock);
3243 - skb = skb_peek(&sk->sk_receive_queue);
3244 - if (skb != NULL) {
3245 + if (amount)
3246 /*
3247 * We will only return the amount
3248 * of this packet since that is all
3249 * that will be read.
3250 */
3251 - amount = skb->len - sizeof(struct udphdr);
3252 - }
3253 - spin_unlock_bh(&sk->sk_receive_queue.lock);
3254 + amount -= sizeof(struct udphdr);
3255 +
3256 return put_user(amount, (int __user *)arg);
3257 }
3258
3259 @@ -956,9 +987,7 @@ try_again:
3260 err = ulen;
3261
3262 out_free:
3263 - lock_sock(sk);
3264 - skb_free_datagram(sk, skb);
3265 - release_sock(sk);
3266 + skb_free_datagram_locked(sk, skb);
3267 out:
3268 return err;
3269
3270 @@ -1525,32 +1554,13 @@ unsigned int udp_poll(struct file *file, struct socket *sock, poll_table *wait)
3271 {
3272 unsigned int mask = datagram_poll(file, sock, wait);
3273 struct sock *sk = sock->sk;
3274 - int is_lite = IS_UDPLITE(sk);
3275
3276 /* Check for false positives due to checksum errors */
3277 - if ( (mask & POLLRDNORM) &&
3278 - !(file->f_flags & O_NONBLOCK) &&
3279 - !(sk->sk_shutdown & RCV_SHUTDOWN)){
3280 - struct sk_buff_head *rcvq = &sk->sk_receive_queue;
3281 - struct sk_buff *skb;
3282 -
3283 - spin_lock_bh(&rcvq->lock);
3284 - while ((skb = skb_peek(rcvq)) != NULL &&
3285 - udp_lib_checksum_complete(skb)) {
3286 - UDP_INC_STATS_BH(sock_net(sk),
3287 - UDP_MIB_INERRORS, is_lite);
3288 - __skb_unlink(skb, rcvq);
3289 - kfree_skb(skb);
3290 - }
3291 - spin_unlock_bh(&rcvq->lock);
3292 -
3293 - /* nothing to see, move along */
3294 - if (skb == NULL)
3295 - mask &= ~(POLLIN | POLLRDNORM);
3296 - }
3297 + if ((mask & POLLRDNORM) && !(file->f_flags & O_NONBLOCK) &&
3298 + !(sk->sk_shutdown & RCV_SHUTDOWN) && !first_packet_length(sk))
3299 + mask &= ~(POLLIN | POLLRDNORM);
3300
3301 return mask;
3302 -
3303 }
3304
3305 struct proto udp_prot = {
3306 diff --git a/net/ipv6/udp.c b/net/ipv6/udp.c
3307 index 33b59bd..333a6ec 100644
3308 --- a/net/ipv6/udp.c
3309 +++ b/net/ipv6/udp.c
3310 @@ -288,9 +288,7 @@ try_again:
3311 err = ulen;
3312
3313 out_free:
3314 - lock_sock(sk);
3315 - skb_free_datagram(sk, skb);
3316 - release_sock(sk);
3317 + skb_free_datagram_locked(sk, skb);
3318 out:
3319 return err;
3320
3321 diff --git a/net/mac80211/agg-rx.c b/net/mac80211/agg-rx.c
3322 index bc064d7..ce8e0e7 100644
3323 --- a/net/mac80211/agg-rx.c
3324 +++ b/net/mac80211/agg-rx.c
3325 @@ -85,10 +85,6 @@ void ieee80211_sta_stop_rx_ba_session(struct ieee80211_sub_if_data *sdata, u8 *r
3326 struct ieee80211_local *local = sdata->local;
3327 struct sta_info *sta;
3328
3329 - /* stop HW Rx aggregation. ampdu_action existence
3330 - * already verified in session init so we add the BUG_ON */
3331 - BUG_ON(!local->ops->ampdu_action);
3332 -
3333 rcu_read_lock();
3334
3335 sta = sta_info_get(local, ra);
3336 diff --git a/net/mac80211/agg-tx.c b/net/mac80211/agg-tx.c
3337 index a24e598..b9005e1 100644
3338 --- a/net/mac80211/agg-tx.c
3339 +++ b/net/mac80211/agg-tx.c
3340 @@ -123,13 +123,18 @@ void ieee80211_send_bar(struct ieee80211_sub_if_data *sdata, u8 *ra, u16 tid, u1
3341 ieee80211_tx_skb(sdata, skb, 0);
3342 }
3343
3344 -static int ___ieee80211_stop_tx_ba_session(struct sta_info *sta, u16 tid,
3345 - enum ieee80211_back_parties initiator)
3346 +int ___ieee80211_stop_tx_ba_session(struct sta_info *sta, u16 tid,
3347 + enum ieee80211_back_parties initiator)
3348 {
3349 struct ieee80211_local *local = sta->local;
3350 int ret;
3351 u8 *state;
3352
3353 +#ifdef CONFIG_MAC80211_HT_DEBUG
3354 + printk(KERN_DEBUG "Tx BA session stop requested for %pM tid %u\n",
3355 + sta->sta.addr, tid);
3356 +#endif /* CONFIG_MAC80211_HT_DEBUG */
3357 +
3358 state = &sta->ampdu_mlme.tid_state_tx[tid];
3359
3360 if (*state == HT_AGG_STATE_OPERATIONAL)
3361 @@ -143,7 +148,6 @@ static int ___ieee80211_stop_tx_ba_session(struct sta_info *sta, u16 tid,
3362
3363 /* HW shall not deny going back to legacy */
3364 if (WARN_ON(ret)) {
3365 - *state = HT_AGG_STATE_OPERATIONAL;
3366 /*
3367 * We may have pending packets get stuck in this case...
3368 * Not bothering with a workaround for now.
3369 @@ -526,11 +530,6 @@ int __ieee80211_stop_tx_ba_session(struct sta_info *sta, u16 tid,
3370 goto unlock;
3371 }
3372
3373 -#ifdef CONFIG_MAC80211_HT_DEBUG
3374 - printk(KERN_DEBUG "Tx BA session stop requested for %pM tid %u\n",
3375 - sta->sta.addr, tid);
3376 -#endif /* CONFIG_MAC80211_HT_DEBUG */
3377 -
3378 ret = ___ieee80211_stop_tx_ba_session(sta, tid, initiator);
3379
3380 unlock:
3381 @@ -546,7 +545,7 @@ int ieee80211_stop_tx_ba_session(struct ieee80211_hw *hw,
3382 struct sta_info *sta;
3383 int ret = 0;
3384
3385 - if (WARN_ON(!local->ops->ampdu_action))
3386 + if (!local->ops->ampdu_action)
3387 return -EINVAL;
3388
3389 if (tid >= STA_TID_NUM)
3390 diff --git a/net/mac80211/ht.c b/net/mac80211/ht.c
3391 index 0891bfb..a6b8eb4 100644
3392 --- a/net/mac80211/ht.c
3393 +++ b/net/mac80211/ht.c
3394 @@ -141,7 +141,6 @@ void ieee80211_process_delba(struct ieee80211_sub_if_data *sdata,
3395 struct sta_info *sta,
3396 struct ieee80211_mgmt *mgmt, size_t len)
3397 {
3398 - struct ieee80211_local *local = sdata->local;
3399 u16 tid, params;
3400 u16 initiator;
3401
3402 @@ -161,10 +160,9 @@ void ieee80211_process_delba(struct ieee80211_sub_if_data *sdata,
3403 WLAN_BACK_INITIATOR, 0);
3404 else { /* WLAN_BACK_RECIPIENT */
3405 spin_lock_bh(&sta->lock);
3406 - sta->ampdu_mlme.tid_state_tx[tid] =
3407 - HT_AGG_STATE_OPERATIONAL;
3408 + if (sta->ampdu_mlme.tid_state_tx[tid] & HT_ADDBA_REQUESTED_MSK)
3409 + ___ieee80211_stop_tx_ba_session(sta, tid,
3410 + WLAN_BACK_RECIPIENT);
3411 spin_unlock_bh(&sta->lock);
3412 - ieee80211_stop_tx_ba_session(&local->hw, sta->sta.addr, tid,
3413 - WLAN_BACK_RECIPIENT);
3414 }
3415 }
3416 diff --git a/net/mac80211/ieee80211_i.h b/net/mac80211/ieee80211_i.h
3417 index 68eb505..33a7e75 100644
3418 --- a/net/mac80211/ieee80211_i.h
3419 +++ b/net/mac80211/ieee80211_i.h
3420 @@ -1057,6 +1057,8 @@ void ieee80211_process_addba_request(struct ieee80211_local *local,
3421
3422 int __ieee80211_stop_tx_ba_session(struct sta_info *sta, u16 tid,
3423 enum ieee80211_back_parties initiator);
3424 +int ___ieee80211_stop_tx_ba_session(struct sta_info *sta, u16 tid,
3425 + enum ieee80211_back_parties initiator);
3426
3427 /* Spectrum management */
3428 void ieee80211_process_measurement_req(struct ieee80211_sub_if_data *sdata,
3429 diff --git a/net/netfilter/nf_conntrack_core.c b/net/netfilter/nf_conntrack_core.c
3430 index b8614c6..4299db7 100644
3431 --- a/net/netfilter/nf_conntrack_core.c
3432 +++ b/net/netfilter/nf_conntrack_core.c
3433 @@ -1350,6 +1350,11 @@ err_stat:
3434 return ret;
3435 }
3436
3437 +s16 (*nf_ct_nat_offset)(const struct nf_conn *ct,
3438 + enum ip_conntrack_dir dir,
3439 + u32 seq);
3440 +EXPORT_SYMBOL_GPL(nf_ct_nat_offset);
3441 +
3442 int nf_conntrack_init(struct net *net)
3443 {
3444 int ret;
3445 @@ -1367,6 +1372,9 @@ int nf_conntrack_init(struct net *net)
3446 /* For use by REJECT target */
3447 rcu_assign_pointer(ip_ct_attach, nf_conntrack_attach);
3448 rcu_assign_pointer(nf_ct_destroy, destroy_conntrack);
3449 +
3450 + /* Howto get NAT offsets */
3451 + rcu_assign_pointer(nf_ct_nat_offset, NULL);
3452 }
3453 return 0;
3454
3455 diff --git a/net/netfilter/nf_conntrack_proto_tcp.c b/net/netfilter/nf_conntrack_proto_tcp.c
3456 index 97a82ba..ba2b769 100644
3457 --- a/net/netfilter/nf_conntrack_proto_tcp.c
3458 +++ b/net/netfilter/nf_conntrack_proto_tcp.c
3459 @@ -492,6 +492,21 @@ static void tcp_sack(const struct sk_buff *skb, unsigned int dataoff,
3460 }
3461 }
3462
3463 +#ifdef CONFIG_NF_NAT_NEEDED
3464 +static inline s16 nat_offset(const struct nf_conn *ct,
3465 + enum ip_conntrack_dir dir,
3466 + u32 seq)
3467 +{
3468 + typeof(nf_ct_nat_offset) get_offset = rcu_dereference(nf_ct_nat_offset);
3469 +
3470 + return get_offset != NULL ? get_offset(ct, dir, seq) : 0;
3471 +}
3472 +#define NAT_OFFSET(pf, ct, dir, seq) \
3473 + (pf == NFPROTO_IPV4 ? nat_offset(ct, dir, seq) : 0)
3474 +#else
3475 +#define NAT_OFFSET(pf, ct, dir, seq) 0
3476 +#endif
3477 +
3478 static bool tcp_in_window(const struct nf_conn *ct,
3479 struct ip_ct_tcp *state,
3480 enum ip_conntrack_dir dir,
3481 @@ -506,6 +521,7 @@ static bool tcp_in_window(const struct nf_conn *ct,
3482 struct ip_ct_tcp_state *receiver = &state->seen[!dir];
3483 const struct nf_conntrack_tuple *tuple = &ct->tuplehash[dir].tuple;
3484 __u32 seq, ack, sack, end, win, swin;
3485 + s16 receiver_offset;
3486 bool res;
3487
3488 /*
3489 @@ -519,11 +535,16 @@ static bool tcp_in_window(const struct nf_conn *ct,
3490 if (receiver->flags & IP_CT_TCP_FLAG_SACK_PERM)
3491 tcp_sack(skb, dataoff, tcph, &sack);
3492
3493 + /* Take into account NAT sequence number mangling */
3494 + receiver_offset = NAT_OFFSET(pf, ct, !dir, ack - 1);
3495 + ack -= receiver_offset;
3496 + sack -= receiver_offset;
3497 +
3498 pr_debug("tcp_in_window: START\n");
3499 pr_debug("tcp_in_window: ");
3500 nf_ct_dump_tuple(tuple);
3501 - pr_debug("seq=%u ack=%u sack=%u win=%u end=%u\n",
3502 - seq, ack, sack, win, end);
3503 + pr_debug("seq=%u ack=%u+(%d) sack=%u+(%d) win=%u end=%u\n",
3504 + seq, ack, receiver_offset, sack, receiver_offset, win, end);
3505 pr_debug("tcp_in_window: sender end=%u maxend=%u maxwin=%u scale=%i "
3506 "receiver end=%u maxend=%u maxwin=%u scale=%i\n",
3507 sender->td_end, sender->td_maxend, sender->td_maxwin,
3508 @@ -613,8 +634,8 @@ static bool tcp_in_window(const struct nf_conn *ct,
3509
3510 pr_debug("tcp_in_window: ");
3511 nf_ct_dump_tuple(tuple);
3512 - pr_debug("seq=%u ack=%u sack =%u win=%u end=%u\n",
3513 - seq, ack, sack, win, end);
3514 + pr_debug("seq=%u ack=%u+(%d) sack=%u+(%d) win=%u end=%u\n",
3515 + seq, ack, receiver_offset, sack, receiver_offset, win, end);
3516 pr_debug("tcp_in_window: sender end=%u maxend=%u maxwin=%u scale=%i "
3517 "receiver end=%u maxend=%u maxwin=%u scale=%i\n",
3518 sender->td_end, sender->td_maxend, sender->td_maxwin,
3519 @@ -700,7 +721,7 @@ static bool tcp_in_window(const struct nf_conn *ct,
3520 before(seq, sender->td_maxend + 1) ?
3521 after(end, sender->td_end - receiver->td_maxwin - 1) ?
3522 before(sack, receiver->td_end + 1) ?
3523 - after(ack, receiver->td_end - MAXACKWINDOW(sender)) ? "BUG"
3524 + after(sack, receiver->td_end - MAXACKWINDOW(sender) - 1) ? "BUG"
3525 : "ACK is under the lower bound (possible overly delayed ACK)"
3526 : "ACK is over the upper bound (ACKed data not seen yet)"
3527 : "SEQ is under the lower bound (already ACKed data retransmitted)"
3528 @@ -715,39 +736,6 @@ static bool tcp_in_window(const struct nf_conn *ct,
3529 return res;
3530 }
3531
3532 -#ifdef CONFIG_NF_NAT_NEEDED
3533 -/* Update sender->td_end after NAT successfully mangled the packet */
3534 -/* Caller must linearize skb at tcp header. */
3535 -void nf_conntrack_tcp_update(const struct sk_buff *skb,
3536 - unsigned int dataoff,
3537 - struct nf_conn *ct, int dir,
3538 - s16 offset)
3539 -{
3540 - const struct tcphdr *tcph = (const void *)skb->data + dataoff;
3541 - const struct ip_ct_tcp_state *sender = &ct->proto.tcp.seen[dir];
3542 - const struct ip_ct_tcp_state *receiver = &ct->proto.tcp.seen[!dir];
3543 - __u32 end;
3544 -
3545 - end = segment_seq_plus_len(ntohl(tcph->seq), skb->len, dataoff, tcph);
3546 -
3547 - spin_lock_bh(&ct->lock);
3548 - /*
3549 - * We have to worry for the ack in the reply packet only...
3550 - */
3551 - if (ct->proto.tcp.seen[dir].td_end + offset == end)
3552 - ct->proto.tcp.seen[dir].td_end = end;
3553 - ct->proto.tcp.last_end = end;
3554 - spin_unlock_bh(&ct->lock);
3555 - pr_debug("tcp_update: sender end=%u maxend=%u maxwin=%u scale=%i "
3556 - "receiver end=%u maxend=%u maxwin=%u scale=%i\n",
3557 - sender->td_end, sender->td_maxend, sender->td_maxwin,
3558 - sender->td_scale,
3559 - receiver->td_end, receiver->td_maxend, receiver->td_maxwin,
3560 - receiver->td_scale);
3561 -}
3562 -EXPORT_SYMBOL_GPL(nf_conntrack_tcp_update);
3563 -#endif
3564 -
3565 #define TH_FIN 0x01
3566 #define TH_SYN 0x02
3567 #define TH_RST 0x04
3568 diff --git a/net/netfilter/xt_connlimit.c b/net/netfilter/xt_connlimit.c
3569 index 6809809..38f03f7 100644
3570 --- a/net/netfilter/xt_connlimit.c
3571 +++ b/net/netfilter/xt_connlimit.c
3572 @@ -103,7 +103,7 @@ static int count_them(struct xt_connlimit_data *data,
3573 const struct nf_conntrack_tuple *tuple,
3574 const union nf_inet_addr *addr,
3575 const union nf_inet_addr *mask,
3576 - const struct xt_match *match)
3577 + u_int8_t family)
3578 {
3579 const struct nf_conntrack_tuple_hash *found;
3580 struct xt_connlimit_conn *conn;
3581 @@ -113,8 +113,7 @@ static int count_them(struct xt_connlimit_data *data,
3582 bool addit = true;
3583 int matches = 0;
3584
3585 -
3586 - if (match->family == NFPROTO_IPV6)
3587 + if (family == NFPROTO_IPV6)
3588 hash = &data->iphash[connlimit_iphash6(addr, mask)];
3589 else
3590 hash = &data->iphash[connlimit_iphash(addr->ip & mask->ip)];
3591 @@ -157,8 +156,7 @@ static int count_them(struct xt_connlimit_data *data,
3592 continue;
3593 }
3594
3595 - if (same_source_net(addr, mask, &conn->tuple.src.u3,
3596 - match->family))
3597 + if (same_source_net(addr, mask, &conn->tuple.src.u3, family))
3598 /* same source network -> be counted! */
3599 ++matches;
3600 nf_ct_put(found_ct);
3601 @@ -207,7 +205,7 @@ connlimit_mt(const struct sk_buff *skb, const struct xt_match_param *par)
3602
3603 spin_lock_bh(&info->data->lock);
3604 connections = count_them(info->data, tuple_ptr, &addr,
3605 - &info->mask, par->match);
3606 + &info->mask, par->family);
3607 spin_unlock_bh(&info->data->lock);
3608
3609 if (connections < 0) {
3610 diff --git a/net/rfkill/core.c b/net/rfkill/core.c
3611 index 2fc4a17..d2438f9 100644
3612 --- a/net/rfkill/core.c
3613 +++ b/net/rfkill/core.c
3614 @@ -1180,6 +1180,7 @@ static long rfkill_fop_ioctl(struct file *file, unsigned int cmd,
3615 #endif
3616
3617 static const struct file_operations rfkill_fops = {
3618 + .owner = THIS_MODULE,
3619 .open = rfkill_fop_open,
3620 .read = rfkill_fop_read,
3621 .write = rfkill_fop_write,
3622 diff --git a/net/sched/act_pedit.c b/net/sched/act_pedit.c
3623 index 96c0ed1..6b0359a 100644
3624 --- a/net/sched/act_pedit.c
3625 +++ b/net/sched/act_pedit.c
3626 @@ -34,7 +34,7 @@ static struct tcf_hashinfo pedit_hash_info = {
3627 };
3628
3629 static const struct nla_policy pedit_policy[TCA_PEDIT_MAX + 1] = {
3630 - [TCA_PEDIT_PARMS] = { .len = sizeof(struct tcf_pedit) },
3631 + [TCA_PEDIT_PARMS] = { .len = sizeof(struct tc_pedit) },
3632 };
3633
3634 static int tcf_pedit_init(struct nlattr *nla, struct nlattr *est,
3635 diff --git a/net/sunrpc/svcsock.c b/net/sunrpc/svcsock.c
3636 index 23128ee..39e37bc 100644
3637 --- a/net/sunrpc/svcsock.c
3638 +++ b/net/sunrpc/svcsock.c
3639 @@ -110,7 +110,7 @@ static void svc_release_skb(struct svc_rqst *rqstp)
3640 rqstp->rq_xprt_ctxt = NULL;
3641
3642 dprintk("svc: service %p, releasing skb %p\n", rqstp, skb);
3643 - skb_free_datagram(svsk->sk_sk, skb);
3644 + skb_free_datagram_locked(svsk->sk_sk, skb);
3645 }
3646 }
3647
3648 @@ -537,7 +537,7 @@ static int svc_udp_recvfrom(struct svc_rqst *rqstp)
3649 printk("rpcsvc: received unknown control message:"
3650 "%d/%d\n",
3651 cmh->cmsg_level, cmh->cmsg_type);
3652 - skb_free_datagram(svsk->sk_sk, skb);
3653 + skb_free_datagram_locked(svsk->sk_sk, skb);
3654 return 0;
3655 }
3656 svc_udp_get_dest_address(rqstp, cmh);
3657 @@ -548,18 +548,18 @@ static int svc_udp_recvfrom(struct svc_rqst *rqstp)
3658 if (csum_partial_copy_to_xdr(&rqstp->rq_arg, skb)) {
3659 local_bh_enable();
3660 /* checksum error */
3661 - skb_free_datagram(svsk->sk_sk, skb);
3662 + skb_free_datagram_locked(svsk->sk_sk, skb);
3663 return 0;
3664 }
3665 local_bh_enable();
3666 - skb_free_datagram(svsk->sk_sk, skb);
3667 + skb_free_datagram_locked(svsk->sk_sk, skb);
3668 } else {
3669 /* we can use it in-place */
3670 rqstp->rq_arg.head[0].iov_base = skb->data +
3671 sizeof(struct udphdr);
3672 rqstp->rq_arg.head[0].iov_len = len;
3673 if (skb_checksum_complete(skb)) {
3674 - skb_free_datagram(svsk->sk_sk, skb);
3675 + skb_free_datagram_locked(svsk->sk_sk, skb);
3676 return 0;
3677 }
3678 rqstp->rq_xprt_ctxt = skb;
3679 diff --git a/security/integrity/ima/ima_iint.c b/security/integrity/ima/ima_iint.c
3680 index b8dd693..a4e2b1d 100644
3681 --- a/security/integrity/ima/ima_iint.c
3682 +++ b/security/integrity/ima/ima_iint.c
3683 @@ -58,11 +58,11 @@ struct ima_iint_cache *ima_iint_insert(struct inode *inode)
3684
3685 if (!ima_initialized)
3686 return iint;
3687 - iint = kmem_cache_alloc(iint_cache, GFP_KERNEL);
3688 + iint = kmem_cache_alloc(iint_cache, GFP_NOFS);
3689 if (!iint)
3690 return iint;
3691
3692 - rc = radix_tree_preload(GFP_KERNEL);
3693 + rc = radix_tree_preload(GFP_NOFS);
3694 if (rc < 0)
3695 goto out;
3696
3697 diff --git a/sound/arm/aaci.c b/sound/arm/aaci.c
3698 index dc78272..dbb05b7 100644
3699 --- a/sound/arm/aaci.c
3700 +++ b/sound/arm/aaci.c
3701 @@ -504,6 +504,10 @@ static int aaci_pcm_hw_params(struct snd_pcm_substream *substream,
3702 int err;
3703
3704 aaci_pcm_hw_free(substream);
3705 + if (aacirun->pcm_open) {
3706 + snd_ac97_pcm_close(aacirun->pcm);
3707 + aacirun->pcm_open = 0;
3708 + }
3709
3710 err = devdma_hw_alloc(NULL, substream,
3711 params_buffer_bytes(params));
3712 @@ -517,7 +521,7 @@ static int aaci_pcm_hw_params(struct snd_pcm_substream *substream,
3713 else
3714 err = snd_ac97_pcm_open(aacirun->pcm, params_rate(params),
3715 params_channels(params),
3716 - aacirun->pcm->r[1].slots);
3717 + aacirun->pcm->r[0].slots);
3718
3719 if (err)
3720 goto out;
3721 diff --git a/sound/core/rawmidi.c b/sound/core/rawmidi.c
3722 index 473247c..70d6f25 100644
3723 --- a/sound/core/rawmidi.c
3724 +++ b/sound/core/rawmidi.c
3725 @@ -248,7 +248,8 @@ static int assign_substream(struct snd_rawmidi *rmidi, int subdevice,
3726 list_for_each_entry(substream, &s->substreams, list) {
3727 if (substream->opened) {
3728 if (stream == SNDRV_RAWMIDI_STREAM_INPUT ||
3729 - !(mode & SNDRV_RAWMIDI_LFLG_APPEND))
3730 + !(mode & SNDRV_RAWMIDI_LFLG_APPEND) ||
3731 + !substream->append)
3732 continue;
3733 }
3734 if (subdevice < 0 || subdevice == substream->number) {
3735 @@ -266,17 +267,21 @@ static int open_substream(struct snd_rawmidi *rmidi,
3736 {
3737 int err;
3738
3739 - err = snd_rawmidi_runtime_create(substream);
3740 - if (err < 0)
3741 - return err;
3742 - err = substream->ops->open(substream);
3743 - if (err < 0)
3744 - return err;
3745 - substream->opened = 1;
3746 - if (substream->use_count++ == 0)
3747 - substream->active_sensing = 1;
3748 - if (mode & SNDRV_RAWMIDI_LFLG_APPEND)
3749 - substream->append = 1;
3750 + if (substream->use_count == 0) {
3751 + err = snd_rawmidi_runtime_create(substream);
3752 + if (err < 0)
3753 + return err;
3754 + err = substream->ops->open(substream);
3755 + if (err < 0) {
3756 + snd_rawmidi_runtime_free(substream);
3757 + return err;
3758 + }
3759 + substream->opened = 1;
3760 + substream->active_sensing = 0;
3761 + if (mode & SNDRV_RAWMIDI_LFLG_APPEND)
3762 + substream->append = 1;
3763 + }
3764 + substream->use_count++;
3765 rmidi->streams[substream->stream].substream_opened++;
3766 return 0;
3767 }
3768 @@ -297,27 +302,27 @@ static int rawmidi_open_priv(struct snd_rawmidi *rmidi, int subdevice, int mode,
3769 SNDRV_RAWMIDI_STREAM_INPUT,
3770 mode, &sinput);
3771 if (err < 0)
3772 - goto __error;
3773 + return err;
3774 }
3775 if (mode & SNDRV_RAWMIDI_LFLG_OUTPUT) {
3776 err = assign_substream(rmidi, subdevice,
3777 SNDRV_RAWMIDI_STREAM_OUTPUT,
3778 mode, &soutput);
3779 if (err < 0)
3780 - goto __error;
3781 + return err;
3782 }
3783
3784 if (sinput) {
3785 err = open_substream(rmidi, sinput, mode);
3786 if (err < 0)
3787 - goto __error;
3788 + return err;
3789 }
3790 if (soutput) {
3791 err = open_substream(rmidi, soutput, mode);
3792 if (err < 0) {
3793 if (sinput)
3794 close_substream(rmidi, sinput, 0);
3795 - goto __error;
3796 + return err;
3797 }
3798 }
3799
3800 @@ -325,13 +330,6 @@ static int rawmidi_open_priv(struct snd_rawmidi *rmidi, int subdevice, int mode,
3801 rfile->input = sinput;
3802 rfile->output = soutput;
3803 return 0;
3804 -
3805 - __error:
3806 - if (sinput && sinput->runtime)
3807 - snd_rawmidi_runtime_free(sinput);
3808 - if (soutput && soutput->runtime)
3809 - snd_rawmidi_runtime_free(soutput);
3810 - return err;
3811 }
3812
3813 /* called from sound/core/seq/seq_midi.c */
3814 diff --git a/sound/core/seq/seq_midi.c b/sound/core/seq/seq_midi.c
3815 index 4d26146..90356b8 100644
3816 --- a/sound/core/seq/seq_midi.c
3817 +++ b/sound/core/seq/seq_midi.c
3818 @@ -236,6 +236,7 @@ static int midisynth_use(void *private_data, struct snd_seq_port_subscribe *info
3819 memset(&params, 0, sizeof(params));
3820 params.avail_min = 1;
3821 params.buffer_size = output_buffer_size;
3822 + params.no_active_sensing = 1;
3823 if ((err = snd_rawmidi_output_params(msynth->output_rfile.output, &params)) < 0) {
3824 snd_rawmidi_kernel_release(&msynth->output_rfile);
3825 return err;
3826 diff --git a/sound/pci/hda/patch_sigmatel.c b/sound/pci/hda/patch_sigmatel.c
3827 index 6990cfc..285b1e2 100644
3828 --- a/sound/pci/hda/patch_sigmatel.c
3829 +++ b/sound/pci/hda/patch_sigmatel.c
3830 @@ -1817,6 +1817,8 @@ static struct snd_pci_quirk stac92hd73xx_cfg_tbl[] = {
3831 "Dell Studio 17", STAC_DELL_M6_DMIC),
3832 SND_PCI_QUIRK(PCI_VENDOR_ID_DELL, 0x02be,
3833 "Dell Studio 1555", STAC_DELL_M6_DMIC),
3834 + SND_PCI_QUIRK(PCI_VENDOR_ID_DELL, 0x02bd,
3835 + "Dell Studio 1557", STAC_DELL_M6_DMIC),
3836 {} /* terminator */
3837 };
3838
3839 diff --git a/sound/soc/codecs/tlv320aic23.c b/sound/soc/codecs/tlv320aic23.c
3840 index 0b8dcb5..1365de0 100644
3841 --- a/sound/soc/codecs/tlv320aic23.c
3842 +++ b/sound/soc/codecs/tlv320aic23.c
3843 @@ -625,11 +625,10 @@ static int tlv320aic23_resume(struct platform_device *pdev)
3844 {
3845 struct snd_soc_device *socdev = platform_get_drvdata(pdev);
3846 struct snd_soc_codec *codec = socdev->card->codec;
3847 - int i;
3848 u16 reg;
3849
3850 /* Sync reg_cache with the hardware */
3851 - for (reg = 0; reg < ARRAY_SIZE(tlv320aic23_reg); i++) {
3852 + for (reg = 0; reg < TLV320AIC23_RESET; reg++) {
3853 u16 val = tlv320aic23_read_reg_cache(codec, reg);
3854 tlv320aic23_write(codec, reg, val);
3855 }
3856 diff --git a/sound/soc/soc-dapm.c b/sound/soc/soc-dapm.c
3857 index 21c6907..4aba33f 100644
3858 --- a/sound/soc/soc-dapm.c
3859 +++ b/sound/soc/soc-dapm.c
3860 @@ -774,9 +774,19 @@ static int dapm_power_widgets(struct snd_soc_codec *codec, int event)
3861 if (!w->power_check)
3862 continue;
3863
3864 - power = w->power_check(w);
3865 - if (power)
3866 - sys_power = 1;
3867 + /* If we're suspending then pull down all the
3868 + * power. */
3869 + switch (event) {
3870 + case SND_SOC_DAPM_STREAM_SUSPEND:
3871 + power = 0;
3872 + break;
3873 +
3874 + default:
3875 + power = w->power_check(w);
3876 + if (power)
3877 + sys_power = 1;
3878 + break;
3879 + }
3880
3881 if (w->power == power)
3882 continue;
3883 diff --git a/sound/usb/usbaudio.h b/sound/usb/usbaudio.h
3884 index 8e7f789..e9a3a9d 100644
3885 --- a/sound/usb/usbaudio.h
3886 +++ b/sound/usb/usbaudio.h
3887 @@ -210,7 +210,7 @@ struct snd_usb_midi_endpoint_info {
3888 /*
3889 */
3890
3891 -#define combine_word(s) ((*s) | ((unsigned int)(s)[1] << 8))
3892 +#define combine_word(s) ((*(s)) | ((unsigned int)(s)[1] << 8))
3893 #define combine_triple(s) (combine_word(s) | ((unsigned int)(s)[2] << 16))
3894 #define combine_quad(s) (combine_triple(s) | ((unsigned int)(s)[3] << 24))
3895

  ViewVC Help
Powered by ViewVC 1.1.20