Annotation of /trunk/kernel26-magellan-server/patches-2.6.25-r5/0113-2.6.25.14-all-fixes.patch
Parent Directory | Revision Log
Revision 677 -
(hide annotations)
(download)
Wed Sep 10 21:27:27 2008 UTC (16 years, 2 months ago) by niro
File size: 30765 byte(s)
Wed Sep 10 21:27:27 2008 UTC (16 years, 2 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; |