Magellan Linux

Annotation of /trunk/kernel26-magellan/patches-2.6.25-r5/0113-2.6.25.14-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 677 - (hide annotations) (download)
Wed Sep 10 21:27:27 2008 UTC (15 years, 8 months ago) by niro
File size: 30765 byte(s)
2.6.25-magellan-r5:
- updated to linux-2.6.25.17

1 niro 677 diff --git a/Makefile b/Makefile
2     index dfc5a88..4c589b6 100644
3     --- a/Makefile
4     +++ b/Makefile
5     @@ -1126,7 +1126,8 @@ clean: archclean $(clean-dirs)
6     @find . $(RCS_FIND_IGNORE) \
7     \( -name '*.[oas]' -o -name '*.ko' -o -name '.*.cmd' \
8     -o -name '.*.d' -o -name '.*.tmp' -o -name '*.mod.c' \
9     - -o -name '*.symtypes' -o -name 'modules.order' \) \
10     + -o -name '*.symtypes' -o -name 'modules.order' \
11     + -o -name 'Module.markers' \) \
12     -type f -print | xargs rm -f
13    
14     # mrproper - Delete all generated files, including .config
15     diff --git a/arch/powerpc/platforms/cell/cbe_cpufreq_pmi.c b/arch/powerpc/platforms/cell/cbe_cpufreq_pmi.c
16     index 69288f6..3233fe8 100644
17     --- a/arch/powerpc/platforms/cell/cbe_cpufreq_pmi.c
18     +++ b/arch/powerpc/platforms/cell/cbe_cpufreq_pmi.c
19     @@ -96,6 +96,12 @@ static int pmi_notifier(struct notifier_block *nb,
20     struct cpufreq_frequency_table *cbe_freqs;
21     u8 node;
22    
23     + /* Should this really be called for CPUFREQ_ADJUST, CPUFREQ_INCOMPATIBLE
24     + * and CPUFREQ_NOTIFY policy events?)
25     + */
26     + if (event == CPUFREQ_START)
27     + return 0;
28     +
29     cbe_freqs = cpufreq_frequency_get_table(policy->cpu);
30     node = cbe_cpu_to_node(policy->cpu);
31    
32     diff --git a/arch/sparc64/kernel/irq.c b/arch/sparc64/kernel/irq.c
33     index b441a26..c481673 100644
34     --- a/arch/sparc64/kernel/irq.c
35     +++ b/arch/sparc64/kernel/irq.c
36     @@ -621,8 +621,9 @@ unsigned int sun4v_build_irq(u32 devhandle, unsigned int devino)
37     unsigned int sun4v_build_virq(u32 devhandle, unsigned int devino)
38     {
39     struct irq_handler_data *data;
40     - struct ino_bucket *bucket;
41     unsigned long hv_err, cookie;
42     + struct ino_bucket *bucket;
43     + struct irq_desc *desc;
44     unsigned int virt_irq;
45    
46     bucket = kzalloc(sizeof(struct ino_bucket), GFP_ATOMIC);
47     @@ -643,6 +644,13 @@ unsigned int sun4v_build_virq(u32 devhandle, unsigned int devino)
48     if (unlikely(!data))
49     return 0;
50    
51     + /* In order to make the LDC channel startup sequence easier,
52     + * especially wrt. locking, we do not let request_irq() enable
53     + * the interrupt.
54     + */
55     + desc = irq_desc + virt_irq;
56     + desc->status |= IRQ_NOAUTOEN;
57     +
58     set_irq_chip_data(virt_irq, data);
59    
60     /* Catch accidental accesses to these things. IMAP/ICLR handling
61     diff --git a/arch/sparc64/kernel/ldc.c b/arch/sparc64/kernel/ldc.c
62     index 63969f6..d689823 100644
63     --- a/arch/sparc64/kernel/ldc.c
64     +++ b/arch/sparc64/kernel/ldc.c
65     @@ -1,6 +1,6 @@
66     /* ldc.c: Logical Domain Channel link-layer protocol driver.
67     *
68     - * Copyright (C) 2007 David S. Miller <davem@davemloft.net>
69     + * Copyright (C) 2007, 2008 David S. Miller <davem@davemloft.net>
70     */
71    
72     #include <linux/kernel.h>
73     @@ -23,8 +23,8 @@
74    
75     #define DRV_MODULE_NAME "ldc"
76     #define PFX DRV_MODULE_NAME ": "
77     -#define DRV_MODULE_VERSION "1.0"
78     -#define DRV_MODULE_RELDATE "June 25, 2007"
79     +#define DRV_MODULE_VERSION "1.1"
80     +#define DRV_MODULE_RELDATE "July 22, 2008"
81    
82     static char version[] __devinitdata =
83     DRV_MODULE_NAME ".c:v" DRV_MODULE_VERSION " (" DRV_MODULE_RELDATE ")\n";
84     @@ -1235,13 +1235,9 @@ int ldc_bind(struct ldc_channel *lp, const char *name)
85     unsigned long hv_err, flags;
86     int err = -EINVAL;
87    
88     - spin_lock_irqsave(&lp->lock, flags);
89     -
90     - if (!name)
91     - goto out_err;
92     -
93     - if (lp->state != LDC_STATE_INIT)
94     - goto out_err;
95     + if (!name ||
96     + (lp->state != LDC_STATE_INIT))
97     + return -EINVAL;
98    
99     snprintf(lp->rx_irq_name, LDC_IRQ_NAME_MAX, "%s RX", name);
100     snprintf(lp->tx_irq_name, LDC_IRQ_NAME_MAX, "%s TX", name);
101     @@ -1250,25 +1246,32 @@ int ldc_bind(struct ldc_channel *lp, const char *name)
102     IRQF_SAMPLE_RANDOM | IRQF_SHARED,
103     lp->rx_irq_name, lp);
104     if (err)
105     - goto out_err;
106     + return err;
107    
108     err = request_irq(lp->cfg.tx_irq, ldc_tx,
109     IRQF_SAMPLE_RANDOM | IRQF_SHARED,
110     lp->tx_irq_name, lp);
111     - if (err)
112     - goto out_free_rx_irq;
113     + if (err) {
114     + free_irq(lp->cfg.rx_irq, lp);
115     + return err;
116     + }
117     +
118    
119     + spin_lock_irqsave(&lp->lock, flags);
120     +
121     + enable_irq(lp->cfg.rx_irq);
122     + enable_irq(lp->cfg.tx_irq);
123    
124     lp->flags |= LDC_FLAG_REGISTERED_IRQS;
125    
126     err = -ENODEV;
127     hv_err = sun4v_ldc_tx_qconf(lp->id, 0, 0);
128     if (hv_err)
129     - goto out_free_tx_irq;
130     + goto out_free_irqs;
131    
132     hv_err = sun4v_ldc_tx_qconf(lp->id, lp->tx_ra, lp->tx_num_entries);
133     if (hv_err)
134     - goto out_free_tx_irq;
135     + goto out_free_irqs;
136    
137     hv_err = sun4v_ldc_rx_qconf(lp->id, 0, 0);
138     if (hv_err)
139     @@ -1304,14 +1307,11 @@ out_unmap_rx:
140     out_unmap_tx:
141     sun4v_ldc_tx_qconf(lp->id, 0, 0);
142    
143     -out_free_tx_irq:
144     +out_free_irqs:
145     lp->flags &= ~LDC_FLAG_REGISTERED_IRQS;
146     free_irq(lp->cfg.tx_irq, lp);
147     -
148     -out_free_rx_irq:
149     free_irq(lp->cfg.rx_irq, lp);
150    
151     -out_err:
152     spin_unlock_irqrestore(&lp->lock, flags);
153    
154     return err;
155     diff --git a/arch/sparc64/kernel/time.c b/arch/sparc64/kernel/time.c
156     index e5d2389..f464023 100644
157     --- a/arch/sparc64/kernel/time.c
158     +++ b/arch/sparc64/kernel/time.c
159     @@ -883,6 +883,16 @@ static struct notifier_block sparc64_cpufreq_notifier_block = {
160     .notifier_call = sparc64_cpufreq_notifier
161     };
162    
163     +static int __init register_sparc64_cpufreq_notifier(void)
164     +{
165     +
166     + cpufreq_register_notifier(&sparc64_cpufreq_notifier_block,
167     + CPUFREQ_TRANSITION_NOTIFIER);
168     + return 0;
169     +}
170     +
171     +core_initcall(register_sparc64_cpufreq_notifier);
172     +
173     #endif /* CONFIG_CPU_FREQ */
174    
175     static int sparc64_next_event(unsigned long delta,
176     @@ -1049,11 +1059,6 @@ void __init time_init(void)
177     sparc64_clockevent.mult, sparc64_clockevent.shift);
178    
179     setup_sparc64_timer();
180     -
181     -#ifdef CONFIG_CPU_FREQ
182     - cpufreq_register_notifier(&sparc64_cpufreq_notifier_block,
183     - CPUFREQ_TRANSITION_NOTIFIER);
184     -#endif
185     }
186    
187     unsigned long long sched_clock(void)
188     diff --git a/arch/x86/Kconfig.cpu b/arch/x86/Kconfig.cpu
189     index 9304bfb..c308d61 100644
190     --- a/arch/x86/Kconfig.cpu
191     +++ b/arch/x86/Kconfig.cpu
192     @@ -409,4 +409,4 @@ config X86_MINIMUM_CPU_FAMILY
193    
194     config X86_DEBUGCTLMSR
195     def_bool y
196     - depends on !(M586MMX || M586TSC || M586 || M486 || M386)
197     + depends on !(MK6 || MWINCHIPC6 || MWINCHIP2 || MWINCHIP3D || MCYRIXIII || M586MMX || M586TSC || M586 || M486 || M386)
198     diff --git a/arch/x86/mm/init_64.c b/arch/x86/mm/init_64.c
199     index b2c5231..8e47740 100644
200     --- a/arch/x86/mm/init_64.c
201     +++ b/arch/x86/mm/init_64.c
202     @@ -427,7 +427,7 @@ void __init_refok init_memory_mapping(unsigned long start, unsigned long end)
203     else
204     pud = alloc_low_page(&pud_phys);
205    
206     - next = start + PGDIR_SIZE;
207     + next = (start + PGDIR_SIZE) & PGDIR_MASK;
208     if (next > end)
209     next = end;
210     phys_pud_init(pud, __pa(start), __pa(next));
211     diff --git a/drivers/acpi/processor_perflib.c b/drivers/acpi/processor_perflib.c
212     index b477a4b..42fb635 100644
213     --- a/drivers/acpi/processor_perflib.c
214     +++ b/drivers/acpi/processor_perflib.c
215     @@ -64,7 +64,13 @@ static DEFINE_MUTEX(performance_mutex);
216     * policy is adjusted accordingly.
217     */
218    
219     -static unsigned int ignore_ppc = 0;
220     +/* ignore_ppc:
221     + * -1 -> cpufreq low level drivers not initialized -> _PSS, etc. not called yet
222     + * ignore _PPC
223     + * 0 -> cpufreq low level drivers initialized -> consider _PPC values
224     + * 1 -> ignore _PPC totally -> forced by user through boot param
225     + */
226     +static unsigned int ignore_ppc = -1;
227     module_param(ignore_ppc, uint, 0644);
228     MODULE_PARM_DESC(ignore_ppc, "If the frequency of your machine gets wrongly" \
229     "limited by BIOS, this should help");
230     @@ -72,7 +78,7 @@ MODULE_PARM_DESC(ignore_ppc, "If the frequency of your machine gets wrongly" \
231     #define PPC_REGISTERED 1
232     #define PPC_IN_USE 2
233    
234     -static int acpi_processor_ppc_status = 0;
235     +static int acpi_processor_ppc_status;
236    
237     static int acpi_processor_ppc_notifier(struct notifier_block *nb,
238     unsigned long event, void *data)
239     @@ -81,6 +87,11 @@ static int acpi_processor_ppc_notifier(struct notifier_block *nb,
240     struct acpi_processor *pr;
241     unsigned int ppc = 0;
242    
243     + if (event == CPUFREQ_START && ignore_ppc <= 0) {
244     + ignore_ppc = 0;
245     + return 0;
246     + }
247     +
248     if (ignore_ppc)
249     return 0;
250    
251     diff --git a/drivers/ata/ahci.c b/drivers/ata/ahci.c
252     index b1eb4e2..d630502 100644
253     --- a/drivers/ata/ahci.c
254     +++ b/drivers/ata/ahci.c
255     @@ -634,16 +634,27 @@ static inline void __iomem *ahci_port_base(struct ata_port *ap)
256    
257     static void ahci_enable_ahci(void __iomem *mmio)
258     {
259     + int i;
260     u32 tmp;
261    
262     /* turn on AHCI_EN */
263     tmp = readl(mmio + HOST_CTL);
264     - if (!(tmp & HOST_AHCI_EN)) {
265     + if (tmp & HOST_AHCI_EN)
266     + return;
267     +
268     + /* Some controllers need AHCI_EN to be written multiple times.
269     + * Try a few times before giving up.
270     + */
271     + for (i = 0; i < 5; i++) {
272     tmp |= HOST_AHCI_EN;
273     writel(tmp, mmio + HOST_CTL);
274     tmp = readl(mmio + HOST_CTL); /* flush && sanity check */
275     - WARN_ON(!(tmp & HOST_AHCI_EN));
276     + if (tmp & HOST_AHCI_EN)
277     + return;
278     + msleep(10);
279     }
280     +
281     + WARN_ON(1);
282     }
283    
284     /**
285     diff --git a/drivers/ata/ata_generic.c b/drivers/ata/ata_generic.c
286     index 2053420..a3ede49 100644
287     --- a/drivers/ata/ata_generic.c
288     +++ b/drivers/ata/ata_generic.c
289     @@ -193,6 +193,12 @@ static int ata_generic_init_one(struct pci_dev *dev, const struct pci_device_id
290     if (dev->vendor == PCI_VENDOR_ID_AL)
291     ata_pci_clear_simplex(dev);
292    
293     + if (dev->vendor == PCI_VENDOR_ID_ATI) {
294     + int rc = pcim_enable_device(dev);
295     + if (rc < 0)
296     + return rc;
297     + pcim_pin_device(dev);
298     + }
299     return ata_pci_init_one(dev, ppi);
300     }
301    
302     diff --git a/drivers/ata/pata_acpi.c b/drivers/ata/pata_acpi.c
303     index bdc3b9d..ea354a5 100644
304     --- a/drivers/ata/pata_acpi.c
305     +++ b/drivers/ata/pata_acpi.c
306     @@ -314,6 +314,12 @@ static int pacpi_init_one (struct pci_dev *pdev, const struct pci_device_id *id)
307     .port_ops = &pacpi_ops,
308     };
309     const struct ata_port_info *ppi[] = { &info, NULL };
310     + if (pdev->vendor == PCI_VENDOR_ID_ATI) {
311     + int rc = pcim_enable_device(pdev);
312     + if (rc < 0)
313     + return rc;
314     + pcim_pin_device(pdev);
315     + }
316     return ata_pci_init_one(pdev, ppi);
317     }
318    
319     diff --git a/drivers/cpufreq/cpufreq.c b/drivers/cpufreq/cpufreq.c
320     index ebd68c1..e91bf79 100644
321     --- a/drivers/cpufreq/cpufreq.c
322     +++ b/drivers/cpufreq/cpufreq.c
323     @@ -806,6 +806,9 @@ static int cpufreq_add_dev (struct sys_device * sys_dev)
324     policy->user_policy.min = policy->cpuinfo.min_freq;
325     policy->user_policy.max = policy->cpuinfo.max_freq;
326    
327     + blocking_notifier_call_chain(&cpufreq_policy_notifier_list,
328     + CPUFREQ_START, policy);
329     +
330     #ifdef CONFIG_SMP
331    
332     #ifdef CONFIG_HOTPLUG_CPU
333     diff --git a/drivers/ide/ide-cd.c b/drivers/ide/ide-cd.c
334     index c8d0e87..e54da02 100644
335     --- a/drivers/ide/ide-cd.c
336     +++ b/drivers/ide/ide-cd.c
337     @@ -1421,13 +1421,30 @@ static int cdrom_read_capacity(ide_drive_t *drive, unsigned long *capacity,
338     req.cmd_flags |= REQ_QUIET;
339    
340     stat = ide_cd_queue_pc(drive, &req);
341     - if (stat == 0) {
342     - *capacity = 1 + be32_to_cpu(capbuf.lba);
343     - *sectors_per_frame =
344     - be32_to_cpu(capbuf.blocklen) >> SECTOR_BITS;
345     + if (stat)
346     + return stat;
347     +
348     + /*
349     + * Sanity check the given block size
350     + */
351     + switch (capbuf.blocklen) {
352     + case __constant_cpu_to_be32(512):
353     + case __constant_cpu_to_be32(1024):
354     + case __constant_cpu_to_be32(2048):
355     + case __constant_cpu_to_be32(4096):
356     + break;
357     + default:
358     + printk(KERN_ERR "%s: weird block size %u\n",
359     + drive->name, capbuf.blocklen);
360     + printk(KERN_ERR "%s: default to 2kb block size\n",
361     + drive->name);
362     + capbuf.blocklen = __constant_cpu_to_be32(2048);
363     + break;
364     }
365    
366     - return stat;
367     + *capacity = 1 + be32_to_cpu(capbuf.lba);
368     + *sectors_per_frame = be32_to_cpu(capbuf.blocklen) >> SECTOR_BITS;
369     + return 0;
370     }
371    
372     static int cdrom_read_tocentry(ide_drive_t *drive, int trackno, int msf_flag,
373     diff --git a/drivers/net/ixgbe/ixgbe_main.c b/drivers/net/ixgbe/ixgbe_main.c
374     index c2095ce..0094af2 100644
375     --- a/drivers/net/ixgbe/ixgbe_main.c
376     +++ b/drivers/net/ixgbe/ixgbe_main.c
377     @@ -70,8 +70,6 @@ static struct pci_device_id ixgbe_pci_tbl[] = {
378     board_82598 },
379     {PCI_VDEVICE(INTEL, IXGBE_DEV_ID_82598AF_SINGLE_PORT),
380     board_82598 },
381     - {PCI_VDEVICE(INTEL, IXGBE_DEV_ID_82598AT_DUAL_PORT),
382     - board_82598 },
383     {PCI_VDEVICE(INTEL, IXGBE_DEV_ID_82598EB_CX4),
384     board_82598 },
385    
386     diff --git a/drivers/net/wireless/ath5k/base.c b/drivers/net/wireless/ath5k/base.c
387     index bef967c..c3ded21 100644
388     --- a/drivers/net/wireless/ath5k/base.c
389     +++ b/drivers/net/wireless/ath5k/base.c
390     @@ -484,9 +484,6 @@ ath5k_pci_probe(struct pci_dev *pdev,
391     /* Set private data */
392     pci_set_drvdata(pdev, hw);
393    
394     - /* Enable msi for devices that support it */
395     - pci_enable_msi(pdev);
396     -
397     /* Setup interrupt handler */
398     ret = request_irq(pdev->irq, ath5k_intr, IRQF_SHARED, "ath", sc);
399     if (ret) {
400     @@ -553,7 +550,6 @@ err_ah:
401     err_irq:
402     free_irq(pdev->irq, sc);
403     err_free:
404     - pci_disable_msi(pdev);
405     ieee80211_free_hw(hw);
406     err_map:
407     pci_iounmap(pdev, mem);
408     @@ -575,7 +571,6 @@ ath5k_pci_remove(struct pci_dev *pdev)
409     ath5k_detach(pdev, hw);
410     ath5k_hw_detach(sc->ah);
411     free_irq(pdev->irq, sc);
412     - pci_disable_msi(pdev);
413     pci_iounmap(pdev, sc->iobase);
414     pci_release_region(pdev, 0);
415     pci_disable_device(pdev);
416     diff --git a/drivers/net/wireless/b43legacy/main.c b/drivers/net/wireless/b43legacy/main.c
417     index 531aeb2..572436c 100644
418     --- a/drivers/net/wireless/b43legacy/main.c
419     +++ b/drivers/net/wireless/b43legacy/main.c
420     @@ -3792,10 +3792,10 @@ static int b43legacy_resume(struct ssb_device *dev)
421     goto out;
422     }
423     }
424     - mutex_unlock(&wl->mutex);
425    
426     b43legacydbg(wl, "Device resumed.\n");
427     out:
428     + mutex_unlock(&wl->mutex);
429     return err;
430     }
431    
432     diff --git a/drivers/spi/mpc52xx_psc_spi.c b/drivers/spi/mpc52xx_psc_spi.c
433     index 9072946..f200661 100644
434     --- a/drivers/spi/mpc52xx_psc_spi.c
435     +++ b/drivers/spi/mpc52xx_psc_spi.c
436     @@ -148,7 +148,6 @@ static int mpc52xx_psc_spi_transfer_rxtx(struct spi_device *spi,
437     unsigned rfalarm;
438     unsigned send_at_once = MPC52xx_PSC_BUFSIZE;
439     unsigned recv_at_once;
440     - unsigned bpw = mps->bits_per_word / 8;
441    
442     if (!t->tx_buf && !t->rx_buf && t->len)
443     return -EINVAL;
444     @@ -164,22 +163,15 @@ static int mpc52xx_psc_spi_transfer_rxtx(struct spi_device *spi,
445     }
446    
447     dev_dbg(&spi->dev, "send %d bytes...\n", send_at_once);
448     - if (tx_buf) {
449     - for (; send_at_once; sb++, send_at_once--) {
450     - /* set EOF flag */
451     - if (mps->bits_per_word
452     - && (sb + 1) % bpw == 0)
453     - out_8(&psc->ircr2, 0x01);
454     + for (; send_at_once; sb++, send_at_once--) {
455     + /* set EOF flag before the last word is sent */
456     + if (send_at_once == 1)
457     + out_8(&psc->ircr2, 0x01);
458     +
459     + if (tx_buf)
460     out_8(&psc->mpc52xx_psc_buffer_8, tx_buf[sb]);
461     - }
462     - } else {
463     - for (; send_at_once; sb++, send_at_once--) {
464     - /* set EOF flag */
465     - if (mps->bits_per_word
466     - && ((sb + 1) % bpw) == 0)
467     - out_8(&psc->ircr2, 0x01);
468     + else
469     out_8(&psc->mpc52xx_psc_buffer_8, 0);
470     - }
471     }
472    
473    
474     diff --git a/fs/dquot.c b/fs/dquot.c
475     index 41b9dbd..d93f99b 100644
476     --- a/fs/dquot.c
477     +++ b/fs/dquot.c
478     @@ -554,6 +554,8 @@ static struct shrinker dqcache_shrinker = {
479     */
480     static void dqput(struct dquot *dquot)
481     {
482     + int ret;
483     +
484     if (!dquot)
485     return;
486     #ifdef __DQUOT_PARANOIA
487     @@ -586,7 +588,19 @@ we_slept:
488     if (test_bit(DQ_ACTIVE_B, &dquot->dq_flags) && dquot_dirty(dquot)) {
489     spin_unlock(&dq_list_lock);
490     /* Commit dquot before releasing */
491     - dquot->dq_sb->dq_op->write_dquot(dquot);
492     + ret = dquot->dq_sb->dq_op->write_dquot(dquot);
493     + if (ret < 0) {
494     + printk(KERN_ERR "VFS: cannot write quota structure on "
495     + "device %s (error %d). Quota may get out of "
496     + "sync!\n", dquot->dq_sb->s_id, ret);
497     + /*
498     + * We clear dirty bit anyway, so that we avoid
499     + * infinite loop here
500     + */
501     + spin_lock(&dq_list_lock);
502     + clear_dquot_dirty(dquot);
503     + spin_unlock(&dq_list_lock);
504     + }
505     goto we_slept;
506     }
507     /* Clear flag in case dquot was inactive (something bad happened) */
508     diff --git a/fs/ecryptfs/crypto.c b/fs/ecryptfs/crypto.c
509     index 086b312..f144834 100644
510     --- a/fs/ecryptfs/crypto.c
511     +++ b/fs/ecryptfs/crypto.c
512     @@ -474,8 +474,8 @@ int ecryptfs_encrypt_page(struct page *page)
513     {
514     struct inode *ecryptfs_inode;
515     struct ecryptfs_crypt_stat *crypt_stat;
516     - char *enc_extent_virt = NULL;
517     - struct page *enc_extent_page;
518     + char *enc_extent_virt;
519     + struct page *enc_extent_page = NULL;
520     loff_t extent_offset;
521     int rc = 0;
522    
523     @@ -491,14 +491,14 @@ int ecryptfs_encrypt_page(struct page *page)
524     page->index);
525     goto out;
526     }
527     - enc_extent_virt = kmalloc(PAGE_CACHE_SIZE, GFP_USER);
528     - if (!enc_extent_virt) {
529     + enc_extent_page = alloc_page(GFP_USER);
530     + if (!enc_extent_page) {
531     rc = -ENOMEM;
532     ecryptfs_printk(KERN_ERR, "Error allocating memory for "
533     "encrypted extent\n");
534     goto out;
535     }
536     - enc_extent_page = virt_to_page(enc_extent_virt);
537     + enc_extent_virt = kmap(enc_extent_page);
538     for (extent_offset = 0;
539     extent_offset < (PAGE_CACHE_SIZE / crypt_stat->extent_size);
540     extent_offset++) {
541     @@ -526,7 +526,10 @@ int ecryptfs_encrypt_page(struct page *page)
542     }
543     }
544     out:
545     - kfree(enc_extent_virt);
546     + if (enc_extent_page) {
547     + kunmap(enc_extent_page);
548     + __free_page(enc_extent_page);
549     + }
550     return rc;
551     }
552    
553     @@ -608,8 +611,8 @@ int ecryptfs_decrypt_page(struct page *page)
554     {
555     struct inode *ecryptfs_inode;
556     struct ecryptfs_crypt_stat *crypt_stat;
557     - char *enc_extent_virt = NULL;
558     - struct page *enc_extent_page;
559     + char *enc_extent_virt;
560     + struct page *enc_extent_page = NULL;
561     unsigned long extent_offset;
562     int rc = 0;
563    
564     @@ -626,14 +629,14 @@ int ecryptfs_decrypt_page(struct page *page)
565     page->index);
566     goto out;
567     }
568     - enc_extent_virt = kmalloc(PAGE_CACHE_SIZE, GFP_USER);
569     - if (!enc_extent_virt) {
570     + enc_extent_page = alloc_page(GFP_USER);
571     + if (!enc_extent_page) {
572     rc = -ENOMEM;
573     ecryptfs_printk(KERN_ERR, "Error allocating memory for "
574     "encrypted extent\n");
575     goto out;
576     }
577     - enc_extent_page = virt_to_page(enc_extent_virt);
578     + enc_extent_virt = kmap(enc_extent_page);
579     for (extent_offset = 0;
580     extent_offset < (PAGE_CACHE_SIZE / crypt_stat->extent_size);
581     extent_offset++) {
582     @@ -661,7 +664,10 @@ int ecryptfs_decrypt_page(struct page *page)
583     }
584     }
585     out:
586     - kfree(enc_extent_virt);
587     + if (enc_extent_page) {
588     + kunmap(enc_extent_page);
589     + __free_page(enc_extent_page);
590     + }
591     return rc;
592     }
593    
594     diff --git a/fs/isofs/rock.c b/fs/isofs/rock.c
595     index 6bd48f0..c2fb2dd 100644
596     --- a/fs/isofs/rock.c
597     +++ b/fs/isofs/rock.c
598     @@ -209,6 +209,11 @@ repeat:
599    
600     while (rs.len > 2) { /* There may be one byte for padding somewhere */
601     rr = (struct rock_ridge *)rs.chr;
602     + /*
603     + * Ignore rock ridge info if rr->len is out of range, but
604     + * don't return -EIO because that would make the file
605     + * invisible.
606     + */
607     if (rr->len < 3)
608     goto out; /* Something got screwed up here */
609     sig = isonum_721(rs.chr);
610     @@ -216,8 +221,12 @@ repeat:
611     goto eio;
612     rs.chr += rr->len;
613     rs.len -= rr->len;
614     + /*
615     + * As above, just ignore the rock ridge info if rr->len
616     + * is bogus.
617     + */
618     if (rs.len < 0)
619     - goto eio; /* corrupted isofs */
620     + goto out; /* Something got screwed up here */
621    
622     switch (sig) {
623     case SIG('R', 'R'):
624     @@ -307,6 +316,11 @@ parse_rock_ridge_inode_internal(struct iso_directory_record *de,
625     repeat:
626     while (rs.len > 2) { /* There may be one byte for padding somewhere */
627     rr = (struct rock_ridge *)rs.chr;
628     + /*
629     + * Ignore rock ridge info if rr->len is out of range, but
630     + * don't return -EIO because that would make the file
631     + * invisible.
632     + */
633     if (rr->len < 3)
634     goto out; /* Something got screwed up here */
635     sig = isonum_721(rs.chr);
636     @@ -314,8 +328,12 @@ repeat:
637     goto eio;
638     rs.chr += rr->len;
639     rs.len -= rr->len;
640     + /*
641     + * As above, just ignore the rock ridge info if rr->len
642     + * is bogus.
643     + */
644     if (rs.len < 0)
645     - goto eio; /* corrupted isofs */
646     + goto out; /* Something got screwed up here */
647    
648     switch (sig) {
649     #ifndef CONFIG_ZISOFS /* No flag for SF or ZF */
650     diff --git a/fs/libfs.c b/fs/libfs.c
651     index b004dfa..7c588dc 100644
652     --- a/fs/libfs.c
653     +++ b/fs/libfs.c
654     @@ -216,8 +216,8 @@ int get_sb_pseudo(struct file_system_type *fs_type, char *name,
655    
656     s->s_flags = MS_NOUSER;
657     s->s_maxbytes = ~0ULL;
658     - s->s_blocksize = 1024;
659     - s->s_blocksize_bits = 10;
660     + s->s_blocksize = PAGE_SIZE;
661     + s->s_blocksize_bits = PAGE_SHIFT;
662     s->s_magic = magic;
663     s->s_op = ops ? ops : &simple_super_operations;
664     s->s_time_gran = 1;
665     diff --git a/include/asm-arm/bitops.h b/include/asm-arm/bitops.h
666     index 5c60bfc..9a1db20 100644
667     --- a/include/asm-arm/bitops.h
668     +++ b/include/asm-arm/bitops.h
669     @@ -277,9 +277,16 @@ static inline int constant_fls(int x)
670     * the clz instruction for much better code efficiency.
671     */
672    
673     -#define fls(x) \
674     +#define __fls(x) \
675     ( __builtin_constant_p(x) ? constant_fls(x) : \
676     ({ int __r; asm("clz\t%0, %1" : "=r"(__r) : "r"(x) : "cc"); 32-__r; }) )
677     +
678     +/* Implement fls() in C so that 64-bit args are suitably truncated */
679     +static inline int fls(int x)
680     +{
681     + return __fls(x);
682     +}
683     +
684     #define ffs(x) ({ unsigned long __t = (x); fls(__t & -__t); })
685     #define __ffs(x) (ffs(x) - 1)
686     #define ffz(x) __ffs( ~(x) )
687     diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h
688     index f054778..5a544bf 100644
689     --- a/include/asm-generic/vmlinux.lds.h
690     +++ b/include/asm-generic/vmlinux.lds.h
691     @@ -204,6 +204,7 @@
692     * during second ld run in second ld pass when generating System.map */
693     #define TEXT_TEXT \
694     ALIGN_FUNCTION(); \
695     + *(.text.hot) \
696     *(.text) \
697     *(.ref.text) \
698     *(.text.init.refok) \
699     @@ -213,7 +214,8 @@
700     CPU_KEEP(init.text) \
701     CPU_KEEP(exit.text) \
702     MEM_KEEP(init.text) \
703     - MEM_KEEP(exit.text)
704     + MEM_KEEP(exit.text) \
705     + *(.text.unlikely)
706    
707    
708     /* sched.text is aling to function alignment to secure we have same
709     diff --git a/include/asm-powerpc/pgtable-ppc64.h b/include/asm-powerpc/pgtable-ppc64.h
710     index dd4c26d..8e35c28 100644
711     --- a/include/asm-powerpc/pgtable-ppc64.h
712     +++ b/include/asm-powerpc/pgtable-ppc64.h
713     @@ -311,6 +311,17 @@ static inline void ptep_set_wrprotect(struct mm_struct *mm, unsigned long addr,
714     old = pte_update(mm, addr, ptep, _PAGE_RW, 0);
715     }
716    
717     +#define __HAVE_ARCH_HUGE_PTEP_SET_WRPROTECT
718     +static inline void huge_ptep_set_wrprotect(struct mm_struct *mm,
719     + unsigned long addr, pte_t *ptep)
720     +{
721     + unsigned long old;
722     +
723     + if ((pte_val(*ptep) & _PAGE_RW) == 0)
724     + return;
725     + old = pte_update(mm, addr, ptep, _PAGE_RW, 1);
726     +}
727     +
728     /*
729     * We currently remove entries from the hashtable regardless of whether
730     * the entry was young or dirty. The generic routines only flush if the
731     diff --git a/include/asm-sparc64/io.h b/include/asm-sparc64/io.h
732     index c299b85..56fe3b9 100644
733     --- a/include/asm-sparc64/io.h
734     +++ b/include/asm-sparc64/io.h
735     @@ -16,7 +16,6 @@
736     /* BIO layer definitions. */
737     extern unsigned long kern_base, kern_size;
738     #define page_to_phys(page) (page_to_pfn(page) << PAGE_SHIFT)
739     -#define BIO_VMERGE_BOUNDARY 8192
740    
741     static inline u8 _inb(unsigned long addr)
742     {
743     diff --git a/include/linux/cpufreq.h b/include/linux/cpufreq.h
744     index ddd8652..87b0e07 100644
745     --- a/include/linux/cpufreq.h
746     +++ b/include/linux/cpufreq.h
747     @@ -108,6 +108,7 @@ struct cpufreq_policy {
748     #define CPUFREQ_ADJUST (0)
749     #define CPUFREQ_INCOMPATIBLE (1)
750     #define CPUFREQ_NOTIFY (2)
751     +#define CPUFREQ_START (3)
752    
753     #define CPUFREQ_SHARED_TYPE_NONE (0) /* None */
754     #define CPUFREQ_SHARED_TYPE_HW (1) /* HW does needed coordination */
755     diff --git a/kernel/marker.c b/kernel/marker.c
756     index 005b959..54ce00f 100644
757     --- a/kernel/marker.c
758     +++ b/kernel/marker.c
759     @@ -126,6 +126,11 @@ void marker_probe_cb(const struct marker *mdata, void *call_private,
760     struct marker_probe_closure *multi;
761     int i;
762     /*
763     + * Read mdata->ptype before mdata->multi.
764     + */
765     + smp_rmb();
766     + multi = mdata->multi;
767     + /*
768     * multi points to an array, therefore accessing the array
769     * depends on reading multi. However, even in this case,
770     * we must insure that the pointer is read _before_ the array
771     @@ -133,7 +138,6 @@ void marker_probe_cb(const struct marker *mdata, void *call_private,
772     * in the fast path, so put the explicit barrier here.
773     */
774     smp_read_barrier_depends();
775     - multi = mdata->multi;
776     for (i = 0; multi[i].func; i++) {
777     va_start(args, fmt);
778     multi[i].func(multi[i].probe_private, call_private, fmt,
779     @@ -176,6 +180,11 @@ void marker_probe_cb_noarg(const struct marker *mdata,
780     struct marker_probe_closure *multi;
781     int i;
782     /*
783     + * Read mdata->ptype before mdata->multi.
784     + */
785     + smp_rmb();
786     + multi = mdata->multi;
787     + /*
788     * multi points to an array, therefore accessing the array
789     * depends on reading multi. However, even in this case,
790     * we must insure that the pointer is read _before_ the array
791     @@ -183,7 +192,6 @@ void marker_probe_cb_noarg(const struct marker *mdata,
792     * in the fast path, so put the explicit barrier here.
793     */
794     smp_read_barrier_depends();
795     - multi = mdata->multi;
796     for (i = 0; multi[i].func; i++)
797     multi[i].func(multi[i].probe_private, call_private, fmt,
798     &args);
799     diff --git a/kernel/sys_ni.c b/kernel/sys_ni.c
800     index 5b9b467..0fea0ee 100644
801     --- a/kernel/sys_ni.c
802     +++ b/kernel/sys_ni.c
803     @@ -59,6 +59,7 @@ cond_syscall(sys_epoll_create);
804     cond_syscall(sys_epoll_ctl);
805     cond_syscall(sys_epoll_wait);
806     cond_syscall(sys_epoll_pwait);
807     +cond_syscall(compat_sys_epoll_pwait);
808     cond_syscall(sys_semget);
809     cond_syscall(sys_semop);
810     cond_syscall(sys_semtimedop);
811     diff --git a/mm/filemap.c b/mm/filemap.c
812     index 07e9d92..703f2c8 100644
813     --- a/mm/filemap.c
814     +++ b/mm/filemap.c
815     @@ -1771,7 +1771,7 @@ void iov_iter_advance(struct iov_iter *i, size_t bytes)
816     * The !iov->iov_len check ensures we skip over unlikely
817     * zero-length segments (without overruning the iovec).
818     */
819     - while (bytes || unlikely(!iov->iov_len && i->count)) {
820     + while (bytes || unlikely(i->count && !iov->iov_len)) {
821     int copy;
822    
823     copy = min(bytes, iov->iov_len - base);
824     diff --git a/mm/hugetlb.c b/mm/hugetlb.c
825     index 51c9e2c..893558a 100644
826     --- a/mm/hugetlb.c
827     +++ b/mm/hugetlb.c
828     @@ -738,6 +738,10 @@ static void set_huge_ptep_writable(struct vm_area_struct *vma,
829     }
830    
831    
832     +#ifndef __HAVE_ARCH_HUGE_PTEP_SET_WRPROTECT
833     +#define huge_ptep_set_wrprotect ptep_set_wrprotect
834     +#endif
835     +
836     int copy_hugetlb_page_range(struct mm_struct *dst, struct mm_struct *src,
837     struct vm_area_struct *vma)
838     {
839     @@ -764,7 +768,7 @@ int copy_hugetlb_page_range(struct mm_struct *dst, struct mm_struct *src,
840     spin_lock(&src->page_table_lock);
841     if (!pte_none(*src_pte)) {
842     if (cow)
843     - ptep_set_wrprotect(src, addr, src_pte);
844     + huge_ptep_set_wrprotect(src, addr, src_pte);
845     entry = *src_pte;
846     ptepage = pte_page(entry);
847     get_page(ptepage);
848     diff --git a/mm/shmem.c b/mm/shmem.c
849     index f514dd3..ba3667f 100644
850     --- a/mm/shmem.c
851     +++ b/mm/shmem.c
852     @@ -1559,7 +1559,6 @@ shmem_get_inode(struct super_block *sb, int mode, dev_t dev)
853     inode->i_uid = current->fsuid;
854     inode->i_gid = current->fsgid;
855     inode->i_blocks = 0;
856     - inode->i_mapping->a_ops = &shmem_aops;
857     inode->i_mapping->backing_dev_info = &shmem_backing_dev_info;
858     inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME;
859     inode->i_generation = get_seconds();
860     @@ -1574,6 +1573,7 @@ shmem_get_inode(struct super_block *sb, int mode, dev_t dev)
861     init_special_inode(inode, mode, dev);
862     break;
863     case S_IFREG:
864     + inode->i_mapping->a_ops = &shmem_aops;
865     inode->i_op = &shmem_inode_operations;
866     inode->i_fop = &shmem_file_operations;
867     mpol_shared_policy_init(&info->policy, sbinfo->policy,
868     @@ -1964,6 +1964,7 @@ static int shmem_symlink(struct inode *dir, struct dentry *dentry, const char *s
869     return error;
870     }
871     unlock_page(page);
872     + inode->i_mapping->a_ops = &shmem_aops;
873     inode->i_op = &shmem_symlink_inode_operations;
874     kaddr = kmap_atomic(page, KM_USER0);
875     memcpy(kaddr, symname, len);
876     diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c
877     index 3180963..25f0f0b 100644
878     --- a/net/ipv4/tcp_input.c
879     +++ b/net/ipv4/tcp_input.c
880     @@ -3259,6 +3259,7 @@ static int tcp_ack(struct sock *sk, struct sk_buff *skb, int flag)
881     * log. Something worked...
882     */
883     sk->sk_err_soft = 0;
884     + icsk->icsk_probes_out = 0;
885     tp->rcv_tstamp = tcp_time_stamp;
886     prior_packets = tp->packets_out;
887     if (!prior_packets)
888     @@ -3291,8 +3292,6 @@ static int tcp_ack(struct sock *sk, struct sk_buff *skb, int flag)
889     return 1;
890    
891     no_queue:
892     - icsk->icsk_probes_out = 0;
893     -
894     /* If this ack opens up a zero window, clear backoff. It was
895     * being used to time the probes, and is probably far higher than
896     * it needs to be for normal retransmission.
897     diff --git a/net/netfilter/nf_conntrack_proto_tcp.c b/net/netfilter/nf_conntrack_proto_tcp.c
898     index fc43e22..3ddf1c0 100644
899     --- a/net/netfilter/nf_conntrack_proto_tcp.c
900     +++ b/net/netfilter/nf_conntrack_proto_tcp.c
901     @@ -845,9 +845,15 @@ static int tcp_packet(struct nf_conn *ct,
902     /* Attempt to reopen a closed/aborted connection.
903     * Delete this connection and look up again. */
904     write_unlock_bh(&tcp_lock);
905     - if (del_timer(&ct->timeout))
906     + /* Only repeat if we can actually remove the timer.
907     + * Destruction may already be in progress in process
908     + * context and we must give it a chance to terminate.
909     + */
910     + if (del_timer(&ct->timeout)) {
911     ct->timeout.function((unsigned long)ct);
912     - return -NF_REPEAT;
913     + return -NF_REPEAT;
914     + }
915     + return -NF_DROP;
916     }
917     /* Fall through */
918     case TCP_CONNTRACK_IGNORE:
919     diff --git a/scripts/Makefile.modpost b/scripts/Makefile.modpost
920     index 2d20640..af21ea9 100644
921     --- a/scripts/Makefile.modpost
922     +++ b/scripts/Makefile.modpost
923     @@ -87,6 +87,7 @@ quiet_cmd_kernel-mod = MODPOST $@
924     cmd_kernel-mod = $(modpost) $@
925    
926     vmlinux.o: FORCE
927     + @rm -fr $(kernelmarkersfile)
928     $(call cmd,kernel-mod)
929    
930     # Declare generated files as targets for modpost
931     diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c
932     index 110cf24..7b16b36 100644
933     --- a/scripts/mod/modpost.c
934     +++ b/scripts/mod/modpost.c
935     @@ -1973,7 +1973,8 @@ static void read_markers(const char *fname)
936     mod->skip = 1;
937     }
938    
939     - add_marker(mod, marker, fmt);
940     + if (!mod->skip)
941     + add_marker(mod, marker, fmt);
942     }
943     return;
944     fail:
945     diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
946     index 52a7f0f..37f274f 100644
947     --- a/sound/pci/hda/patch_realtek.c
948     +++ b/sound/pci/hda/patch_realtek.c
949     @@ -8517,6 +8517,7 @@ static struct hda_verb alc262_sony_unsol_verbs[] = {
950    
951     {0x15, AC_VERB_SET_UNSOLICITED_ENABLE, AC_USRSP_EN | ALC880_HP_EVENT},
952     {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_HP},
953     + {}
954     };
955    
956     /* mute/unmute internal speaker according to the hp jack and mute state */
957     diff --git a/sound/pci/trident/trident_main.c b/sound/pci/trident/trident_main.c
958     index 71138ff..a9b40a1 100644
959     --- a/sound/pci/trident/trident_main.c
960     +++ b/sound/pci/trident/trident_main.c
961     @@ -1590,7 +1590,10 @@ static int snd_trident_trigger(struct snd_pcm_substream *substream,
962     if (spdif_flag) {
963     if (trident->device != TRIDENT_DEVICE_ID_SI7018) {
964     outl(trident->spdif_pcm_bits, TRID_REG(trident, NX_SPCSTATUS));
965     - outb(trident->spdif_pcm_ctrl, TRID_REG(trident, NX_SPCTRL_SPCSO + 3));
966     + val = trident->spdif_pcm_ctrl;
967     + if (!go)
968     + val &= ~(0x28);
969     + outb(val, TRID_REG(trident, NX_SPCTRL_SPCSO + 3));
970     } else {
971     outl(trident->spdif_pcm_bits, TRID_REG(trident, SI_SPDIF_CS));
972     val = inl(TRID_REG(trident, SI_SERIAL_INTF_CTRL)) | SPDIF_EN;