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
74Syscalls74Syscalls
75========75========
76 76
77Syscalls made from within an active transaction will not be performed and the77Performing syscalls from within transaction is not recommended, and can lead
78transaction will be doomed by the kernel with the failure code TM_CAUSE_SYSCALL78to unpredictable results.
79| TM_CAUSE_PERSISTENT.
80 79
81Syscalls made from within a suspended transaction are performed as normal and80Syscalls do not by design abort transactions, but beware: The kernel code will
82the transaction is not explicitly doomed by the kernel. However, what the81not be running in transactional state. The effect of syscalls will always
83kernel does to perform the syscall may result in the transaction being doomed82remain visible, but depending on the call they may abort your transaction as a
84by the hardware. The syscall is performed in suspended mode so any side83side-effect, read soon-to-be-aborted transactional data that should not remain
85effects will be persistent, independent of transaction success or failure. No84invisible, etc. If you constantly retry a transaction that constantly aborts
86guarantees are provided by the kernel about which syscalls will affect85itself by calling a syscall, you'll have a livelock & make no progress.
87transaction success.
88 86
89Care must be taken when relying on syscalls to abort during active transactions87Simple syscalls (e.g. sigprocmask()) "could" be OK. Even things like write()
90if the calls are made via a library. Libraries may cache values (which may88from, say, printf() should be OK as long as the kernel does not access any
91give the appearance of success) or perform operations that cause transaction89memory that was accessed transactionally.
92failure before entering the kernel (which may produce different failure codes).90
93Examples are glibc's getpid() and lazy symbol resolution.91Consider any syscalls that happen to work as debug-only -- not recommended for
92production use. Best to queue them up till after the transaction is over.
94 93
95 94
96Signals95Signals
@@ -177,7 +176,8 @@ kernel aborted a transaction: · 80 unmodified lines
177 TM_CAUSE_RESCHED Thread was rescheduled.176 TM_CAUSE_RESCHED Thread was rescheduled.
178 TM_CAUSE_TLBI Software TLB invalid.177 TM_CAUSE_TLBI Software TLB invalid.
179 TM_CAUSE_FAC_UNAV FP/VEC/VSX unavailable trap.178 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.
181 TM_CAUSE_SIGNAL Signal delivered.181 TM_CAUSE_SIGNAL Signal delivered.
182 TM_CAUSE_MISC Currently unused.182 TM_CAUSE_MISC Currently unused.
183 TM_CAUSE_ALIGNMENT Alignment fault.183 TM_CAUSE_ALIGNMENT Alignment fault.
arch/powerpc/include/uapi/asm/tm.h+1−1
@@ -11,7 +11,7 @@ · 10 unmodified lines
11#define TM_CAUSE_RESCHED 0xde11#define TM_CAUSE_RESCHED 0xde
12#define TM_CAUSE_TLBI 0xdc12#define TM_CAUSE_TLBI 0xdc
13#define TM_CAUSE_FAC_UNAV 0xda13#define TM_CAUSE_FAC_UNAV 0xda
14#define TM_CAUSE_SYSCALL 0xd814#define TM_CAUSE_SYSCALL 0xd8 /* future use */
15#define TM_CAUSE_MISC 0xd6 /* future use */15#define TM_CAUSE_MISC 0xd6 /* future use */
16#define TM_CAUSE_SIGNAL 0xd416#define TM_CAUSE_SIGNAL 0xd4
17#define TM_CAUSE_ALIGNMENT 0xd217#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
749 eeh_unfreeze_pe(pe, false);749 eeh_unfreeze_pe(pe, false);
750 eeh_pe_state_clear(pe, EEH_PE_CFG_BLOCKED);750 eeh_pe_state_clear(pe, EEH_PE_CFG_BLOCKED);
751 eeh_pe_dev_traverse(pe, eeh_restore_dev_state, dev);751 eeh_pe_dev_traverse(pe, eeh_restore_dev_state, dev);
752 eeh_pe_state_clear(pe, EEH_PE_ISOLATED);
752 break;753 break;
753 case pcie_hot_reset:754 case pcie_hot_reset:
755 eeh_pe_state_mark(pe, EEH_PE_ISOLATED);
754 eeh_ops->set_option(pe, EEH_OPT_FREEZE_PE);756 eeh_ops->set_option(pe, EEH_OPT_FREEZE_PE);
755 eeh_pe_dev_traverse(pe, eeh_disable_and_save_dev_state, dev);757 eeh_pe_dev_traverse(pe, eeh_disable_and_save_dev_state, dev);
756 eeh_pe_state_mark(pe, EEH_PE_CFG_BLOCKED);758 eeh_pe_state_mark(pe, EEH_PE_CFG_BLOCKED);
757 eeh_ops->reset(pe, EEH_RESET_HOT);759 eeh_ops->reset(pe, EEH_RESET_HOT);
758 break;760 break;
759 case pcie_warm_reset:761 case pcie_warm_reset:
762 eeh_pe_state_mark(pe, EEH_PE_ISOLATED);
760 eeh_ops->set_option(pe, EEH_OPT_FREEZE_PE);763 eeh_ops->set_option(pe, EEH_OPT_FREEZE_PE);
761 eeh_pe_dev_traverse(pe, eeh_disable_and_save_dev_state, dev);764 eeh_pe_dev_traverse(pe, eeh_disable_and_save_dev_state, dev);
762 eeh_pe_state_mark(pe, EEH_PE_CFG_BLOCKED);765 eeh_pe_state_mark(pe, EEH_PE_CFG_BLOCKED);
763 eeh_ops->reset(pe, EEH_RESET_FUNDAMENTAL);766 eeh_ops->reset(pe, EEH_RESET_FUNDAMENTAL);
764 break;767 break;
765 default: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 return -EINVAL;770 return -EINVAL;
768 };771 };
769 772
@@ -1058,6 +1061,9 @@ void eeh_add_device_early(struct pci_dn *pdn) · 288 unmodified lines
1058 if (!edev || !eeh_enabled())1061 if (!edev || !eeh_enabled())
1059 return;1062 return;
1060 1063
1064 if (!eeh_has_flag(EEH_PROBE_MODE_DEVTREE))
1065 return;
1066
1061 /* USB Bus children of PCI devices will not have BUID's */1067 /* USB Bus children of PCI devices will not have BUID's */
1062 phb = edev->phb;1068 phb = edev->phb;
1063 if (NULL == phb ||1069 if (NULL == phb ||
@@ -1112,6 +1118,9 @@ void eeh_add_device_late(struct pci_dev *dev) · 48 unmodified lines
1112 return;1118 return;
1113 }1119 }
1114 1120
1121 if (eeh_has_flag(EEH_PROBE_MODE_DEV))
1122 eeh_ops->probe(pdn, NULL);
1123
1115 /*1124 /*
1116 * The EEH cache might not be removed correctly because of1125 * The EEH cache might not be removed correctly because of
1117 * unbalanced kref to the device during unplug time, which1126 * unbalanced kref to the device during unplug time, which
arch/powerpc/kernel/entry_64.S+0−19
@@ -34,7 +34,6 @@ · 33 unmodified lines
34#include <asm/ftrace.h>34#include <asm/ftrace.h>
35#include <asm/hw_irq.h>35#include <asm/hw_irq.h>
36#include <asm/context_tracking.h>36#include <asm/context_tracking.h>
37#include <asm/tm.h>
38 37
39/*38/*
40 * System calls.39 * System calls.
@@ -146,24 +145,6 @@ END_FW_FTR_SECTION_IFSET(FW_FEATURE_SPLPAR) · 105 unmodified lines
146 andi. r11,r10,_TIF_SYSCALL_DOTRACE145 andi. r11,r10,_TIF_SYSCALL_DOTRACE
147 bne syscall_dotrace146 bne syscall_dotrace
148.Lsyscall_dotrace_cont:147.Lsyscall_dotrace_cont:
149#ifdef CONFIG_PPC_TRANSACTIONAL_MEM
150BEGIN_FTR_SECTION
151 b 1f
152END_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
1651:
166#endif
167 cmpldi 0,r0,NR_syscalls148 cmpldi 0,r0,NR_syscalls
168 bge- syscall_enosys149 bge- syscall_enosys
169 150
arch/powerpc/kernel/idle_power7.S+2−0
@@ -501,9 +501,11 @@ BEGIN_FTR_SECTION · 500 unmodified lines
501 CHECK_HMI_INTERRUPT501 CHECK_HMI_INTERRUPT
502END_FTR_SECTION_IFSET(CPU_FTR_HVMODE)502END_FTR_SECTION_IFSET(CPU_FTR_HVMODE)
503 ld r1,PACAR1(r13)503 ld r1,PACAR1(r13)
504 ld r6,_CCR(r1)
504 ld r4,_MSR(r1)505 ld r4,_MSR(r1)
505 ld r5,_NIP(r1)506 ld r5,_NIP(r1)
506 addi r1,r1,INT_FRAME_SIZE507 addi r1,r1,INT_FRAME_SIZE
508 mtcr r6
507 mtspr SPRN_SRR1,r4509 mtspr SPRN_SRR1,r4
508 mtspr SPRN_SRR0,r5510 mtspr SPRN_SRR0,r5
509 rfid511 rfid
arch/powerpc/kvm/book3s_xics.c+1−1
@@ -12,6 +12,7 @@ · 11 unmodified lines
12#include <linux/err.h>12#include <linux/err.h>
13#include <linux/gfp.h>13#include <linux/gfp.h>
14#include <linux/anon_inodes.h>14#include <linux/anon_inodes.h>
15#include <linux/spinlock.h>
15 16
16#include <asm/uaccess.h>17#include <asm/uaccess.h>
17#include <asm/kvm_book3s.h>18#include <asm/kvm_book3s.h>
@@ -20,7 +21,6 @@ · 2 unmodified lines
20#include <asm/xics.h>21#include <asm/xics.h>
21#include <asm/debug.h>22#include <asm/debug.h>
22#include <asm/time.h>23#include <asm/time.h>
23#include <asm/spinlock.h>
24 24
25#include <linux/debugfs.h>25#include <linux/debugfs.h>
26#include <linux/seq_file.h>26#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
2693 hose->last_busno = 0xff;2693 hose->last_busno = 0xff;
2694 }2694 }
2695 hose->private_data = phb;2695 hose->private_data = phb;
2696 hose->controller_ops = pnv_pci_controller_ops;
2697 phb->hub_id = hub_id;2696 phb->hub_id = hub_id;
2698 phb->opal_id = phb_id;2697 phb->opal_id = phb_id;
2699 phb->type = ioda_type;2698 phb->type = ioda_type;
@@ -2812,6 +2811,7 @@ static void __init pnv_pci_init_ioda_phb(struct device_node *np, · 112 unmodified lines
2812 pnv_pci_controller_ops.enable_device_hook = pnv_pci_enable_device_hook;2811 pnv_pci_controller_ops.enable_device_hook = pnv_pci_enable_device_hook;
2813 pnv_pci_controller_ops.window_alignment = pnv_pci_window_alignment;2812 pnv_pci_controller_ops.window_alignment = pnv_pci_window_alignment;
2814 pnv_pci_controller_ops.reset_secondary_bus = pnv_pci_reset_secondary_bus;2813 pnv_pci_controller_ops.reset_secondary_bus = pnv_pci_reset_secondary_bus;
2814 hose->controller_ops = pnv_pci_controller_ops;
2815 2815
2816#ifdef CONFIG_PCI_IOV2816#ifdef CONFIG_PCI_IOV
2817 ppc_md.pcibios_fixup_sriov = pnv_pci_ioda_fixup_iov_resources;2817 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
412 if (rc)412 if (rc)
413 return -EINVAL;413 return -EINVAL;
414 414
415 rc = dlpar_acquire_drc(drc_index);
416 if (rc)
417 return -EINVAL;
418
415 parent = of_find_node_by_path("/cpus");419 parent = of_find_node_by_path("/cpus");
416 if (!parent)420 if (!parent)
417 return -ENODEV;421 return -ENODEV;
@@ -422,12 +426,6 @@ static ssize_t dlpar_cpu_probe(const char *buf, size_t count) · 4 unmodified lines
422 426
423 of_node_put(parent);427 of_node_put(parent);
424 428
425 rc = dlpar_acquire_drc(drc_index);
426 if (rc) {
427 dlpar_free_cc_nodes(dn);
428 return -EINVAL;
429 }
430
431 rc = dlpar_attach_node(dn);429 rc = dlpar_attach_node(dn);
432 if (rc) {430 if (rc) {
433 dlpar_release_drc(drc_index);431 dlpar_release_drc(drc_index);
tools/testing/selftests/powerpc/pmu/Makefile+1−1
@@ -26,7 +26,7 @@ override define EMIT_TESTS · 25 unmodified lines
26 $(MAKE) -s -C ebb emit_tests26 $(MAKE) -s -C ebb emit_tests
27endef27endef
28 28
29DEFAULT_INSTALL := $(INSTALL_RULE)29DEFAULT_INSTALL_RULE := $(INSTALL_RULE)
30override define INSTALL_RULE30override define INSTALL_RULE
31 $(DEFAULT_INSTALL_RULE)31 $(DEFAULT_INSTALL_RULE)
32 $(MAKE) -C ebb install32 $(MAKE) -C ebb install
tools/testing/selftests/powerpc/tm/Makefile+1−1
@@ -1,4 +1,4 @@
1TEST_PROGS := tm-resched-dscr tm-syscall1TEST_PROGS := tm-resched-dscr
2 2
3all: $(TEST_PROGS)3all: $(TEST_PROGS)
4 4