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

Pull powerpc fixes from Michael Ellerman:
- build fix for SMP=n in book3s_xics.c
- fix for Daniel's pci_controller_ops on powernv.
- revert the TM syscall abort patch for now.
- CPU affinity fix from Nathan.
- two EEH fixes from Gavin.
- fix for CR corruption from Sam.
- selftest build fix.

* tag 'powerpc-4.1-3' of git://git.kernel.org/pub/scm/linux/kernel/git/mpe/linux:
powerpc/powernv: Restore non-volatile CRs after nap
powerpc/eeh: Delay probing EEH device during hotplug
powerpc/eeh: Fix race condition in pcibios_set_pcie_reset_state()
powerpc/pseries: Correct cpu affinity for dlpar added cpus
selftests/powerpc: Fix the pmu install rule
Revert "powerpc/tm: Abort syscalls in active transactions"
powerpc/powernv: Fix early pci_controller_ops loading.
powerpc/kvm: Fix SMP=n build error in book3s_xics.c

+37 -47
+16 -16
Documentation/powerpc/transactional_memory.txt
··· 74 74 Syscalls 75 75 ======== 76 76 77 - Syscalls made from within an active transaction will not be performed and the 78 - transaction will be doomed by the kernel with the failure code TM_CAUSE_SYSCALL 79 - | TM_CAUSE_PERSISTENT. 77 + Performing syscalls from within transaction is not recommended, and can lead 78 + to unpredictable results. 80 79 81 - Syscalls made from within a suspended transaction are performed as normal and 82 - the transaction is not explicitly doomed by the kernel. However, what the 83 - kernel does to perform the syscall may result in the transaction being doomed 84 - by the hardware. The syscall is performed in suspended mode so any side 85 - effects will be persistent, independent of transaction success or failure. No 86 - guarantees are provided by the kernel about which syscalls will affect 87 - transaction success. 80 + Syscalls do not by design abort transactions, but beware: The kernel code will 81 + not be running in transactional state. The effect of syscalls will always 82 + remain visible, but depending on the call they may abort your transaction as a 83 + side-effect, read soon-to-be-aborted transactional data that should not remain 84 + invisible, etc. If you constantly retry a transaction that constantly aborts 85 + itself by calling a syscall, you'll have a livelock & make no progress. 88 86 89 - Care must be taken when relying on syscalls to abort during active transactions 90 - if the calls are made via a library. Libraries may cache values (which may 91 - give the appearance of success) or perform operations that cause transaction 92 - failure before entering the kernel (which may produce different failure codes). 93 - Examples are glibc's getpid() and lazy symbol resolution. 87 + Simple syscalls (e.g. sigprocmask()) "could" be OK. Even things like write() 88 + from, say, printf() should be OK as long as the kernel does not access any 89 + memory that was accessed transactionally. 90 + 91 + Consider any syscalls that happen to work as debug-only -- not recommended for 92 + production use. Best to queue them up till after the transaction is over. 94 93 95 94 96 95 Signals ··· 176 177 TM_CAUSE_RESCHED Thread was rescheduled. 177 178 TM_CAUSE_TLBI Software TLB invalid. 178 179 TM_CAUSE_FAC_UNAV FP/VEC/VSX unavailable trap. 179 - TM_CAUSE_SYSCALL Syscall from active transaction. 180 + TM_CAUSE_SYSCALL Currently unused; future syscalls that must abort 181 + transactions for consistency will use this. 180 182 TM_CAUSE_SIGNAL Signal delivered. 181 183 TM_CAUSE_MISC Currently unused. 182 184 TM_CAUSE_ALIGNMENT Alignment fault.
+1 -1
arch/powerpc/include/uapi/asm/tm.h
··· 11 11 #define TM_CAUSE_RESCHED 0xde 12 12 #define TM_CAUSE_TLBI 0xdc 13 13 #define TM_CAUSE_FAC_UNAV 0xda 14 - #define TM_CAUSE_SYSCALL 0xd8 14 + #define TM_CAUSE_SYSCALL 0xd8 /* future use */ 15 15 #define TM_CAUSE_MISC 0xd6 /* future use */ 16 16 #define TM_CAUSE_SIGNAL 0xd4 17 17 #define TM_CAUSE_ALIGNMENT 0xd2
+10 -1
arch/powerpc/kernel/eeh.c
··· 749 749 eeh_unfreeze_pe(pe, false); 750 750 eeh_pe_state_clear(pe, EEH_PE_CFG_BLOCKED); 751 751 eeh_pe_dev_traverse(pe, eeh_restore_dev_state, dev); 752 + eeh_pe_state_clear(pe, EEH_PE_ISOLATED); 752 753 break; 753 754 case pcie_hot_reset: 755 + eeh_pe_state_mark(pe, EEH_PE_ISOLATED); 754 756 eeh_ops->set_option(pe, EEH_OPT_FREEZE_PE); 755 757 eeh_pe_dev_traverse(pe, eeh_disable_and_save_dev_state, dev); 756 758 eeh_pe_state_mark(pe, EEH_PE_CFG_BLOCKED); 757 759 eeh_ops->reset(pe, EEH_RESET_HOT); 758 760 break; 759 761 case pcie_warm_reset: 762 + eeh_pe_state_mark(pe, EEH_PE_ISOLATED); 760 763 eeh_ops->set_option(pe, EEH_OPT_FREEZE_PE); 761 764 eeh_pe_dev_traverse(pe, eeh_disable_and_save_dev_state, dev); 762 765 eeh_pe_state_mark(pe, EEH_PE_CFG_BLOCKED); 763 766 eeh_ops->reset(pe, EEH_RESET_FUNDAMENTAL); 764 767 break; 765 768 default: 766 - eeh_pe_state_clear(pe, EEH_PE_CFG_BLOCKED); 769 + eeh_pe_state_clear(pe, EEH_PE_ISOLATED | EEH_PE_CFG_BLOCKED); 767 770 return -EINVAL; 768 771 }; 769 772 ··· 1061 1058 if (!edev || !eeh_enabled()) 1062 1059 return; 1063 1060 1061 + if (!eeh_has_flag(EEH_PROBE_MODE_DEVTREE)) 1062 + return; 1063 + 1064 1064 /* USB Bus children of PCI devices will not have BUID's */ 1065 1065 phb = edev->phb; 1066 1066 if (NULL == phb || ··· 1117 1111 pr_debug("EEH: Already referenced !\n"); 1118 1112 return; 1119 1113 } 1114 + 1115 + if (eeh_has_flag(EEH_PROBE_MODE_DEV)) 1116 + eeh_ops->probe(pdn, NULL); 1120 1117 1121 1118 /* 1122 1119 * The EEH cache might not be removed correctly because of
-19
arch/powerpc/kernel/entry_64.S
··· 34 34 #include <asm/ftrace.h> 35 35 #include <asm/hw_irq.h> 36 36 #include <asm/context_tracking.h> 37 - #include <asm/tm.h> 38 37 39 38 /* 40 39 * System calls. ··· 145 146 andi. r11,r10,_TIF_SYSCALL_DOTRACE 146 147 bne syscall_dotrace 147 148 .Lsyscall_dotrace_cont: 148 - #ifdef CONFIG_PPC_TRANSACTIONAL_MEM 149 - BEGIN_FTR_SECTION 150 - b 1f 151 - END_FTR_SECTION_IFCLR(CPU_FTR_TM) 152 - extrdi. r11, r12, 1, (63-MSR_TS_T_LG) /* transaction active? */ 153 - beq+ 1f 154 - 155 - /* Doom the transaction and don't perform the syscall: */ 156 - mfmsr r11 157 - li r12, 1 158 - rldimi r11, r12, MSR_TM_LG, 63-MSR_TM_LG 159 - mtmsrd r11, 0 160 - li r11, (TM_CAUSE_SYSCALL|TM_CAUSE_PERSISTENT) 161 - TABORT(R11) 162 - 163 - b .Lsyscall_exit 164 - 1: 165 - #endif 166 149 cmpldi 0,r0,NR_syscalls 167 150 bge- syscall_enosys 168 151
+2
arch/powerpc/kernel/idle_power7.S
··· 501 501 CHECK_HMI_INTERRUPT 502 502 END_FTR_SECTION_IFSET(CPU_FTR_HVMODE) 503 503 ld r1,PACAR1(r13) 504 + ld r6,_CCR(r1) 504 505 ld r4,_MSR(r1) 505 506 ld r5,_NIP(r1) 506 507 addi r1,r1,INT_FRAME_SIZE 508 + mtcr r6 507 509 mtspr SPRN_SRR1,r4 508 510 mtspr SPRN_SRR0,r5 509 511 rfid
+1 -1
arch/powerpc/kvm/book3s_xics.c
··· 12 12 #include <linux/err.h> 13 13 #include <linux/gfp.h> 14 14 #include <linux/anon_inodes.h> 15 + #include <linux/spinlock.h> 15 16 16 17 #include <asm/uaccess.h> 17 18 #include <asm/kvm_book3s.h> ··· 21 20 #include <asm/xics.h> 22 21 #include <asm/debug.h> 23 22 #include <asm/time.h> 24 - #include <asm/spinlock.h> 25 23 26 24 #include <linux/debugfs.h> 27 25 #include <linux/seq_file.h>
+1 -1
arch/powerpc/platforms/powernv/pci-ioda.c
··· 2693 2693 hose->last_busno = 0xff; 2694 2694 } 2695 2695 hose->private_data = phb; 2696 - hose->controller_ops = pnv_pci_controller_ops; 2697 2696 phb->hub_id = hub_id; 2698 2697 phb->opal_id = phb_id; 2699 2698 phb->type = ioda_type; ··· 2811 2812 pnv_pci_controller_ops.enable_device_hook = pnv_pci_enable_device_hook; 2812 2813 pnv_pci_controller_ops.window_alignment = pnv_pci_window_alignment; 2813 2814 pnv_pci_controller_ops.reset_secondary_bus = pnv_pci_reset_secondary_bus; 2815 + hose->controller_ops = pnv_pci_controller_ops; 2814 2816 2815 2817 #ifdef CONFIG_PCI_IOV 2816 2818 ppc_md.pcibios_fixup_sriov = pnv_pci_ioda_fixup_iov_resources;
+4 -6
arch/powerpc/platforms/pseries/dlpar.c
··· 412 412 if (rc) 413 413 return -EINVAL; 414 414 415 + rc = dlpar_acquire_drc(drc_index); 416 + if (rc) 417 + return -EINVAL; 418 + 415 419 parent = of_find_node_by_path("/cpus"); 416 420 if (!parent) 417 421 return -ENODEV; ··· 425 421 return -EINVAL; 426 422 427 423 of_node_put(parent); 428 - 429 - rc = dlpar_acquire_drc(drc_index); 430 - if (rc) { 431 - dlpar_free_cc_nodes(dn); 432 - return -EINVAL; 433 - } 434 424 435 425 rc = dlpar_attach_node(dn); 436 426 if (rc) {
+1 -1
tools/testing/selftests/powerpc/pmu/Makefile
··· 26 26 $(MAKE) -s -C ebb emit_tests 27 27 endef 28 28 29 - DEFAULT_INSTALL := $(INSTALL_RULE) 29 + DEFAULT_INSTALL_RULE := $(INSTALL_RULE) 30 30 override define INSTALL_RULE 31 31 $(DEFAULT_INSTALL_RULE) 32 32 $(MAKE) -C ebb install
+1 -1
tools/testing/selftests/powerpc/tm/Makefile
··· 1 - TEST_PROGS := tm-resched-dscr tm-syscall 1 + TEST_PROGS := tm-resched-dscr 2 2 3 3 all: $(TEST_PROGS) 4 4