Magellan Linux

Annotation of /trunk/kernel26-magellan/patches-2.6.31-r4/0106-2.6.31.7-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 968 - (hide annotations) (download)
Fri Jan 1 14:52:51 2010 UTC (14 years, 4 months ago) by niro
File size: 133338 byte(s)
-2.6.31-magellan-r4:
-updated to linux-2.6.31.9

1 niro 968 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