diff options
Diffstat (limited to 'arch/powerpc/kernel')
-rw-r--r-- | arch/powerpc/kernel/eeh.c | 4 | ||||
-rw-r--r-- | arch/powerpc/kernel/exceptions-64s.S | 69 | ||||
-rw-r--r-- | arch/powerpc/kernel/idle_book3s.S | 17 | ||||
-rw-r--r-- | arch/powerpc/kernel/mce.c | 3 | ||||
-rw-r--r-- | arch/powerpc/kernel/pci-common.c | 7 | ||||
-rw-r--r-- | arch/powerpc/kernel/process.c | 20 | ||||
-rw-r--r-- | arch/powerpc/kernel/prom_init.c | 2 | ||||
-rw-r--r-- | arch/powerpc/kernel/ptrace.c | 19 | ||||
-rw-r--r-- | arch/powerpc/kernel/setup_32.c | 9 | ||||
-rw-r--r-- | arch/powerpc/kernel/setup_64.c | 1 | ||||
-rw-r--r-- | arch/powerpc/kernel/vdso.c | 1 | ||||
-rw-r--r-- | arch/powerpc/kernel/vdso32/Makefile | 6 | ||||
-rw-r--r-- | arch/powerpc/kernel/vdso64/Makefile | 6 |
13 files changed, 86 insertions, 78 deletions
diff --git a/arch/powerpc/kernel/eeh.c b/arch/powerpc/kernel/eeh.c index c9bc78e9c610..7429556eb8df 100644 --- a/arch/powerpc/kernel/eeh.c +++ b/arch/powerpc/kernel/eeh.c | |||
@@ -168,10 +168,10 @@ static size_t eeh_dump_dev_log(struct eeh_dev *edev, char *buf, size_t len) | |||
168 | int n = 0, l = 0; | 168 | int n = 0, l = 0; |
169 | char buffer[128]; | 169 | char buffer[128]; |
170 | 170 | ||
171 | n += scnprintf(buf+n, len-n, "%04x:%02x:%02x:%01x\n", | 171 | n += scnprintf(buf+n, len-n, "%04x:%02x:%02x.%01x\n", |
172 | edev->phb->global_number, pdn->busno, | 172 | edev->phb->global_number, pdn->busno, |
173 | PCI_SLOT(pdn->devfn), PCI_FUNC(pdn->devfn)); | 173 | PCI_SLOT(pdn->devfn), PCI_FUNC(pdn->devfn)); |
174 | pr_warn("EEH: of node=%04x:%02x:%02x:%01x\n", | 174 | pr_warn("EEH: of node=%04x:%02x:%02x.%01x\n", |
175 | edev->phb->global_number, pdn->busno, | 175 | edev->phb->global_number, pdn->busno, |
176 | PCI_SLOT(pdn->devfn), PCI_FUNC(pdn->devfn)); | 176 | PCI_SLOT(pdn->devfn), PCI_FUNC(pdn->devfn)); |
177 | 177 | ||
diff --git a/arch/powerpc/kernel/exceptions-64s.S b/arch/powerpc/kernel/exceptions-64s.S index 41091fdf9bd8..df6d45eb4115 100644 --- a/arch/powerpc/kernel/exceptions-64s.S +++ b/arch/powerpc/kernel/exceptions-64s.S | |||
@@ -144,29 +144,14 @@ machine_check_pSeries_1: | |||
144 | * vector | 144 | * vector |
145 | */ | 145 | */ |
146 | SET_SCRATCH0(r13) /* save r13 */ | 146 | SET_SCRATCH0(r13) /* save r13 */ |
147 | #ifdef CONFIG_PPC_P7_NAP | 147 | /* |
148 | BEGIN_FTR_SECTION | 148 | * Running native on arch 2.06 or later, we may wakeup from winkle |
149 | /* Running native on arch 2.06 or later, check if we are | 149 | * inside machine check. If yes, then last bit of HSPGR0 would be set |
150 | * waking up from nap. We only handle no state loss and | 150 | * to 1. Hence clear it unconditionally. |
151 | * supervisor state loss. We do -not- handle hypervisor | ||
152 | * state loss at this time. | ||
153 | */ | 151 | */ |
154 | mfspr r13,SPRN_SRR1 | 152 | GET_PACA(r13) |
155 | rlwinm. r13,r13,47-31,30,31 | 153 | clrrdi r13,r13,1 |
156 | OPT_GET_SPR(r13, SPRN_CFAR, CPU_FTR_CFAR) | 154 | SET_PACA(r13) |
157 | beq 9f | ||
158 | |||
159 | mfspr r13,SPRN_SRR1 | ||
160 | rlwinm. r13,r13,47-31,30,31 | ||
161 | /* waking up from powersave (nap) state */ | ||
162 | cmpwi cr1,r13,2 | ||
163 | /* Total loss of HV state is fatal. let's just stay stuck here */ | ||
164 | OPT_GET_SPR(r13, SPRN_CFAR, CPU_FTR_CFAR) | ||
165 | bgt cr1,. | ||
166 | 9: | ||
167 | OPT_SET_SPR(r13, SPRN_CFAR, CPU_FTR_CFAR) | ||
168 | END_FTR_SECTION_IFSET(CPU_FTR_HVMODE | CPU_FTR_ARCH_206) | ||
169 | #endif /* CONFIG_PPC_P7_NAP */ | ||
170 | EXCEPTION_PROLOG_0(PACA_EXMC) | 155 | EXCEPTION_PROLOG_0(PACA_EXMC) |
171 | BEGIN_FTR_SECTION | 156 | BEGIN_FTR_SECTION |
172 | b machine_check_powernv_early | 157 | b machine_check_powernv_early |
@@ -1273,25 +1258,51 @@ machine_check_handle_early: | |||
1273 | * Check if thread was in power saving mode. We come here when any | 1258 | * Check if thread was in power saving mode. We come here when any |
1274 | * of the following is true: | 1259 | * of the following is true: |
1275 | * a. thread wasn't in power saving mode | 1260 | * a. thread wasn't in power saving mode |
1276 | * b. thread was in power saving mode with no state loss or | 1261 | * b. thread was in power saving mode with no state loss, |
1277 | * supervisor state loss | 1262 | * supervisor state loss or hypervisor state loss. |
1278 | * | 1263 | * |
1279 | * Go back to nap again if (b) is true. | 1264 | * Go back to nap/sleep/winkle mode again if (b) is true. |
1280 | */ | 1265 | */ |
1281 | rlwinm. r11,r12,47-31,30,31 /* Was it in power saving mode? */ | 1266 | rlwinm. r11,r12,47-31,30,31 /* Was it in power saving mode? */ |
1282 | beq 4f /* No, it wasn;t */ | 1267 | beq 4f /* No, it wasn;t */ |
1283 | /* Thread was in power saving mode. Go back to nap again. */ | 1268 | /* Thread was in power saving mode. Go back to nap again. */ |
1284 | cmpwi r11,2 | 1269 | cmpwi r11,2 |
1285 | bne 3f | 1270 | blt 3f |
1286 | /* Supervisor state loss */ | 1271 | /* Supervisor/Hypervisor state loss */ |
1287 | li r0,1 | 1272 | li r0,1 |
1288 | stb r0,PACA_NAPSTATELOST(r13) | 1273 | stb r0,PACA_NAPSTATELOST(r13) |
1289 | 3: bl machine_check_queue_event | 1274 | 3: bl machine_check_queue_event |
1290 | MACHINE_CHECK_HANDLER_WINDUP | 1275 | MACHINE_CHECK_HANDLER_WINDUP |
1291 | GET_PACA(r13) | 1276 | GET_PACA(r13) |
1292 | ld r1,PACAR1(r13) | 1277 | ld r1,PACAR1(r13) |
1293 | li r3,PNV_THREAD_NAP | 1278 | /* |
1294 | b pnv_enter_arch207_idle_mode | 1279 | * Check what idle state this CPU was in and go back to same mode |
1280 | * again. | ||
1281 | */ | ||
1282 | lbz r3,PACA_THREAD_IDLE_STATE(r13) | ||
1283 | cmpwi r3,PNV_THREAD_NAP | ||
1284 | bgt 10f | ||
1285 | IDLE_STATE_ENTER_SEQ(PPC_NAP) | ||
1286 | /* No return */ | ||
1287 | 10: | ||
1288 | cmpwi r3,PNV_THREAD_SLEEP | ||
1289 | bgt 2f | ||
1290 | IDLE_STATE_ENTER_SEQ(PPC_SLEEP) | ||
1291 | /* No return */ | ||
1292 | |||
1293 | 2: | ||
1294 | /* | ||
1295 | * Go back to winkle. Please note that this thread was woken up in | ||
1296 | * machine check from winkle and have not restored the per-subcore | ||
1297 | * state. Hence before going back to winkle, set last bit of HSPGR0 | ||
1298 | * to 1. This will make sure that if this thread gets woken up | ||
1299 | * again at reset vector 0x100 then it will get chance to restore | ||
1300 | * the subcore state. | ||
1301 | */ | ||
1302 | ori r13,r13,1 | ||
1303 | SET_PACA(r13) | ||
1304 | IDLE_STATE_ENTER_SEQ(PPC_WINKLE) | ||
1305 | /* No return */ | ||
1295 | 4: | 1306 | 4: |
1296 | #endif | 1307 | #endif |
1297 | /* | 1308 | /* |
diff --git a/arch/powerpc/kernel/idle_book3s.S b/arch/powerpc/kernel/idle_book3s.S index ba79d15f4ddd..2265c6398a17 100644 --- a/arch/powerpc/kernel/idle_book3s.S +++ b/arch/powerpc/kernel/idle_book3s.S | |||
@@ -44,18 +44,6 @@ | |||
44 | PSSCR_PSLL_MASK | PSSCR_TR_MASK | \ | 44 | PSSCR_PSLL_MASK | PSSCR_TR_MASK | \ |
45 | PSSCR_MTL_MASK | 45 | PSSCR_MTL_MASK |
46 | 46 | ||
47 | /* Idle state entry routines */ | ||
48 | |||
49 | #define IDLE_STATE_ENTER_SEQ(IDLE_INST) \ | ||
50 | /* Magic NAP/SLEEP/WINKLE mode enter sequence */ \ | ||
51 | std r0,0(r1); \ | ||
52 | ptesync; \ | ||
53 | ld r0,0(r1); \ | ||
54 | 1: cmp cr0,r0,r0; \ | ||
55 | bne 1b; \ | ||
56 | IDLE_INST; \ | ||
57 | b . | ||
58 | |||
59 | .text | 47 | .text |
60 | 48 | ||
61 | /* | 49 | /* |
@@ -363,8 +351,8 @@ _GLOBAL(power9_idle_stop) | |||
363 | * cr3 - set to gt if waking up with partial/complete hypervisor state loss | 351 | * cr3 - set to gt if waking up with partial/complete hypervisor state loss |
364 | */ | 352 | */ |
365 | _GLOBAL(pnv_restore_hyp_resource) | 353 | _GLOBAL(pnv_restore_hyp_resource) |
366 | ld r2,PACATOC(r13); | ||
367 | BEGIN_FTR_SECTION | 354 | BEGIN_FTR_SECTION |
355 | ld r2,PACATOC(r13); | ||
368 | /* | 356 | /* |
369 | * POWER ISA 3. Use PSSCR to determine if we | 357 | * POWER ISA 3. Use PSSCR to determine if we |
370 | * are waking up from deep idle state | 358 | * are waking up from deep idle state |
@@ -395,6 +383,9 @@ END_FTR_SECTION_IFSET(CPU_FTR_ARCH_300) | |||
395 | */ | 383 | */ |
396 | clrldi r5,r13,63 | 384 | clrldi r5,r13,63 |
397 | clrrdi r13,r13,1 | 385 | clrrdi r13,r13,1 |
386 | |||
387 | /* Now that we are sure r13 is corrected, load TOC */ | ||
388 | ld r2,PACATOC(r13); | ||
398 | cmpwi cr4,r5,1 | 389 | cmpwi cr4,r5,1 |
399 | mtspr SPRN_HSPRG0,r13 | 390 | mtspr SPRN_HSPRG0,r13 |
400 | 391 | ||
diff --git a/arch/powerpc/kernel/mce.c b/arch/powerpc/kernel/mce.c index ef267fd9dd22..5e7ece0fda9f 100644 --- a/arch/powerpc/kernel/mce.c +++ b/arch/powerpc/kernel/mce.c | |||
@@ -92,7 +92,8 @@ void save_mce_event(struct pt_regs *regs, long handled, | |||
92 | mce->in_use = 1; | 92 | mce->in_use = 1; |
93 | 93 | ||
94 | mce->initiator = MCE_INITIATOR_CPU; | 94 | mce->initiator = MCE_INITIATOR_CPU; |
95 | if (handled) | 95 | /* Mark it recovered if we have handled it and MSR(RI=1). */ |
96 | if (handled && (regs->msr & MSR_RI)) | ||
96 | mce->disposition = MCE_DISPOSITION_RECOVERED; | 97 | mce->disposition = MCE_DISPOSITION_RECOVERED; |
97 | else | 98 | else |
98 | mce->disposition = MCE_DISPOSITION_NOT_RECOVERED; | 99 | mce->disposition = MCE_DISPOSITION_NOT_RECOVERED; |
diff --git a/arch/powerpc/kernel/pci-common.c b/arch/powerpc/kernel/pci-common.c index a5c0153ede37..7fdf324d5b51 100644 --- a/arch/powerpc/kernel/pci-common.c +++ b/arch/powerpc/kernel/pci-common.c | |||
@@ -78,6 +78,7 @@ EXPORT_SYMBOL(get_pci_dma_ops); | |||
78 | static int get_phb_number(struct device_node *dn) | 78 | static int get_phb_number(struct device_node *dn) |
79 | { | 79 | { |
80 | int ret, phb_id = -1; | 80 | int ret, phb_id = -1; |
81 | u32 prop_32; | ||
81 | u64 prop; | 82 | u64 prop; |
82 | 83 | ||
83 | /* | 84 | /* |
@@ -86,8 +87,10 @@ static int get_phb_number(struct device_node *dn) | |||
86 | * reading "ibm,opal-phbid", only present in OPAL environment. | 87 | * reading "ibm,opal-phbid", only present in OPAL environment. |
87 | */ | 88 | */ |
88 | ret = of_property_read_u64(dn, "ibm,opal-phbid", &prop); | 89 | ret = of_property_read_u64(dn, "ibm,opal-phbid", &prop); |
89 | if (ret) | 90 | if (ret) { |
90 | ret = of_property_read_u32_index(dn, "reg", 1, (u32 *)&prop); | 91 | ret = of_property_read_u32_index(dn, "reg", 1, &prop_32); |
92 | prop = prop_32; | ||
93 | } | ||
91 | 94 | ||
92 | if (!ret) | 95 | if (!ret) |
93 | phb_id = (int)(prop & (MAX_PHBS - 1)); | 96 | phb_id = (int)(prop & (MAX_PHBS - 1)); |
diff --git a/arch/powerpc/kernel/process.c b/arch/powerpc/kernel/process.c index 58ccf86415b4..9ee2623e0f67 100644 --- a/arch/powerpc/kernel/process.c +++ b/arch/powerpc/kernel/process.c | |||
@@ -1074,26 +1074,6 @@ static inline void restore_sprs(struct thread_struct *old_thread, | |||
1074 | #endif | 1074 | #endif |
1075 | } | 1075 | } |
1076 | 1076 | ||
1077 | #ifdef CONFIG_PPC_TRANSACTIONAL_MEM | ||
1078 | void flush_tmregs_to_thread(struct task_struct *tsk) | ||
1079 | { | ||
1080 | /* | ||
1081 | * Process self tracing is not yet supported through | ||
1082 | * ptrace interface. Ptrace generic code should have | ||
1083 | * prevented this from happening in the first place. | ||
1084 | * Warn once here with the message, if some how it | ||
1085 | * is attempted. | ||
1086 | */ | ||
1087 | WARN_ONCE(tsk == current, | ||
1088 | "Not expecting ptrace on self: TM regs may be incorrect\n"); | ||
1089 | |||
1090 | /* | ||
1091 | * If task is not current, it should have been flushed | ||
1092 | * already to it's thread_struct during __switch_to(). | ||
1093 | */ | ||
1094 | } | ||
1095 | #endif | ||
1096 | |||
1097 | struct task_struct *__switch_to(struct task_struct *prev, | 1077 | struct task_struct *__switch_to(struct task_struct *prev, |
1098 | struct task_struct *new) | 1078 | struct task_struct *new) |
1099 | { | 1079 | { |
diff --git a/arch/powerpc/kernel/prom_init.c b/arch/powerpc/kernel/prom_init.c index 6ee4b72cda42..4e74fc588a3f 100644 --- a/arch/powerpc/kernel/prom_init.c +++ b/arch/powerpc/kernel/prom_init.c | |||
@@ -2940,7 +2940,7 @@ unsigned long __init prom_init(unsigned long r3, unsigned long r4, | |||
2940 | 2940 | ||
2941 | /* Don't print anything after quiesce under OPAL, it crashes OFW */ | 2941 | /* Don't print anything after quiesce under OPAL, it crashes OFW */ |
2942 | if (of_platform != PLATFORM_OPAL) { | 2942 | if (of_platform != PLATFORM_OPAL) { |
2943 | prom_printf("Booting Linux via __start() ...\n"); | 2943 | prom_printf("Booting Linux via __start() @ 0x%lx ...\n", kbase); |
2944 | prom_debug("->dt_header_start=0x%x\n", hdr); | 2944 | prom_debug("->dt_header_start=0x%x\n", hdr); |
2945 | } | 2945 | } |
2946 | 2946 | ||
diff --git a/arch/powerpc/kernel/ptrace.c b/arch/powerpc/kernel/ptrace.c index 4f3c5756cc09..bf91658a8a40 100644 --- a/arch/powerpc/kernel/ptrace.c +++ b/arch/powerpc/kernel/ptrace.c | |||
@@ -38,6 +38,7 @@ | |||
38 | #include <asm/page.h> | 38 | #include <asm/page.h> |
39 | #include <asm/pgtable.h> | 39 | #include <asm/pgtable.h> |
40 | #include <asm/switch_to.h> | 40 | #include <asm/switch_to.h> |
41 | #include <asm/tm.h> | ||
41 | 42 | ||
42 | #define CREATE_TRACE_POINTS | 43 | #define CREATE_TRACE_POINTS |
43 | #include <trace/events/syscalls.h> | 44 | #include <trace/events/syscalls.h> |
@@ -118,6 +119,24 @@ static const struct pt_regs_offset regoffset_table[] = { | |||
118 | REG_OFFSET_END, | 119 | REG_OFFSET_END, |
119 | }; | 120 | }; |
120 | 121 | ||
122 | #ifdef CONFIG_PPC_TRANSACTIONAL_MEM | ||
123 | static void flush_tmregs_to_thread(struct task_struct *tsk) | ||
124 | { | ||
125 | /* | ||
126 | * If task is not current, it will have been flushed already to | ||
127 | * it's thread_struct during __switch_to(). | ||
128 | * | ||
129 | * A reclaim flushes ALL the state. | ||
130 | */ | ||
131 | |||
132 | if (tsk == current && MSR_TM_SUSPENDED(mfmsr())) | ||
133 | tm_reclaim_current(TM_CAUSE_SIGNAL); | ||
134 | |||
135 | } | ||
136 | #else | ||
137 | static inline void flush_tmregs_to_thread(struct task_struct *tsk) { } | ||
138 | #endif | ||
139 | |||
121 | /** | 140 | /** |
122 | * regs_query_register_offset() - query register offset from its name | 141 | * regs_query_register_offset() - query register offset from its name |
123 | * @name: the name of a register | 142 | * @name: the name of a register |
diff --git a/arch/powerpc/kernel/setup_32.c b/arch/powerpc/kernel/setup_32.c index c3e861df4b20..24ec3ea4b3a2 100644 --- a/arch/powerpc/kernel/setup_32.c +++ b/arch/powerpc/kernel/setup_32.c | |||
@@ -93,15 +93,16 @@ notrace unsigned long __init early_init(unsigned long dt_ptr) | |||
93 | * and we are running with enough of the MMU enabled to have our | 93 | * and we are running with enough of the MMU enabled to have our |
94 | * proper kernel virtual addresses | 94 | * proper kernel virtual addresses |
95 | * | 95 | * |
96 | * Find out what kind of machine we're on and save any data we need | 96 | * We do the initial parsing of the flat device-tree and prepares |
97 | * from the early boot process (devtree is copied on pmac by prom_init()). | 97 | * for the MMU to be fully initialized. |
98 | * This is called very early on the boot process, after a minimal | ||
99 | * MMU environment has been set up but before MMU_init is called. | ||
100 | */ | 98 | */ |
101 | extern unsigned int memset_nocache_branch; /* Insn to be replaced by NOP */ | 99 | extern unsigned int memset_nocache_branch; /* Insn to be replaced by NOP */ |
102 | 100 | ||
103 | notrace void __init machine_init(u64 dt_ptr) | 101 | notrace void __init machine_init(u64 dt_ptr) |
104 | { | 102 | { |
103 | /* Configure static keys first, now that we're relocated. */ | ||
104 | setup_feature_keys(); | ||
105 | |||
105 | /* Enable early debugging if any specified (see udbg.h) */ | 106 | /* Enable early debugging if any specified (see udbg.h) */ |
106 | udbg_early_init(); | 107 | udbg_early_init(); |
107 | 108 | ||
diff --git a/arch/powerpc/kernel/setup_64.c b/arch/powerpc/kernel/setup_64.c index eafb9a79e011..7ac8e6eaab5b 100644 --- a/arch/powerpc/kernel/setup_64.c +++ b/arch/powerpc/kernel/setup_64.c | |||
@@ -300,6 +300,7 @@ void __init early_setup(unsigned long dt_ptr) | |||
300 | 300 | ||
301 | /* Apply all the dynamic patching */ | 301 | /* Apply all the dynamic patching */ |
302 | apply_feature_fixups(); | 302 | apply_feature_fixups(); |
303 | setup_feature_keys(); | ||
303 | 304 | ||
304 | /* Initialize the hash table or TLB handling */ | 305 | /* Initialize the hash table or TLB handling */ |
305 | early_init_mmu(); | 306 | early_init_mmu(); |
diff --git a/arch/powerpc/kernel/vdso.c b/arch/powerpc/kernel/vdso.c index 6767605ea8da..4111d30badfa 100644 --- a/arch/powerpc/kernel/vdso.c +++ b/arch/powerpc/kernel/vdso.c | |||
@@ -22,6 +22,7 @@ | |||
22 | #include <linux/security.h> | 22 | #include <linux/security.h> |
23 | #include <linux/memblock.h> | 23 | #include <linux/memblock.h> |
24 | 24 | ||
25 | #include <asm/cpu_has_feature.h> | ||
25 | #include <asm/pgtable.h> | 26 | #include <asm/pgtable.h> |
26 | #include <asm/processor.h> | 27 | #include <asm/processor.h> |
27 | #include <asm/mmu.h> | 28 | #include <asm/mmu.h> |
diff --git a/arch/powerpc/kernel/vdso32/Makefile b/arch/powerpc/kernel/vdso32/Makefile index cbabd143acae..78a7449bf489 100644 --- a/arch/powerpc/kernel/vdso32/Makefile +++ b/arch/powerpc/kernel/vdso32/Makefile | |||
@@ -30,7 +30,7 @@ CPPFLAGS_vdso32.lds += -P -C -Upowerpc | |||
30 | $(obj)/vdso32_wrapper.o : $(obj)/vdso32.so | 30 | $(obj)/vdso32_wrapper.o : $(obj)/vdso32.so |
31 | 31 | ||
32 | # link rule for the .so file, .lds has to be first | 32 | # link rule for the .so file, .lds has to be first |
33 | $(obj)/vdso32.so.dbg: $(src)/vdso32.lds $(obj-vdso32) | 33 | $(obj)/vdso32.so.dbg: $(src)/vdso32.lds $(obj-vdso32) FORCE |
34 | $(call if_changed,vdso32ld) | 34 | $(call if_changed,vdso32ld) |
35 | 35 | ||
36 | # strip rule for the .so file | 36 | # strip rule for the .so file |
@@ -39,12 +39,12 @@ $(obj)/%.so: $(obj)/%.so.dbg FORCE | |||
39 | $(call if_changed,objcopy) | 39 | $(call if_changed,objcopy) |
40 | 40 | ||
41 | # assembly rules for the .S files | 41 | # assembly rules for the .S files |
42 | $(obj-vdso32): %.o: %.S | 42 | $(obj-vdso32): %.o: %.S FORCE |
43 | $(call if_changed_dep,vdso32as) | 43 | $(call if_changed_dep,vdso32as) |
44 | 44 | ||
45 | # actual build commands | 45 | # actual build commands |
46 | quiet_cmd_vdso32ld = VDSO32L $@ | 46 | quiet_cmd_vdso32ld = VDSO32L $@ |
47 | cmd_vdso32ld = $(CROSS32CC) $(c_flags) -Wl,-T $^ -o $@ | 47 | cmd_vdso32ld = $(CROSS32CC) $(c_flags) -o $@ -Wl,-T$(filter %.lds,$^) $(filter %.o,$^) |
48 | quiet_cmd_vdso32as = VDSO32A $@ | 48 | quiet_cmd_vdso32as = VDSO32A $@ |
49 | cmd_vdso32as = $(CROSS32CC) $(a_flags) -c -o $@ $< | 49 | cmd_vdso32as = $(CROSS32CC) $(a_flags) -c -o $@ $< |
50 | 50 | ||
diff --git a/arch/powerpc/kernel/vdso64/Makefile b/arch/powerpc/kernel/vdso64/Makefile index c710802b8fb6..366ae09b14c1 100644 --- a/arch/powerpc/kernel/vdso64/Makefile +++ b/arch/powerpc/kernel/vdso64/Makefile | |||
@@ -23,7 +23,7 @@ CPPFLAGS_vdso64.lds += -P -C -U$(ARCH) | |||
23 | $(obj)/vdso64_wrapper.o : $(obj)/vdso64.so | 23 | $(obj)/vdso64_wrapper.o : $(obj)/vdso64.so |
24 | 24 | ||
25 | # link rule for the .so file, .lds has to be first | 25 | # link rule for the .so file, .lds has to be first |
26 | $(obj)/vdso64.so.dbg: $(src)/vdso64.lds $(obj-vdso64) | 26 | $(obj)/vdso64.so.dbg: $(src)/vdso64.lds $(obj-vdso64) FORCE |
27 | $(call if_changed,vdso64ld) | 27 | $(call if_changed,vdso64ld) |
28 | 28 | ||
29 | # strip rule for the .so file | 29 | # strip rule for the .so file |
@@ -32,12 +32,12 @@ $(obj)/%.so: $(obj)/%.so.dbg FORCE | |||
32 | $(call if_changed,objcopy) | 32 | $(call if_changed,objcopy) |
33 | 33 | ||
34 | # assembly rules for the .S files | 34 | # assembly rules for the .S files |
35 | $(obj-vdso64): %.o: %.S | 35 | $(obj-vdso64): %.o: %.S FORCE |
36 | $(call if_changed_dep,vdso64as) | 36 | $(call if_changed_dep,vdso64as) |
37 | 37 | ||
38 | # actual build commands | 38 | # actual build commands |
39 | quiet_cmd_vdso64ld = VDSO64L $@ | 39 | quiet_cmd_vdso64ld = VDSO64L $@ |
40 | cmd_vdso64ld = $(CC) $(c_flags) -Wl,-T $^ -o $@ | 40 | cmd_vdso64ld = $(CC) $(c_flags) -o $@ -Wl,-T$(filter %.lds,$^) $(filter %.o,$^) |
41 | quiet_cmd_vdso64as = VDSO64A $@ | 41 | quiet_cmd_vdso64as = VDSO64A $@ |
42 | cmd_vdso64as = $(CC) $(a_flags) -c -o $@ $< | 42 | cmd_vdso64as = $(CC) $(a_flags) -c -o $@ $< |
43 | 43 | ||