History

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

Linus Torvalds committed 11 years ago

Commit 180d89f2 parents 6c3c1eb 0aab37410 files · +37 −47Browse files

Unified · Split

10 files
  1. Documentation/powerpc/transactional_memory.txt +16 −16
  2. arch/powerpc/include/uapi/asm/tm.h +1 −1
  3. arch/powerpc/kernel/eeh.c +10 −1
  4. arch/powerpc/kernel/entry_64.S +0 −19
  5. arch/powerpc/kernel/idle_power7.S +2 −0
  6. arch/powerpc/kvm/book3s_xics.c +1 −1
  7. arch/powerpc/platforms/powernv/pci-ioda.c +1 −1
  8. arch/powerpc/platforms/pseries/dlpar.c +4 −6
  9. tools/testing/selftests/powerpc/pmu/Makefile +1 −1
  10. tools/testing/selftests/powerpc/tm/Makefile +1 −1
Documentation/powerpc/transactional_memory.txt+16−16
@@ -74,23 +74,22 @@ Causes of transaction aborts · 73 unmodified lines
7474 Syscalls
7575 ========
7676
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.
8079
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.
8886
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.
9493
9594
9695 Signals
@@ -177,7 +176,8 @@ kernel aborted a transaction: · 80 unmodified lines
177176 TM_CAUSE_RESCHED Thread was rescheduled.
178177 TM_CAUSE_TLBI Software TLB invalid.
179178 TM_CAUSE_FAC_UNAV FP/VEC/VSX unavailable trap.
180− TM_CAUSE_SYSCALL Syscall from active transaction.
179+ TM_CAUSE_SYSCALL Currently unused; future syscalls that must abort
180+ transactions for consistency will use this.
181181 TM_CAUSE_SIGNAL Signal delivered.
182182 TM_CAUSE_MISC Currently unused.
183183 TM_CAUSE_ALIGNMENT Alignment fault.
arch/powerpc/include/uapi/asm/tm.h+1−1
@@ -11,7 +11,7 @@ · 10 unmodified lines
1111 #define TM_CAUSE_RESCHED 0xde
1212 #define TM_CAUSE_TLBI 0xdc
1313 #define TM_CAUSE_FAC_UNAV 0xda
14−#define TM_CAUSE_SYSCALL 0xd8
14+#define TM_CAUSE_SYSCALL 0xd8 /* future use */
1515 #define TM_CAUSE_MISC 0xd6 /* future use */
1616 #define TM_CAUSE_SIGNAL 0xd4
1717 #define TM_CAUSE_ALIGNMENT 0xd2
arch/powerpc/kernel/eeh.c+10−1
@@ -749,21 +749,24 @@ int pcibios_set_pcie_reset_state(struct pci_dev *dev, enum pcie_reset_state stat · 748 unmodified lines
749749 eeh_unfreeze_pe(pe, false);
750750 eeh_pe_state_clear(pe, EEH_PE_CFG_BLOCKED);
751751 eeh_pe_dev_traverse(pe, eeh_restore_dev_state, dev);
752+ eeh_pe_state_clear(pe, EEH_PE_ISOLATED);
752753 break;
753754 case pcie_hot_reset:
755+ eeh_pe_state_mark(pe, EEH_PE_ISOLATED);
754756 eeh_ops->set_option(pe, EEH_OPT_FREEZE_PE);
755757 eeh_pe_dev_traverse(pe, eeh_disable_and_save_dev_state, dev);
756758 eeh_pe_state_mark(pe, EEH_PE_CFG_BLOCKED);
757759 eeh_ops->reset(pe, EEH_RESET_HOT);
758760 break;
759761 case pcie_warm_reset:
762+ eeh_pe_state_mark(pe, EEH_PE_ISOLATED);
760763 eeh_ops->set_option(pe, EEH_OPT_FREEZE_PE);
761764 eeh_pe_dev_traverse(pe, eeh_disable_and_save_dev_state, dev);
762765 eeh_pe_state_mark(pe, EEH_PE_CFG_BLOCKED);
763766 eeh_ops->reset(pe, EEH_RESET_FUNDAMENTAL);
764767 break;
765768 default:
766− eeh_pe_state_clear(pe, EEH_PE_CFG_BLOCKED);
769+ eeh_pe_state_clear(pe, EEH_PE_ISOLATED | EEH_PE_CFG_BLOCKED);
767770 return -EINVAL;
768771 };
769772
@@ -1058,6 +1061,9 @@ void eeh_add_device_early(struct pci_dn *pdn) · 288 unmodified lines
10581061 if (!edev || !eeh_enabled())
10591062 return;
10601063
1064+ if (!eeh_has_flag(EEH_PROBE_MODE_DEVTREE))
1065+ return;
1066+
10611067 /* USB Bus children of PCI devices will not have BUID's */
10621068 phb = edev->phb;
10631069 if (NULL == phb ||
@@ -1112,6 +1118,9 @@ void eeh_add_device_late(struct pci_dev *dev) · 48 unmodified lines
11121118 return;
11131119 }
11141120
1121+ if (eeh_has_flag(EEH_PROBE_MODE_DEV))
1122+ eeh_ops->probe(pdn, NULL);
1123+
11151124 /*
11161125 * The EEH cache might not be removed correctly because of
11171126 * unbalanced kref to the device during unplug time, which
arch/powerpc/kernel/entry_64.S+0−19
@@ -34,7 +34,6 @@ · 33 unmodified lines
3434 #include <asm/ftrace.h>
3535 #include <asm/hw_irq.h>
3636 #include <asm/context_tracking.h>
37−#include <asm/tm.h>
3837
3938 /*
4039 * System calls.
@@ -146,24 +145,6 @@ END_FW_FTR_SECTION_IFSET(FW_FEATURE_SPLPAR) · 105 unmodified lines
146145 andi. r11,r10,_TIF_SYSCALL_DOTRACE
147146 bne syscall_dotrace
148147 .Lsyscall_dotrace_cont:
149−#ifdef CONFIG_PPC_TRANSACTIONAL_MEM
150−BEGIN_FTR_SECTION
151− b 1f
152−END_FTR_SECTION_IFCLR(CPU_FTR_TM)
153− extrdi. r11, r12, 1, (63-MSR_TS_T_LG) /* transaction active? */
154− beq+ 1f
155−
156− /* Doom the transaction and don't perform the syscall: */
157− mfmsr r11
158− li r12, 1
159− rldimi r11, r12, MSR_TM_LG, 63-MSR_TM_LG
160− mtmsrd r11, 0
161− li r11, (TM_CAUSE_SYSCALL|TM_CAUSE_PERSISTENT)
162− TABORT(R11)
163−
164− b .Lsyscall_exit
165−1:
166−#endif
167148 cmpldi 0,r0,NR_syscalls
168149 bge- syscall_enosys
169150
arch/powerpc/kernel/idle_power7.S+2−0
@@ -501,9 +501,11 @@ BEGIN_FTR_SECTION · 500 unmodified lines
501501 CHECK_HMI_INTERRUPT
502502 END_FTR_SECTION_IFSET(CPU_FTR_HVMODE)
503503 ld r1,PACAR1(r13)
504+ ld r6,_CCR(r1)
504505 ld r4,_MSR(r1)
505506 ld r5,_NIP(r1)
506507 addi r1,r1,INT_FRAME_SIZE
508+ mtcr r6
507509 mtspr SPRN_SRR1,r4
508510 mtspr SPRN_SRR0,r5
509511 rfid
arch/powerpc/kvm/book3s_xics.c+1−1
@@ -12,6 +12,7 @@ · 11 unmodified lines
1212 #include <linux/err.h>
1313 #include <linux/gfp.h>
1414 #include <linux/anon_inodes.h>
15+#include <linux/spinlock.h>
1516
1617 #include <asm/uaccess.h>
1718 #include <asm/kvm_book3s.h>
@@ -20,7 +21,6 @@ · 2 unmodified lines
2021 #include <asm/xics.h>
2122 #include <asm/debug.h>
2223 #include <asm/time.h>
23−#include <asm/spinlock.h>
2424
2525 #include <linux/debugfs.h>
2626 #include <linux/seq_file.h>
arch/powerpc/platforms/powernv/pci-ioda.c+1−1
@@ -2693,7 +2693,6 @@ static void __init pnv_pci_init_ioda_phb(struct device_node *np, · 2692 unmodified lines
26932693 hose->last_busno = 0xff;
26942694 }
26952695 hose->private_data = phb;
2696− hose->controller_ops = pnv_pci_controller_ops;
26972696 phb->hub_id = hub_id;
26982697 phb->opal_id = phb_id;
26992698 phb->type = ioda_type;
@@ -2812,6 +2811,7 @@ static void __init pnv_pci_init_ioda_phb(struct device_node *np, · 112 unmodified lines
28122811 pnv_pci_controller_ops.enable_device_hook = pnv_pci_enable_device_hook;
28132812 pnv_pci_controller_ops.window_alignment = pnv_pci_window_alignment;
28142813 pnv_pci_controller_ops.reset_secondary_bus = pnv_pci_reset_secondary_bus;
2814+ hose->controller_ops = pnv_pci_controller_ops;
28152815
28162816 #ifdef CONFIG_PCI_IOV
28172817 ppc_md.pcibios_fixup_sriov = pnv_pci_ioda_fixup_iov_resources;
arch/powerpc/platforms/pseries/dlpar.c+4−6
@@ -412,6 +412,10 @@ static ssize_t dlpar_cpu_probe(const char *buf, size_t count) · 411 unmodified lines
412412 if (rc)
413413 return -EINVAL;
414414
415+ rc = dlpar_acquire_drc(drc_index);
416+ if (rc)
417+ return -EINVAL;
418+
415419 parent = of_find_node_by_path("/cpus");
416420 if (!parent)
417421 return -ENODEV;
@@ -422,12 +426,6 @@ static ssize_t dlpar_cpu_probe(const char *buf, size_t count) · 4 unmodified lines
422426
423427 of_node_put(parent);
424428
425− rc = dlpar_acquire_drc(drc_index);
426− if (rc) {
427− dlpar_free_cc_nodes(dn);
428− return -EINVAL;
429− }
430−
431429 rc = dlpar_attach_node(dn);
432430 if (rc) {
433431 dlpar_release_drc(drc_index);
tools/testing/selftests/powerpc/pmu/Makefile+1−1
@@ -26,7 +26,7 @@ override define EMIT_TESTS · 25 unmodified lines
2626 $(MAKE) -s -C ebb emit_tests
2727 endef
2828
29−DEFAULT_INSTALL := $(INSTALL_RULE)
29+DEFAULT_INSTALL_RULE := $(INSTALL_RULE)
3030 override define INSTALL_RULE
3131 $(DEFAULT_INSTALL_RULE)
3232 $(MAKE) -C ebb install
tools/testing/selftests/powerpc/tm/Makefile+1−1
@@ -1,4 +1,4 @@
1−TEST_PROGS := tm-resched-dscr tm-syscall
1+TEST_PROGS := tm-resched-dscr
22
33 all: $(TEST_PROGS)
44