diff options
Diffstat (limited to 'arch/sparc/kernel')
-rw-r--r-- | arch/sparc/kernel/head_32.S | 4 | ||||
-rw-r--r-- | arch/sparc/kernel/head_64.S | 2 | ||||
-rw-r--r-- | arch/sparc/kernel/ldc.c | 6 | ||||
-rw-r--r-- | arch/sparc/kernel/of_device_32.c | 21 | ||||
-rw-r--r-- | arch/sparc/kernel/of_device_64.c | 24 | ||||
-rw-r--r-- | arch/sparc/kernel/pci_fire.c | 4 | ||||
-rw-r--r-- | arch/sparc/kernel/pci_psycho.c | 8 | ||||
-rw-r--r-- | arch/sparc/kernel/pci_sabre.c | 8 | ||||
-rw-r--r-- | arch/sparc/kernel/pci_sun4v.c | 14 | ||||
-rw-r--r-- | arch/sparc/kernel/power.c | 2 | ||||
-rw-r--r-- | arch/sparc/kernel/smp_64.c | 4 | ||||
-rw-r--r-- | arch/sparc/kernel/sys_sparc32.c | 19 | ||||
-rw-r--r-- | arch/sparc/kernel/systbls_32.S | 2 | ||||
-rw-r--r-- | arch/sparc/kernel/systbls_64.S | 4 | ||||
-rw-r--r-- | arch/sparc/kernel/time_64.c | 7 | ||||
-rw-r--r-- | arch/sparc/kernel/vmlinux.lds.S | 2 |
16 files changed, 79 insertions, 52 deletions
diff --git a/arch/sparc/kernel/head_32.S b/arch/sparc/kernel/head_32.S index f0b4b516304f..6b4d8acc4c83 100644 --- a/arch/sparc/kernel/head_32.S +++ b/arch/sparc/kernel/head_32.S | |||
@@ -72,7 +72,7 @@ sun4e_notsup: | |||
72 | .align 4 | 72 | .align 4 |
73 | 73 | ||
74 | /* The Sparc trap table, bootloader gives us control at _start. */ | 74 | /* The Sparc trap table, bootloader gives us control at _start. */ |
75 | .section .text.head,"ax" | 75 | __HEAD |
76 | .globl start, _stext, _start, __stext | 76 | .globl start, _stext, _start, __stext |
77 | .globl trapbase | 77 | .globl trapbase |
78 | _start: /* danger danger */ | 78 | _start: /* danger danger */ |
@@ -735,7 +735,7 @@ go_to_highmem: | |||
735 | nop | 735 | nop |
736 | 736 | ||
737 | /* The code above should be at beginning and we have to take care about | 737 | /* The code above should be at beginning and we have to take care about |
738 | * short jumps, as branching to .text.init section from .text is usually | 738 | * short jumps, as branching to .init.text section from .text is usually |
739 | * impossible */ | 739 | * impossible */ |
740 | __INIT | 740 | __INIT |
741 | /* Acquire boot time privileged register values, this will help debugging. | 741 | /* Acquire boot time privileged register values, this will help debugging. |
diff --git a/arch/sparc/kernel/head_64.S b/arch/sparc/kernel/head_64.S index 3a1b7bf03cff..91bf4c7f79b9 100644 --- a/arch/sparc/kernel/head_64.S +++ b/arch/sparc/kernel/head_64.S | |||
@@ -467,7 +467,7 @@ jump_to_sun4u_init: | |||
467 | jmpl %g2 + %g0, %g0 | 467 | jmpl %g2 + %g0, %g0 |
468 | nop | 468 | nop |
469 | 469 | ||
470 | .section .text.init.refok | 470 | __REF |
471 | sun4u_init: | 471 | sun4u_init: |
472 | BRANCH_IF_SUN4V(g1, sun4v_init) | 472 | BRANCH_IF_SUN4V(g1, sun4v_init) |
473 | 473 | ||
diff --git a/arch/sparc/kernel/ldc.c b/arch/sparc/kernel/ldc.c index 6ce5d2598a09..adf5f273868a 100644 --- a/arch/sparc/kernel/ldc.c +++ b/arch/sparc/kernel/ldc.c | |||
@@ -1183,8 +1183,7 @@ out_free_txq: | |||
1183 | free_queue(lp->tx_num_entries, lp->tx_base); | 1183 | free_queue(lp->tx_num_entries, lp->tx_base); |
1184 | 1184 | ||
1185 | out_free_mssbuf: | 1185 | out_free_mssbuf: |
1186 | if (mssbuf) | 1186 | kfree(mssbuf); |
1187 | kfree(mssbuf); | ||
1188 | 1187 | ||
1189 | out_free_iommu: | 1188 | out_free_iommu: |
1190 | ldc_iommu_release(lp); | 1189 | ldc_iommu_release(lp); |
@@ -1217,8 +1216,7 @@ void ldc_free(struct ldc_channel *lp) | |||
1217 | 1216 | ||
1218 | hlist_del(&lp->list); | 1217 | hlist_del(&lp->list); |
1219 | 1218 | ||
1220 | if (lp->mssbuf) | 1219 | kfree(lp->mssbuf); |
1221 | kfree(lp->mssbuf); | ||
1222 | 1220 | ||
1223 | ldc_iommu_release(lp); | 1221 | ldc_iommu_release(lp); |
1224 | 1222 | ||
diff --git a/arch/sparc/kernel/of_device_32.c b/arch/sparc/kernel/of_device_32.c index 0a83bd737654..c8f14c1dc521 100644 --- a/arch/sparc/kernel/of_device_32.c +++ b/arch/sparc/kernel/of_device_32.c | |||
@@ -246,8 +246,25 @@ static unsigned long of_bus_pci_get_flags(const u32 *addr, unsigned long flags) | |||
246 | 246 | ||
247 | static int of_bus_sbus_match(struct device_node *np) | 247 | static int of_bus_sbus_match(struct device_node *np) |
248 | { | 248 | { |
249 | return !strcmp(np->name, "sbus") || | 249 | struct device_node *dp = np; |
250 | !strcmp(np->name, "sbi"); | 250 | |
251 | while (dp) { | ||
252 | if (!strcmp(dp->name, "sbus") || | ||
253 | !strcmp(dp->name, "sbi")) | ||
254 | return 1; | ||
255 | |||
256 | /* Have a look at use_1to1_mapping(). We're trying | ||
257 | * to match SBUS if that's the top-level bus and we | ||
258 | * don't have some intervening real bus that provides | ||
259 | * ranges based translations. | ||
260 | */ | ||
261 | if (of_find_property(dp, "ranges", NULL) != NULL) | ||
262 | break; | ||
263 | |||
264 | dp = dp->parent; | ||
265 | } | ||
266 | |||
267 | return 0; | ||
251 | } | 268 | } |
252 | 269 | ||
253 | static void of_bus_sbus_count_cells(struct device_node *child, | 270 | static void of_bus_sbus_count_cells(struct device_node *child, |
diff --git a/arch/sparc/kernel/of_device_64.c b/arch/sparc/kernel/of_device_64.c index b4a12c9aa5f8..5ac287ac03de 100644 --- a/arch/sparc/kernel/of_device_64.c +++ b/arch/sparc/kernel/of_device_64.c | |||
@@ -99,8 +99,7 @@ static inline u64 of_read_addr(const u32 *cell, int size) | |||
99 | return r; | 99 | return r; |
100 | } | 100 | } |
101 | 101 | ||
102 | static void __init get_cells(struct device_node *dp, | 102 | static void get_cells(struct device_node *dp, int *addrc, int *sizec) |
103 | int *addrc, int *sizec) | ||
104 | { | 103 | { |
105 | if (addrc) | 104 | if (addrc) |
106 | *addrc = of_n_addr_cells(dp); | 105 | *addrc = of_n_addr_cells(dp); |
@@ -301,8 +300,25 @@ static unsigned long of_bus_pci_get_flags(const u32 *addr, unsigned long flags) | |||
301 | 300 | ||
302 | static int of_bus_sbus_match(struct device_node *np) | 301 | static int of_bus_sbus_match(struct device_node *np) |
303 | { | 302 | { |
304 | return !strcmp(np->name, "sbus") || | 303 | struct device_node *dp = np; |
305 | !strcmp(np->name, "sbi"); | 304 | |
305 | while (dp) { | ||
306 | if (!strcmp(dp->name, "sbus") || | ||
307 | !strcmp(dp->name, "sbi")) | ||
308 | return 1; | ||
309 | |||
310 | /* Have a look at use_1to1_mapping(). We're trying | ||
311 | * to match SBUS if that's the top-level bus and we | ||
312 | * don't have some intervening real bus that provides | ||
313 | * ranges based translations. | ||
314 | */ | ||
315 | if (of_find_property(dp, "ranges", NULL) != NULL) | ||
316 | break; | ||
317 | |||
318 | dp = dp->parent; | ||
319 | } | ||
320 | |||
321 | return 0; | ||
306 | } | 322 | } |
307 | 323 | ||
308 | static void of_bus_sbus_count_cells(struct device_node *child, | 324 | static void of_bus_sbus_count_cells(struct device_node *child, |
diff --git a/arch/sparc/kernel/pci_fire.c b/arch/sparc/kernel/pci_fire.c index 9462b68f4894..d53f45bc7dda 100644 --- a/arch/sparc/kernel/pci_fire.c +++ b/arch/sparc/kernel/pci_fire.c | |||
@@ -409,8 +409,8 @@ static void pci_fire_hw_init(struct pci_pbm_info *pbm) | |||
409 | upa_writeq(~(u64)0, pbm->pbm_regs + FIRE_PEC_IENAB); | 409 | upa_writeq(~(u64)0, pbm->pbm_regs + FIRE_PEC_IENAB); |
410 | } | 410 | } |
411 | 411 | ||
412 | static int __init pci_fire_pbm_init(struct pci_pbm_info *pbm, | 412 | static int __devinit pci_fire_pbm_init(struct pci_pbm_info *pbm, |
413 | struct of_device *op, u32 portid) | 413 | struct of_device *op, u32 portid) |
414 | { | 414 | { |
415 | const struct linux_prom64_registers *regs; | 415 | const struct linux_prom64_registers *regs; |
416 | struct device_node *dp = op->node; | 416 | struct device_node *dp = op->node; |
diff --git a/arch/sparc/kernel/pci_psycho.c b/arch/sparc/kernel/pci_psycho.c index 3b34344082ef..142b9d6984a8 100644 --- a/arch/sparc/kernel/pci_psycho.c +++ b/arch/sparc/kernel/pci_psycho.c | |||
@@ -365,8 +365,8 @@ static void pbm_config_busmastering(struct pci_pbm_info *pbm) | |||
365 | pci_config_write8(addr, 64); | 365 | pci_config_write8(addr, 64); |
366 | } | 366 | } |
367 | 367 | ||
368 | static void __init psycho_scan_bus(struct pci_pbm_info *pbm, | 368 | static void __devinit psycho_scan_bus(struct pci_pbm_info *pbm, |
369 | struct device *parent) | 369 | struct device *parent) |
370 | { | 370 | { |
371 | pbm_config_busmastering(pbm); | 371 | pbm_config_busmastering(pbm); |
372 | pbm->is_66mhz_capable = 0; | 372 | pbm->is_66mhz_capable = 0; |
@@ -482,8 +482,8 @@ static void psycho_pbm_strbuf_init(struct pci_pbm_info *pbm, | |||
482 | #define PSYCHO_MEMSPACE_B 0x180000000UL | 482 | #define PSYCHO_MEMSPACE_B 0x180000000UL |
483 | #define PSYCHO_MEMSPACE_SIZE 0x07fffffffUL | 483 | #define PSYCHO_MEMSPACE_SIZE 0x07fffffffUL |
484 | 484 | ||
485 | static void __init psycho_pbm_init(struct pci_pbm_info *pbm, | 485 | static void __devinit psycho_pbm_init(struct pci_pbm_info *pbm, |
486 | struct of_device *op, int is_pbm_a) | 486 | struct of_device *op, int is_pbm_a) |
487 | { | 487 | { |
488 | psycho_pbm_init_common(pbm, op, "PSYCHO", PBM_CHIP_TYPE_PSYCHO); | 488 | psycho_pbm_init_common(pbm, op, "PSYCHO", PBM_CHIP_TYPE_PSYCHO); |
489 | psycho_pbm_strbuf_init(pbm, is_pbm_a); | 489 | psycho_pbm_strbuf_init(pbm, is_pbm_a); |
diff --git a/arch/sparc/kernel/pci_sabre.c b/arch/sparc/kernel/pci_sabre.c index 713257b6963c..ba6fbeba3e2c 100644 --- a/arch/sparc/kernel/pci_sabre.c +++ b/arch/sparc/kernel/pci_sabre.c | |||
@@ -402,8 +402,8 @@ static void apb_init(struct pci_bus *sabre_bus) | |||
402 | } | 402 | } |
403 | } | 403 | } |
404 | 404 | ||
405 | static void __init sabre_scan_bus(struct pci_pbm_info *pbm, | 405 | static void __devinit sabre_scan_bus(struct pci_pbm_info *pbm, |
406 | struct device *parent) | 406 | struct device *parent) |
407 | { | 407 | { |
408 | static int once; | 408 | static int once; |
409 | 409 | ||
@@ -442,8 +442,8 @@ static void __init sabre_scan_bus(struct pci_pbm_info *pbm, | |||
442 | sabre_register_error_handlers(pbm); | 442 | sabre_register_error_handlers(pbm); |
443 | } | 443 | } |
444 | 444 | ||
445 | static void __init sabre_pbm_init(struct pci_pbm_info *pbm, | 445 | static void __devinit sabre_pbm_init(struct pci_pbm_info *pbm, |
446 | struct of_device *op) | 446 | struct of_device *op) |
447 | { | 447 | { |
448 | psycho_pbm_init_common(pbm, op, "SABRE", PBM_CHIP_TYPE_SABRE); | 448 | psycho_pbm_init_common(pbm, op, "SABRE", PBM_CHIP_TYPE_SABRE); |
449 | pbm->pci_afsr = pbm->controller_regs + SABRE_PIOAFSR; | 449 | pbm->pci_afsr = pbm->controller_regs + SABRE_PIOAFSR; |
diff --git a/arch/sparc/kernel/pci_sun4v.c b/arch/sparc/kernel/pci_sun4v.c index 0ef0ab3d4763..5db5ebed35da 100644 --- a/arch/sparc/kernel/pci_sun4v.c +++ b/arch/sparc/kernel/pci_sun4v.c | |||
@@ -545,8 +545,8 @@ static const struct dma_ops sun4v_dma_ops = { | |||
545 | .sync_sg_for_cpu = dma_4v_sync_sg_for_cpu, | 545 | .sync_sg_for_cpu = dma_4v_sync_sg_for_cpu, |
546 | }; | 546 | }; |
547 | 547 | ||
548 | static void __init pci_sun4v_scan_bus(struct pci_pbm_info *pbm, | 548 | static void __devinit pci_sun4v_scan_bus(struct pci_pbm_info *pbm, |
549 | struct device *parent) | 549 | struct device *parent) |
550 | { | 550 | { |
551 | struct property *prop; | 551 | struct property *prop; |
552 | struct device_node *dp; | 552 | struct device_node *dp; |
@@ -559,8 +559,8 @@ static void __init pci_sun4v_scan_bus(struct pci_pbm_info *pbm, | |||
559 | /* XXX register error interrupt handlers XXX */ | 559 | /* XXX register error interrupt handlers XXX */ |
560 | } | 560 | } |
561 | 561 | ||
562 | static unsigned long __init probe_existing_entries(struct pci_pbm_info *pbm, | 562 | static unsigned long __devinit probe_existing_entries(struct pci_pbm_info *pbm, |
563 | struct iommu *iommu) | 563 | struct iommu *iommu) |
564 | { | 564 | { |
565 | struct iommu_arena *arena = &iommu->arena; | 565 | struct iommu_arena *arena = &iommu->arena; |
566 | unsigned long i, cnt = 0; | 566 | unsigned long i, cnt = 0; |
@@ -587,7 +587,7 @@ static unsigned long __init probe_existing_entries(struct pci_pbm_info *pbm, | |||
587 | return cnt; | 587 | return cnt; |
588 | } | 588 | } |
589 | 589 | ||
590 | static int __init pci_sun4v_iommu_init(struct pci_pbm_info *pbm) | 590 | static int __devinit pci_sun4v_iommu_init(struct pci_pbm_info *pbm) |
591 | { | 591 | { |
592 | static const u32 vdma_default[] = { 0x80000000, 0x80000000 }; | 592 | static const u32 vdma_default[] = { 0x80000000, 0x80000000 }; |
593 | struct iommu *iommu = pbm->iommu; | 593 | struct iommu *iommu = pbm->iommu; |
@@ -889,8 +889,8 @@ static void pci_sun4v_msi_init(struct pci_pbm_info *pbm) | |||
889 | } | 889 | } |
890 | #endif /* !(CONFIG_PCI_MSI) */ | 890 | #endif /* !(CONFIG_PCI_MSI) */ |
891 | 891 | ||
892 | static int __init pci_sun4v_pbm_init(struct pci_pbm_info *pbm, | 892 | static int __devinit pci_sun4v_pbm_init(struct pci_pbm_info *pbm, |
893 | struct of_device *op, u32 devhandle) | 893 | struct of_device *op, u32 devhandle) |
894 | { | 894 | { |
895 | struct device_node *dp = op->node; | 895 | struct device_node *dp = op->node; |
896 | int err; | 896 | int err; |
diff --git a/arch/sparc/kernel/power.c b/arch/sparc/kernel/power.c index ae88f06a7ec4..e2a045c235a1 100644 --- a/arch/sparc/kernel/power.c +++ b/arch/sparc/kernel/power.c | |||
@@ -23,7 +23,7 @@ static irqreturn_t power_handler(int irq, void *dev_id) | |||
23 | return IRQ_HANDLED; | 23 | return IRQ_HANDLED; |
24 | } | 24 | } |
25 | 25 | ||
26 | static int __init has_button_interrupt(unsigned int irq, struct device_node *dp) | 26 | static int __devinit has_button_interrupt(unsigned int irq, struct device_node *dp) |
27 | { | 27 | { |
28 | if (irq == 0xffffffff) | 28 | if (irq == 0xffffffff) |
29 | return 0; | 29 | return 0; |
diff --git a/arch/sparc/kernel/smp_64.c b/arch/sparc/kernel/smp_64.c index 708e12a26b05..f7642e5a94db 100644 --- a/arch/sparc/kernel/smp_64.c +++ b/arch/sparc/kernel/smp_64.c | |||
@@ -118,9 +118,9 @@ void __cpuinit smp_callin(void) | |||
118 | while (!cpu_isset(cpuid, smp_commenced_mask)) | 118 | while (!cpu_isset(cpuid, smp_commenced_mask)) |
119 | rmb(); | 119 | rmb(); |
120 | 120 | ||
121 | ipi_call_lock(); | 121 | ipi_call_lock_irq(); |
122 | cpu_set(cpuid, cpu_online_map); | 122 | cpu_set(cpuid, cpu_online_map); |
123 | ipi_call_unlock(); | 123 | ipi_call_unlock_irq(); |
124 | 124 | ||
125 | /* idle thread is expected to have preempt disabled */ | 125 | /* idle thread is expected to have preempt disabled */ |
126 | preempt_disable(); | 126 | preempt_disable(); |
diff --git a/arch/sparc/kernel/sys_sparc32.c b/arch/sparc/kernel/sys_sparc32.c index e800503879e4..f5000a460c05 100644 --- a/arch/sparc/kernel/sys_sparc32.c +++ b/arch/sparc/kernel/sys_sparc32.c | |||
@@ -206,21 +206,12 @@ asmlinkage long compat_sys_fstatat64(unsigned int dfd, char __user *filename, | |||
206 | struct compat_stat64 __user * statbuf, int flag) | 206 | struct compat_stat64 __user * statbuf, int flag) |
207 | { | 207 | { |
208 | struct kstat stat; | 208 | struct kstat stat; |
209 | int error = -EINVAL; | 209 | int error; |
210 | |||
211 | if ((flag & ~AT_SYMLINK_NOFOLLOW) != 0) | ||
212 | goto out; | ||
213 | |||
214 | if (flag & AT_SYMLINK_NOFOLLOW) | ||
215 | error = vfs_lstat_fd(dfd, filename, &stat); | ||
216 | else | ||
217 | error = vfs_stat_fd(dfd, filename, &stat); | ||
218 | |||
219 | if (!error) | ||
220 | error = cp_compat_stat64(&stat, statbuf); | ||
221 | 210 | ||
222 | out: | 211 | error = vfs_fstatat(dfd, filename, &stat, flag); |
223 | return error; | 212 | if (error) |
213 | return error; | ||
214 | return cp_compat_stat64(&stat, statbuf); | ||
224 | } | 215 | } |
225 | 216 | ||
226 | asmlinkage long compat_sys_sysfs(int option, u32 arg1, u32 arg2) | 217 | asmlinkage long compat_sys_sysfs(int option, u32 arg1, u32 arg2) |
diff --git a/arch/sparc/kernel/systbls_32.S b/arch/sparc/kernel/systbls_32.S index dccc95df0c7f..00ec3b15f38c 100644 --- a/arch/sparc/kernel/systbls_32.S +++ b/arch/sparc/kernel/systbls_32.S | |||
@@ -81,4 +81,4 @@ sys_call_table: | |||
81 | /*305*/ .long sys_set_mempolicy, sys_kexec_load, sys_move_pages, sys_getcpu, sys_epoll_pwait | 81 | /*305*/ .long sys_set_mempolicy, sys_kexec_load, sys_move_pages, sys_getcpu, sys_epoll_pwait |
82 | /*310*/ .long sys_utimensat, sys_signalfd, sys_timerfd_create, sys_eventfd, sys_fallocate | 82 | /*310*/ .long sys_utimensat, sys_signalfd, sys_timerfd_create, sys_eventfd, sys_fallocate |
83 | /*315*/ .long sys_timerfd_settime, sys_timerfd_gettime, sys_signalfd4, sys_eventfd2, sys_epoll_create1 | 83 | /*315*/ .long sys_timerfd_settime, sys_timerfd_gettime, sys_signalfd4, sys_eventfd2, sys_epoll_create1 |
84 | /*320*/ .long sys_dup3, sys_pipe2, sys_inotify_init1, sys_accept4 | 84 | /*320*/ .long sys_dup3, sys_pipe2, sys_inotify_init1, sys_accept4, sys_preadv, sys_pwritev |
diff --git a/arch/sparc/kernel/systbls_64.S b/arch/sparc/kernel/systbls_64.S index a8000b1cda74..82b5bf85b9d2 100644 --- a/arch/sparc/kernel/systbls_64.S +++ b/arch/sparc/kernel/systbls_64.S | |||
@@ -82,7 +82,7 @@ sys_call_table32: | |||
82 | .word compat_sys_set_mempolicy, compat_sys_kexec_load, compat_sys_move_pages, sys_getcpu, compat_sys_epoll_pwait | 82 | .word compat_sys_set_mempolicy, compat_sys_kexec_load, compat_sys_move_pages, sys_getcpu, compat_sys_epoll_pwait |
83 | /*310*/ .word compat_sys_utimensat, compat_sys_signalfd, sys_timerfd_create, sys_eventfd, compat_sys_fallocate | 83 | /*310*/ .word compat_sys_utimensat, compat_sys_signalfd, sys_timerfd_create, sys_eventfd, compat_sys_fallocate |
84 | .word compat_sys_timerfd_settime, compat_sys_timerfd_gettime, compat_sys_signalfd4, sys_eventfd2, sys_epoll_create1 | 84 | .word compat_sys_timerfd_settime, compat_sys_timerfd_gettime, compat_sys_signalfd4, sys_eventfd2, sys_epoll_create1 |
85 | /*320*/ .word sys_dup3, sys_pipe2, sys_inotify_init1, sys_accept4 | 85 | /*320*/ .word sys_dup3, sys_pipe2, sys_inotify_init1, sys_accept4, compat_sys_preadv, compat_sys_pwritev |
86 | 86 | ||
87 | #endif /* CONFIG_COMPAT */ | 87 | #endif /* CONFIG_COMPAT */ |
88 | 88 | ||
@@ -156,4 +156,4 @@ sys_call_table: | |||
156 | .word sys_set_mempolicy, sys_kexec_load, sys_move_pages, sys_getcpu, sys_epoll_pwait | 156 | .word sys_set_mempolicy, sys_kexec_load, sys_move_pages, sys_getcpu, sys_epoll_pwait |
157 | /*310*/ .word sys_utimensat, sys_signalfd, sys_timerfd_create, sys_eventfd, sys_fallocate | 157 | /*310*/ .word sys_utimensat, sys_signalfd, sys_timerfd_create, sys_eventfd, sys_fallocate |
158 | .word sys_timerfd_settime, sys_timerfd_gettime, sys_signalfd4, sys_eventfd2, sys_epoll_create1 | 158 | .word sys_timerfd_settime, sys_timerfd_gettime, sys_signalfd4, sys_eventfd2, sys_epoll_create1 |
159 | /*320*/ .word sys_dup3, sys_pipe2, sys_inotify_init1, sys_accept4 | 159 | /*320*/ .word sys_dup3, sys_pipe2, sys_inotify_init1, sys_accept4, sys_preadv, sys_pwritev |
diff --git a/arch/sparc/kernel/time_64.c b/arch/sparc/kernel/time_64.c index db310aa00183..5c12e79b4bdf 100644 --- a/arch/sparc/kernel/time_64.c +++ b/arch/sparc/kernel/time_64.c | |||
@@ -814,6 +814,11 @@ void udelay(unsigned long usecs) | |||
814 | } | 814 | } |
815 | EXPORT_SYMBOL(udelay); | 815 | EXPORT_SYMBOL(udelay); |
816 | 816 | ||
817 | static cycle_t clocksource_tick_read(struct clocksource *cs) | ||
818 | { | ||
819 | return tick_ops->get_tick(); | ||
820 | } | ||
821 | |||
817 | void __init time_init(void) | 822 | void __init time_init(void) |
818 | { | 823 | { |
819 | unsigned long freq = sparc64_init_timers(); | 824 | unsigned long freq = sparc64_init_timers(); |
@@ -827,7 +832,7 @@ void __init time_init(void) | |||
827 | clocksource_tick.mult = | 832 | clocksource_tick.mult = |
828 | clocksource_hz2mult(freq, | 833 | clocksource_hz2mult(freq, |
829 | clocksource_tick.shift); | 834 | clocksource_tick.shift); |
830 | clocksource_tick.read = tick_ops->get_tick; | 835 | clocksource_tick.read = clocksource_tick_read; |
831 | 836 | ||
832 | printk("clocksource: mult[%x] shift[%d]\n", | 837 | printk("clocksource: mult[%x] shift[%d]\n", |
833 | clocksource_tick.mult, clocksource_tick.shift); | 838 | clocksource_tick.mult, clocksource_tick.shift); |
diff --git a/arch/sparc/kernel/vmlinux.lds.S b/arch/sparc/kernel/vmlinux.lds.S index 76267085b13b..fcbbd000ec08 100644 --- a/arch/sparc/kernel/vmlinux.lds.S +++ b/arch/sparc/kernel/vmlinux.lds.S | |||
@@ -41,7 +41,7 @@ SECTIONS | |||
41 | .text TEXTSTART : | 41 | .text TEXTSTART : |
42 | { | 42 | { |
43 | _text = .; | 43 | _text = .; |
44 | *(.text.head) | 44 | HEAD_TEXT |
45 | TEXT_TEXT | 45 | TEXT_TEXT |
46 | SCHED_TEXT | 46 | SCHED_TEXT |
47 | LOCK_TEXT | 47 | LOCK_TEXT |