Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge branch 'merge' of git://git.kernel.org/pub/scm/linux/kernel/git/paulus/powerpc

* 'merge' of git://git.kernel.org/pub/scm/linux/kernel/git/paulus/powerpc:
[POWERPC] Fix boot failure on POWER6
[POWERPC] Workaround for iommu page alignment

+16 -13
+14 -3
arch/powerpc/kernel/iommu.c
··· 278 278 unsigned long flags; 279 279 struct scatterlist *s, *outs, *segstart; 280 280 int outcount, incount, i; 281 + unsigned int align; 281 282 unsigned long handle; 282 283 283 284 BUG_ON(direction == DMA_NONE); ··· 310 309 /* Allocate iommu entries for that segment */ 311 310 vaddr = (unsigned long) sg_virt(s); 312 311 npages = iommu_num_pages(vaddr, slen); 313 - entry = iommu_range_alloc(tbl, npages, &handle, mask >> IOMMU_PAGE_SHIFT, 0); 312 + align = 0; 313 + if (IOMMU_PAGE_SHIFT < PAGE_SHIFT && slen >= PAGE_SIZE && 314 + (vaddr & ~PAGE_MASK) == 0) 315 + align = PAGE_SHIFT - IOMMU_PAGE_SHIFT; 316 + entry = iommu_range_alloc(tbl, npages, &handle, 317 + mask >> IOMMU_PAGE_SHIFT, align); 314 318 315 319 DBG(" - vaddr: %lx, size: %lx\n", vaddr, slen); 316 320 ··· 578 572 { 579 573 dma_addr_t dma_handle = DMA_ERROR_CODE; 580 574 unsigned long uaddr; 581 - unsigned int npages; 575 + unsigned int npages, align; 582 576 583 577 BUG_ON(direction == DMA_NONE); 584 578 ··· 586 580 npages = iommu_num_pages(uaddr, size); 587 581 588 582 if (tbl) { 583 + align = 0; 584 + if (IOMMU_PAGE_SHIFT < PAGE_SHIFT && size >= PAGE_SIZE && 585 + ((unsigned long)vaddr & ~PAGE_MASK) == 0) 586 + align = PAGE_SHIFT - IOMMU_PAGE_SHIFT; 587 + 589 588 dma_handle = iommu_alloc(tbl, vaddr, npages, direction, 590 - mask >> IOMMU_PAGE_SHIFT, 0); 589 + mask >> IOMMU_PAGE_SHIFT, align); 591 590 if (dma_handle == DMA_ERROR_CODE) { 592 591 if (printk_ratelimit()) { 593 592 printk(KERN_INFO "iommu_alloc failed, "
+2 -8
arch/powerpc/mm/slb.c
··· 82 82 get_slb_shadow()->save_area[entry].esid = 0; 83 83 } 84 84 85 - void slb_shadow_clear_all(void) 86 - { 87 - int i; 88 - 89 - for (i = 0; i < SLB_NUM_BOLTED; i++) 90 - slb_shadow_clear(i); 91 - } 92 - 93 85 static inline void create_shadowed_slbe(unsigned long ea, int ssize, 94 86 unsigned long flags, 95 87 unsigned long entry) ··· 291 299 create_shadowed_slbe(PAGE_OFFSET, mmu_kernel_ssize, lflags, 0); 292 300 293 301 create_shadowed_slbe(VMALLOC_START, mmu_kernel_ssize, vflags, 1); 302 + 303 + slb_shadow_clear(2); 294 304 295 305 /* We don't bolt the stack for the time being - we're in boot, 296 306 * so the stack is in the bolted segment. By the time it goes
-1
arch/powerpc/platforms/pseries/lpar.c
··· 272 272 */ 273 273 addr = __pa(&slb_shadow[cpu]); 274 274 if (firmware_has_feature(FW_FEATURE_SPLPAR)) { 275 - slb_shadow_clear_all(); 276 275 ret = register_slb_shadow(hwcpu, addr); 277 276 if (ret) 278 277 printk(KERN_ERR
-1
include/asm-powerpc/mmu-hash64.h
··· 286 286 extern void hpte_init_beat(void); 287 287 extern void hpte_init_beat_v3(void); 288 288 289 - extern void slb_shadow_clear_all(void); 290 289 extern void stabs_alloc(void); 291 290 extern void slb_initialize(void); 292 291 extern void slb_flush_and_rebolt(void);