Magellan Linux

Annotation of /trunk/kernel-lts/patches-3.4/0125-3.4.26-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2045 - (hide annotations) (download)
Mon Jan 28 08:16:30 2013 UTC (11 years, 3 months ago) by niro
File size: 228079 byte(s)
-linux-3.4.26
1 niro 2045 diff --git a/Documentation/ABI/testing/sysfs-bus-rbd b/Documentation/ABI/testing/sysfs-bus-rbd
2     index dbedafb..eb781c6 100644
3     --- a/Documentation/ABI/testing/sysfs-bus-rbd
4     +++ b/Documentation/ABI/testing/sysfs-bus-rbd
5     @@ -51,12 +51,6 @@ current_snap
6    
7     The current snapshot for which the device is mapped.
8    
9     -create_snap
10     -
11     - Create a snapshot:
12     -
13     - $ echo <snap-name> > /sys/bus/rbd/devices/<dev-id>/snap_create
14     -
15     snap_*
16    
17     A directory per each snapshot
18     diff --git a/arch/arm/mach-pxa/include/mach/mfp-pxa27x.h b/arch/arm/mach-pxa/include/mach/mfp-pxa27x.h
19     index a658672..b4eb3da 100644
20     --- a/arch/arm/mach-pxa/include/mach/mfp-pxa27x.h
21     +++ b/arch/arm/mach-pxa/include/mach/mfp-pxa27x.h
22     @@ -462,6 +462,9 @@
23     GPIO76_LCD_PCLK, \
24     GPIO77_LCD_BIAS
25    
26     +/* these enable a work-around for a hw bug in pxa27x during ac97 warm reset */
27     +#define GPIO113_AC97_nRESET_GPIO_HIGH MFP_CFG_OUT(GPIO113, AF0, DEFAULT)
28     +#define GPIO95_AC97_nRESET_GPIO_HIGH MFP_CFG_OUT(GPIO95, AF0, DEFAULT)
29    
30     extern int keypad_set_wake(unsigned int on);
31     #endif /* __ASM_ARCH_MFP_PXA27X_H */
32     diff --git a/arch/arm/mach-pxa/pxa27x.c b/arch/arm/mach-pxa/pxa27x.c
33     index 4726c24..a2fe795 100644
34     --- a/arch/arm/mach-pxa/pxa27x.c
35     +++ b/arch/arm/mach-pxa/pxa27x.c
36     @@ -47,9 +47,9 @@ void pxa27x_clear_otgph(void)
37     EXPORT_SYMBOL(pxa27x_clear_otgph);
38    
39     static unsigned long ac97_reset_config[] = {
40     - GPIO113_GPIO,
41     + GPIO113_AC97_nRESET_GPIO_HIGH,
42     GPIO113_AC97_nRESET,
43     - GPIO95_GPIO,
44     + GPIO95_AC97_nRESET_GPIO_HIGH,
45     GPIO95_AC97_nRESET,
46     };
47    
48     diff --git a/arch/mips/kernel/process.c b/arch/mips/kernel/process.c
49     index e9a5fd7..69b17a9 100644
50     --- a/arch/mips/kernel/process.c
51     +++ b/arch/mips/kernel/process.c
52     @@ -72,9 +72,7 @@ void __noreturn cpu_idle(void)
53     }
54     }
55     #ifdef CONFIG_HOTPLUG_CPU
56     - if (!cpu_online(cpu) && !cpu_isset(cpu, cpu_callin_map) &&
57     - (system_state == SYSTEM_RUNNING ||
58     - system_state == SYSTEM_BOOTING))
59     + if (!cpu_online(cpu) && !cpu_isset(cpu, cpu_callin_map))
60     play_dead();
61     #endif
62     rcu_idle_exit();
63     diff --git a/arch/powerpc/kernel/head_64.S b/arch/powerpc/kernel/head_64.S
64     index 58bddee..9e07bd0 100644
65     --- a/arch/powerpc/kernel/head_64.S
66     +++ b/arch/powerpc/kernel/head_64.S
67     @@ -422,7 +422,7 @@ _STATIC(__after_prom_start)
68     tovirt(r6,r6) /* on booke, we already run at PAGE_OFFSET */
69     #endif
70    
71     -#ifdef CONFIG_CRASH_DUMP
72     +#ifdef CONFIG_RELOCATABLE
73     /*
74     * Check if the kernel has to be running as relocatable kernel based on the
75     * variable __run_at_load, if it is set the kernel is treated as relocatable
76     diff --git a/arch/powerpc/kernel/time.c b/arch/powerpc/kernel/time.c
77     index 730e69c..e7dba0b 100644
78     --- a/arch/powerpc/kernel/time.c
79     +++ b/arch/powerpc/kernel/time.c
80     @@ -749,13 +749,8 @@ void update_vsyscall(struct timespec *wall_time, struct timespec *wtm,
81    
82     void update_vsyscall_tz(void)
83     {
84     - /* Make userspace gettimeofday spin until we're done. */
85     - ++vdso_data->tb_update_count;
86     - smp_mb();
87     vdso_data->tz_minuteswest = sys_tz.tz_minuteswest;
88     vdso_data->tz_dsttime = sys_tz.tz_dsttime;
89     - smp_mb();
90     - ++vdso_data->tb_update_count;
91     }
92    
93     static void __init clocksource_init(void)
94     diff --git a/arch/powerpc/kvm/44x_emulate.c b/arch/powerpc/kvm/44x_emulate.c
95     index 549bb2c..ded8a1a 100644
96     --- a/arch/powerpc/kvm/44x_emulate.c
97     +++ b/arch/powerpc/kvm/44x_emulate.c
98     @@ -79,6 +79,7 @@ int kvmppc_core_emulate_op(struct kvm_run *run, struct kvm_vcpu *vcpu,
99     run->dcr.dcrn = dcrn;
100     run->dcr.data = 0;
101     run->dcr.is_write = 0;
102     + vcpu->arch.dcr_is_write = 0;
103     vcpu->arch.io_gpr = rt;
104     vcpu->arch.dcr_needed = 1;
105     kvmppc_account_exit(vcpu, DCR_EXITS);
106     @@ -100,6 +101,7 @@ int kvmppc_core_emulate_op(struct kvm_run *run, struct kvm_vcpu *vcpu,
107     run->dcr.dcrn = dcrn;
108     run->dcr.data = kvmppc_get_gpr(vcpu, rs);
109     run->dcr.is_write = 1;
110     + vcpu->arch.dcr_is_write = 1;
111     vcpu->arch.dcr_needed = 1;
112     kvmppc_account_exit(vcpu, DCR_EXITS);
113     emulated = EMULATE_DO_DCR;
114     diff --git a/arch/powerpc/platforms/40x/ppc40x_simple.c b/arch/powerpc/platforms/40x/ppc40x_simple.c
115     index 9761206..f0eee75 100644
116     --- a/arch/powerpc/platforms/40x/ppc40x_simple.c
117     +++ b/arch/powerpc/platforms/40x/ppc40x_simple.c
118     @@ -57,7 +57,8 @@ static const char *board[] __initdata = {
119     "amcc,makalu",
120     "apm,klondike",
121     "est,hotfoot",
122     - "plathome,obs600"
123     + "plathome,obs600",
124     + NULL
125     };
126    
127     static int __init ppc40x_probe(void)
128     diff --git a/arch/x86/kernel/cpu/amd.c b/arch/x86/kernel/cpu/amd.c
129     index 6b4976b..a9c8a46 100644
130     --- a/arch/x86/kernel/cpu/amd.c
131     +++ b/arch/x86/kernel/cpu/amd.c
132     @@ -612,6 +612,20 @@ static void __cpuinit init_amd(struct cpuinfo_x86 *c)
133     }
134     }
135    
136     + /*
137     + * The way access filter has a performance penalty on some workloads.
138     + * Disable it on the affected CPUs.
139     + */
140     + if ((c->x86 == 0x15) &&
141     + (c->x86_model >= 0x02) && (c->x86_model < 0x20)) {
142     + u64 val;
143     +
144     + if (!rdmsrl_safe(0xc0011021, &val) && !(val & 0x1E)) {
145     + val |= 0x1E;
146     + checking_wrmsrl(0xc0011021, val);
147     + }
148     + }
149     +
150     cpu_detect_cache_sizes(c);
151    
152     /* Multi core CPU? */
153     diff --git a/drivers/acpi/scan.c b/drivers/acpi/scan.c
154     index bd3199c..619a2e4 100644
155     --- a/drivers/acpi/scan.c
156     +++ b/drivers/acpi/scan.c
157     @@ -789,8 +789,8 @@ acpi_bus_extract_wakeup_device_power_package(acpi_handle handle,
158     static void acpi_bus_set_run_wake_flags(struct acpi_device *device)
159     {
160     struct acpi_device_id button_device_ids[] = {
161     - {"PNP0C0D", 0},
162     {"PNP0C0C", 0},
163     + {"PNP0C0D", 0},
164     {"PNP0C0E", 0},
165     {"", 0},
166     };
167     @@ -802,6 +802,11 @@ static void acpi_bus_set_run_wake_flags(struct acpi_device *device)
168     /* Power button, Lid switch always enable wakeup */
169     if (!acpi_match_device_ids(device, button_device_ids)) {
170     device->wakeup.flags.run_wake = 1;
171     + if (!acpi_match_device_ids(device, &button_device_ids[1])) {
172     + /* Do not use Lid/sleep button for S5 wakeup */
173     + if (device->wakeup.sleep_state == ACPI_STATE_S5)
174     + device->wakeup.sleep_state = ACPI_STATE_S4;
175     + }
176     device_set_wakeup_capable(&device->dev, true);
177     return;
178     }
179     diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
180     index cf4837f..4b4caa3 100644
181     --- a/drivers/ata/libata-core.c
182     +++ b/drivers/ata/libata-core.c
183     @@ -2536,6 +2536,7 @@ int ata_bus_probe(struct ata_port *ap)
184     * bus as we may be talking too fast.
185     */
186     dev->pio_mode = XFER_PIO_0;
187     + dev->dma_mode = 0xff;
188    
189     /* If the controller has a pio mode setup function
190     * then use it to set the chipset to rights. Don't
191     diff --git a/drivers/ata/libata-eh.c b/drivers/ata/libata-eh.c
192     index d1fbd59..e47c224 100644
193     --- a/drivers/ata/libata-eh.c
194     +++ b/drivers/ata/libata-eh.c
195     @@ -2600,6 +2600,7 @@ int ata_eh_reset(struct ata_link *link, int classify,
196     * bus as we may be talking too fast.
197     */
198     dev->pio_mode = XFER_PIO_0;
199     + dev->dma_mode = 0xff;
200    
201     /* If the controller has a pio mode setup function
202     * then use it to set the chipset to rights. Don't
203     diff --git a/drivers/ata/libata-scsi.c b/drivers/ata/libata-scsi.c
204     index 2222635..15863a4 100644
205     --- a/drivers/ata/libata-scsi.c
206     +++ b/drivers/ata/libata-scsi.c
207     @@ -309,7 +309,8 @@ ata_scsi_activity_show(struct device *dev, struct device_attribute *attr,
208     struct ata_port *ap = ata_shost_to_port(sdev->host);
209     struct ata_device *atadev = ata_scsi_find_dev(ap, sdev);
210    
211     - if (ap->ops->sw_activity_show && (ap->flags & ATA_FLAG_SW_ACTIVITY))
212     + if (atadev && ap->ops->sw_activity_show &&
213     + (ap->flags & ATA_FLAG_SW_ACTIVITY))
214     return ap->ops->sw_activity_show(atadev, buf);
215     return -EINVAL;
216     }
217     @@ -324,7 +325,8 @@ ata_scsi_activity_store(struct device *dev, struct device_attribute *attr,
218     enum sw_activity val;
219     int rc;
220    
221     - if (ap->ops->sw_activity_store && (ap->flags & ATA_FLAG_SW_ACTIVITY)) {
222     + if (atadev && ap->ops->sw_activity_store &&
223     + (ap->flags & ATA_FLAG_SW_ACTIVITY)) {
224     val = simple_strtoul(buf, NULL, 0);
225     switch (val) {
226     case OFF: case BLINK_ON: case BLINK_OFF:
227     diff --git a/drivers/ata/sata_promise.c b/drivers/ata/sata_promise.c
228     index 000fcc9..ef6e328 100644
229     --- a/drivers/ata/sata_promise.c
230     +++ b/drivers/ata/sata_promise.c
231     @@ -147,6 +147,10 @@ struct pdc_port_priv {
232     dma_addr_t pkt_dma;
233     };
234    
235     +struct pdc_host_priv {
236     + spinlock_t hard_reset_lock;
237     +};
238     +
239     static int pdc_sata_scr_read(struct ata_link *link, unsigned int sc_reg, u32 *val);
240     static int pdc_sata_scr_write(struct ata_link *link, unsigned int sc_reg, u32 val);
241     static int pdc_ata_init_one(struct pci_dev *pdev, const struct pci_device_id *ent);
242     @@ -801,9 +805,10 @@ static void pdc_hard_reset_port(struct ata_port *ap)
243     void __iomem *host_mmio = ap->host->iomap[PDC_MMIO_BAR];
244     void __iomem *pcictl_b1_mmio = host_mmio + PDC_PCI_CTL + 1;
245     unsigned int ata_no = pdc_ata_port_to_ata_no(ap);
246     + struct pdc_host_priv *hpriv = ap->host->private_data;
247     u8 tmp;
248    
249     - spin_lock(&ap->host->lock);
250     + spin_lock(&hpriv->hard_reset_lock);
251    
252     tmp = readb(pcictl_b1_mmio);
253     tmp &= ~(0x10 << ata_no);
254     @@ -814,7 +819,7 @@ static void pdc_hard_reset_port(struct ata_port *ap)
255     writeb(tmp, pcictl_b1_mmio);
256     readb(pcictl_b1_mmio); /* flush */
257    
258     - spin_unlock(&ap->host->lock);
259     + spin_unlock(&hpriv->hard_reset_lock);
260     }
261    
262     static int pdc_sata_hardreset(struct ata_link *link, unsigned int *class,
263     @@ -1182,6 +1187,7 @@ static int pdc_ata_init_one(struct pci_dev *pdev,
264     const struct ata_port_info *pi = &pdc_port_info[ent->driver_data];
265     const struct ata_port_info *ppi[PDC_MAX_PORTS];
266     struct ata_host *host;
267     + struct pdc_host_priv *hpriv;
268     void __iomem *host_mmio;
269     int n_ports, i, rc;
270     int is_sataii_tx4;
271     @@ -1218,6 +1224,11 @@ static int pdc_ata_init_one(struct pci_dev *pdev,
272     dev_err(&pdev->dev, "failed to allocate host\n");
273     return -ENOMEM;
274     }
275     + hpriv = devm_kzalloc(&pdev->dev, sizeof *hpriv, GFP_KERNEL);
276     + if (!hpriv)
277     + return -ENOMEM;
278     + spin_lock_init(&hpriv->hard_reset_lock);
279     + host->private_data = hpriv;
280     host->iomap = pcim_iomap_table(pdev);
281    
282     is_sataii_tx4 = pdc_is_sataii_tx4(pi->flags);
283     diff --git a/drivers/base/regmap/regmap-debugfs.c b/drivers/base/regmap/regmap-debugfs.c
284     index 251eb70..8ab1eab 100644
285     --- a/drivers/base/regmap/regmap-debugfs.c
286     +++ b/drivers/base/regmap/regmap-debugfs.c
287     @@ -90,7 +90,7 @@ static ssize_t regmap_map_read_file(struct file *file, char __user *user_buf,
288     /* If we're in the region the user is trying to read */
289     if (p >= *ppos) {
290     /* ...but not beyond it */
291     - if (buf_pos >= count - 1 - tot_len)
292     + if (buf_pos + 1 + tot_len >= count)
293     break;
294    
295     /* Format the register */
296     diff --git a/drivers/bcma/driver_mips.c b/drivers/bcma/driver_mips.c
297     index c3e9dff..041fddf 100644
298     --- a/drivers/bcma/driver_mips.c
299     +++ b/drivers/bcma/driver_mips.c
300     @@ -115,7 +115,7 @@ static void bcma_core_mips_set_irq(struct bcma_device *dev, unsigned int irq)
301     bcma_read32(mdev, BCMA_MIPS_MIPS74K_INTMASK(0)) &
302     ~(1 << irqflag));
303     else
304     - bcma_write32(mdev, BCMA_MIPS_MIPS74K_INTMASK(irq), 0);
305     + bcma_write32(mdev, BCMA_MIPS_MIPS74K_INTMASK(oldirq), 0);
306    
307     /* assign the new one */
308     if (irq == 0) {
309     diff --git a/drivers/block/aoe/aoe.h b/drivers/block/aoe/aoe.h
310     index db195ab..e49ddd0 100644
311     --- a/drivers/block/aoe/aoe.h
312     +++ b/drivers/block/aoe/aoe.h
313     @@ -1,5 +1,5 @@
314     /* Copyright (c) 2007 Coraid, Inc. See COPYING for GPL terms. */
315     -#define VERSION "47"
316     +#define VERSION "47q"
317     #define AOE_MAJOR 152
318     #define DEVICE_NAME "aoe"
319    
320     diff --git a/drivers/block/aoe/aoeblk.c b/drivers/block/aoe/aoeblk.c
321     index 321de7b..7eca463 100644
322     --- a/drivers/block/aoe/aoeblk.c
323     +++ b/drivers/block/aoe/aoeblk.c
324     @@ -276,8 +276,6 @@ aoeblk_gdalloc(void *vp)
325     goto err_mempool;
326     blk_queue_make_request(d->blkq, aoeblk_make_request);
327     d->blkq->backing_dev_info.name = "aoe";
328     - if (bdi_init(&d->blkq->backing_dev_info))
329     - goto err_blkq;
330     spin_lock_irqsave(&d->lock, flags);
331     gd->major = AOE_MAJOR;
332     gd->first_minor = d->sysminor * AOE_PARTITIONS;
333     @@ -298,9 +296,6 @@ aoeblk_gdalloc(void *vp)
334     aoedisk_add_sysfs(d);
335     return;
336    
337     -err_blkq:
338     - blk_cleanup_queue(d->blkq);
339     - d->blkq = NULL;
340     err_mempool:
341     mempool_destroy(d->bufpool);
342     err_disk:
343     diff --git a/drivers/block/rbd.c b/drivers/block/rbd.c
344     index 7b33136..cba3d02 100644
345     --- a/drivers/block/rbd.c
346     +++ b/drivers/block/rbd.c
347     @@ -71,7 +71,7 @@
348     #define DEV_NAME_LEN 32
349     #define MAX_INT_FORMAT_WIDTH ((5 * sizeof (int)) / 2 + 1)
350    
351     -#define RBD_NOTIFY_TIMEOUT_DEFAULT 10
352     +#define RBD_READ_ONLY_DEFAULT false
353    
354     /*
355     * block device image metadata (in-memory version)
356     @@ -94,7 +94,7 @@ struct rbd_image_header {
357     };
358    
359     struct rbd_options {
360     - int notify_timeout;
361     + bool read_only;
362     };
363    
364     /*
365     @@ -174,9 +174,13 @@ struct rbd_device {
366    
367     /* protects updating the header */
368     struct rw_semaphore header_rwsem;
369     + /* name of the snapshot this device reads from */
370     char snap_name[RBD_MAX_SNAP_NAME_LEN];
371     + /* id of the snapshot this device reads from */
372     u64 snap_id; /* current snapshot id */
373     - int read_only;
374     + /* whether the snap_id this device reads from still exists */
375     + bool snap_exists;
376     + bool read_only;
377    
378     struct list_head node;
379    
380     @@ -185,6 +189,7 @@ struct rbd_device {
381    
382     /* sysfs related */
383     struct device dev;
384     + unsigned long open_count;
385     };
386    
387     static DEFINE_MUTEX(ctl_mutex); /* Serialize open/close/setup/teardown */
388     @@ -197,10 +202,6 @@ static DEFINE_SPINLOCK(rbd_client_list_lock);
389    
390     static int __rbd_init_snaps_header(struct rbd_device *rbd_dev);
391     static void rbd_dev_release(struct device *dev);
392     -static ssize_t rbd_snap_add(struct device *dev,
393     - struct device_attribute *attr,
394     - const char *buf,
395     - size_t count);
396     static void __rbd_remove_snap_dev(struct rbd_device *rbd_dev,
397     struct rbd_snap *snap);
398    
399     @@ -246,13 +247,15 @@ static int rbd_open(struct block_device *bdev, fmode_t mode)
400     {
401     struct rbd_device *rbd_dev = bdev->bd_disk->private_data;
402    
403     - rbd_get_dev(rbd_dev);
404     -
405     - set_device_ro(bdev, rbd_dev->read_only);
406     -
407     if ((mode & FMODE_WRITE) && rbd_dev->read_only)
408     return -EROFS;
409    
410     + mutex_lock_nested(&ctl_mutex, SINGLE_DEPTH_NESTING);
411     + rbd_get_dev(rbd_dev);
412     + set_device_ro(bdev, rbd_dev->read_only);
413     + rbd_dev->open_count++;
414     + mutex_unlock(&ctl_mutex);
415     +
416     return 0;
417     }
418    
419     @@ -260,7 +263,11 @@ static int rbd_release(struct gendisk *disk, fmode_t mode)
420     {
421     struct rbd_device *rbd_dev = disk->private_data;
422    
423     + mutex_lock_nested(&ctl_mutex, SINGLE_DEPTH_NESTING);
424     + BUG_ON(!rbd_dev->open_count);
425     + rbd_dev->open_count--;
426     rbd_put_dev(rbd_dev);
427     + mutex_unlock(&ctl_mutex);
428    
429     return 0;
430     }
431     @@ -342,17 +349,24 @@ static struct rbd_client *__rbd_client_find(struct ceph_options *opt)
432     * mount options
433     */
434     enum {
435     - Opt_notify_timeout,
436     Opt_last_int,
437     /* int args above */
438     Opt_last_string,
439     /* string args above */
440     + Opt_read_only,
441     + Opt_read_write,
442     + /* Boolean args above */
443     + Opt_last_bool,
444     };
445    
446     static match_table_t rbdopt_tokens = {
447     - {Opt_notify_timeout, "notify_timeout=%d"},
448     /* int args above */
449     /* string args above */
450     + {Opt_read_only, "read_only"},
451     + {Opt_read_only, "ro"}, /* Alternate spelling */
452     + {Opt_read_write, "read_write"},
453     + {Opt_read_write, "rw"}, /* Alternate spelling */
454     + /* Boolean args above */
455     {-1, NULL}
456     };
457    
458     @@ -377,13 +391,18 @@ static int parse_rbd_opts_token(char *c, void *private)
459     } else if (token > Opt_last_int && token < Opt_last_string) {
460     dout("got string token %d val %s\n", token,
461     argstr[0].from);
462     + } else if (token > Opt_last_string && token < Opt_last_bool) {
463     + dout("got Boolean token %d\n", token);
464     } else {
465     dout("got token %d\n", token);
466     }
467    
468     switch (token) {
469     - case Opt_notify_timeout:
470     - rbdopt->notify_timeout = intval;
471     + case Opt_read_only:
472     + rbdopt->read_only = true;
473     + break;
474     + case Opt_read_write:
475     + rbdopt->read_only = false;
476     break;
477     default:
478     BUG_ON(token);
479     @@ -407,7 +426,7 @@ static struct rbd_client *rbd_get_client(const char *mon_addr,
480     if (!rbd_opts)
481     return ERR_PTR(-ENOMEM);
482    
483     - rbd_opts->notify_timeout = RBD_NOTIFY_TIMEOUT_DEFAULT;
484     + rbd_opts->read_only = RBD_READ_ONLY_DEFAULT;
485    
486     opt = ceph_parse_options(options, mon_addr,
487     mon_addr + mon_addr_len,
488     @@ -590,7 +609,8 @@ static int rbd_header_set_snap(struct rbd_device *dev, u64 *size)
489     else
490     snapc->seq = 0;
491     dev->snap_id = CEPH_NOSNAP;
492     - dev->read_only = 0;
493     + dev->snap_exists = false;
494     + dev->read_only = dev->rbd_client->rbd_opts->read_only;
495     if (size)
496     *size = header->image_size;
497     } else {
498     @@ -598,7 +618,8 @@ static int rbd_header_set_snap(struct rbd_device *dev, u64 *size)
499     if (ret < 0)
500     goto done;
501     dev->snap_id = snapc->seq;
502     - dev->read_only = 1;
503     + dev->snap_exists = true;
504     + dev->read_only = true; /* No choice for snapshots */
505     }
506    
507     ret = 0;
508     @@ -609,7 +630,7 @@ done:
509    
510     static void rbd_header_free(struct rbd_image_header *header)
511     {
512     - kfree(header->snapc);
513     + ceph_put_snap_context(header->snapc);
514     kfree(header->snap_names);
515     kfree(header->snap_sizes);
516     }
517     @@ -887,13 +908,10 @@ static int rbd_do_request(struct request *rq,
518    
519     dout("rbd_do_request obj=%s ofs=%lld len=%lld\n", obj, len, ofs);
520    
521     - down_read(&dev->header_rwsem);
522     -
523     osdc = &dev->rbd_client->client->osdc;
524     req = ceph_osdc_alloc_request(osdc, flags, snapc, ops,
525     false, GFP_NOIO, pages, bio);
526     if (!req) {
527     - up_read(&dev->header_rwsem);
528     ret = -ENOMEM;
529     goto done_pages;
530     }
531     @@ -920,15 +938,15 @@ static int rbd_do_request(struct request *rq,
532     layout->fl_object_size = cpu_to_le32(1 << RBD_MAX_OBJ_ORDER);
533     layout->fl_pg_preferred = cpu_to_le32(-1);
534     layout->fl_pg_pool = cpu_to_le32(dev->poolid);
535     - ceph_calc_raw_layout(osdc, layout, snapid, ofs, &len, &bno,
536     - req, ops);
537     + ret = ceph_calc_raw_layout(osdc, layout, snapid, ofs, &len, &bno,
538     + req, ops);
539     + BUG_ON(ret != 0);
540    
541     ceph_osdc_build_request(req, ofs, &len,
542     ops,
543     snapc,
544     &mtime,
545     req->r_oid, req->r_oid_len);
546     - up_read(&dev->header_rwsem);
547    
548     if (linger_req) {
549     ceph_osdc_set_request_linger(osdc, req);
550     @@ -1193,7 +1211,7 @@ static int rbd_req_sync_notify_ack(struct rbd_device *dev,
551     if (ret < 0)
552     return ret;
553    
554     - ops[0].watch.ver = cpu_to_le64(dev->header.obj_version);
555     + ops[0].watch.ver = cpu_to_le64(ver);
556     ops[0].watch.cookie = notify_id;
557     ops[0].watch.flag = 0;
558    
559     @@ -1213,6 +1231,7 @@ static int rbd_req_sync_notify_ack(struct rbd_device *dev,
560     static void rbd_watch_cb(u64 ver, u64 notify_id, u8 opcode, void *data)
561     {
562     struct rbd_device *dev = (struct rbd_device *)data;
563     + u64 hver;
564     int rc;
565    
566     if (!dev)
567     @@ -1222,12 +1241,13 @@ static void rbd_watch_cb(u64 ver, u64 notify_id, u8 opcode, void *data)
568     notify_id, (int)opcode);
569     mutex_lock_nested(&ctl_mutex, SINGLE_DEPTH_NESTING);
570     rc = __rbd_update_snaps(dev);
571     + hver = dev->header.obj_version;
572     mutex_unlock(&ctl_mutex);
573     if (rc)
574     pr_warning(RBD_DRV_NAME "%d got notification but failed to "
575     " update snaps: %d\n", dev->major, rc);
576    
577     - rbd_req_sync_notify_ack(dev, ver, notify_id, dev->obj_md_name);
578     + rbd_req_sync_notify_ack(dev, hver, notify_id, dev->obj_md_name);
579     }
580    
581     /*
582     @@ -1304,71 +1324,7 @@ static int rbd_req_sync_unwatch(struct rbd_device *dev,
583     return ret;
584     }
585    
586     -struct rbd_notify_info {
587     - struct rbd_device *dev;
588     -};
589     -
590     -static void rbd_notify_cb(u64 ver, u64 notify_id, u8 opcode, void *data)
591     -{
592     - struct rbd_device *dev = (struct rbd_device *)data;
593     - if (!dev)
594     - return;
595     -
596     - dout("rbd_notify_cb %s notify_id=%lld opcode=%d\n", dev->obj_md_name,
597     - notify_id, (int)opcode);
598     -}
599     -
600     -/*
601     - * Request sync osd notify
602     - */
603     -static int rbd_req_sync_notify(struct rbd_device *dev,
604     - const char *obj)
605     -{
606     - struct ceph_osd_req_op *ops;
607     - struct ceph_osd_client *osdc = &dev->rbd_client->client->osdc;
608     - struct ceph_osd_event *event;
609     - struct rbd_notify_info info;
610     - int payload_len = sizeof(u32) + sizeof(u32);
611     - int ret;
612     -
613     - ret = rbd_create_rw_ops(&ops, 1, CEPH_OSD_OP_NOTIFY, payload_len);
614     - if (ret < 0)
615     - return ret;
616     -
617     - info.dev = dev;
618     -
619     - ret = ceph_osdc_create_event(osdc, rbd_notify_cb, 1,
620     - (void *)&info, &event);
621     - if (ret < 0)
622     - goto fail;
623     -
624     - ops[0].watch.ver = 1;
625     - ops[0].watch.flag = 1;
626     - ops[0].watch.cookie = event->cookie;
627     - ops[0].watch.prot_ver = RADOS_NOTIFY_VER;
628     - ops[0].watch.timeout = 12;
629     -
630     - ret = rbd_req_sync_op(dev, NULL,
631     - CEPH_NOSNAP,
632     - 0,
633     - CEPH_OSD_FLAG_WRITE | CEPH_OSD_FLAG_ONDISK,
634     - ops,
635     - 1, obj, 0, 0, NULL, NULL, NULL);
636     - if (ret < 0)
637     - goto fail_event;
638     -
639     - ret = ceph_osdc_wait_event(event, CEPH_OSD_TIMEOUT_DEFAULT);
640     - dout("ceph_osdc_wait_event returned %d\n", ret);
641     - rbd_destroy_ops(ops);
642     - return 0;
643     -
644     -fail_event:
645     - ceph_osdc_cancel_event(event);
646     -fail:
647     - rbd_destroy_ops(ops);
648     - return ret;
649     -}
650     -
651     +#if 0
652     /*
653     * Request sync osd read
654     */
655     @@ -1408,6 +1364,7 @@ static int rbd_req_sync_exec(struct rbd_device *dev,
656     dout("cls_exec returned %d\n", ret);
657     return ret;
658     }
659     +#endif
660    
661     static struct rbd_req_coll *rbd_alloc_coll(int num_reqs)
662     {
663     @@ -1440,6 +1397,7 @@ static void rbd_rq_fn(struct request_queue *q)
664     u64 ofs;
665     int num_segs, cur_seg = 0;
666     struct rbd_req_coll *coll;
667     + struct ceph_snap_context *snapc;
668    
669     /* peek at request from block layer */
670     if (!rq)
671     @@ -1466,6 +1424,20 @@ static void rbd_rq_fn(struct request_queue *q)
672    
673     spin_unlock_irq(q->queue_lock);
674    
675     + down_read(&rbd_dev->header_rwsem);
676     +
677     + if (rbd_dev->snap_id != CEPH_NOSNAP && !rbd_dev->snap_exists) {
678     + up_read(&rbd_dev->header_rwsem);
679     + dout("request for non-existent snapshot");
680     + spin_lock_irq(q->queue_lock);
681     + __blk_end_request_all(rq, -ENXIO);
682     + continue;
683     + }
684     +
685     + snapc = ceph_get_snap_context(rbd_dev->header.snapc);
686     +
687     + up_read(&rbd_dev->header_rwsem);
688     +
689     dout("%s 0x%x bytes at 0x%llx\n",
690     do_write ? "write" : "read",
691     size, blk_rq_pos(rq) * SECTOR_SIZE);
692     @@ -1475,6 +1447,7 @@ static void rbd_rq_fn(struct request_queue *q)
693     if (!coll) {
694     spin_lock_irq(q->queue_lock);
695     __blk_end_request_all(rq, -ENOMEM);
696     + ceph_put_snap_context(snapc);
697     continue;
698     }
699    
700     @@ -1498,7 +1471,7 @@ static void rbd_rq_fn(struct request_queue *q)
701     /* init OSD command: write or read */
702     if (do_write)
703     rbd_req_write(rq, rbd_dev,
704     - rbd_dev->header.snapc,
705     + snapc,
706     ofs,
707     op_size, bio,
708     coll, cur_seg);
709     @@ -1521,6 +1494,8 @@ next_seg:
710     if (bp)
711     bio_pair_release(bp);
712     spin_lock_irq(q->queue_lock);
713     +
714     + ceph_put_snap_context(snapc);
715     }
716     }
717    
718     @@ -1624,57 +1599,6 @@ out_dh:
719     return rc;
720     }
721    
722     -/*
723     - * create a snapshot
724     - */
725     -static int rbd_header_add_snap(struct rbd_device *dev,
726     - const char *snap_name,
727     - gfp_t gfp_flags)
728     -{
729     - int name_len = strlen(snap_name);
730     - u64 new_snapid;
731     - int ret;
732     - void *data, *p, *e;
733     - u64 ver;
734     - struct ceph_mon_client *monc;
735     -
736     - /* we should create a snapshot only if we're pointing at the head */
737     - if (dev->snap_id != CEPH_NOSNAP)
738     - return -EINVAL;
739     -
740     - monc = &dev->rbd_client->client->monc;
741     - ret = ceph_monc_create_snapid(monc, dev->poolid, &new_snapid);
742     - dout("created snapid=%lld\n", new_snapid);
743     - if (ret < 0)
744     - return ret;
745     -
746     - data = kmalloc(name_len + 16, gfp_flags);
747     - if (!data)
748     - return -ENOMEM;
749     -
750     - p = data;
751     - e = data + name_len + 16;
752     -
753     - ceph_encode_string_safe(&p, e, snap_name, name_len, bad);
754     - ceph_encode_64_safe(&p, e, new_snapid, bad);
755     -
756     - ret = rbd_req_sync_exec(dev, dev->obj_md_name, "rbd", "snap_add",
757     - data, p - data, &ver);
758     -
759     - kfree(data);
760     -
761     - if (ret < 0)
762     - return ret;
763     -
764     - down_write(&dev->header_rwsem);
765     - dev->header.snapc->seq = new_snapid;
766     - up_write(&dev->header_rwsem);
767     -
768     - return 0;
769     -bad:
770     - return -ERANGE;
771     -}
772     -
773     static void __rbd_remove_all_snaps(struct rbd_device *rbd_dev)
774     {
775     struct rbd_snap *snap;
776     @@ -1699,10 +1623,15 @@ static int __rbd_update_snaps(struct rbd_device *rbd_dev)
777     if (ret < 0)
778     return ret;
779    
780     + down_write(&rbd_dev->header_rwsem);
781     +
782     /* resized? */
783     - set_capacity(rbd_dev->disk, h.image_size / SECTOR_SIZE);
784     + if (rbd_dev->snap_id == CEPH_NOSNAP) {
785     + sector_t size = (sector_t) h.image_size / SECTOR_SIZE;
786    
787     - down_write(&rbd_dev->header_rwsem);
788     + dout("setting size to %llu sectors", (unsigned long long) size);
789     + set_capacity(rbd_dev->disk, size);
790     + }
791    
792     snap_seq = rbd_dev->header.snapc->seq;
793     if (rbd_dev->header.total_snaps &&
794     @@ -1711,10 +1640,12 @@ static int __rbd_update_snaps(struct rbd_device *rbd_dev)
795     if head moves */
796     follow_seq = 1;
797    
798     - kfree(rbd_dev->header.snapc);
799     + ceph_put_snap_context(rbd_dev->header.snapc);
800     kfree(rbd_dev->header.snap_names);
801     kfree(rbd_dev->header.snap_sizes);
802    
803     + rbd_dev->header.obj_version = h.obj_version;
804     + rbd_dev->header.image_size = h.image_size;
805     rbd_dev->header.total_snaps = h.total_snaps;
806     rbd_dev->header.snapc = h.snapc;
807     rbd_dev->header.snap_names = h.snap_names;
808     @@ -1818,8 +1749,13 @@ static ssize_t rbd_size_show(struct device *dev,
809     struct device_attribute *attr, char *buf)
810     {
811     struct rbd_device *rbd_dev = dev_to_rbd_dev(dev);
812     + sector_t size;
813     +
814     + down_read(&rbd_dev->header_rwsem);
815     + size = get_capacity(rbd_dev->disk);
816     + up_read(&rbd_dev->header_rwsem);
817    
818     - return sprintf(buf, "%llu\n", (unsigned long long)rbd_dev->header.image_size);
819     + return sprintf(buf, "%llu\n", (unsigned long long) size * SECTOR_SIZE);
820     }
821    
822     static ssize_t rbd_major_show(struct device *dev,
823     @@ -1890,7 +1826,6 @@ static DEVICE_ATTR(pool, S_IRUGO, rbd_pool_show, NULL);
824     static DEVICE_ATTR(name, S_IRUGO, rbd_name_show, NULL);
825     static DEVICE_ATTR(refresh, S_IWUSR, NULL, rbd_image_refresh);
826     static DEVICE_ATTR(current_snap, S_IRUGO, rbd_snap_show, NULL);
827     -static DEVICE_ATTR(create_snap, S_IWUSR, NULL, rbd_snap_add);
828    
829     static struct attribute *rbd_attrs[] = {
830     &dev_attr_size.attr,
831     @@ -1900,7 +1835,6 @@ static struct attribute *rbd_attrs[] = {
832     &dev_attr_name.attr,
833     &dev_attr_current_snap.attr,
834     &dev_attr_refresh.attr,
835     - &dev_attr_create_snap.attr,
836     NULL
837     };
838    
839     @@ -2069,7 +2003,14 @@ static int __rbd_init_snaps_header(struct rbd_device *rbd_dev)
840     cur_id = rbd_dev->header.snapc->snaps[i - 1];
841    
842     if (!i || old_snap->id < cur_id) {
843     - /* old_snap->id was skipped, thus was removed */
844     + /*
845     + * old_snap->id was skipped, thus was
846     + * removed. If this rbd_dev is mapped to
847     + * the removed snapshot, record that it no
848     + * longer exists, to prevent further I/O.
849     + */
850     + if (rbd_dev->snap_id == old_snap->id)
851     + rbd_dev->snap_exists = false;
852     __rbd_remove_snap_dev(rbd_dev, old_snap);
853     continue;
854     }
855     @@ -2217,8 +2158,8 @@ static void rbd_id_put(struct rbd_device *rbd_dev)
856     struct rbd_device *rbd_dev;
857    
858     rbd_dev = list_entry(tmp, struct rbd_device, node);
859     - if (rbd_id > max_id)
860     - max_id = rbd_id;
861     + if (rbd_dev->id > max_id)
862     + max_id = rbd_dev->id;
863     }
864     spin_unlock(&rbd_dev_list_lock);
865    
866     @@ -2515,6 +2456,11 @@ static ssize_t rbd_remove(struct bus_type *bus,
867     goto done;
868     }
869    
870     + if (rbd_dev->open_count) {
871     + ret = -EBUSY;
872     + goto done;
873     + }
874     +
875     __rbd_remove_all_snaps(rbd_dev);
876     rbd_bus_del_dev(rbd_dev);
877    
878     @@ -2523,47 +2469,6 @@ done:
879     return ret;
880     }
881    
882     -static ssize_t rbd_snap_add(struct device *dev,
883     - struct device_attribute *attr,
884     - const char *buf,
885     - size_t count)
886     -{
887     - struct rbd_device *rbd_dev = dev_to_rbd_dev(dev);
888     - int ret;
889     - char *name = kmalloc(count + 1, GFP_KERNEL);
890     - if (!name)
891     - return -ENOMEM;
892     -
893     - snprintf(name, count, "%s", buf);
894     -
895     - mutex_lock_nested(&ctl_mutex, SINGLE_DEPTH_NESTING);
896     -
897     - ret = rbd_header_add_snap(rbd_dev,
898     - name, GFP_KERNEL);
899     - if (ret < 0)
900     - goto err_unlock;
901     -
902     - ret = __rbd_update_snaps(rbd_dev);
903     - if (ret < 0)
904     - goto err_unlock;
905     -
906     - /* shouldn't hold ctl_mutex when notifying.. notify might
907     - trigger a watch callback that would need to get that mutex */
908     - mutex_unlock(&ctl_mutex);
909     -
910     - /* make a best effort, don't error if failed */
911     - rbd_req_sync_notify(rbd_dev, rbd_dev->obj_md_name);
912     -
913     - ret = count;
914     - kfree(name);
915     - return ret;
916     -
917     -err_unlock:
918     - mutex_unlock(&ctl_mutex);
919     - kfree(name);
920     - return ret;
921     -}
922     -
923     /*
924     * create control files in sysfs
925     * /sys/bus/rbd/...
926     diff --git a/drivers/firewire/net.c b/drivers/firewire/net.c
927     index 08c6749..638e1f7 100644
928     --- a/drivers/firewire/net.c
929     +++ b/drivers/firewire/net.c
930     @@ -861,8 +861,8 @@ static void fwnet_receive_broadcast(struct fw_iso_context *context,
931     if (specifier_id == IANA_SPECIFIER_ID && ver == RFC2734_SW_VERSION) {
932     buf_ptr += 2;
933     length -= IEEE1394_GASP_HDR_SIZE;
934     - fwnet_incoming_packet(dev, buf_ptr, length,
935     - source_node_id, -1, true);
936     + fwnet_incoming_packet(dev, buf_ptr, length, source_node_id,
937     + context->card->generation, true);
938     }
939    
940     packet.payload_length = dev->rcv_buffer_size;
941     @@ -958,7 +958,12 @@ static void fwnet_transmit_packet_done(struct fwnet_packet_task *ptask)
942     break;
943     }
944    
945     - skb_pull(skb, ptask->max_payload);
946     + if (ptask->dest_node == IEEE1394_ALL_NODES) {
947     + skb_pull(skb,
948     + ptask->max_payload + IEEE1394_GASP_HDR_SIZE);
949     + } else {
950     + skb_pull(skb, ptask->max_payload);
951     + }
952     if (ptask->outstanding_pkts > 1) {
953     fwnet_make_sf_hdr(&ptask->hdr, RFC2374_HDR_INTFRAG,
954     dg_size, fg_off, datagram_label);
955     @@ -1062,7 +1067,7 @@ static int fwnet_send_packet(struct fwnet_packet_task *ptask)
956     smp_rmb();
957     node_id = dev->card->node_id;
958    
959     - p = skb_push(ptask->skb, 8);
960     + p = skb_push(ptask->skb, IEEE1394_GASP_HDR_SIZE);
961     put_unaligned_be32(node_id << 16 | IANA_SPECIFIER_ID >> 8, p);
962     put_unaligned_be32((IANA_SPECIFIER_ID & 0xff) << 24
963     | RFC2734_SW_VERSION, &p[4]);
964     diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c
965     index 6e38325..9d9835a 100644
966     --- a/drivers/gpu/drm/drm_edid.c
967     +++ b/drivers/gpu/drm/drm_edid.c
968     @@ -66,6 +66,8 @@
969     #define EDID_QUIRK_FIRST_DETAILED_PREFERRED (1 << 5)
970     /* use +hsync +vsync for detailed mode */
971     #define EDID_QUIRK_DETAILED_SYNC_PP (1 << 6)
972     +/* Force reduced-blanking timings for detailed modes */
973     +#define EDID_QUIRK_FORCE_REDUCED_BLANKING (1 << 7)
974    
975     struct detailed_mode_closure {
976     struct drm_connector *connector;
977     @@ -120,6 +122,9 @@ static struct edid_quirk {
978     /* Samsung SyncMaster 22[5-6]BW */
979     { "SAM", 596, EDID_QUIRK_PREFER_LARGE_60 },
980     { "SAM", 638, EDID_QUIRK_PREFER_LARGE_60 },
981     +
982     + /* ViewSonic VA2026w */
983     + { "VSC", 5020, EDID_QUIRK_FORCE_REDUCED_BLANKING },
984     };
985    
986     /*** DDC fetch and block validation ***/
987     @@ -852,12 +857,19 @@ static struct drm_display_mode *drm_mode_detailed(struct drm_device *dev,
988     "Wrong Hsync/Vsync pulse width\n");
989     return NULL;
990     }
991     +
992     + if (quirks & EDID_QUIRK_FORCE_REDUCED_BLANKING) {
993     + mode = drm_cvt_mode(dev, hactive, vactive, 60, true, false, false);
994     + if (!mode)
995     + return NULL;
996     +
997     + goto set_size;
998     + }
999     +
1000     mode = drm_mode_create(dev);
1001     if (!mode)
1002     return NULL;
1003    
1004     - mode->type = DRM_MODE_TYPE_DRIVER;
1005     -
1006     if (quirks & EDID_QUIRK_135_CLOCK_TOO_HIGH)
1007     timing->pixel_clock = cpu_to_le16(1088);
1008    
1009     @@ -881,8 +893,6 @@ static struct drm_display_mode *drm_mode_detailed(struct drm_device *dev,
1010    
1011     drm_mode_do_interlace_quirk(mode, pt);
1012    
1013     - drm_mode_set_name(mode);
1014     -
1015     if (quirks & EDID_QUIRK_DETAILED_SYNC_PP) {
1016     pt->misc |= DRM_EDID_PT_HSYNC_POSITIVE | DRM_EDID_PT_VSYNC_POSITIVE;
1017     }
1018     @@ -892,6 +902,7 @@ static struct drm_display_mode *drm_mode_detailed(struct drm_device *dev,
1019     mode->flags |= (pt->misc & DRM_EDID_PT_VSYNC_POSITIVE) ?
1020     DRM_MODE_FLAG_PVSYNC : DRM_MODE_FLAG_NVSYNC;
1021    
1022     +set_size:
1023     mode->width_mm = pt->width_mm_lo | (pt->width_height_mm_hi & 0xf0) << 4;
1024     mode->height_mm = pt->height_mm_lo | (pt->width_height_mm_hi & 0xf) << 8;
1025    
1026     @@ -905,6 +916,9 @@ static struct drm_display_mode *drm_mode_detailed(struct drm_device *dev,
1027     mode->height_mm = edid->height_cm * 10;
1028     }
1029    
1030     + mode->type = DRM_MODE_TYPE_DRIVER;
1031     + drm_mode_set_name(mode);
1032     +
1033     return mode;
1034     }
1035    
1036     diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c
1037     index ae8a64f..89f3d4a 100644
1038     --- a/drivers/gpu/drm/i915/i915_drv.c
1039     +++ b/drivers/gpu/drm/i915/i915_drv.c
1040     @@ -224,6 +224,7 @@ static const struct intel_device_info intel_sandybridge_d_info = {
1041     .has_bsd_ring = 1,
1042     .has_blt_ring = 1,
1043     .has_llc = 1,
1044     + .has_force_wake = 1,
1045     };
1046    
1047     static const struct intel_device_info intel_sandybridge_m_info = {
1048     @@ -233,6 +234,7 @@ static const struct intel_device_info intel_sandybridge_m_info = {
1049     .has_bsd_ring = 1,
1050     .has_blt_ring = 1,
1051     .has_llc = 1,
1052     + .has_force_wake = 1,
1053     };
1054    
1055     static const struct intel_device_info intel_ivybridge_d_info = {
1056     @@ -241,6 +243,7 @@ static const struct intel_device_info intel_ivybridge_d_info = {
1057     .has_bsd_ring = 1,
1058     .has_blt_ring = 1,
1059     .has_llc = 1,
1060     + .has_force_wake = 1,
1061     };
1062    
1063     static const struct intel_device_info intel_ivybridge_m_info = {
1064     @@ -250,6 +253,7 @@ static const struct intel_device_info intel_ivybridge_m_info = {
1065     .has_bsd_ring = 1,
1066     .has_blt_ring = 1,
1067     .has_llc = 1,
1068     + .has_force_wake = 1,
1069     };
1070    
1071     static const struct pci_device_id pciidlist[] = { /* aka */
1072     @@ -993,6 +997,12 @@ MODULE_AUTHOR(DRIVER_AUTHOR);
1073     MODULE_DESCRIPTION(DRIVER_DESC);
1074     MODULE_LICENSE("GPL and additional rights");
1075    
1076     +/* We give fast paths for the really cool registers */
1077     +#define NEEDS_FORCE_WAKE(dev_priv, reg) \
1078     + ((HAS_FORCE_WAKE((dev_priv)->dev)) && \
1079     + ((reg) < 0x40000) && \
1080     + ((reg) != FORCEWAKE))
1081     +
1082     #define __i915_read(x, y) \
1083     u##x i915_read##x(struct drm_i915_private *dev_priv, u32 reg) { \
1084     u##x val = 0; \
1085     diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
1086     index 5fabc6c..45c5cf8 100644
1087     --- a/drivers/gpu/drm/i915/i915_drv.h
1088     +++ b/drivers/gpu/drm/i915/i915_drv.h
1089     @@ -255,6 +255,7 @@ struct intel_device_info {
1090     u8 is_broadwater:1;
1091     u8 is_crestline:1;
1092     u8 is_ivybridge:1;
1093     + u8 has_force_wake:1;
1094     u8 has_fbc:1;
1095     u8 has_pipe_cxsr:1;
1096     u8 has_hotplug:1;
1097     @@ -405,6 +406,8 @@ typedef struct drm_i915_private {
1098     unsigned int lvds_use_ssc:1;
1099     unsigned int display_clock_mode:1;
1100     int lvds_ssc_freq;
1101     + unsigned int bios_lvds_val; /* initial [PCH_]LVDS reg val in VBIOS */
1102     + unsigned int lvds_val; /* used for checking LVDS channel mode */
1103     struct {
1104     int rate;
1105     int lanes;
1106     @@ -1051,6 +1054,8 @@ struct drm_i915_file_private {
1107     #define HAS_PCH_CPT(dev) (INTEL_PCH_TYPE(dev) == PCH_CPT)
1108     #define HAS_PCH_IBX(dev) (INTEL_PCH_TYPE(dev) == PCH_IBX)
1109    
1110     +#define HAS_FORCE_WAKE(dev) (INTEL_INFO(dev)->has_force_wake)
1111     +
1112     #include "i915_trace.h"
1113    
1114     /**
1115     @@ -1450,12 +1455,6 @@ void gen6_gt_force_wake_get(struct drm_i915_private *dev_priv);
1116     void gen6_gt_force_wake_put(struct drm_i915_private *dev_priv);
1117     int __gen6_gt_wait_for_fifo(struct drm_i915_private *dev_priv);
1118    
1119     -/* We give fast paths for the really cool registers */
1120     -#define NEEDS_FORCE_WAKE(dev_priv, reg) \
1121     - (((dev_priv)->info->gen >= 6) && \
1122     - ((reg) < 0x40000) && \
1123     - ((reg) != FORCEWAKE))
1124     -
1125     #define __i915_read(x, y) \
1126     u##x i915_read##x(struct drm_i915_private *dev_priv, u32 reg);
1127    
1128     diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
1129     index 0d1e4b7..a230a93 100644
1130     --- a/drivers/gpu/drm/i915/i915_gem.c
1131     +++ b/drivers/gpu/drm/i915/i915_gem.c
1132     @@ -928,6 +928,7 @@ i915_gem_pwrite_ioctl(struct drm_device *dev, void *data,
1133     }
1134    
1135     if (obj->gtt_space &&
1136     + obj->tiling_mode == I915_TILING_NONE &&
1137     obj->base.write_domain != I915_GEM_DOMAIN_CPU) {
1138     ret = i915_gem_object_pin(obj, 0, true);
1139     if (ret)
1140     @@ -3317,7 +3318,8 @@ i915_gem_object_pin(struct drm_i915_gem_object *obj,
1141     struct drm_i915_private *dev_priv = dev->dev_private;
1142     int ret;
1143    
1144     - BUG_ON(obj->pin_count == DRM_I915_GEM_OBJECT_MAX_PIN_COUNT);
1145     + if (WARN_ON(obj->pin_count == DRM_I915_GEM_OBJECT_MAX_PIN_COUNT))
1146     + return -EBUSY;
1147     WARN_ON(i915_verify_lists(dev));
1148    
1149     if (obj->gtt_space != NULL) {
1150     diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c
1151     index 26c67a7..8bca2d2 100644
1152     --- a/drivers/gpu/drm/i915/i915_irq.c
1153     +++ b/drivers/gpu/drm/i915/i915_irq.c
1154     @@ -530,6 +530,12 @@ static irqreturn_t ivybridge_irq_handler(DRM_IRQ_ARGS)
1155     if (de_iir & DE_GSE_IVB)
1156     intel_opregion_gse_intr(dev);
1157    
1158     + if (de_iir & DE_PIPEA_VBLANK_IVB)
1159     + drm_handle_vblank(dev, 0);
1160     +
1161     + if (de_iir & DE_PIPEB_VBLANK_IVB)
1162     + drm_handle_vblank(dev, 1);
1163     +
1164     if (de_iir & DE_PLANEA_FLIP_DONE_IVB) {
1165     intel_prepare_page_flip(dev, 0);
1166     intel_finish_page_flip_plane(dev, 0);
1167     @@ -540,12 +546,6 @@ static irqreturn_t ivybridge_irq_handler(DRM_IRQ_ARGS)
1168     intel_finish_page_flip_plane(dev, 1);
1169     }
1170    
1171     - if (de_iir & DE_PIPEA_VBLANK_IVB)
1172     - drm_handle_vblank(dev, 0);
1173     -
1174     - if (de_iir & DE_PIPEB_VBLANK_IVB)
1175     - drm_handle_vblank(dev, 1);
1176     -
1177     /* check event from PCH */
1178     if (de_iir & DE_PCH_EVENT_IVB) {
1179     if (pch_iir & SDE_HOTPLUG_MASK_CPT)
1180     @@ -622,6 +622,12 @@ static irqreturn_t ironlake_irq_handler(DRM_IRQ_ARGS)
1181     if (de_iir & DE_GSE)
1182     intel_opregion_gse_intr(dev);
1183    
1184     + if (de_iir & DE_PIPEA_VBLANK)
1185     + drm_handle_vblank(dev, 0);
1186     +
1187     + if (de_iir & DE_PIPEB_VBLANK)
1188     + drm_handle_vblank(dev, 1);
1189     +
1190     if (de_iir & DE_PLANEA_FLIP_DONE) {
1191     intel_prepare_page_flip(dev, 0);
1192     intel_finish_page_flip_plane(dev, 0);
1193     @@ -632,12 +638,6 @@ static irqreturn_t ironlake_irq_handler(DRM_IRQ_ARGS)
1194     intel_finish_page_flip_plane(dev, 1);
1195     }
1196    
1197     - if (de_iir & DE_PIPEA_VBLANK)
1198     - drm_handle_vblank(dev, 0);
1199     -
1200     - if (de_iir & DE_PIPEB_VBLANK)
1201     - drm_handle_vblank(dev, 1);
1202     -
1203     /* check event from PCH */
1204     if (de_iir & DE_PCH_EVENT) {
1205     if (pch_iir & hotplug_mask)
1206     @@ -2051,10 +2051,22 @@ static int i915_driver_irq_postinstall(struct drm_device *dev)
1207     hotplug_en |= HDMIC_HOTPLUG_INT_EN;
1208     if (dev_priv->hotplug_supported_mask & HDMID_HOTPLUG_INT_STATUS)
1209     hotplug_en |= HDMID_HOTPLUG_INT_EN;
1210     - if (dev_priv->hotplug_supported_mask & SDVOC_HOTPLUG_INT_STATUS)
1211     - hotplug_en |= SDVOC_HOTPLUG_INT_EN;
1212     - if (dev_priv->hotplug_supported_mask & SDVOB_HOTPLUG_INT_STATUS)
1213     - hotplug_en |= SDVOB_HOTPLUG_INT_EN;
1214     + if (IS_G4X(dev)) {
1215     + if (dev_priv->hotplug_supported_mask & SDVOC_HOTPLUG_INT_STATUS_G4X)
1216     + hotplug_en |= SDVOC_HOTPLUG_INT_EN;
1217     + if (dev_priv->hotplug_supported_mask & SDVOB_HOTPLUG_INT_STATUS_G4X)
1218     + hotplug_en |= SDVOB_HOTPLUG_INT_EN;
1219     + } else if (IS_GEN4(dev)) {
1220     + if (dev_priv->hotplug_supported_mask & SDVOC_HOTPLUG_INT_STATUS_I965)
1221     + hotplug_en |= SDVOC_HOTPLUG_INT_EN;
1222     + if (dev_priv->hotplug_supported_mask & SDVOB_HOTPLUG_INT_STATUS_I965)
1223     + hotplug_en |= SDVOB_HOTPLUG_INT_EN;
1224     + } else {
1225     + if (dev_priv->hotplug_supported_mask & SDVOC_HOTPLUG_INT_STATUS_I915)
1226     + hotplug_en |= SDVOC_HOTPLUG_INT_EN;
1227     + if (dev_priv->hotplug_supported_mask & SDVOB_HOTPLUG_INT_STATUS_I915)
1228     + hotplug_en |= SDVOB_HOTPLUG_INT_EN;
1229     + }
1230     if (dev_priv->hotplug_supported_mask & CRT_HOTPLUG_INT_STATUS) {
1231     hotplug_en |= CRT_HOTPLUG_INT_EN;
1232    
1233     diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
1234     index 29bfd89..27a296a 100644
1235     --- a/drivers/gpu/drm/i915/i915_reg.h
1236     +++ b/drivers/gpu/drm/i915/i915_reg.h
1237     @@ -197,6 +197,14 @@
1238     #define MI_DISPLAY_FLIP MI_INSTR(0x14, 2)
1239     #define MI_DISPLAY_FLIP_I915 MI_INSTR(0x14, 1)
1240     #define MI_DISPLAY_FLIP_PLANE(n) ((n) << 20)
1241     +/* IVB has funny definitions for which plane to flip. */
1242     +#define MI_DISPLAY_FLIP_IVB_PLANE_A (0 << 19)
1243     +#define MI_DISPLAY_FLIP_IVB_PLANE_B (1 << 19)
1244     +#define MI_DISPLAY_FLIP_IVB_SPRITE_A (2 << 19)
1245     +#define MI_DISPLAY_FLIP_IVB_SPRITE_B (3 << 19)
1246     +#define MI_DISPLAY_FLIP_IVB_PLANE_C (4 << 19)
1247     +#define MI_DISPLAY_FLIP_IVB_SPRITE_C (5 << 19)
1248     +
1249     #define MI_SET_CONTEXT MI_INSTR(0x18, 0)
1250     #define MI_MM_SPACE_GTT (1<<8)
1251     #define MI_MM_SPACE_PHYSICAL (0<<8)
1252     @@ -437,6 +445,9 @@
1253     # define VS_TIMER_DISPATCH (1 << 6)
1254     # define MI_FLUSH_ENABLE (1 << 12)
1255    
1256     +#define GEN6_GT_MODE 0x20d0
1257     +#define GEN6_GT_MODE_HI (1 << 9)
1258     +
1259     #define GFX_MODE 0x02520
1260     #define GFX_MODE_GEN7 0x0229c
1261     #define RING_MODE_GEN7(ring) ((ring)->mmio_base+0x29c)
1262     @@ -1483,14 +1494,20 @@
1263     #define DPC_HOTPLUG_INT_STATUS (1 << 28)
1264     #define HDMID_HOTPLUG_INT_STATUS (1 << 27)
1265     #define DPD_HOTPLUG_INT_STATUS (1 << 27)
1266     +/* CRT/TV common between gen3+ */
1267     #define CRT_HOTPLUG_INT_STATUS (1 << 11)
1268     #define TV_HOTPLUG_INT_STATUS (1 << 10)
1269     #define CRT_HOTPLUG_MONITOR_MASK (3 << 8)
1270     #define CRT_HOTPLUG_MONITOR_COLOR (3 << 8)
1271     #define CRT_HOTPLUG_MONITOR_MONO (2 << 8)
1272     #define CRT_HOTPLUG_MONITOR_NONE (0 << 8)
1273     -#define SDVOC_HOTPLUG_INT_STATUS (1 << 7)
1274     -#define SDVOB_HOTPLUG_INT_STATUS (1 << 6)
1275     +/* SDVO is different across gen3/4 */
1276     +#define SDVOC_HOTPLUG_INT_STATUS_G4X (1 << 3)
1277     +#define SDVOB_HOTPLUG_INT_STATUS_G4X (1 << 2)
1278     +#define SDVOC_HOTPLUG_INT_STATUS_I965 (3 << 4)
1279     +#define SDVOB_HOTPLUG_INT_STATUS_I965 (3 << 2)
1280     +#define SDVOC_HOTPLUG_INT_STATUS_I915 (1 << 7)
1281     +#define SDVOB_HOTPLUG_INT_STATUS_I915 (1 << 6)
1282    
1283     /* SDVO port control */
1284     #define SDVOB 0x61140
1285     @@ -3015,6 +3032,8 @@
1286     #define _PFA_CTL_1 0x68080
1287     #define _PFB_CTL_1 0x68880
1288     #define PF_ENABLE (1<<31)
1289     +#define PF_PIPE_SEL_MASK_IVB (3<<29)
1290     +#define PF_PIPE_SEL_IVB(pipe) ((pipe)<<29)
1291     #define PF_FILTER_MASK (3<<23)
1292     #define PF_FILTER_PROGRAMMED (0<<23)
1293     #define PF_FILTER_MED_3x3 (1<<23)
1294     diff --git a/drivers/gpu/drm/i915/intel_bios.c b/drivers/gpu/drm/i915/intel_bios.c
1295     index 3fe0524..a2c9e56 100644
1296     --- a/drivers/gpu/drm/i915/intel_bios.c
1297     +++ b/drivers/gpu/drm/i915/intel_bios.c
1298     @@ -174,6 +174,28 @@ get_lvds_dvo_timing(const struct bdb_lvds_lfp_data *lvds_lfp_data,
1299     return (struct lvds_dvo_timing *)(entry + dvo_timing_offset);
1300     }
1301    
1302     +/* get lvds_fp_timing entry
1303     + * this function may return NULL if the corresponding entry is invalid
1304     + */
1305     +static const struct lvds_fp_timing *
1306     +get_lvds_fp_timing(const struct bdb_header *bdb,
1307     + const struct bdb_lvds_lfp_data *data,
1308     + const struct bdb_lvds_lfp_data_ptrs *ptrs,
1309     + int index)
1310     +{
1311     + size_t data_ofs = (const u8 *)data - (const u8 *)bdb;
1312     + u16 data_size = ((const u16 *)data)[-1]; /* stored in header */
1313     + size_t ofs;
1314     +
1315     + if (index >= ARRAY_SIZE(ptrs->ptr))
1316     + return NULL;
1317     + ofs = ptrs->ptr[index].fp_timing_offset;
1318     + if (ofs < data_ofs ||
1319     + ofs + sizeof(struct lvds_fp_timing) > data_ofs + data_size)
1320     + return NULL;
1321     + return (const struct lvds_fp_timing *)((const u8 *)bdb + ofs);
1322     +}
1323     +
1324     /* Try to find integrated panel data */
1325     static void
1326     parse_lfp_panel_data(struct drm_i915_private *dev_priv,
1327     @@ -183,6 +205,7 @@ parse_lfp_panel_data(struct drm_i915_private *dev_priv,
1328     const struct bdb_lvds_lfp_data *lvds_lfp_data;
1329     const struct bdb_lvds_lfp_data_ptrs *lvds_lfp_data_ptrs;
1330     const struct lvds_dvo_timing *panel_dvo_timing;
1331     + const struct lvds_fp_timing *fp_timing;
1332     struct drm_display_mode *panel_fixed_mode;
1333     int i, downclock;
1334    
1335     @@ -244,6 +267,19 @@ parse_lfp_panel_data(struct drm_i915_private *dev_priv,
1336     "Normal Clock %dKHz, downclock %dKHz\n",
1337     panel_fixed_mode->clock, 10*downclock);
1338     }
1339     +
1340     + fp_timing = get_lvds_fp_timing(bdb, lvds_lfp_data,
1341     + lvds_lfp_data_ptrs,
1342     + lvds_options->panel_type);
1343     + if (fp_timing) {
1344     + /* check the resolution, just to be sure */
1345     + if (fp_timing->x_res == panel_fixed_mode->hdisplay &&
1346     + fp_timing->y_res == panel_fixed_mode->vdisplay) {
1347     + dev_priv->bios_lvds_val = fp_timing->lvds_reg_val;
1348     + DRM_DEBUG_KMS("VBT initial LVDS value %x\n",
1349     + dev_priv->bios_lvds_val);
1350     + }
1351     + }
1352     }
1353    
1354     /* Try to find sdvo panel data */
1355     diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
1356     index dd3e7e4..8e95c94 100644
1357     --- a/drivers/gpu/drm/i915/intel_display.c
1358     +++ b/drivers/gpu/drm/i915/intel_display.c
1359     @@ -360,6 +360,27 @@ static const intel_limit_t intel_limits_ironlake_display_port = {
1360     .find_pll = intel_find_pll_ironlake_dp,
1361     };
1362    
1363     +static bool is_dual_link_lvds(struct drm_i915_private *dev_priv,
1364     + unsigned int reg)
1365     +{
1366     + unsigned int val;
1367     +
1368     + if (dev_priv->lvds_val)
1369     + val = dev_priv->lvds_val;
1370     + else {
1371     + /* BIOS should set the proper LVDS register value at boot, but
1372     + * in reality, it doesn't set the value when the lid is closed;
1373     + * we need to check "the value to be set" in VBT when LVDS
1374     + * register is uninitialized.
1375     + */
1376     + val = I915_READ(reg);
1377     + if (!(val & ~LVDS_DETECTED))
1378     + val = dev_priv->bios_lvds_val;
1379     + dev_priv->lvds_val = val;
1380     + }
1381     + return (val & LVDS_CLKB_POWER_MASK) == LVDS_CLKB_POWER_UP;
1382     +}
1383     +
1384     static const intel_limit_t *intel_ironlake_limit(struct drm_crtc *crtc,
1385     int refclk)
1386     {
1387     @@ -368,8 +389,7 @@ static const intel_limit_t *intel_ironlake_limit(struct drm_crtc *crtc,
1388     const intel_limit_t *limit;
1389    
1390     if (intel_pipe_has_type(crtc, INTEL_OUTPUT_LVDS)) {
1391     - if ((I915_READ(PCH_LVDS) & LVDS_CLKB_POWER_MASK) ==
1392     - LVDS_CLKB_POWER_UP) {
1393     + if (is_dual_link_lvds(dev_priv, PCH_LVDS)) {
1394     /* LVDS dual channel */
1395     if (refclk == 100000)
1396     limit = &intel_limits_ironlake_dual_lvds_100m;
1397     @@ -397,8 +417,7 @@ static const intel_limit_t *intel_g4x_limit(struct drm_crtc *crtc)
1398     const intel_limit_t *limit;
1399    
1400     if (intel_pipe_has_type(crtc, INTEL_OUTPUT_LVDS)) {
1401     - if ((I915_READ(LVDS) & LVDS_CLKB_POWER_MASK) ==
1402     - LVDS_CLKB_POWER_UP)
1403     + if (is_dual_link_lvds(dev_priv, LVDS))
1404     /* LVDS with dual channel */
1405     limit = &intel_limits_g4x_dual_channel_lvds;
1406     else
1407     @@ -536,8 +555,7 @@ intel_find_best_PLL(const intel_limit_t *limit, struct drm_crtc *crtc,
1408     * reliably set up different single/dual channel state, if we
1409     * even can.
1410     */
1411     - if ((I915_READ(LVDS) & LVDS_CLKB_POWER_MASK) ==
1412     - LVDS_CLKB_POWER_UP)
1413     + if (is_dual_link_lvds(dev_priv, LVDS))
1414     clock.p2 = limit->p2.p2_fast;
1415     else
1416     clock.p2 = limit->p2.p2_slow;
1417     @@ -2424,18 +2442,6 @@ static void intel_fdi_normal_train(struct drm_crtc *crtc)
1418     FDI_FE_ERRC_ENABLE);
1419     }
1420    
1421     -static void cpt_phase_pointer_enable(struct drm_device *dev, int pipe)
1422     -{
1423     - struct drm_i915_private *dev_priv = dev->dev_private;
1424     - u32 flags = I915_READ(SOUTH_CHICKEN1);
1425     -
1426     - flags |= FDI_PHASE_SYNC_OVR(pipe);
1427     - I915_WRITE(SOUTH_CHICKEN1, flags); /* once to unlock... */
1428     - flags |= FDI_PHASE_SYNC_EN(pipe);
1429     - I915_WRITE(SOUTH_CHICKEN1, flags); /* then again to enable */
1430     - POSTING_READ(SOUTH_CHICKEN1);
1431     -}
1432     -
1433     /* The FDI link training functions for ILK/Ibexpeak. */
1434     static void ironlake_fdi_link_train(struct drm_crtc *crtc)
1435     {
1436     @@ -2586,9 +2592,6 @@ static void gen6_fdi_link_train(struct drm_crtc *crtc)
1437     POSTING_READ(reg);
1438     udelay(150);
1439    
1440     - if (HAS_PCH_CPT(dev))
1441     - cpt_phase_pointer_enable(dev, pipe);
1442     -
1443     for (i = 0; i < 4; i++) {
1444     reg = FDI_TX_CTL(pipe);
1445     temp = I915_READ(reg);
1446     @@ -2707,9 +2710,6 @@ static void ivb_manual_fdi_link_train(struct drm_crtc *crtc)
1447     POSTING_READ(reg);
1448     udelay(150);
1449    
1450     - if (HAS_PCH_CPT(dev))
1451     - cpt_phase_pointer_enable(dev, pipe);
1452     -
1453     for (i = 0; i < 4; i++) {
1454     reg = FDI_TX_CTL(pipe);
1455     temp = I915_READ(reg);
1456     @@ -2819,17 +2819,6 @@ static void ironlake_fdi_pll_enable(struct drm_crtc *crtc)
1457     }
1458     }
1459    
1460     -static void cpt_phase_pointer_disable(struct drm_device *dev, int pipe)
1461     -{
1462     - struct drm_i915_private *dev_priv = dev->dev_private;
1463     - u32 flags = I915_READ(SOUTH_CHICKEN1);
1464     -
1465     - flags &= ~(FDI_PHASE_SYNC_EN(pipe));
1466     - I915_WRITE(SOUTH_CHICKEN1, flags); /* once to disable... */
1467     - flags &= ~(FDI_PHASE_SYNC_OVR(pipe));
1468     - I915_WRITE(SOUTH_CHICKEN1, flags); /* then again to lock */
1469     - POSTING_READ(SOUTH_CHICKEN1);
1470     -}
1471     static void ironlake_fdi_disable(struct drm_crtc *crtc)
1472     {
1473     struct drm_device *dev = crtc->dev;
1474     @@ -2859,8 +2848,6 @@ static void ironlake_fdi_disable(struct drm_crtc *crtc)
1475     I915_WRITE(FDI_RX_CHICKEN(pipe),
1476     I915_READ(FDI_RX_CHICKEN(pipe) &
1477     ~FDI_RX_PHASE_SYNC_POINTER_EN));
1478     - } else if (HAS_PCH_CPT(dev)) {
1479     - cpt_phase_pointer_disable(dev, pipe);
1480     }
1481    
1482     /* still set train pattern 1 */
1483     @@ -2908,18 +2895,37 @@ static void intel_clear_scanline_wait(struct drm_device *dev)
1484     I915_WRITE_CTL(ring, tmp);
1485     }
1486    
1487     +static bool intel_crtc_has_pending_flip(struct drm_crtc *crtc)
1488     +{
1489     + struct drm_device *dev = crtc->dev;
1490     + struct drm_i915_private *dev_priv = dev->dev_private;
1491     + unsigned long flags;
1492     + bool pending;
1493     +
1494     + if (atomic_read(&dev_priv->mm.wedged))
1495     + return false;
1496     +
1497     + spin_lock_irqsave(&dev->event_lock, flags);
1498     + pending = to_intel_crtc(crtc)->unpin_work != NULL;
1499     + spin_unlock_irqrestore(&dev->event_lock, flags);
1500     +
1501     + return pending;
1502     +}
1503     +
1504     static void intel_crtc_wait_for_pending_flips(struct drm_crtc *crtc)
1505     {
1506     - struct drm_i915_gem_object *obj;
1507     - struct drm_i915_private *dev_priv;
1508     + struct drm_device *dev = crtc->dev;
1509     + struct drm_i915_private *dev_priv = dev->dev_private;
1510    
1511     if (crtc->fb == NULL)
1512     return;
1513    
1514     - obj = to_intel_framebuffer(crtc->fb)->obj;
1515     - dev_priv = crtc->dev->dev_private;
1516     wait_event(dev_priv->pending_flip_queue,
1517     - atomic_read(&obj->pending_flip) == 0);
1518     + !intel_crtc_has_pending_flip(crtc));
1519     +
1520     + mutex_lock(&dev->struct_mutex);
1521     + intel_finish_fb(crtc->fb);
1522     + mutex_unlock(&dev->struct_mutex);
1523     }
1524    
1525     static bool intel_crtc_driving_pch(struct drm_crtc *crtc)
1526     @@ -3095,7 +3101,11 @@ static void ironlake_crtc_enable(struct drm_crtc *crtc)
1527     * as some pre-programmed values are broken,
1528     * e.g. x201.
1529     */
1530     - I915_WRITE(PF_CTL(pipe), PF_ENABLE | PF_FILTER_MED_3x3);
1531     + if (IS_IVYBRIDGE(dev))
1532     + I915_WRITE(PF_CTL(pipe), PF_ENABLE | PF_FILTER_MED_3x3 |
1533     + PF_PIPE_SEL_IVB(pipe));
1534     + else
1535     + I915_WRITE(PF_CTL(pipe), PF_ENABLE | PF_FILTER_MED_3x3);
1536     I915_WRITE(PF_WIN_POS(pipe), dev_priv->pch_pf_pos);
1537     I915_WRITE(PF_WIN_SZ(pipe), dev_priv->pch_pf_size);
1538     }
1539     @@ -3381,23 +3391,6 @@ static void intel_crtc_disable(struct drm_crtc *crtc)
1540     struct drm_crtc_helper_funcs *crtc_funcs = crtc->helper_private;
1541     struct drm_device *dev = crtc->dev;
1542    
1543     - /* Flush any pending WAITs before we disable the pipe. Note that
1544     - * we need to drop the struct_mutex in order to acquire it again
1545     - * during the lowlevel dpms routines around a couple of the
1546     - * operations. It does not look trivial nor desirable to move
1547     - * that locking higher. So instead we leave a window for the
1548     - * submission of further commands on the fb before we can actually
1549     - * disable it. This race with userspace exists anyway, and we can
1550     - * only rely on the pipe being disabled by userspace after it
1551     - * receives the hotplug notification and has flushed any pending
1552     - * batches.
1553     - */
1554     - if (crtc->fb) {
1555     - mutex_lock(&dev->struct_mutex);
1556     - intel_finish_fb(crtc->fb);
1557     - mutex_unlock(&dev->struct_mutex);
1558     - }
1559     -
1560     crtc_funcs->dpms(crtc, DRM_MODE_DPMS_OFF);
1561     assert_plane_disabled(dev->dev_private, to_intel_crtc(crtc)->plane);
1562     assert_pipe_disabled(dev->dev_private, to_intel_crtc(crtc)->pipe);
1563     @@ -7286,9 +7279,8 @@ static void do_intel_finish_page_flip(struct drm_device *dev,
1564    
1565     atomic_clear_mask(1 << intel_crtc->plane,
1566     &obj->pending_flip.counter);
1567     - if (atomic_read(&obj->pending_flip) == 0)
1568     - wake_up(&dev_priv->pending_flip_queue);
1569    
1570     + wake_up(&dev_priv->pending_flip_queue);
1571     schedule_work(&work->work);
1572    
1573     trace_i915_flip_complete(intel_crtc->plane, work->pending_flip_obj);
1574     @@ -7340,14 +7332,14 @@ static int intel_gen2_queue_flip(struct drm_device *dev,
1575    
1576     ret = intel_pin_and_fence_fb_obj(dev, obj, LP_RING(dev_priv));
1577     if (ret)
1578     - goto out;
1579     + goto err;
1580    
1581     /* Offset into the new buffer for cases of shared fbs between CRTCs */
1582     offset = crtc->y * fb->pitches[0] + crtc->x * fb->bits_per_pixel/8;
1583    
1584     ret = BEGIN_LP_RING(6);
1585     if (ret)
1586     - goto out;
1587     + goto err_unpin;
1588    
1589     /* Can't queue multiple flips, so wait for the previous
1590     * one to finish before executing the next.
1591     @@ -7364,7 +7356,11 @@ static int intel_gen2_queue_flip(struct drm_device *dev,
1592     OUT_RING(obj->gtt_offset + offset);
1593     OUT_RING(0); /* aux display base address, unused */
1594     ADVANCE_LP_RING();
1595     -out:
1596     + return 0;
1597     +
1598     +err_unpin:
1599     + intel_unpin_fb_obj(obj);
1600     +err:
1601     return ret;
1602     }
1603    
1604     @@ -7381,14 +7377,14 @@ static int intel_gen3_queue_flip(struct drm_device *dev,
1605    
1606     ret = intel_pin_and_fence_fb_obj(dev, obj, LP_RING(dev_priv));
1607     if (ret)
1608     - goto out;
1609     + goto err;
1610    
1611     /* Offset into the new buffer for cases of shared fbs between CRTCs */
1612     offset = crtc->y * fb->pitches[0] + crtc->x * fb->bits_per_pixel/8;
1613    
1614     ret = BEGIN_LP_RING(6);
1615     if (ret)
1616     - goto out;
1617     + goto err_unpin;
1618    
1619     if (intel_crtc->plane)
1620     flip_mask = MI_WAIT_FOR_PLANE_B_FLIP;
1621     @@ -7403,7 +7399,11 @@ static int intel_gen3_queue_flip(struct drm_device *dev,
1622     OUT_RING(MI_NOOP);
1623    
1624     ADVANCE_LP_RING();
1625     -out:
1626     + return 0;
1627     +
1628     +err_unpin:
1629     + intel_unpin_fb_obj(obj);
1630     +err:
1631     return ret;
1632     }
1633    
1634     @@ -7419,11 +7419,11 @@ static int intel_gen4_queue_flip(struct drm_device *dev,
1635    
1636     ret = intel_pin_and_fence_fb_obj(dev, obj, LP_RING(dev_priv));
1637     if (ret)
1638     - goto out;
1639     + goto err;
1640    
1641     ret = BEGIN_LP_RING(4);
1642     if (ret)
1643     - goto out;
1644     + goto err_unpin;
1645    
1646     /* i965+ uses the linear or tiled offsets from the
1647     * Display Registers (which do not change across a page-flip)
1648     @@ -7442,7 +7442,11 @@ static int intel_gen4_queue_flip(struct drm_device *dev,
1649     pipesrc = I915_READ(PIPESRC(intel_crtc->pipe)) & 0x0fff0fff;
1650     OUT_RING(pf | pipesrc);
1651     ADVANCE_LP_RING();
1652     -out:
1653     + return 0;
1654     +
1655     +err_unpin:
1656     + intel_unpin_fb_obj(obj);
1657     +err:
1658     return ret;
1659     }
1660    
1661     @@ -7458,11 +7462,11 @@ static int intel_gen6_queue_flip(struct drm_device *dev,
1662    
1663     ret = intel_pin_and_fence_fb_obj(dev, obj, LP_RING(dev_priv));
1664     if (ret)
1665     - goto out;
1666     + goto err;
1667    
1668     ret = BEGIN_LP_RING(4);
1669     if (ret)
1670     - goto out;
1671     + goto err_unpin;
1672    
1673     OUT_RING(MI_DISPLAY_FLIP |
1674     MI_DISPLAY_FLIP_PLANE(intel_crtc->plane));
1675     @@ -7479,7 +7483,11 @@ static int intel_gen6_queue_flip(struct drm_device *dev,
1676     pipesrc = I915_READ(PIPESRC(intel_crtc->pipe)) & 0x0fff0fff;
1677     OUT_RING(pf | pipesrc);
1678     ADVANCE_LP_RING();
1679     -out:
1680     + return 0;
1681     +
1682     +err_unpin:
1683     + intel_unpin_fb_obj(obj);
1684     +err:
1685     return ret;
1686     }
1687    
1688     @@ -7497,22 +7505,43 @@ static int intel_gen7_queue_flip(struct drm_device *dev,
1689     struct drm_i915_private *dev_priv = dev->dev_private;
1690     struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
1691     struct intel_ring_buffer *ring = &dev_priv->ring[BCS];
1692     + uint32_t plane_bit = 0;
1693     int ret;
1694    
1695     ret = intel_pin_and_fence_fb_obj(dev, obj, ring);
1696     if (ret)
1697     - goto out;
1698     + goto err;
1699     +
1700     + switch(intel_crtc->plane) {
1701     + case PLANE_A:
1702     + plane_bit = MI_DISPLAY_FLIP_IVB_PLANE_A;
1703     + break;
1704     + case PLANE_B:
1705     + plane_bit = MI_DISPLAY_FLIP_IVB_PLANE_B;
1706     + break;
1707     + case PLANE_C:
1708     + plane_bit = MI_DISPLAY_FLIP_IVB_PLANE_C;
1709     + break;
1710     + default:
1711     + WARN_ONCE(1, "unknown plane in flip command\n");
1712     + ret = -ENODEV;
1713     + goto err_unpin;
1714     + }
1715    
1716     ret = intel_ring_begin(ring, 4);
1717     if (ret)
1718     - goto out;
1719     + goto err_unpin;
1720    
1721     - intel_ring_emit(ring, MI_DISPLAY_FLIP_I915 | (intel_crtc->plane << 19));
1722     + intel_ring_emit(ring, MI_DISPLAY_FLIP_I915 | plane_bit);
1723     intel_ring_emit(ring, (fb->pitches[0] | obj->tiling_mode));
1724     intel_ring_emit(ring, (obj->gtt_offset));
1725     intel_ring_emit(ring, (MI_NOOP));
1726     intel_ring_advance(ring);
1727     -out:
1728     + return 0;
1729     +
1730     +err_unpin:
1731     + intel_unpin_fb_obj(obj);
1732     +err:
1733     return ret;
1734     }
1735    
1736     @@ -8611,6 +8640,11 @@ static void gen6_init_clock_gating(struct drm_device *dev)
1737     DISPPLANE_TRICKLE_FEED_DISABLE);
1738     intel_flush_display_plane(dev_priv, pipe);
1739     }
1740     +
1741     + /* The default value should be 0x200 according to docs, but the two
1742     + * platforms I checked have a 0 for this. (Maybe BIOS overrides?) */
1743     + I915_WRITE(GEN6_GT_MODE, 0xffff << 16);
1744     + I915_WRITE(GEN6_GT_MODE, GEN6_GT_MODE_HI << 16 | GEN6_GT_MODE_HI);
1745     }
1746    
1747     static void gen7_setup_fixed_func_scheduler(struct drm_i915_private *dev_priv)
1748     diff --git a/drivers/gpu/drm/i915/intel_hdmi.c b/drivers/gpu/drm/i915/intel_hdmi.c
1749     index fb44e9d..c60100d 100644
1750     --- a/drivers/gpu/drm/i915/intel_hdmi.c
1751     +++ b/drivers/gpu/drm/i915/intel_hdmi.c
1752     @@ -138,14 +138,17 @@ static void i9xx_write_infoframe(struct drm_encoder *encoder,
1753    
1754     I915_WRITE(VIDEO_DIP_CTL, VIDEO_DIP_ENABLE | val | port | flags);
1755    
1756     + mmiowb();
1757     for (i = 0; i < len; i += 4) {
1758     I915_WRITE(VIDEO_DIP_DATA, *data);
1759     data++;
1760     }
1761     + mmiowb();
1762    
1763     flags |= intel_infoframe_flags(frame);
1764    
1765     I915_WRITE(VIDEO_DIP_CTL, VIDEO_DIP_ENABLE | val | port | flags);
1766     + POSTING_READ(VIDEO_DIP_CTL);
1767     }
1768    
1769     static void ironlake_write_infoframe(struct drm_encoder *encoder,
1770     @@ -168,14 +171,17 @@ static void ironlake_write_infoframe(struct drm_encoder *encoder,
1771    
1772     I915_WRITE(reg, VIDEO_DIP_ENABLE | val | flags);
1773    
1774     + mmiowb();
1775     for (i = 0; i < len; i += 4) {
1776     I915_WRITE(TVIDEO_DIP_DATA(intel_crtc->pipe), *data);
1777     data++;
1778     }
1779     + mmiowb();
1780    
1781     flags |= intel_infoframe_flags(frame);
1782    
1783     I915_WRITE(reg, VIDEO_DIP_ENABLE | val | flags);
1784     + POSTING_READ(reg);
1785     }
1786     static void intel_set_infoframe(struct drm_encoder *encoder,
1787     struct dip_infoframe *frame)
1788     @@ -549,10 +555,13 @@ void intel_hdmi_init(struct drm_device *dev, int sdvox_reg)
1789     if (!HAS_PCH_SPLIT(dev)) {
1790     intel_hdmi->write_infoframe = i9xx_write_infoframe;
1791     I915_WRITE(VIDEO_DIP_CTL, 0);
1792     + POSTING_READ(VIDEO_DIP_CTL);
1793     } else {
1794     intel_hdmi->write_infoframe = ironlake_write_infoframe;
1795     - for_each_pipe(i)
1796     + for_each_pipe(i) {
1797     I915_WRITE(TVIDEO_DIP_CTL(i), 0);
1798     + POSTING_READ(TVIDEO_DIP_CTL(i));
1799     + }
1800     }
1801    
1802     drm_encoder_helper_add(&intel_encoder->base, &intel_hdmi_helper_funcs);
1803     diff --git a/drivers/gpu/drm/i915/intel_lvds.c b/drivers/gpu/drm/i915/intel_lvds.c
1804     index 802fec2..a8b28c4 100644
1805     --- a/drivers/gpu/drm/i915/intel_lvds.c
1806     +++ b/drivers/gpu/drm/i915/intel_lvds.c
1807     @@ -779,14 +779,6 @@ static const struct dmi_system_id intel_no_lvds[] = {
1808     },
1809     {
1810     .callback = intel_no_lvds_dmi_callback,
1811     - .ident = "ZOTAC ZBOXSD-ID12/ID13",
1812     - .matches = {
1813     - DMI_MATCH(DMI_BOARD_VENDOR, "ZOTAC"),
1814     - DMI_MATCH(DMI_BOARD_NAME, "ZBOXSD-ID12/ID13"),
1815     - },
1816     - },
1817     - {
1818     - .callback = intel_no_lvds_dmi_callback,
1819     .ident = "Gigabyte GA-D525TUD",
1820     .matches = {
1821     DMI_MATCH(DMI_BOARD_VENDOR, "Gigabyte Technology Co., Ltd."),
1822     diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.c b/drivers/gpu/drm/i915/intel_ringbuffer.c
1823     index 302d3d5..c17325c 100644
1824     --- a/drivers/gpu/drm/i915/intel_ringbuffer.c
1825     +++ b/drivers/gpu/drm/i915/intel_ringbuffer.c
1826     @@ -249,10 +249,15 @@ u32 intel_ring_get_active_head(struct intel_ring_buffer *ring)
1827    
1828     static int init_ring_common(struct intel_ring_buffer *ring)
1829     {
1830     - drm_i915_private_t *dev_priv = ring->dev->dev_private;
1831     + struct drm_device *dev = ring->dev;
1832     + drm_i915_private_t *dev_priv = dev->dev_private;
1833     struct drm_i915_gem_object *obj = ring->obj;
1834     + int ret = 0;
1835     u32 head;
1836    
1837     + if (HAS_FORCE_WAKE(dev))
1838     + gen6_gt_force_wake_get(dev_priv);
1839     +
1840     /* Stop the ring if it's running. */
1841     I915_WRITE_CTL(ring, 0);
1842     I915_WRITE_HEAD(ring, 0);
1843     @@ -290,9 +295,9 @@ static int init_ring_common(struct intel_ring_buffer *ring)
1844     | RING_VALID);
1845    
1846     /* If the head is still not zero, the ring is dead */
1847     - if ((I915_READ_CTL(ring) & RING_VALID) == 0 ||
1848     - I915_READ_START(ring) != obj->gtt_offset ||
1849     - (I915_READ_HEAD(ring) & HEAD_ADDR) != 0) {
1850     + if (wait_for((I915_READ_CTL(ring) & RING_VALID) != 0 &&
1851     + I915_READ_START(ring) == obj->gtt_offset &&
1852     + (I915_READ_HEAD(ring) & HEAD_ADDR) == 0, 50)) {
1853     DRM_ERROR("%s initialization failed "
1854     "ctl %08x head %08x tail %08x start %08x\n",
1855     ring->name,
1856     @@ -300,7 +305,8 @@ static int init_ring_common(struct intel_ring_buffer *ring)
1857     I915_READ_HEAD(ring),
1858     I915_READ_TAIL(ring),
1859     I915_READ_START(ring));
1860     - return -EIO;
1861     + ret = -EIO;
1862     + goto out;
1863     }
1864    
1865     if (!drm_core_check_feature(ring->dev, DRIVER_MODESET))
1866     @@ -312,7 +318,11 @@ static int init_ring_common(struct intel_ring_buffer *ring)
1867     ring->last_retired_head = -1;
1868     }
1869    
1870     - return 0;
1871     +out:
1872     + if (HAS_FORCE_WAKE(dev))
1873     + gen6_gt_force_wake_put(dev_priv);
1874     +
1875     + return ret;
1876     }
1877    
1878     static int
1879     diff --git a/drivers/gpu/drm/i915/intel_sdvo.c b/drivers/gpu/drm/i915/intel_sdvo.c
1880     index b96e8c8..1b6b157 100644
1881     --- a/drivers/gpu/drm/i915/intel_sdvo.c
1882     +++ b/drivers/gpu/drm/i915/intel_sdvo.c
1883     @@ -2528,6 +2528,7 @@ bool intel_sdvo_init(struct drm_device *dev, int sdvo_reg)
1884     struct drm_i915_private *dev_priv = dev->dev_private;
1885     struct intel_encoder *intel_encoder;
1886     struct intel_sdvo *intel_sdvo;
1887     + u32 hotplug_mask;
1888     int i;
1889    
1890     intel_sdvo = kzalloc(sizeof(struct intel_sdvo), GFP_KERNEL);
1891     @@ -2558,10 +2559,17 @@ bool intel_sdvo_init(struct drm_device *dev, int sdvo_reg)
1892     }
1893     }
1894    
1895     - if (IS_SDVOB(sdvo_reg))
1896     - dev_priv->hotplug_supported_mask |= SDVOB_HOTPLUG_INT_STATUS;
1897     - else
1898     - dev_priv->hotplug_supported_mask |= SDVOC_HOTPLUG_INT_STATUS;
1899     + hotplug_mask = 0;
1900     + if (IS_G4X(dev)) {
1901     + hotplug_mask = IS_SDVOB(sdvo_reg) ?
1902     + SDVOB_HOTPLUG_INT_STATUS_G4X : SDVOC_HOTPLUG_INT_STATUS_G4X;
1903     + } else if (IS_GEN4(dev)) {
1904     + hotplug_mask = IS_SDVOB(sdvo_reg) ?
1905     + SDVOB_HOTPLUG_INT_STATUS_I965 : SDVOC_HOTPLUG_INT_STATUS_I965;
1906     + } else {
1907     + hotplug_mask = IS_SDVOB(sdvo_reg) ?
1908     + SDVOB_HOTPLUG_INT_STATUS_I915 : SDVOC_HOTPLUG_INT_STATUS_I915;
1909     + }
1910    
1911     drm_encoder_helper_add(&intel_encoder->base, &intel_sdvo_helper_funcs);
1912    
1913     @@ -2569,14 +2577,6 @@ bool intel_sdvo_init(struct drm_device *dev, int sdvo_reg)
1914     if (!intel_sdvo_get_capabilities(intel_sdvo, &intel_sdvo->caps))
1915     goto err;
1916    
1917     - /* Set up hotplug command - note paranoia about contents of reply.
1918     - * We assume that the hardware is in a sane state, and only touch
1919     - * the bits we think we understand.
1920     - */
1921     - intel_sdvo_get_value(intel_sdvo, SDVO_CMD_GET_ACTIVE_HOT_PLUG,
1922     - &intel_sdvo->hotplug_active, 2);
1923     - intel_sdvo->hotplug_active[0] &= ~0x3;
1924     -
1925     if (intel_sdvo_output_setup(intel_sdvo,
1926     intel_sdvo->caps.output_flags) != true) {
1927     DRM_DEBUG_KMS("SDVO output failed to setup on SDVO%c\n",
1928     @@ -2584,6 +2584,12 @@ bool intel_sdvo_init(struct drm_device *dev, int sdvo_reg)
1929     goto err;
1930     }
1931    
1932     + /* Only enable the hotplug irq if we need it, to work around noisy
1933     + * hotplug lines.
1934     + */
1935     + if (intel_sdvo->hotplug_active[0])
1936     + dev_priv->hotplug_supported_mask |= hotplug_mask;
1937     +
1938     intel_sdvo_select_ddc_bus(dev_priv, intel_sdvo, sdvo_reg);
1939    
1940     /* Set the input timing to the screen. Assume always input 0. */
1941     diff --git a/drivers/gpu/drm/nouveau/nv04_dfp.c b/drivers/gpu/drm/nouveau/nv04_dfp.c
1942     index 473f30a..71b6235 100644
1943     --- a/drivers/gpu/drm/nouveau/nv04_dfp.c
1944     +++ b/drivers/gpu/drm/nouveau/nv04_dfp.c
1945     @@ -504,7 +504,7 @@ static void nv04_dfp_update_backlight(struct drm_encoder *encoder, int mode)
1946    
1947     static inline bool is_powersaving_dpms(int mode)
1948     {
1949     - return (mode != DRM_MODE_DPMS_ON);
1950     + return mode != DRM_MODE_DPMS_ON && mode != NV_DPMS_CLEARED;
1951     }
1952    
1953     static void nv04_lvds_dpms(struct drm_encoder *encoder, int mode)
1954     diff --git a/drivers/gpu/drm/radeon/atombios_crtc.c b/drivers/gpu/drm/radeon/atombios_crtc.c
1955     index 19f4082..15594a3 100644
1956     --- a/drivers/gpu/drm/radeon/atombios_crtc.c
1957     +++ b/drivers/gpu/drm/radeon/atombios_crtc.c
1958     @@ -1533,8 +1533,12 @@ static int radeon_atom_pick_pll(struct drm_crtc *crtc)
1959     * crtc virtual pixel clock.
1960     */
1961     if (ENCODER_MODE_IS_DP(atombios_get_encoder_mode(test_encoder))) {
1962     - if (ASIC_IS_DCE5(rdev) || rdev->clock.dp_extclk)
1963     + if (rdev->clock.dp_extclk)
1964     return ATOM_PPLL_INVALID;
1965     + else if (ASIC_IS_DCE6(rdev))
1966     + return ATOM_PPLL0;
1967     + else if (ASIC_IS_DCE5(rdev))
1968     + return ATOM_DCPLL;
1969     }
1970     }
1971     }
1972     diff --git a/drivers/gpu/drm/radeon/atombios_encoders.c b/drivers/gpu/drm/radeon/atombios_encoders.c
1973     index f6176bc..23e3ea6 100644
1974     --- a/drivers/gpu/drm/radeon/atombios_encoders.c
1975     +++ b/drivers/gpu/drm/radeon/atombios_encoders.c
1976     @@ -95,7 +95,7 @@ static bool radeon_atom_mode_fixup(struct drm_encoder *encoder,
1977     ((radeon_encoder->active_device & (ATOM_DEVICE_DFP_SUPPORT | ATOM_DEVICE_LCD_SUPPORT)) ||
1978     (radeon_encoder_get_dp_bridge_encoder_id(encoder) != ENCODER_OBJECT_ID_NONE))) {
1979     struct drm_connector *connector = radeon_get_connector_for_encoder(encoder);
1980     - radeon_dp_set_link_config(connector, mode);
1981     + radeon_dp_set_link_config(connector, adjusted_mode);
1982     }
1983    
1984     return true;
1985     diff --git a/drivers/gpu/drm/radeon/evergreen_cs.c b/drivers/gpu/drm/radeon/evergreen_cs.c
1986     index 22c84bc..2cbd369 100644
1987     --- a/drivers/gpu/drm/radeon/evergreen_cs.c
1988     +++ b/drivers/gpu/drm/radeon/evergreen_cs.c
1989     @@ -2670,6 +2670,7 @@ static bool evergreen_vm_reg_valid(u32 reg)
1990    
1991     /* check config regs */
1992     switch (reg) {
1993     + case WAIT_UNTIL:
1994     case GRBM_GFX_INDEX:
1995     case CP_STRMOUT_CNTL:
1996     case CP_COHER_CNTL:
1997     diff --git a/drivers/gpu/drm/radeon/radeon_connectors.c b/drivers/gpu/drm/radeon/radeon_connectors.c
1998     index 3fb7ca9..ab63bcd 100644
1999     --- a/drivers/gpu/drm/radeon/radeon_connectors.c
2000     +++ b/drivers/gpu/drm/radeon/radeon_connectors.c
2001     @@ -689,7 +689,7 @@ radeon_vga_detect(struct drm_connector *connector, bool force)
2002     ret = connector_status_disconnected;
2003    
2004     if (radeon_connector->ddc_bus)
2005     - dret = radeon_ddc_probe(radeon_connector);
2006     + dret = radeon_ddc_probe(radeon_connector, false);
2007     if (dret) {
2008     radeon_connector->detected_by_load = false;
2009     if (radeon_connector->edid) {
2010     @@ -895,7 +895,7 @@ radeon_dvi_detect(struct drm_connector *connector, bool force)
2011     return connector->status;
2012    
2013     if (radeon_connector->ddc_bus)
2014     - dret = radeon_ddc_probe(radeon_connector);
2015     + dret = radeon_ddc_probe(radeon_connector, false);
2016     if (dret) {
2017     radeon_connector->detected_by_load = false;
2018     if (radeon_connector->edid) {
2019     @@ -1335,7 +1335,8 @@ radeon_dp_detect(struct drm_connector *connector, bool force)
2020     if (encoder) {
2021     /* setup ddc on the bridge */
2022     radeon_atom_ext_encoder_setup_ddc(encoder);
2023     - if (radeon_ddc_probe(radeon_connector)) /* try DDC */
2024     + /* bridge chips are always aux */
2025     + if (radeon_ddc_probe(radeon_connector, true)) /* try DDC */
2026     ret = connector_status_connected;
2027     else if (radeon_connector->dac_load_detect) { /* try load detection */
2028     struct drm_encoder_helper_funcs *encoder_funcs = encoder->helper_private;
2029     @@ -1353,7 +1354,8 @@ radeon_dp_detect(struct drm_connector *connector, bool force)
2030     if (radeon_dp_getdpcd(radeon_connector))
2031     ret = connector_status_connected;
2032     } else {
2033     - if (radeon_ddc_probe(radeon_connector))
2034     + /* try non-aux ddc (DP to DVI/HMDI/etc. adapter) */
2035     + if (radeon_ddc_probe(radeon_connector, false))
2036     ret = connector_status_connected;
2037     }
2038     }
2039     diff --git a/drivers/gpu/drm/radeon/radeon_display.c b/drivers/gpu/drm/radeon/radeon_display.c
2040     index 0a1d4bd..173b97b 100644
2041     --- a/drivers/gpu/drm/radeon/radeon_display.c
2042     +++ b/drivers/gpu/drm/radeon/radeon_display.c
2043     @@ -713,10 +713,15 @@ int radeon_ddc_get_modes(struct radeon_connector *radeon_connector)
2044     if (radeon_connector->router.ddc_valid)
2045     radeon_router_select_ddc_port(radeon_connector);
2046    
2047     - if ((radeon_connector->base.connector_type == DRM_MODE_CONNECTOR_DisplayPort) ||
2048     - (radeon_connector->base.connector_type == DRM_MODE_CONNECTOR_eDP) ||
2049     - (radeon_connector_encoder_get_dp_bridge_encoder_id(&radeon_connector->base) !=
2050     - ENCODER_OBJECT_ID_NONE)) {
2051     + if (radeon_connector_encoder_get_dp_bridge_encoder_id(&radeon_connector->base) !=
2052     + ENCODER_OBJECT_ID_NONE) {
2053     + struct radeon_connector_atom_dig *dig = radeon_connector->con_priv;
2054     +
2055     + if (dig->dp_i2c_bus)
2056     + radeon_connector->edid = drm_get_edid(&radeon_connector->base,
2057     + &dig->dp_i2c_bus->adapter);
2058     + } else if ((radeon_connector->base.connector_type == DRM_MODE_CONNECTOR_DisplayPort) ||
2059     + (radeon_connector->base.connector_type == DRM_MODE_CONNECTOR_eDP)) {
2060     struct radeon_connector_atom_dig *dig = radeon_connector->con_priv;
2061    
2062     if ((dig->dp_sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT ||
2063     diff --git a/drivers/gpu/drm/radeon/radeon_i2c.c b/drivers/gpu/drm/radeon/radeon_i2c.c
2064     index 3edec1c..6076e85 100644
2065     --- a/drivers/gpu/drm/radeon/radeon_i2c.c
2066     +++ b/drivers/gpu/drm/radeon/radeon_i2c.c
2067     @@ -39,7 +39,7 @@ extern u32 radeon_atom_hw_i2c_func(struct i2c_adapter *adap);
2068     * radeon_ddc_probe
2069     *
2070     */
2071     -bool radeon_ddc_probe(struct radeon_connector *radeon_connector)
2072     +bool radeon_ddc_probe(struct radeon_connector *radeon_connector, bool use_aux)
2073     {
2074     u8 out = 0x0;
2075     u8 buf[8];
2076     @@ -63,7 +63,13 @@ bool radeon_ddc_probe(struct radeon_connector *radeon_connector)
2077     if (radeon_connector->router.ddc_valid)
2078     radeon_router_select_ddc_port(radeon_connector);
2079    
2080     - ret = i2c_transfer(&radeon_connector->ddc_bus->adapter, msgs, 2);
2081     + if (use_aux) {
2082     + struct radeon_connector_atom_dig *dig = radeon_connector->con_priv;
2083     + ret = i2c_transfer(&dig->dp_i2c_bus->adapter, msgs, 2);
2084     + } else {
2085     + ret = i2c_transfer(&radeon_connector->ddc_bus->adapter, msgs, 2);
2086     + }
2087     +
2088     if (ret != 2)
2089     /* Couldn't find an accessible DDC on this connector */
2090     return false;
2091     diff --git a/drivers/gpu/drm/radeon/radeon_legacy_encoders.c b/drivers/gpu/drm/radeon/radeon_legacy_encoders.c
2092     index d92f483..53b07a3 100644
2093     --- a/drivers/gpu/drm/radeon/radeon_legacy_encoders.c
2094     +++ b/drivers/gpu/drm/radeon/radeon_legacy_encoders.c
2095     @@ -617,6 +617,14 @@ static enum drm_connector_status radeon_legacy_primary_dac_detect(struct drm_enc
2096     enum drm_connector_status found = connector_status_disconnected;
2097     bool color = true;
2098    
2099     + /* just don't bother on RN50 those chip are often connected to remoting
2100     + * console hw and often we get failure to load detect those. So to make
2101     + * everyone happy report the encoder as always connected.
2102     + */
2103     + if (ASIC_IS_RN50(rdev)) {
2104     + return connector_status_connected;
2105     + }
2106     +
2107     /* save the regs we need */
2108     vclk_ecp_cntl = RREG32_PLL(RADEON_VCLK_ECP_CNTL);
2109     crtc_ext_cntl = RREG32(RADEON_CRTC_EXT_CNTL);
2110     diff --git a/drivers/gpu/drm/radeon/radeon_mode.h b/drivers/gpu/drm/radeon/radeon_mode.h
2111     index 778c1f0..dabfefd 100644
2112     --- a/drivers/gpu/drm/radeon/radeon_mode.h
2113     +++ b/drivers/gpu/drm/radeon/radeon_mode.h
2114     @@ -527,7 +527,7 @@ extern void radeon_i2c_put_byte(struct radeon_i2c_chan *i2c,
2115     u8 val);
2116     extern void radeon_router_select_ddc_port(struct radeon_connector *radeon_connector);
2117     extern void radeon_router_select_cd_port(struct radeon_connector *radeon_connector);
2118     -extern bool radeon_ddc_probe(struct radeon_connector *radeon_connector);
2119     +extern bool radeon_ddc_probe(struct radeon_connector *radeon_connector, bool use_aux);
2120     extern int radeon_ddc_get_modes(struct radeon_connector *radeon_connector);
2121    
2122     extern struct drm_encoder *radeon_best_encoder(struct drm_connector *connector);
2123     diff --git a/drivers/gpu/drm/udl/udl_connector.c b/drivers/gpu/drm/udl/udl_connector.c
2124     index 8d9dc44..3234224 100644
2125     --- a/drivers/gpu/drm/udl/udl_connector.c
2126     +++ b/drivers/gpu/drm/udl/udl_connector.c
2127     @@ -22,13 +22,17 @@
2128     static u8 *udl_get_edid(struct udl_device *udl)
2129     {
2130     u8 *block;
2131     - char rbuf[3];
2132     + char *rbuf;
2133     int ret, i;
2134    
2135     block = kmalloc(EDID_LENGTH, GFP_KERNEL);
2136     if (block == NULL)
2137     return NULL;
2138    
2139     + rbuf = kmalloc(2, GFP_KERNEL);
2140     + if (rbuf == NULL)
2141     + goto error;
2142     +
2143     for (i = 0; i < EDID_LENGTH; i++) {
2144     ret = usb_control_msg(udl->ddev->usbdev,
2145     usb_rcvctrlpipe(udl->ddev->usbdev, 0), (0x02),
2146     @@ -36,16 +40,17 @@ static u8 *udl_get_edid(struct udl_device *udl)
2147     HZ);
2148     if (ret < 1) {
2149     DRM_ERROR("Read EDID byte %d failed err %x\n", i, ret);
2150     - i--;
2151     goto error;
2152     }
2153     block[i] = rbuf[1];
2154     }
2155    
2156     + kfree(rbuf);
2157     return block;
2158    
2159     error:
2160     kfree(block);
2161     + kfree(rbuf);
2162     return NULL;
2163     }
2164    
2165     @@ -59,6 +64,14 @@ static int udl_get_modes(struct drm_connector *connector)
2166    
2167     connector->display_info.raw_edid = (char *)edid;
2168    
2169     + /*
2170     + * We only read the main block, but if the monitor reports extension
2171     + * blocks then the drm edid code expects them to be present, so patch
2172     + * the extension count to 0.
2173     + */
2174     + edid->checksum += edid->extensions;
2175     + edid->extensions = 0;
2176     +
2177     drm_mode_connector_update_edid_property(connector, edid);
2178     ret = drm_add_edid_modes(connector, edid);
2179     connector->display_info.raw_edid = NULL;
2180     diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h
2181     index 41ad6ff..5583899 100644
2182     --- a/drivers/hid/hid-ids.h
2183     +++ b/drivers/hid/hid-ids.h
2184     @@ -664,6 +664,9 @@
2185     #define USB_VENDOR_ID_SIGMA_MICRO 0x1c4f
2186     #define USB_DEVICE_ID_SIGMA_MICRO_KEYBOARD 0x0002
2187    
2188     +#define USB_VENDOR_ID_SIGMATEL 0x066F
2189     +#define USB_DEVICE_ID_SIGMATEL_STMP3780 0x3780
2190     +
2191     #define USB_VENDOR_ID_SKYCABLE 0x1223
2192     #define USB_DEVICE_ID_SKYCABLE_WIRELESS_PRESENTER 0x3F07
2193    
2194     diff --git a/drivers/hid/usbhid/hid-quirks.c b/drivers/hid/usbhid/hid-quirks.c
2195     index dc9697c..9fea98f 100644
2196     --- a/drivers/hid/usbhid/hid-quirks.c
2197     +++ b/drivers/hid/usbhid/hid-quirks.c
2198     @@ -78,6 +78,7 @@ static const struct hid_blacklist {
2199     { USB_VENDOR_ID_QUANTA, USB_DEVICE_ID_PIXART_IMAGING_INC_OPTICAL_TOUCH_SCREEN, HID_QUIRK_NOGET },
2200     { USB_VENDOR_ID_QUANTA, USB_DEVICE_ID_QUANTA_OPTICAL_TOUCH_3008, HID_QUIRK_NOGET },
2201     { USB_VENDOR_ID_SENNHEISER, USB_DEVICE_ID_SENNHEISER_BTD500USB, HID_QUIRK_NOGET },
2202     + { USB_VENDOR_ID_SIGMATEL, USB_DEVICE_ID_SIGMATEL_STMP3780, HID_QUIRK_NOGET },
2203     { USB_VENDOR_ID_SUN, USB_DEVICE_ID_RARITAN_KVM_DONGLE, HID_QUIRK_NOGET },
2204     { USB_VENDOR_ID_SYMBOL, USB_DEVICE_ID_SYMBOL_SCANNER_1, HID_QUIRK_NOGET },
2205     { USB_VENDOR_ID_SYMBOL, USB_DEVICE_ID_SYMBOL_SCANNER_2, HID_QUIRK_NOGET },
2206     diff --git a/drivers/hwmon/lm73.c b/drivers/hwmon/lm73.c
2207     index 8fa2632..7272176 100644
2208     --- a/drivers/hwmon/lm73.c
2209     +++ b/drivers/hwmon/lm73.c
2210     @@ -49,6 +49,7 @@ static ssize_t set_temp(struct device *dev, struct device_attribute *da,
2211     struct i2c_client *client = to_i2c_client(dev);
2212     long temp;
2213     short value;
2214     + s32 err;
2215    
2216     int status = kstrtol(buf, 10, &temp);
2217     if (status < 0)
2218     @@ -57,8 +58,8 @@ static ssize_t set_temp(struct device *dev, struct device_attribute *da,
2219     /* Write value */
2220     value = (short) SENSORS_LIMIT(temp/250, (LM73_TEMP_MIN*4),
2221     (LM73_TEMP_MAX*4)) << 5;
2222     - i2c_smbus_write_word_swapped(client, attr->index, value);
2223     - return count;
2224     + err = i2c_smbus_write_word_swapped(client, attr->index, value);
2225     + return (err < 0) ? err : count;
2226     }
2227    
2228     static ssize_t show_temp(struct device *dev, struct device_attribute *da,
2229     @@ -66,11 +67,16 @@ static ssize_t show_temp(struct device *dev, struct device_attribute *da,
2230     {
2231     struct sensor_device_attribute *attr = to_sensor_dev_attr(da);
2232     struct i2c_client *client = to_i2c_client(dev);
2233     + int temp;
2234     +
2235     + s32 err = i2c_smbus_read_word_swapped(client, attr->index);
2236     + if (err < 0)
2237     + return err;
2238     +
2239     /* use integer division instead of equivalent right shift to
2240     guarantee arithmetic shift and preserve the sign */
2241     - int temp = ((s16) (i2c_smbus_read_word_swapped(client,
2242     - attr->index))*250) / 32;
2243     - return sprintf(buf, "%d\n", temp);
2244     + temp = (((s16) err) * 250) / 32;
2245     + return scnprintf(buf, PAGE_SIZE, "%d\n", temp);
2246     }
2247    
2248    
2249     diff --git a/drivers/infiniband/hw/nes/nes.h b/drivers/infiniband/hw/nes/nes.h
2250     index c438e46..3f41d9f 100644
2251     --- a/drivers/infiniband/hw/nes/nes.h
2252     +++ b/drivers/infiniband/hw/nes/nes.h
2253     @@ -524,6 +524,7 @@ void nes_iwarp_ce_handler(struct nes_device *, struct nes_hw_cq *);
2254     int nes_destroy_cqp(struct nes_device *);
2255     int nes_nic_cm_xmit(struct sk_buff *, struct net_device *);
2256     void nes_recheck_link_status(struct work_struct *work);
2257     +void nes_terminate_timeout(unsigned long context);
2258    
2259     /* nes_nic.c */
2260     struct net_device *nes_netdev_init(struct nes_device *, void __iomem *);
2261     diff --git a/drivers/infiniband/hw/nes/nes_hw.c b/drivers/infiniband/hw/nes/nes_hw.c
2262     index d42c9f4..96801c3 100644
2263     --- a/drivers/infiniband/hw/nes/nes_hw.c
2264     +++ b/drivers/infiniband/hw/nes/nes_hw.c
2265     @@ -75,7 +75,6 @@ static void nes_process_iwarp_aeqe(struct nes_device *nesdev,
2266     static void process_critical_error(struct nes_device *nesdev);
2267     static void nes_process_mac_intr(struct nes_device *nesdev, u32 mac_number);
2268     static unsigned int nes_reset_adapter_ne020(struct nes_device *nesdev, u8 *OneG_Mode);
2269     -static void nes_terminate_timeout(unsigned long context);
2270     static void nes_terminate_start_timer(struct nes_qp *nesqp);
2271    
2272     #ifdef CONFIG_INFINIBAND_NES_DEBUG
2273     @@ -3522,7 +3521,7 @@ static void nes_terminate_received(struct nes_device *nesdev,
2274     }
2275    
2276     /* Timeout routine in case terminate fails to complete */
2277     -static void nes_terminate_timeout(unsigned long context)
2278     +void nes_terminate_timeout(unsigned long context)
2279     {
2280     struct nes_qp *nesqp = (struct nes_qp *)(unsigned long)context;
2281    
2282     @@ -3532,11 +3531,7 @@ static void nes_terminate_timeout(unsigned long context)
2283     /* Set a timer in case hw cannot complete the terminate sequence */
2284     static void nes_terminate_start_timer(struct nes_qp *nesqp)
2285     {
2286     - init_timer(&nesqp->terminate_timer);
2287     - nesqp->terminate_timer.function = nes_terminate_timeout;
2288     - nesqp->terminate_timer.expires = jiffies + HZ;
2289     - nesqp->terminate_timer.data = (unsigned long)nesqp;
2290     - add_timer(&nesqp->terminate_timer);
2291     + mod_timer(&nesqp->terminate_timer, (jiffies + HZ));
2292     }
2293    
2294     /**
2295     diff --git a/drivers/infiniband/hw/nes/nes_verbs.c b/drivers/infiniband/hw/nes/nes_verbs.c
2296     index 8b8812d..da84ea3 100644
2297     --- a/drivers/infiniband/hw/nes/nes_verbs.c
2298     +++ b/drivers/infiniband/hw/nes/nes_verbs.c
2299     @@ -1404,6 +1404,9 @@ static struct ib_qp *nes_create_qp(struct ib_pd *ibpd,
2300     }
2301    
2302     nesqp->sig_all = (init_attr->sq_sig_type == IB_SIGNAL_ALL_WR);
2303     + init_timer(&nesqp->terminate_timer);
2304     + nesqp->terminate_timer.function = nes_terminate_timeout;
2305     + nesqp->terminate_timer.data = (unsigned long)nesqp;
2306    
2307     /* update the QP table */
2308     nesdev->nesadapter->qp_table[nesqp->hwqp.qp_id-NES_FIRST_QPN] = nesqp;
2309     @@ -1413,7 +1416,6 @@ static struct ib_qp *nes_create_qp(struct ib_pd *ibpd,
2310     return &nesqp->ibqp;
2311     }
2312    
2313     -
2314     /**
2315     * nes_clean_cq
2316     */
2317     @@ -2559,6 +2561,11 @@ static struct ib_mr *nes_reg_user_mr(struct ib_pd *pd, u64 start, u64 length,
2318     return ibmr;
2319     case IWNES_MEMREG_TYPE_QP:
2320     case IWNES_MEMREG_TYPE_CQ:
2321     + if (!region->length) {
2322     + nes_debug(NES_DBG_MR, "Unable to register zero length region for CQ\n");
2323     + ib_umem_release(region);
2324     + return ERR_PTR(-EINVAL);
2325     + }
2326     nespbl = kzalloc(sizeof(*nespbl), GFP_KERNEL);
2327     if (!nespbl) {
2328     nes_debug(NES_DBG_MR, "Unable to allocate PBL\n");
2329     diff --git a/drivers/iommu/intel-iommu.c b/drivers/iommu/intel-iommu.c
2330     index 0d251d3..9c34db8 100644
2331     --- a/drivers/iommu/intel-iommu.c
2332     +++ b/drivers/iommu/intel-iommu.c
2333     @@ -1826,10 +1826,17 @@ static int __domain_mapping(struct dmar_domain *domain, unsigned long iov_pfn,
2334     if (!pte)
2335     return -ENOMEM;
2336     /* It is large page*/
2337     - if (largepage_lvl > 1)
2338     + if (largepage_lvl > 1) {
2339     pteval |= DMA_PTE_LARGE_PAGE;
2340     - else
2341     + /* Ensure that old small page tables are removed to make room
2342     + for superpage, if they exist. */
2343     + dma_pte_clear_range(domain, iov_pfn,
2344     + iov_pfn + lvl_to_nr_pages(largepage_lvl) - 1);
2345     + dma_pte_free_pagetable(domain, iov_pfn,
2346     + iov_pfn + lvl_to_nr_pages(largepage_lvl) - 1);
2347     + } else {
2348     pteval &= ~(uint64_t)DMA_PTE_LARGE_PAGE;
2349     + }
2350    
2351     }
2352     /* We don't need lock here, nobody else
2353     diff --git a/drivers/md/dm-ioctl.c b/drivers/md/dm-ioctl.c
2354     index a1a3e6d..f011d4b 100644
2355     --- a/drivers/md/dm-ioctl.c
2356     +++ b/drivers/md/dm-ioctl.c
2357     @@ -1563,6 +1563,14 @@ static int copy_params(struct dm_ioctl __user *user, struct dm_ioctl **param)
2358     if (copy_from_user(dmi, user, tmp.data_size))
2359     goto bad;
2360    
2361     + /*
2362     + * Abort if something changed the ioctl data while it was being copied.
2363     + */
2364     + if (dmi->data_size != tmp.data_size) {
2365     + DMERR("rejecting ioctl: data size modified while processing parameters");
2366     + goto bad;
2367     + }
2368     +
2369     /* Wipe the user buffer so we do not return it to userspace */
2370     if (secure_data && clear_user(user, tmp.data_size))
2371     goto bad;
2372     diff --git a/drivers/md/persistent-data/dm-btree-internal.h b/drivers/md/persistent-data/dm-btree-internal.h
2373     index 5709bfe..accbb05 100644
2374     --- a/drivers/md/persistent-data/dm-btree-internal.h
2375     +++ b/drivers/md/persistent-data/dm-btree-internal.h
2376     @@ -36,13 +36,13 @@ struct node_header {
2377     __le32 padding;
2378     } __packed;
2379    
2380     -struct node {
2381     +struct btree_node {
2382     struct node_header header;
2383     __le64 keys[0];
2384     } __packed;
2385    
2386    
2387     -void inc_children(struct dm_transaction_manager *tm, struct node *n,
2388     +void inc_children(struct dm_transaction_manager *tm, struct btree_node *n,
2389     struct dm_btree_value_type *vt);
2390    
2391     int new_block(struct dm_btree_info *info, struct dm_block **result);
2392     @@ -64,7 +64,7 @@ struct ro_spine {
2393     void init_ro_spine(struct ro_spine *s, struct dm_btree_info *info);
2394     int exit_ro_spine(struct ro_spine *s);
2395     int ro_step(struct ro_spine *s, dm_block_t new_child);
2396     -struct node *ro_node(struct ro_spine *s);
2397     +struct btree_node *ro_node(struct ro_spine *s);
2398    
2399     struct shadow_spine {
2400     struct dm_btree_info *info;
2401     @@ -98,17 +98,17 @@ int shadow_root(struct shadow_spine *s);
2402     /*
2403     * Some inlines.
2404     */
2405     -static inline __le64 *key_ptr(struct node *n, uint32_t index)
2406     +static inline __le64 *key_ptr(struct btree_node *n, uint32_t index)
2407     {
2408     return n->keys + index;
2409     }
2410    
2411     -static inline void *value_base(struct node *n)
2412     +static inline void *value_base(struct btree_node *n)
2413     {
2414     return &n->keys[le32_to_cpu(n->header.max_entries)];
2415     }
2416    
2417     -static inline void *value_ptr(struct node *n, uint32_t index)
2418     +static inline void *value_ptr(struct btree_node *n, uint32_t index)
2419     {
2420     uint32_t value_size = le32_to_cpu(n->header.value_size);
2421     return value_base(n) + (value_size * index);
2422     @@ -117,7 +117,7 @@ static inline void *value_ptr(struct node *n, uint32_t index)
2423     /*
2424     * Assumes the values are suitably-aligned and converts to core format.
2425     */
2426     -static inline uint64_t value64(struct node *n, uint32_t index)
2427     +static inline uint64_t value64(struct btree_node *n, uint32_t index)
2428     {
2429     __le64 *values_le = value_base(n);
2430    
2431     @@ -127,7 +127,7 @@ static inline uint64_t value64(struct node *n, uint32_t index)
2432     /*
2433     * Searching for a key within a single node.
2434     */
2435     -int lower_bound(struct node *n, uint64_t key);
2436     +int lower_bound(struct btree_node *n, uint64_t key);
2437    
2438     extern struct dm_block_validator btree_node_validator;
2439    
2440     diff --git a/drivers/md/persistent-data/dm-btree-remove.c b/drivers/md/persistent-data/dm-btree-remove.c
2441     index aa71e23..c4f2813 100644
2442     --- a/drivers/md/persistent-data/dm-btree-remove.c
2443     +++ b/drivers/md/persistent-data/dm-btree-remove.c
2444     @@ -53,7 +53,7 @@
2445     /*
2446     * Some little utilities for moving node data around.
2447     */
2448     -static void node_shift(struct node *n, int shift)
2449     +static void node_shift(struct btree_node *n, int shift)
2450     {
2451     uint32_t nr_entries = le32_to_cpu(n->header.nr_entries);
2452     uint32_t value_size = le32_to_cpu(n->header.value_size);
2453     @@ -79,7 +79,7 @@ static void node_shift(struct node *n, int shift)
2454     }
2455     }
2456    
2457     -static void node_copy(struct node *left, struct node *right, int shift)
2458     +static void node_copy(struct btree_node *left, struct btree_node *right, int shift)
2459     {
2460     uint32_t nr_left = le32_to_cpu(left->header.nr_entries);
2461     uint32_t value_size = le32_to_cpu(left->header.value_size);
2462     @@ -108,7 +108,7 @@ static void node_copy(struct node *left, struct node *right, int shift)
2463     /*
2464     * Delete a specific entry from a leaf node.
2465     */
2466     -static void delete_at(struct node *n, unsigned index)
2467     +static void delete_at(struct btree_node *n, unsigned index)
2468     {
2469     unsigned nr_entries = le32_to_cpu(n->header.nr_entries);
2470     unsigned nr_to_copy = nr_entries - (index + 1);
2471     @@ -128,7 +128,7 @@ static void delete_at(struct node *n, unsigned index)
2472     n->header.nr_entries = cpu_to_le32(nr_entries - 1);
2473     }
2474    
2475     -static unsigned merge_threshold(struct node *n)
2476     +static unsigned merge_threshold(struct btree_node *n)
2477     {
2478     return le32_to_cpu(n->header.max_entries) / 3;
2479     }
2480     @@ -136,7 +136,7 @@ static unsigned merge_threshold(struct node *n)
2481     struct child {
2482     unsigned index;
2483     struct dm_block *block;
2484     - struct node *n;
2485     + struct btree_node *n;
2486     };
2487    
2488     static struct dm_btree_value_type le64_type = {
2489     @@ -147,7 +147,7 @@ static struct dm_btree_value_type le64_type = {
2490     .equal = NULL
2491     };
2492    
2493     -static int init_child(struct dm_btree_info *info, struct node *parent,
2494     +static int init_child(struct dm_btree_info *info, struct btree_node *parent,
2495     unsigned index, struct child *result)
2496     {
2497     int r, inc;
2498     @@ -177,7 +177,7 @@ static int exit_child(struct dm_btree_info *info, struct child *c)
2499     return dm_tm_unlock(info->tm, c->block);
2500     }
2501    
2502     -static void shift(struct node *left, struct node *right, int count)
2503     +static void shift(struct btree_node *left, struct btree_node *right, int count)
2504     {
2505     uint32_t nr_left = le32_to_cpu(left->header.nr_entries);
2506     uint32_t nr_right = le32_to_cpu(right->header.nr_entries);
2507     @@ -203,11 +203,11 @@ static void shift(struct node *left, struct node *right, int count)
2508     right->header.nr_entries = cpu_to_le32(nr_right + count);
2509     }
2510    
2511     -static void __rebalance2(struct dm_btree_info *info, struct node *parent,
2512     +static void __rebalance2(struct dm_btree_info *info, struct btree_node *parent,
2513     struct child *l, struct child *r)
2514     {
2515     - struct node *left = l->n;
2516     - struct node *right = r->n;
2517     + struct btree_node *left = l->n;
2518     + struct btree_node *right = r->n;
2519     uint32_t nr_left = le32_to_cpu(left->header.nr_entries);
2520     uint32_t nr_right = le32_to_cpu(right->header.nr_entries);
2521     unsigned threshold = 2 * merge_threshold(left) + 1;
2522     @@ -239,7 +239,7 @@ static int rebalance2(struct shadow_spine *s, struct dm_btree_info *info,
2523     unsigned left_index)
2524     {
2525     int r;
2526     - struct node *parent;
2527     + struct btree_node *parent;
2528     struct child left, right;
2529    
2530     parent = dm_block_data(shadow_current(s));
2531     @@ -270,9 +270,9 @@ static int rebalance2(struct shadow_spine *s, struct dm_btree_info *info,
2532     * in right, then rebalance2. This wastes some cpu, but I want something
2533     * simple atm.
2534     */
2535     -static void delete_center_node(struct dm_btree_info *info, struct node *parent,
2536     +static void delete_center_node(struct dm_btree_info *info, struct btree_node *parent,
2537     struct child *l, struct child *c, struct child *r,
2538     - struct node *left, struct node *center, struct node *right,
2539     + struct btree_node *left, struct btree_node *center, struct btree_node *right,
2540     uint32_t nr_left, uint32_t nr_center, uint32_t nr_right)
2541     {
2542     uint32_t max_entries = le32_to_cpu(left->header.max_entries);
2543     @@ -301,9 +301,9 @@ static void delete_center_node(struct dm_btree_info *info, struct node *parent,
2544     /*
2545     * Redistributes entries among 3 sibling nodes.
2546     */
2547     -static void redistribute3(struct dm_btree_info *info, struct node *parent,
2548     +static void redistribute3(struct dm_btree_info *info, struct btree_node *parent,
2549     struct child *l, struct child *c, struct child *r,
2550     - struct node *left, struct node *center, struct node *right,
2551     + struct btree_node *left, struct btree_node *center, struct btree_node *right,
2552     uint32_t nr_left, uint32_t nr_center, uint32_t nr_right)
2553     {
2554     int s;
2555     @@ -343,12 +343,12 @@ static void redistribute3(struct dm_btree_info *info, struct node *parent,
2556     *key_ptr(parent, r->index) = right->keys[0];
2557     }
2558    
2559     -static void __rebalance3(struct dm_btree_info *info, struct node *parent,
2560     +static void __rebalance3(struct dm_btree_info *info, struct btree_node *parent,
2561     struct child *l, struct child *c, struct child *r)
2562     {
2563     - struct node *left = l->n;
2564     - struct node *center = c->n;
2565     - struct node *right = r->n;
2566     + struct btree_node *left = l->n;
2567     + struct btree_node *center = c->n;
2568     + struct btree_node *right = r->n;
2569    
2570     uint32_t nr_left = le32_to_cpu(left->header.nr_entries);
2571     uint32_t nr_center = le32_to_cpu(center->header.nr_entries);
2572     @@ -371,7 +371,7 @@ static int rebalance3(struct shadow_spine *s, struct dm_btree_info *info,
2573     unsigned left_index)
2574     {
2575     int r;
2576     - struct node *parent = dm_block_data(shadow_current(s));
2577     + struct btree_node *parent = dm_block_data(shadow_current(s));
2578     struct child left, center, right;
2579    
2580     /*
2581     @@ -421,7 +421,7 @@ static int get_nr_entries(struct dm_transaction_manager *tm,
2582     {
2583     int r;
2584     struct dm_block *block;
2585     - struct node *n;
2586     + struct btree_node *n;
2587    
2588     r = dm_tm_read_lock(tm, b, &btree_node_validator, &block);
2589     if (r)
2590     @@ -438,7 +438,7 @@ static int rebalance_children(struct shadow_spine *s,
2591     {
2592     int i, r, has_left_sibling, has_right_sibling;
2593     uint32_t child_entries;
2594     - struct node *n;
2595     + struct btree_node *n;
2596    
2597     n = dm_block_data(shadow_current(s));
2598    
2599     @@ -483,7 +483,7 @@ static int rebalance_children(struct shadow_spine *s,
2600     return r;
2601     }
2602    
2603     -static int do_leaf(struct node *n, uint64_t key, unsigned *index)
2604     +static int do_leaf(struct btree_node *n, uint64_t key, unsigned *index)
2605     {
2606     int i = lower_bound(n, key);
2607    
2608     @@ -506,7 +506,7 @@ static int remove_raw(struct shadow_spine *s, struct dm_btree_info *info,
2609     uint64_t key, unsigned *index)
2610     {
2611     int i = *index, r;
2612     - struct node *n;
2613     + struct btree_node *n;
2614    
2615     for (;;) {
2616     r = shadow_step(s, root, vt);
2617     @@ -556,7 +556,7 @@ int dm_btree_remove(struct dm_btree_info *info, dm_block_t root,
2618     unsigned level, last_level = info->levels - 1;
2619     int index = 0, r = 0;
2620     struct shadow_spine spine;
2621     - struct node *n;
2622     + struct btree_node *n;
2623    
2624     init_shadow_spine(&spine, info);
2625     for (level = 0; level < info->levels; level++) {
2626     diff --git a/drivers/md/persistent-data/dm-btree-spine.c b/drivers/md/persistent-data/dm-btree-spine.c
2627     index d9a7912..2f0805c 100644
2628     --- a/drivers/md/persistent-data/dm-btree-spine.c
2629     +++ b/drivers/md/persistent-data/dm-btree-spine.c
2630     @@ -23,7 +23,7 @@ static void node_prepare_for_write(struct dm_block_validator *v,
2631     struct dm_block *b,
2632     size_t block_size)
2633     {
2634     - struct node *n = dm_block_data(b);
2635     + struct btree_node *n = dm_block_data(b);
2636     struct node_header *h = &n->header;
2637    
2638     h->blocknr = cpu_to_le64(dm_block_location(b));
2639     @@ -38,7 +38,7 @@ static int node_check(struct dm_block_validator *v,
2640     struct dm_block *b,
2641     size_t block_size)
2642     {
2643     - struct node *n = dm_block_data(b);
2644     + struct btree_node *n = dm_block_data(b);
2645     struct node_header *h = &n->header;
2646     size_t value_size;
2647     __le32 csum_disk;
2648     @@ -164,7 +164,7 @@ int ro_step(struct ro_spine *s, dm_block_t new_child)
2649     return r;
2650     }
2651    
2652     -struct node *ro_node(struct ro_spine *s)
2653     +struct btree_node *ro_node(struct ro_spine *s)
2654     {
2655     struct dm_block *block;
2656    
2657     diff --git a/drivers/md/persistent-data/dm-btree.c b/drivers/md/persistent-data/dm-btree.c
2658     index d12b2cc..371f3d4 100644
2659     --- a/drivers/md/persistent-data/dm-btree.c
2660     +++ b/drivers/md/persistent-data/dm-btree.c
2661     @@ -38,7 +38,7 @@ static void array_insert(void *base, size_t elt_size, unsigned nr_elts,
2662     /*----------------------------------------------------------------*/
2663    
2664     /* makes the assumption that no two keys are the same. */
2665     -static int bsearch(struct node *n, uint64_t key, int want_hi)
2666     +static int bsearch(struct btree_node *n, uint64_t key, int want_hi)
2667     {
2668     int lo = -1, hi = le32_to_cpu(n->header.nr_entries);
2669    
2670     @@ -58,12 +58,12 @@ static int bsearch(struct node *n, uint64_t key, int want_hi)
2671     return want_hi ? hi : lo;
2672     }
2673    
2674     -int lower_bound(struct node *n, uint64_t key)
2675     +int lower_bound(struct btree_node *n, uint64_t key)
2676     {
2677     return bsearch(n, key, 0);
2678     }
2679    
2680     -void inc_children(struct dm_transaction_manager *tm, struct node *n,
2681     +void inc_children(struct dm_transaction_manager *tm, struct btree_node *n,
2682     struct dm_btree_value_type *vt)
2683     {
2684     unsigned i;
2685     @@ -77,7 +77,7 @@ void inc_children(struct dm_transaction_manager *tm, struct node *n,
2686     vt->inc(vt->context, value_ptr(n, i));
2687     }
2688    
2689     -static int insert_at(size_t value_size, struct node *node, unsigned index,
2690     +static int insert_at(size_t value_size, struct btree_node *node, unsigned index,
2691     uint64_t key, void *value)
2692     __dm_written_to_disk(value)
2693     {
2694     @@ -122,7 +122,7 @@ int dm_btree_empty(struct dm_btree_info *info, dm_block_t *root)
2695     {
2696     int r;
2697     struct dm_block *b;
2698     - struct node *n;
2699     + struct btree_node *n;
2700     size_t block_size;
2701     uint32_t max_entries;
2702    
2703     @@ -154,7 +154,7 @@ EXPORT_SYMBOL_GPL(dm_btree_empty);
2704     #define MAX_SPINE_DEPTH 64
2705     struct frame {
2706     struct dm_block *b;
2707     - struct node *n;
2708     + struct btree_node *n;
2709     unsigned level;
2710     unsigned nr_children;
2711     unsigned current_child;
2712     @@ -295,7 +295,7 @@ EXPORT_SYMBOL_GPL(dm_btree_del);
2713     /*----------------------------------------------------------------*/
2714    
2715     static int btree_lookup_raw(struct ro_spine *s, dm_block_t block, uint64_t key,
2716     - int (*search_fn)(struct node *, uint64_t),
2717     + int (*search_fn)(struct btree_node *, uint64_t),
2718     uint64_t *result_key, void *v, size_t value_size)
2719     {
2720     int i, r;
2721     @@ -406,7 +406,7 @@ static int btree_split_sibling(struct shadow_spine *s, dm_block_t root,
2722     size_t size;
2723     unsigned nr_left, nr_right;
2724     struct dm_block *left, *right, *parent;
2725     - struct node *ln, *rn, *pn;
2726     + struct btree_node *ln, *rn, *pn;
2727     __le64 location;
2728    
2729     left = shadow_current(s);
2730     @@ -491,7 +491,7 @@ static int btree_split_beneath(struct shadow_spine *s, uint64_t key)
2731     size_t size;
2732     unsigned nr_left, nr_right;
2733     struct dm_block *left, *right, *new_parent;
2734     - struct node *pn, *ln, *rn;
2735     + struct btree_node *pn, *ln, *rn;
2736     __le64 val;
2737    
2738     new_parent = shadow_current(s);
2739     @@ -576,7 +576,7 @@ static int btree_insert_raw(struct shadow_spine *s, dm_block_t root,
2740     uint64_t key, unsigned *index)
2741     {
2742     int r, i = *index, top = 1;
2743     - struct node *node;
2744     + struct btree_node *node;
2745    
2746     for (;;) {
2747     r = shadow_step(s, root, vt);
2748     @@ -643,7 +643,7 @@ static int insert(struct dm_btree_info *info, dm_block_t root,
2749     unsigned level, index = -1, last_level = info->levels - 1;
2750     dm_block_t block = root;
2751     struct shadow_spine spine;
2752     - struct node *n;
2753     + struct btree_node *n;
2754     struct dm_btree_value_type le64_type;
2755    
2756     le64_type.context = NULL;
2757     diff --git a/drivers/mfd/mfd-core.c b/drivers/mfd/mfd-core.c
2758     index ffc3d48..ef80da6 100644
2759     --- a/drivers/mfd/mfd-core.c
2760     +++ b/drivers/mfd/mfd-core.c
2761     @@ -19,6 +19,10 @@
2762     #include <linux/slab.h>
2763     #include <linux/module.h>
2764    
2765     +static struct device_type mfd_dev_type = {
2766     + .name = "mfd_device",
2767     +};
2768     +
2769     int mfd_cell_enable(struct platform_device *pdev)
2770     {
2771     const struct mfd_cell *cell = mfd_get_cell(pdev);
2772     @@ -88,6 +92,7 @@ static int mfd_add_device(struct device *parent, int id,
2773     goto fail_device;
2774    
2775     pdev->dev.parent = parent;
2776     + pdev->dev.type = &mfd_dev_type;
2777    
2778     if (cell->pdata_size) {
2779     ret = platform_device_add_data(pdev,
2780     @@ -183,10 +188,16 @@ EXPORT_SYMBOL(mfd_add_devices);
2781    
2782     static int mfd_remove_devices_fn(struct device *dev, void *c)
2783     {
2784     - struct platform_device *pdev = to_platform_device(dev);
2785     - const struct mfd_cell *cell = mfd_get_cell(pdev);
2786     + struct platform_device *pdev;
2787     + const struct mfd_cell *cell;
2788     atomic_t **usage_count = c;
2789    
2790     + if (dev->type != &mfd_dev_type)
2791     + return 0;
2792     +
2793     + pdev = to_platform_device(dev);
2794     + cell = mfd_get_cell(pdev);
2795     +
2796     /* find the base address of usage_count pointers (for freeing) */
2797     if (!*usage_count || (cell->usage_count < *usage_count))
2798     *usage_count = cell->usage_count;
2799     diff --git a/drivers/mfd/wm8994-core.c b/drivers/mfd/wm8994-core.c
2800     index 9d7ca1e..8d46e68 100644
2801     --- a/drivers/mfd/wm8994-core.c
2802     +++ b/drivers/mfd/wm8994-core.c
2803     @@ -541,6 +541,7 @@ static __devinit int wm8994_device_init(struct wm8994 *wm8994, int irq)
2804     case 1:
2805     case 2:
2806     case 3:
2807     + case 4:
2808     regmap_patch = wm1811_reva_patch;
2809     patch_regs = ARRAY_SIZE(wm1811_reva_patch);
2810     break;
2811     diff --git a/drivers/mtd/nand/cs553x_nand.c b/drivers/mtd/nand/cs553x_nand.c
2812     index 821c34c..0b9b472 100644
2813     --- a/drivers/mtd/nand/cs553x_nand.c
2814     +++ b/drivers/mtd/nand/cs553x_nand.c
2815     @@ -237,6 +237,7 @@ static int __init cs553x_init_one(int cs, int mmio, unsigned long adr)
2816     this->ecc.hwctl = cs_enable_hwecc;
2817     this->ecc.calculate = cs_calculate_ecc;
2818     this->ecc.correct = nand_correct_data;
2819     + this->ecc.strength = 1;
2820    
2821     /* Enable the following for a flash based bad block table */
2822     this->bbt_options = NAND_BBT_USE_FLASH;
2823     @@ -248,8 +249,6 @@ static int __init cs553x_init_one(int cs, int mmio, unsigned long adr)
2824     goto out_ior;
2825     }
2826    
2827     - this->ecc.strength = 1;
2828     -
2829     new_mtd->name = kasprintf(GFP_KERNEL, "cs553x_nand_cs%d", cs);
2830    
2831     cs553x_mtd[cs] = new_mtd;
2832     diff --git a/drivers/mtd/nand/gpmi-nand/gpmi-lib.c b/drivers/mtd/nand/gpmi-nand/gpmi-lib.c
2833     index e8ea710..022feb4 100644
2834     --- a/drivers/mtd/nand/gpmi-nand/gpmi-lib.c
2835     +++ b/drivers/mtd/nand/gpmi-nand/gpmi-lib.c
2836     @@ -135,6 +135,15 @@ int gpmi_init(struct gpmi_nand_data *this)
2837     if (ret)
2838     goto err_out;
2839    
2840     + /*
2841     + * Reset BCH here, too. We got failures otherwise :(
2842     + * See later BCH reset for explanation of MX23 handling
2843     + */
2844     + ret = gpmi_reset_block(r->bch_regs, GPMI_IS_MX23(this));
2845     + if (ret)
2846     + goto err_out;
2847     +
2848     +
2849     /* Choose NAND mode. */
2850     writel(BM_GPMI_CTRL1_GPMI_MODE, r->gpmi_regs + HW_GPMI_CTRL1_CLR);
2851    
2852     diff --git a/drivers/net/wimax/i2400m/i2400m-usb.h b/drivers/net/wimax/i2400m/i2400m-usb.h
2853     index 6650fde..9f1e947 100644
2854     --- a/drivers/net/wimax/i2400m/i2400m-usb.h
2855     +++ b/drivers/net/wimax/i2400m/i2400m-usb.h
2856     @@ -152,6 +152,9 @@ enum {
2857     /* Device IDs */
2858     USB_DEVICE_ID_I6050 = 0x0186,
2859     USB_DEVICE_ID_I6050_2 = 0x0188,
2860     + USB_DEVICE_ID_I6150 = 0x07d6,
2861     + USB_DEVICE_ID_I6150_2 = 0x07d7,
2862     + USB_DEVICE_ID_I6150_3 = 0x07d9,
2863     USB_DEVICE_ID_I6250 = 0x0187,
2864     };
2865    
2866     diff --git a/drivers/net/wimax/i2400m/usb.c b/drivers/net/wimax/i2400m/usb.c
2867     index 29b1e03..f0f16e0 100644
2868     --- a/drivers/net/wimax/i2400m/usb.c
2869     +++ b/drivers/net/wimax/i2400m/usb.c
2870     @@ -510,6 +510,9 @@ int i2400mu_probe(struct usb_interface *iface,
2871     switch (id->idProduct) {
2872     case USB_DEVICE_ID_I6050:
2873     case USB_DEVICE_ID_I6050_2:
2874     + case USB_DEVICE_ID_I6150:
2875     + case USB_DEVICE_ID_I6150_2:
2876     + case USB_DEVICE_ID_I6150_3:
2877     case USB_DEVICE_ID_I6250:
2878     i2400mu->i6050 = 1;
2879     break;
2880     @@ -759,6 +762,9 @@ static
2881     struct usb_device_id i2400mu_id_table[] = {
2882     { USB_DEVICE(0x8086, USB_DEVICE_ID_I6050) },
2883     { USB_DEVICE(0x8086, USB_DEVICE_ID_I6050_2) },
2884     + { USB_DEVICE(0x8087, USB_DEVICE_ID_I6150) },
2885     + { USB_DEVICE(0x8087, USB_DEVICE_ID_I6150_2) },
2886     + { USB_DEVICE(0x8087, USB_DEVICE_ID_I6150_3) },
2887     { USB_DEVICE(0x8086, USB_DEVICE_ID_I6250) },
2888     { USB_DEVICE(0x8086, 0x0181) },
2889     { USB_DEVICE(0x8086, 0x1403) },
2890     diff --git a/drivers/net/wireless/ath/ath5k/base.c b/drivers/net/wireless/ath/ath5k/base.c
2891     index 0e643b0..c7d1437 100644
2892     --- a/drivers/net/wireless/ath/ath5k/base.c
2893     +++ b/drivers/net/wireless/ath/ath5k/base.c
2894     @@ -843,7 +843,7 @@ ath5k_txbuf_free_skb(struct ath5k_hw *ah, struct ath5k_buf *bf)
2895     return;
2896     dma_unmap_single(ah->dev, bf->skbaddr, bf->skb->len,
2897     DMA_TO_DEVICE);
2898     - dev_kfree_skb_any(bf->skb);
2899     + ieee80211_free_txskb(ah->hw, bf->skb);
2900     bf->skb = NULL;
2901     bf->skbaddr = 0;
2902     bf->desc->ds_data = 0;
2903     @@ -1570,7 +1570,7 @@ ath5k_tx_queue(struct ieee80211_hw *hw, struct sk_buff *skb,
2904     return;
2905    
2906     drop_packet:
2907     - dev_kfree_skb_any(skb);
2908     + ieee80211_free_txskb(hw, skb);
2909     }
2910    
2911     static void
2912     diff --git a/drivers/net/wireless/ath/ath5k/mac80211-ops.c b/drivers/net/wireless/ath/ath5k/mac80211-ops.c
2913     index 5c53299..5d1be4d 100644
2914     --- a/drivers/net/wireless/ath/ath5k/mac80211-ops.c
2915     +++ b/drivers/net/wireless/ath/ath5k/mac80211-ops.c
2916     @@ -59,7 +59,7 @@ ath5k_tx(struct ieee80211_hw *hw, struct sk_buff *skb)
2917     u16 qnum = skb_get_queue_mapping(skb);
2918    
2919     if (WARN_ON(qnum >= ah->ah_capabilities.cap_queues.q_tx_num)) {
2920     - dev_kfree_skb_any(skb);
2921     + ieee80211_free_txskb(hw, skb);
2922     return;
2923     }
2924    
2925     diff --git a/drivers/net/wireless/ath/ath9k/ar9003_2p2_initvals.h b/drivers/net/wireless/ath/ath9k/ar9003_2p2_initvals.h
2926     index 2b4b633..4e2a52c 100644
2927     --- a/drivers/net/wireless/ath/ath9k/ar9003_2p2_initvals.h
2928     +++ b/drivers/net/wireless/ath/ath9k/ar9003_2p2_initvals.h
2929     @@ -533,98 +533,98 @@ static const u32 ar9300_2p2_baseband_core[][2] = {
2930    
2931     static const u32 ar9300Modes_high_power_tx_gain_table_2p2[][5] = {
2932     /* Addr 5G_HT20 5G_HT40 2G_HT40 2G_HT20 */
2933     - {0x0000a2dc, 0x00033800, 0x00033800, 0x03aaa352, 0x03aaa352},
2934     - {0x0000a2e0, 0x0003c000, 0x0003c000, 0x03ccc584, 0x03ccc584},
2935     - {0x0000a2e4, 0x03fc0000, 0x03fc0000, 0x03f0f800, 0x03f0f800},
2936     + {0x0000a2dc, 0x0380c7fc, 0x0380c7fc, 0x03aaa352, 0x03aaa352},
2937     + {0x0000a2e0, 0x0000f800, 0x0000f800, 0x03ccc584, 0x03ccc584},
2938     + {0x0000a2e4, 0x03ff0000, 0x03ff0000, 0x03f0f800, 0x03f0f800},
2939     {0x0000a2e8, 0x00000000, 0x00000000, 0x03ff0000, 0x03ff0000},
2940     - {0x0000a410, 0x000050d9, 0x000050d9, 0x000050d9, 0x000050d9},
2941     - {0x0000a500, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
2942     - {0x0000a504, 0x06000003, 0x06000003, 0x04000002, 0x04000002},
2943     - {0x0000a508, 0x0a000020, 0x0a000020, 0x08000004, 0x08000004},
2944     - {0x0000a50c, 0x10000023, 0x10000023, 0x0b000200, 0x0b000200},
2945     - {0x0000a510, 0x16000220, 0x16000220, 0x0f000202, 0x0f000202},
2946     - {0x0000a514, 0x1c000223, 0x1c000223, 0x12000400, 0x12000400},
2947     - {0x0000a518, 0x21002220, 0x21002220, 0x16000402, 0x16000402},
2948     - {0x0000a51c, 0x27002223, 0x27002223, 0x19000404, 0x19000404},
2949     - {0x0000a520, 0x2b022220, 0x2b022220, 0x1c000603, 0x1c000603},
2950     - {0x0000a524, 0x2f022222, 0x2f022222, 0x21000a02, 0x21000a02},
2951     - {0x0000a528, 0x34022225, 0x34022225, 0x25000a04, 0x25000a04},
2952     - {0x0000a52c, 0x3a02222a, 0x3a02222a, 0x28000a20, 0x28000a20},
2953     - {0x0000a530, 0x3e02222c, 0x3e02222c, 0x2c000e20, 0x2c000e20},
2954     - {0x0000a534, 0x4202242a, 0x4202242a, 0x30000e22, 0x30000e22},
2955     - {0x0000a538, 0x4702244a, 0x4702244a, 0x34000e24, 0x34000e24},
2956     - {0x0000a53c, 0x4b02244c, 0x4b02244c, 0x38001640, 0x38001640},
2957     - {0x0000a540, 0x4e02246c, 0x4e02246c, 0x3c001660, 0x3c001660},
2958     - {0x0000a544, 0x52022470, 0x52022470, 0x3f001861, 0x3f001861},
2959     - {0x0000a548, 0x55022490, 0x55022490, 0x43001a81, 0x43001a81},
2960     - {0x0000a54c, 0x59022492, 0x59022492, 0x47001a83, 0x47001a83},
2961     - {0x0000a550, 0x5d022692, 0x5d022692, 0x4a001c84, 0x4a001c84},
2962     - {0x0000a554, 0x61022892, 0x61022892, 0x4e001ce3, 0x4e001ce3},
2963     - {0x0000a558, 0x65024890, 0x65024890, 0x52001ce5, 0x52001ce5},
2964     - {0x0000a55c, 0x69024892, 0x69024892, 0x56001ce9, 0x56001ce9},
2965     - {0x0000a560, 0x6e024c92, 0x6e024c92, 0x5a001ceb, 0x5a001ceb},
2966     - {0x0000a564, 0x74026e92, 0x74026e92, 0x5d001eec, 0x5d001eec},
2967     - {0x0000a568, 0x74026e92, 0x74026e92, 0x5d001eec, 0x5d001eec},
2968     - {0x0000a56c, 0x74026e92, 0x74026e92, 0x5d001eec, 0x5d001eec},
2969     - {0x0000a570, 0x74026e92, 0x74026e92, 0x5d001eec, 0x5d001eec},
2970     - {0x0000a574, 0x74026e92, 0x74026e92, 0x5d001eec, 0x5d001eec},
2971     - {0x0000a578, 0x74026e92, 0x74026e92, 0x5d001eec, 0x5d001eec},
2972     - {0x0000a57c, 0x74026e92, 0x74026e92, 0x5d001eec, 0x5d001eec},
2973     - {0x0000a580, 0x00800000, 0x00800000, 0x00800000, 0x00800000},
2974     - {0x0000a584, 0x06800003, 0x06800003, 0x04800002, 0x04800002},
2975     - {0x0000a588, 0x0a800020, 0x0a800020, 0x08800004, 0x08800004},
2976     - {0x0000a58c, 0x10800023, 0x10800023, 0x0b800200, 0x0b800200},
2977     - {0x0000a590, 0x16800220, 0x16800220, 0x0f800202, 0x0f800202},
2978     - {0x0000a594, 0x1c800223, 0x1c800223, 0x12800400, 0x12800400},
2979     - {0x0000a598, 0x21802220, 0x21802220, 0x16800402, 0x16800402},
2980     - {0x0000a59c, 0x27802223, 0x27802223, 0x19800404, 0x19800404},
2981     - {0x0000a5a0, 0x2b822220, 0x2b822220, 0x1c800603, 0x1c800603},
2982     - {0x0000a5a4, 0x2f822222, 0x2f822222, 0x21800a02, 0x21800a02},
2983     - {0x0000a5a8, 0x34822225, 0x34822225, 0x25800a04, 0x25800a04},
2984     - {0x0000a5ac, 0x3a82222a, 0x3a82222a, 0x28800a20, 0x28800a20},
2985     - {0x0000a5b0, 0x3e82222c, 0x3e82222c, 0x2c800e20, 0x2c800e20},
2986     - {0x0000a5b4, 0x4282242a, 0x4282242a, 0x30800e22, 0x30800e22},
2987     - {0x0000a5b8, 0x4782244a, 0x4782244a, 0x34800e24, 0x34800e24},
2988     - {0x0000a5bc, 0x4b82244c, 0x4b82244c, 0x38801640, 0x38801640},
2989     - {0x0000a5c0, 0x4e82246c, 0x4e82246c, 0x3c801660, 0x3c801660},
2990     - {0x0000a5c4, 0x52822470, 0x52822470, 0x3f801861, 0x3f801861},
2991     - {0x0000a5c8, 0x55822490, 0x55822490, 0x43801a81, 0x43801a81},
2992     - {0x0000a5cc, 0x59822492, 0x59822492, 0x47801a83, 0x47801a83},
2993     - {0x0000a5d0, 0x5d822692, 0x5d822692, 0x4a801c84, 0x4a801c84},
2994     - {0x0000a5d4, 0x61822892, 0x61822892, 0x4e801ce3, 0x4e801ce3},
2995     - {0x0000a5d8, 0x65824890, 0x65824890, 0x52801ce5, 0x52801ce5},
2996     - {0x0000a5dc, 0x69824892, 0x69824892, 0x56801ce9, 0x56801ce9},
2997     - {0x0000a5e0, 0x6e824c92, 0x6e824c92, 0x5a801ceb, 0x5a801ceb},
2998     - {0x0000a5e4, 0x74826e92, 0x74826e92, 0x5d801eec, 0x5d801eec},
2999     - {0x0000a5e8, 0x74826e92, 0x74826e92, 0x5d801eec, 0x5d801eec},
3000     - {0x0000a5ec, 0x74826e92, 0x74826e92, 0x5d801eec, 0x5d801eec},
3001     - {0x0000a5f0, 0x74826e92, 0x74826e92, 0x5d801eec, 0x5d801eec},
3002     - {0x0000a5f4, 0x74826e92, 0x74826e92, 0x5d801eec, 0x5d801eec},
3003     - {0x0000a5f8, 0x74826e92, 0x74826e92, 0x5d801eec, 0x5d801eec},
3004     - {0x0000a5fc, 0x74826e92, 0x74826e92, 0x5d801eec, 0x5d801eec},
3005     + {0x0000a410, 0x000050d8, 0x000050d8, 0x000050d9, 0x000050d9},
3006     + {0x0000a500, 0x00002220, 0x00002220, 0x00000000, 0x00000000},
3007     + {0x0000a504, 0x04002222, 0x04002222, 0x04000002, 0x04000002},
3008     + {0x0000a508, 0x09002421, 0x09002421, 0x08000004, 0x08000004},
3009     + {0x0000a50c, 0x0d002621, 0x0d002621, 0x0b000200, 0x0b000200},
3010     + {0x0000a510, 0x13004620, 0x13004620, 0x0f000202, 0x0f000202},
3011     + {0x0000a514, 0x19004a20, 0x19004a20, 0x11000400, 0x11000400},
3012     + {0x0000a518, 0x1d004e20, 0x1d004e20, 0x15000402, 0x15000402},
3013     + {0x0000a51c, 0x21005420, 0x21005420, 0x19000404, 0x19000404},
3014     + {0x0000a520, 0x26005e20, 0x26005e20, 0x1b000603, 0x1b000603},
3015     + {0x0000a524, 0x2b005e40, 0x2b005e40, 0x1f000a02, 0x1f000a02},
3016     + {0x0000a528, 0x2f005e42, 0x2f005e42, 0x23000a04, 0x23000a04},
3017     + {0x0000a52c, 0x33005e44, 0x33005e44, 0x26000a20, 0x26000a20},
3018     + {0x0000a530, 0x38005e65, 0x38005e65, 0x2a000e20, 0x2a000e20},
3019     + {0x0000a534, 0x3c005e69, 0x3c005e69, 0x2e000e22, 0x2e000e22},
3020     + {0x0000a538, 0x40005e6b, 0x40005e6b, 0x31000e24, 0x31000e24},
3021     + {0x0000a53c, 0x44005e6d, 0x44005e6d, 0x34001640, 0x34001640},
3022     + {0x0000a540, 0x49005e72, 0x49005e72, 0x38001660, 0x38001660},
3023     + {0x0000a544, 0x4e005eb2, 0x4e005eb2, 0x3b001861, 0x3b001861},
3024     + {0x0000a548, 0x53005f12, 0x53005f12, 0x3e001a81, 0x3e001a81},
3025     + {0x0000a54c, 0x59025eb2, 0x59025eb2, 0x42001a83, 0x42001a83},
3026     + {0x0000a550, 0x5e025f12, 0x5e025f12, 0x44001c84, 0x44001c84},
3027     + {0x0000a554, 0x61027f12, 0x61027f12, 0x48001ce3, 0x48001ce3},
3028     + {0x0000a558, 0x6702bf12, 0x6702bf12, 0x4c001ce5, 0x4c001ce5},
3029     + {0x0000a55c, 0x6b02bf14, 0x6b02bf14, 0x50001ce9, 0x50001ce9},
3030     + {0x0000a560, 0x6f02bf16, 0x6f02bf16, 0x54001ceb, 0x54001ceb},
3031     + {0x0000a564, 0x6f02bf16, 0x6f02bf16, 0x56001eec, 0x56001eec},
3032     + {0x0000a568, 0x6f02bf16, 0x6f02bf16, 0x56001eec, 0x56001eec},
3033     + {0x0000a56c, 0x6f02bf16, 0x6f02bf16, 0x56001eec, 0x56001eec},
3034     + {0x0000a570, 0x6f02bf16, 0x6f02bf16, 0x56001eec, 0x56001eec},
3035     + {0x0000a574, 0x6f02bf16, 0x6f02bf16, 0x56001eec, 0x56001eec},
3036     + {0x0000a578, 0x6f02bf16, 0x6f02bf16, 0x56001eec, 0x56001eec},
3037     + {0x0000a57c, 0x6f02bf16, 0x6f02bf16, 0x56001eec, 0x56001eec},
3038     + {0x0000a580, 0x00802220, 0x00802220, 0x00800000, 0x00800000},
3039     + {0x0000a584, 0x04802222, 0x04802222, 0x04800002, 0x04800002},
3040     + {0x0000a588, 0x09802421, 0x09802421, 0x08800004, 0x08800004},
3041     + {0x0000a58c, 0x0d802621, 0x0d802621, 0x0b800200, 0x0b800200},
3042     + {0x0000a590, 0x13804620, 0x13804620, 0x0f800202, 0x0f800202},
3043     + {0x0000a594, 0x19804a20, 0x19804a20, 0x11800400, 0x11800400},
3044     + {0x0000a598, 0x1d804e20, 0x1d804e20, 0x15800402, 0x15800402},
3045     + {0x0000a59c, 0x21805420, 0x21805420, 0x19800404, 0x19800404},
3046     + {0x0000a5a0, 0x26805e20, 0x26805e20, 0x1b800603, 0x1b800603},
3047     + {0x0000a5a4, 0x2b805e40, 0x2b805e40, 0x1f800a02, 0x1f800a02},
3048     + {0x0000a5a8, 0x2f805e42, 0x2f805e42, 0x23800a04, 0x23800a04},
3049     + {0x0000a5ac, 0x33805e44, 0x33805e44, 0x26800a20, 0x26800a20},
3050     + {0x0000a5b0, 0x38805e65, 0x38805e65, 0x2a800e20, 0x2a800e20},
3051     + {0x0000a5b4, 0x3c805e69, 0x3c805e69, 0x2e800e22, 0x2e800e22},
3052     + {0x0000a5b8, 0x40805e6b, 0x40805e6b, 0x31800e24, 0x31800e24},
3053     + {0x0000a5bc, 0x44805e6d, 0x44805e6d, 0x34801640, 0x34801640},
3054     + {0x0000a5c0, 0x49805e72, 0x49805e72, 0x38801660, 0x38801660},
3055     + {0x0000a5c4, 0x4e805eb2, 0x4e805eb2, 0x3b801861, 0x3b801861},
3056     + {0x0000a5c8, 0x53805f12, 0x53805f12, 0x3e801a81, 0x3e801a81},
3057     + {0x0000a5cc, 0x59825eb2, 0x59825eb2, 0x42801a83, 0x42801a83},
3058     + {0x0000a5d0, 0x5e825f12, 0x5e825f12, 0x44801c84, 0x44801c84},
3059     + {0x0000a5d4, 0x61827f12, 0x61827f12, 0x48801ce3, 0x48801ce3},
3060     + {0x0000a5d8, 0x6782bf12, 0x6782bf12, 0x4c801ce5, 0x4c801ce5},
3061     + {0x0000a5dc, 0x6b82bf14, 0x6b82bf14, 0x50801ce9, 0x50801ce9},
3062     + {0x0000a5e0, 0x6f82bf16, 0x6f82bf16, 0x54801ceb, 0x54801ceb},
3063     + {0x0000a5e4, 0x6f82bf16, 0x6f82bf16, 0x56801eec, 0x56801eec},
3064     + {0x0000a5e8, 0x6f82bf16, 0x6f82bf16, 0x56801eec, 0x56801eec},
3065     + {0x0000a5ec, 0x6f82bf16, 0x6f82bf16, 0x56801eec, 0x56801eec},
3066     + {0x0000a5f0, 0x6f82bf16, 0x6f82bf16, 0x56801eec, 0x56801eec},
3067     + {0x0000a5f4, 0x6f82bf16, 0x6f82bf16, 0x56801eec, 0x56801eec},
3068     + {0x0000a5f8, 0x6f82bf16, 0x6f82bf16, 0x56801eec, 0x56801eec},
3069     + {0x0000a5fc, 0x6f82bf16, 0x6f82bf16, 0x56801eec, 0x56801eec},
3070     {0x0000a600, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
3071     {0x0000a604, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
3072     {0x0000a608, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
3073     {0x0000a60c, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
3074     - {0x0000a610, 0x00000000, 0x00000000, 0x00000000, 0x00000000},
3075     - {0x0000a614, 0x02004000, 0x02004000, 0x01404000, 0x01404000},
3076     - {0x0000a618, 0x02004801, 0x02004801, 0x01404501, 0x01404501},
3077     - {0x0000a61c, 0x02808a02, 0x02808a02, 0x02008501, 0x02008501},
3078     - {0x0000a620, 0x0380ce03, 0x0380ce03, 0x0280ca03, 0x0280ca03},
3079     - {0x0000a624, 0x04411104, 0x04411104, 0x03010c04, 0x03010c04},
3080     - {0x0000a628, 0x04411104, 0x04411104, 0x04014c04, 0x04014c04},
3081     - {0x0000a62c, 0x04411104, 0x04411104, 0x04015005, 0x04015005},
3082     - {0x0000a630, 0x04411104, 0x04411104, 0x04015005, 0x04015005},
3083     - {0x0000a634, 0x04411104, 0x04411104, 0x04015005, 0x04015005},
3084     - {0x0000a638, 0x04411104, 0x04411104, 0x04015005, 0x04015005},
3085     - {0x0000a63c, 0x04411104, 0x04411104, 0x04015005, 0x04015005},
3086     - {0x0000b2dc, 0x00033800, 0x00033800, 0x03aaa352, 0x03aaa352},
3087     - {0x0000b2e0, 0x0003c000, 0x0003c000, 0x03ccc584, 0x03ccc584},
3088     - {0x0000b2e4, 0x03fc0000, 0x03fc0000, 0x03f0f800, 0x03f0f800},
3089     + {0x0000a610, 0x00804000, 0x00804000, 0x00000000, 0x00000000},
3090     + {0x0000a614, 0x00804201, 0x00804201, 0x01404000, 0x01404000},
3091     + {0x0000a618, 0x0280c802, 0x0280c802, 0x01404501, 0x01404501},
3092     + {0x0000a61c, 0x0280ca03, 0x0280ca03, 0x02008501, 0x02008501},
3093     + {0x0000a620, 0x04c15104, 0x04c15104, 0x0280ca03, 0x0280ca03},
3094     + {0x0000a624, 0x04c15305, 0x04c15305, 0x03010c04, 0x03010c04},
3095     + {0x0000a628, 0x04c15305, 0x04c15305, 0x04014c04, 0x04014c04},
3096     + {0x0000a62c, 0x04c15305, 0x04c15305, 0x04015005, 0x04015005},
3097     + {0x0000a630, 0x04c15305, 0x04c15305, 0x04015005, 0x04015005},
3098     + {0x0000a634, 0x04c15305, 0x04c15305, 0x04015005, 0x04015005},
3099     + {0x0000a638, 0x04c15305, 0x04c15305, 0x04015005, 0x04015005},
3100     + {0x0000a63c, 0x04c15305, 0x04c15305, 0x04015005, 0x04015005},
3101     + {0x0000b2dc, 0x0380c7fc, 0x0380c7fc, 0x03aaa352, 0x03aaa352},
3102     + {0x0000b2e0, 0x0000f800, 0x0000f800, 0x03ccc584, 0x03ccc584},
3103     + {0x0000b2e4, 0x03ff0000, 0x03ff0000, 0x03f0f800, 0x03f0f800},
3104     {0x0000b2e8, 0x00000000, 0x00000000, 0x03ff0000, 0x03ff0000},
3105     - {0x0000c2dc, 0x00033800, 0x00033800, 0x03aaa352, 0x03aaa352},
3106     - {0x0000c2e0, 0x0003c000, 0x0003c000, 0x03ccc584, 0x03ccc584},
3107     - {0x0000c2e4, 0x03fc0000, 0x03fc0000, 0x03f0f800, 0x03f0f800},
3108     + {0x0000c2dc, 0x0380c7fc, 0x0380c7fc, 0x03aaa352, 0x03aaa352},
3109     + {0x0000c2e0, 0x0000f800, 0x0000f800, 0x03ccc584, 0x03ccc584},
3110     + {0x0000c2e4, 0x03ff0000, 0x03ff0000, 0x03f0f800, 0x03f0f800},
3111     {0x0000c2e8, 0x00000000, 0x00000000, 0x03ff0000, 0x03ff0000},
3112     {0x00016044, 0x012492d4, 0x012492d4, 0x012492d4, 0x012492d4},
3113     {0x00016048, 0x66480001, 0x66480001, 0x66480001, 0x66480001},
3114     diff --git a/drivers/net/wireless/ath/ath9k/ar9003_eeprom.h b/drivers/net/wireless/ath/ath9k/ar9003_eeprom.h
3115     index bb223fe..582ebc4 100644
3116     --- a/drivers/net/wireless/ath/ath9k/ar9003_eeprom.h
3117     +++ b/drivers/net/wireless/ath/ath9k/ar9003_eeprom.h
3118     @@ -69,13 +69,13 @@
3119     #define AR9300_BASE_ADDR 0x3ff
3120     #define AR9300_BASE_ADDR_512 0x1ff
3121    
3122     -#define AR9300_OTP_BASE 0x14000
3123     -#define AR9300_OTP_STATUS 0x15f18
3124     +#define AR9300_OTP_BASE (AR_SREV_9340(ah) ? 0x30000 : 0x14000)
3125     +#define AR9300_OTP_STATUS (AR_SREV_9340(ah) ? 0x30018 : 0x15f18)
3126     #define AR9300_OTP_STATUS_TYPE 0x7
3127     #define AR9300_OTP_STATUS_VALID 0x4
3128     #define AR9300_OTP_STATUS_ACCESS_BUSY 0x2
3129     #define AR9300_OTP_STATUS_SM_BUSY 0x1
3130     -#define AR9300_OTP_READ_DATA 0x15f1c
3131     +#define AR9300_OTP_READ_DATA (AR_SREV_9340(ah) ? 0x3001c : 0x15f1c)
3132    
3133     enum targetPowerHTRates {
3134     HT_TARGET_RATE_0_8_16,
3135     diff --git a/drivers/net/wireless/ath/ath9k/calib.c b/drivers/net/wireless/ath/ath9k/calib.c
3136     index e5cceb0..bbd249d 100644
3137     --- a/drivers/net/wireless/ath/ath9k/calib.c
3138     +++ b/drivers/net/wireless/ath/ath9k/calib.c
3139     @@ -69,6 +69,7 @@ s16 ath9k_hw_getchan_noise(struct ath_hw *ah, struct ath9k_channel *chan)
3140    
3141     if (chan && chan->noisefloor) {
3142     s8 delta = chan->noisefloor -
3143     + ATH9K_NF_CAL_NOISE_THRESH -
3144     ath9k_hw_get_default_nf(ah, chan);
3145     if (delta > 0)
3146     noise += delta;
3147     diff --git a/drivers/net/wireless/ath/ath9k/calib.h b/drivers/net/wireless/ath/ath9k/calib.h
3148     index 3b33996d..1f2e01a 100644
3149     --- a/drivers/net/wireless/ath/ath9k/calib.h
3150     +++ b/drivers/net/wireless/ath/ath9k/calib.h
3151     @@ -21,6 +21,9 @@
3152    
3153     #define AR_PHY_CCA_FILTERWINDOW_LENGTH 5
3154    
3155     +/* Internal noise floor can vary by about 6db depending on the frequency */
3156     +#define ATH9K_NF_CAL_NOISE_THRESH 6
3157     +
3158     #define NUM_NF_READINGS 6
3159     #define ATH9K_NF_CAL_HIST_MAX 5
3160    
3161     diff --git a/drivers/net/wireless/b43/b43.h b/drivers/net/wireless/b43/b43.h
3162     index 67c13af..05cb5f6 100644
3163     --- a/drivers/net/wireless/b43/b43.h
3164     +++ b/drivers/net/wireless/b43/b43.h
3165     @@ -7,6 +7,7 @@
3166     #include <linux/hw_random.h>
3167     #include <linux/bcma/bcma.h>
3168     #include <linux/ssb/ssb.h>
3169     +#include <linux/completion.h>
3170     #include <net/mac80211.h>
3171    
3172     #include "debugfs.h"
3173     @@ -718,6 +719,10 @@ enum b43_firmware_file_type {
3174     struct b43_request_fw_context {
3175     /* The device we are requesting the fw for. */
3176     struct b43_wldev *dev;
3177     + /* a completion event structure needed if this call is asynchronous */
3178     + struct completion fw_load_complete;
3179     + /* a pointer to the firmware object */
3180     + const struct firmware *blob;
3181     /* The type of firmware to request. */
3182     enum b43_firmware_file_type req_type;
3183     /* Error messages for each firmware type. */
3184     diff --git a/drivers/net/wireless/b43/main.c b/drivers/net/wireless/b43/main.c
3185     index 4e465c5..14fd2ca 100644
3186     --- a/drivers/net/wireless/b43/main.c
3187     +++ b/drivers/net/wireless/b43/main.c
3188     @@ -2088,11 +2088,18 @@ static void b43_print_fw_helptext(struct b43_wl *wl, bool error)
3189     b43warn(wl, text);
3190     }
3191    
3192     +static void b43_fw_cb(const struct firmware *firmware, void *context)
3193     +{
3194     + struct b43_request_fw_context *ctx = context;
3195     +
3196     + ctx->blob = firmware;
3197     + complete(&ctx->fw_load_complete);
3198     +}
3199     +
3200     int b43_do_request_fw(struct b43_request_fw_context *ctx,
3201     const char *name,
3202     - struct b43_firmware_file *fw)
3203     + struct b43_firmware_file *fw, bool async)
3204     {
3205     - const struct firmware *blob;
3206     struct b43_fw_header *hdr;
3207     u32 size;
3208     int err;
3209     @@ -2131,11 +2138,31 @@ int b43_do_request_fw(struct b43_request_fw_context *ctx,
3210     B43_WARN_ON(1);
3211     return -ENOSYS;
3212     }
3213     - err = request_firmware(&blob, ctx->fwname, ctx->dev->dev->dev);
3214     + if (async) {
3215     + /* do this part asynchronously */
3216     + init_completion(&ctx->fw_load_complete);
3217     + err = request_firmware_nowait(THIS_MODULE, 1, ctx->fwname,
3218     + ctx->dev->dev->dev, GFP_KERNEL,
3219     + ctx, b43_fw_cb);
3220     + if (err < 0) {
3221     + pr_err("Unable to load firmware\n");
3222     + return err;
3223     + }
3224     + /* stall here until fw ready */
3225     + wait_for_completion(&ctx->fw_load_complete);
3226     + if (ctx->blob)
3227     + goto fw_ready;
3228     + /* On some ARM systems, the async request will fail, but the next sync
3229     + * request works. For this reason, we dall through here
3230     + */
3231     + }
3232     + err = request_firmware(&ctx->blob, ctx->fwname,
3233     + ctx->dev->dev->dev);
3234     if (err == -ENOENT) {
3235     snprintf(ctx->errors[ctx->req_type],
3236     sizeof(ctx->errors[ctx->req_type]),
3237     - "Firmware file \"%s\" not found\n", ctx->fwname);
3238     + "Firmware file \"%s\" not found\n",
3239     + ctx->fwname);
3240     return err;
3241     } else if (err) {
3242     snprintf(ctx->errors[ctx->req_type],
3243     @@ -2144,14 +2171,15 @@ int b43_do_request_fw(struct b43_request_fw_context *ctx,
3244     ctx->fwname, err);
3245     return err;
3246     }
3247     - if (blob->size < sizeof(struct b43_fw_header))
3248     +fw_ready:
3249     + if (ctx->blob->size < sizeof(struct b43_fw_header))
3250     goto err_format;
3251     - hdr = (struct b43_fw_header *)(blob->data);
3252     + hdr = (struct b43_fw_header *)(ctx->blob->data);
3253     switch (hdr->type) {
3254     case B43_FW_TYPE_UCODE:
3255     case B43_FW_TYPE_PCM:
3256     size = be32_to_cpu(hdr->size);
3257     - if (size != blob->size - sizeof(struct b43_fw_header))
3258     + if (size != ctx->blob->size - sizeof(struct b43_fw_header))
3259     goto err_format;
3260     /* fallthrough */
3261     case B43_FW_TYPE_IV:
3262     @@ -2162,7 +2190,7 @@ int b43_do_request_fw(struct b43_request_fw_context *ctx,
3263     goto err_format;
3264     }
3265    
3266     - fw->data = blob;
3267     + fw->data = ctx->blob;
3268     fw->filename = name;
3269     fw->type = ctx->req_type;
3270    
3271     @@ -2172,7 +2200,7 @@ err_format:
3272     snprintf(ctx->errors[ctx->req_type],
3273     sizeof(ctx->errors[ctx->req_type]),
3274     "Firmware file \"%s\" format error.\n", ctx->fwname);
3275     - release_firmware(blob);
3276     + release_firmware(ctx->blob);
3277    
3278     return -EPROTO;
3279     }
3280     @@ -2223,7 +2251,7 @@ static int b43_try_request_fw(struct b43_request_fw_context *ctx)
3281     goto err_no_ucode;
3282     }
3283     }
3284     - err = b43_do_request_fw(ctx, filename, &fw->ucode);
3285     + err = b43_do_request_fw(ctx, filename, &fw->ucode, true);
3286     if (err)
3287     goto err_load;
3288    
3289     @@ -2235,7 +2263,7 @@ static int b43_try_request_fw(struct b43_request_fw_context *ctx)
3290     else
3291     goto err_no_pcm;
3292     fw->pcm_request_failed = false;
3293     - err = b43_do_request_fw(ctx, filename, &fw->pcm);
3294     + err = b43_do_request_fw(ctx, filename, &fw->pcm, false);
3295     if (err == -ENOENT) {
3296     /* We did not find a PCM file? Not fatal, but
3297     * core rev <= 10 must do without hwcrypto then. */
3298     @@ -2296,7 +2324,7 @@ static int b43_try_request_fw(struct b43_request_fw_context *ctx)
3299     default:
3300     goto err_no_initvals;
3301     }
3302     - err = b43_do_request_fw(ctx, filename, &fw->initvals);
3303     + err = b43_do_request_fw(ctx, filename, &fw->initvals, false);
3304     if (err)
3305     goto err_load;
3306    
3307     @@ -2355,7 +2383,7 @@ static int b43_try_request_fw(struct b43_request_fw_context *ctx)
3308     default:
3309     goto err_no_initvals;
3310     }
3311     - err = b43_do_request_fw(ctx, filename, &fw->initvals_band);
3312     + err = b43_do_request_fw(ctx, filename, &fw->initvals_band, false);
3313     if (err)
3314     goto err_load;
3315    
3316     diff --git a/drivers/net/wireless/b43/main.h b/drivers/net/wireless/b43/main.h
3317     index 8c684cd..abac25e 100644
3318     --- a/drivers/net/wireless/b43/main.h
3319     +++ b/drivers/net/wireless/b43/main.h
3320     @@ -137,9 +137,8 @@ void b43_mac_phy_clock_set(struct b43_wldev *dev, bool on);
3321    
3322    
3323     struct b43_request_fw_context;
3324     -int b43_do_request_fw(struct b43_request_fw_context *ctx,
3325     - const char *name,
3326     - struct b43_firmware_file *fw);
3327     +int b43_do_request_fw(struct b43_request_fw_context *ctx, const char *name,
3328     + struct b43_firmware_file *fw, bool async);
3329     void b43_do_release_fw(struct b43_firmware_file *fw);
3330    
3331     #endif /* B43_MAIN_H_ */
3332     diff --git a/drivers/net/wireless/mwifiex/sta_ioctl.c b/drivers/net/wireless/mwifiex/sta_ioctl.c
3333     index d7b11de..4fb146a 100644
3334     --- a/drivers/net/wireless/mwifiex/sta_ioctl.c
3335     +++ b/drivers/net/wireless/mwifiex/sta_ioctl.c
3336     @@ -53,7 +53,6 @@ int mwifiex_copy_mcast_addr(struct mwifiex_multicast_list *mlist,
3337     */
3338     int mwifiex_wait_queue_complete(struct mwifiex_adapter *adapter)
3339     {
3340     - bool cancel_flag = false;
3341     int status;
3342     struct cmd_ctrl_node *cmd_queued;
3343    
3344     @@ -70,14 +69,11 @@ int mwifiex_wait_queue_complete(struct mwifiex_adapter *adapter)
3345     queue_work(adapter->workqueue, &adapter->main_work);
3346    
3347     /* Wait for completion */
3348     - wait_event_interruptible(adapter->cmd_wait_q.wait,
3349     - *(cmd_queued->condition));
3350     - if (!*(cmd_queued->condition))
3351     - cancel_flag = true;
3352     -
3353     - if (cancel_flag) {
3354     - mwifiex_cancel_pending_ioctl(adapter);
3355     - dev_dbg(adapter->dev, "cmd cancel\n");
3356     + status = wait_event_interruptible(adapter->cmd_wait_q.wait,
3357     + *(cmd_queued->condition));
3358     + if (status) {
3359     + dev_err(adapter->dev, "cmd_wait_q terminated: %d\n", status);
3360     + return status;
3361     }
3362    
3363     status = adapter->cmd_wait_q.status;
3364     @@ -436,8 +432,11 @@ int mwifiex_enable_hs(struct mwifiex_adapter *adapter)
3365     return false;
3366     }
3367    
3368     - wait_event_interruptible(adapter->hs_activate_wait_q,
3369     - adapter->hs_activate_wait_q_woken);
3370     + if (wait_event_interruptible(adapter->hs_activate_wait_q,
3371     + adapter->hs_activate_wait_q_woken)) {
3372     + dev_err(adapter->dev, "hs_activate_wait_q terminated\n");
3373     + return false;
3374     + }
3375    
3376     return true;
3377     }
3378     diff --git a/drivers/platform/x86/samsung-laptop.c b/drivers/platform/x86/samsung-laptop.c
3379     index e2a34b4..1afbe5e 100644
3380     --- a/drivers/platform/x86/samsung-laptop.c
3381     +++ b/drivers/platform/x86/samsung-laptop.c
3382     @@ -1506,6 +1506,16 @@ static struct dmi_system_id __initdata samsung_dmi_table[] = {
3383     },
3384     .driver_data = &samsung_broken_acpi_video,
3385     },
3386     + {
3387     + .callback = samsung_dmi_matched,
3388     + .ident = "N250P",
3389     + .matches = {
3390     + DMI_MATCH(DMI_SYS_VENDOR, "SAMSUNG ELECTRONICS CO., LTD."),
3391     + DMI_MATCH(DMI_PRODUCT_NAME, "N250P"),
3392     + DMI_MATCH(DMI_BOARD_NAME, "N250P"),
3393     + },
3394     + .driver_data = &samsung_broken_acpi_video,
3395     + },
3396     { },
3397     };
3398     MODULE_DEVICE_TABLE(dmi, samsung_dmi_table);
3399     diff --git a/drivers/regulator/wm831x-dcdc.c b/drivers/regulator/wm831x-dcdc.c
3400     index ff810e7..97bb31d 100644
3401     --- a/drivers/regulator/wm831x-dcdc.c
3402     +++ b/drivers/regulator/wm831x-dcdc.c
3403     @@ -330,7 +330,7 @@ static int wm831x_buckv_set_voltage(struct regulator_dev *rdev,
3404     if (vsel > dcdc->dvs_vsel) {
3405     ret = wm831x_set_bits(wm831x, dvs_reg,
3406     WM831X_DC1_DVS_VSEL_MASK,
3407     - dcdc->dvs_vsel);
3408     + vsel);
3409     if (ret == 0)
3410     dcdc->dvs_vsel = vsel;
3411     else
3412     diff --git a/drivers/s390/cio/device_pgid.c b/drivers/s390/cio/device_pgid.c
3413     index 07a4fd2..daa6b90 100644
3414     --- a/drivers/s390/cio/device_pgid.c
3415     +++ b/drivers/s390/cio/device_pgid.c
3416     @@ -234,7 +234,7 @@ static int pgid_cmp(struct pgid *p1, struct pgid *p2)
3417     * Determine pathgroup state from PGID data.
3418     */
3419     static void pgid_analyze(struct ccw_device *cdev, struct pgid **p,
3420     - int *mismatch, int *reserved, u8 *reset)
3421     + int *mismatch, u8 *reserved, u8 *reset)
3422     {
3423     struct pgid *pgid = &cdev->private->pgid[0];
3424     struct pgid *first = NULL;
3425     @@ -248,7 +248,7 @@ static void pgid_analyze(struct ccw_device *cdev, struct pgid **p,
3426     if ((cdev->private->pgid_valid_mask & lpm) == 0)
3427     continue;
3428     if (pgid->inf.ps.state2 == SNID_STATE2_RESVD_ELSE)
3429     - *reserved = 1;
3430     + *reserved |= lpm;
3431     if (pgid_is_reset(pgid)) {
3432     *reset |= lpm;
3433     continue;
3434     @@ -316,14 +316,14 @@ static void snid_done(struct ccw_device *cdev, int rc)
3435     struct subchannel *sch = to_subchannel(cdev->dev.parent);
3436     struct pgid *pgid;
3437     int mismatch = 0;
3438     - int reserved = 0;
3439     + u8 reserved = 0;
3440     u8 reset = 0;
3441     u8 donepm;
3442    
3443     if (rc)
3444     goto out;
3445     pgid_analyze(cdev, &pgid, &mismatch, &reserved, &reset);
3446     - if (reserved)
3447     + if (reserved == cdev->private->pgid_valid_mask)
3448     rc = -EUSERS;
3449     else if (mismatch)
3450     rc = -EOPNOTSUPP;
3451     @@ -336,7 +336,7 @@ static void snid_done(struct ccw_device *cdev, int rc)
3452     }
3453     out:
3454     CIO_MSG_EVENT(2, "snid: device 0.%x.%04x: rc=%d pvm=%02x vpm=%02x "
3455     - "todo=%02x mism=%d rsvd=%d reset=%02x\n", id->ssid,
3456     + "todo=%02x mism=%d rsvd=%02x reset=%02x\n", id->ssid,
3457     id->devno, rc, cdev->private->pgid_valid_mask, sch->vpm,
3458     cdev->private->pgid_todo_mask, mismatch, reserved, reset);
3459     switch (rc) {
3460     diff --git a/drivers/scsi/mvsas/mv_94xx.h b/drivers/scsi/mvsas/mv_94xx.h
3461     index 8f7eb4f..487aa6f 100644
3462     --- a/drivers/scsi/mvsas/mv_94xx.h
3463     +++ b/drivers/scsi/mvsas/mv_94xx.h
3464     @@ -258,21 +258,11 @@ enum sas_sata_phy_regs {
3465     #define SPI_ADDR_VLD_94XX (1U << 1)
3466     #define SPI_CTRL_SpiStart_94XX (1U << 0)
3467    
3468     -#define mv_ffc(x) ffz(x)
3469     -
3470     static inline int
3471     mv_ffc64(u64 v)
3472     {
3473     - int i;
3474     - i = mv_ffc((u32)v);
3475     - if (i >= 0)
3476     - return i;
3477     - i = mv_ffc((u32)(v>>32));
3478     -
3479     - if (i != 0)
3480     - return 32 + i;
3481     -
3482     - return -1;
3483     + u64 x = ~v;
3484     + return x ? __ffs64(x) : -1;
3485     }
3486    
3487     #define r_reg_set_enable(i) \
3488     diff --git a/drivers/scsi/mvsas/mv_sas.c b/drivers/scsi/mvsas/mv_sas.c
3489     index 3006ec9..dbb8edf 100644
3490     --- a/drivers/scsi/mvsas/mv_sas.c
3491     +++ b/drivers/scsi/mvsas/mv_sas.c
3492     @@ -1629,7 +1629,7 @@ int mvs_abort_task(struct sas_task *task)
3493     mv_dprintk("mvs_abort_task() mvi=%p task=%p "
3494     "slot=%p slot_idx=x%x\n",
3495     mvi, task, slot, slot_idx);
3496     - mvs_tmf_timedout((unsigned long)task);
3497     + task->task_state_flags |= SAS_TASK_STATE_ABORTED;
3498     mvs_slot_task_free(mvi, task, slot, slot_idx);
3499     rc = TMF_RESP_FUNC_COMPLETE;
3500     goto out;
3501     diff --git a/drivers/scsi/mvsas/mv_sas.h b/drivers/scsi/mvsas/mv_sas.h
3502     index c04a4f5..da24955 100644
3503     --- a/drivers/scsi/mvsas/mv_sas.h
3504     +++ b/drivers/scsi/mvsas/mv_sas.h
3505     @@ -69,7 +69,7 @@ extern struct kmem_cache *mvs_task_list_cache;
3506     #define DEV_IS_EXPANDER(type) \
3507     ((type == EDGE_DEV) || (type == FANOUT_DEV))
3508    
3509     -#define bit(n) ((u32)1 << n)
3510     +#define bit(n) ((u64)1 << n)
3511    
3512     #define for_each_phy(__lseq_mask, __mc, __lseq) \
3513     for ((__mc) = (__lseq_mask), (__lseq) = 0; \
3514     diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c
3515     index 7db8033..da1315e 100644
3516     --- a/drivers/scsi/qla2xxx/qla_os.c
3517     +++ b/drivers/scsi/qla2xxx/qla_os.c
3518     @@ -3735,9 +3735,9 @@ qla2x00_do_dpc(void *data)
3519     "ISP abort end.\n");
3520     }
3521    
3522     - if (test_bit(FCPORT_UPDATE_NEEDED, &base_vha->dpc_flags)) {
3523     + if (test_and_clear_bit(FCPORT_UPDATE_NEEDED,
3524     + &base_vha->dpc_flags)) {
3525     qla2x00_update_fcports(base_vha);
3526     - clear_bit(FCPORT_UPDATE_NEEDED, &base_vha->dpc_flags);
3527     }
3528    
3529     if (test_bit(ISP_QUIESCE_NEEDED, &base_vha->dpc_flags)) {
3530     diff --git a/drivers/scsi/scsi_sysfs.c b/drivers/scsi/scsi_sysfs.c
3531     index 08d48a3..72ca515 100644
3532     --- a/drivers/scsi/scsi_sysfs.c
3533     +++ b/drivers/scsi/scsi_sysfs.c
3534     @@ -246,11 +246,11 @@ show_shost_active_mode(struct device *dev,
3535    
3536     static DEVICE_ATTR(active_mode, S_IRUGO | S_IWUSR, show_shost_active_mode, NULL);
3537    
3538     -static int check_reset_type(char *str)
3539     +static int check_reset_type(const char *str)
3540     {
3541     - if (strncmp(str, "adapter", 10) == 0)
3542     + if (sysfs_streq(str, "adapter"))
3543     return SCSI_ADAPTER_RESET;
3544     - else if (strncmp(str, "firmware", 10) == 0)
3545     + else if (sysfs_streq(str, "firmware"))
3546     return SCSI_FIRMWARE_RESET;
3547     else
3548     return 0;
3549     @@ -263,12 +263,9 @@ store_host_reset(struct device *dev, struct device_attribute *attr,
3550     struct Scsi_Host *shost = class_to_shost(dev);
3551     struct scsi_host_template *sht = shost->hostt;
3552     int ret = -EINVAL;
3553     - char str[10];
3554     int type;
3555    
3556     - sscanf(buf, "%s", str);
3557     - type = check_reset_type(str);
3558     -
3559     + type = check_reset_type(buf);
3560     if (!type)
3561     goto exit_store_host_reset;
3562    
3563     diff --git a/drivers/staging/comedi/Kconfig b/drivers/staging/comedi/Kconfig
3564     index 12c691d..f11cfc8 100644
3565     --- a/drivers/staging/comedi/Kconfig
3566     +++ b/drivers/staging/comedi/Kconfig
3567     @@ -424,6 +424,7 @@ config COMEDI_ADQ12B
3568    
3569     config COMEDI_NI_AT_A2150
3570     tristate "NI AT-A2150 ISA card support"
3571     + select COMEDI_FC
3572     depends on COMEDI_NI_COMMON
3573     depends on VIRT_TO_BUS
3574     default N
3575     diff --git a/drivers/staging/comedi/comedi_fops.c b/drivers/staging/comedi/comedi_fops.c
3576     index b719460..b67c107 100644
3577     --- a/drivers/staging/comedi/comedi_fops.c
3578     +++ b/drivers/staging/comedi/comedi_fops.c
3579     @@ -138,6 +138,9 @@ static long comedi_unlocked_ioctl(struct file *file, unsigned int cmd,
3580     if (cmd == COMEDI_DEVCONFIG) {
3581     rc = do_devconfig_ioctl(dev,
3582     (struct comedi_devconfig __user *)arg);
3583     + if (rc == 0)
3584     + /* Evade comedi_auto_unconfig(). */
3585     + dev_file_info->hardware_device = NULL;
3586     goto done;
3587     }
3588    
3589     @@ -2207,6 +2210,7 @@ int comedi_alloc_board_minor(struct device *hardware_device)
3590     kfree(info);
3591     return -ENOMEM;
3592     }
3593     + info->hardware_device = hardware_device;
3594     comedi_device_init(info->device);
3595     spin_lock_irqsave(&comedi_file_info_table_lock, flags);
3596     for (i = 0; i < COMEDI_NUM_BOARD_MINORS; ++i) {
3597     @@ -2295,6 +2299,23 @@ void comedi_free_board_minor(unsigned minor)
3598     }
3599     }
3600    
3601     +int comedi_find_board_minor(struct device *hardware_device)
3602     +{
3603     + int minor;
3604     + struct comedi_device_file_info *info;
3605     +
3606     + for (minor = 0; minor < COMEDI_NUM_BOARD_MINORS; minor++) {
3607     + spin_lock(&comedi_file_info_table_lock);
3608     + info = comedi_file_info_table[minor];
3609     + if (info && info->hardware_device == hardware_device) {
3610     + spin_unlock(&comedi_file_info_table_lock);
3611     + return minor;
3612     + }
3613     + spin_unlock(&comedi_file_info_table_lock);
3614     + }
3615     + return -ENODEV;
3616     +}
3617     +
3618     int comedi_alloc_subdevice_minor(struct comedi_device *dev,
3619     struct comedi_subdevice *s)
3620     {
3621     diff --git a/drivers/staging/comedi/comedidev.h b/drivers/staging/comedi/comedidev.h
3622     index 7a0d4bc..00d3c65 100644
3623     --- a/drivers/staging/comedi/comedidev.h
3624     +++ b/drivers/staging/comedi/comedidev.h
3625     @@ -234,6 +234,7 @@ struct comedi_device_file_info {
3626     struct comedi_device *device;
3627     struct comedi_subdevice *read_subdevice;
3628     struct comedi_subdevice *write_subdevice;
3629     + struct device *hardware_device;
3630     };
3631    
3632     #ifdef CONFIG_COMEDI_DEBUG
3633     diff --git a/drivers/staging/comedi/drivers.c b/drivers/staging/comedi/drivers.c
3634     index bf185e2..0fc1b99 100644
3635     --- a/drivers/staging/comedi/drivers.c
3636     +++ b/drivers/staging/comedi/drivers.c
3637     @@ -822,25 +822,14 @@ static int comedi_auto_config(struct device *hardware_device,
3638     int minor;
3639     struct comedi_device_file_info *dev_file_info;
3640     int retval;
3641     - unsigned *private_data = NULL;
3642    
3643     - if (!comedi_autoconfig) {
3644     - dev_set_drvdata(hardware_device, NULL);
3645     + if (!comedi_autoconfig)
3646     return 0;
3647     - }
3648    
3649     minor = comedi_alloc_board_minor(hardware_device);
3650     if (minor < 0)
3651     return minor;
3652    
3653     - private_data = kmalloc(sizeof(unsigned), GFP_KERNEL);
3654     - if (private_data == NULL) {
3655     - retval = -ENOMEM;
3656     - goto cleanup;
3657     - }
3658     - *private_data = minor;
3659     - dev_set_drvdata(hardware_device, private_data);
3660     -
3661     dev_file_info = comedi_get_device_file_info(minor);
3662    
3663     memset(&it, 0, sizeof(it));
3664     @@ -853,25 +842,22 @@ static int comedi_auto_config(struct device *hardware_device,
3665     retval = comedi_device_attach(dev_file_info->device, &it);
3666     mutex_unlock(&dev_file_info->device->mutex);
3667    
3668     -cleanup:
3669     - if (retval < 0) {
3670     - kfree(private_data);
3671     + if (retval < 0)
3672     comedi_free_board_minor(minor);
3673     - }
3674     return retval;
3675     }
3676    
3677     static void comedi_auto_unconfig(struct device *hardware_device)
3678     {
3679     - unsigned *minor = (unsigned *)dev_get_drvdata(hardware_device);
3680     - if (minor == NULL)
3681     - return;
3682     -
3683     - BUG_ON(*minor >= COMEDI_NUM_BOARD_MINORS);
3684     + int minor;
3685    
3686     - comedi_free_board_minor(*minor);
3687     - dev_set_drvdata(hardware_device, NULL);
3688     - kfree(minor);
3689     + if (hardware_device == NULL)
3690     + return;
3691     + minor = comedi_find_board_minor(hardware_device);
3692     + if (minor < 0)
3693     + return;
3694     + BUG_ON(minor >= COMEDI_NUM_BOARD_MINORS);
3695     + comedi_free_board_minor(minor);
3696     }
3697    
3698     int comedi_pci_auto_config(struct pci_dev *pcidev, const char *board_name)
3699     diff --git a/drivers/staging/comedi/drivers/comedi_test.c b/drivers/staging/comedi/drivers/comedi_test.c
3700     index a804742..2567f9a 100644
3701     --- a/drivers/staging/comedi/drivers/comedi_test.c
3702     +++ b/drivers/staging/comedi/drivers/comedi_test.c
3703     @@ -461,7 +461,7 @@ static int waveform_ai_cancel(struct comedi_device *dev,
3704     struct comedi_subdevice *s)
3705     {
3706     devpriv->timer_running = 0;
3707     - del_timer(&devpriv->timer);
3708     + del_timer_sync(&devpriv->timer);
3709     return 0;
3710     }
3711    
3712     diff --git a/drivers/staging/comedi/drivers/ni_pcimio.c b/drivers/staging/comedi/drivers/ni_pcimio.c
3713     index 27baefa..59c1f88 100644
3714     --- a/drivers/staging/comedi/drivers/ni_pcimio.c
3715     +++ b/drivers/staging/comedi/drivers/ni_pcimio.c
3716     @@ -1023,7 +1023,7 @@ static const struct ni_board_struct ni_boards[] = {
3717     .ao_range_table = &range_ni_M_625x_ao,
3718     .reg_type = ni_reg_625x,
3719     .ao_unipolar = 0,
3720     - .ao_speed = 357,
3721     + .ao_speed = 350,
3722     .num_p0_dio_channels = 8,
3723     .caldac = {caldac_none},
3724     .has_8255 = 0,
3725     @@ -1042,7 +1042,7 @@ static const struct ni_board_struct ni_boards[] = {
3726     .ao_range_table = &range_ni_M_625x_ao,
3727     .reg_type = ni_reg_625x,
3728     .ao_unipolar = 0,
3729     - .ao_speed = 357,
3730     + .ao_speed = 350,
3731     .num_p0_dio_channels = 8,
3732     .caldac = {caldac_none},
3733     .has_8255 = 0,
3734     @@ -1061,7 +1061,7 @@ static const struct ni_board_struct ni_boards[] = {
3735     .ao_range_table = &range_ni_M_625x_ao,
3736     .reg_type = ni_reg_625x,
3737     .ao_unipolar = 0,
3738     - .ao_speed = 357,
3739     + .ao_speed = 350,
3740     .num_p0_dio_channels = 8,
3741     .caldac = {caldac_none},
3742     .has_8255 = 0,
3743     @@ -1097,7 +1097,7 @@ static const struct ni_board_struct ni_boards[] = {
3744     .ao_range_table = &range_ni_M_625x_ao,
3745     .reg_type = ni_reg_625x,
3746     .ao_unipolar = 0,
3747     - .ao_speed = 357,
3748     + .ao_speed = 350,
3749     .num_p0_dio_channels = 32,
3750     .caldac = {caldac_none},
3751     .has_8255 = 0,
3752     @@ -1116,7 +1116,7 @@ static const struct ni_board_struct ni_boards[] = {
3753     .ao_range_table = &range_ni_M_625x_ao,
3754     .reg_type = ni_reg_625x,
3755     .ao_unipolar = 0,
3756     - .ao_speed = 357,
3757     + .ao_speed = 350,
3758     .num_p0_dio_channels = 32,
3759     .caldac = {caldac_none},
3760     .has_8255 = 0,
3761     @@ -1152,7 +1152,7 @@ static const struct ni_board_struct ni_boards[] = {
3762     .ao_range_table = &range_ni_M_628x_ao,
3763     .reg_type = ni_reg_628x,
3764     .ao_unipolar = 1,
3765     - .ao_speed = 357,
3766     + .ao_speed = 350,
3767     .num_p0_dio_channels = 8,
3768     .caldac = {caldac_none},
3769     .has_8255 = 0,
3770     @@ -1171,7 +1171,7 @@ static const struct ni_board_struct ni_boards[] = {
3771     .ao_range_table = &range_ni_M_628x_ao,
3772     .reg_type = ni_reg_628x,
3773     .ao_unipolar = 1,
3774     - .ao_speed = 357,
3775     + .ao_speed = 350,
3776     .num_p0_dio_channels = 8,
3777     .caldac = {caldac_none},
3778     .has_8255 = 0,
3779     @@ -1207,7 +1207,7 @@ static const struct ni_board_struct ni_boards[] = {
3780     .ao_range_table = &range_ni_M_628x_ao,
3781     .reg_type = ni_reg_628x,
3782     .ao_unipolar = 1,
3783     - .ao_speed = 357,
3784     + .ao_speed = 350,
3785     .num_p0_dio_channels = 32,
3786     .caldac = {caldac_none},
3787     .has_8255 = 0,
3788     diff --git a/drivers/staging/comedi/internal.h b/drivers/staging/comedi/internal.h
3789     index 434ce34..4208fb4 100644
3790     --- a/drivers/staging/comedi/internal.h
3791     +++ b/drivers/staging/comedi/internal.h
3792     @@ -7,6 +7,7 @@ int insn_inval(struct comedi_device *dev, struct comedi_subdevice *s,
3793     struct comedi_insn *insn, unsigned int *data);
3794     int comedi_alloc_board_minor(struct device *hardware_device);
3795     void comedi_free_board_minor(unsigned minor);
3796     +int comedi_find_board_minor(struct device *hardware_device);
3797     void comedi_reset_async_buf(struct comedi_async *async);
3798     int comedi_buf_alloc(struct comedi_device *dev, struct comedi_subdevice *s,
3799     unsigned long new_size);
3800     diff --git a/drivers/staging/rtl8712/usb_intf.c b/drivers/staging/rtl8712/usb_intf.c
3801     index 2c80745..7b3ae00 100644
3802     --- a/drivers/staging/rtl8712/usb_intf.c
3803     +++ b/drivers/staging/rtl8712/usb_intf.c
3804     @@ -66,6 +66,8 @@ static struct usb_device_id rtl871x_usb_id_tbl[] = {
3805     {USB_DEVICE(0x0B05, 0x1791)}, /* 11n mode disable */
3806     /* Belkin */
3807     {USB_DEVICE(0x050D, 0x945A)},
3808     + /* ISY IWL - Belkin clone */
3809     + {USB_DEVICE(0x050D, 0x11F1)},
3810     /* Corega */
3811     {USB_DEVICE(0x07AA, 0x0047)},
3812     /* D-Link */
3813     diff --git a/drivers/staging/speakup/synth.c b/drivers/staging/speakup/synth.c
3814     index 331eae7..5710fc5 100644
3815     --- a/drivers/staging/speakup/synth.c
3816     +++ b/drivers/staging/speakup/synth.c
3817     @@ -342,7 +342,7 @@ int synth_init(char *synth_name)
3818    
3819     mutex_lock(&spk_mutex);
3820     /* First, check if we already have it loaded. */
3821     - for (i = 0; synths[i] != NULL && i < MAXSYNTHS; i++)
3822     + for (i = 0; i < MAXSYNTHS && synths[i] != NULL; i++)
3823     if (strcmp(synths[i]->name, synth_name) == 0)
3824     synth = synths[i];
3825    
3826     @@ -423,7 +423,7 @@ int synth_add(struct spk_synth *in_synth)
3827     int i;
3828     int status = 0;
3829     mutex_lock(&spk_mutex);
3830     - for (i = 0; synths[i] != NULL && i < MAXSYNTHS; i++)
3831     + for (i = 0; i < MAXSYNTHS && synths[i] != NULL; i++)
3832     /* synth_remove() is responsible for rotating the array down */
3833     if (in_synth == synths[i]) {
3834     mutex_unlock(&spk_mutex);
3835     diff --git a/drivers/staging/vt6656/dpc.c b/drivers/staging/vt6656/dpc.c
3836     index 08021f4..4664e9d 100644
3837     --- a/drivers/staging/vt6656/dpc.c
3838     +++ b/drivers/staging/vt6656/dpc.c
3839     @@ -1238,7 +1238,7 @@ static BOOL s_bHandleRxEncryption (
3840    
3841     PayloadLen -= (WLAN_HDR_ADDR3_LEN + 8 + 4); // 24 is 802.11 header, 8 is IV&ExtIV, 4 is crc
3842     *pdwRxTSC47_16 = cpu_to_le32(*(PDWORD)(pbyIV + 4));
3843     - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"ExtIV: %lx\n",*pdwRxTSC47_16);
3844     + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"ExtIV: %x\n", *pdwRxTSC47_16);
3845     if (byDecMode == KEY_CTL_TKIP) {
3846     *pwRxTSC15_0 = cpu_to_le16(MAKEWORD(*(pbyIV+2), *pbyIV));
3847     } else {
3848     @@ -1349,7 +1349,7 @@ static BOOL s_bHostWepRxEncryption (
3849    
3850     PayloadLen -= (WLAN_HDR_ADDR3_LEN + 8 + 4); // 24 is 802.11 header, 8 is IV&ExtIV, 4 is crc
3851     *pdwRxTSC47_16 = cpu_to_le32(*(PDWORD)(pbyIV + 4));
3852     - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"ExtIV: %lx\n",*pdwRxTSC47_16);
3853     + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"ExtIV: %x\n", *pdwRxTSC47_16);
3854    
3855     if (byDecMode == KEY_CTL_TKIP) {
3856     *pwRxTSC15_0 = cpu_to_le16(MAKEWORD(*(pbyIV+2), *pbyIV));
3857     diff --git a/drivers/staging/vt6656/key.c b/drivers/staging/vt6656/key.c
3858     index ee62a06..ba3a561 100644
3859     --- a/drivers/staging/vt6656/key.c
3860     +++ b/drivers/staging/vt6656/key.c
3861     @@ -223,7 +223,7 @@ BOOL KeybSetKey(
3862     PSKeyManagement pTable,
3863     PBYTE pbyBSSID,
3864     DWORD dwKeyIndex,
3865     - unsigned long uKeyLength,
3866     + u32 uKeyLength,
3867     PQWORD pKeyRSC,
3868     PBYTE pbyKey,
3869     BYTE byKeyDecMode
3870     @@ -235,7 +235,8 @@ BOOL KeybSetKey(
3871     PSKeyItem pKey;
3872     unsigned int uKeyIdx;
3873    
3874     - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Enter KeybSetKey: %lX\n", dwKeyIndex);
3875     + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO
3876     + "Enter KeybSetKey: %X\n", dwKeyIndex);
3877    
3878     j = (MAX_KEY_TABLE-1);
3879     for (i=0;i<(MAX_KEY_TABLE-1);i++) {
3880     @@ -261,7 +262,9 @@ BOOL KeybSetKey(
3881     if ((dwKeyIndex & TRANSMIT_KEY) != 0) {
3882     // Group transmit key
3883     pTable->KeyTable[i].dwGTKeyIndex = dwKeyIndex;
3884     - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Group transmit key(R)[%lX]: %d\n", pTable->KeyTable[i].dwGTKeyIndex, i);
3885     + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO
3886     + "Group transmit key(R)[%X]: %d\n",
3887     + pTable->KeyTable[i].dwGTKeyIndex, i);
3888     }
3889     pTable->KeyTable[i].wKeyCtl &= 0xFF0F; // clear group key control filed
3890     pTable->KeyTable[i].wKeyCtl |= (byKeyDecMode << 4);
3891     @@ -302,9 +305,12 @@ BOOL KeybSetKey(
3892     }
3893     DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"\n");
3894    
3895     - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"pKey->dwTSC47_16: %lx\n ", pKey->dwTSC47_16);
3896     - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"pKey->wTSC15_0: %x\n ", pKey->wTSC15_0);
3897     - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"pKey->dwKeyIndex: %lx\n ", pKey->dwKeyIndex);
3898     + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"pKey->dwTSC47_16: %x\n ",
3899     + pKey->dwTSC47_16);
3900     + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"pKey->wTSC15_0: %x\n ",
3901     + pKey->wTSC15_0);
3902     + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"pKey->dwKeyIndex: %x\n ",
3903     + pKey->dwKeyIndex);
3904    
3905     return (TRUE);
3906     }
3907     @@ -326,7 +332,9 @@ BOOL KeybSetKey(
3908     if ((dwKeyIndex & TRANSMIT_KEY) != 0) {
3909     // Group transmit key
3910     pTable->KeyTable[j].dwGTKeyIndex = dwKeyIndex;
3911     - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Group transmit key(N)[%lX]: %d\n", pTable->KeyTable[j].dwGTKeyIndex, j);
3912     + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO
3913     + "Group transmit key(N)[%X]: %d\n",
3914     + pTable->KeyTable[j].dwGTKeyIndex, j);
3915     }
3916     pTable->KeyTable[j].wKeyCtl &= 0xFF0F; // clear group key control filed
3917     pTable->KeyTable[j].wKeyCtl |= (byKeyDecMode << 4);
3918     @@ -367,9 +375,11 @@ BOOL KeybSetKey(
3919     }
3920     DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"\n");
3921    
3922     - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"pKey->dwTSC47_16: %lx\n ", pKey->dwTSC47_16);
3923     + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"pKey->dwTSC47_16: %x\n ",
3924     + pKey->dwTSC47_16);
3925     DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"pKey->wTSC15_0: %x\n ", pKey->wTSC15_0);
3926     - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"pKey->dwKeyIndex: %lx\n ", pKey->dwKeyIndex);
3927     + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"pKey->dwKeyIndex: %x\n ",
3928     + pKey->dwKeyIndex);
3929    
3930     return (TRUE);
3931     }
3932     @@ -597,7 +607,8 @@ BOOL KeybGetTransmitKey(PSKeyManagement pTable, PBYTE pbyBSSID, DWORD dwKeyType,
3933     DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"%x ", pTable->KeyTable[i].abyBSSID[ii]);
3934     }
3935     DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"\n");
3936     - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"dwGTKeyIndex: %lX\n", pTable->KeyTable[i].dwGTKeyIndex);
3937     + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"dwGTKeyIndex: %X\n",
3938     + pTable->KeyTable[i].dwGTKeyIndex);
3939    
3940     return (TRUE);
3941     }
3942     @@ -664,7 +675,7 @@ BOOL KeybSetDefaultKey(
3943     void *pDeviceHandler,
3944     PSKeyManagement pTable,
3945     DWORD dwKeyIndex,
3946     - unsigned long uKeyLength,
3947     + u32 uKeyLength,
3948     PQWORD pKeyRSC,
3949     PBYTE pbyKey,
3950     BYTE byKeyDecMode
3951     @@ -696,7 +707,10 @@ BOOL KeybSetDefaultKey(
3952     if ((dwKeyIndex & TRANSMIT_KEY) != 0) {
3953     // Group transmit key
3954     pTable->KeyTable[MAX_KEY_TABLE-1].dwGTKeyIndex = dwKeyIndex;
3955     - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Group transmit key(R)[%lX]: %d\n", pTable->KeyTable[MAX_KEY_TABLE-1].dwGTKeyIndex, MAX_KEY_TABLE-1);
3956     + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO
3957     + "Group transmit key(R)[%X]: %d\n",
3958     + pTable->KeyTable[MAX_KEY_TABLE-1].dwGTKeyIndex,
3959     + MAX_KEY_TABLE-1);
3960    
3961     }
3962     pTable->KeyTable[MAX_KEY_TABLE-1].wKeyCtl &= 0x7F00; // clear all key control filed
3963     @@ -747,9 +761,11 @@ BOOL KeybSetDefaultKey(
3964     }
3965     DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"\n");
3966    
3967     - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"pKey->dwTSC47_16: %lx\n", pKey->dwTSC47_16);
3968     + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"pKey->dwTSC47_16: %x\n",
3969     + pKey->dwTSC47_16);
3970     DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"pKey->wTSC15_0: %x\n", pKey->wTSC15_0);
3971     - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"pKey->dwKeyIndex: %lx\n", pKey->dwKeyIndex);
3972     + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"pKey->dwKeyIndex: %x\n",
3973     + pKey->dwKeyIndex);
3974    
3975     return (TRUE);
3976     }
3977     @@ -775,7 +791,7 @@ BOOL KeybSetAllGroupKey(
3978     void *pDeviceHandler,
3979     PSKeyManagement pTable,
3980     DWORD dwKeyIndex,
3981     - unsigned long uKeyLength,
3982     + u32 uKeyLength,
3983     PQWORD pKeyRSC,
3984     PBYTE pbyKey,
3985     BYTE byKeyDecMode
3986     @@ -787,7 +803,8 @@ BOOL KeybSetAllGroupKey(
3987     PSKeyItem pKey;
3988     unsigned int uKeyIdx;
3989    
3990     - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Enter KeybSetAllGroupKey: %lX\n", dwKeyIndex);
3991     + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Enter KeybSetAllGroupKey: %X\n",
3992     + dwKeyIndex);
3993    
3994    
3995     if ((dwKeyIndex & PAIRWISE_KEY) != 0) { // Pairwise key
3996     @@ -804,7 +821,9 @@ BOOL KeybSetAllGroupKey(
3997     if ((dwKeyIndex & TRANSMIT_KEY) != 0) {
3998     // Group transmit key
3999     pTable->KeyTable[i].dwGTKeyIndex = dwKeyIndex;
4000     - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Group transmit key(R)[%lX]: %d\n", pTable->KeyTable[i].dwGTKeyIndex, i);
4001     + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO
4002     + "Group transmit key(R)[%X]: %d\n",
4003     + pTable->KeyTable[i].dwGTKeyIndex, i);
4004    
4005     }
4006     pTable->KeyTable[i].wKeyCtl &= 0xFF0F; // clear group key control filed
4007     diff --git a/drivers/staging/vt6656/key.h b/drivers/staging/vt6656/key.h
4008     index f749c7a..bd35d39 100644
4009     --- a/drivers/staging/vt6656/key.h
4010     +++ b/drivers/staging/vt6656/key.h
4011     @@ -58,7 +58,7 @@
4012     typedef struct tagSKeyItem
4013     {
4014     BOOL bKeyValid;
4015     - unsigned long uKeyLength;
4016     + u32 uKeyLength;
4017     BYTE abyKey[MAX_KEY_LEN];
4018     QWORD KeyRSC;
4019     DWORD dwTSC47_16;
4020     @@ -107,7 +107,7 @@ BOOL KeybSetKey(
4021     PSKeyManagement pTable,
4022     PBYTE pbyBSSID,
4023     DWORD dwKeyIndex,
4024     - unsigned long uKeyLength,
4025     + u32 uKeyLength,
4026     PQWORD pKeyRSC,
4027     PBYTE pbyKey,
4028     BYTE byKeyDecMode
4029     @@ -146,7 +146,7 @@ BOOL KeybSetDefaultKey(
4030     void *pDeviceHandler,
4031     PSKeyManagement pTable,
4032     DWORD dwKeyIndex,
4033     - unsigned long uKeyLength,
4034     + u32 uKeyLength,
4035     PQWORD pKeyRSC,
4036     PBYTE pbyKey,
4037     BYTE byKeyDecMode
4038     @@ -156,7 +156,7 @@ BOOL KeybSetAllGroupKey(
4039     void *pDeviceHandler,
4040     PSKeyManagement pTable,
4041     DWORD dwKeyIndex,
4042     - unsigned long uKeyLength,
4043     + u32 uKeyLength,
4044     PQWORD pKeyRSC,
4045     PBYTE pbyKey,
4046     BYTE byKeyDecMode
4047     diff --git a/drivers/staging/vt6656/mac.c b/drivers/staging/vt6656/mac.c
4048     index af4a29d..8fddc7b 100644
4049     --- a/drivers/staging/vt6656/mac.c
4050     +++ b/drivers/staging/vt6656/mac.c
4051     @@ -260,7 +260,8 @@ BYTE pbyData[24];
4052     dwData1 <<= 16;
4053     dwData1 |= MAKEWORD(*(pbyAddr+4), *(pbyAddr+5));
4054    
4055     - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"1. wOffset: %d, Data: %lX, KeyCtl:%X\n", wOffset, dwData1, wKeyCtl);
4056     + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"1. wOffset: %d, Data: %X,"\
4057     + " KeyCtl:%X\n", wOffset, dwData1, wKeyCtl);
4058    
4059     //VNSvOutPortW(dwIoBase + MAC_REG_MISCFFNDEX, wOffset);
4060     //VNSvOutPortD(dwIoBase + MAC_REG_MISCFFDATA, dwData);
4061     @@ -277,7 +278,8 @@ BYTE pbyData[24];
4062     dwData2 <<= 8;
4063     dwData2 |= *(pbyAddr+0);
4064    
4065     - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"2. wOffset: %d, Data: %lX\n", wOffset, dwData2);
4066     + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"2. wOffset: %d, Data: %X\n",
4067     + wOffset, dwData2);
4068    
4069     //VNSvOutPortW(dwIoBase + MAC_REG_MISCFFNDEX, wOffset);
4070     //VNSvOutPortD(dwIoBase + MAC_REG_MISCFFDATA, dwData);
4071     diff --git a/drivers/staging/vt6656/rf.c b/drivers/staging/vt6656/rf.c
4072     index 3fd0478..8cf0881 100644
4073     --- a/drivers/staging/vt6656/rf.c
4074     +++ b/drivers/staging/vt6656/rf.c
4075     @@ -769,6 +769,9 @@ BYTE byPwr = pDevice->byCCKPwr;
4076     return TRUE;
4077     }
4078    
4079     + if (uCH == 0)
4080     + return -EINVAL;
4081     +
4082     switch (uRATE) {
4083     case RATE_1M:
4084     case RATE_2M:
4085     diff --git a/drivers/staging/vt6656/rxtx.c b/drivers/staging/vt6656/rxtx.c
4086     index fe21868..3beb126 100644
4087     --- a/drivers/staging/vt6656/rxtx.c
4088     +++ b/drivers/staging/vt6656/rxtx.c
4089     @@ -377,7 +377,8 @@ s_vFillTxKey (
4090     *(pbyIVHead+3) = (BYTE)(((pDevice->byKeyIndex << 6) & 0xc0) | 0x20); // 0x20 is ExtIV
4091     // Append IV&ExtIV after Mac Header
4092     *pdwExtIV = cpu_to_le32(pTransmitKey->dwTSC47_16);
4093     - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"vFillTxKey()---- pdwExtIV: %lx\n", *pdwExtIV);
4094     + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"vFillTxKey()---- pdwExtIV: %x\n",
4095     + *pdwExtIV);
4096    
4097     } else if (pTransmitKey->byCipherSuite == KEY_CTL_CCMP) {
4098     pTransmitKey->wTSC15_0++;
4099     @@ -1753,7 +1754,8 @@ s_bPacketToWirelessUsb(
4100     MIC_vAppend((PBYTE)&(psEthHeader->abyDstAddr[0]), 12);
4101     dwMIC_Priority = 0;
4102     MIC_vAppend((PBYTE)&dwMIC_Priority, 4);
4103     - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"MIC KEY: %lX, %lX\n", dwMICKey0, dwMICKey1);
4104     + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"MIC KEY: %X, %X\n",
4105     + dwMICKey0, dwMICKey1);
4106    
4107     ///////////////////////////////////////////////////////////////////
4108    
4109     @@ -2635,7 +2637,8 @@ vDMA0_tx_80211(PSDevice pDevice, struct sk_buff *skb) {
4110     MIC_vAppend((PBYTE)&(sEthHeader.abyDstAddr[0]), 12);
4111     dwMIC_Priority = 0;
4112     MIC_vAppend((PBYTE)&dwMIC_Priority, 4);
4113     - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"DMA0_tx_8021:MIC KEY: %lX, %lX\n", dwMICKey0, dwMICKey1);
4114     + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"DMA0_tx_8021:MIC KEY:"\
4115     + " %X, %X\n", dwMICKey0, dwMICKey1);
4116    
4117     uLength = cbHeaderSize + cbMacHdLen + uPadding + cbIVlen;
4118    
4119     @@ -2655,7 +2658,8 @@ vDMA0_tx_80211(PSDevice pDevice, struct sk_buff *skb) {
4120    
4121     DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"uLength: %d, %d\n", uLength, cbFrameBodySize);
4122     DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"cbReqCount:%d, %d, %d, %d\n", cbReqCount, cbHeaderSize, uPadding, cbIVlen);
4123     - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"MIC:%lx, %lx\n", *pdwMIC_L, *pdwMIC_R);
4124     + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"MIC:%x, %x\n",
4125     + *pdwMIC_L, *pdwMIC_R);
4126    
4127     }
4128    
4129     @@ -3029,7 +3033,8 @@ int nsDMA_tx_packet(PSDevice pDevice, unsigned int uDMAIdx, struct sk_buff *skb)
4130     DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"error: KEY is GTK!!~~\n");
4131     }
4132     else {
4133     - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Find PTK [%lX]\n", pTransmitKey->dwKeyIndex);
4134     + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Find PTK [%X]\n",
4135     + pTransmitKey->dwKeyIndex);
4136     bNeedEncryption = TRUE;
4137     }
4138     }
4139     @@ -3043,7 +3048,8 @@ int nsDMA_tx_packet(PSDevice pDevice, unsigned int uDMAIdx, struct sk_buff *skb)
4140     if (pDevice->bEnableHostWEP) {
4141     if ((uNodeIndex != 0) &&
4142     (pMgmt->sNodeDBTable[uNodeIndex].dwKeyIndex & PAIRWISE_KEY)) {
4143     - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Find PTK [%lX]\n", pTransmitKey->dwKeyIndex);
4144     + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Find PTK [%X]\n",
4145     + pTransmitKey->dwKeyIndex);
4146     bNeedEncryption = TRUE;
4147     }
4148     }
4149     diff --git a/drivers/staging/vt6656/ttype.h b/drivers/staging/vt6656/ttype.h
4150     index 8e9450e..dfbf747 100644
4151     --- a/drivers/staging/vt6656/ttype.h
4152     +++ b/drivers/staging/vt6656/ttype.h
4153     @@ -29,6 +29,8 @@
4154     #ifndef __TTYPE_H__
4155     #define __TTYPE_H__
4156    
4157     +#include <linux/types.h>
4158     +
4159     /******* Common definitions and typedefs ***********************************/
4160    
4161     typedef int BOOL;
4162     @@ -42,17 +44,17 @@ typedef int BOOL;
4163    
4164     /****** Simple typedefs ***************************************************/
4165    
4166     -typedef unsigned char BYTE; // 8-bit
4167     -typedef unsigned short WORD; // 16-bit
4168     -typedef unsigned long DWORD; // 32-bit
4169     +typedef u8 BYTE;
4170     +typedef u16 WORD;
4171     +typedef u32 DWORD;
4172    
4173     // QWORD is for those situation that we want
4174     // an 8-byte-aligned 8 byte long structure
4175     // which is NOT really a floating point number.
4176     typedef union tagUQuadWord {
4177     struct {
4178     - DWORD dwLowDword;
4179     - DWORD dwHighDword;
4180     + u32 dwLowDword;
4181     + u32 dwHighDword;
4182     } u;
4183     double DoNotUseThisField;
4184     } UQuadWord;
4185     @@ -60,8 +62,8 @@ typedef UQuadWord QWORD; // 64-bit
4186    
4187     /****** Common pointer types ***********************************************/
4188    
4189     -typedef unsigned long ULONG_PTR; // 32-bit
4190     -typedef unsigned long DWORD_PTR; // 32-bit
4191     +typedef u32 ULONG_PTR;
4192     +typedef u32 DWORD_PTR;
4193    
4194     // boolean pointer
4195    
4196     diff --git a/drivers/staging/vt6656/wcmd.c b/drivers/staging/vt6656/wcmd.c
4197     index 78ea121..31fb96a 100644
4198     --- a/drivers/staging/vt6656/wcmd.c
4199     +++ b/drivers/staging/vt6656/wcmd.c
4200     @@ -316,17 +316,19 @@ s_MgrMakeProbeRequest(
4201     return pTxPacket;
4202     }
4203    
4204     -void vCommandTimerWait(void *hDeviceContext, unsigned int MSecond)
4205     +void vCommandTimerWait(void *hDeviceContext, unsigned long MSecond)
4206     {
4207     - PSDevice pDevice = (PSDevice)hDeviceContext;
4208     + PSDevice pDevice = (PSDevice)hDeviceContext;
4209    
4210     - init_timer(&pDevice->sTimerCommand);
4211     - pDevice->sTimerCommand.data = (unsigned long)pDevice;
4212     - pDevice->sTimerCommand.function = (TimerFunction)vRunCommand;
4213     - // RUN_AT :1 msec ~= (HZ/1024)
4214     - pDevice->sTimerCommand.expires = (unsigned int)RUN_AT((MSecond * HZ) >> 10);
4215     - add_timer(&pDevice->sTimerCommand);
4216     - return;
4217     + init_timer(&pDevice->sTimerCommand);
4218     +
4219     + pDevice->sTimerCommand.data = (unsigned long)pDevice;
4220     + pDevice->sTimerCommand.function = (TimerFunction)vRunCommand;
4221     + pDevice->sTimerCommand.expires = RUN_AT((MSecond * HZ) / 1000);
4222     +
4223     + add_timer(&pDevice->sTimerCommand);
4224     +
4225     + return;
4226     }
4227    
4228     void vRunCommand(void *hDeviceContext)
4229     diff --git a/drivers/staging/vt6656/wpa2.h b/drivers/staging/vt6656/wpa2.h
4230     index 46c2959..c359252 100644
4231     --- a/drivers/staging/vt6656/wpa2.h
4232     +++ b/drivers/staging/vt6656/wpa2.h
4233     @@ -45,8 +45,8 @@ typedef struct tagsPMKIDInfo {
4234     } PMKIDInfo, *PPMKIDInfo;
4235    
4236     typedef struct tagSPMKIDCache {
4237     - unsigned long BSSIDInfoCount;
4238     - PMKIDInfo BSSIDInfo[MAX_PMKID_CACHE];
4239     + u32 BSSIDInfoCount;
4240     + PMKIDInfo BSSIDInfo[MAX_PMKID_CACHE];
4241     } SPMKIDCache, *PSPMKIDCache;
4242    
4243    
4244     diff --git a/drivers/target/iscsi/iscsi_target.c b/drivers/target/iscsi/iscsi_target.c
4245     index ad202b3..486c5dd 100644
4246     --- a/drivers/target/iscsi/iscsi_target.c
4247     +++ b/drivers/target/iscsi/iscsi_target.c
4248     @@ -2359,7 +2359,7 @@ static void iscsit_build_conn_drop_async_message(struct iscsi_conn *conn)
4249     if (!conn_p)
4250     return;
4251    
4252     - cmd = iscsit_allocate_cmd(conn_p, GFP_KERNEL);
4253     + cmd = iscsit_allocate_cmd(conn_p, GFP_ATOMIC);
4254     if (!cmd) {
4255     iscsit_dec_conn_usage_count(conn_p);
4256     return;
4257     diff --git a/drivers/target/tcm_fc/tfc_sess.c b/drivers/target/tcm_fc/tfc_sess.c
4258     index 87901fa..a426c40 100644
4259     --- a/drivers/target/tcm_fc/tfc_sess.c
4260     +++ b/drivers/target/tcm_fc/tfc_sess.c
4261     @@ -431,7 +431,6 @@ static void ft_sess_rcu_free(struct rcu_head *rcu)
4262     {
4263     struct ft_sess *sess = container_of(rcu, struct ft_sess, rcu);
4264    
4265     - transport_deregister_session(sess->se_sess);
4266     kfree(sess);
4267     }
4268    
4269     @@ -439,6 +438,7 @@ static void ft_sess_free(struct kref *kref)
4270     {
4271     struct ft_sess *sess = container_of(kref, struct ft_sess, kref);
4272    
4273     + transport_deregister_session(sess->se_sess);
4274     call_rcu(&sess->rcu, ft_sess_rcu_free);
4275     }
4276    
4277     diff --git a/drivers/usb/class/cdc-acm.c b/drivers/usb/class/cdc-acm.c
4278     index b4e87cf..3a7a950 100644
4279     --- a/drivers/usb/class/cdc-acm.c
4280     +++ b/drivers/usb/class/cdc-acm.c
4281     @@ -1602,6 +1602,9 @@ static const struct usb_device_id acm_ids[] = {
4282     { USB_DEVICE(0x0572, 0x1340), /* Conexant CX93010-2x UCMxx */
4283     .driver_info = NO_UNION_NORMAL,
4284     },
4285     + { USB_DEVICE(0x05f9, 0x4002), /* PSC Scanning, Magellan 800i */
4286     + .driver_info = NO_UNION_NORMAL,
4287     + },
4288     { USB_DEVICE(0x1bbb, 0x0003), /* Alcatel OT-I650 */
4289     .driver_info = NO_UNION_NORMAL, /* reports zero length descriptor */
4290     },
4291     diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
4292     index 11344bc..ef8f790 100644
4293     --- a/drivers/usb/core/hub.c
4294     +++ b/drivers/usb/core/hub.c
4295     @@ -644,6 +644,60 @@ static int hub_hub_status(struct usb_hub *hub,
4296     return ret;
4297     }
4298    
4299     +static int hub_set_port_link_state(struct usb_hub *hub, int port1,
4300     + unsigned int link_status)
4301     +{
4302     + return set_port_feature(hub->hdev,
4303     + port1 | (link_status << 3),
4304     + USB_PORT_FEAT_LINK_STATE);
4305     +}
4306     +
4307     +/*
4308     + * If USB 3.0 ports are placed into the Disabled state, they will no longer
4309     + * detect any device connects or disconnects. This is generally not what the
4310     + * USB core wants, since it expects a disabled port to produce a port status
4311     + * change event when a new device connects.
4312     + *
4313     + * Instead, set the link state to Disabled, wait for the link to settle into
4314     + * that state, clear any change bits, and then put the port into the RxDetect
4315     + * state.
4316     + */
4317     +static int hub_usb3_port_disable(struct usb_hub *hub, int port1)
4318     +{
4319     + int ret;
4320     + int total_time;
4321     + u16 portchange, portstatus;
4322     +
4323     + if (!hub_is_superspeed(hub->hdev))
4324     + return -EINVAL;
4325     +
4326     + ret = hub_set_port_link_state(hub, port1, USB_SS_PORT_LS_SS_DISABLED);
4327     + if (ret) {
4328     + dev_err(hub->intfdev, "cannot disable port %d (err = %d)\n",
4329     + port1, ret);
4330     + return ret;
4331     + }
4332     +
4333     + /* Wait for the link to enter the disabled state. */
4334     + for (total_time = 0; ; total_time += HUB_DEBOUNCE_STEP) {
4335     + ret = hub_port_status(hub, port1, &portstatus, &portchange);
4336     + if (ret < 0)
4337     + return ret;
4338     +
4339     + if ((portstatus & USB_PORT_STAT_LINK_STATE) ==
4340     + USB_SS_PORT_LS_SS_DISABLED)
4341     + break;
4342     + if (total_time >= HUB_DEBOUNCE_TIMEOUT)
4343     + break;
4344     + msleep(HUB_DEBOUNCE_STEP);
4345     + }
4346     + if (total_time >= HUB_DEBOUNCE_TIMEOUT)
4347     + dev_warn(hub->intfdev, "Could not disable port %d after %d ms\n",
4348     + port1, total_time);
4349     +
4350     + return hub_set_port_link_state(hub, port1, USB_SS_PORT_LS_RX_DETECT);
4351     +}
4352     +
4353     static int hub_port_disable(struct usb_hub *hub, int port1, int set_state)
4354     {
4355     struct usb_device *hdev = hub->hdev;
4356     @@ -652,8 +706,13 @@ static int hub_port_disable(struct usb_hub *hub, int port1, int set_state)
4357     if (hdev->children[port1-1] && set_state)
4358     usb_set_device_state(hdev->children[port1-1],
4359     USB_STATE_NOTATTACHED);
4360     - if (!hub->error && !hub_is_superspeed(hub->hdev))
4361     - ret = clear_port_feature(hdev, port1, USB_PORT_FEAT_ENABLE);
4362     + if (!hub->error) {
4363     + if (hub_is_superspeed(hub->hdev))
4364     + ret = hub_usb3_port_disable(hub, port1);
4365     + else
4366     + ret = clear_port_feature(hdev, port1,
4367     + USB_PORT_FEAT_ENABLE);
4368     + }
4369     if (ret)
4370     dev_err(hub->intfdev, "cannot disable port %d (err = %d)\n",
4371     port1, ret);
4372     @@ -2109,7 +2168,7 @@ static unsigned hub_is_wusb(struct usb_hub *hub)
4373     #define HUB_SHORT_RESET_TIME 10
4374     #define HUB_BH_RESET_TIME 50
4375     #define HUB_LONG_RESET_TIME 200
4376     -#define HUB_RESET_TIMEOUT 500
4377     +#define HUB_RESET_TIMEOUT 800
4378    
4379     static int hub_port_reset(struct usb_hub *hub, int port1,
4380     struct usb_device *udev, unsigned int delay, bool warm);
4381     @@ -2144,6 +2203,10 @@ static int hub_port_wait_reset(struct usb_hub *hub, int port1,
4382     if (ret < 0)
4383     return ret;
4384    
4385     + /* The port state is unknown until the reset completes. */
4386     + if ((portstatus & USB_PORT_STAT_RESET))
4387     + goto delay;
4388     +
4389     /*
4390     * Some buggy devices require a warm reset to be issued even
4391     * when the port appears not to be connected.
4392     @@ -2189,11 +2252,7 @@ static int hub_port_wait_reset(struct usb_hub *hub, int port1,
4393     if ((portchange & USB_PORT_STAT_C_CONNECTION))
4394     return -ENOTCONN;
4395    
4396     - /* if we`ve finished resetting, then break out of
4397     - * the loop
4398     - */
4399     - if (!(portstatus & USB_PORT_STAT_RESET) &&
4400     - (portstatus & USB_PORT_STAT_ENABLE)) {
4401     + if ((portstatus & USB_PORT_STAT_ENABLE)) {
4402     if (hub_is_wusb(hub))
4403     udev->speed = USB_SPEED_WIRELESS;
4404     else if (hub_is_superspeed(hub->hdev))
4405     @@ -2207,10 +2266,15 @@ static int hub_port_wait_reset(struct usb_hub *hub, int port1,
4406     return 0;
4407     }
4408     } else {
4409     - if (portchange & USB_PORT_STAT_C_BH_RESET)
4410     - return 0;
4411     + if (!(portstatus & USB_PORT_STAT_CONNECTION) ||
4412     + hub_port_warm_reset_required(hub,
4413     + portstatus))
4414     + return -ENOTCONN;
4415     +
4416     + return 0;
4417     }
4418    
4419     +delay:
4420     /* switch to the long delay after two short delay failures */
4421     if (delay_time >= 2 * HUB_SHORT_RESET_TIME)
4422     delay = HUB_LONG_RESET_TIME;
4423     @@ -2234,14 +2298,11 @@ static void hub_port_finish_reset(struct usb_hub *hub, int port1,
4424     msleep(10 + 40);
4425     update_devnum(udev, 0);
4426     hcd = bus_to_hcd(udev->bus);
4427     - if (hcd->driver->reset_device) {
4428     - *status = hcd->driver->reset_device(hcd, udev);
4429     - if (*status < 0) {
4430     - dev_err(&udev->dev, "Cannot reset "
4431     - "HCD device state\n");
4432     - break;
4433     - }
4434     - }
4435     + /* The xHC may think the device is already reset,
4436     + * so ignore the status.
4437     + */
4438     + if (hcd->driver->reset_device)
4439     + hcd->driver->reset_device(hcd, udev);
4440     }
4441     /* FALL THROUGH */
4442     case -ENOTCONN:
4443     @@ -2249,16 +2310,16 @@ static void hub_port_finish_reset(struct usb_hub *hub, int port1,
4444     clear_port_feature(hub->hdev,
4445     port1, USB_PORT_FEAT_C_RESET);
4446     /* FIXME need disconnect() for NOTATTACHED device */
4447     - if (warm) {
4448     + if (hub_is_superspeed(hub->hdev)) {
4449     clear_port_feature(hub->hdev, port1,
4450     USB_PORT_FEAT_C_BH_PORT_RESET);
4451     clear_port_feature(hub->hdev, port1,
4452     USB_PORT_FEAT_C_PORT_LINK_STATE);
4453     - } else {
4454     + }
4455     + if (!warm)
4456     usb_set_device_state(udev, *status
4457     ? USB_STATE_NOTATTACHED
4458     : USB_STATE_DEFAULT);
4459     - }
4460     break;
4461     }
4462     }
4463     @@ -2548,7 +2609,7 @@ int usb_port_suspend(struct usb_device *udev, pm_message_t msg)
4464     static int finish_port_resume(struct usb_device *udev)
4465     {
4466     int status = 0;
4467     - u16 devstatus;
4468     + u16 devstatus = 0;
4469    
4470     /* caller owns the udev device lock */
4471     dev_dbg(&udev->dev, "%s\n",
4472     @@ -2593,7 +2654,13 @@ static int finish_port_resume(struct usb_device *udev)
4473     if (status) {
4474     dev_dbg(&udev->dev, "gone after usb resume? status %d\n",
4475     status);
4476     - } else if (udev->actconfig) {
4477     + /*
4478     + * There are a few quirky devices which violate the standard
4479     + * by claiming to have remote wakeup enabled after a reset,
4480     + * which crash if the feature is cleared, hence check for
4481     + * udev->reset_resume
4482     + */
4483     + } else if (udev->actconfig && !udev->reset_resume) {
4484     le16_to_cpus(&devstatus);
4485     if (devstatus & (1 << USB_DEVICE_REMOTE_WAKEUP)) {
4486     status = usb_control_msg(udev,
4487     @@ -3774,9 +3841,14 @@ static void hub_events(void)
4488     * SS.Inactive state.
4489     */
4490     if (hub_port_warm_reset_required(hub, portstatus)) {
4491     + int status;
4492     +
4493     dev_dbg(hub_dev, "warm reset port %d\n", i);
4494     - hub_port_reset(hub, i, NULL,
4495     + status = hub_port_reset(hub, i, NULL,
4496     HUB_BH_RESET_TIME, true);
4497     + if (status < 0)
4498     + hub_port_disable(hub, i, 1);
4499     + connect_change = 0;
4500     }
4501    
4502     if (connect_change)
4503     diff --git a/drivers/usb/core/message.c b/drivers/usb/core/message.c
4504     index ef116a5..ab11ca3c 100644
4505     --- a/drivers/usb/core/message.c
4506     +++ b/drivers/usb/core/message.c
4507     @@ -1770,28 +1770,8 @@ free_interfaces:
4508     goto free_interfaces;
4509     }
4510    
4511     - ret = usb_control_msg(dev, usb_sndctrlpipe(dev, 0),
4512     - USB_REQ_SET_CONFIGURATION, 0, configuration, 0,
4513     - NULL, 0, USB_CTRL_SET_TIMEOUT);
4514     - if (ret < 0) {
4515     - /* All the old state is gone, so what else can we do?
4516     - * The device is probably useless now anyway.
4517     - */
4518     - cp = NULL;
4519     - }
4520     -
4521     - dev->actconfig = cp;
4522     - if (!cp) {
4523     - usb_set_device_state(dev, USB_STATE_ADDRESS);
4524     - usb_hcd_alloc_bandwidth(dev, NULL, NULL, NULL);
4525     - mutex_unlock(hcd->bandwidth_mutex);
4526     - usb_autosuspend_device(dev);
4527     - goto free_interfaces;
4528     - }
4529     - mutex_unlock(hcd->bandwidth_mutex);
4530     - usb_set_device_state(dev, USB_STATE_CONFIGURED);
4531     -
4532     - /* Initialize the new interface structures and the
4533     + /*
4534     + * Initialize the new interface structures and the
4535     * hc/hcd/usbcore interface/endpoint state.
4536     */
4537     for (i = 0; i < nintf; ++i) {
4538     @@ -1835,6 +1815,35 @@ free_interfaces:
4539     }
4540     kfree(new_interfaces);
4541    
4542     + ret = usb_control_msg(dev, usb_sndctrlpipe(dev, 0),
4543     + USB_REQ_SET_CONFIGURATION, 0, configuration, 0,
4544     + NULL, 0, USB_CTRL_SET_TIMEOUT);
4545     + if (ret < 0 && cp) {
4546     + /*
4547     + * All the old state is gone, so what else can we do?
4548     + * The device is probably useless now anyway.
4549     + */
4550     + usb_hcd_alloc_bandwidth(dev, NULL, NULL, NULL);
4551     + for (i = 0; i < nintf; ++i) {
4552     + usb_disable_interface(dev, cp->interface[i], true);
4553     + put_device(&cp->interface[i]->dev);
4554     + cp->interface[i] = NULL;
4555     + }
4556     + cp = NULL;
4557     + }
4558     +
4559     + dev->actconfig = cp;
4560     + mutex_unlock(hcd->bandwidth_mutex);
4561     +
4562     + if (!cp) {
4563     + usb_set_device_state(dev, USB_STATE_ADDRESS);
4564     +
4565     + /* Leave LPM disabled while the device is unconfigured. */
4566     + usb_autosuspend_device(dev);
4567     + return ret;
4568     + }
4569     + usb_set_device_state(dev, USB_STATE_CONFIGURED);
4570     +
4571     if (cp->string == NULL &&
4572     !(dev->quirks & USB_QUIRK_CONFIG_INTF_STRINGS))
4573     cp->string = usb_cache_string(dev, cp->desc.iConfiguration);
4574     diff --git a/drivers/usb/gadget/dummy_hcd.c b/drivers/usb/gadget/dummy_hcd.c
4575     index 2d277a2..9a7b436 100644
4576     --- a/drivers/usb/gadget/dummy_hcd.c
4577     +++ b/drivers/usb/gadget/dummy_hcd.c
4578     @@ -126,10 +126,7 @@ static const char ep0name[] = "ep0";
4579     static const char *const ep_name[] = {
4580     ep0name, /* everyone has ep0 */
4581    
4582     - /* act like a net2280: high speed, six configurable endpoints */
4583     - "ep-a", "ep-b", "ep-c", "ep-d", "ep-e", "ep-f",
4584     -
4585     - /* or like pxa250: fifteen fixed function endpoints */
4586     + /* act like a pxa250: fifteen fixed function endpoints */
4587     "ep1in-bulk", "ep2out-bulk", "ep3in-iso", "ep4out-iso", "ep5in-int",
4588     "ep6in-bulk", "ep7out-bulk", "ep8in-iso", "ep9out-iso", "ep10in-int",
4589     "ep11in-bulk", "ep12out-bulk", "ep13in-iso", "ep14out-iso",
4590     @@ -137,6 +134,10 @@ static const char *const ep_name[] = {
4591    
4592     /* or like sa1100: two fixed function endpoints */
4593     "ep1out-bulk", "ep2in-bulk",
4594     +
4595     + /* and now some generic EPs so we have enough in multi config */
4596     + "ep3out", "ep4in", "ep5out", "ep6out", "ep7in", "ep8out", "ep9in",
4597     + "ep10out", "ep11out", "ep12in", "ep13out", "ep14in", "ep15out",
4598     };
4599     #define DUMMY_ENDPOINTS ARRAY_SIZE(ep_name)
4600    
4601     diff --git a/drivers/usb/host/xhci-hub.c b/drivers/usb/host/xhci-hub.c
4602     index de07b75..8331893 100644
4603     --- a/drivers/usb/host/xhci-hub.c
4604     +++ b/drivers/usb/host/xhci-hub.c
4605     @@ -753,12 +753,39 @@ int xhci_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue,
4606     break;
4607     case USB_PORT_FEAT_LINK_STATE:
4608     temp = xhci_readl(xhci, port_array[wIndex]);
4609     +
4610     + /* Disable port */
4611     + if (link_state == USB_SS_PORT_LS_SS_DISABLED) {
4612     + xhci_dbg(xhci, "Disable port %d\n", wIndex);
4613     + temp = xhci_port_state_to_neutral(temp);
4614     + /*
4615     + * Clear all change bits, so that we get a new
4616     + * connection event.
4617     + */
4618     + temp |= PORT_CSC | PORT_PEC | PORT_WRC |
4619     + PORT_OCC | PORT_RC | PORT_PLC |
4620     + PORT_CEC;
4621     + xhci_writel(xhci, temp | PORT_PE,
4622     + port_array[wIndex]);
4623     + temp = xhci_readl(xhci, port_array[wIndex]);
4624     + break;
4625     + }
4626     +
4627     + /* Put link in RxDetect (enable port) */
4628     + if (link_state == USB_SS_PORT_LS_RX_DETECT) {
4629     + xhci_dbg(xhci, "Enable port %d\n", wIndex);
4630     + xhci_set_link_state(xhci, port_array, wIndex,
4631     + link_state);
4632     + temp = xhci_readl(xhci, port_array[wIndex]);
4633     + break;
4634     + }
4635     +
4636     /* Software should not attempt to set
4637     - * port link state above '5' (Rx.Detect) and the port
4638     + * port link state above '3' (U3) and the port
4639     * must be enabled.
4640     */
4641     if ((temp & PORT_PE) == 0 ||
4642     - (link_state > USB_SS_PORT_LS_RX_DETECT)) {
4643     + (link_state > USB_SS_PORT_LS_U3)) {
4644     xhci_warn(xhci, "Cannot set link state.\n");
4645     goto error;
4646     }
4647     @@ -913,6 +940,7 @@ int xhci_hub_status_data(struct usb_hcd *hcd, char *buf)
4648     int max_ports;
4649     __le32 __iomem **port_array;
4650     struct xhci_bus_state *bus_state;
4651     + bool reset_change = false;
4652    
4653     max_ports = xhci_get_ports(hcd, &port_array);
4654     bus_state = &xhci->bus_state[hcd_index(hcd)];
4655     @@ -944,6 +972,12 @@ int xhci_hub_status_data(struct usb_hcd *hcd, char *buf)
4656     buf[(i + 1) / 8] |= 1 << (i + 1) % 8;
4657     status = 1;
4658     }
4659     + if ((temp & PORT_RC))
4660     + reset_change = true;
4661     + }
4662     + if (!status && !reset_change) {
4663     + xhci_dbg(xhci, "%s: stopping port polling.\n", __func__);
4664     + clear_bit(HCD_FLAG_POLL_RH, &hcd->flags);
4665     }
4666     spin_unlock_irqrestore(&xhci->lock, flags);
4667     return status ? retval : 0;
4668     diff --git a/drivers/usb/host/xhci-mem.c b/drivers/usb/host/xhci-mem.c
4669     index 3e16f1c..b42a6fb 100644
4670     --- a/drivers/usb/host/xhci-mem.c
4671     +++ b/drivers/usb/host/xhci-mem.c
4672     @@ -1250,6 +1250,8 @@ static unsigned int xhci_microframes_to_exponent(struct usb_device *udev,
4673     static unsigned int xhci_parse_microframe_interval(struct usb_device *udev,
4674     struct usb_host_endpoint *ep)
4675     {
4676     + if (ep->desc.bInterval == 0)
4677     + return 0;
4678     return xhci_microframes_to_exponent(udev, ep,
4679     ep->desc.bInterval, 0, 15);
4680     }
4681     diff --git a/drivers/usb/host/xhci-ring.c b/drivers/usb/host/xhci-ring.c
4682     index bf8bcc4..01361f9 100644
4683     --- a/drivers/usb/host/xhci-ring.c
4684     +++ b/drivers/usb/host/xhci-ring.c
4685     @@ -1725,6 +1725,15 @@ cleanup:
4686     if (bogus_port_status)
4687     return;
4688    
4689     + /*
4690     + * xHCI port-status-change events occur when the "or" of all the
4691     + * status-change bits in the portsc register changes from 0 to 1.
4692     + * New status changes won't cause an event if any other change
4693     + * bits are still set. When an event occurs, switch over to
4694     + * polling to avoid losing status changes.
4695     + */
4696     + xhci_dbg(xhci, "%s: starting port polling.\n", __func__);
4697     + set_bit(HCD_FLAG_POLL_RH, &hcd->flags);
4698     spin_unlock(&xhci->lock);
4699     /* Pass this up to the core */
4700     usb_hcd_poll_rh_status(hcd);
4701     diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c
4702     index b4063fc..b04134a 100644
4703     --- a/drivers/usb/host/xhci.c
4704     +++ b/drivers/usb/host/xhci.c
4705     @@ -880,6 +880,11 @@ int xhci_suspend(struct xhci_hcd *xhci)
4706     struct usb_hcd *hcd = xhci_to_hcd(xhci);
4707     u32 command;
4708    
4709     + /* Don't poll the roothubs on bus suspend. */
4710     + xhci_dbg(xhci, "%s: stopping port polling.\n", __func__);
4711     + clear_bit(HCD_FLAG_POLL_RH, &hcd->flags);
4712     + del_timer_sync(&hcd->rh_timer);
4713     +
4714     spin_lock_irq(&xhci->lock);
4715     clear_bit(HCD_FLAG_HW_ACCESSIBLE, &hcd->flags);
4716     clear_bit(HCD_FLAG_HW_ACCESSIBLE, &xhci->shared_hcd->flags);
4717     @@ -1064,6 +1069,11 @@ int xhci_resume(struct xhci_hcd *xhci, bool hibernated)
4718     if (xhci->quirks & XHCI_COMP_MODE_QUIRK)
4719     compliance_mode_recovery_timer_init(xhci);
4720    
4721     + /* Re-enable port polling. */
4722     + xhci_dbg(xhci, "%s: starting port polling.\n", __func__);
4723     + set_bit(HCD_FLAG_POLL_RH, &hcd->flags);
4724     + usb_hcd_poll_rh_status(hcd);
4725     +
4726     return retval;
4727     }
4728     #endif /* CONFIG_PM */
4729     diff --git a/drivers/usb/musb/musb_core.c b/drivers/usb/musb/musb_core.c
4730     index 66aaccf..a2b4008 100644
4731     --- a/drivers/usb/musb/musb_core.c
4732     +++ b/drivers/usb/musb/musb_core.c
4733     @@ -2400,10 +2400,7 @@ static int __init musb_init(void)
4734     if (usb_disabled())
4735     return 0;
4736    
4737     - pr_info("%s: version " MUSB_VERSION ", "
4738     - "?dma?"
4739     - ", "
4740     - "otg (peripheral+host)",
4741     + pr_info("%s: version " MUSB_VERSION ", ?dma?, otg (peripheral+host)\n",
4742     musb_driver_name);
4743     return platform_driver_register(&musb_driver);
4744     }
4745     diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c
4746     index 25903f5..3fbf39d 100644
4747     --- a/drivers/usb/serial/ftdi_sio.c
4748     +++ b/drivers/usb/serial/ftdi_sio.c
4749     @@ -881,6 +881,8 @@ static struct usb_device_id id_table_combined [] = {
4750     { USB_DEVICE(FTDI_VID, FTDI_DISTORTEC_JTAG_LOCK_PICK_PID),
4751     .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
4752     { USB_DEVICE(FTDI_VID, FTDI_LUMEL_PD12_PID) },
4753     + /* Crucible Devices */
4754     + { USB_DEVICE(FTDI_VID, FTDI_CT_COMET_PID) },
4755     { }, /* Optional parameter entry */
4756     { } /* Terminating entry */
4757     };
4758     diff --git a/drivers/usb/serial/ftdi_sio_ids.h b/drivers/usb/serial/ftdi_sio_ids.h
4759     index 049b6e7..fa5d560 100644
4760     --- a/drivers/usb/serial/ftdi_sio_ids.h
4761     +++ b/drivers/usb/serial/ftdi_sio_ids.h
4762     @@ -1259,3 +1259,9 @@
4763     * ATI command output: Cinterion MC55i
4764     */
4765     #define FTDI_CINTERION_MC55I_PID 0xA951
4766     +
4767     +/*
4768     + * Product: Comet Caller ID decoder
4769     + * Manufacturer: Crucible Technologies
4770     + */
4771     +#define FTDI_CT_COMET_PID 0x8e08
4772     diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c
4773     index 0c3d290..ba23ad5 100644
4774     --- a/drivers/usb/serial/option.c
4775     +++ b/drivers/usb/serial/option.c
4776     @@ -288,6 +288,7 @@ static void option_instat_callback(struct urb *urb);
4777     #define ALCATEL_VENDOR_ID 0x1bbb
4778     #define ALCATEL_PRODUCT_X060S_X200 0x0000
4779     #define ALCATEL_PRODUCT_X220_X500D 0x0017
4780     +#define ALCATEL_PRODUCT_L100V 0x011e
4781    
4782     #define PIRELLI_VENDOR_ID 0x1266
4783     #define PIRELLI_PRODUCT_C100_1 0x1002
4784     @@ -429,9 +430,12 @@ static void option_instat_callback(struct urb *urb);
4785     #define MEDIATEK_VENDOR_ID 0x0e8d
4786     #define MEDIATEK_PRODUCT_DC_1COM 0x00a0
4787     #define MEDIATEK_PRODUCT_DC_4COM 0x00a5
4788     +#define MEDIATEK_PRODUCT_DC_4COM2 0x00a7
4789     #define MEDIATEK_PRODUCT_DC_5COM 0x00a4
4790     #define MEDIATEK_PRODUCT_7208_1COM 0x7101
4791     #define MEDIATEK_PRODUCT_7208_2COM 0x7102
4792     +#define MEDIATEK_PRODUCT_7103_2COM 0x7103
4793     +#define MEDIATEK_PRODUCT_7106_2COM 0x7106
4794     #define MEDIATEK_PRODUCT_FP_1COM 0x0003
4795     #define MEDIATEK_PRODUCT_FP_2COM 0x0023
4796     #define MEDIATEK_PRODUCT_FPDC_1COM 0x0043
4797     @@ -441,6 +445,10 @@ static void option_instat_callback(struct urb *urb);
4798     #define CELLIENT_VENDOR_ID 0x2692
4799     #define CELLIENT_PRODUCT_MEN200 0x9005
4800    
4801     +/* Hyundai Petatel Inc. products */
4802     +#define PETATEL_VENDOR_ID 0x1ff4
4803     +#define PETATEL_PRODUCT_NP10T 0x600e
4804     +
4805     /* some devices interfaces need special handling due to a number of reasons */
4806     enum option_blacklist_reason {
4807     OPTION_BLACKLIST_NONE = 0,
4808     @@ -923,7 +931,8 @@ static const struct usb_device_id option_ids[] = {
4809     { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0257, 0xff, 0xff, 0xff), /* ZTE MF821 */
4810     .driver_info = (kernel_ulong_t)&net_intf3_blacklist },
4811     { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0265, 0xff, 0xff, 0xff) },
4812     - { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0284, 0xff, 0xff, 0xff) },
4813     + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0284, 0xff, 0xff, 0xff), /* ZTE MF880 */
4814     + .driver_info = (kernel_ulong_t)&net_intf4_blacklist },
4815     { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0317, 0xff, 0xff, 0xff) },
4816     { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0326, 0xff, 0xff, 0xff),
4817     .driver_info = (kernel_ulong_t)&net_intf4_blacklist },
4818     @@ -1190,6 +1199,8 @@ static const struct usb_device_id option_ids[] = {
4819     .driver_info = (kernel_ulong_t)&alcatel_x200_blacklist
4820     },
4821     { USB_DEVICE(ALCATEL_VENDOR_ID, ALCATEL_PRODUCT_X220_X500D) },
4822     + { USB_DEVICE(ALCATEL_VENDOR_ID, ALCATEL_PRODUCT_L100V),
4823     + .driver_info = (kernel_ulong_t)&net_intf4_blacklist },
4824     { USB_DEVICE(AIRPLUS_VENDOR_ID, AIRPLUS_PRODUCT_MCD650) },
4825     { USB_DEVICE(TLAYTECH_VENDOR_ID, TLAYTECH_PRODUCT_TEU800) },
4826     { USB_DEVICE(LONGCHEER_VENDOR_ID, FOUR_G_SYSTEMS_PRODUCT_W14),
4827     @@ -1294,7 +1305,12 @@ static const struct usb_device_id option_ids[] = {
4828     { USB_DEVICE_AND_INTERFACE_INFO(MEDIATEK_VENDOR_ID, MEDIATEK_PRODUCT_FP_2COM, 0x0a, 0x00, 0x00) },
4829     { USB_DEVICE_AND_INTERFACE_INFO(MEDIATEK_VENDOR_ID, MEDIATEK_PRODUCT_FPDC_1COM, 0x0a, 0x00, 0x00) },
4830     { USB_DEVICE_AND_INTERFACE_INFO(MEDIATEK_VENDOR_ID, MEDIATEK_PRODUCT_FPDC_2COM, 0x0a, 0x00, 0x00) },
4831     + { USB_DEVICE_AND_INTERFACE_INFO(MEDIATEK_VENDOR_ID, MEDIATEK_PRODUCT_7103_2COM, 0xff, 0x00, 0x00) },
4832     + { USB_DEVICE_AND_INTERFACE_INFO(MEDIATEK_VENDOR_ID, MEDIATEK_PRODUCT_7106_2COM, 0x02, 0x02, 0x01) },
4833     + { USB_DEVICE_AND_INTERFACE_INFO(MEDIATEK_VENDOR_ID, MEDIATEK_PRODUCT_DC_4COM2, 0xff, 0x02, 0x01) },
4834     + { USB_DEVICE_AND_INTERFACE_INFO(MEDIATEK_VENDOR_ID, MEDIATEK_PRODUCT_DC_4COM2, 0xff, 0x00, 0x00) },
4835     { USB_DEVICE(CELLIENT_VENDOR_ID, CELLIENT_PRODUCT_MEN200) },
4836     + { USB_DEVICE(PETATEL_VENDOR_ID, PETATEL_PRODUCT_NP10T) },
4837     { } /* Terminating entry */
4838     };
4839     MODULE_DEVICE_TABLE(usb, option_ids);
4840     diff --git a/drivers/video/mxsfb.c b/drivers/video/mxsfb.c
4841     index 4a89f88..9f89992 100644
4842     --- a/drivers/video/mxsfb.c
4843     +++ b/drivers/video/mxsfb.c
4844     @@ -366,7 +366,8 @@ static void mxsfb_disable_controller(struct fb_info *fb_info)
4845     loop--;
4846     }
4847    
4848     - writel(VDCTRL4_SYNC_SIGNALS_ON, host->base + LCDC_VDCTRL4 + REG_CLR);
4849     + reg = readl(host->base + LCDC_VDCTRL4);
4850     + writel(reg & ~VDCTRL4_SYNC_SIGNALS_ON, host->base + LCDC_VDCTRL4);
4851    
4852     clk_disable_unprepare(host->clk);
4853    
4854     diff --git a/fs/ceph/addr.c b/fs/ceph/addr.c
4855     index 32ee086..bb01881 100644
4856     --- a/fs/ceph/addr.c
4857     +++ b/fs/ceph/addr.c
4858     @@ -267,6 +267,14 @@ static void finish_read(struct ceph_osd_request *req, struct ceph_msg *msg)
4859     kfree(req->r_pages);
4860     }
4861    
4862     +static void ceph_unlock_page_vector(struct page **pages, int num_pages)
4863     +{
4864     + int i;
4865     +
4866     + for (i = 0; i < num_pages; i++)
4867     + unlock_page(pages[i]);
4868     +}
4869     +
4870     /*
4871     * start an async read(ahead) operation. return nr_pages we submitted
4872     * a read for on success, or negative error code.
4873     @@ -308,8 +316,8 @@ static int start_read(struct inode *inode, struct list_head *page_list, int max)
4874     NULL, 0,
4875     ci->i_truncate_seq, ci->i_truncate_size,
4876     NULL, false, 1, 0);
4877     - if (!req)
4878     - return -ENOMEM;
4879     + if (IS_ERR(req))
4880     + return PTR_ERR(req);
4881    
4882     /* build page vector */
4883     nr_pages = len >> PAGE_CACHE_SHIFT;
4884     @@ -347,6 +355,7 @@ static int start_read(struct inode *inode, struct list_head *page_list, int max)
4885     return nr_pages;
4886    
4887     out_pages:
4888     + ceph_unlock_page_vector(pages, nr_pages);
4889     ceph_release_page_vector(pages, nr_pages);
4890     out:
4891     ceph_osdc_put_request(req);
4892     @@ -831,8 +840,8 @@ get_more_pages:
4893     ci->i_truncate_size,
4894     &inode->i_mtime, true, 1, 0);
4895    
4896     - if (!req) {
4897     - rc = -ENOMEM;
4898     + if (IS_ERR(req)) {
4899     + rc = PTR_ERR(req);
4900     unlock_page(page);
4901     break;
4902     }
4903     diff --git a/fs/ceph/caps.c b/fs/ceph/caps.c
4904     index 620daad..e7d4077 100644
4905     --- a/fs/ceph/caps.c
4906     +++ b/fs/ceph/caps.c
4907     @@ -1349,11 +1349,15 @@ int __ceph_mark_dirty_caps(struct ceph_inode_info *ci, int mask)
4908     if (!ci->i_head_snapc)
4909     ci->i_head_snapc = ceph_get_snap_context(
4910     ci->i_snap_realm->cached_context);
4911     - dout(" inode %p now dirty snapc %p\n", &ci->vfs_inode,
4912     - ci->i_head_snapc);
4913     + dout(" inode %p now dirty snapc %p auth cap %p\n",
4914     + &ci->vfs_inode, ci->i_head_snapc, ci->i_auth_cap);
4915     BUG_ON(!list_empty(&ci->i_dirty_item));
4916     spin_lock(&mdsc->cap_dirty_lock);
4917     - list_add(&ci->i_dirty_item, &mdsc->cap_dirty);
4918     + if (ci->i_auth_cap)
4919     + list_add(&ci->i_dirty_item, &mdsc->cap_dirty);
4920     + else
4921     + list_add(&ci->i_dirty_item,
4922     + &mdsc->cap_dirty_migrating);
4923     spin_unlock(&mdsc->cap_dirty_lock);
4924     if (ci->i_flushing_caps == 0) {
4925     ihold(inode);
4926     @@ -2388,7 +2392,7 @@ static void handle_cap_grant(struct inode *inode, struct ceph_mds_caps *grant,
4927     &atime);
4928    
4929     /* max size increase? */
4930     - if (max_size != ci->i_max_size) {
4931     + if (ci->i_auth_cap == cap && max_size != ci->i_max_size) {
4932     dout("max_size %lld -> %llu\n", ci->i_max_size, max_size);
4933     ci->i_max_size = max_size;
4934     if (max_size >= ci->i_wanted_max_size) {
4935     @@ -2745,6 +2749,7 @@ static void handle_cap_import(struct ceph_mds_client *mdsc,
4936    
4937     /* make sure we re-request max_size, if necessary */
4938     spin_lock(&ci->i_ceph_lock);
4939     + ci->i_wanted_max_size = 0; /* reset */
4940     ci->i_requested_max_size = 0;
4941     spin_unlock(&ci->i_ceph_lock);
4942     }
4943     @@ -2840,8 +2845,6 @@ void ceph_handle_caps(struct ceph_mds_session *session,
4944     case CEPH_CAP_OP_IMPORT:
4945     handle_cap_import(mdsc, inode, h, session,
4946     snaptrace, snaptrace_len);
4947     - ceph_check_caps(ceph_inode(inode), 0, session);
4948     - goto done_unlocked;
4949     }
4950    
4951     /* the rest require a cap */
4952     @@ -2858,6 +2861,7 @@ void ceph_handle_caps(struct ceph_mds_session *session,
4953     switch (op) {
4954     case CEPH_CAP_OP_REVOKE:
4955     case CEPH_CAP_OP_GRANT:
4956     + case CEPH_CAP_OP_IMPORT:
4957     handle_cap_grant(inode, h, session, cap, msg->middle);
4958     goto done_unlocked;
4959    
4960     diff --git a/fs/ceph/file.c b/fs/ceph/file.c
4961     index ed72428..9ce3a4b 100644
4962     --- a/fs/ceph/file.c
4963     +++ b/fs/ceph/file.c
4964     @@ -529,8 +529,8 @@ more:
4965     do_sync,
4966     ci->i_truncate_seq, ci->i_truncate_size,
4967     &mtime, false, 2, page_align);
4968     - if (!req)
4969     - return -ENOMEM;
4970     + if (IS_ERR(req))
4971     + return PTR_ERR(req);
4972    
4973     if (file->f_flags & O_DIRECT) {
4974     pages = ceph_get_direct_page_vector(data, num_pages, false);
4975     diff --git a/fs/ceph/inode.c b/fs/ceph/inode.c
4976     index 9fff9f3..81613bc 100644
4977     --- a/fs/ceph/inode.c
4978     +++ b/fs/ceph/inode.c
4979     @@ -992,11 +992,15 @@ int ceph_fill_trace(struct super_block *sb, struct ceph_mds_request *req,
4980     if (rinfo->head->is_dentry) {
4981     struct inode *dir = req->r_locked_dir;
4982    
4983     - err = fill_inode(dir, &rinfo->diri, rinfo->dirfrag,
4984     - session, req->r_request_started, -1,
4985     - &req->r_caps_reservation);
4986     - if (err < 0)
4987     - return err;
4988     + if (dir) {
4989     + err = fill_inode(dir, &rinfo->diri, rinfo->dirfrag,
4990     + session, req->r_request_started, -1,
4991     + &req->r_caps_reservation);
4992     + if (err < 0)
4993     + return err;
4994     + } else {
4995     + WARN_ON_ONCE(1);
4996     + }
4997     }
4998    
4999     /*
5000     @@ -1004,6 +1008,7 @@ int ceph_fill_trace(struct super_block *sb, struct ceph_mds_request *req,
5001     * will have trouble splicing in the virtual snapdir later
5002     */
5003     if (rinfo->head->is_dentry && !req->r_aborted &&
5004     + req->r_locked_dir &&
5005     (rinfo->head->is_target || strncmp(req->r_dentry->d_name.name,
5006     fsc->mount_options->snapdir_name,
5007     req->r_dentry->d_name.len))) {
5008     @@ -1461,7 +1466,7 @@ void __ceph_do_pending_vmtruncate(struct inode *inode)
5009     {
5010     struct ceph_inode_info *ci = ceph_inode(inode);
5011     u64 to;
5012     - int wrbuffer_refs, wake = 0;
5013     + int wrbuffer_refs, finish = 0;
5014    
5015     retry:
5016     spin_lock(&ci->i_ceph_lock);
5017     @@ -1493,15 +1498,18 @@ retry:
5018     truncate_inode_pages(inode->i_mapping, to);
5019    
5020     spin_lock(&ci->i_ceph_lock);
5021     - ci->i_truncate_pending--;
5022     - if (ci->i_truncate_pending == 0)
5023     - wake = 1;
5024     + if (to == ci->i_truncate_size) {
5025     + ci->i_truncate_pending = 0;
5026     + finish = 1;
5027     + }
5028     spin_unlock(&ci->i_ceph_lock);
5029     + if (!finish)
5030     + goto retry;
5031    
5032     if (wrbuffer_refs == 0)
5033     ceph_check_caps(ci, CHECK_CAPS_AUTHONLY, NULL);
5034     - if (wake)
5035     - wake_up_all(&ci->i_cap_wq);
5036     +
5037     + wake_up_all(&ci->i_cap_wq);
5038     }
5039    
5040    
5041     diff --git a/fs/ceph/mds_client.c b/fs/ceph/mds_client.c
5042     index 7f1682d..3fd08ad 100644
5043     --- a/fs/ceph/mds_client.c
5044     +++ b/fs/ceph/mds_client.c
5045     @@ -1886,9 +1886,14 @@ finish:
5046     static void __wake_requests(struct ceph_mds_client *mdsc,
5047     struct list_head *head)
5048     {
5049     - struct ceph_mds_request *req, *nreq;
5050     + struct ceph_mds_request *req;
5051     + LIST_HEAD(tmp_list);
5052     +
5053     + list_splice_init(head, &tmp_list);
5054    
5055     - list_for_each_entry_safe(req, nreq, head, r_wait) {
5056     + while (!list_empty(&tmp_list)) {
5057     + req = list_entry(tmp_list.next,
5058     + struct ceph_mds_request, r_wait);
5059     list_del_init(&req->r_wait);
5060     __do_request(mdsc, req);
5061     }
5062     @@ -2528,6 +2533,7 @@ static void send_mds_reconnect(struct ceph_mds_client *mdsc,
5063     session->s_state = CEPH_MDS_SESSION_RECONNECTING;
5064     session->s_seq = 0;
5065    
5066     + ceph_con_close(&session->s_con);
5067     ceph_con_open(&session->s_con,
5068     CEPH_ENTITY_TYPE_MDS, mds,
5069     ceph_mdsmap_get_addr(mdsc->mdsmap, mds));
5070     diff --git a/fs/ceph/super.c b/fs/ceph/super.c
5071     index 1e67dd7..f363918 100644
5072     --- a/fs/ceph/super.c
5073     +++ b/fs/ceph/super.c
5074     @@ -387,8 +387,6 @@ static int ceph_show_options(struct seq_file *m, struct dentry *root)
5075     seq_printf(m, ",mount_timeout=%d", opt->mount_timeout);
5076     if (opt->osd_idle_ttl != CEPH_OSD_IDLE_TTL_DEFAULT)
5077     seq_printf(m, ",osd_idle_ttl=%d", opt->osd_idle_ttl);
5078     - if (opt->osd_timeout != CEPH_OSD_TIMEOUT_DEFAULT)
5079     - seq_printf(m, ",osdtimeout=%d", opt->osd_timeout);
5080     if (opt->osd_keepalive_timeout != CEPH_OSD_KEEPALIVE_DEFAULT)
5081     seq_printf(m, ",osdkeepalivetimeout=%d",
5082     opt->osd_keepalive_timeout);
5083     diff --git a/fs/eventpoll.c b/fs/eventpoll.c
5084     index c0b3c70..33c9599 100644
5085     --- a/fs/eventpoll.c
5086     +++ b/fs/eventpoll.c
5087     @@ -1226,11 +1226,31 @@ static int ep_modify(struct eventpoll *ep, struct epitem *epi, struct epoll_even
5088     * otherwise we might miss an event that happens between the
5089     * f_op->poll() call and the new event set registering.
5090     */
5091     - epi->event.events = event->events;
5092     + epi->event.events = event->events; /* need barrier below */
5093     pt._key = event->events;
5094     epi->event.data = event->data; /* protected by mtx */
5095    
5096     /*
5097     + * The following barrier has two effects:
5098     + *
5099     + * 1) Flush epi changes above to other CPUs. This ensures
5100     + * we do not miss events from ep_poll_callback if an
5101     + * event occurs immediately after we call f_op->poll().
5102     + * We need this because we did not take ep->lock while
5103     + * changing epi above (but ep_poll_callback does take
5104     + * ep->lock).
5105     + *
5106     + * 2) We also need to ensure we do not miss _past_ events
5107     + * when calling f_op->poll(). This barrier also
5108     + * pairs with the barrier in wq_has_sleeper (see
5109     + * comments for wq_has_sleeper).
5110     + *
5111     + * This barrier will now guarantee ep_poll_callback or f_op->poll
5112     + * (or both) will notice the readiness of an item.
5113     + */
5114     + smp_mb();
5115     +
5116     + /*
5117     * Get current event bits. We can safely use the file* here because
5118     * its usage count has been increased by the caller of this function.
5119     */
5120     diff --git a/fs/ext4/acl.c b/fs/ext4/acl.c
5121     index a5c29bb..8535c45 100644
5122     --- a/fs/ext4/acl.c
5123     +++ b/fs/ext4/acl.c
5124     @@ -410,8 +410,10 @@ ext4_xattr_set_acl(struct dentry *dentry, const char *name, const void *value,
5125    
5126     retry:
5127     handle = ext4_journal_start(inode, EXT4_DATA_TRANS_BLOCKS(inode->i_sb));
5128     - if (IS_ERR(handle))
5129     - return PTR_ERR(handle);
5130     + if (IS_ERR(handle)) {
5131     + error = PTR_ERR(handle);
5132     + goto release_and_out;
5133     + }
5134     error = ext4_set_acl(handle, inode, type, acl);
5135     ext4_journal_stop(handle);
5136     if (error == -ENOSPC && ext4_should_retry_alloc(inode->i_sb, &retries))
5137     diff --git a/fs/ext4/extents.c b/fs/ext4/extents.c
5138     index c215985..852d4c2 100644
5139     --- a/fs/ext4/extents.c
5140     +++ b/fs/ext4/extents.c
5141     @@ -2110,13 +2110,14 @@ ext4_ext_in_cache(struct inode *inode, ext4_lblk_t block,
5142     * removes index from the index block.
5143     */
5144     static int ext4_ext_rm_idx(handle_t *handle, struct inode *inode,
5145     - struct ext4_ext_path *path)
5146     + struct ext4_ext_path *path, int depth)
5147     {
5148     int err;
5149     ext4_fsblk_t leaf;
5150    
5151     /* free index block */
5152     - path--;
5153     + depth--;
5154     + path = path + depth;
5155     leaf = ext4_idx_pblock(path->p_idx);
5156     if (unlikely(path->p_hdr->eh_entries == 0)) {
5157     EXT4_ERROR_INODE(inode, "path->p_hdr->eh_entries == 0");
5158     @@ -2141,6 +2142,19 @@ static int ext4_ext_rm_idx(handle_t *handle, struct inode *inode,
5159    
5160     ext4_free_blocks(handle, inode, NULL, leaf, 1,
5161     EXT4_FREE_BLOCKS_METADATA | EXT4_FREE_BLOCKS_FORGET);
5162     +
5163     + while (--depth >= 0) {
5164     + if (path->p_idx != EXT_FIRST_INDEX(path->p_hdr))
5165     + break;
5166     + path--;
5167     + err = ext4_ext_get_access(handle, inode, path);
5168     + if (err)
5169     + break;
5170     + path->p_idx->ei_block = (path+1)->p_idx->ei_block;
5171     + err = ext4_ext_dirty(handle, inode, path);
5172     + if (err)
5173     + break;
5174     + }
5175     return err;
5176     }
5177    
5178     @@ -2474,7 +2488,7 @@ ext4_ext_rm_leaf(handle_t *handle, struct inode *inode,
5179     /* if this leaf is free, then we should
5180     * remove it from index block above */
5181     if (err == 0 && eh->eh_entries == 0 && path[depth].p_bh != NULL)
5182     - err = ext4_ext_rm_idx(handle, inode, path + depth);
5183     + err = ext4_ext_rm_idx(handle, inode, path, depth);
5184    
5185     out:
5186     return err;
5187     @@ -2675,7 +2689,7 @@ cont:
5188     /* index is empty, remove it;
5189     * handle must be already prepared by the
5190     * truncatei_leaf() */
5191     - err = ext4_ext_rm_idx(handle, inode, path + i);
5192     + err = ext4_ext_rm_idx(handle, inode, path, i);
5193     }
5194     /* root level has p_bh == NULL, brelse() eats this */
5195     brelse(path[i].p_bh);
5196     diff --git a/fs/ext4/ialloc.c b/fs/ext4/ialloc.c
5197     index 556cc82..902544e 100644
5198     --- a/fs/ext4/ialloc.c
5199     +++ b/fs/ext4/ialloc.c
5200     @@ -734,7 +734,6 @@ got:
5201    
5202     BUFFER_TRACE(block_bitmap_bh, "dirty block bitmap");
5203     err = ext4_handle_dirty_metadata(handle, NULL, block_bitmap_bh);
5204     - brelse(block_bitmap_bh);
5205    
5206     /* recheck and clear flag under lock if we still need to */
5207     ext4_lock_group(sb, group);
5208     @@ -746,6 +745,7 @@ got:
5209     gdp);
5210     }
5211     ext4_unlock_group(sb, group);
5212     + brelse(block_bitmap_bh);
5213    
5214     if (err)
5215     goto fail;
5216     diff --git a/fs/ext4/super.c b/fs/ext4/super.c
5217     index b1c28f1..288f4c6 100644
5218     --- a/fs/ext4/super.c
5219     +++ b/fs/ext4/super.c
5220     @@ -1599,9 +1599,7 @@ static int parse_options(char *options, struct super_block *sb,
5221     unsigned int *journal_ioprio,
5222     int is_remount)
5223     {
5224     -#ifdef CONFIG_QUOTA
5225     struct ext4_sb_info *sbi = EXT4_SB(sb);
5226     -#endif
5227     char *p;
5228     substring_t args[MAX_OPT_ARGS];
5229     int token;
5230     @@ -1650,6 +1648,16 @@ static int parse_options(char *options, struct super_block *sb,
5231     }
5232     }
5233     #endif
5234     + if (test_opt(sb, DIOREAD_NOLOCK)) {
5235     + int blocksize =
5236     + BLOCK_SIZE << le32_to_cpu(sbi->s_es->s_log_block_size);
5237     +
5238     + if (blocksize < PAGE_CACHE_SIZE) {
5239     + ext4_msg(sb, KERN_ERR, "can't mount with "
5240     + "dioread_nolock if block size != PAGE_SIZE");
5241     + return 0;
5242     + }
5243     + }
5244     return 1;
5245     }
5246    
5247     @@ -2112,7 +2120,9 @@ static void ext4_orphan_cleanup(struct super_block *sb,
5248     __func__, inode->i_ino, inode->i_size);
5249     jbd_debug(2, "truncating inode %lu to %lld bytes\n",
5250     inode->i_ino, inode->i_size);
5251     + mutex_lock(&inode->i_mutex);
5252     ext4_truncate(inode);
5253     + mutex_unlock(&inode->i_mutex);
5254     nr_truncates++;
5255     } else {
5256     ext4_msg(sb, KERN_DEBUG,
5257     @@ -3226,15 +3236,6 @@ static int ext4_fill_super(struct super_block *sb, void *data, int silent)
5258     clear_opt(sb, DELALLOC);
5259     }
5260    
5261     - blocksize = BLOCK_SIZE << le32_to_cpu(es->s_log_block_size);
5262     - if (test_opt(sb, DIOREAD_NOLOCK)) {
5263     - if (blocksize < PAGE_SIZE) {
5264     - ext4_msg(sb, KERN_ERR, "can't mount with "
5265     - "dioread_nolock if block size != PAGE_SIZE");
5266     - goto failed_mount;
5267     - }
5268     - }
5269     -
5270     sb->s_flags = (sb->s_flags & ~MS_POSIXACL) |
5271     (test_opt(sb, POSIX_ACL) ? MS_POSIXACL : 0);
5272    
5273     @@ -3276,6 +3277,7 @@ static int ext4_fill_super(struct super_block *sb, void *data, int silent)
5274     if (!ext4_feature_set_ok(sb, (sb->s_flags & MS_RDONLY)))
5275     goto failed_mount;
5276    
5277     + blocksize = BLOCK_SIZE << le32_to_cpu(es->s_log_block_size);
5278     if (blocksize < EXT4_MIN_BLOCK_SIZE ||
5279     blocksize > EXT4_MAX_BLOCK_SIZE) {
5280     ext4_msg(sb, KERN_ERR,
5281     @@ -4506,7 +4508,7 @@ static int ext4_remount(struct super_block *sb, int *flags, char *data)
5282     }
5283    
5284     ext4_setup_system_zone(sb);
5285     - if (sbi->s_journal == NULL)
5286     + if (sbi->s_journal == NULL && !(old_sb_flags & MS_RDONLY))
5287     ext4_commit_super(sb, 1);
5288    
5289     #ifdef CONFIG_QUOTA
5290     diff --git a/fs/gfs2/lops.c b/fs/gfs2/lops.c
5291     index 6b1efb5..a392e32 100644
5292     --- a/fs/gfs2/lops.c
5293     +++ b/fs/gfs2/lops.c
5294     @@ -258,16 +258,14 @@ static void buf_lo_add(struct gfs2_sbd *sdp, struct gfs2_log_element *le)
5295     struct gfs2_meta_header *mh;
5296     struct gfs2_trans *tr;
5297    
5298     - lock_buffer(bd->bd_bh);
5299     - gfs2_log_lock(sdp);
5300     if (!list_empty(&bd->bd_list_tr))
5301     - goto out;
5302     + return;
5303     tr = current->journal_info;
5304     tr->tr_touched = 1;
5305     tr->tr_num_buf++;
5306     list_add(&bd->bd_list_tr, &tr->tr_list_buf);
5307     if (!list_empty(&le->le_list))
5308     - goto out;
5309     + return;
5310     set_bit(GLF_LFLUSH, &bd->bd_gl->gl_flags);
5311     set_bit(GLF_DIRTY, &bd->bd_gl->gl_flags);
5312     gfs2_meta_check(sdp, bd->bd_bh);
5313     @@ -278,9 +276,6 @@ static void buf_lo_add(struct gfs2_sbd *sdp, struct gfs2_log_element *le)
5314     sdp->sd_log_num_buf++;
5315     list_add(&le->le_list, &sdp->sd_log_le_buf);
5316     tr->tr_num_buf_new++;
5317     -out:
5318     - gfs2_log_unlock(sdp);
5319     - unlock_buffer(bd->bd_bh);
5320     }
5321    
5322     static void buf_lo_before_commit(struct gfs2_sbd *sdp)
5323     @@ -611,11 +606,9 @@ static void databuf_lo_add(struct gfs2_sbd *sdp, struct gfs2_log_element *le)
5324     struct address_space *mapping = bd->bd_bh->b_page->mapping;
5325     struct gfs2_inode *ip = GFS2_I(mapping->host);
5326    
5327     - lock_buffer(bd->bd_bh);
5328     - gfs2_log_lock(sdp);
5329     if (tr) {
5330     if (!list_empty(&bd->bd_list_tr))
5331     - goto out;
5332     + return;
5333     tr->tr_touched = 1;
5334     if (gfs2_is_jdata(ip)) {
5335     tr->tr_num_buf++;
5336     @@ -623,7 +616,7 @@ static void databuf_lo_add(struct gfs2_sbd *sdp, struct gfs2_log_element *le)
5337     }
5338     }
5339     if (!list_empty(&le->le_list))
5340     - goto out;
5341     + return;
5342    
5343     set_bit(GLF_LFLUSH, &bd->bd_gl->gl_flags);
5344     set_bit(GLF_DIRTY, &bd->bd_gl->gl_flags);
5345     @@ -635,9 +628,6 @@ static void databuf_lo_add(struct gfs2_sbd *sdp, struct gfs2_log_element *le)
5346     } else {
5347     list_add_tail(&le->le_list, &sdp->sd_log_le_ordered);
5348     }
5349     -out:
5350     - gfs2_log_unlock(sdp);
5351     - unlock_buffer(bd->bd_bh);
5352     }
5353    
5354     static void gfs2_check_magic(struct buffer_head *bh)
5355     diff --git a/fs/gfs2/trans.c b/fs/gfs2/trans.c
5356     index 86ac75d..6ab2a77 100644
5357     --- a/fs/gfs2/trans.c
5358     +++ b/fs/gfs2/trans.c
5359     @@ -145,14 +145,22 @@ void gfs2_trans_add_bh(struct gfs2_glock *gl, struct buffer_head *bh, int meta)
5360     struct gfs2_sbd *sdp = gl->gl_sbd;
5361     struct gfs2_bufdata *bd;
5362    
5363     + lock_buffer(bh);
5364     + gfs2_log_lock(sdp);
5365     bd = bh->b_private;
5366     if (bd)
5367     gfs2_assert(sdp, bd->bd_gl == gl);
5368     else {
5369     + gfs2_log_unlock(sdp);
5370     + unlock_buffer(bh);
5371     gfs2_attach_bufdata(gl, bh, meta);
5372     bd = bh->b_private;
5373     + lock_buffer(bh);
5374     + gfs2_log_lock(sdp);
5375     }
5376     lops_add(sdp, &bd->bd_le);
5377     + gfs2_log_unlock(sdp);
5378     + unlock_buffer(bh);
5379     }
5380    
5381     void gfs2_trans_add_revoke(struct gfs2_sbd *sdp, struct gfs2_bufdata *bd)
5382     diff --git a/fs/jbd2/transaction.c b/fs/jbd2/transaction.c
5383     index ddcd354..de8b4cb 100644
5384     --- a/fs/jbd2/transaction.c
5385     +++ b/fs/jbd2/transaction.c
5386     @@ -209,7 +209,8 @@ repeat:
5387     if (!new_transaction)
5388     goto alloc_transaction;
5389     write_lock(&journal->j_state_lock);
5390     - if (!journal->j_running_transaction) {
5391     + if (!journal->j_running_transaction &&
5392     + !journal->j_barrier_count) {
5393     jbd2_get_transaction(journal, new_transaction);
5394     new_transaction = NULL;
5395     }
5396     diff --git a/fs/jffs2/nodemgmt.c b/fs/jffs2/nodemgmt.c
5397     index 6784d1e..ffa8f12 100644
5398     --- a/fs/jffs2/nodemgmt.c
5399     +++ b/fs/jffs2/nodemgmt.c
5400     @@ -375,14 +375,16 @@ static int jffs2_do_reserve_space(struct jffs2_sb_info *c, uint32_t minsize,
5401     spin_unlock(&c->erase_completion_lock);
5402    
5403     ret = jffs2_prealloc_raw_node_refs(c, jeb, 1);
5404     - if (ret)
5405     - return ret;
5406     +
5407     /* Just lock it again and continue. Nothing much can change because
5408     we hold c->alloc_sem anyway. In fact, it's not entirely clear why
5409     we hold c->erase_completion_lock in the majority of this function...
5410     but that's a question for another (more caffeine-rich) day. */
5411     spin_lock(&c->erase_completion_lock);
5412    
5413     + if (ret)
5414     + return ret;
5415     +
5416     waste = jeb->free_size;
5417     jffs2_link_node_ref(c, jeb,
5418     (jeb->offset + c->sector_size - waste) | REF_OBSOLETE,
5419     diff --git a/fs/udf/inode.c b/fs/udf/inode.c
5420     index 7d75280..aa70035 100644
5421     --- a/fs/udf/inode.c
5422     +++ b/fs/udf/inode.c
5423     @@ -574,6 +574,7 @@ static sector_t inode_getblk(struct inode *inode, sector_t block,
5424     struct udf_inode_info *iinfo = UDF_I(inode);
5425     int goal = 0, pgoal = iinfo->i_location.logicalBlockNum;
5426     int lastblock = 0;
5427     + bool isBeyondEOF;
5428    
5429     *err = 0;
5430     *new = 0;
5431     @@ -653,7 +654,7 @@ static sector_t inode_getblk(struct inode *inode, sector_t block,
5432     /* Are we beyond EOF? */
5433     if (etype == -1) {
5434     int ret;
5435     -
5436     + isBeyondEOF = 1;
5437     if (count) {
5438     if (c)
5439     laarr[0] = laarr[1];
5440     @@ -696,6 +697,7 @@ static sector_t inode_getblk(struct inode *inode, sector_t block,
5441     endnum = c + 1;
5442     lastblock = 1;
5443     } else {
5444     + isBeyondEOF = 0;
5445     endnum = startnum = ((count > 2) ? 2 : count);
5446    
5447     /* if the current extent is in position 0,
5448     @@ -738,10 +740,13 @@ static sector_t inode_getblk(struct inode *inode, sector_t block,
5449     goal, err);
5450     if (!newblocknum) {
5451     brelse(prev_epos.bh);
5452     + brelse(cur_epos.bh);
5453     + brelse(next_epos.bh);
5454     *err = -ENOSPC;
5455     return 0;
5456     }
5457     - iinfo->i_lenExtents += inode->i_sb->s_blocksize;
5458     + if (isBeyondEOF)
5459     + iinfo->i_lenExtents += inode->i_sb->s_blocksize;
5460     }
5461    
5462     /* if the extent the requsted block is located in contains multiple
5463     @@ -768,6 +773,8 @@ static sector_t inode_getblk(struct inode *inode, sector_t block,
5464     udf_update_extents(inode, laarr, startnum, endnum, &prev_epos);
5465    
5466     brelse(prev_epos.bh);
5467     + brelse(cur_epos.bh);
5468     + brelse(next_epos.bh);
5469    
5470     newblock = udf_get_pblock(inode->i_sb, newblocknum,
5471     iinfo->i_location.partitionReferenceNum, 0);
5472     diff --git a/include/linux/ceph/libceph.h b/include/linux/ceph/libceph.h
5473     index 98ec36a..893420b 100644
5474     --- a/include/linux/ceph/libceph.h
5475     +++ b/include/linux/ceph/libceph.h
5476     @@ -49,7 +49,6 @@ struct ceph_options {
5477     struct ceph_entity_addr my_addr;
5478     int mount_timeout;
5479     int osd_idle_ttl;
5480     - int osd_timeout;
5481     int osd_keepalive_timeout;
5482    
5483     /*
5484     @@ -69,7 +68,6 @@ struct ceph_options {
5485     * defaults
5486     */
5487     #define CEPH_MOUNT_TIMEOUT_DEFAULT 60
5488     -#define CEPH_OSD_TIMEOUT_DEFAULT 60 /* seconds */
5489     #define CEPH_OSD_KEEPALIVE_DEFAULT 5
5490     #define CEPH_OSD_IDLE_TTL_DEFAULT 60
5491    
5492     diff --git a/kernel/trace/ring_buffer.c b/kernel/trace/ring_buffer.c
5493     index cf8d11e..2866783 100644
5494     --- a/kernel/trace/ring_buffer.c
5495     +++ b/kernel/trace/ring_buffer.c
5496     @@ -2708,7 +2708,7 @@ unsigned long ring_buffer_oldest_event_ts(struct ring_buffer *buffer, int cpu)
5497     unsigned long flags;
5498     struct ring_buffer_per_cpu *cpu_buffer;
5499     struct buffer_page *bpage;
5500     - unsigned long ret;
5501     + unsigned long ret = 0;
5502    
5503     if (!cpumask_test_cpu(cpu, buffer->cpumask))
5504     return 0;
5505     @@ -2723,7 +2723,8 @@ unsigned long ring_buffer_oldest_event_ts(struct ring_buffer *buffer, int cpu)
5506     bpage = cpu_buffer->reader_page;
5507     else
5508     bpage = rb_set_head_page(cpu_buffer);
5509     - ret = bpage->page->time_stamp;
5510     + if (bpage)
5511     + ret = bpage->page->time_stamp;
5512     raw_spin_unlock_irqrestore(&cpu_buffer->reader_lock, flags);
5513    
5514     return ret;
5515     @@ -3030,6 +3031,8 @@ rb_get_reader_page(struct ring_buffer_per_cpu *cpu_buffer)
5516     * Splice the empty reader page into the list around the head.
5517     */
5518     reader = rb_set_head_page(cpu_buffer);
5519     + if (!reader)
5520     + goto out;
5521     cpu_buffer->reader_page->list.next = rb_list_head(reader->list.next);
5522     cpu_buffer->reader_page->list.prev = reader->list.prev;
5523    
5524     diff --git a/mm/compaction.c b/mm/compaction.c
5525     index 459b0ab..3c8d7fe 100644
5526     --- a/mm/compaction.c
5527     +++ b/mm/compaction.c
5528     @@ -736,7 +736,7 @@ static int compact_node(int nid)
5529     }
5530    
5531     /* Compact all nodes in the system */
5532     -static int compact_nodes(void)
5533     +static void compact_nodes(void)
5534     {
5535     int nid;
5536    
5537     @@ -745,8 +745,6 @@ static int compact_nodes(void)
5538    
5539     for_each_online_node(nid)
5540     compact_node(nid);
5541     -
5542     - return COMPACT_COMPLETE;
5543     }
5544    
5545     /* The written value is actually unused, all memory is compacted */
5546     @@ -757,7 +755,7 @@ int sysctl_compaction_handler(struct ctl_table *table, int write,
5547     void __user *buffer, size_t *length, loff_t *ppos)
5548     {
5549     if (write)
5550     - return compact_nodes();
5551     + compact_nodes();
5552    
5553     return 0;
5554     }
5555     diff --git a/mm/huge_memory.c b/mm/huge_memory.c
5556     index f0e5306..caf15b6 100644
5557     --- a/mm/huge_memory.c
5558     +++ b/mm/huge_memory.c
5559     @@ -950,6 +950,8 @@ int do_huge_pmd_wp_page(struct mm_struct *mm, struct vm_area_struct *vma,
5560     count_vm_event(THP_FAULT_FALLBACK);
5561     ret = do_huge_pmd_wp_page_fallback(mm, vma, address,
5562     pmd, orig_pmd, page, haddr);
5563     + if (ret & VM_FAULT_OOM)
5564     + split_huge_page(page);
5565     put_page(page);
5566     goto out;
5567     }
5568     @@ -957,6 +959,7 @@ int do_huge_pmd_wp_page(struct mm_struct *mm, struct vm_area_struct *vma,
5569    
5570     if (unlikely(mem_cgroup_newpage_charge(new_page, mm, GFP_KERNEL))) {
5571     put_page(new_page);
5572     + split_huge_page(page);
5573     put_page(page);
5574     ret |= VM_FAULT_OOM;
5575     goto out;
5576     diff --git a/mm/memory.c b/mm/memory.c
5577     index 024b4af..2f42aab 100644
5578     --- a/mm/memory.c
5579     +++ b/mm/memory.c
5580     @@ -3494,6 +3494,7 @@ int handle_mm_fault(struct mm_struct *mm, struct vm_area_struct *vma,
5581     if (unlikely(is_vm_hugetlb_page(vma)))
5582     return hugetlb_fault(mm, vma, address, flags);
5583    
5584     +retry:
5585     pgd = pgd_offset(mm, address);
5586     pud = pud_alloc(mm, pgd, address);
5587     if (!pud)
5588     @@ -3507,13 +3508,24 @@ int handle_mm_fault(struct mm_struct *mm, struct vm_area_struct *vma,
5589     pmd, flags);
5590     } else {
5591     pmd_t orig_pmd = *pmd;
5592     + int ret;
5593     +
5594     barrier();
5595     if (pmd_trans_huge(orig_pmd)) {
5596     if (flags & FAULT_FLAG_WRITE &&
5597     !pmd_write(orig_pmd) &&
5598     - !pmd_trans_splitting(orig_pmd))
5599     - return do_huge_pmd_wp_page(mm, vma, address,
5600     - pmd, orig_pmd);
5601     + !pmd_trans_splitting(orig_pmd)) {
5602     + ret = do_huge_pmd_wp_page(mm, vma, address, pmd,
5603     + orig_pmd);
5604     + /*
5605     + * If COW results in an oom, the huge pmd will
5606     + * have been split, so retry the fault on the
5607     + * pte for a smaller charge.
5608     + */
5609     + if (unlikely(ret & VM_FAULT_OOM))
5610     + goto retry;
5611     + return ret;
5612     + }
5613     return 0;
5614     }
5615     }
5616     diff --git a/mm/page_alloc.c b/mm/page_alloc.c
5617     index 88a6d87..691b8ec 100644
5618     --- a/mm/page_alloc.c
5619     +++ b/mm/page_alloc.c
5620     @@ -5340,7 +5340,7 @@ static inline int pfn_to_bitidx(struct zone *zone, unsigned long pfn)
5621     pfn &= (PAGES_PER_SECTION-1);
5622     return (pfn >> pageblock_order) * NR_PAGEBLOCK_BITS;
5623     #else
5624     - pfn = pfn - zone->zone_start_pfn;
5625     + pfn = pfn - round_down(zone->zone_start_pfn, pageblock_nr_pages);
5626     return (pfn >> pageblock_order) * NR_PAGEBLOCK_BITS;
5627     #endif /* CONFIG_SPARSEMEM */
5628     }
5629     diff --git a/net/ceph/ceph_common.c b/net/ceph/ceph_common.c
5630     index 8e74e8c..b11448f 100644
5631     --- a/net/ceph/ceph_common.c
5632     +++ b/net/ceph/ceph_common.c
5633     @@ -304,7 +304,6 @@ ceph_parse_options(char *options, const char *dev_name,
5634    
5635     /* start with defaults */
5636     opt->flags = CEPH_OPT_DEFAULT;
5637     - opt->osd_timeout = CEPH_OSD_TIMEOUT_DEFAULT;
5638     opt->osd_keepalive_timeout = CEPH_OSD_KEEPALIVE_DEFAULT;
5639     opt->mount_timeout = CEPH_MOUNT_TIMEOUT_DEFAULT; /* seconds */
5640     opt->osd_idle_ttl = CEPH_OSD_IDLE_TTL_DEFAULT; /* seconds */
5641     @@ -390,7 +389,7 @@ ceph_parse_options(char *options, const char *dev_name,
5642    
5643     /* misc */
5644     case Opt_osdtimeout:
5645     - opt->osd_timeout = intval;
5646     + pr_warning("ignoring deprecated osdtimeout option\n");
5647     break;
5648     case Opt_osdkeepalivetimeout:
5649     opt->osd_keepalive_timeout = intval;
5650     diff --git a/net/ceph/messenger.c b/net/ceph/messenger.c
5651     index aa71a67..ba1037c 100644
5652     --- a/net/ceph/messenger.c
5653     +++ b/net/ceph/messenger.c
5654     @@ -506,6 +506,7 @@ static void reset_connection(struct ceph_connection *con)
5655     {
5656     /* reset connection, out_queue, msg_ and connect_seq */
5657     /* discard existing out_queue and msg_seq */
5658     + dout("reset_connection %p\n", con);
5659     ceph_msg_remove_list(&con->out_queue);
5660     ceph_msg_remove_list(&con->out_sent);
5661    
5662     @@ -561,7 +562,7 @@ void ceph_con_open(struct ceph_connection *con,
5663     mutex_lock(&con->mutex);
5664     dout("con_open %p %s\n", con, ceph_pr_addr(&addr->in_addr));
5665    
5666     - BUG_ON(con->state != CON_STATE_CLOSED);
5667     + WARN_ON(con->state != CON_STATE_CLOSED);
5668     con->state = CON_STATE_PREOPEN;
5669    
5670     con->peer_name.type = (__u8) entity_type;
5671     @@ -1502,13 +1503,6 @@ static int process_banner(struct ceph_connection *con)
5672     return 0;
5673     }
5674    
5675     -static void fail_protocol(struct ceph_connection *con)
5676     -{
5677     - reset_connection(con);
5678     - BUG_ON(con->state != CON_STATE_NEGOTIATING);
5679     - con->state = CON_STATE_CLOSED;
5680     -}
5681     -
5682     static int process_connect(struct ceph_connection *con)
5683     {
5684     u64 sup_feat = con->msgr->supported_features;
5685     @@ -1526,7 +1520,7 @@ static int process_connect(struct ceph_connection *con)
5686     ceph_pr_addr(&con->peer_addr.in_addr),
5687     sup_feat, server_feat, server_feat & ~sup_feat);
5688     con->error_msg = "missing required protocol features";
5689     - fail_protocol(con);
5690     + reset_connection(con);
5691     return -1;
5692    
5693     case CEPH_MSGR_TAG_BADPROTOVER:
5694     @@ -1537,7 +1531,7 @@ static int process_connect(struct ceph_connection *con)
5695     le32_to_cpu(con->out_connect.protocol_version),
5696     le32_to_cpu(con->in_reply.protocol_version));
5697     con->error_msg = "protocol version mismatch";
5698     - fail_protocol(con);
5699     + reset_connection(con);
5700     return -1;
5701    
5702     case CEPH_MSGR_TAG_BADAUTHORIZER:
5703     @@ -1627,11 +1621,11 @@ static int process_connect(struct ceph_connection *con)
5704     ceph_pr_addr(&con->peer_addr.in_addr),
5705     req_feat, server_feat, req_feat & ~server_feat);
5706     con->error_msg = "missing required protocol features";
5707     - fail_protocol(con);
5708     + reset_connection(con);
5709     return -1;
5710     }
5711    
5712     - BUG_ON(con->state != CON_STATE_NEGOTIATING);
5713     + WARN_ON(con->state != CON_STATE_NEGOTIATING);
5714     con->state = CON_STATE_OPEN;
5715    
5716     con->peer_global_seq = le32_to_cpu(con->in_reply.global_seq);
5717     @@ -2128,7 +2122,6 @@ more:
5718     if (ret < 0)
5719     goto out;
5720    
5721     - BUG_ON(con->state != CON_STATE_CONNECTING);
5722     con->state = CON_STATE_NEGOTIATING;
5723    
5724     /*
5725     @@ -2156,7 +2149,7 @@ more:
5726     goto more;
5727     }
5728    
5729     - BUG_ON(con->state != CON_STATE_OPEN);
5730     + WARN_ON(con->state != CON_STATE_OPEN);
5731    
5732     if (con->in_base_pos < 0) {
5733     /*
5734     @@ -2258,6 +2251,35 @@ static void queue_con(struct ceph_connection *con)
5735     }
5736     }
5737    
5738     +static bool con_sock_closed(struct ceph_connection *con)
5739     +{
5740     + if (!test_and_clear_bit(CON_FLAG_SOCK_CLOSED, &con->flags))
5741     + return false;
5742     +
5743     +#define CASE(x) \
5744     + case CON_STATE_ ## x: \
5745     + con->error_msg = "socket closed (con state " #x ")"; \
5746     + break;
5747     +
5748     + switch (con->state) {
5749     + CASE(CLOSED);
5750     + CASE(PREOPEN);
5751     + CASE(CONNECTING);
5752     + CASE(NEGOTIATING);
5753     + CASE(OPEN);
5754     + CASE(STANDBY);
5755     + default:
5756     + pr_warning("%s con %p unrecognized state %lu\n",
5757     + __func__, con, con->state);
5758     + con->error_msg = "unrecognized con state";
5759     + BUG();
5760     + break;
5761     + }
5762     +#undef CASE
5763     +
5764     + return true;
5765     +}
5766     +
5767     /*
5768     * Do some work on a connection. Drop a connection ref when we're done.
5769     */
5770     @@ -2269,24 +2291,8 @@ static void con_work(struct work_struct *work)
5771    
5772     mutex_lock(&con->mutex);
5773     restart:
5774     - if (test_and_clear_bit(CON_FLAG_SOCK_CLOSED, &con->flags)) {
5775     - switch (con->state) {
5776     - case CON_STATE_CONNECTING:
5777     - con->error_msg = "connection failed";
5778     - break;
5779     - case CON_STATE_NEGOTIATING:
5780     - con->error_msg = "negotiation failed";
5781     - break;
5782     - case CON_STATE_OPEN:
5783     - con->error_msg = "socket closed";
5784     - break;
5785     - default:
5786     - dout("unrecognized con state %d\n", (int)con->state);
5787     - con->error_msg = "unrecognized con state";
5788     - BUG();
5789     - }
5790     + if (con_sock_closed(con))
5791     goto fault;
5792     - }
5793    
5794     if (test_and_clear_bit(CON_FLAG_BACKOFF, &con->flags)) {
5795     dout("con_work %p backing off\n", con);
5796     @@ -2352,12 +2358,12 @@ fault:
5797     static void ceph_fault(struct ceph_connection *con)
5798     __releases(con->mutex)
5799     {
5800     - pr_err("%s%lld %s %s\n", ENTITY_NAME(con->peer_name),
5801     + pr_warning("%s%lld %s %s\n", ENTITY_NAME(con->peer_name),
5802     ceph_pr_addr(&con->peer_addr.in_addr), con->error_msg);
5803     dout("fault %p state %lu to peer %s\n",
5804     con, con->state, ceph_pr_addr(&con->peer_addr.in_addr));
5805    
5806     - BUG_ON(con->state != CON_STATE_CONNECTING &&
5807     + WARN_ON(con->state != CON_STATE_CONNECTING &&
5808     con->state != CON_STATE_NEGOTIATING &&
5809     con->state != CON_STATE_OPEN);
5810    
5811     diff --git a/net/ceph/osd_client.c b/net/ceph/osd_client.c
5812     index a79dbae..b16dfa2 100644
5813     --- a/net/ceph/osd_client.c
5814     +++ b/net/ceph/osd_client.c
5815     @@ -221,6 +221,7 @@ struct ceph_osd_request *ceph_osdc_alloc_request(struct ceph_osd_client *osdc,
5816     kref_init(&req->r_kref);
5817     init_completion(&req->r_completion);
5818     init_completion(&req->r_safe_completion);
5819     + RB_CLEAR_NODE(&req->r_node);
5820     INIT_LIST_HEAD(&req->r_unsafe_item);
5821     INIT_LIST_HEAD(&req->r_linger_item);
5822     INIT_LIST_HEAD(&req->r_linger_osd);
5823     @@ -461,6 +462,7 @@ struct ceph_osd_request *ceph_osdc_new_request(struct ceph_osd_client *osdc,
5824     {
5825     struct ceph_osd_req_op ops[3];
5826     struct ceph_osd_request *req;
5827     + int r;
5828    
5829     ops[0].op = opcode;
5830     ops[0].extent.truncate_seq = truncate_seq;
5831     @@ -479,10 +481,12 @@ struct ceph_osd_request *ceph_osdc_new_request(struct ceph_osd_client *osdc,
5832     use_mempool,
5833     GFP_NOFS, NULL, NULL);
5834     if (!req)
5835     - return NULL;
5836     + return ERR_PTR(-ENOMEM);
5837    
5838     /* calculate max write size */
5839     - calc_layout(osdc, vino, layout, off, plen, req, ops);
5840     + r = calc_layout(osdc, vino, layout, off, plen, req, ops);
5841     + if (r < 0)
5842     + return ERR_PTR(r);
5843     req->r_file_layout = *layout; /* keep a copy */
5844    
5845     /* in case it differs from natural (file) alignment that
5846     @@ -575,7 +579,7 @@ static void __kick_osd_requests(struct ceph_osd_client *osdc,
5847    
5848     dout("__kick_osd_requests osd%d\n", osd->o_osd);
5849     err = __reset_osd(osdc, osd);
5850     - if (err == -EAGAIN)
5851     + if (err)
5852     return;
5853    
5854     list_for_each_entry(req, &osd->o_requests, r_osd_item) {
5855     @@ -602,14 +606,6 @@ static void __kick_osd_requests(struct ceph_osd_client *osdc,
5856     }
5857     }
5858    
5859     -static void kick_osd_requests(struct ceph_osd_client *osdc,
5860     - struct ceph_osd *kickosd)
5861     -{
5862     - mutex_lock(&osdc->request_mutex);
5863     - __kick_osd_requests(osdc, kickosd);
5864     - mutex_unlock(&osdc->request_mutex);
5865     -}
5866     -
5867     /*
5868     * If the osd connection drops, we need to resubmit all requests.
5869     */
5870     @@ -623,7 +619,9 @@ static void osd_reset(struct ceph_connection *con)
5871     dout("osd_reset osd%d\n", osd->o_osd);
5872     osdc = osd->o_osdc;
5873     down_read(&osdc->map_sem);
5874     - kick_osd_requests(osdc, osd);
5875     + mutex_lock(&osdc->request_mutex);
5876     + __kick_osd_requests(osdc, osd);
5877     + mutex_unlock(&osdc->request_mutex);
5878     send_queued(osdc);
5879     up_read(&osdc->map_sem);
5880     }
5881     @@ -642,6 +640,7 @@ static struct ceph_osd *create_osd(struct ceph_osd_client *osdc, int onum)
5882     atomic_set(&osd->o_ref, 1);
5883     osd->o_osdc = osdc;
5884     osd->o_osd = onum;
5885     + RB_CLEAR_NODE(&osd->o_node);
5886     INIT_LIST_HEAD(&osd->o_requests);
5887     INIT_LIST_HEAD(&osd->o_linger_requests);
5888     INIT_LIST_HEAD(&osd->o_osd_lru);
5889     @@ -745,6 +744,7 @@ static int __reset_osd(struct ceph_osd_client *osdc, struct ceph_osd *osd)
5890     if (list_empty(&osd->o_requests) &&
5891     list_empty(&osd->o_linger_requests)) {
5892     __remove_osd(osdc, osd);
5893     + ret = -ENODEV;
5894     } else if (memcmp(&osdc->osdmap->osd_addr[osd->o_osd],
5895     &osd->o_con.peer_addr,
5896     sizeof(osd->o_con.peer_addr)) == 0 &&
5897     @@ -871,9 +871,9 @@ static void __unregister_request(struct ceph_osd_client *osdc,
5898     req->r_osd = NULL;
5899     }
5900    
5901     + list_del_init(&req->r_req_lru_item);
5902     ceph_osdc_put_request(req);
5903    
5904     - list_del_init(&req->r_req_lru_item);
5905     if (osdc->num_requests == 0) {
5906     dout(" no requests, canceling timeout\n");
5907     __cancel_osd_timeout(osdc);
5908     @@ -905,8 +905,8 @@ static void __unregister_linger_request(struct ceph_osd_client *osdc,
5909     struct ceph_osd_request *req)
5910     {
5911     dout("__unregister_linger_request %p\n", req);
5912     + list_del_init(&req->r_linger_item);
5913     if (req->r_osd) {
5914     - list_del_init(&req->r_linger_item);
5915     list_del_init(&req->r_linger_osd);
5916    
5917     if (list_empty(&req->r_osd->o_requests) &&
5918     @@ -1085,12 +1085,10 @@ static void handle_timeout(struct work_struct *work)
5919     {
5920     struct ceph_osd_client *osdc =
5921     container_of(work, struct ceph_osd_client, timeout_work.work);
5922     - struct ceph_osd_request *req, *last_req = NULL;
5923     + struct ceph_osd_request *req;
5924     struct ceph_osd *osd;
5925     - unsigned long timeout = osdc->client->options->osd_timeout * HZ;
5926     unsigned long keepalive =
5927     osdc->client->options->osd_keepalive_timeout * HZ;
5928     - unsigned long last_stamp = 0;
5929     struct list_head slow_osds;
5930     dout("timeout\n");
5931     down_read(&osdc->map_sem);
5932     @@ -1100,37 +1098,6 @@ static void handle_timeout(struct work_struct *work)
5933     mutex_lock(&osdc->request_mutex);
5934    
5935     /*
5936     - * reset osds that appear to be _really_ unresponsive. this
5937     - * is a failsafe measure.. we really shouldn't be getting to
5938     - * this point if the system is working properly. the monitors
5939     - * should mark the osd as failed and we should find out about
5940     - * it from an updated osd map.
5941     - */
5942     - while (timeout && !list_empty(&osdc->req_lru)) {
5943     - req = list_entry(osdc->req_lru.next, struct ceph_osd_request,
5944     - r_req_lru_item);
5945     -
5946     - /* hasn't been long enough since we sent it? */
5947     - if (time_before(jiffies, req->r_stamp + timeout))
5948     - break;
5949     -
5950     - /* hasn't been long enough since it was acked? */
5951     - if (req->r_request->ack_stamp == 0 ||
5952     - time_before(jiffies, req->r_request->ack_stamp + timeout))
5953     - break;
5954     -
5955     - BUG_ON(req == last_req && req->r_stamp == last_stamp);
5956     - last_req = req;
5957     - last_stamp = req->r_stamp;
5958     -
5959     - osd = req->r_osd;
5960     - BUG_ON(!osd);
5961     - pr_warning(" tid %llu timed out on osd%d, will reset osd\n",
5962     - req->r_tid, osd->o_osd);
5963     - __kick_osd_requests(osdc, osd);
5964     - }
5965     -
5966     - /*
5967     * ping osds that are a bit slow. this ensures that if there
5968     * is a break in the TCP connection we will notice, and reopen
5969     * a connection with that osd (from the fault callback).
5970     @@ -1301,7 +1268,7 @@ static void reset_changed_osds(struct ceph_osd_client *osdc)
5971     * Requeue requests whose mapping to an OSD has changed. If requests map to
5972     * no osd, request a new map.
5973     *
5974     - * Caller should hold map_sem for read and request_mutex.
5975     + * Caller should hold map_sem for read.
5976     */
5977     static void kick_requests(struct ceph_osd_client *osdc, int force_resend)
5978     {
5979     @@ -1315,6 +1282,24 @@ static void kick_requests(struct ceph_osd_client *osdc, int force_resend)
5980     for (p = rb_first(&osdc->requests); p; ) {
5981     req = rb_entry(p, struct ceph_osd_request, r_node);
5982     p = rb_next(p);
5983     +
5984     + /*
5985     + * For linger requests that have not yet been
5986     + * registered, move them to the linger list; they'll
5987     + * be sent to the osd in the loop below. Unregister
5988     + * the request before re-registering it as a linger
5989     + * request to ensure the __map_request() below
5990     + * will decide it needs to be sent.
5991     + */
5992     + if (req->r_linger && list_empty(&req->r_linger_item)) {
5993     + dout("%p tid %llu restart on osd%d\n",
5994     + req, req->r_tid,
5995     + req->r_osd ? req->r_osd->o_osd : -1);
5996     + __unregister_request(osdc, req);
5997     + __register_linger_request(osdc, req);
5998     + continue;
5999     + }
6000     +
6001     err = __map_request(osdc, req, force_resend);
6002     if (err < 0)
6003     continue; /* error */
6004     @@ -1329,17 +1314,6 @@ static void kick_requests(struct ceph_osd_client *osdc, int force_resend)
6005     req->r_flags |= CEPH_OSD_FLAG_RETRY;
6006     }
6007     }
6008     - if (req->r_linger && list_empty(&req->r_linger_item)) {
6009     - /*
6010     - * register as a linger so that we will
6011     - * re-submit below and get a new tid
6012     - */
6013     - dout("%p tid %llu restart on osd%d\n",
6014     - req, req->r_tid,
6015     - req->r_osd ? req->r_osd->o_osd : -1);
6016     - __register_linger_request(osdc, req);
6017     - __unregister_request(osdc, req);
6018     - }
6019     }
6020    
6021     list_for_each_entry_safe(req, nreq, &osdc->req_linger,
6022     @@ -1347,6 +1321,7 @@ static void kick_requests(struct ceph_osd_client *osdc, int force_resend)
6023     dout("linger req=%p req->r_osd=%p\n", req, req->r_osd);
6024    
6025     err = __map_request(osdc, req, force_resend);
6026     + dout("__map_request returned %d\n", err);
6027     if (err == 0)
6028     continue; /* no change and no osd was specified */
6029     if (err < 0)
6030     @@ -1359,8 +1334,8 @@ static void kick_requests(struct ceph_osd_client *osdc, int force_resend)
6031    
6032     dout("kicking lingering %p tid %llu osd%d\n", req, req->r_tid,
6033     req->r_osd ? req->r_osd->o_osd : -1);
6034     - __unregister_linger_request(osdc, req);
6035     __register_request(osdc, req);
6036     + __unregister_linger_request(osdc, req);
6037     }
6038     mutex_unlock(&osdc->request_mutex);
6039    
6040     @@ -1368,6 +1343,7 @@ static void kick_requests(struct ceph_osd_client *osdc, int force_resend)
6041     dout("%d requests for down osds, need new map\n", needmap);
6042     ceph_monc_request_next_osdmap(&osdc->client->monc);
6043     }
6044     + reset_changed_osds(osdc);
6045     }
6046    
6047    
6048     @@ -1424,7 +1400,6 @@ void ceph_osdc_handle_map(struct ceph_osd_client *osdc, struct ceph_msg *msg)
6049     osdc->osdmap = newmap;
6050     }
6051     kick_requests(osdc, 0);
6052     - reset_changed_osds(osdc);
6053     } else {
6054     dout("ignoring incremental map %u len %d\n",
6055     epoch, maplen);
6056     @@ -1594,6 +1569,7 @@ int ceph_osdc_create_event(struct ceph_osd_client *osdc,
6057     event->data = data;
6058     event->osdc = osdc;
6059     INIT_LIST_HEAD(&event->osd_node);
6060     + RB_CLEAR_NODE(&event->node);
6061     kref_init(&event->kref); /* one ref for us */
6062     kref_get(&event->kref); /* one ref for the caller */
6063     init_completion(&event->completion);
6064     @@ -1925,8 +1901,8 @@ int ceph_osdc_readpages(struct ceph_osd_client *osdc,
6065     CEPH_OSD_OP_READ, CEPH_OSD_FLAG_READ,
6066     NULL, 0, truncate_seq, truncate_size, NULL,
6067     false, 1, page_align);
6068     - if (!req)
6069     - return -ENOMEM;
6070     + if (IS_ERR(req))
6071     + return PTR_ERR(req);
6072    
6073     /* it may be a short read due to an object boundary */
6074     req->r_pages = pages;
6075     @@ -1968,8 +1944,8 @@ int ceph_osdc_writepages(struct ceph_osd_client *osdc, struct ceph_vino vino,
6076     snapc, do_sync,
6077     truncate_seq, truncate_size, mtime,
6078     nofail, 1, page_align);
6079     - if (!req)
6080     - return -ENOMEM;
6081     + if (IS_ERR(req))
6082     + return PTR_ERR(req);
6083    
6084     /* it may be a short write due to an object boundary */
6085     req->r_pages = pages;
6086     diff --git a/net/ceph/osdmap.c b/net/ceph/osdmap.c
6087     index 430076e..7fbe210 100644
6088     --- a/net/ceph/osdmap.c
6089     +++ b/net/ceph/osdmap.c
6090     @@ -613,10 +613,12 @@ struct ceph_osdmap *osdmap_decode(void **p, void *end)
6091     ceph_decode_32_safe(p, end, max, bad);
6092     while (max--) {
6093     ceph_decode_need(p, end, 4 + 1 + sizeof(pi->v), bad);
6094     + err = -ENOMEM;
6095     pi = kzalloc(sizeof(*pi), GFP_NOFS);
6096     if (!pi)
6097     goto bad;
6098     pi->id = ceph_decode_32(p);
6099     + err = -EINVAL;
6100     ev = ceph_decode_8(p); /* encoding version */
6101     if (ev > CEPH_PG_POOL_VERSION) {
6102     pr_warning("got unknown v %d > %d of ceph_pg_pool\n",
6103     @@ -632,8 +634,13 @@ struct ceph_osdmap *osdmap_decode(void **p, void *end)
6104     __insert_pg_pool(&map->pg_pools, pi);
6105     }
6106    
6107     - if (version >= 5 && __decode_pool_names(p, end, map) < 0)
6108     - goto bad;
6109     + if (version >= 5) {
6110     + err = __decode_pool_names(p, end, map);
6111     + if (err < 0) {
6112     + dout("fail to decode pool names");
6113     + goto bad;
6114     + }
6115     + }
6116    
6117     ceph_decode_32_safe(p, end, map->pool_max, bad);
6118    
6119     @@ -713,7 +720,7 @@ struct ceph_osdmap *osdmap_decode(void **p, void *end)
6120     return map;
6121    
6122     bad:
6123     - dout("osdmap_decode fail\n");
6124     + dout("osdmap_decode fail err %d\n", err);
6125     ceph_osdmap_destroy(map);
6126     return ERR_PTR(err);
6127     }
6128     @@ -807,6 +814,7 @@ struct ceph_osdmap *osdmap_apply_incremental(void **p, void *end,
6129     if (ev > CEPH_PG_POOL_VERSION) {
6130     pr_warning("got unknown v %d > %d of ceph_pg_pool\n",
6131     ev, CEPH_PG_POOL_VERSION);
6132     + err = -EINVAL;
6133     goto bad;
6134     }
6135     pi = __lookup_pg_pool(&map->pg_pools, pool);
6136     @@ -823,8 +831,11 @@ struct ceph_osdmap *osdmap_apply_incremental(void **p, void *end,
6137     if (err < 0)
6138     goto bad;
6139     }
6140     - if (version >= 5 && __decode_pool_names(p, end, map) < 0)
6141     - goto bad;
6142     + if (version >= 5) {
6143     + err = __decode_pool_names(p, end, map);
6144     + if (err < 0)
6145     + goto bad;
6146     + }
6147    
6148     /* old_pool */
6149     ceph_decode_32_safe(p, end, len, bad);
6150     @@ -900,15 +911,13 @@ struct ceph_osdmap *osdmap_apply_incremental(void **p, void *end,
6151     (void) __remove_pg_mapping(&map->pg_temp, pgid);
6152    
6153     /* insert */
6154     - if (pglen > (UINT_MAX - sizeof(*pg)) / sizeof(u32)) {
6155     - err = -EINVAL;
6156     + err = -EINVAL;
6157     + if (pglen > (UINT_MAX - sizeof(*pg)) / sizeof(u32))
6158     goto bad;
6159     - }
6160     + err = -ENOMEM;
6161     pg = kmalloc(sizeof(*pg) + sizeof(u32)*pglen, GFP_NOFS);
6162     - if (!pg) {
6163     - err = -ENOMEM;
6164     + if (!pg)
6165     goto bad;
6166     - }
6167     pg->pgid = pgid;
6168     pg->len = pglen;
6169     for (j = 0; j < pglen; j++)
6170     diff --git a/net/mac80211/ibss.c b/net/mac80211/ibss.c
6171     index 7c51bae..50191a3 100644
6172     --- a/net/mac80211/ibss.c
6173     +++ b/net/mac80211/ibss.c
6174     @@ -664,8 +664,8 @@ static void ieee80211_sta_merge_ibss(struct ieee80211_sub_if_data *sdata)
6175     printk(KERN_DEBUG "%s: No active IBSS STAs - trying to scan for other "
6176     "IBSS networks with same SSID (merge)\n", sdata->name);
6177    
6178     - ieee80211_request_internal_scan(sdata,
6179     - ifibss->ssid, ifibss->ssid_len, NULL);
6180     + ieee80211_request_ibss_scan(sdata, ifibss->ssid, ifibss->ssid_len,
6181     + NULL);
6182     }
6183    
6184     static void ieee80211_sta_create_ibss(struct ieee80211_sub_if_data *sdata)
6185     @@ -772,9 +772,8 @@ static void ieee80211_sta_find_ibss(struct ieee80211_sub_if_data *sdata)
6186     printk(KERN_DEBUG "%s: Trigger new scan to find an IBSS to "
6187     "join\n", sdata->name);
6188    
6189     - ieee80211_request_internal_scan(sdata,
6190     - ifibss->ssid, ifibss->ssid_len,
6191     - ifibss->fixed_channel ? ifibss->channel : NULL);
6192     + ieee80211_request_ibss_scan(sdata, ifibss->ssid,
6193     + ifibss->ssid_len, chan);
6194     } else {
6195     int interval = IEEE80211_SCAN_INTERVAL;
6196    
6197     diff --git a/net/mac80211/ieee80211_i.h b/net/mac80211/ieee80211_i.h
6198     index 498e87b..f8b5e75 100644
6199     --- a/net/mac80211/ieee80211_i.h
6200     +++ b/net/mac80211/ieee80211_i.h
6201     @@ -1233,9 +1233,9 @@ void ieee80211_mesh_rx_queued_mgmt(struct ieee80211_sub_if_data *sdata,
6202    
6203     /* scan/BSS handling */
6204     void ieee80211_scan_work(struct work_struct *work);
6205     -int ieee80211_request_internal_scan(struct ieee80211_sub_if_data *sdata,
6206     - const u8 *ssid, u8 ssid_len,
6207     - struct ieee80211_channel *chan);
6208     +int ieee80211_request_ibss_scan(struct ieee80211_sub_if_data *sdata,
6209     + const u8 *ssid, u8 ssid_len,
6210     + struct ieee80211_channel *chan);
6211     int ieee80211_request_scan(struct ieee80211_sub_if_data *sdata,
6212     struct cfg80211_scan_request *req);
6213     void ieee80211_scan_cancel(struct ieee80211_local *local);
6214     diff --git a/net/mac80211/scan.c b/net/mac80211/scan.c
6215     index c70e176..e95d494 100644
6216     --- a/net/mac80211/scan.c
6217     +++ b/net/mac80211/scan.c
6218     @@ -761,9 +761,9 @@ int ieee80211_request_scan(struct ieee80211_sub_if_data *sdata,
6219     return res;
6220     }
6221    
6222     -int ieee80211_request_internal_scan(struct ieee80211_sub_if_data *sdata,
6223     - const u8 *ssid, u8 ssid_len,
6224     - struct ieee80211_channel *chan)
6225     +int ieee80211_request_ibss_scan(struct ieee80211_sub_if_data *sdata,
6226     + const u8 *ssid, u8 ssid_len,
6227     + struct ieee80211_channel *chan)
6228     {
6229     struct ieee80211_local *local = sdata->local;
6230     int ret = -EBUSY;
6231     @@ -777,22 +777,36 @@ int ieee80211_request_internal_scan(struct ieee80211_sub_if_data *sdata,
6232    
6233     /* fill internal scan request */
6234     if (!chan) {
6235     - int i, nchan = 0;
6236     + int i, max_n;
6237     + int n_ch = 0;
6238    
6239     for (band = 0; band < IEEE80211_NUM_BANDS; band++) {
6240     if (!local->hw.wiphy->bands[band])
6241     continue;
6242     - for (i = 0;
6243     - i < local->hw.wiphy->bands[band]->n_channels;
6244     - i++) {
6245     - local->int_scan_req->channels[nchan] =
6246     +
6247     + max_n = local->hw.wiphy->bands[band]->n_channels;
6248     + for (i = 0; i < max_n; i++) {
6249     + struct ieee80211_channel *tmp_ch =
6250     &local->hw.wiphy->bands[band]->channels[i];
6251     - nchan++;
6252     +
6253     + if (tmp_ch->flags & (IEEE80211_CHAN_NO_IBSS |
6254     + IEEE80211_CHAN_DISABLED))
6255     + continue;
6256     +
6257     + local->int_scan_req->channels[n_ch] = tmp_ch;
6258     + n_ch++;
6259     }
6260     }
6261    
6262     - local->int_scan_req->n_channels = nchan;
6263     + if (WARN_ON_ONCE(n_ch == 0))
6264     + goto unlock;
6265     +
6266     + local->int_scan_req->n_channels = n_ch;
6267     } else {
6268     + if (WARN_ON_ONCE(chan->flags & (IEEE80211_CHAN_NO_IBSS |
6269     + IEEE80211_CHAN_DISABLED)))
6270     + goto unlock;
6271     +
6272     local->int_scan_req->channels[0] = chan;
6273     local->int_scan_req->n_channels = 1;
6274     }
6275     diff --git a/net/mac80211/sta_info.c b/net/mac80211/sta_info.c
6276     index 6d25d77..e2e0e0b 100644
6277     --- a/net/mac80211/sta_info.c
6278     +++ b/net/mac80211/sta_info.c
6279     @@ -844,7 +844,7 @@ void sta_info_init(struct ieee80211_local *local)
6280    
6281     void sta_info_stop(struct ieee80211_local *local)
6282     {
6283     - del_timer(&local->sta_cleanup);
6284     + del_timer_sync(&local->sta_cleanup);
6285     sta_info_flush(local, NULL);
6286     }
6287    
6288     diff --git a/net/sunrpc/clnt.c b/net/sunrpc/clnt.c
6289     index 57f2731..a28a211 100644
6290     --- a/net/sunrpc/clnt.c
6291     +++ b/net/sunrpc/clnt.c
6292     @@ -236,7 +236,7 @@ static struct rpc_clnt *rpc_get_client_for_event(struct net *net, int event)
6293     spin_lock(&sn->rpc_client_lock);
6294     list_for_each_entry(clnt, &sn->all_clients, cl_clients) {
6295     if (clnt->cl_program->pipe_dir_name == NULL)
6296     - break;
6297     + continue;
6298     if (rpc_clnt_skip_event(clnt, event))
6299     continue;
6300     if (atomic_inc_not_zero(&clnt->cl_count) == 0)
6301     diff --git a/net/sunrpc/rpc_pipe.c b/net/sunrpc/rpc_pipe.c
6302     index faa078f..b8bda44 100644
6303     --- a/net/sunrpc/rpc_pipe.c
6304     +++ b/net/sunrpc/rpc_pipe.c
6305     @@ -1157,14 +1157,19 @@ static void rpc_kill_sb(struct super_block *sb)
6306     struct sunrpc_net *sn = net_generic(net, sunrpc_net_id);
6307    
6308     mutex_lock(&sn->pipefs_sb_lock);
6309     + if (sn->pipefs_sb != sb) {
6310     + mutex_unlock(&sn->pipefs_sb_lock);
6311     + goto out;
6312     + }
6313     sn->pipefs_sb = NULL;
6314     mutex_unlock(&sn->pipefs_sb_lock);
6315     - put_net(net);
6316     dprintk("RPC: sending pipefs UMOUNT notification for net %p%s\n", net,
6317     NET_NAME(net));
6318     blocking_notifier_call_chain(&rpc_pipefs_notifier_list,
6319     RPC_PIPEFS_UMOUNT,
6320     sb);
6321     + put_net(net);
6322     +out:
6323     kill_litter_super(sb);
6324     }
6325    
6326     diff --git a/net/sunrpc/sched.c b/net/sunrpc/sched.c
6327     index eda32ae..85b9235 100644
6328     --- a/net/sunrpc/sched.c
6329     +++ b/net/sunrpc/sched.c
6330     @@ -915,16 +915,35 @@ struct rpc_task *rpc_new_task(const struct rpc_task_setup *setup_data)
6331     return task;
6332     }
6333    
6334     +/*
6335     + * rpc_free_task - release rpc task and perform cleanups
6336     + *
6337     + * Note that we free up the rpc_task _after_ rpc_release_calldata()
6338     + * in order to work around a workqueue dependency issue.
6339     + *
6340     + * Tejun Heo states:
6341     + * "Workqueue currently considers two work items to be the same if they're
6342     + * on the same address and won't execute them concurrently - ie. it
6343     + * makes a work item which is queued again while being executed wait
6344     + * for the previous execution to complete.
6345     + *
6346     + * If a work function frees the work item, and then waits for an event
6347     + * which should be performed by another work item and *that* work item
6348     + * recycles the freed work item, it can create a false dependency loop.
6349     + * There really is no reliable way to detect this short of verifying
6350     + * every memory free."
6351     + *
6352     + */
6353     static void rpc_free_task(struct rpc_task *task)
6354     {
6355     - const struct rpc_call_ops *tk_ops = task->tk_ops;
6356     - void *calldata = task->tk_calldata;
6357     + unsigned short tk_flags = task->tk_flags;
6358     +
6359     + rpc_release_calldata(task->tk_ops, task->tk_calldata);
6360    
6361     - if (task->tk_flags & RPC_TASK_DYNAMIC) {
6362     + if (tk_flags & RPC_TASK_DYNAMIC) {
6363     dprintk("RPC: %5u freeing task\n", task->tk_pid);
6364     mempool_free(task, rpc_task_mempool);
6365     }
6366     - rpc_release_calldata(tk_ops, calldata);
6367     }
6368    
6369     static void rpc_async_release(struct work_struct *work)
6370     @@ -934,8 +953,7 @@ static void rpc_async_release(struct work_struct *work)
6371    
6372     static void rpc_release_resources_task(struct rpc_task *task)
6373     {
6374     - if (task->tk_rqstp)
6375     - xprt_release(task);
6376     + xprt_release(task);
6377     if (task->tk_msg.rpc_cred) {
6378     put_rpccred(task->tk_msg.rpc_cred);
6379     task->tk_msg.rpc_cred = NULL;
6380     diff --git a/net/sunrpc/xprt.c b/net/sunrpc/xprt.c
6381     index 176a24f..feea474 100644
6382     --- a/net/sunrpc/xprt.c
6383     +++ b/net/sunrpc/xprt.c
6384     @@ -1139,10 +1139,18 @@ static void xprt_request_init(struct rpc_task *task, struct rpc_xprt *xprt)
6385     void xprt_release(struct rpc_task *task)
6386     {
6387     struct rpc_xprt *xprt;
6388     - struct rpc_rqst *req;
6389     + struct rpc_rqst *req = task->tk_rqstp;
6390    
6391     - if (!(req = task->tk_rqstp))
6392     + if (req == NULL) {
6393     + if (task->tk_client) {
6394     + rcu_read_lock();
6395     + xprt = rcu_dereference(task->tk_client->cl_xprt);
6396     + if (xprt->snd_task == task)
6397     + xprt_release_write(xprt, task);
6398     + rcu_read_unlock();
6399     + }
6400     return;
6401     + }
6402    
6403     xprt = req->rq_xprt;
6404     if (task->tk_ops->rpc_count_stats != NULL)
6405     diff --git a/sound/arm/pxa2xx-ac97-lib.c b/sound/arm/pxa2xx-ac97-lib.c
6406     index 48d7c0a..bd3ba88 100644
6407     --- a/sound/arm/pxa2xx-ac97-lib.c
6408     +++ b/sound/arm/pxa2xx-ac97-lib.c
6409     @@ -18,6 +18,7 @@
6410     #include <linux/delay.h>
6411     #include <linux/module.h>
6412     #include <linux/io.h>
6413     +#include <linux/gpio.h>
6414    
6415     #include <sound/ac97_codec.h>
6416     #include <sound/pxa2xx-lib.h>
6417     @@ -148,6 +149,8 @@ static inline void pxa_ac97_warm_pxa27x(void)
6418    
6419     static inline void pxa_ac97_cold_pxa27x(void)
6420     {
6421     + unsigned int timeout;
6422     +
6423     GCR &= GCR_COLD_RST; /* clear everything but nCRST */
6424     GCR &= ~GCR_COLD_RST; /* then assert nCRST */
6425    
6426     @@ -157,8 +160,10 @@ static inline void pxa_ac97_cold_pxa27x(void)
6427     clk_enable(ac97conf_clk);
6428     udelay(5);
6429     clk_disable(ac97conf_clk);
6430     - GCR = GCR_COLD_RST;
6431     - udelay(50);
6432     + GCR = GCR_COLD_RST | GCR_WARM_RST;
6433     + timeout = 100; /* wait for the codec-ready bit to be set */
6434     + while (!((GSR | gsr_bits) & (GSR_PCR | GSR_SCR)) && timeout--)
6435     + mdelay(1);
6436     }
6437     #endif
6438    
6439     @@ -340,8 +345,21 @@ int __devinit pxa2xx_ac97_hw_probe(struct platform_device *dev)
6440     }
6441    
6442     if (cpu_is_pxa27x()) {
6443     - /* Use GPIO 113 as AC97 Reset on Bulverde */
6444     + /*
6445     + * This gpio is needed for a work-around to a bug in the ac97
6446     + * controller during warm reset. The direction and level is set
6447     + * here so that it is an output driven high when switching from
6448     + * AC97_nRESET alt function to generic gpio.
6449     + */
6450     + ret = gpio_request_one(reset_gpio, GPIOF_OUT_INIT_HIGH,
6451     + "pxa27x ac97 reset");
6452     + if (ret < 0) {
6453     + pr_err("%s: gpio_request_one() failed: %d\n",
6454     + __func__, ret);
6455     + goto err_conf;
6456     + }
6457     pxa27x_assert_ac97reset(reset_gpio, 0);
6458     +
6459     ac97conf_clk = clk_get(&dev->dev, "AC97CONFCLK");
6460     if (IS_ERR(ac97conf_clk)) {
6461     ret = PTR_ERR(ac97conf_clk);
6462     @@ -384,6 +402,8 @@ EXPORT_SYMBOL_GPL(pxa2xx_ac97_hw_probe);
6463    
6464     void pxa2xx_ac97_hw_remove(struct platform_device *dev)
6465     {
6466     + if (cpu_is_pxa27x())
6467     + gpio_free(reset_gpio);
6468     GCR |= GCR_ACLINK_OFF;
6469     free_irq(IRQ_AC97, NULL);
6470     if (ac97conf_clk) {
6471     diff --git a/sound/soc/codecs/sigmadsp.c b/sound/soc/codecs/sigmadsp.c
6472     index 5be42bf..4068f24 100644
6473     --- a/sound/soc/codecs/sigmadsp.c
6474     +++ b/sound/soc/codecs/sigmadsp.c
6475     @@ -225,7 +225,7 @@ EXPORT_SYMBOL(process_sigma_firmware);
6476     static int sigma_action_write_regmap(void *control_data,
6477     const struct sigma_action *sa, size_t len)
6478     {
6479     - return regmap_raw_write(control_data, le16_to_cpu(sa->addr),
6480     + return regmap_raw_write(control_data, be16_to_cpu(sa->addr),
6481     sa->payload, len - 2);
6482     }
6483    
6484     diff --git a/sound/soc/codecs/wm2000.c b/sound/soc/codecs/wm2000.c
6485     index ae6f26f..bb9f070 100644
6486     --- a/sound/soc/codecs/wm2000.c
6487     +++ b/sound/soc/codecs/wm2000.c
6488     @@ -190,9 +190,9 @@ static int wm2000_power_up(struct i2c_client *i2c, int analogue)
6489    
6490     ret = wm2000_read(i2c, WM2000_REG_SPEECH_CLARITY);
6491     if (wm2000->speech_clarity)
6492     - ret &= ~WM2000_SPEECH_CLARITY;
6493     - else
6494     ret |= WM2000_SPEECH_CLARITY;
6495     + else
6496     + ret &= ~WM2000_SPEECH_CLARITY;
6497     wm2000_write(i2c, WM2000_REG_SPEECH_CLARITY, ret);
6498    
6499     wm2000_write(i2c, WM2000_REG_SYS_START0, 0x33);
6500     diff --git a/sound/soc/codecs/wm2200.c b/sound/soc/codecs/wm2200.c
6501     index c8bff6d..86b84a1 100644
6502     --- a/sound/soc/codecs/wm2200.c
6503     +++ b/sound/soc/codecs/wm2200.c
6504     @@ -1380,15 +1380,9 @@ static int wm2200_set_fmt(struct snd_soc_dai *dai, unsigned int fmt)
6505     case SND_SOC_DAIFMT_DSP_A:
6506     fmt_val = 0;
6507     break;
6508     - case SND_SOC_DAIFMT_DSP_B:
6509     - fmt_val = 1;
6510     - break;
6511     case SND_SOC_DAIFMT_I2S:
6512     fmt_val = 2;
6513     break;
6514     - case SND_SOC_DAIFMT_LEFT_J:
6515     - fmt_val = 3;
6516     - break;
6517     default:
6518     dev_err(codec->dev, "Unsupported DAI format %d\n",
6519     fmt & SND_SOC_DAIFMT_FORMAT_MASK);
6520     @@ -1440,7 +1434,7 @@ static int wm2200_set_fmt(struct snd_soc_dai *dai, unsigned int fmt)
6521     WM2200_AIF1TX_LRCLK_MSTR | WM2200_AIF1TX_LRCLK_INV,
6522     lrclk);
6523     snd_soc_update_bits(codec, WM2200_AUDIO_IF_1_5,
6524     - WM2200_AIF1_FMT_MASK << 1, fmt_val << 1);
6525     + WM2200_AIF1_FMT_MASK, fmt_val);
6526    
6527     return 0;
6528     }
6529     diff --git a/sound/soc/codecs/wm5100.c b/sound/soc/codecs/wm5100.c
6530     index b9c185c..a8d03ab 100644
6531     --- a/sound/soc/codecs/wm5100.c
6532     +++ b/sound/soc/codecs/wm5100.c
6533     @@ -1296,15 +1296,9 @@ static int wm5100_set_fmt(struct snd_soc_dai *dai, unsigned int fmt)
6534     case SND_SOC_DAIFMT_DSP_A:
6535     mask = 0;
6536     break;
6537     - case SND_SOC_DAIFMT_DSP_B:
6538     - mask = 1;
6539     - break;
6540     case SND_SOC_DAIFMT_I2S:
6541     mask = 2;
6542     break;
6543     - case SND_SOC_DAIFMT_LEFT_J:
6544     - mask = 3;
6545     - break;
6546     default:
6547     dev_err(codec->dev, "Unsupported DAI format %d\n",
6548     fmt & SND_SOC_DAIFMT_FORMAT_MASK);
6549     diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c
6550     index 9739b53..71b9036 100644
6551     --- a/virt/kvm/kvm_main.c
6552     +++ b/virt/kvm/kvm_main.c
6553     @@ -693,8 +693,7 @@ int __kvm_set_memory_region(struct kvm *kvm,
6554     int r;
6555     gfn_t base_gfn;
6556     unsigned long npages;
6557     - unsigned long i;
6558     - struct kvm_memory_slot *memslot;
6559     + struct kvm_memory_slot *memslot, *slot;
6560     struct kvm_memory_slot old, new;
6561     struct kvm_memslots *slots, *old_memslots;
6562    
6563     @@ -741,13 +740,11 @@ int __kvm_set_memory_region(struct kvm *kvm,
6564    
6565     /* Check for overlaps */
6566     r = -EEXIST;
6567     - for (i = 0; i < KVM_MEMORY_SLOTS; ++i) {
6568     - struct kvm_memory_slot *s = &kvm->memslots->memslots[i];
6569     -
6570     - if (s == memslot || !s->npages)
6571     + kvm_for_each_memslot(slot, kvm->memslots) {
6572     + if (slot->id >= KVM_MEMORY_SLOTS || slot == memslot)
6573     continue;
6574     - if (!((base_gfn + npages <= s->base_gfn) ||
6575     - (base_gfn >= s->base_gfn + s->npages)))
6576     + if (!((base_gfn + npages <= slot->base_gfn) ||
6577     + (base_gfn >= slot->base_gfn + slot->npages)))
6578     goto out_free;
6579     }
6580