Magellan Linux

Contents of /trunk/kernel26-alx/patches-2.6.20-r6/0111-2.6.20.11-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1175 - (show annotations) (download)
Thu Oct 14 12:15:46 2010 UTC (13 years, 7 months ago) by niro
File size: 64264 byte(s)
-2.6.20-alx-r6 new magellan 0.5.2 kernel
1 diff --git a/arch/i386/boot/video.S b/arch/i386/boot/video.S
2 index 2c5b5cc..8143c95 100644
3 --- a/arch/i386/boot/video.S
4 +++ b/arch/i386/boot/video.S
5 @@ -571,6 +571,16 @@ setr1: lodsw
6 jmp _m_s
7
8 check_vesa:
9 +#ifdef CONFIG_FIRMWARE_EDID
10 + leaw modelist+1024, %di
11 + movw $0x4f00, %ax
12 + int $0x10
13 + cmpw $0x004f, %ax
14 + jnz setbad
15 +
16 + movw 4(%di), %ax
17 + movw %ax, vbe_version
18 +#endif
19 leaw modelist+1024, %di
20 subb $VIDEO_FIRST_VESA>>8, %bh
21 movw %bx, %cx # Get mode information structure
22 @@ -1945,6 +1955,9 @@ store_edid:
23 rep
24 stosl
25
26 + cmpw $0x0200, vbe_version # only do EDID on >= VBE2.0
27 + jl no_edid
28 +
29 pushw %es # save ES
30 xorw %di, %di # Report Capability
31 pushw %di
32 @@ -1987,6 +2000,7 @@ do_restore: .byte 0 # Screen contents altered during mode change
33 svga_prefix: .byte VIDEO_FIRST_BIOS>>8 # Default prefix for BIOS modes
34 graphic_mode: .byte 0 # Graphic mode with a linear frame buffer
35 dac_size: .byte 6 # DAC bit depth
36 +vbe_version: .word 0 # VBE bios version
37
38 # Status messages
39 keymsg: .ascii "Press <RETURN> to see video modes available, "
40 diff --git a/arch/sparc64/kernel/pci_iommu.c b/arch/sparc64/kernel/pci_iommu.c
41 index 2e7f142..7aca0f3 100644
42 --- a/arch/sparc64/kernel/pci_iommu.c
43 +++ b/arch/sparc64/kernel/pci_iommu.c
44 @@ -64,7 +64,7 @@ static void __iommu_flushall(struct pci_iommu *iommu)
45 #define IOPTE_IS_DUMMY(iommu, iopte) \
46 ((iopte_val(*iopte) & IOPTE_PAGE) == (iommu)->dummy_page_pa)
47
48 -static void inline iopte_make_dummy(struct pci_iommu *iommu, iopte_t *iopte)
49 +static inline void iopte_make_dummy(struct pci_iommu *iommu, iopte_t *iopte)
50 {
51 unsigned long val = iopte_val(*iopte);
52
53 diff --git a/arch/sparc64/kernel/sbus.c b/arch/sparc64/kernel/sbus.c
54 index 01d6d86..14f78fb 100644
55 --- a/arch/sparc64/kernel/sbus.c
56 +++ b/arch/sparc64/kernel/sbus.c
57 @@ -24,48 +24,25 @@
58
59 #include "iommu_common.h"
60
61 -/* These should be allocated on an SMP_CACHE_BYTES
62 - * aligned boundary for optimal performance.
63 - *
64 - * On SYSIO, using an 8K page size we have 1GB of SBUS
65 - * DMA space mapped. We divide this space into equally
66 - * sized clusters. We allocate a DMA mapping from the
67 - * cluster that matches the order of the allocation, or
68 - * if the order is greater than the number of clusters,
69 - * we try to allocate from the last cluster.
70 - */
71 -
72 -#define NCLUSTERS 8UL
73 -#define ONE_GIG (1UL * 1024UL * 1024UL * 1024UL)
74 -#define CLUSTER_SIZE (ONE_GIG / NCLUSTERS)
75 -#define CLUSTER_MASK (CLUSTER_SIZE - 1)
76 -#define CLUSTER_NPAGES (CLUSTER_SIZE >> IO_PAGE_SHIFT)
77 #define MAP_BASE ((u32)0xc0000000)
78
79 +struct sbus_iommu_arena {
80 + unsigned long *map;
81 + unsigned int hint;
82 + unsigned int limit;
83 +};
84 +
85 struct sbus_iommu {
86 -/*0x00*/spinlock_t lock;
87 + spinlock_t lock;
88
89 -/*0x08*/iopte_t *page_table;
90 -/*0x10*/unsigned long strbuf_regs;
91 -/*0x18*/unsigned long iommu_regs;
92 -/*0x20*/unsigned long sbus_control_reg;
93 + struct sbus_iommu_arena arena;
94
95 -/*0x28*/volatile unsigned long strbuf_flushflag;
96 + iopte_t *page_table;
97 + unsigned long strbuf_regs;
98 + unsigned long iommu_regs;
99 + unsigned long sbus_control_reg;
100
101 - /* If NCLUSTERS is ever decresed to 4 or lower,
102 - * you must increase the size of the type of
103 - * these counters. You have been duly warned. -DaveM
104 - */
105 -/*0x30*/struct {
106 - u16 next;
107 - u16 flush;
108 - } alloc_info[NCLUSTERS];
109 -
110 - /* The lowest used consistent mapping entry. Since
111 - * we allocate consistent maps out of cluster 0 this
112 - * is relative to the beginning of closter 0.
113 - */
114 -/*0x50*/u32 lowest_consistent_map;
115 + volatile unsigned long strbuf_flushflag;
116 };
117
118 /* Offsets from iommu_regs */
119 @@ -91,19 +68,6 @@ static void __iommu_flushall(struct sbus_iommu *iommu)
120 tag += 8UL;
121 }
122 upa_readq(iommu->sbus_control_reg);
123 -
124 - for (entry = 0; entry < NCLUSTERS; entry++) {
125 - iommu->alloc_info[entry].flush =
126 - iommu->alloc_info[entry].next;
127 - }
128 -}
129 -
130 -static void iommu_flush(struct sbus_iommu *iommu, u32 base, unsigned long npages)
131 -{
132 - while (npages--)
133 - upa_writeq(base + (npages << IO_PAGE_SHIFT),
134 - iommu->iommu_regs + IOMMU_FLUSH);
135 - upa_readq(iommu->sbus_control_reg);
136 }
137
138 /* Offsets from strbuf_regs */
139 @@ -156,178 +120,115 @@ static void sbus_strbuf_flush(struct sbus_iommu *iommu, u32 base, unsigned long
140 base, npages);
141 }
142
143 -static iopte_t *alloc_streaming_cluster(struct sbus_iommu *iommu, unsigned long npages)
144 +/* Based largely upon the ppc64 iommu allocator. */
145 +static long sbus_arena_alloc(struct sbus_iommu *iommu, unsigned long npages)
146 {
147 - iopte_t *iopte, *limit, *first, *cluster;
148 - unsigned long cnum, ent, nent, flush_point, found;
149 -
150 - cnum = 0;
151 - nent = 1;
152 - while ((1UL << cnum) < npages)
153 - cnum++;
154 - if(cnum >= NCLUSTERS) {
155 - nent = 1UL << (cnum - NCLUSTERS);
156 - cnum = NCLUSTERS - 1;
157 - }
158 - iopte = iommu->page_table + (cnum * CLUSTER_NPAGES);
159 -
160 - if (cnum == 0)
161 - limit = (iommu->page_table +
162 - iommu->lowest_consistent_map);
163 - else
164 - limit = (iopte + CLUSTER_NPAGES);
165 -
166 - iopte += ((ent = iommu->alloc_info[cnum].next) << cnum);
167 - flush_point = iommu->alloc_info[cnum].flush;
168 -
169 - first = iopte;
170 - cluster = NULL;
171 - found = 0;
172 - for (;;) {
173 - if (iopte_val(*iopte) == 0UL) {
174 - found++;
175 - if (!cluster)
176 - cluster = iopte;
177 + struct sbus_iommu_arena *arena = &iommu->arena;
178 + unsigned long n, i, start, end, limit;
179 + int pass;
180 +
181 + limit = arena->limit;
182 + start = arena->hint;
183 + pass = 0;
184 +
185 +again:
186 + n = find_next_zero_bit(arena->map, limit, start);
187 + end = n + npages;
188 + if (unlikely(end >= limit)) {
189 + if (likely(pass < 1)) {
190 + limit = start;
191 + start = 0;
192 + __iommu_flushall(iommu);
193 + pass++;
194 + goto again;
195 } else {
196 - /* Used cluster in the way */
197 - cluster = NULL;
198 - found = 0;
199 + /* Scanned the whole thing, give up. */
200 + return -1;
201 }
202 + }
203
204 - if (found == nent)
205 - break;
206 -
207 - iopte += (1 << cnum);
208 - ent++;
209 - if (iopte >= limit) {
210 - iopte = (iommu->page_table + (cnum * CLUSTER_NPAGES));
211 - ent = 0;
212 -
213 - /* Multiple cluster allocations must not wrap */
214 - cluster = NULL;
215 - found = 0;
216 + for (i = n; i < end; i++) {
217 + if (test_bit(i, arena->map)) {
218 + start = i + 1;
219 + goto again;
220 }
221 - if (ent == flush_point)
222 - __iommu_flushall(iommu);
223 - if (iopte == first)
224 - goto bad;
225 }
226
227 - /* ent/iopte points to the last cluster entry we're going to use,
228 - * so save our place for the next allocation.
229 - */
230 - if ((iopte + (1 << cnum)) >= limit)
231 - ent = 0;
232 - else
233 - ent = ent + 1;
234 - iommu->alloc_info[cnum].next = ent;
235 - if (ent == flush_point)
236 - __iommu_flushall(iommu);
237 -
238 - /* I've got your streaming cluster right here buddy boy... */
239 - return cluster;
240 -
241 -bad:
242 - printk(KERN_EMERG "sbus: alloc_streaming_cluster of npages(%ld) failed!\n",
243 - npages);
244 - return NULL;
245 + for (i = n; i < end; i++)
246 + __set_bit(i, arena->map);
247 +
248 + arena->hint = end;
249 +
250 + return n;
251 }
252
253 -static void free_streaming_cluster(struct sbus_iommu *iommu, u32 base, unsigned long npages)
254 +static void sbus_arena_free(struct sbus_iommu_arena *arena, unsigned long base, unsigned long npages)
255 {
256 - unsigned long cnum, ent, nent;
257 - iopte_t *iopte;
258 + unsigned long i;
259
260 - cnum = 0;
261 - nent = 1;
262 - while ((1UL << cnum) < npages)
263 - cnum++;
264 - if(cnum >= NCLUSTERS) {
265 - nent = 1UL << (cnum - NCLUSTERS);
266 - cnum = NCLUSTERS - 1;
267 - }
268 - ent = (base & CLUSTER_MASK) >> (IO_PAGE_SHIFT + cnum);
269 - iopte = iommu->page_table + ((base - MAP_BASE) >> IO_PAGE_SHIFT);
270 - do {
271 - iopte_val(*iopte) = 0UL;
272 - iopte += 1 << cnum;
273 - } while(--nent);
274 -
275 - /* If the global flush might not have caught this entry,
276 - * adjust the flush point such that we will flush before
277 - * ever trying to reuse it.
278 - */
279 -#define between(X,Y,Z) (((Z) - (Y)) >= ((X) - (Y)))
280 - if (between(ent, iommu->alloc_info[cnum].next, iommu->alloc_info[cnum].flush))
281 - iommu->alloc_info[cnum].flush = ent;
282 -#undef between
283 + for (i = base; i < (base + npages); i++)
284 + __clear_bit(i, arena->map);
285 }
286
287 -/* We allocate consistent mappings from the end of cluster zero. */
288 -static iopte_t *alloc_consistent_cluster(struct sbus_iommu *iommu, unsigned long npages)
289 +static void sbus_iommu_table_init(struct sbus_iommu *iommu, unsigned int tsbsize)
290 {
291 - iopte_t *iopte;
292 + unsigned long tsbbase, order, sz, num_tsb_entries;
293
294 - iopte = iommu->page_table + (1 * CLUSTER_NPAGES);
295 - while (iopte > iommu->page_table) {
296 - iopte--;
297 - if (!(iopte_val(*iopte) & IOPTE_VALID)) {
298 - unsigned long tmp = npages;
299 + num_tsb_entries = tsbsize / sizeof(iopte_t);
300
301 - while (--tmp) {
302 - iopte--;
303 - if (iopte_val(*iopte) & IOPTE_VALID)
304 - break;
305 - }
306 - if (tmp == 0) {
307 - u32 entry = (iopte - iommu->page_table);
308 + /* Setup initial software IOMMU state. */
309 + spin_lock_init(&iommu->lock);
310
311 - if (entry < iommu->lowest_consistent_map)
312 - iommu->lowest_consistent_map = entry;
313 - return iopte;
314 - }
315 - }
316 + /* Allocate and initialize the free area map. */
317 + sz = num_tsb_entries / 8;
318 + sz = (sz + 7UL) & ~7UL;
319 + iommu->arena.map = kzalloc(sz, GFP_KERNEL);
320 + if (!iommu->arena.map) {
321 + prom_printf("PCI_IOMMU: Error, kmalloc(arena.map) failed.\n");
322 + prom_halt();
323 + }
324 + iommu->arena.limit = num_tsb_entries;
325 +
326 + /* Now allocate and setup the IOMMU page table itself. */
327 + order = get_order(tsbsize);
328 + tsbbase = __get_free_pages(GFP_KERNEL, order);
329 + if (!tsbbase) {
330 + prom_printf("IOMMU: Error, gfp(tsb) failed.\n");
331 + prom_halt();
332 }
333 - return NULL;
334 + iommu->page_table = (iopte_t *)tsbbase;
335 + memset(iommu->page_table, 0, tsbsize);
336 }
337
338 -static void free_consistent_cluster(struct sbus_iommu *iommu, u32 base, unsigned long npages)
339 +static inline iopte_t *alloc_npages(struct sbus_iommu *iommu, unsigned long npages)
340 {
341 - iopte_t *iopte = iommu->page_table + ((base - MAP_BASE) >> IO_PAGE_SHIFT);
342 + long entry;
343
344 - if ((iopte - iommu->page_table) == iommu->lowest_consistent_map) {
345 - iopte_t *walk = iopte + npages;
346 - iopte_t *limit;
347 + entry = sbus_arena_alloc(iommu, npages);
348 + if (unlikely(entry < 0))
349 + return NULL;
350
351 - limit = iommu->page_table + CLUSTER_NPAGES;
352 - while (walk < limit) {
353 - if (iopte_val(*walk) != 0UL)
354 - break;
355 - walk++;
356 - }
357 - iommu->lowest_consistent_map =
358 - (walk - iommu->page_table);
359 - }
360 + return iommu->page_table + entry;
361 +}
362
363 - while (npages--)
364 - *iopte++ = __iopte(0UL);
365 +static inline void free_npages(struct sbus_iommu *iommu, dma_addr_t base, unsigned long npages)
366 +{
367 + sbus_arena_free(&iommu->arena, base >> IO_PAGE_SHIFT, npages);
368 }
369
370 void *sbus_alloc_consistent(struct sbus_dev *sdev, size_t size, dma_addr_t *dvma_addr)
371 {
372 - unsigned long order, first_page, flags;
373 struct sbus_iommu *iommu;
374 iopte_t *iopte;
375 + unsigned long flags, order, first_page;
376 void *ret;
377 int npages;
378
379 - if (size <= 0 || sdev == NULL || dvma_addr == NULL)
380 - return NULL;
381 -
382 size = IO_PAGE_ALIGN(size);
383 order = get_order(size);
384 if (order >= 10)
385 return NULL;
386 +
387 first_page = __get_free_pages(GFP_KERNEL|__GFP_COMP, order);
388 if (first_page == 0UL)
389 return NULL;
390 @@ -336,108 +237,121 @@ void *sbus_alloc_consistent(struct sbus_dev *sdev, size_t size, dma_addr_t *dvma
391 iommu = sdev->bus->iommu;
392
393 spin_lock_irqsave(&iommu->lock, flags);
394 - iopte = alloc_consistent_cluster(iommu, size >> IO_PAGE_SHIFT);
395 - if (iopte == NULL) {
396 - spin_unlock_irqrestore(&iommu->lock, flags);
397 + iopte = alloc_npages(iommu, size >> IO_PAGE_SHIFT);
398 + spin_unlock_irqrestore(&iommu->lock, flags);
399 +
400 + if (unlikely(iopte == NULL)) {
401 free_pages(first_page, order);
402 return NULL;
403 }
404
405 - /* Ok, we're committed at this point. */
406 - *dvma_addr = MAP_BASE + ((iopte - iommu->page_table) << IO_PAGE_SHIFT);
407 + *dvma_addr = (MAP_BASE +
408 + ((iopte - iommu->page_table) << IO_PAGE_SHIFT));
409 ret = (void *) first_page;
410 npages = size >> IO_PAGE_SHIFT;
411 + first_page = __pa(first_page);
412 while (npages--) {
413 - *iopte++ = __iopte(IOPTE_VALID | IOPTE_CACHE | IOPTE_WRITE |
414 - (__pa(first_page) & IOPTE_PAGE));
415 + iopte_val(*iopte) = (IOPTE_VALID | IOPTE_CACHE |
416 + IOPTE_WRITE |
417 + (first_page & IOPTE_PAGE));
418 + iopte++;
419 first_page += IO_PAGE_SIZE;
420 }
421 - iommu_flush(iommu, *dvma_addr, size >> IO_PAGE_SHIFT);
422 - spin_unlock_irqrestore(&iommu->lock, flags);
423
424 return ret;
425 }
426
427 void sbus_free_consistent(struct sbus_dev *sdev, size_t size, void *cpu, dma_addr_t dvma)
428 {
429 - unsigned long order, npages;
430 struct sbus_iommu *iommu;
431 -
432 - if (size <= 0 || sdev == NULL || cpu == NULL)
433 - return;
434 + iopte_t *iopte;
435 + unsigned long flags, order, npages;
436
437 npages = IO_PAGE_ALIGN(size) >> IO_PAGE_SHIFT;
438 iommu = sdev->bus->iommu;
439 + iopte = iommu->page_table +
440 + ((dvma - MAP_BASE) >> IO_PAGE_SHIFT);
441 +
442 + spin_lock_irqsave(&iommu->lock, flags);
443 +
444 + free_npages(iommu, dvma - MAP_BASE, npages);
445
446 - spin_lock_irq(&iommu->lock);
447 - free_consistent_cluster(iommu, dvma, npages);
448 - iommu_flush(iommu, dvma, npages);
449 - spin_unlock_irq(&iommu->lock);
450 + spin_unlock_irqrestore(&iommu->lock, flags);
451
452 order = get_order(size);
453 if (order < 10)
454 free_pages((unsigned long)cpu, order);
455 }
456
457 -dma_addr_t sbus_map_single(struct sbus_dev *sdev, void *ptr, size_t size, int dir)
458 +dma_addr_t sbus_map_single(struct sbus_dev *sdev, void *ptr, size_t sz, int direction)
459 {
460 - struct sbus_iommu *iommu = sdev->bus->iommu;
461 - unsigned long npages, pbase, flags;
462 - iopte_t *iopte;
463 - u32 dma_base, offset;
464 - unsigned long iopte_bits;
465 + struct sbus_iommu *iommu;
466 + iopte_t *base;
467 + unsigned long flags, npages, oaddr;
468 + unsigned long i, base_paddr;
469 + u32 bus_addr, ret;
470 + unsigned long iopte_protection;
471 +
472 + iommu = sdev->bus->iommu;
473
474 - if (dir == SBUS_DMA_NONE)
475 + if (unlikely(direction == SBUS_DMA_NONE))
476 BUG();
477
478 - pbase = (unsigned long) ptr;
479 - offset = (u32) (pbase & ~IO_PAGE_MASK);
480 - size = (IO_PAGE_ALIGN(pbase + size) - (pbase & IO_PAGE_MASK));
481 - pbase = (unsigned long) __pa(pbase & IO_PAGE_MASK);
482 + oaddr = (unsigned long)ptr;
483 + npages = IO_PAGE_ALIGN(oaddr + sz) - (oaddr & IO_PAGE_MASK);
484 + npages >>= IO_PAGE_SHIFT;
485
486 spin_lock_irqsave(&iommu->lock, flags);
487 - npages = size >> IO_PAGE_SHIFT;
488 - iopte = alloc_streaming_cluster(iommu, npages);
489 - if (iopte == NULL)
490 - goto bad;
491 - dma_base = MAP_BASE + ((iopte - iommu->page_table) << IO_PAGE_SHIFT);
492 - npages = size >> IO_PAGE_SHIFT;
493 - iopte_bits = IOPTE_VALID | IOPTE_STBUF | IOPTE_CACHE;
494 - if (dir != SBUS_DMA_TODEVICE)
495 - iopte_bits |= IOPTE_WRITE;
496 - while (npages--) {
497 - *iopte++ = __iopte(iopte_bits | (pbase & IOPTE_PAGE));
498 - pbase += IO_PAGE_SIZE;
499 - }
500 - npages = size >> IO_PAGE_SHIFT;
501 + base = alloc_npages(iommu, npages);
502 spin_unlock_irqrestore(&iommu->lock, flags);
503
504 - return (dma_base | offset);
505 + if (unlikely(!base))
506 + BUG();
507
508 -bad:
509 - spin_unlock_irqrestore(&iommu->lock, flags);
510 - BUG();
511 - return 0;
512 + bus_addr = (MAP_BASE +
513 + ((base - iommu->page_table) << IO_PAGE_SHIFT));
514 + ret = bus_addr | (oaddr & ~IO_PAGE_MASK);
515 + base_paddr = __pa(oaddr & IO_PAGE_MASK);
516 +
517 + iopte_protection = IOPTE_VALID | IOPTE_STBUF | IOPTE_CACHE;
518 + if (direction != SBUS_DMA_TODEVICE)
519 + iopte_protection |= IOPTE_WRITE;
520 +
521 + for (i = 0; i < npages; i++, base++, base_paddr += IO_PAGE_SIZE)
522 + iopte_val(*base) = iopte_protection | base_paddr;
523 +
524 + return ret;
525 }
526
527 -void sbus_unmap_single(struct sbus_dev *sdev, dma_addr_t dma_addr, size_t size, int direction)
528 +void sbus_unmap_single(struct sbus_dev *sdev, dma_addr_t bus_addr, size_t sz, int direction)
529 {
530 struct sbus_iommu *iommu = sdev->bus->iommu;
531 - u32 dma_base = dma_addr & IO_PAGE_MASK;
532 - unsigned long flags;
533 + iopte_t *base;
534 + unsigned long flags, npages, i;
535 +
536 + if (unlikely(direction == SBUS_DMA_NONE))
537 + BUG();
538 +
539 + npages = IO_PAGE_ALIGN(bus_addr + sz) - (bus_addr & IO_PAGE_MASK);
540 + npages >>= IO_PAGE_SHIFT;
541 + base = iommu->page_table +
542 + ((bus_addr - MAP_BASE) >> IO_PAGE_SHIFT);
543
544 - size = (IO_PAGE_ALIGN(dma_addr + size) - dma_base);
545 + bus_addr &= IO_PAGE_MASK;
546
547 spin_lock_irqsave(&iommu->lock, flags);
548 - free_streaming_cluster(iommu, dma_base, size >> IO_PAGE_SHIFT);
549 - sbus_strbuf_flush(iommu, dma_base, size >> IO_PAGE_SHIFT, direction);
550 + sbus_strbuf_flush(iommu, bus_addr, npages, direction);
551 + for (i = 0; i < npages; i++)
552 + iopte_val(base[i]) = 0UL;
553 + free_npages(iommu, bus_addr - MAP_BASE, npages);
554 spin_unlock_irqrestore(&iommu->lock, flags);
555 }
556
557 #define SG_ENT_PHYS_ADDRESS(SG) \
558 (__pa(page_address((SG)->page)) + (SG)->offset)
559
560 -static inline void fill_sg(iopte_t *iopte, struct scatterlist *sg, int nused, int nelems, unsigned long iopte_bits)
561 +static inline void fill_sg(iopte_t *iopte, struct scatterlist *sg,
562 + int nused, int nelems, unsigned long iopte_protection)
563 {
564 struct scatterlist *dma_sg = sg;
565 struct scatterlist *sg_end = sg + nelems;
566 @@ -462,7 +376,7 @@ static inline void fill_sg(iopte_t *iopte, struct scatterlist *sg, int nused, in
567 for (;;) {
568 unsigned long tmp;
569
570 - tmp = (unsigned long) SG_ENT_PHYS_ADDRESS(sg);
571 + tmp = SG_ENT_PHYS_ADDRESS(sg);
572 len = sg->length;
573 if (((tmp ^ pteval) >> IO_PAGE_SHIFT) != 0UL) {
574 pteval = tmp & IO_PAGE_MASK;
575 @@ -478,7 +392,7 @@ static inline void fill_sg(iopte_t *iopte, struct scatterlist *sg, int nused, in
576 sg++;
577 }
578
579 - pteval = ((pteval & IOPTE_PAGE) | iopte_bits);
580 + pteval = iopte_protection | (pteval & IOPTE_PAGE);
581 while (len > 0) {
582 *iopte++ = __iopte(pteval);
583 pteval += IO_PAGE_SIZE;
584 @@ -509,103 +423,111 @@ static inline void fill_sg(iopte_t *iopte, struct scatterlist *sg, int nused, in
585 }
586 }
587
588 -int sbus_map_sg(struct sbus_dev *sdev, struct scatterlist *sg, int nents, int dir)
589 +int sbus_map_sg(struct sbus_dev *sdev, struct scatterlist *sglist, int nelems, int direction)
590 {
591 - struct sbus_iommu *iommu = sdev->bus->iommu;
592 - unsigned long flags, npages;
593 - iopte_t *iopte;
594 + struct sbus_iommu *iommu;
595 + unsigned long flags, npages, iopte_protection;
596 + iopte_t *base;
597 u32 dma_base;
598 struct scatterlist *sgtmp;
599 int used;
600 - unsigned long iopte_bits;
601 -
602 - if (dir == SBUS_DMA_NONE)
603 - BUG();
604
605 /* Fast path single entry scatterlists. */
606 - if (nents == 1) {
607 - sg->dma_address =
608 + if (nelems == 1) {
609 + sglist->dma_address =
610 sbus_map_single(sdev,
611 - (page_address(sg->page) + sg->offset),
612 - sg->length, dir);
613 - sg->dma_length = sg->length;
614 + (page_address(sglist->page) + sglist->offset),
615 + sglist->length, direction);
616 + sglist->dma_length = sglist->length;
617 return 1;
618 }
619
620 - npages = prepare_sg(sg, nents);
621 + iommu = sdev->bus->iommu;
622 +
623 + if (unlikely(direction == SBUS_DMA_NONE))
624 + BUG();
625 +
626 + npages = prepare_sg(sglist, nelems);
627
628 spin_lock_irqsave(&iommu->lock, flags);
629 - iopte = alloc_streaming_cluster(iommu, npages);
630 - if (iopte == NULL)
631 - goto bad;
632 - dma_base = MAP_BASE + ((iopte - iommu->page_table) << IO_PAGE_SHIFT);
633 + base = alloc_npages(iommu, npages);
634 + spin_unlock_irqrestore(&iommu->lock, flags);
635 +
636 + if (unlikely(base == NULL))
637 + BUG();
638 +
639 + dma_base = MAP_BASE +
640 + ((base - iommu->page_table) << IO_PAGE_SHIFT);
641
642 /* Normalize DVMA addresses. */
643 - sgtmp = sg;
644 - used = nents;
645 + used = nelems;
646
647 + sgtmp = sglist;
648 while (used && sgtmp->dma_length) {
649 sgtmp->dma_address += dma_base;
650 sgtmp++;
651 used--;
652 }
653 - used = nents - used;
654 + used = nelems - used;
655
656 - iopte_bits = IOPTE_VALID | IOPTE_STBUF | IOPTE_CACHE;
657 - if (dir != SBUS_DMA_TODEVICE)
658 - iopte_bits |= IOPTE_WRITE;
659 + iopte_protection = IOPTE_VALID | IOPTE_STBUF | IOPTE_CACHE;
660 + if (direction != SBUS_DMA_TODEVICE)
661 + iopte_protection |= IOPTE_WRITE;
662 +
663 + fill_sg(base, sglist, used, nelems, iopte_protection);
664
665 - fill_sg(iopte, sg, used, nents, iopte_bits);
666 #ifdef VERIFY_SG
667 - verify_sglist(sg, nents, iopte, npages);
668 + verify_sglist(sglist, nelems, base, npages);
669 #endif
670 - spin_unlock_irqrestore(&iommu->lock, flags);
671
672 return used;
673 -
674 -bad:
675 - spin_unlock_irqrestore(&iommu->lock, flags);
676 - BUG();
677 - return 0;
678 }
679
680 -void sbus_unmap_sg(struct sbus_dev *sdev, struct scatterlist *sg, int nents, int direction)
681 +void sbus_unmap_sg(struct sbus_dev *sdev, struct scatterlist *sglist, int nelems, int direction)
682 {
683 - unsigned long size, flags;
684 struct sbus_iommu *iommu;
685 - u32 dvma_base;
686 - int i;
687 + iopte_t *base;
688 + unsigned long flags, i, npages;
689 + u32 bus_addr;
690
691 - /* Fast path single entry scatterlists. */
692 - if (nents == 1) {
693 - sbus_unmap_single(sdev, sg->dma_address, sg->dma_length, direction);
694 - return;
695 - }
696 + if (unlikely(direction == SBUS_DMA_NONE))
697 + BUG();
698 +
699 + iommu = sdev->bus->iommu;
700 +
701 + bus_addr = sglist->dma_address & IO_PAGE_MASK;
702
703 - dvma_base = sg[0].dma_address & IO_PAGE_MASK;
704 - for (i = 0; i < nents; i++) {
705 - if (sg[i].dma_length == 0)
706 + for (i = 1; i < nelems; i++)
707 + if (sglist[i].dma_length == 0)
708 break;
709 - }
710 i--;
711 - size = IO_PAGE_ALIGN(sg[i].dma_address + sg[i].dma_length) - dvma_base;
712 + npages = (IO_PAGE_ALIGN(sglist[i].dma_address + sglist[i].dma_length) -
713 + bus_addr) >> IO_PAGE_SHIFT;
714 +
715 + base = iommu->page_table +
716 + ((bus_addr - MAP_BASE) >> IO_PAGE_SHIFT);
717
718 - iommu = sdev->bus->iommu;
719 spin_lock_irqsave(&iommu->lock, flags);
720 - free_streaming_cluster(iommu, dvma_base, size >> IO_PAGE_SHIFT);
721 - sbus_strbuf_flush(iommu, dvma_base, size >> IO_PAGE_SHIFT, direction);
722 + sbus_strbuf_flush(iommu, bus_addr, npages, direction);
723 + for (i = 0; i < npages; i++)
724 + iopte_val(base[i]) = 0UL;
725 + free_npages(iommu, bus_addr - MAP_BASE, npages);
726 spin_unlock_irqrestore(&iommu->lock, flags);
727 }
728
729 -void sbus_dma_sync_single_for_cpu(struct sbus_dev *sdev, dma_addr_t base, size_t size, int direction)
730 +void sbus_dma_sync_single_for_cpu(struct sbus_dev *sdev, dma_addr_t bus_addr, size_t sz, int direction)
731 {
732 - struct sbus_iommu *iommu = sdev->bus->iommu;
733 - unsigned long flags;
734 + struct sbus_iommu *iommu;
735 + unsigned long flags, npages;
736 +
737 + iommu = sdev->bus->iommu;
738
739 - size = (IO_PAGE_ALIGN(base + size) - (base & IO_PAGE_MASK));
740 + npages = IO_PAGE_ALIGN(bus_addr + sz) - (bus_addr & IO_PAGE_MASK);
741 + npages >>= IO_PAGE_SHIFT;
742 + bus_addr &= IO_PAGE_MASK;
743
744 spin_lock_irqsave(&iommu->lock, flags);
745 - sbus_strbuf_flush(iommu, base & IO_PAGE_MASK, size >> IO_PAGE_SHIFT, direction);
746 + sbus_strbuf_flush(iommu, bus_addr, npages, direction);
747 spin_unlock_irqrestore(&iommu->lock, flags);
748 }
749
750 @@ -613,23 +535,25 @@ void sbus_dma_sync_single_for_device(struct sbus_dev *sdev, dma_addr_t base, siz
751 {
752 }
753
754 -void sbus_dma_sync_sg_for_cpu(struct sbus_dev *sdev, struct scatterlist *sg, int nents, int direction)
755 +void sbus_dma_sync_sg_for_cpu(struct sbus_dev *sdev, struct scatterlist *sglist, int nelems, int direction)
756 {
757 - struct sbus_iommu *iommu = sdev->bus->iommu;
758 - unsigned long flags, size;
759 - u32 base;
760 - int i;
761 + struct sbus_iommu *iommu;
762 + unsigned long flags, npages, i;
763 + u32 bus_addr;
764 +
765 + iommu = sdev->bus->iommu;
766
767 - base = sg[0].dma_address & IO_PAGE_MASK;
768 - for (i = 0; i < nents; i++) {
769 - if (sg[i].dma_length == 0)
770 + bus_addr = sglist[0].dma_address & IO_PAGE_MASK;
771 + for (i = 0; i < nelems; i++) {
772 + if (!sglist[i].dma_length)
773 break;
774 }
775 i--;
776 - size = IO_PAGE_ALIGN(sg[i].dma_address + sg[i].dma_length) - base;
777 + npages = (IO_PAGE_ALIGN(sglist[i].dma_address + sglist[i].dma_length)
778 + - bus_addr) >> IO_PAGE_SHIFT;
779
780 spin_lock_irqsave(&iommu->lock, flags);
781 - sbus_strbuf_flush(iommu, base, size >> IO_PAGE_SHIFT, direction);
782 + sbus_strbuf_flush(iommu, bus_addr, npages, direction);
783 spin_unlock_irqrestore(&iommu->lock, flags);
784 }
785
786 @@ -1104,7 +1028,7 @@ static void __init sbus_iommu_init(int __node, struct sbus_bus *sbus)
787 struct linux_prom64_registers *pr;
788 struct device_node *dp;
789 struct sbus_iommu *iommu;
790 - unsigned long regs, tsb_base;
791 + unsigned long regs;
792 u64 control;
793 int i;
794
795 @@ -1132,14 +1056,6 @@ static void __init sbus_iommu_init(int __node, struct sbus_bus *sbus)
796
797 memset(iommu, 0, sizeof(*iommu));
798
799 - /* We start with no consistent mappings. */
800 - iommu->lowest_consistent_map = CLUSTER_NPAGES;
801 -
802 - for (i = 0; i < NCLUSTERS; i++) {
803 - iommu->alloc_info[i].flush = 0;
804 - iommu->alloc_info[i].next = 0;
805 - }
806 -
807 /* Setup spinlock. */
808 spin_lock_init(&iommu->lock);
809
810 @@ -1159,25 +1075,13 @@ static void __init sbus_iommu_init(int __node, struct sbus_bus *sbus)
811 sbus->portid, regs);
812
813 /* Setup for TSB_SIZE=7, TBW_SIZE=0, MMU_DE=1, MMU_EN=1 */
814 + sbus_iommu_table_init(iommu, IO_TSB_SIZE);
815 +
816 control = upa_readq(iommu->iommu_regs + IOMMU_CONTROL);
817 control = ((7UL << 16UL) |
818 (0UL << 2UL) |
819 (1UL << 1UL) |
820 (1UL << 0UL));
821 -
822 - /* Using the above configuration we need 1MB iommu page
823 - * table (128K ioptes * 8 bytes per iopte). This is
824 - * page order 7 on UltraSparc.
825 - */
826 - tsb_base = __get_free_pages(GFP_ATOMIC, get_order(IO_TSB_SIZE));
827 - if (tsb_base == 0UL) {
828 - prom_printf("sbus_iommu_init: Fatal error, cannot alloc TSB table.\n");
829 - prom_halt();
830 - }
831 -
832 - iommu->page_table = (iopte_t *) tsb_base;
833 - memset(iommu->page_table, 0, IO_TSB_SIZE);
834 -
835 upa_writeq(control, iommu->iommu_regs + IOMMU_CONTROL);
836
837 /* Clean out any cruft in the IOMMU using
838 @@ -1195,7 +1099,7 @@ static void __init sbus_iommu_init(int __node, struct sbus_bus *sbus)
839 upa_readq(iommu->sbus_control_reg);
840
841 /* Give the TSB to SYSIO. */
842 - upa_writeq(__pa(tsb_base), iommu->iommu_regs + IOMMU_TSBBASE);
843 + upa_writeq(__pa(iommu->page_table), iommu->iommu_regs + IOMMU_TSBBASE);
844
845 /* Setup streaming buffer, DE=1 SB_EN=1 */
846 control = (1UL << 1UL) | (1UL << 0UL);
847 diff --git a/arch/sparc64/kernel/sys32.S b/arch/sparc64/kernel/sys32.S
848 index c09ab4b..010a737 100644
849 --- a/arch/sparc64/kernel/sys32.S
850 +++ b/arch/sparc64/kernel/sys32.S
851 @@ -91,7 +91,6 @@ SIGN1(sys32_select, compat_sys_select, %o0)
852 SIGN1(sys32_mkdir, sys_mkdir, %o1)
853 SIGN3(sys32_futex, compat_sys_futex, %o1, %o2, %o5)
854 SIGN1(sys32_sysfs, compat_sys_sysfs, %o0)
855 -SIGN3(sys32_ipc, compat_sys_ipc, %o1, %o2, %o3)
856 SIGN2(sys32_sendfile, compat_sys_sendfile, %o0, %o1)
857 SIGN2(sys32_sendfile64, compat_sys_sendfile64, %o0, %o1)
858 SIGN1(sys32_prctl, sys_prctl, %o0)
859 diff --git a/arch/sparc64/kernel/systbls.S b/arch/sparc64/kernel/systbls.S
860 index 9a80267..46f870b 100644
861 --- a/arch/sparc64/kernel/systbls.S
862 +++ b/arch/sparc64/kernel/systbls.S
863 @@ -62,7 +62,7 @@ sys_call_table32:
864 /*200*/ .word sys32_ssetmask, sys_sigsuspend, compat_sys_newlstat, sys_uselib, compat_sys_old_readdir
865 .word sys32_readahead, sys32_socketcall, sys32_syslog, sys32_lookup_dcookie, sys32_fadvise64
866 /*210*/ .word sys32_fadvise64_64, sys32_tgkill, sys32_waitpid, sys_swapoff, sys32_sysinfo
867 - .word sys32_ipc, sys32_sigreturn, sys_clone, sys32_ioprio_get, compat_sys_adjtimex
868 + .word compat_sys_ipc, sys32_sigreturn, sys_clone, sys32_ioprio_get, compat_sys_adjtimex
869 /*220*/ .word sys32_sigprocmask, sys_ni_syscall, sys32_delete_module, sys_ni_syscall, sys32_getpgid
870 .word sys32_bdflush, sys32_sysfs, sys_nis_syscall, sys32_setfsuid16, sys32_setfsgid16
871 /*230*/ .word sys32_select, compat_sys_time, sys32_splice, compat_sys_stime, compat_sys_statfs64
872 diff --git a/arch/x86_64/boot/video.S b/arch/x86_64/boot/video.S
873 index d6ff88f..6090516 100644
874 --- a/arch/x86_64/boot/video.S
875 +++ b/arch/x86_64/boot/video.S
876 @@ -571,6 +571,16 @@ setr1: lodsw
877 jmp _m_s
878
879 check_vesa:
880 +#ifdef CONFIG_FIRMWARE_EDID
881 + leaw modelist+1024, %di
882 + movw $0x4f00, %ax
883 + int $0x10
884 + cmpw $0x004f, %ax
885 + jnz setbad
886 +
887 + movw 4(%di), %ax
888 + movw %ax, vbe_version
889 +#endif
890 leaw modelist+1024, %di
891 subb $VIDEO_FIRST_VESA>>8, %bh
892 movw %bx, %cx # Get mode information structure
893 @@ -1945,6 +1955,9 @@ store_edid:
894 rep
895 stosl
896
897 + cmpw $0x0200, vbe_version # only do EDID on >= VBE2.0
898 + jl no_edid
899 +
900 pushw %es # save ES
901 xorw %di, %di # Report Capability
902 pushw %di
903 @@ -1987,6 +2000,7 @@ do_restore: .byte 0 # Screen contents altered during mode change
904 svga_prefix: .byte VIDEO_FIRST_BIOS>>8 # Default prefix for BIOS modes
905 graphic_mode: .byte 0 # Graphic mode with a linear frame buffer
906 dac_size: .byte 6 # DAC bit depth
907 +vbe_version: .word 0 # VBE bios version
908
909 # Status messages
910 keymsg: .ascii "Press <RETURN> to see video modes available, "
911 diff --git a/arch/x86_64/kernel/k8.c b/arch/x86_64/kernel/k8.c
912 index 6416682..bc11b32 100644
913 --- a/arch/x86_64/kernel/k8.c
914 +++ b/arch/x86_64/kernel/k8.c
915 @@ -61,8 +61,8 @@ int cache_k8_northbridges(void)
916 dev = NULL;
917 i = 0;
918 while ((dev = next_k8_northbridge(dev)) != NULL) {
919 - k8_northbridges[i++] = dev;
920 - pci_read_config_dword(dev, 0x9c, &flush_words[i]);
921 + k8_northbridges[i] = dev;
922 + pci_read_config_dword(dev, 0x9c, &flush_words[i++]);
923 }
924 k8_northbridges[i] = NULL;
925 return 0;
926 diff --git a/block/cfq-iosched.c b/block/cfq-iosched.c
927 index 07b7062..0280fe6 100644
928 --- a/block/cfq-iosched.c
929 +++ b/block/cfq-iosched.c
930 @@ -462,6 +462,12 @@ static void cfq_add_rq_rb(struct request *rq)
931
932 if (!cfq_cfqq_on_rr(cfqq))
933 cfq_add_cfqq_rr(cfqd, cfqq);
934 +
935 + /*
936 + * check if this request is a better next-serve candidate
937 + */
938 + cfqq->next_rq = cfq_choose_req(cfqd, cfqq->next_rq, rq);
939 + BUG_ON(!cfqq->next_rq);
940 }
941
942 static inline void
943 @@ -1623,12 +1629,6 @@ cfq_rq_enqueued(struct cfq_data *cfqd, struct cfq_queue *cfqq,
944 cfqq->meta_pending++;
945
946 /*
947 - * check if this request is a better next-serve candidate)) {
948 - */
949 - cfqq->next_rq = cfq_choose_req(cfqd, cfqq->next_rq, rq);
950 - BUG_ON(!cfqq->next_rq);
951 -
952 - /*
953 * we never wait for an async request and we don't allow preemption
954 * of an async request. so just return early
955 */
956 diff --git a/drivers/char/agp/intel-agp.c b/drivers/char/agp/intel-agp.c
957 index 84787ce..ed1d380 100644
958 --- a/drivers/char/agp/intel-agp.c
959 +++ b/drivers/char/agp/intel-agp.c
960 @@ -405,9 +405,8 @@ static void intel_i830_init_gtt_entries(void)
961
962 if (IS_I965) {
963 u32 pgetbl_ctl;
964 + pgetbl_ctl = readl(intel_i830_private.registers+I810_PGETBL_CTL);
965
966 - pci_read_config_dword(agp_bridge->dev, I810_PGETBL_CTL,
967 - &pgetbl_ctl);
968 /* The 965 has a field telling us the size of the GTT,
969 * which may be larger than what is necessary to map the
970 * aperture.
971 diff --git a/drivers/char/mem.c b/drivers/char/mem.c
972 index f5c160c..5f06696 100644
973 --- a/drivers/char/mem.c
974 +++ b/drivers/char/mem.c
975 @@ -248,7 +248,7 @@ static unsigned long get_unmapped_area_mem(struct file *file,
976 {
977 if (!valid_mmap_phys_addr_range(pgoff, len))
978 return (unsigned long) -EINVAL;
979 - return pgoff;
980 + return pgoff << PAGE_SHIFT;
981 }
982
983 /* can't do an in-place private mapping if there's no MMU */
984 diff --git a/drivers/char/vt_ioctl.c b/drivers/char/vt_ioctl.c
985 index dc8368e..60740a1 100644
986 --- a/drivers/char/vt_ioctl.c
987 +++ b/drivers/char/vt_ioctl.c
988 @@ -1038,10 +1038,22 @@ int vt_waitactive(int vt)
989
990 add_wait_queue(&vt_activate_queue, &wait);
991 for (;;) {
992 - set_current_state(TASK_INTERRUPTIBLE);
993 retval = 0;
994 - if (vt == fg_console)
995 +
996 + /*
997 + * Synchronize with redraw_screen(). By acquiring the console
998 + * semaphore we make sure that the console switch is completed
999 + * before we return. If we didn't wait for the semaphore, we
1000 + * could return at a point where fg_console has already been
1001 + * updated, but the console switch hasn't been completed.
1002 + */
1003 + acquire_console_sem();
1004 + set_current_state(TASK_INTERRUPTIBLE);
1005 + if (vt == fg_console) {
1006 + release_console_sem();
1007 break;
1008 + }
1009 + release_console_sem();
1010 retval = -EINTR;
1011 if (signal_pending(current))
1012 break;
1013 diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c
1014 index 1ecad3e..f6fb5b3 100644
1015 --- a/drivers/hid/hid-core.c
1016 +++ b/drivers/hid/hid-core.c
1017 @@ -876,10 +876,6 @@ static void hid_output_field(struct hid_field *field, __u8 *data)
1018 unsigned size = field->report_size;
1019 unsigned n;
1020
1021 - /* make sure the unused bits in the last byte are zeros */
1022 - if (count > 0 && size > 0)
1023 - data[(count*size-1)/8] = 0;
1024 -
1025 for (n = 0; n < count; n++) {
1026 if (field->logical_minimum < 0) /* signed values */
1027 implement(data, offset + n * size, size, s32ton(field->value[n], size));
1028 diff --git a/drivers/hwmon/w83627ehf.c b/drivers/hwmon/w83627ehf.c
1029 index 212a155..b9d5dd4 100644
1030 --- a/drivers/hwmon/w83627ehf.c
1031 +++ b/drivers/hwmon/w83627ehf.c
1032 @@ -389,7 +389,7 @@ static void w83627ehf_write_fan_div(struct i2c_client *client, int nr)
1033 break;
1034 case 4:
1035 reg = (w83627ehf_read_value(client, W83627EHF_REG_DIODE) & 0x73)
1036 - | ((data->fan_div[4] & 0x03) << 3)
1037 + | ((data->fan_div[4] & 0x03) << 2)
1038 | ((data->fan_div[4] & 0x04) << 5);
1039 w83627ehf_write_value(client, W83627EHF_REG_DIODE, reg);
1040 break;
1041 @@ -453,9 +453,9 @@ static struct w83627ehf_data *w83627ehf_update_device(struct device *dev)
1042 time */
1043 if (data->fan[i] == 0xff
1044 && data->fan_div[i] < 0x07) {
1045 - dev_dbg(&client->dev, "Increasing fan %d "
1046 + dev_dbg(&client->dev, "Increasing fan%d "
1047 "clock divider from %u to %u\n",
1048 - i, div_from_reg(data->fan_div[i]),
1049 + i + 1, div_from_reg(data->fan_div[i]),
1050 div_from_reg(data->fan_div[i] + 1));
1051 data->fan_div[i]++;
1052 w83627ehf_write_fan_div(client, i);
1053 diff --git a/drivers/infiniband/hw/mthca/mthca_mr.c b/drivers/infiniband/hw/mthca/mthca_mr.c
1054 index f71ffa8..58012ac 100644
1055 --- a/drivers/infiniband/hw/mthca/mthca_mr.c
1056 +++ b/drivers/infiniband/hw/mthca/mthca_mr.c
1057 @@ -751,6 +751,7 @@ void mthca_arbel_fmr_unmap(struct mthca_dev *dev, struct mthca_fmr *fmr)
1058
1059 key = arbel_key_to_hw_index(fmr->ibmr.lkey);
1060 key &= dev->limits.num_mpts - 1;
1061 + key = adjust_key(dev, key);
1062 fmr->ibmr.lkey = fmr->ibmr.rkey = arbel_hw_index_to_key(key);
1063
1064 fmr->maps = 0;
1065 diff --git a/drivers/kvm/mmu.c b/drivers/kvm/mmu.c
1066 index 22c426c..1b5e189 100644
1067 --- a/drivers/kvm/mmu.c
1068 +++ b/drivers/kvm/mmu.c
1069 @@ -131,7 +131,7 @@ static int dbg = 1;
1070 (((address) >> PT32_LEVEL_SHIFT(level)) & ((1 << PT32_LEVEL_BITS) - 1))
1071
1072
1073 -#define PT64_BASE_ADDR_MASK (((1ULL << 52) - 1) & PAGE_MASK)
1074 +#define PT64_BASE_ADDR_MASK (((1ULL << 52) - 1) & ~(u64)(PAGE_SIZE-1))
1075 #define PT64_DIR_BASE_ADDR_MASK \
1076 (PT64_BASE_ADDR_MASK & ~((1ULL << (PAGE_SHIFT + PT64_LEVEL_BITS)) - 1))
1077
1078 @@ -406,8 +406,8 @@ static void rmap_write_protect(struct kvm_vcpu *vcpu, u64 gfn)
1079 spte = desc->shadow_ptes[0];
1080 }
1081 BUG_ON(!spte);
1082 - BUG_ON((*spte & PT64_BASE_ADDR_MASK) !=
1083 - page_to_pfn(page) << PAGE_SHIFT);
1084 + BUG_ON((*spte & PT64_BASE_ADDR_MASK) >> PAGE_SHIFT
1085 + != page_to_pfn(page));
1086 BUG_ON(!(*spte & PT_PRESENT_MASK));
1087 BUG_ON(!(*spte & PT_WRITABLE_MASK));
1088 rmap_printk("rmap_write_protect: spte %p %llx\n", spte, *spte);
1089 @@ -1093,22 +1093,40 @@ out:
1090 return r;
1091 }
1092
1093 +static void mmu_pre_write_zap_pte(struct kvm_vcpu *vcpu,
1094 + struct kvm_mmu_page *page,
1095 + u64 *spte)
1096 +{
1097 + u64 pte;
1098 + struct kvm_mmu_page *child;
1099 +
1100 + pte = *spte;
1101 + if (is_present_pte(pte)) {
1102 + if (page->role.level == PT_PAGE_TABLE_LEVEL)
1103 + rmap_remove(vcpu, spte);
1104 + else {
1105 + child = page_header(pte & PT64_BASE_ADDR_MASK);
1106 + mmu_page_remove_parent_pte(vcpu, child, spte);
1107 + }
1108 + }
1109 + *spte = 0;
1110 +}
1111 +
1112 void kvm_mmu_pre_write(struct kvm_vcpu *vcpu, gpa_t gpa, int bytes)
1113 {
1114 gfn_t gfn = gpa >> PAGE_SHIFT;
1115 struct kvm_mmu_page *page;
1116 - struct kvm_mmu_page *child;
1117 struct hlist_node *node, *n;
1118 struct hlist_head *bucket;
1119 unsigned index;
1120 u64 *spte;
1121 - u64 pte;
1122 unsigned offset = offset_in_page(gpa);
1123 unsigned pte_size;
1124 unsigned page_offset;
1125 unsigned misaligned;
1126 int level;
1127 int flooded = 0;
1128 + int npte;
1129
1130 pgprintk("%s: gpa %llx bytes %d\n", __FUNCTION__, gpa, bytes);
1131 if (gfn == vcpu->last_pt_write_gfn) {
1132 @@ -1144,22 +1162,27 @@ void kvm_mmu_pre_write(struct kvm_vcpu *vcpu, gpa_t gpa, int bytes)
1133 }
1134 page_offset = offset;
1135 level = page->role.level;
1136 + npte = 1;
1137 if (page->role.glevels == PT32_ROOT_LEVEL) {
1138 - page_offset <<= 1; /* 32->64 */
1139 + page_offset <<= 1; /* 32->64 */
1140 + /*
1141 + * A 32-bit pde maps 4MB while the shadow pdes map
1142 + * only 2MB. So we need to double the offset again
1143 + * and zap two pdes instead of one.
1144 + */
1145 + if (level == PT32_ROOT_LEVEL) {
1146 + page_offset &= ~7; /* kill rounding error */
1147 + page_offset <<= 1;
1148 + npte = 2;
1149 + }
1150 page_offset &= ~PAGE_MASK;
1151 }
1152 spte = __va(page->page_hpa);
1153 spte += page_offset / sizeof(*spte);
1154 - pte = *spte;
1155 - if (is_present_pte(pte)) {
1156 - if (level == PT_PAGE_TABLE_LEVEL)
1157 - rmap_remove(vcpu, spte);
1158 - else {
1159 - child = page_header(pte & PT64_BASE_ADDR_MASK);
1160 - mmu_page_remove_parent_pte(vcpu, child, spte);
1161 - }
1162 + while (npte--) {
1163 + mmu_pre_write_zap_pte(vcpu, page, spte);
1164 + ++spte;
1165 }
1166 - *spte = 0;
1167 }
1168 }
1169
1170 diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c
1171 index 0252ef9..0e0401d 100644
1172 --- a/drivers/pci/probe.c
1173 +++ b/drivers/pci/probe.c
1174 @@ -639,34 +639,7 @@ static void pci_read_irq(struct pci_dev *dev)
1175 dev->irq = irq;
1176 }
1177
1178 -static void change_legacy_io_resource(struct pci_dev * dev, unsigned index,
1179 - unsigned start, unsigned end)
1180 -{
1181 - unsigned base = start & PCI_BASE_ADDRESS_IO_MASK;
1182 - unsigned len = (end | ~PCI_BASE_ADDRESS_IO_MASK) - base + 1;
1183 -
1184 - /*
1185 - * Some X versions get confused when the BARs reported through
1186 - * /sys or /proc differ from those seen in config space, thus
1187 - * try to update the config space values, too.
1188 - */
1189 - if (!(pci_resource_flags(dev, index) & IORESOURCE_IO))
1190 - printk(KERN_WARNING "%s: cannot adjust BAR%u (not I/O)\n",
1191 - pci_name(dev), index);
1192 - else if (pci_resource_len(dev, index) != len)
1193 - printk(KERN_WARNING "%s: cannot adjust BAR%u (size %04X)\n",
1194 - pci_name(dev), index, (unsigned)pci_resource_len(dev, index));
1195 - else {
1196 - printk(KERN_INFO "%s: trying to change BAR%u from %04X to %04X\n",
1197 - pci_name(dev), index,
1198 - (unsigned)pci_resource_start(dev, index), base);
1199 - pci_write_config_dword(dev, PCI_BASE_ADDRESS_0 + index * 4, base);
1200 - }
1201 - pci_resource_start(dev, index) = start;
1202 - pci_resource_end(dev, index) = end;
1203 - pci_resource_flags(dev, index) =
1204 - IORESOURCE_IO | IORESOURCE_PCI_FIXED | PCI_BASE_ADDRESS_SPACE_IO;
1205 -}
1206 +#define LEGACY_IO_RESOURCE (IORESOURCE_IO | IORESOURCE_PCI_FIXED)
1207
1208 /**
1209 * pci_setup_device - fill in class and map information of a device
1210 @@ -719,12 +692,20 @@ static int pci_setup_device(struct pci_dev * dev)
1211 u8 progif;
1212 pci_read_config_byte(dev, PCI_CLASS_PROG, &progif);
1213 if ((progif & 1) == 0) {
1214 - change_legacy_io_resource(dev, 0, 0x1F0, 0x1F7);
1215 - change_legacy_io_resource(dev, 1, 0x3F6, 0x3F6);
1216 + dev->resource[0].start = 0x1F0;
1217 + dev->resource[0].end = 0x1F7;
1218 + dev->resource[0].flags = LEGACY_IO_RESOURCE;
1219 + dev->resource[1].start = 0x3F6;
1220 + dev->resource[1].end = 0x3F6;
1221 + dev->resource[1].flags = LEGACY_IO_RESOURCE;
1222 }
1223 if ((progif & 4) == 0) {
1224 - change_legacy_io_resource(dev, 2, 0x170, 0x177);
1225 - change_legacy_io_resource(dev, 3, 0x376, 0x376);
1226 + dev->resource[2].start = 0x170;
1227 + dev->resource[2].end = 0x177;
1228 + dev->resource[2].flags = LEGACY_IO_RESOURCE;
1229 + dev->resource[3].start = 0x376;
1230 + dev->resource[3].end = 0x376;
1231 + dev->resource[3].flags = LEGACY_IO_RESOURCE;
1232 }
1233 }
1234 break;
1235 diff --git a/drivers/scsi/3w-xxxx.c b/drivers/scsi/3w-xxxx.c
1236 index e1b44d6..2981ceb 100644
1237 --- a/drivers/scsi/3w-xxxx.c
1238 +++ b/drivers/scsi/3w-xxxx.c
1239 @@ -1864,10 +1864,17 @@ static int tw_scsiop_read_write(TW_Device_Extension *tw_dev, int request_id)
1240 /* This function will handle the request sense scsi command */
1241 static int tw_scsiop_request_sense(TW_Device_Extension *tw_dev, int request_id)
1242 {
1243 + char request_buffer[18];
1244 +
1245 dprintk(KERN_NOTICE "3w-xxxx: tw_scsiop_request_sense()\n");
1246
1247 - /* For now we just zero the request buffer */
1248 - memset(tw_dev->srb[request_id]->request_buffer, 0, tw_dev->srb[request_id]->request_bufflen);
1249 + memset(request_buffer, 0, sizeof(request_buffer));
1250 + request_buffer[0] = 0x70; /* Immediate fixed format */
1251 + request_buffer[7] = 10; /* minimum size per SPC: 18 bytes */
1252 + /* leave all other fields zero, giving effectively NO_SENSE return */
1253 + tw_transfer_internal(tw_dev, request_id, request_buffer,
1254 + sizeof(request_buffer));
1255 +
1256 tw_dev->state[request_id] = TW_S_COMPLETED;
1257 tw_state_request_finish(tw_dev, request_id);
1258
1259 diff --git a/drivers/scsi/qlogicpti.c b/drivers/scsi/qlogicpti.c
1260 index 9b827ce..9f10689 100644
1261 --- a/drivers/scsi/qlogicpti.c
1262 +++ b/drivers/scsi/qlogicpti.c
1263 @@ -1281,7 +1281,7 @@ static struct scsi_cmnd *qlogicpti_intr_handler(struct qlogicpti *qpti)
1264 (struct scatterlist *)Cmnd->request_buffer,
1265 Cmnd->use_sg,
1266 Cmnd->sc_data_direction);
1267 - } else {
1268 + } else if (Cmnd->request_bufflen) {
1269 sbus_unmap_single(qpti->sdev,
1270 (__u32)((unsigned long)Cmnd->SCp.ptr),
1271 Cmnd->request_bufflen,
1272 diff --git a/drivers/serial/8250.c b/drivers/serial/8250.c
1273 index 5261f0a..2e542b9 100644
1274 --- a/drivers/serial/8250.c
1275 +++ b/drivers/serial/8250.c
1276 @@ -1289,7 +1289,8 @@ static unsigned int check_modem_status(struct uart_8250_port *up)
1277 {
1278 unsigned int status = serial_in(up, UART_MSR);
1279
1280 - if (status & UART_MSR_ANY_DELTA && up->ier & UART_IER_MSI) {
1281 + if (status & UART_MSR_ANY_DELTA && up->ier & UART_IER_MSI &&
1282 + up->port.info != NULL) {
1283 if (status & UART_MSR_TERI)
1284 up->port.icount.rng++;
1285 if (status & UART_MSR_DDSR)
1286 diff --git a/fs/exec.c b/fs/exec.c
1287 index 11fe93f..0f8573a 100644
1288 --- a/fs/exec.c
1289 +++ b/fs/exec.c
1290 @@ -1246,13 +1246,17 @@ EXPORT_SYMBOL(set_binfmt);
1291 * name into corename, which must have space for at least
1292 * CORENAME_MAX_SIZE bytes plus one byte for the zero terminator.
1293 */
1294 -static void format_corename(char *corename, const char *pattern, long signr)
1295 +static int format_corename(char *corename, const char *pattern, long signr)
1296 {
1297 const char *pat_ptr = pattern;
1298 char *out_ptr = corename;
1299 char *const out_end = corename + CORENAME_MAX_SIZE;
1300 int rc;
1301 int pid_in_pattern = 0;
1302 + int ispipe = 0;
1303 +
1304 + if (*pattern == '|')
1305 + ispipe = 1;
1306
1307 /* Repeat as long as we have more pattern to process and more output
1308 space */
1309 @@ -1343,8 +1347,8 @@ static void format_corename(char *corename, const char *pattern, long signr)
1310 *
1311 * If core_pattern does not include a %p (as is the default)
1312 * and core_uses_pid is set, then .%pid will be appended to
1313 - * the filename */
1314 - if (!pid_in_pattern
1315 + * the filename. Do not do this for piped commands. */
1316 + if (!ispipe && !pid_in_pattern
1317 && (core_uses_pid || atomic_read(&current->mm->mm_users) != 1)) {
1318 rc = snprintf(out_ptr, out_end - out_ptr,
1319 ".%d", current->tgid);
1320 @@ -1352,8 +1356,9 @@ static void format_corename(char *corename, const char *pattern, long signr)
1321 goto out;
1322 out_ptr += rc;
1323 }
1324 - out:
1325 +out:
1326 *out_ptr = 0;
1327 + return ispipe;
1328 }
1329
1330 static void zap_process(struct task_struct *start)
1331 @@ -1504,16 +1509,15 @@ int do_coredump(long signr, int exit_code, struct pt_regs * regs)
1332 * uses lock_kernel()
1333 */
1334 lock_kernel();
1335 - format_corename(corename, core_pattern, signr);
1336 + ispipe = format_corename(corename, core_pattern, signr);
1337 unlock_kernel();
1338 - if (corename[0] == '|') {
1339 + if (ispipe) {
1340 /* SIGPIPE can happen, but it's just never processed */
1341 if(call_usermodehelper_pipe(corename+1, NULL, NULL, &file)) {
1342 printk(KERN_INFO "Core dump to %s pipe failed\n",
1343 corename);
1344 goto fail_unlock;
1345 }
1346 - ispipe = 1;
1347 } else
1348 file = filp_open(corename,
1349 O_CREAT | 2 | O_NOFOLLOW | O_LARGEFILE | flag,
1350 diff --git a/fs/nfs/dir.c b/fs/nfs/dir.c
1351 index d9ba8cb..80b4264 100644
1352 --- a/fs/nfs/dir.c
1353 +++ b/fs/nfs/dir.c
1354 @@ -1659,7 +1659,8 @@ go_ahead:
1355 * ... prune child dentries and writebacks if needed.
1356 */
1357 if (atomic_read(&old_dentry->d_count) > 1) {
1358 - nfs_wb_all(old_inode);
1359 + if (S_ISREG(old_inode->i_mode))
1360 + nfs_wb_all(old_inode);
1361 shrink_dcache_parent(old_dentry);
1362 }
1363 nfs_inode_return_delegation(old_inode);
1364 diff --git a/fs/nfs/inode.c b/fs/nfs/inode.c
1365 index 5a83e8d..e8cacef 100644
1366 --- a/fs/nfs/inode.c
1367 +++ b/fs/nfs/inode.c
1368 @@ -334,8 +334,10 @@ nfs_setattr(struct dentry *dentry, struct iattr *attr)
1369 lock_kernel();
1370 nfs_begin_data_update(inode);
1371 /* Write all dirty data */
1372 - filemap_write_and_wait(inode->i_mapping);
1373 - nfs_wb_all(inode);
1374 + if (S_ISREG(inode->i_mode)) {
1375 + filemap_write_and_wait(inode->i_mapping);
1376 + nfs_wb_all(inode);
1377 + }
1378 /*
1379 * Return any delegations if we're going to change ACLs
1380 */
1381 diff --git a/fs/reiserfs/xattr.c b/fs/reiserfs/xattr.c
1382 index f01389f..c8178b7 100644
1383 --- a/fs/reiserfs/xattr.c
1384 +++ b/fs/reiserfs/xattr.c
1385 @@ -54,82 +54,48 @@
1386 static struct reiserfs_xattr_handler *find_xattr_handler_prefix(const char
1387 *prefix);
1388
1389 -static struct dentry *create_xa_root(struct super_block *sb)
1390 +/* Returns the dentry referring to the root of the extended attribute
1391 + * directory tree. If it has already been retrieved, it is used. If it
1392 + * hasn't been created and the flags indicate creation is allowed, we
1393 + * attempt to create it. On error, we return a pointer-encoded error.
1394 + */
1395 +static struct dentry *get_xa_root(struct super_block *sb, int flags)
1396 {
1397 struct dentry *privroot = dget(REISERFS_SB(sb)->priv_root);
1398 struct dentry *xaroot;
1399
1400 /* This needs to be created at mount-time */
1401 if (!privroot)
1402 - return ERR_PTR(-EOPNOTSUPP);
1403 + return ERR_PTR(-ENODATA);
1404
1405 - xaroot = lookup_one_len(XAROOT_NAME, privroot, strlen(XAROOT_NAME));
1406 - if (IS_ERR(xaroot)) {
1407 + mutex_lock(&privroot->d_inode->i_mutex);
1408 + if (REISERFS_SB(sb)->xattr_root) {
1409 + xaroot = dget(REISERFS_SB(sb)->xattr_root);
1410 goto out;
1411 - } else if (!xaroot->d_inode) {
1412 - int err;
1413 - mutex_lock(&privroot->d_inode->i_mutex);
1414 - err =
1415 - privroot->d_inode->i_op->mkdir(privroot->d_inode, xaroot,
1416 - 0700);
1417 - mutex_unlock(&privroot->d_inode->i_mutex);
1418 -
1419 - if (err) {
1420 - dput(xaroot);
1421 - dput(privroot);
1422 - return ERR_PTR(err);
1423 - }
1424 - REISERFS_SB(sb)->xattr_root = dget(xaroot);
1425 }
1426
1427 - out:
1428 - dput(privroot);
1429 - return xaroot;
1430 -}
1431 -
1432 -/* This will return a dentry, or error, refering to the xa root directory.
1433 - * If the xa root doesn't exist yet, the dentry will be returned without
1434 - * an associated inode. This dentry can be used with ->mkdir to create
1435 - * the xa directory. */
1436 -static struct dentry *__get_xa_root(struct super_block *s)
1437 -{
1438 - struct dentry *privroot = dget(REISERFS_SB(s)->priv_root);
1439 - struct dentry *xaroot = NULL;
1440 -
1441 - if (IS_ERR(privroot) || !privroot)
1442 - return privroot;
1443 -
1444 xaroot = lookup_one_len(XAROOT_NAME, privroot, strlen(XAROOT_NAME));
1445 if (IS_ERR(xaroot)) {
1446 goto out;
1447 } else if (!xaroot->d_inode) {
1448 - dput(xaroot);
1449 - xaroot = NULL;
1450 - goto out;
1451 + int err = -ENODATA;
1452 + if (flags == 0 || flags & XATTR_CREATE)
1453 + err = privroot->d_inode->i_op->mkdir(privroot->d_inode,
1454 + xaroot, 0700);
1455 + if (err) {
1456 + dput(xaroot);
1457 + xaroot = ERR_PTR(err);
1458 + goto out;
1459 + }
1460 }
1461 -
1462 - REISERFS_SB(s)->xattr_root = dget(xaroot);
1463 + REISERFS_SB(sb)->xattr_root = dget(xaroot);
1464
1465 out:
1466 + mutex_unlock(&privroot->d_inode->i_mutex);
1467 dput(privroot);
1468 return xaroot;
1469 }
1470
1471 -/* Returns the dentry (or NULL) referring to the root of the extended
1472 - * attribute directory tree. If it has already been retrieved, it is used.
1473 - * Otherwise, we attempt to retrieve it from disk. It may also return
1474 - * a pointer-encoded error.
1475 - */
1476 -static inline struct dentry *get_xa_root(struct super_block *s)
1477 -{
1478 - struct dentry *dentry = dget(REISERFS_SB(s)->xattr_root);
1479 -
1480 - if (!dentry)
1481 - dentry = __get_xa_root(s);
1482 -
1483 - return dentry;
1484 -}
1485 -
1486 /* Opens the directory corresponding to the inode's extended attribute store.
1487 * If flags allow, the tree to the directory may be created. If creation is
1488 * prohibited, -ENODATA is returned. */
1489 @@ -138,21 +104,11 @@ static struct dentry *open_xa_dir(const struct inode *inode, int flags)
1490 struct dentry *xaroot, *xadir;
1491 char namebuf[17];
1492
1493 - xaroot = get_xa_root(inode->i_sb);
1494 - if (IS_ERR(xaroot)) {
1495 + xaroot = get_xa_root(inode->i_sb, flags);
1496 + if (IS_ERR(xaroot))
1497 return xaroot;
1498 - } else if (!xaroot) {
1499 - if (flags == 0 || flags & XATTR_CREATE) {
1500 - xaroot = create_xa_root(inode->i_sb);
1501 - if (IS_ERR(xaroot))
1502 - return xaroot;
1503 - }
1504 - if (!xaroot)
1505 - return ERR_PTR(-ENODATA);
1506 - }
1507
1508 /* ok, we have xaroot open */
1509 -
1510 snprintf(namebuf, sizeof(namebuf), "%X.%X",
1511 le32_to_cpu(INODE_PKEY(inode)->k_objectid),
1512 inode->i_generation);
1513 @@ -821,7 +777,7 @@ int reiserfs_delete_xattrs(struct inode *inode)
1514
1515 /* Leftovers besides . and .. -- that's not good. */
1516 if (dir->d_inode->i_nlink <= 2) {
1517 - root = get_xa_root(inode->i_sb);
1518 + root = get_xa_root(inode->i_sb, XATTR_REPLACE);
1519 reiserfs_write_lock_xattrs(inode->i_sb);
1520 err = vfs_rmdir(root->d_inode, dir);
1521 reiserfs_write_unlock_xattrs(inode->i_sb);
1522 diff --git a/include/linux/taskstats.h b/include/linux/taskstats.h
1523 index 3fced47..a46104a 100644
1524 --- a/include/linux/taskstats.h
1525 +++ b/include/linux/taskstats.h
1526 @@ -31,7 +31,7 @@
1527 */
1528
1529
1530 -#define TASKSTATS_VERSION 3
1531 +#define TASKSTATS_VERSION 4
1532 #define TS_COMM_LEN 32 /* should be >= TASK_COMM_LEN
1533 * in linux/sched.h */
1534
1535 @@ -66,7 +66,7 @@ struct taskstats {
1536 /* Delay waiting for cpu, while runnable
1537 * count, delay_total NOT updated atomically
1538 */
1539 - __u64 cpu_count;
1540 + __u64 cpu_count __attribute__((aligned(8)));
1541 __u64 cpu_delay_total;
1542
1543 /* Following four fields atomically updated using task->delays->lock */
1544 @@ -101,14 +101,17 @@ struct taskstats {
1545
1546 /* Basic Accounting Fields start */
1547 char ac_comm[TS_COMM_LEN]; /* Command name */
1548 - __u8 ac_sched; /* Scheduling discipline */
1549 + __u8 ac_sched __attribute__((aligned(8)));
1550 + /* Scheduling discipline */
1551 __u8 ac_pad[3];
1552 - __u32 ac_uid; /* User ID */
1553 + __u32 ac_uid __attribute__((aligned(8)));
1554 + /* User ID */
1555 __u32 ac_gid; /* Group ID */
1556 __u32 ac_pid; /* Process ID */
1557 __u32 ac_ppid; /* Parent process ID */
1558 __u32 ac_btime; /* Begin time [sec since 1970] */
1559 - __u64 ac_etime; /* Elapsed time [usec] */
1560 + __u64 ac_etime __attribute__((aligned(8)));
1561 + /* Elapsed time [usec] */
1562 __u64 ac_utime; /* User CPU time [usec] */
1563 __u64 ac_stime; /* SYstem CPU time [usec] */
1564 __u64 ac_minflt; /* Minor Page Fault Count */
1565 diff --git a/mm/madvise.c b/mm/madvise.c
1566 index 77916e9..603c525 100644
1567 --- a/mm/madvise.c
1568 +++ b/mm/madvise.c
1569 @@ -159,9 +159,10 @@ static long madvise_remove(struct vm_area_struct *vma,
1570 unsigned long start, unsigned long end)
1571 {
1572 struct address_space *mapping;
1573 - loff_t offset, endoff;
1574 + loff_t offset, endoff;
1575 + int error;
1576
1577 - *prev = vma;
1578 + *prev = NULL; /* tell sys_madvise we drop mmap_sem */
1579
1580 if (vma->vm_flags & (VM_LOCKED|VM_NONLINEAR|VM_HUGETLB))
1581 return -EINVAL;
1582 @@ -180,7 +181,12 @@ static long madvise_remove(struct vm_area_struct *vma,
1583 + ((loff_t)vma->vm_pgoff << PAGE_SHIFT);
1584 endoff = (loff_t)(end - vma->vm_start - 1)
1585 + ((loff_t)vma->vm_pgoff << PAGE_SHIFT);
1586 - return vmtruncate_range(mapping->host, offset, endoff);
1587 +
1588 + /* vmtruncate_range needs to take i_mutex and i_alloc_sem */
1589 + up_write(&current->mm->mmap_sem);
1590 + error = vmtruncate_range(mapping->host, offset, endoff);
1591 + down_write(&current->mm->mmap_sem);
1592 + return error;
1593 }
1594
1595 static long
1596 @@ -315,12 +321,15 @@ asmlinkage long sys_madvise(unsigned long start, size_t len_in, int behavior)
1597 if (error)
1598 goto out;
1599 start = tmp;
1600 - if (start < prev->vm_end)
1601 + if (prev && start < prev->vm_end)
1602 start = prev->vm_end;
1603 error = unmapped_error;
1604 if (start >= end)
1605 goto out;
1606 - vma = prev->vm_next;
1607 + if (prev)
1608 + vma = prev->vm_next;
1609 + else /* madvise_remove dropped mmap_sem */
1610 + vma = find_vma(current->mm, start);
1611 }
1612 out:
1613 up_write(&current->mm->mmap_sem);
1614 diff --git a/mm/migrate.c b/mm/migrate.c
1615 index e9b161b..4372d6b 100644
1616 --- a/mm/migrate.c
1617 +++ b/mm/migrate.c
1618 @@ -297,7 +297,7 @@ static int migrate_page_move_mapping(struct address_space *mapping,
1619 void **pslot;
1620
1621 if (!mapping) {
1622 - /* Anonymous page */
1623 + /* Anonymous page without mapping */
1624 if (page_count(page) != 1)
1625 return -EAGAIN;
1626 return 0;
1627 @@ -333,6 +333,19 @@ static int migrate_page_move_mapping(struct address_space *mapping,
1628 */
1629 __put_page(page);
1630
1631 + /*
1632 + * If moved to a different zone then also account
1633 + * the page for that zone. Other VM counters will be
1634 + * taken care of when we establish references to the
1635 + * new page and drop references to the old page.
1636 + *
1637 + * Note that anonymous pages are accounted for
1638 + * via NR_FILE_PAGES and NR_ANON_PAGES if they
1639 + * are mapped to swap space.
1640 + */
1641 + __dec_zone_page_state(page, NR_FILE_PAGES);
1642 + __inc_zone_page_state(newpage, NR_FILE_PAGES);
1643 +
1644 write_unlock_irq(&mapping->tree_lock);
1645
1646 return 0;
1647 diff --git a/mm/oom_kill.c b/mm/oom_kill.c
1648 index 2f39169..223add3 100644
1649 --- a/mm/oom_kill.c
1650 +++ b/mm/oom_kill.c
1651 @@ -176,6 +176,8 @@ static inline int constrained_alloc(struct zonelist *zonelist, gfp_t gfp_mask)
1652 struct zone **z;
1653 nodemask_t nodes;
1654 int node;
1655 +
1656 + nodes_clear(nodes);
1657 /* node has memory ? */
1658 for_each_online_node(node)
1659 if (NODE_DATA(node)->node_present_pages)
1660 diff --git a/mm/shmem.c b/mm/shmem.c
1661 index 70da7a0..fc30c59 100644
1662 --- a/mm/shmem.c
1663 +++ b/mm/shmem.c
1664 @@ -402,26 +402,38 @@ static swp_entry_t *shmem_swp_alloc(struct shmem_inode_info *info, unsigned long
1665 /*
1666 * shmem_free_swp - free some swap entries in a directory
1667 *
1668 - * @dir: pointer to the directory
1669 - * @edir: pointer after last entry of the directory
1670 + * @dir: pointer to the directory
1671 + * @edir: pointer after last entry of the directory
1672 + * @punch_lock: pointer to spinlock when needed for the holepunch case
1673 */
1674 -static int shmem_free_swp(swp_entry_t *dir, swp_entry_t *edir)
1675 +static int shmem_free_swp(swp_entry_t *dir, swp_entry_t *edir,
1676 + spinlock_t *punch_lock)
1677 {
1678 + spinlock_t *punch_unlock = NULL;
1679 swp_entry_t *ptr;
1680 int freed = 0;
1681
1682 for (ptr = dir; ptr < edir; ptr++) {
1683 if (ptr->val) {
1684 + if (unlikely(punch_lock)) {
1685 + punch_unlock = punch_lock;
1686 + punch_lock = NULL;
1687 + spin_lock(punch_unlock);
1688 + if (!ptr->val)
1689 + continue;
1690 + }
1691 free_swap_and_cache(*ptr);
1692 *ptr = (swp_entry_t){0};
1693 freed++;
1694 }
1695 }
1696 + if (punch_unlock)
1697 + spin_unlock(punch_unlock);
1698 return freed;
1699 }
1700
1701 -static int shmem_map_and_free_swp(struct page *subdir,
1702 - int offset, int limit, struct page ***dir)
1703 +static int shmem_map_and_free_swp(struct page *subdir, int offset,
1704 + int limit, struct page ***dir, spinlock_t *punch_lock)
1705 {
1706 swp_entry_t *ptr;
1707 int freed = 0;
1708 @@ -431,7 +443,8 @@ static int shmem_map_and_free_swp(struct page *subdir,
1709 int size = limit - offset;
1710 if (size > LATENCY_LIMIT)
1711 size = LATENCY_LIMIT;
1712 - freed += shmem_free_swp(ptr+offset, ptr+offset+size);
1713 + freed += shmem_free_swp(ptr+offset, ptr+offset+size,
1714 + punch_lock);
1715 if (need_resched()) {
1716 shmem_swp_unmap(ptr);
1717 if (*dir) {
1718 @@ -481,7 +494,10 @@ static void shmem_truncate_range(struct inode *inode, loff_t start, loff_t end)
1719 long nr_swaps_freed = 0;
1720 int offset;
1721 int freed;
1722 - int punch_hole = 0;
1723 + int punch_hole;
1724 + spinlock_t *needs_lock;
1725 + spinlock_t *punch_lock;
1726 + unsigned long upper_limit;
1727
1728 inode->i_ctime = inode->i_mtime = CURRENT_TIME;
1729 idx = (start + PAGE_CACHE_SIZE - 1) >> PAGE_CACHE_SHIFT;
1730 @@ -492,11 +508,20 @@ static void shmem_truncate_range(struct inode *inode, loff_t start, loff_t end)
1731 info->flags |= SHMEM_TRUNCATE;
1732 if (likely(end == (loff_t) -1)) {
1733 limit = info->next_index;
1734 + upper_limit = SHMEM_MAX_INDEX;
1735 info->next_index = idx;
1736 + needs_lock = NULL;
1737 + punch_hole = 0;
1738 } else {
1739 - limit = (end + PAGE_CACHE_SIZE - 1) >> PAGE_CACHE_SHIFT;
1740 - if (limit > info->next_index)
1741 - limit = info->next_index;
1742 + if (end + 1 >= inode->i_size) { /* we may free a little more */
1743 + limit = (inode->i_size + PAGE_CACHE_SIZE - 1) >>
1744 + PAGE_CACHE_SHIFT;
1745 + upper_limit = SHMEM_MAX_INDEX;
1746 + } else {
1747 + limit = (end + 1) >> PAGE_CACHE_SHIFT;
1748 + upper_limit = limit;
1749 + }
1750 + needs_lock = &info->lock;
1751 punch_hole = 1;
1752 }
1753
1754 @@ -513,17 +538,30 @@ static void shmem_truncate_range(struct inode *inode, loff_t start, loff_t end)
1755 size = limit;
1756 if (size > SHMEM_NR_DIRECT)
1757 size = SHMEM_NR_DIRECT;
1758 - nr_swaps_freed = shmem_free_swp(ptr+idx, ptr+size);
1759 + nr_swaps_freed = shmem_free_swp(ptr+idx, ptr+size, needs_lock);
1760 }
1761
1762 /*
1763 * If there are no indirect blocks or we are punching a hole
1764 * below indirect blocks, nothing to be done.
1765 */
1766 - if (!topdir || (punch_hole && (limit <= SHMEM_NR_DIRECT)))
1767 + if (!topdir || limit <= SHMEM_NR_DIRECT)
1768 goto done2;
1769
1770 - BUG_ON(limit <= SHMEM_NR_DIRECT);
1771 + /*
1772 + * The truncation case has already dropped info->lock, and we're safe
1773 + * because i_size and next_index have already been lowered, preventing
1774 + * access beyond. But in the punch_hole case, we still need to take
1775 + * the lock when updating the swap directory, because there might be
1776 + * racing accesses by shmem_getpage(SGP_CACHE), shmem_unuse_inode or
1777 + * shmem_writepage. However, whenever we find we can remove a whole
1778 + * directory page (not at the misaligned start or end of the range),
1779 + * we first NULLify its pointer in the level above, and then have no
1780 + * need to take the lock when updating its contents: needs_lock and
1781 + * punch_lock (either pointing to info->lock or NULL) manage this.
1782 + */
1783 +
1784 + upper_limit -= SHMEM_NR_DIRECT;
1785 limit -= SHMEM_NR_DIRECT;
1786 idx = (idx > SHMEM_NR_DIRECT)? (idx - SHMEM_NR_DIRECT): 0;
1787 offset = idx % ENTRIES_PER_PAGE;
1788 @@ -543,8 +581,14 @@ static void shmem_truncate_range(struct inode *inode, loff_t start, loff_t end)
1789 if (*dir) {
1790 diroff = ((idx - ENTRIES_PER_PAGEPAGE/2) %
1791 ENTRIES_PER_PAGEPAGE) / ENTRIES_PER_PAGE;
1792 - if (!diroff && !offset) {
1793 - *dir = NULL;
1794 + if (!diroff && !offset && upper_limit >= stage) {
1795 + if (needs_lock) {
1796 + spin_lock(needs_lock);
1797 + *dir = NULL;
1798 + spin_unlock(needs_lock);
1799 + needs_lock = NULL;
1800 + } else
1801 + *dir = NULL;
1802 nr_pages_to_free++;
1803 list_add(&middir->lru, &pages_to_free);
1804 }
1805 @@ -570,39 +614,55 @@ static void shmem_truncate_range(struct inode *inode, loff_t start, loff_t end)
1806 }
1807 stage = idx + ENTRIES_PER_PAGEPAGE;
1808 middir = *dir;
1809 - *dir = NULL;
1810 - nr_pages_to_free++;
1811 - list_add(&middir->lru, &pages_to_free);
1812 + if (punch_hole)
1813 + needs_lock = &info->lock;
1814 + if (upper_limit >= stage) {
1815 + if (needs_lock) {
1816 + spin_lock(needs_lock);
1817 + *dir = NULL;
1818 + spin_unlock(needs_lock);
1819 + needs_lock = NULL;
1820 + } else
1821 + *dir = NULL;
1822 + nr_pages_to_free++;
1823 + list_add(&middir->lru, &pages_to_free);
1824 + }
1825 shmem_dir_unmap(dir);
1826 cond_resched();
1827 dir = shmem_dir_map(middir);
1828 diroff = 0;
1829 }
1830 + punch_lock = needs_lock;
1831 subdir = dir[diroff];
1832 - if (subdir && page_private(subdir)) {
1833 + if (subdir && !offset && upper_limit-idx >= ENTRIES_PER_PAGE) {
1834 + if (needs_lock) {
1835 + spin_lock(needs_lock);
1836 + dir[diroff] = NULL;
1837 + spin_unlock(needs_lock);
1838 + punch_lock = NULL;
1839 + } else
1840 + dir[diroff] = NULL;
1841 + nr_pages_to_free++;
1842 + list_add(&subdir->lru, &pages_to_free);
1843 + }
1844 + if (subdir && page_private(subdir) /* has swap entries */) {
1845 size = limit - idx;
1846 if (size > ENTRIES_PER_PAGE)
1847 size = ENTRIES_PER_PAGE;
1848 freed = shmem_map_and_free_swp(subdir,
1849 - offset, size, &dir);
1850 + offset, size, &dir, punch_lock);
1851 if (!dir)
1852 dir = shmem_dir_map(middir);
1853 nr_swaps_freed += freed;
1854 - if (offset)
1855 + if (offset || punch_lock) {
1856 spin_lock(&info->lock);
1857 - set_page_private(subdir, page_private(subdir) - freed);
1858 - if (offset)
1859 + set_page_private(subdir,
1860 + page_private(subdir) - freed);
1861 spin_unlock(&info->lock);
1862 - if (!punch_hole)
1863 - BUG_ON(page_private(subdir) > offset);
1864 - }
1865 - if (offset)
1866 - offset = 0;
1867 - else if (subdir && !page_private(subdir)) {
1868 - dir[diroff] = NULL;
1869 - nr_pages_to_free++;
1870 - list_add(&subdir->lru, &pages_to_free);
1871 + } else
1872 + BUG_ON(page_private(subdir) != freed);
1873 }
1874 + offset = 0;
1875 }
1876 done1:
1877 shmem_dir_unmap(dir);
1878 @@ -614,8 +674,16 @@ done2:
1879 * generic_delete_inode did it, before we lowered next_index.
1880 * Also, though shmem_getpage checks i_size before adding to
1881 * cache, no recheck after: so fix the narrow window there too.
1882 + *
1883 + * Recalling truncate_inode_pages_range and unmap_mapping_range
1884 + * every time for punch_hole (which never got a chance to clear
1885 + * SHMEM_PAGEIN at the start of vmtruncate_range) is expensive,
1886 + * yet hardly ever necessary: try to optimize them out later.
1887 */
1888 truncate_inode_pages_range(inode->i_mapping, start, end);
1889 + if (punch_hole)
1890 + unmap_mapping_range(inode->i_mapping, start,
1891 + end - start, 1);
1892 }
1893
1894 spin_lock(&info->lock);
1895 diff --git a/net/core/netpoll.c b/net/core/netpoll.c
1896 index 823215d..522e441 100644
1897 --- a/net/core/netpoll.c
1898 +++ b/net/core/netpoll.c
1899 @@ -471,6 +471,13 @@ int __netpoll_rx(struct sk_buff *skb)
1900 if (skb->len < len || len < iph->ihl*4)
1901 goto out;
1902
1903 + /*
1904 + * Our transport medium may have padded the buffer out.
1905 + * Now We trim to the true length of the frame.
1906 + */
1907 + if (pskb_trim_rcsum(skb, len))
1908 + goto out;
1909 +
1910 if (iph->protocol != IPPROTO_UDP)
1911 goto out;
1912
1913 diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c
1914 index ebe9d0d..4a71b31 100644
1915 --- a/net/ipv4/tcp.c
1916 +++ b/net/ipv4/tcp.c
1917 @@ -2457,11 +2457,18 @@ void __init tcp_init(void)
1918 sysctl_max_syn_backlog = 128;
1919 }
1920
1921 - /* Allow no more than 3/4 kernel memory (usually less) allocated to TCP */
1922 - sysctl_tcp_mem[0] = (1536 / sizeof (struct inet_bind_hashbucket)) << order;
1923 - sysctl_tcp_mem[1] = sysctl_tcp_mem[0] * 4 / 3;
1924 + /* Set the pressure threshold to be a fraction of global memory that
1925 + * is up to 1/2 at 256 MB, decreasing toward zero with the amount of
1926 + * memory, with a floor of 128 pages.
1927 + */
1928 + limit = min(nr_all_pages, 1UL<<(28-PAGE_SHIFT)) >> (20-PAGE_SHIFT);
1929 + limit = (limit * (nr_all_pages >> (20-PAGE_SHIFT))) >> (PAGE_SHIFT-11);
1930 + limit = max(limit, 128UL);
1931 + sysctl_tcp_mem[0] = limit / 4 * 3;
1932 + sysctl_tcp_mem[1] = limit;
1933 sysctl_tcp_mem[2] = sysctl_tcp_mem[0] * 2;
1934
1935 + /* Set per-socket limits to no more than 1/128 the pressure threshold */
1936 limit = ((unsigned long)sysctl_tcp_mem[1]) << (PAGE_SHIFT - 7);
1937 max_share = min(4UL*1024*1024, limit);
1938
1939 diff --git a/net/irda/af_irda.c b/net/irda/af_irda.c
1940 index 7e1aea8..b296c1b 100644
1941 --- a/net/irda/af_irda.c
1942 +++ b/net/irda/af_irda.c
1943 @@ -138,7 +138,6 @@ static void irda_disconnect_indication(void *instance, void *sap,
1944 sk->sk_shutdown |= SEND_SHUTDOWN;
1945
1946 sk->sk_state_change(sk);
1947 - sock_orphan(sk);
1948 release_sock(sk);
1949
1950 /* Close our TSAP.
1951 @@ -1446,7 +1445,7 @@ static int irda_recvmsg_stream(struct kiocb *iocb, struct socket *sock,
1952 */
1953 ret = sock_error(sk);
1954 if (ret)
1955 - break;
1956 + ;
1957 else if (sk->sk_shutdown & RCV_SHUTDOWN)
1958 ;
1959 else if (noblock)
1960 diff --git a/net/sunrpc/svcauth_unix.c b/net/sunrpc/svcauth_unix.c
1961 index 0d1e8fb..a568f9f 100644
1962 --- a/net/sunrpc/svcauth_unix.c
1963 +++ b/net/sunrpc/svcauth_unix.c
1964 @@ -383,7 +383,10 @@ void svcauth_unix_purge(void)
1965 static inline struct ip_map *
1966 ip_map_cached_get(struct svc_rqst *rqstp)
1967 {
1968 - struct ip_map *ipm = rqstp->rq_sock->sk_info_authunix;
1969 + struct ip_map *ipm;
1970 + struct svc_sock *svsk = rqstp->rq_sock;
1971 + spin_lock_bh(&svsk->sk_defer_lock);
1972 + ipm = svsk->sk_info_authunix;
1973 if (ipm != NULL) {
1974 if (!cache_valid(&ipm->h)) {
1975 /*
1976 @@ -391,12 +394,14 @@ ip_map_cached_get(struct svc_rqst *rqstp)
1977 * remembered, e.g. by a second mount from the
1978 * same IP address.
1979 */
1980 - rqstp->rq_sock->sk_info_authunix = NULL;
1981 + svsk->sk_info_authunix = NULL;
1982 + spin_unlock_bh(&svsk->sk_defer_lock);
1983 cache_put(&ipm->h, &ip_map_cache);
1984 return NULL;
1985 }
1986 cache_get(&ipm->h);
1987 }
1988 + spin_unlock_bh(&svsk->sk_defer_lock);
1989 return ipm;
1990 }
1991
1992 @@ -405,9 +410,15 @@ ip_map_cached_put(struct svc_rqst *rqstp, struct ip_map *ipm)
1993 {
1994 struct svc_sock *svsk = rqstp->rq_sock;
1995
1996 - if (svsk->sk_sock->type == SOCK_STREAM && svsk->sk_info_authunix == NULL)
1997 - svsk->sk_info_authunix = ipm; /* newly cached, keep the reference */
1998 - else
1999 + spin_lock_bh(&svsk->sk_defer_lock);
2000 + if (svsk->sk_sock->type == SOCK_STREAM &&
2001 + svsk->sk_info_authunix == NULL) {
2002 + /* newly cached, keep the reference */
2003 + svsk->sk_info_authunix = ipm;
2004 + ipm = NULL;
2005 + }
2006 + spin_unlock_bh(&svsk->sk_defer_lock);
2007 + if (ipm)
2008 cache_put(&ipm->h, &ip_map_cache);
2009 }
2010
2011 diff --git a/sound/pci/intel8x0.c b/sound/pci/intel8x0.c
2012 index 30aaa60..6dc6b77 100644
2013 --- a/sound/pci/intel8x0.c
2014 +++ b/sound/pci/intel8x0.c
2015 @@ -2489,7 +2489,10 @@ static int intel8x0_suspend(struct pci_dev *pci, pm_message_t state)
2016 }
2017 pci_disable_device(pci);
2018 pci_save_state(pci);
2019 - pci_set_power_state(pci, pci_choose_state(pci, state));
2020 + /* The call below may disable built-in speaker on some laptops
2021 + * after S2RAM. So, don't touch it.
2022 + */
2023 + /* pci_set_power_state(pci, pci_choose_state(pci, state)); */
2024 return 0;
2025 }
2026