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 tag 'powerpc-6.11-3' of git://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux

Pull powerpc fixes from Michael Ellerman:

- Fix a deadlock in the powerpc qspinlock MCS queue logic

- Fix the return type of pgd_val() to not truncate 64-bit PTEs on 85xx

- Allow the check for dynamic relocations in the VDSO to work correctly

- Make mmu_pte_psize static to fix a build error

Thanks to Christophe Leroy, Nysal Jan K.A., Nicholas Piggin, Geetika
Moolchandani, Jijo Varghese, and Vaishnavi Bhat.

* tag 'powerpc-6.11-3' of git://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux:
powerpc/qspinlock: Fix deadlock in MCS queue
powerpc/mm: Fix return type of pgd_val()
powerpc/vdso: Don't discard rela sections
powerpc/64e: Define mmu_pte_psize static

+26 -10
+2 -2
arch/powerpc/include/asm/nohash/32/pgtable.h
··· 52 52 #define USER_PTRS_PER_PGD (TASK_SIZE / PGDIR_SIZE) 53 53 54 54 #define pgd_ERROR(e) \ 55 - pr_err("%s:%d: bad pgd %08lx.\n", __FILE__, __LINE__, pgd_val(e)) 55 + pr_err("%s:%d: bad pgd %08llx.\n", __FILE__, __LINE__, (unsigned long long)pgd_val(e)) 56 56 57 57 /* 58 58 * This is the bottom of the PKMAP area with HIGHMEM or an arbitrary ··· 170 170 #define pmd_pfn(pmd) (pmd_val(pmd) >> PAGE_SHIFT) 171 171 #else 172 172 #define pmd_page_vaddr(pmd) \ 173 - ((const void *)(pmd_val(pmd) & ~(PTE_TABLE_SIZE - 1))) 173 + ((const void *)((unsigned long)pmd_val(pmd) & ~(PTE_TABLE_SIZE - 1))) 174 174 #define pmd_pfn(pmd) (__pa(pmd_val(pmd)) >> PAGE_SHIFT) 175 175 #endif 176 176
+9 -3
arch/powerpc/include/asm/pgtable-types.h
··· 49 49 #endif /* CONFIG_PPC64 */ 50 50 51 51 /* PGD level */ 52 - #if defined(CONFIG_PPC_E500) && defined(CONFIG_PTE_64BIT) 52 + #if defined(CONFIG_PPC_85xx) && defined(CONFIG_PTE_64BIT) 53 53 typedef struct { unsigned long long pgd; } pgd_t; 54 + 55 + static inline unsigned long long pgd_val(pgd_t x) 56 + { 57 + return x.pgd; 58 + } 54 59 #else 55 60 typedef struct { unsigned long pgd; } pgd_t; 56 - #endif 57 - #define __pgd(x) ((pgd_t) { (x) }) 61 + 58 62 static inline unsigned long pgd_val(pgd_t x) 59 63 { 60 64 return x.pgd; 61 65 } 66 + #endif 67 + #define __pgd(x) ((pgd_t) { (x) }) 62 68 63 69 /* Page protection bits */ 64 70 typedef struct { unsigned long pgprot; } pgprot_t;
+3 -1
arch/powerpc/kernel/vdso/vdso32.lds.S
··· 74 74 .got : { *(.got) } :text 75 75 .plt : { *(.plt) } 76 76 77 + .rela.dyn : { *(.rela .rela*) } 78 + 77 79 _end = .; 78 80 __end = .; 79 81 PROVIDE(end = .); ··· 89 87 *(.branch_lt) 90 88 *(.data .data.* .gnu.linkonce.d.* .sdata*) 91 89 *(.bss .sbss .dynbss .dynsbss) 92 - *(.got1 .glink .iplt .rela*) 90 + *(.got1 .glink .iplt) 93 91 } 94 92 } 95 93
+2 -2
arch/powerpc/kernel/vdso/vdso64.lds.S
··· 69 69 .eh_frame_hdr : { *(.eh_frame_hdr) } :text :eh_frame_hdr 70 70 .eh_frame : { KEEP (*(.eh_frame)) } :text 71 71 .gcc_except_table : { *(.gcc_except_table) } 72 - .rela.dyn ALIGN(8) : { *(.rela.dyn) } 72 + .rela.dyn ALIGN(8) : { *(.rela .rela*) } 73 73 74 74 .got ALIGN(8) : { *(.got .toc) } 75 75 ··· 86 86 *(.data .data.* .gnu.linkonce.d.* .sdata*) 87 87 *(.bss .sbss .dynbss .dynsbss) 88 88 *(.opd) 89 - *(.glink .iplt .plt .rela*) 89 + *(.glink .iplt .plt) 90 90 } 91 91 } 92 92
+9 -1
arch/powerpc/lib/qspinlock.c
··· 697 697 } 698 698 699 699 release: 700 - qnodesp->count--; /* release the node */ 700 + /* 701 + * Clear the lock before releasing the node, as another CPU might see stale 702 + * values if an interrupt occurs after we increment qnodesp->count 703 + * but before node->lock is initialized. The barrier ensures that 704 + * there are no further stores to the node after it has been released. 705 + */ 706 + node->lock = NULL; 707 + barrier(); 708 + qnodesp->count--; 701 709 } 702 710 703 711 void queued_spin_lock_slowpath(struct qspinlock *lock)
+1 -1
arch/powerpc/mm/nohash/tlb_64e.c
··· 33 33 * though this will probably be made common with other nohash 34 34 * implementations at some point 35 35 */ 36 - int mmu_pte_psize; /* Page size used for PTE pages */ 36 + static int mmu_pte_psize; /* Page size used for PTE pages */ 37 37 int mmu_vmemmap_psize; /* Page size used for the virtual mem map */ 38 38 int book3e_htw_mode; /* HW tablewalk? Value is PPC_HTW_* */ 39 39 unsigned long linear_map_top; /* Top of linear mapping */