diff options
author | Ingo Molnar <mingo@elte.hu> | 2009-01-21 04:39:51 -0500 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2009-01-21 04:39:51 -0500 |
commit | 198030782cedf25391e67e7c88b04f87a5eb6563 (patch) | |
tree | 5b7368c6bf052bcb4bb273497a57900720d36f51 /arch/alpha | |
parent | 4ec71fa2d2c3f1040348f2604f4b8ccc833d1c2e (diff) | |
parent | 92181f190b649f7ef2b79cbf5c00f26ccc66da2a (diff) |
Merge branch 'x86/mm' into core/percpu
Conflicts:
arch/x86/mm/fault.c
Diffstat (limited to 'arch/alpha')
-rw-r--r-- | arch/alpha/include/asm/Kbuild | 1 | ||||
-rw-r--r-- | arch/alpha/include/asm/byteorder.h | 1 | ||||
-rw-r--r-- | arch/alpha/include/asm/machvec.h | 4 | ||||
-rw-r--r-- | arch/alpha/include/asm/pgalloc.h | 7 | ||||
-rw-r--r-- | arch/alpha/include/asm/rtc.h | 12 | ||||
-rw-r--r-- | arch/alpha/kernel/.gitignore | 1 | ||||
-rw-r--r-- | arch/alpha/kernel/core_marvel.c | 10 | ||||
-rw-r--r-- | arch/alpha/kernel/entry.S | 8 | ||||
-rw-r--r-- | arch/alpha/kernel/irq_srm.c | 2 | ||||
-rw-r--r-- | arch/alpha/kernel/machvec_impl.h | 5 | ||||
-rw-r--r-- | arch/alpha/kernel/proto.h | 2 | ||||
-rw-r--r-- | arch/alpha/kernel/sys_jensen.c | 2 | ||||
-rw-r--r-- | arch/alpha/kernel/sys_marvel.c | 56 | ||||
-rw-r--r-- | arch/alpha/kernel/sys_nautilus.c | 4 | ||||
-rw-r--r-- | arch/alpha/kernel/systbls.S | 2 | ||||
-rw-r--r-- | arch/alpha/kernel/time.c | 10 | ||||
-rw-r--r-- | arch/alpha/mm/init.c | 7 |
17 files changed, 105 insertions, 29 deletions
diff --git a/arch/alpha/include/asm/Kbuild b/arch/alpha/include/asm/Kbuild index 4dad27360576..b7c8f188b313 100644 --- a/arch/alpha/include/asm/Kbuild +++ b/arch/alpha/include/asm/Kbuild | |||
@@ -9,4 +9,3 @@ unifdef-y += console.h | |||
9 | unifdef-y += fpu.h | 9 | unifdef-y += fpu.h |
10 | unifdef-y += sysinfo.h | 10 | unifdef-y += sysinfo.h |
11 | unifdef-y += compiler.h | 11 | unifdef-y += compiler.h |
12 | unifdef-y += swab.h | ||
diff --git a/arch/alpha/include/asm/byteorder.h b/arch/alpha/include/asm/byteorder.h index 6772f3168701..73683093202d 100644 --- a/arch/alpha/include/asm/byteorder.h +++ b/arch/alpha/include/asm/byteorder.h | |||
@@ -1,7 +1,6 @@ | |||
1 | #ifndef _ALPHA_BYTEORDER_H | 1 | #ifndef _ALPHA_BYTEORDER_H |
2 | #define _ALPHA_BYTEORDER_H | 2 | #define _ALPHA_BYTEORDER_H |
3 | 3 | ||
4 | #include <asm/swab.h> | ||
5 | #include <linux/byteorder/little_endian.h> | 4 | #include <linux/byteorder/little_endian.h> |
6 | 5 | ||
7 | #endif /* _ALPHA_BYTEORDER_H */ | 6 | #endif /* _ALPHA_BYTEORDER_H */ |
diff --git a/arch/alpha/include/asm/machvec.h b/arch/alpha/include/asm/machvec.h index a86c083cdf7f..fea4ea75b79d 100644 --- a/arch/alpha/include/asm/machvec.h +++ b/arch/alpha/include/asm/machvec.h | |||
@@ -21,6 +21,7 @@ struct pci_dev; | |||
21 | struct pci_ops; | 21 | struct pci_ops; |
22 | struct pci_controller; | 22 | struct pci_controller; |
23 | struct _alpha_agp_info; | 23 | struct _alpha_agp_info; |
24 | struct rtc_time; | ||
24 | 25 | ||
25 | struct alpha_machine_vector | 26 | struct alpha_machine_vector |
26 | { | 27 | { |
@@ -94,6 +95,9 @@ struct alpha_machine_vector | |||
94 | 95 | ||
95 | struct _alpha_agp_info *(*agp_info)(void); | 96 | struct _alpha_agp_info *(*agp_info)(void); |
96 | 97 | ||
98 | unsigned int (*rtc_get_time)(struct rtc_time *); | ||
99 | int (*rtc_set_time)(struct rtc_time *); | ||
100 | |||
97 | const char *vector_name; | 101 | const char *vector_name; |
98 | 102 | ||
99 | /* NUMA information */ | 103 | /* NUMA information */ |
diff --git a/arch/alpha/include/asm/pgalloc.h b/arch/alpha/include/asm/pgalloc.h index fd090155dccd..bc2a0daf2d92 100644 --- a/arch/alpha/include/asm/pgalloc.h +++ b/arch/alpha/include/asm/pgalloc.h | |||
@@ -50,7 +50,12 @@ pmd_free(struct mm_struct *mm, pmd_t *pmd) | |||
50 | free_page((unsigned long)pmd); | 50 | free_page((unsigned long)pmd); |
51 | } | 51 | } |
52 | 52 | ||
53 | extern pte_t *pte_alloc_one_kernel(struct mm_struct *mm, unsigned long addr); | 53 | static inline pte_t * |
54 | pte_alloc_one_kernel(struct mm_struct *mm, unsigned long address) | ||
55 | { | ||
56 | pte_t *pte = (pte_t *)__get_free_page(GFP_KERNEL|__GFP_REPEAT|__GFP_ZERO); | ||
57 | return pte; | ||
58 | } | ||
54 | 59 | ||
55 | static inline void | 60 | static inline void |
56 | pte_free_kernel(struct mm_struct *mm, pte_t *pte) | 61 | pte_free_kernel(struct mm_struct *mm, pte_t *pte) |
diff --git a/arch/alpha/include/asm/rtc.h b/arch/alpha/include/asm/rtc.h index 4e854b1333eb..1f7fba671ae6 100644 --- a/arch/alpha/include/asm/rtc.h +++ b/arch/alpha/include/asm/rtc.h | |||
@@ -1,9 +1,15 @@ | |||
1 | #ifndef _ALPHA_RTC_H | 1 | #ifndef _ALPHA_RTC_H |
2 | #define _ALPHA_RTC_H | 2 | #define _ALPHA_RTC_H |
3 | 3 | ||
4 | /* | 4 | #if defined(CONFIG_ALPHA_GENERIC) |
5 | * Alpha uses the default access methods for the RTC. | 5 | # define get_rtc_time alpha_mv.rtc_get_time |
6 | */ | 6 | # define set_rtc_time alpha_mv.rtc_set_time |
7 | #else | ||
8 | # if defined(CONFIG_ALPHA_MARVEL) && defined(CONFIG_SMP) | ||
9 | # define get_rtc_time marvel_get_rtc_time | ||
10 | # define set_rtc_time marvel_set_rtc_time | ||
11 | # endif | ||
12 | #endif | ||
7 | 13 | ||
8 | #include <asm-generic/rtc.h> | 14 | #include <asm-generic/rtc.h> |
9 | 15 | ||
diff --git a/arch/alpha/kernel/.gitignore b/arch/alpha/kernel/.gitignore new file mode 100644 index 000000000000..c5f676c3c224 --- /dev/null +++ b/arch/alpha/kernel/.gitignore | |||
@@ -0,0 +1 @@ | |||
vmlinux.lds | |||
diff --git a/arch/alpha/kernel/core_marvel.c b/arch/alpha/kernel/core_marvel.c index 9cd8dca742a7..e302daecbe56 100644 --- a/arch/alpha/kernel/core_marvel.c +++ b/arch/alpha/kernel/core_marvel.c | |||
@@ -658,16 +658,8 @@ __marvel_rtc_io(u8 b, unsigned long addr, int write) | |||
658 | rtc_access.data = bcd2bin(b); | 658 | rtc_access.data = bcd2bin(b); |
659 | rtc_access.function = 0x48 + !write; /* GET/PUT_TOY */ | 659 | rtc_access.function = 0x48 + !write; /* GET/PUT_TOY */ |
660 | 660 | ||
661 | #ifdef CONFIG_SMP | ||
662 | if (smp_processor_id() != boot_cpuid) | ||
663 | smp_call_function_single(boot_cpuid, | ||
664 | __marvel_access_rtc, | ||
665 | &rtc_access, 1); | ||
666 | else | ||
667 | __marvel_access_rtc(&rtc_access); | ||
668 | #else | ||
669 | __marvel_access_rtc(&rtc_access); | 661 | __marvel_access_rtc(&rtc_access); |
670 | #endif | 662 | |
671 | ret = bin2bcd(rtc_access.data); | 663 | ret = bin2bcd(rtc_access.data); |
672 | break; | 664 | break; |
673 | 665 | ||
diff --git a/arch/alpha/kernel/entry.S b/arch/alpha/kernel/entry.S index f77345bc66a9..aa2e50cf9857 100644 --- a/arch/alpha/kernel/entry.S +++ b/arch/alpha/kernel/entry.S | |||
@@ -896,9 +896,9 @@ sys_getxpid: | |||
896 | .end sys_getxpid | 896 | .end sys_getxpid |
897 | 897 | ||
898 | .align 4 | 898 | .align 4 |
899 | .globl sys_pipe | 899 | .globl sys_alpha_pipe |
900 | .ent sys_pipe | 900 | .ent sys_alpha_pipe |
901 | sys_pipe: | 901 | sys_alpha_pipe: |
902 | lda $sp, -16($sp) | 902 | lda $sp, -16($sp) |
903 | stq $26, 0($sp) | 903 | stq $26, 0($sp) |
904 | .prologue 0 | 904 | .prologue 0 |
@@ -916,7 +916,7 @@ sys_pipe: | |||
916 | stq $1, 80+16($sp) | 916 | stq $1, 80+16($sp) |
917 | 1: lda $sp, 16($sp) | 917 | 1: lda $sp, 16($sp) |
918 | ret | 918 | ret |
919 | .end sys_pipe | 919 | .end sys_alpha_pipe |
920 | 920 | ||
921 | .align 4 | 921 | .align 4 |
922 | .globl sys_execve | 922 | .globl sys_execve |
diff --git a/arch/alpha/kernel/irq_srm.c b/arch/alpha/kernel/irq_srm.c index 32212014fbe9..a03fbca4940e 100644 --- a/arch/alpha/kernel/irq_srm.c +++ b/arch/alpha/kernel/irq_srm.c | |||
@@ -63,6 +63,8 @@ init_srm_irqs(long max, unsigned long ignore_mask) | |||
63 | { | 63 | { |
64 | long i; | 64 | long i; |
65 | 65 | ||
66 | if (NR_IRQS <= 16) | ||
67 | return; | ||
66 | for (i = 16; i < max; ++i) { | 68 | for (i = 16; i < max; ++i) { |
67 | if (i < 64 && ((ignore_mask >> i) & 1)) | 69 | if (i < 64 && ((ignore_mask >> i) & 1)) |
68 | continue; | 70 | continue; |
diff --git a/arch/alpha/kernel/machvec_impl.h b/arch/alpha/kernel/machvec_impl.h index 466c9dff8181..512685f78097 100644 --- a/arch/alpha/kernel/machvec_impl.h +++ b/arch/alpha/kernel/machvec_impl.h | |||
@@ -40,7 +40,10 @@ | |||
40 | #define CAT1(x,y) x##y | 40 | #define CAT1(x,y) x##y |
41 | #define CAT(x,y) CAT1(x,y) | 41 | #define CAT(x,y) CAT1(x,y) |
42 | 42 | ||
43 | #define DO_DEFAULT_RTC .rtc_port = 0x70 | 43 | #define DO_DEFAULT_RTC \ |
44 | .rtc_port = 0x70, \ | ||
45 | .rtc_get_time = common_get_rtc_time, \ | ||
46 | .rtc_set_time = common_set_rtc_time | ||
44 | 47 | ||
45 | #define DO_EV4_MMU \ | 48 | #define DO_EV4_MMU \ |
46 | .max_asn = EV4_MAX_ASN, \ | 49 | .max_asn = EV4_MAX_ASN, \ |
diff --git a/arch/alpha/kernel/proto.h b/arch/alpha/kernel/proto.h index 708d5ca87782..fe14c6747cd6 100644 --- a/arch/alpha/kernel/proto.h +++ b/arch/alpha/kernel/proto.h | |||
@@ -145,6 +145,8 @@ extern void smp_percpu_timer_interrupt(struct pt_regs *); | |||
145 | extern irqreturn_t timer_interrupt(int irq, void *dev); | 145 | extern irqreturn_t timer_interrupt(int irq, void *dev); |
146 | extern void common_init_rtc(void); | 146 | extern void common_init_rtc(void); |
147 | extern unsigned long est_cycle_freq; | 147 | extern unsigned long est_cycle_freq; |
148 | extern unsigned int common_get_rtc_time(struct rtc_time *time); | ||
149 | extern int common_set_rtc_time(struct rtc_time *time); | ||
148 | 150 | ||
149 | /* smc37c93x.c */ | 151 | /* smc37c93x.c */ |
150 | extern void SMC93x_Init(void); | 152 | extern void SMC93x_Init(void); |
diff --git a/arch/alpha/kernel/sys_jensen.c b/arch/alpha/kernel/sys_jensen.c index 2c3de97de46c..e2516f9a8967 100644 --- a/arch/alpha/kernel/sys_jensen.c +++ b/arch/alpha/kernel/sys_jensen.c | |||
@@ -261,6 +261,8 @@ struct alpha_machine_vector jensen_mv __initmv = { | |||
261 | .machine_check = jensen_machine_check, | 261 | .machine_check = jensen_machine_check, |
262 | .max_isa_dma_address = ALPHA_MAX_ISA_DMA_ADDRESS, | 262 | .max_isa_dma_address = ALPHA_MAX_ISA_DMA_ADDRESS, |
263 | .rtc_port = 0x170, | 263 | .rtc_port = 0x170, |
264 | .rtc_get_time = common_get_rtc_time, | ||
265 | .rtc_set_time = common_set_rtc_time, | ||
264 | 266 | ||
265 | .nr_irqs = 16, | 267 | .nr_irqs = 16, |
266 | .device_interrupt = jensen_device_interrupt, | 268 | .device_interrupt = jensen_device_interrupt, |
diff --git a/arch/alpha/kernel/sys_marvel.c b/arch/alpha/kernel/sys_marvel.c index 828449cd2636..c5a1a2438c67 100644 --- a/arch/alpha/kernel/sys_marvel.c +++ b/arch/alpha/kernel/sys_marvel.c | |||
@@ -23,6 +23,7 @@ | |||
23 | #include <asm/hwrpb.h> | 23 | #include <asm/hwrpb.h> |
24 | #include <asm/tlbflush.h> | 24 | #include <asm/tlbflush.h> |
25 | #include <asm/vga.h> | 25 | #include <asm/vga.h> |
26 | #include <asm/rtc.h> | ||
26 | 27 | ||
27 | #include "proto.h" | 28 | #include "proto.h" |
28 | #include "err_impl.h" | 29 | #include "err_impl.h" |
@@ -426,6 +427,57 @@ marvel_init_rtc(void) | |||
426 | init_rtc_irq(); | 427 | init_rtc_irq(); |
427 | } | 428 | } |
428 | 429 | ||
430 | struct marvel_rtc_time { | ||
431 | struct rtc_time *time; | ||
432 | int retval; | ||
433 | }; | ||
434 | |||
435 | #ifdef CONFIG_SMP | ||
436 | static void | ||
437 | smp_get_rtc_time(void *data) | ||
438 | { | ||
439 | struct marvel_rtc_time *mrt = data; | ||
440 | mrt->retval = __get_rtc_time(mrt->time); | ||
441 | } | ||
442 | |||
443 | static void | ||
444 | smp_set_rtc_time(void *data) | ||
445 | { | ||
446 | struct marvel_rtc_time *mrt = data; | ||
447 | mrt->retval = __set_rtc_time(mrt->time); | ||
448 | } | ||
449 | #endif | ||
450 | |||
451 | static unsigned int | ||
452 | marvel_get_rtc_time(struct rtc_time *time) | ||
453 | { | ||
454 | #ifdef CONFIG_SMP | ||
455 | struct marvel_rtc_time mrt; | ||
456 | |||
457 | if (smp_processor_id() != boot_cpuid) { | ||
458 | mrt.time = time; | ||
459 | smp_call_function_single(boot_cpuid, smp_get_rtc_time, &mrt, 1); | ||
460 | return mrt.retval; | ||
461 | } | ||
462 | #endif | ||
463 | return __get_rtc_time(time); | ||
464 | } | ||
465 | |||
466 | static int | ||
467 | marvel_set_rtc_time(struct rtc_time *time) | ||
468 | { | ||
469 | #ifdef CONFIG_SMP | ||
470 | struct marvel_rtc_time mrt; | ||
471 | |||
472 | if (smp_processor_id() != boot_cpuid) { | ||
473 | mrt.time = time; | ||
474 | smp_call_function_single(boot_cpuid, smp_set_rtc_time, &mrt, 1); | ||
475 | return mrt.retval; | ||
476 | } | ||
477 | #endif | ||
478 | return __set_rtc_time(time); | ||
479 | } | ||
480 | |||
429 | static void | 481 | static void |
430 | marvel_smp_callin(void) | 482 | marvel_smp_callin(void) |
431 | { | 483 | { |
@@ -466,7 +518,9 @@ marvel_smp_callin(void) | |||
466 | struct alpha_machine_vector marvel_ev7_mv __initmv = { | 518 | struct alpha_machine_vector marvel_ev7_mv __initmv = { |
467 | .vector_name = "MARVEL/EV7", | 519 | .vector_name = "MARVEL/EV7", |
468 | DO_EV7_MMU, | 520 | DO_EV7_MMU, |
469 | DO_DEFAULT_RTC, | 521 | .rtc_port = 0x70, |
522 | .rtc_get_time = marvel_get_rtc_time, | ||
523 | .rtc_set_time = marvel_set_rtc_time, | ||
470 | DO_MARVEL_IO, | 524 | DO_MARVEL_IO, |
471 | .machine_check = marvel_machine_check, | 525 | .machine_check = marvel_machine_check, |
472 | .max_isa_dma_address = ALPHA_MAX_ISA_DMA_ADDRESS, | 526 | .max_isa_dma_address = ALPHA_MAX_ISA_DMA_ADDRESS, |
diff --git a/arch/alpha/kernel/sys_nautilus.c b/arch/alpha/kernel/sys_nautilus.c index a7f23b5ab814..99c0f46f6b9c 100644 --- a/arch/alpha/kernel/sys_nautilus.c +++ b/arch/alpha/kernel/sys_nautilus.c | |||
@@ -245,6 +245,10 @@ nautilus_init_pci(void) | |||
245 | IRONGATE0->pci_mem = pci_mem; | 245 | IRONGATE0->pci_mem = pci_mem; |
246 | 246 | ||
247 | pci_bus_assign_resources(bus); | 247 | pci_bus_assign_resources(bus); |
248 | |||
249 | /* pci_common_swizzle() relies on bus->self being NULL | ||
250 | for the root bus, so just clear it. */ | ||
251 | bus->self = NULL; | ||
248 | pci_fixup_irqs(alpha_mv.pci_swizzle, alpha_mv.pci_map_irq); | 252 | pci_fixup_irqs(alpha_mv.pci_swizzle, alpha_mv.pci_map_irq); |
249 | } | 253 | } |
250 | 254 | ||
diff --git a/arch/alpha/kernel/systbls.S b/arch/alpha/kernel/systbls.S index ba914af18c4f..9d9e3a98bb95 100644 --- a/arch/alpha/kernel/systbls.S +++ b/arch/alpha/kernel/systbls.S | |||
@@ -52,7 +52,7 @@ sys_call_table: | |||
52 | .quad sys_setpgid | 52 | .quad sys_setpgid |
53 | .quad alpha_ni_syscall /* 40 */ | 53 | .quad alpha_ni_syscall /* 40 */ |
54 | .quad sys_dup | 54 | .quad sys_dup |
55 | .quad sys_pipe | 55 | .quad sys_alpha_pipe |
56 | .quad osf_set_program_attributes | 56 | .quad osf_set_program_attributes |
57 | .quad alpha_ni_syscall | 57 | .quad alpha_ni_syscall |
58 | .quad sys_open /* 45 */ | 58 | .quad sys_open /* 45 */ |
diff --git a/arch/alpha/kernel/time.c b/arch/alpha/kernel/time.c index e6a231435cba..b04e2cbf23a4 100644 --- a/arch/alpha/kernel/time.c +++ b/arch/alpha/kernel/time.c | |||
@@ -46,6 +46,7 @@ | |||
46 | #include <asm/io.h> | 46 | #include <asm/io.h> |
47 | #include <asm/hwrpb.h> | 47 | #include <asm/hwrpb.h> |
48 | #include <asm/8253pit.h> | 48 | #include <asm/8253pit.h> |
49 | #include <asm/rtc.h> | ||
49 | 50 | ||
50 | #include <linux/mc146818rtc.h> | 51 | #include <linux/mc146818rtc.h> |
51 | #include <linux/time.h> | 52 | #include <linux/time.h> |
@@ -180,6 +181,15 @@ common_init_rtc(void) | |||
180 | init_rtc_irq(); | 181 | init_rtc_irq(); |
181 | } | 182 | } |
182 | 183 | ||
184 | unsigned int common_get_rtc_time(struct rtc_time *time) | ||
185 | { | ||
186 | return __get_rtc_time(time); | ||
187 | } | ||
188 | |||
189 | int common_set_rtc_time(struct rtc_time *time) | ||
190 | { | ||
191 | return __set_rtc_time(time); | ||
192 | } | ||
183 | 193 | ||
184 | /* Validate a computed cycle counter result against the known bounds for | 194 | /* Validate a computed cycle counter result against the known bounds for |
185 | the given processor core. There's too much brokenness in the way of | 195 | the given processor core. There's too much brokenness in the way of |
diff --git a/arch/alpha/mm/init.c b/arch/alpha/mm/init.c index 234e42b8ee74..5d7a16eab312 100644 --- a/arch/alpha/mm/init.c +++ b/arch/alpha/mm/init.c | |||
@@ -59,13 +59,6 @@ pgd_alloc(struct mm_struct *mm) | |||
59 | return ret; | 59 | return ret; |
60 | } | 60 | } |
61 | 61 | ||
62 | pte_t * | ||
63 | pte_alloc_one_kernel(struct mm_struct *mm, unsigned long address) | ||
64 | { | ||
65 | pte_t *pte = (pte_t *)__get_free_page(GFP_KERNEL|__GFP_REPEAT|__GFP_ZERO); | ||
66 | return pte; | ||
67 | } | ||
68 | |||
69 | 62 | ||
70 | /* | 63 | /* |
71 | * BAD_PAGE is the page that is used for page faults when linux | 64 | * BAD_PAGE is the page that is used for page faults when linux |