diff options
Diffstat (limited to 'arch/ia64')
-rw-r--r-- | arch/ia64/Kconfig | 12 | ||||
-rw-r--r-- | arch/ia64/configs/generic_defconfig | 1 | ||||
-rw-r--r-- | arch/ia64/configs/gensparse_defconfig | 1 | ||||
-rw-r--r-- | arch/ia64/hp/sim/simserial.c | 3 | ||||
-rw-r--r-- | arch/ia64/include/asm/Kbuild | 1 | ||||
-rw-r--r-- | arch/ia64/include/asm/hugetlb.h | 4 | ||||
-rw-r--r-- | arch/ia64/include/asm/numa.h | 2 | ||||
-rw-r--r-- | arch/ia64/include/asm/switch_to.h | 8 | ||||
-rw-r--r-- | arch/ia64/include/asm/xen/interface.h | 8 | ||||
-rw-r--r-- | arch/ia64/include/uapi/asm/Kbuild | 3 | ||||
-rw-r--r-- | arch/ia64/kernel/machine_kexec.c | 3 | ||||
-rw-r--r-- | arch/ia64/kernel/mca_drv.c | 3 | ||||
-rw-r--r-- | arch/ia64/kernel/perfmon.c | 52 | ||||
-rw-r--r-- | arch/ia64/kernel/process.c | 7 | ||||
-rw-r--r-- | arch/ia64/kernel/signal.c | 4 | ||||
-rw-r--r-- | arch/ia64/kernel/time.c | 66 | ||||
-rw-r--r-- | arch/ia64/kvm/kvm-ia64.c | 41 | ||||
-rw-r--r-- | arch/ia64/mm/fault.c | 1 | ||||
-rw-r--r-- | arch/ia64/mm/init.c | 4 | ||||
-rw-r--r-- | arch/ia64/pci/pci.c | 11 | ||||
-rw-r--r-- | arch/ia64/sn/kernel/io_common.c | 4 | ||||
-rw-r--r-- | arch/ia64/xen/irq_xen.c | 2 | ||||
-rw-r--r-- | arch/ia64/xen/irq_xen.h | 2 | ||||
-rw-r--r-- | arch/ia64/xen/xencomm.c | 3 |
24 files changed, 115 insertions, 131 deletions
diff --git a/arch/ia64/Kconfig b/arch/ia64/Kconfig index 310cf5781fad..3c720ef6c32d 100644 --- a/arch/ia64/Kconfig +++ b/arch/ia64/Kconfig | |||
@@ -25,6 +25,7 @@ config IA64 | |||
25 | select HAVE_GENERIC_HARDIRQS | 25 | select HAVE_GENERIC_HARDIRQS |
26 | select HAVE_MEMBLOCK | 26 | select HAVE_MEMBLOCK |
27 | select HAVE_MEMBLOCK_NODE_MAP | 27 | select HAVE_MEMBLOCK_NODE_MAP |
28 | select HAVE_VIRT_CPU_ACCOUNTING | ||
28 | select ARCH_DISCARD_MEMBLOCK | 29 | select ARCH_DISCARD_MEMBLOCK |
29 | select GENERIC_IRQ_PROBE | 30 | select GENERIC_IRQ_PROBE |
30 | select GENERIC_PENDING_IRQ if SMP | 31 | select GENERIC_PENDING_IRQ if SMP |
@@ -340,17 +341,6 @@ config FORCE_MAX_ZONEORDER | |||
340 | default "17" if HUGETLB_PAGE | 341 | default "17" if HUGETLB_PAGE |
341 | default "11" | 342 | default "11" |
342 | 343 | ||
343 | config VIRT_CPU_ACCOUNTING | ||
344 | bool "Deterministic task and CPU time accounting" | ||
345 | default n | ||
346 | help | ||
347 | Select this option to enable more accurate task and CPU time | ||
348 | accounting. This is done by reading a CPU counter on each | ||
349 | kernel entry and exit and on transitions within the kernel | ||
350 | between system, softirq and hardirq state, so there is a | ||
351 | small performance impact. | ||
352 | If in doubt, say N here. | ||
353 | |||
354 | config SMP | 344 | config SMP |
355 | bool "Symmetric multi-processing support" | 345 | bool "Symmetric multi-processing support" |
356 | select USE_GENERIC_SMP_HELPERS | 346 | select USE_GENERIC_SMP_HELPERS |
diff --git a/arch/ia64/configs/generic_defconfig b/arch/ia64/configs/generic_defconfig index 954d81e2e837..7913695b2fcb 100644 --- a/arch/ia64/configs/generic_defconfig +++ b/arch/ia64/configs/generic_defconfig | |||
@@ -234,5 +234,4 @@ CONFIG_CRYPTO_PCBC=m | |||
234 | CONFIG_CRYPTO_MD5=y | 234 | CONFIG_CRYPTO_MD5=y |
235 | # CONFIG_CRYPTO_ANSI_CPRNG is not set | 235 | # CONFIG_CRYPTO_ANSI_CPRNG is not set |
236 | CONFIG_CRC_T10DIF=y | 236 | CONFIG_CRC_T10DIF=y |
237 | CONFIG_MISC_DEVICES=y | ||
238 | CONFIG_INTEL_IOMMU=y | 237 | CONFIG_INTEL_IOMMU=y |
diff --git a/arch/ia64/configs/gensparse_defconfig b/arch/ia64/configs/gensparse_defconfig index 91c41ecfa6d9..f8e913365423 100644 --- a/arch/ia64/configs/gensparse_defconfig +++ b/arch/ia64/configs/gensparse_defconfig | |||
@@ -209,4 +209,3 @@ CONFIG_MAGIC_SYSRQ=y | |||
209 | CONFIG_DEBUG_KERNEL=y | 209 | CONFIG_DEBUG_KERNEL=y |
210 | CONFIG_DEBUG_MUTEXES=y | 210 | CONFIG_DEBUG_MUTEXES=y |
211 | CONFIG_CRYPTO_MD5=y | 211 | CONFIG_CRYPTO_MD5=y |
212 | CONFIG_MISC_DEVICES=y | ||
diff --git a/arch/ia64/hp/sim/simserial.c b/arch/ia64/hp/sim/simserial.c index c34785dca92b..ec536e4e36c9 100644 --- a/arch/ia64/hp/sim/simserial.c +++ b/arch/ia64/hp/sim/simserial.c | |||
@@ -338,7 +338,7 @@ static void rs_set_termios(struct tty_struct *tty, struct ktermios *old_termios) | |||
338 | { | 338 | { |
339 | /* Handle turning off CRTSCTS */ | 339 | /* Handle turning off CRTSCTS */ |
340 | if ((old_termios->c_cflag & CRTSCTS) && | 340 | if ((old_termios->c_cflag & CRTSCTS) && |
341 | !(tty->termios->c_cflag & CRTSCTS)) { | 341 | !(tty->termios.c_cflag & CRTSCTS)) { |
342 | tty->hw_stopped = 0; | 342 | tty->hw_stopped = 0; |
343 | } | 343 | } |
344 | } | 344 | } |
@@ -545,6 +545,7 @@ static int __init simrs_init(void) | |||
545 | /* the port is imaginary */ | 545 | /* the port is imaginary */ |
546 | printk(KERN_INFO "ttyS0 at 0x03f8 (irq = %d) is a 16550\n", state->irq); | 546 | printk(KERN_INFO "ttyS0 at 0x03f8 (irq = %d) is a 16550\n", state->irq); |
547 | 547 | ||
548 | tty_port_link_device(&state->port, hp_simserial_driver, 0); | ||
548 | retval = tty_register_driver(hp_simserial_driver); | 549 | retval = tty_register_driver(hp_simserial_driver); |
549 | if (retval) { | 550 | if (retval) { |
550 | printk(KERN_ERR "Couldn't register simserial driver\n"); | 551 | printk(KERN_ERR "Couldn't register simserial driver\n"); |
diff --git a/arch/ia64/include/asm/Kbuild b/arch/ia64/include/asm/Kbuild index d4eb9383f5f6..58f3d14a6cd4 100644 --- a/arch/ia64/include/asm/Kbuild +++ b/arch/ia64/include/asm/Kbuild | |||
@@ -13,3 +13,4 @@ header-y += ptrace_offsets.h | |||
13 | header-y += rse.h | 13 | header-y += rse.h |
14 | header-y += ucontext.h | 14 | header-y += ucontext.h |
15 | header-y += ustack.h | 15 | header-y += ustack.h |
16 | generic-y += clkdev.h | ||
diff --git a/arch/ia64/include/asm/hugetlb.h b/arch/ia64/include/asm/hugetlb.h index da55c63728e0..94eaa5bd5d0c 100644 --- a/arch/ia64/include/asm/hugetlb.h +++ b/arch/ia64/include/asm/hugetlb.h | |||
@@ -77,4 +77,8 @@ static inline void arch_release_hugepage(struct page *page) | |||
77 | { | 77 | { |
78 | } | 78 | } |
79 | 79 | ||
80 | static inline void arch_clear_hugepage_flags(struct page *page) | ||
81 | { | ||
82 | } | ||
83 | |||
80 | #endif /* _ASM_IA64_HUGETLB_H */ | 84 | #endif /* _ASM_IA64_HUGETLB_H */ |
diff --git a/arch/ia64/include/asm/numa.h b/arch/ia64/include/asm/numa.h index 6a8a27cfae3e..2e27ef175652 100644 --- a/arch/ia64/include/asm/numa.h +++ b/arch/ia64/include/asm/numa.h | |||
@@ -59,7 +59,7 @@ extern struct node_cpuid_s node_cpuid[NR_CPUS]; | |||
59 | */ | 59 | */ |
60 | 60 | ||
61 | extern u8 numa_slit[MAX_NUMNODES * MAX_NUMNODES]; | 61 | extern u8 numa_slit[MAX_NUMNODES * MAX_NUMNODES]; |
62 | #define node_distance(from,to) (numa_slit[(from) * num_online_nodes() + (to)]) | 62 | #define node_distance(from,to) (numa_slit[(from) * MAX_NUMNODES + (to)]) |
63 | 63 | ||
64 | extern int paddr_to_nid(unsigned long paddr); | 64 | extern int paddr_to_nid(unsigned long paddr); |
65 | 65 | ||
diff --git a/arch/ia64/include/asm/switch_to.h b/arch/ia64/include/asm/switch_to.h index cb2412fcd17f..d38c7ea5eea5 100644 --- a/arch/ia64/include/asm/switch_to.h +++ b/arch/ia64/include/asm/switch_to.h | |||
@@ -30,13 +30,6 @@ extern struct task_struct *ia64_switch_to (void *next_task); | |||
30 | extern void ia64_save_extra (struct task_struct *task); | 30 | extern void ia64_save_extra (struct task_struct *task); |
31 | extern void ia64_load_extra (struct task_struct *task); | 31 | extern void ia64_load_extra (struct task_struct *task); |
32 | 32 | ||
33 | #ifdef CONFIG_VIRT_CPU_ACCOUNTING | ||
34 | extern void ia64_account_on_switch (struct task_struct *prev, struct task_struct *next); | ||
35 | # define IA64_ACCOUNT_ON_SWITCH(p,n) ia64_account_on_switch(p,n) | ||
36 | #else | ||
37 | # define IA64_ACCOUNT_ON_SWITCH(p,n) | ||
38 | #endif | ||
39 | |||
40 | #ifdef CONFIG_PERFMON | 33 | #ifdef CONFIG_PERFMON |
41 | DECLARE_PER_CPU(unsigned long, pfm_syst_info); | 34 | DECLARE_PER_CPU(unsigned long, pfm_syst_info); |
42 | # define PERFMON_IS_SYSWIDE() (__get_cpu_var(pfm_syst_info) & 0x1) | 35 | # define PERFMON_IS_SYSWIDE() (__get_cpu_var(pfm_syst_info) & 0x1) |
@@ -49,7 +42,6 @@ extern void ia64_account_on_switch (struct task_struct *prev, struct task_struct | |||
49 | || PERFMON_IS_SYSWIDE()) | 42 | || PERFMON_IS_SYSWIDE()) |
50 | 43 | ||
51 | #define __switch_to(prev,next,last) do { \ | 44 | #define __switch_to(prev,next,last) do { \ |
52 | IA64_ACCOUNT_ON_SWITCH(prev, next); \ | ||
53 | if (IA64_HAS_EXTRA_STATE(prev)) \ | 45 | if (IA64_HAS_EXTRA_STATE(prev)) \ |
54 | ia64_save_extra(prev); \ | 46 | ia64_save_extra(prev); \ |
55 | if (IA64_HAS_EXTRA_STATE(next)) \ | 47 | if (IA64_HAS_EXTRA_STATE(next)) \ |
diff --git a/arch/ia64/include/asm/xen/interface.h b/arch/ia64/include/asm/xen/interface.h index 09d5f7fd9db1..e88c5de27410 100644 --- a/arch/ia64/include/asm/xen/interface.h +++ b/arch/ia64/include/asm/xen/interface.h | |||
@@ -67,6 +67,11 @@ | |||
67 | #define set_xen_guest_handle(hnd, val) do { (hnd).p = val; } while (0) | 67 | #define set_xen_guest_handle(hnd, val) do { (hnd).p = val; } while (0) |
68 | 68 | ||
69 | #ifndef __ASSEMBLY__ | 69 | #ifndef __ASSEMBLY__ |
70 | /* Explicitly size integers that represent pfns in the public interface | ||
71 | * with Xen so that we could have one ABI that works for 32 and 64 bit | ||
72 | * guests. */ | ||
73 | typedef unsigned long xen_pfn_t; | ||
74 | typedef unsigned long xen_ulong_t; | ||
70 | /* Guest handles for primitive C types. */ | 75 | /* Guest handles for primitive C types. */ |
71 | __DEFINE_GUEST_HANDLE(uchar, unsigned char); | 76 | __DEFINE_GUEST_HANDLE(uchar, unsigned char); |
72 | __DEFINE_GUEST_HANDLE(uint, unsigned int); | 77 | __DEFINE_GUEST_HANDLE(uint, unsigned int); |
@@ -79,7 +84,6 @@ DEFINE_GUEST_HANDLE(void); | |||
79 | DEFINE_GUEST_HANDLE(uint64_t); | 84 | DEFINE_GUEST_HANDLE(uint64_t); |
80 | DEFINE_GUEST_HANDLE(uint32_t); | 85 | DEFINE_GUEST_HANDLE(uint32_t); |
81 | 86 | ||
82 | typedef unsigned long xen_pfn_t; | ||
83 | DEFINE_GUEST_HANDLE(xen_pfn_t); | 87 | DEFINE_GUEST_HANDLE(xen_pfn_t); |
84 | #define PRI_xen_pfn "lx" | 88 | #define PRI_xen_pfn "lx" |
85 | #endif | 89 | #endif |
@@ -265,6 +269,8 @@ typedef struct xen_callback xen_callback_t; | |||
265 | 269 | ||
266 | #endif /* !__ASSEMBLY__ */ | 270 | #endif /* !__ASSEMBLY__ */ |
267 | 271 | ||
272 | #include <asm/pvclock-abi.h> | ||
273 | |||
268 | /* Size of the shared_info area (this is not related to page size). */ | 274 | /* Size of the shared_info area (this is not related to page size). */ |
269 | #define XSI_SHIFT 14 | 275 | #define XSI_SHIFT 14 |
270 | #define XSI_SIZE (1 << XSI_SHIFT) | 276 | #define XSI_SIZE (1 << XSI_SHIFT) |
diff --git a/arch/ia64/include/uapi/asm/Kbuild b/arch/ia64/include/uapi/asm/Kbuild new file mode 100644 index 000000000000..baebb3da1d44 --- /dev/null +++ b/arch/ia64/include/uapi/asm/Kbuild | |||
@@ -0,0 +1,3 @@ | |||
1 | # UAPI Header export list | ||
2 | include include/uapi/asm-generic/Kbuild.asm | ||
3 | |||
diff --git a/arch/ia64/kernel/machine_kexec.c b/arch/ia64/kernel/machine_kexec.c index 070e8effa175..5151a649c96b 100644 --- a/arch/ia64/kernel/machine_kexec.c +++ b/arch/ia64/kernel/machine_kexec.c | |||
@@ -85,12 +85,13 @@ static void ia64_machine_kexec(struct unw_frame_info *info, void *arg) | |||
85 | struct kimage *image = arg; | 85 | struct kimage *image = arg; |
86 | relocate_new_kernel_t rnk; | 86 | relocate_new_kernel_t rnk; |
87 | void *pal_addr = efi_get_pal_addr(); | 87 | void *pal_addr = efi_get_pal_addr(); |
88 | unsigned long code_addr = (unsigned long)page_address(image->control_code_page); | 88 | unsigned long code_addr; |
89 | int ii; | 89 | int ii; |
90 | u64 fp, gp; | 90 | u64 fp, gp; |
91 | ia64_fptr_t *init_handler = (ia64_fptr_t *)ia64_os_init_on_kdump; | 91 | ia64_fptr_t *init_handler = (ia64_fptr_t *)ia64_os_init_on_kdump; |
92 | 92 | ||
93 | BUG_ON(!image); | 93 | BUG_ON(!image); |
94 | code_addr = (unsigned long)page_address(image->control_code_page); | ||
94 | if (image->type == KEXEC_TYPE_CRASH) { | 95 | if (image->type == KEXEC_TYPE_CRASH) { |
95 | crash_save_this_cpu(); | 96 | crash_save_this_cpu(); |
96 | current->thread.ksp = (__u64)info->sw - 16; | 97 | current->thread.ksp = (__u64)info->sw - 16; |
diff --git a/arch/ia64/kernel/mca_drv.c b/arch/ia64/kernel/mca_drv.c index 1c2e89406721..9392e021c93b 100644 --- a/arch/ia64/kernel/mca_drv.c +++ b/arch/ia64/kernel/mca_drv.c | |||
@@ -158,7 +158,8 @@ mca_handler_bh(unsigned long paddr, void *iip, unsigned long ipsr) | |||
158 | ia64_mlogbuf_dump(); | 158 | ia64_mlogbuf_dump(); |
159 | printk(KERN_ERR "OS_MCA: process [cpu %d, pid: %d, uid: %d, " | 159 | printk(KERN_ERR "OS_MCA: process [cpu %d, pid: %d, uid: %d, " |
160 | "iip: %p, psr: 0x%lx,paddr: 0x%lx](%s) encounters MCA.\n", | 160 | "iip: %p, psr: 0x%lx,paddr: 0x%lx](%s) encounters MCA.\n", |
161 | raw_smp_processor_id(), current->pid, current_uid(), | 161 | raw_smp_processor_id(), current->pid, |
162 | from_kuid(&init_user_ns, current_uid()), | ||
162 | iip, ipsr, paddr, current->comm); | 163 | iip, ipsr, paddr, current->comm); |
163 | 164 | ||
164 | spin_lock(&mca_bh_lock); | 165 | spin_lock(&mca_bh_lock); |
diff --git a/arch/ia64/kernel/perfmon.c b/arch/ia64/kernel/perfmon.c index 3fa4bc536953..ea39eba61ef5 100644 --- a/arch/ia64/kernel/perfmon.c +++ b/arch/ia64/kernel/perfmon.c | |||
@@ -2306,8 +2306,8 @@ pfm_smpl_buffer_alloc(struct task_struct *task, struct file *filp, pfm_context_t | |||
2306 | * partially initialize the vma for the sampling buffer | 2306 | * partially initialize the vma for the sampling buffer |
2307 | */ | 2307 | */ |
2308 | vma->vm_mm = mm; | 2308 | vma->vm_mm = mm; |
2309 | vma->vm_file = filp; | 2309 | vma->vm_file = get_file(filp); |
2310 | vma->vm_flags = VM_READ| VM_MAYREAD |VM_RESERVED; | 2310 | vma->vm_flags = VM_READ|VM_MAYREAD|VM_DONTEXPAND|VM_DONTDUMP; |
2311 | vma->vm_page_prot = PAGE_READONLY; /* XXX may need to change */ | 2311 | vma->vm_page_prot = PAGE_READONLY; /* XXX may need to change */ |
2312 | 2312 | ||
2313 | /* | 2313 | /* |
@@ -2345,8 +2345,6 @@ pfm_smpl_buffer_alloc(struct task_struct *task, struct file *filp, pfm_context_t | |||
2345 | goto error; | 2345 | goto error; |
2346 | } | 2346 | } |
2347 | 2347 | ||
2348 | get_file(filp); | ||
2349 | |||
2350 | /* | 2348 | /* |
2351 | * now insert the vma in the vm list for the process, must be | 2349 | * now insert the vma in the vm list for the process, must be |
2352 | * done with mmap lock held | 2350 | * done with mmap lock held |
@@ -2380,8 +2378,8 @@ static int | |||
2380 | pfm_bad_permissions(struct task_struct *task) | 2378 | pfm_bad_permissions(struct task_struct *task) |
2381 | { | 2379 | { |
2382 | const struct cred *tcred; | 2380 | const struct cred *tcred; |
2383 | uid_t uid = current_uid(); | 2381 | kuid_t uid = current_uid(); |
2384 | gid_t gid = current_gid(); | 2382 | kgid_t gid = current_gid(); |
2385 | int ret; | 2383 | int ret; |
2386 | 2384 | ||
2387 | rcu_read_lock(); | 2385 | rcu_read_lock(); |
@@ -2389,20 +2387,20 @@ pfm_bad_permissions(struct task_struct *task) | |||
2389 | 2387 | ||
2390 | /* inspired by ptrace_attach() */ | 2388 | /* inspired by ptrace_attach() */ |
2391 | DPRINT(("cur: uid=%d gid=%d task: euid=%d suid=%d uid=%d egid=%d sgid=%d\n", | 2389 | DPRINT(("cur: uid=%d gid=%d task: euid=%d suid=%d uid=%d egid=%d sgid=%d\n", |
2392 | uid, | 2390 | from_kuid(&init_user_ns, uid), |
2393 | gid, | 2391 | from_kgid(&init_user_ns, gid), |
2394 | tcred->euid, | 2392 | from_kuid(&init_user_ns, tcred->euid), |
2395 | tcred->suid, | 2393 | from_kuid(&init_user_ns, tcred->suid), |
2396 | tcred->uid, | 2394 | from_kuid(&init_user_ns, tcred->uid), |
2397 | tcred->egid, | 2395 | from_kgid(&init_user_ns, tcred->egid), |
2398 | tcred->sgid)); | 2396 | from_kgid(&init_user_ns, tcred->sgid))); |
2399 | 2397 | ||
2400 | ret = ((uid != tcred->euid) | 2398 | ret = ((!uid_eq(uid, tcred->euid)) |
2401 | || (uid != tcred->suid) | 2399 | || (!uid_eq(uid, tcred->suid)) |
2402 | || (uid != tcred->uid) | 2400 | || (!uid_eq(uid, tcred->uid)) |
2403 | || (gid != tcred->egid) | 2401 | || (!gid_eq(gid, tcred->egid)) |
2404 | || (gid != tcred->sgid) | 2402 | || (!gid_eq(gid, tcred->sgid)) |
2405 | || (gid != tcred->gid)) && !capable(CAP_SYS_PTRACE); | 2403 | || (!gid_eq(gid, tcred->gid))) && !capable(CAP_SYS_PTRACE); |
2406 | 2404 | ||
2407 | rcu_read_unlock(); | 2405 | rcu_read_unlock(); |
2408 | return ret; | 2406 | return ret; |
@@ -4782,7 +4780,7 @@ recheck: | |||
4782 | asmlinkage long | 4780 | asmlinkage long |
4783 | sys_perfmonctl (int fd, int cmd, void __user *arg, int count) | 4781 | sys_perfmonctl (int fd, int cmd, void __user *arg, int count) |
4784 | { | 4782 | { |
4785 | struct file *file = NULL; | 4783 | struct fd f = {NULL, 0}; |
4786 | pfm_context_t *ctx = NULL; | 4784 | pfm_context_t *ctx = NULL; |
4787 | unsigned long flags = 0UL; | 4785 | unsigned long flags = 0UL; |
4788 | void *args_k = NULL; | 4786 | void *args_k = NULL; |
@@ -4879,17 +4877,17 @@ restart_args: | |||
4879 | 4877 | ||
4880 | ret = -EBADF; | 4878 | ret = -EBADF; |
4881 | 4879 | ||
4882 | file = fget(fd); | 4880 | f = fdget(fd); |
4883 | if (unlikely(file == NULL)) { | 4881 | if (unlikely(f.file == NULL)) { |
4884 | DPRINT(("invalid fd %d\n", fd)); | 4882 | DPRINT(("invalid fd %d\n", fd)); |
4885 | goto error_args; | 4883 | goto error_args; |
4886 | } | 4884 | } |
4887 | if (unlikely(PFM_IS_FILE(file) == 0)) { | 4885 | if (unlikely(PFM_IS_FILE(f.file) == 0)) { |
4888 | DPRINT(("fd %d not related to perfmon\n", fd)); | 4886 | DPRINT(("fd %d not related to perfmon\n", fd)); |
4889 | goto error_args; | 4887 | goto error_args; |
4890 | } | 4888 | } |
4891 | 4889 | ||
4892 | ctx = file->private_data; | 4890 | ctx = f.file->private_data; |
4893 | if (unlikely(ctx == NULL)) { | 4891 | if (unlikely(ctx == NULL)) { |
4894 | DPRINT(("no context for fd %d\n", fd)); | 4892 | DPRINT(("no context for fd %d\n", fd)); |
4895 | goto error_args; | 4893 | goto error_args; |
@@ -4919,8 +4917,8 @@ abort_locked: | |||
4919 | if (call_made && PFM_CMD_RW_ARG(cmd) && copy_to_user(arg, args_k, base_sz*count)) ret = -EFAULT; | 4917 | if (call_made && PFM_CMD_RW_ARG(cmd) && copy_to_user(arg, args_k, base_sz*count)) ret = -EFAULT; |
4920 | 4918 | ||
4921 | error_args: | 4919 | error_args: |
4922 | if (file) | 4920 | if (f.file) |
4923 | fput(file); | 4921 | fdput(f); |
4924 | 4922 | ||
4925 | kfree(args_k); | 4923 | kfree(args_k); |
4926 | 4924 | ||
diff --git a/arch/ia64/kernel/process.c b/arch/ia64/kernel/process.c index dd6fc1449741..ee31fe9b310e 100644 --- a/arch/ia64/kernel/process.c +++ b/arch/ia64/kernel/process.c | |||
@@ -29,6 +29,7 @@ | |||
29 | #include <linux/kdebug.h> | 29 | #include <linux/kdebug.h> |
30 | #include <linux/utsname.h> | 30 | #include <linux/utsname.h> |
31 | #include <linux/tracehook.h> | 31 | #include <linux/tracehook.h> |
32 | #include <linux/rcupdate.h> | ||
32 | 33 | ||
33 | #include <asm/cpu.h> | 34 | #include <asm/cpu.h> |
34 | #include <asm/delay.h> | 35 | #include <asm/delay.h> |
@@ -196,8 +197,8 @@ do_notify_resume_user(sigset_t *unused, struct sigscratch *scr, long in_syscall) | |||
196 | ia64_do_signal(scr, in_syscall); | 197 | ia64_do_signal(scr, in_syscall); |
197 | } | 198 | } |
198 | 199 | ||
199 | if (test_thread_flag(TIF_NOTIFY_RESUME)) { | 200 | if (test_and_clear_thread_flag(TIF_NOTIFY_RESUME)) { |
200 | clear_thread_flag(TIF_NOTIFY_RESUME); | 201 | local_irq_enable(); /* force interrupt enable */ |
201 | tracehook_notify_resume(&scr->pt); | 202 | tracehook_notify_resume(&scr->pt); |
202 | } | 203 | } |
203 | 204 | ||
@@ -279,6 +280,7 @@ cpu_idle (void) | |||
279 | 280 | ||
280 | /* endless idle loop with no priority at all */ | 281 | /* endless idle loop with no priority at all */ |
281 | while (1) { | 282 | while (1) { |
283 | rcu_idle_enter(); | ||
282 | if (can_do_pal_halt) { | 284 | if (can_do_pal_halt) { |
283 | current_thread_info()->status &= ~TS_POLLING; | 285 | current_thread_info()->status &= ~TS_POLLING; |
284 | /* | 286 | /* |
@@ -309,6 +311,7 @@ cpu_idle (void) | |||
309 | normal_xtp(); | 311 | normal_xtp(); |
310 | #endif | 312 | #endif |
311 | } | 313 | } |
314 | rcu_idle_exit(); | ||
312 | schedule_preempt_disabled(); | 315 | schedule_preempt_disabled(); |
313 | check_pgt_cache(); | 316 | check_pgt_cache(); |
314 | if (cpu_is_offline(cpu)) | 317 | if (cpu_is_offline(cpu)) |
diff --git a/arch/ia64/kernel/signal.c b/arch/ia64/kernel/signal.c index a199be1fe619..37dd79511cbe 100644 --- a/arch/ia64/kernel/signal.c +++ b/arch/ia64/kernel/signal.c | |||
@@ -220,7 +220,7 @@ ia64_rt_sigreturn (struct sigscratch *scr) | |||
220 | si.si_errno = 0; | 220 | si.si_errno = 0; |
221 | si.si_code = SI_KERNEL; | 221 | si.si_code = SI_KERNEL; |
222 | si.si_pid = task_pid_vnr(current); | 222 | si.si_pid = task_pid_vnr(current); |
223 | si.si_uid = current_uid(); | 223 | si.si_uid = from_kuid_munged(current_user_ns(), current_uid()); |
224 | si.si_addr = sc; | 224 | si.si_addr = sc; |
225 | force_sig_info(SIGSEGV, &si, current); | 225 | force_sig_info(SIGSEGV, &si, current); |
226 | return retval; | 226 | return retval; |
@@ -317,7 +317,7 @@ force_sigsegv_info (int sig, void __user *addr) | |||
317 | si.si_errno = 0; | 317 | si.si_errno = 0; |
318 | si.si_code = SI_KERNEL; | 318 | si.si_code = SI_KERNEL; |
319 | si.si_pid = task_pid_vnr(current); | 319 | si.si_pid = task_pid_vnr(current); |
320 | si.si_uid = current_uid(); | 320 | si.si_uid = from_kuid_munged(current_user_ns(), current_uid()); |
321 | si.si_addr = addr; | 321 | si.si_addr = addr; |
322 | force_sig_info(SIGSEGV, &si, current); | 322 | force_sig_info(SIGSEGV, &si, current); |
323 | return 0; | 323 | return 0; |
diff --git a/arch/ia64/kernel/time.c b/arch/ia64/kernel/time.c index ecc904b33c5f..80ff9acc5edf 100644 --- a/arch/ia64/kernel/time.c +++ b/arch/ia64/kernel/time.c | |||
@@ -83,32 +83,36 @@ static struct clocksource *itc_clocksource; | |||
83 | 83 | ||
84 | extern cputime_t cycle_to_cputime(u64 cyc); | 84 | extern cputime_t cycle_to_cputime(u64 cyc); |
85 | 85 | ||
86 | static void vtime_account_user(struct task_struct *tsk) | ||
87 | { | ||
88 | cputime_t delta_utime; | ||
89 | struct thread_info *ti = task_thread_info(tsk); | ||
90 | |||
91 | if (ti->ac_utime) { | ||
92 | delta_utime = cycle_to_cputime(ti->ac_utime); | ||
93 | account_user_time(tsk, delta_utime, delta_utime); | ||
94 | ti->ac_utime = 0; | ||
95 | } | ||
96 | } | ||
97 | |||
86 | /* | 98 | /* |
87 | * Called from the context switch with interrupts disabled, to charge all | 99 | * Called from the context switch with interrupts disabled, to charge all |
88 | * accumulated times to the current process, and to prepare accounting on | 100 | * accumulated times to the current process, and to prepare accounting on |
89 | * the next process. | 101 | * the next process. |
90 | */ | 102 | */ |
91 | void ia64_account_on_switch(struct task_struct *prev, struct task_struct *next) | 103 | void vtime_task_switch(struct task_struct *prev) |
92 | { | 104 | { |
93 | struct thread_info *pi = task_thread_info(prev); | 105 | struct thread_info *pi = task_thread_info(prev); |
94 | struct thread_info *ni = task_thread_info(next); | 106 | struct thread_info *ni = task_thread_info(current); |
95 | cputime_t delta_stime, delta_utime; | ||
96 | __u64 now; | ||
97 | 107 | ||
98 | now = ia64_get_itc(); | ||
99 | |||
100 | delta_stime = cycle_to_cputime(pi->ac_stime + (now - pi->ac_stamp)); | ||
101 | if (idle_task(smp_processor_id()) != prev) | 108 | if (idle_task(smp_processor_id()) != prev) |
102 | account_system_time(prev, 0, delta_stime, delta_stime); | 109 | vtime_account_system(prev); |
103 | else | 110 | else |
104 | account_idle_time(delta_stime); | 111 | vtime_account_idle(prev); |
105 | 112 | ||
106 | if (pi->ac_utime) { | 113 | vtime_account_user(prev); |
107 | delta_utime = cycle_to_cputime(pi->ac_utime); | ||
108 | account_user_time(prev, delta_utime, delta_utime); | ||
109 | } | ||
110 | 114 | ||
111 | pi->ac_stamp = ni->ac_stamp = now; | 115 | pi->ac_stamp = ni->ac_stamp; |
112 | ni->ac_stime = ni->ac_utime = 0; | 116 | ni->ac_stime = ni->ac_utime = 0; |
113 | } | 117 | } |
114 | 118 | ||
@@ -116,29 +120,32 @@ void ia64_account_on_switch(struct task_struct *prev, struct task_struct *next) | |||
116 | * Account time for a transition between system, hard irq or soft irq state. | 120 | * Account time for a transition between system, hard irq or soft irq state. |
117 | * Note that this function is called with interrupts enabled. | 121 | * Note that this function is called with interrupts enabled. |
118 | */ | 122 | */ |
119 | void account_system_vtime(struct task_struct *tsk) | 123 | static cputime_t vtime_delta(struct task_struct *tsk) |
120 | { | 124 | { |
121 | struct thread_info *ti = task_thread_info(tsk); | 125 | struct thread_info *ti = task_thread_info(tsk); |
122 | unsigned long flags; | ||
123 | cputime_t delta_stime; | 126 | cputime_t delta_stime; |
124 | __u64 now; | 127 | __u64 now; |
125 | 128 | ||
126 | local_irq_save(flags); | ||
127 | |||
128 | now = ia64_get_itc(); | 129 | now = ia64_get_itc(); |
129 | 130 | ||
130 | delta_stime = cycle_to_cputime(ti->ac_stime + (now - ti->ac_stamp)); | 131 | delta_stime = cycle_to_cputime(ti->ac_stime + (now - ti->ac_stamp)); |
131 | if (irq_count() || idle_task(smp_processor_id()) != tsk) | ||
132 | account_system_time(tsk, 0, delta_stime, delta_stime); | ||
133 | else | ||
134 | account_idle_time(delta_stime); | ||
135 | ti->ac_stime = 0; | 132 | ti->ac_stime = 0; |
136 | |||
137 | ti->ac_stamp = now; | 133 | ti->ac_stamp = now; |
138 | 134 | ||
139 | local_irq_restore(flags); | 135 | return delta_stime; |
136 | } | ||
137 | |||
138 | void vtime_account_system(struct task_struct *tsk) | ||
139 | { | ||
140 | cputime_t delta = vtime_delta(tsk); | ||
141 | |||
142 | account_system_time(tsk, 0, delta, delta); | ||
143 | } | ||
144 | |||
145 | void vtime_account_idle(struct task_struct *tsk) | ||
146 | { | ||
147 | account_idle_time(vtime_delta(tsk)); | ||
140 | } | 148 | } |
141 | EXPORT_SYMBOL_GPL(account_system_vtime); | ||
142 | 149 | ||
143 | /* | 150 | /* |
144 | * Called from the timer interrupt handler to charge accumulated user time | 151 | * Called from the timer interrupt handler to charge accumulated user time |
@@ -146,14 +153,7 @@ EXPORT_SYMBOL_GPL(account_system_vtime); | |||
146 | */ | 153 | */ |
147 | void account_process_tick(struct task_struct *p, int user_tick) | 154 | void account_process_tick(struct task_struct *p, int user_tick) |
148 | { | 155 | { |
149 | struct thread_info *ti = task_thread_info(p); | 156 | vtime_account_user(p); |
150 | cputime_t delta_utime; | ||
151 | |||
152 | if (ti->ac_utime) { | ||
153 | delta_utime = cycle_to_cputime(ti->ac_utime); | ||
154 | account_user_time(p, delta_utime, delta_utime); | ||
155 | ti->ac_utime = 0; | ||
156 | } | ||
157 | } | 157 | } |
158 | 158 | ||
159 | #endif /* CONFIG_VIRT_CPU_ACCOUNTING */ | 159 | #endif /* CONFIG_VIRT_CPU_ACCOUNTING */ |
diff --git a/arch/ia64/kvm/kvm-ia64.c b/arch/ia64/kvm/kvm-ia64.c index bd77cb507c1c..8b3a9c0e771d 100644 --- a/arch/ia64/kvm/kvm-ia64.c +++ b/arch/ia64/kvm/kvm-ia64.c | |||
@@ -924,6 +924,16 @@ int kvm_arch_vcpu_ioctl_set_regs(struct kvm_vcpu *vcpu, struct kvm_regs *regs) | |||
924 | return 0; | 924 | return 0; |
925 | } | 925 | } |
926 | 926 | ||
927 | int kvm_vm_ioctl_irq_line(struct kvm *kvm, struct kvm_irq_level *irq_event) | ||
928 | { | ||
929 | if (!irqchip_in_kernel(kvm)) | ||
930 | return -ENXIO; | ||
931 | |||
932 | irq_event->status = kvm_set_irq(kvm, KVM_USERSPACE_IRQ_SOURCE_ID, | ||
933 | irq_event->irq, irq_event->level); | ||
934 | return 0; | ||
935 | } | ||
936 | |||
927 | long kvm_arch_vm_ioctl(struct file *filp, | 937 | long kvm_arch_vm_ioctl(struct file *filp, |
928 | unsigned int ioctl, unsigned long arg) | 938 | unsigned int ioctl, unsigned long arg) |
929 | { | 939 | { |
@@ -963,29 +973,6 @@ long kvm_arch_vm_ioctl(struct file *filp, | |||
963 | goto out; | 973 | goto out; |
964 | } | 974 | } |
965 | break; | 975 | break; |
966 | case KVM_IRQ_LINE_STATUS: | ||
967 | case KVM_IRQ_LINE: { | ||
968 | struct kvm_irq_level irq_event; | ||
969 | |||
970 | r = -EFAULT; | ||
971 | if (copy_from_user(&irq_event, argp, sizeof irq_event)) | ||
972 | goto out; | ||
973 | r = -ENXIO; | ||
974 | if (irqchip_in_kernel(kvm)) { | ||
975 | __s32 status; | ||
976 | status = kvm_set_irq(kvm, KVM_USERSPACE_IRQ_SOURCE_ID, | ||
977 | irq_event.irq, irq_event.level); | ||
978 | if (ioctl == KVM_IRQ_LINE_STATUS) { | ||
979 | r = -EFAULT; | ||
980 | irq_event.status = status; | ||
981 | if (copy_to_user(argp, &irq_event, | ||
982 | sizeof irq_event)) | ||
983 | goto out; | ||
984 | } | ||
985 | r = 0; | ||
986 | } | ||
987 | break; | ||
988 | } | ||
989 | case KVM_GET_IRQCHIP: { | 976 | case KVM_GET_IRQCHIP: { |
990 | /* 0: PIC master, 1: PIC slave, 2: IOAPIC */ | 977 | /* 0: PIC master, 1: PIC slave, 2: IOAPIC */ |
991 | struct kvm_irqchip chip; | 978 | struct kvm_irqchip chip; |
@@ -1626,11 +1613,17 @@ void kvm_arch_commit_memory_region(struct kvm *kvm, | |||
1626 | return; | 1613 | return; |
1627 | } | 1614 | } |
1628 | 1615 | ||
1629 | void kvm_arch_flush_shadow(struct kvm *kvm) | 1616 | void kvm_arch_flush_shadow_all(struct kvm *kvm) |
1630 | { | 1617 | { |
1631 | kvm_flush_remote_tlbs(kvm); | 1618 | kvm_flush_remote_tlbs(kvm); |
1632 | } | 1619 | } |
1633 | 1620 | ||
1621 | void kvm_arch_flush_shadow_memslot(struct kvm *kvm, | ||
1622 | struct kvm_memory_slot *slot) | ||
1623 | { | ||
1624 | kvm_arch_flush_shadow_all(); | ||
1625 | } | ||
1626 | |||
1634 | long kvm_arch_dev_ioctl(struct file *filp, | 1627 | long kvm_arch_dev_ioctl(struct file *filp, |
1635 | unsigned int ioctl, unsigned long arg) | 1628 | unsigned int ioctl, unsigned long arg) |
1636 | { | 1629 | { |
diff --git a/arch/ia64/mm/fault.c b/arch/ia64/mm/fault.c index 8443daf4f515..6cf0341f978e 100644 --- a/arch/ia64/mm/fault.c +++ b/arch/ia64/mm/fault.c | |||
@@ -184,6 +184,7 @@ retry: | |||
184 | current->min_flt++; | 184 | current->min_flt++; |
185 | if (fault & VM_FAULT_RETRY) { | 185 | if (fault & VM_FAULT_RETRY) { |
186 | flags &= ~FAULT_FLAG_ALLOW_RETRY; | 186 | flags &= ~FAULT_FLAG_ALLOW_RETRY; |
187 | flags |= FAULT_FLAG_TRIED; | ||
187 | 188 | ||
188 | /* No need to up_read(&mm->mmap_sem) as we would | 189 | /* No need to up_read(&mm->mmap_sem) as we would |
189 | * have already released it in __lock_page_or_retry | 190 | * have already released it in __lock_page_or_retry |
diff --git a/arch/ia64/mm/init.c b/arch/ia64/mm/init.c index 0eab454867a2..acd5b68e8871 100644 --- a/arch/ia64/mm/init.c +++ b/arch/ia64/mm/init.c | |||
@@ -138,7 +138,8 @@ ia64_init_addr_space (void) | |||
138 | vma->vm_mm = current->mm; | 138 | vma->vm_mm = current->mm; |
139 | vma->vm_end = PAGE_SIZE; | 139 | vma->vm_end = PAGE_SIZE; |
140 | vma->vm_page_prot = __pgprot(pgprot_val(PAGE_READONLY) | _PAGE_MA_NAT); | 140 | vma->vm_page_prot = __pgprot(pgprot_val(PAGE_READONLY) | _PAGE_MA_NAT); |
141 | vma->vm_flags = VM_READ | VM_MAYREAD | VM_IO | VM_RESERVED; | 141 | vma->vm_flags = VM_READ | VM_MAYREAD | VM_IO | |
142 | VM_DONTEXPAND | VM_DONTDUMP; | ||
142 | down_write(¤t->mm->mmap_sem); | 143 | down_write(¤t->mm->mmap_sem); |
143 | if (insert_vm_struct(current->mm, vma)) { | 144 | if (insert_vm_struct(current->mm, vma)) { |
144 | up_write(¤t->mm->mmap_sem); | 145 | up_write(¤t->mm->mmap_sem); |
@@ -636,6 +637,7 @@ mem_init (void) | |||
636 | 637 | ||
637 | high_memory = __va(max_low_pfn * PAGE_SIZE); | 638 | high_memory = __va(max_low_pfn * PAGE_SIZE); |
638 | 639 | ||
640 | reset_zone_present_pages(); | ||
639 | for_each_online_pgdat(pgdat) | 641 | for_each_online_pgdat(pgdat) |
640 | if (pgdat->bdata->node_bootmem_map) | 642 | if (pgdat->bdata->node_bootmem_map) |
641 | totalram_pages += free_all_bootmem_node(pgdat); | 643 | totalram_pages += free_all_bootmem_node(pgdat); |
diff --git a/arch/ia64/pci/pci.c b/arch/ia64/pci/pci.c index 81acc7a57f3e..5faa66c5c2a8 100644 --- a/arch/ia64/pci/pci.c +++ b/arch/ia64/pci/pci.c | |||
@@ -295,7 +295,6 @@ static __devinit acpi_status add_window(struct acpi_resource *res, void *data) | |||
295 | window->resource.flags = flags; | 295 | window->resource.flags = flags; |
296 | window->resource.start = addr.minimum + offset; | 296 | window->resource.start = addr.minimum + offset; |
297 | window->resource.end = window->resource.start + addr.address_length - 1; | 297 | window->resource.end = window->resource.start + addr.address_length - 1; |
298 | window->resource.child = NULL; | ||
299 | window->offset = offset; | 298 | window->offset = offset; |
300 | 299 | ||
301 | if (insert_resource(root, &window->resource)) { | 300 | if (insert_resource(root, &window->resource)) { |
@@ -357,7 +356,7 @@ pci_acpi_scan_root(struct acpi_pci_root *root) | |||
357 | &windows); | 356 | &windows); |
358 | if (windows) { | 357 | if (windows) { |
359 | controller->window = | 358 | controller->window = |
360 | kmalloc_node(sizeof(*controller->window) * windows, | 359 | kzalloc_node(sizeof(*controller->window) * windows, |
361 | GFP_KERNEL, controller->node); | 360 | GFP_KERNEL, controller->node); |
362 | if (!controller->window) | 361 | if (!controller->window) |
363 | goto out2; | 362 | goto out2; |
@@ -461,14 +460,6 @@ void pcibios_set_master (struct pci_dev *dev) | |||
461 | /* No special bus mastering setup handling */ | 460 | /* No special bus mastering setup handling */ |
462 | } | 461 | } |
463 | 462 | ||
464 | void __devinit | ||
465 | pcibios_update_irq (struct pci_dev *dev, int irq) | ||
466 | { | ||
467 | pci_write_config_byte(dev, PCI_INTERRUPT_LINE, irq); | ||
468 | |||
469 | /* ??? FIXME -- record old value for shutdown. */ | ||
470 | } | ||
471 | |||
472 | int | 463 | int |
473 | pcibios_enable_device (struct pci_dev *dev, int mask) | 464 | pcibios_enable_device (struct pci_dev *dev, int mask) |
474 | { | 465 | { |
diff --git a/arch/ia64/sn/kernel/io_common.c b/arch/ia64/sn/kernel/io_common.c index fbb5f2f87eed..8630875e74b5 100644 --- a/arch/ia64/sn/kernel/io_common.c +++ b/arch/ia64/sn/kernel/io_common.c | |||
@@ -229,7 +229,6 @@ void sn_pci_fixup_slot(struct pci_dev *dev, struct pcidev_info *pcidev_info, | |||
229 | { | 229 | { |
230 | int segment = pci_domain_nr(dev->bus); | 230 | int segment = pci_domain_nr(dev->bus); |
231 | struct pcibus_bussoft *bs; | 231 | struct pcibus_bussoft *bs; |
232 | struct pci_bus *host_pci_bus; | ||
233 | struct pci_dev *host_pci_dev; | 232 | struct pci_dev *host_pci_dev; |
234 | unsigned int bus_no, devfn; | 233 | unsigned int bus_no, devfn; |
235 | 234 | ||
@@ -245,8 +244,7 @@ void sn_pci_fixup_slot(struct pci_dev *dev, struct pcidev_info *pcidev_info, | |||
245 | 244 | ||
246 | bus_no = (pcidev_info->pdi_slot_host_handle >> 32) & 0xff; | 245 | bus_no = (pcidev_info->pdi_slot_host_handle >> 32) & 0xff; |
247 | devfn = pcidev_info->pdi_slot_host_handle & 0xffffffff; | 246 | devfn = pcidev_info->pdi_slot_host_handle & 0xffffffff; |
248 | host_pci_bus = pci_find_bus(segment, bus_no); | 247 | host_pci_dev = pci_get_domain_bus_and_slot(segment, bus_no, devfn); |
249 | host_pci_dev = pci_get_slot(host_pci_bus, devfn); | ||
250 | 248 | ||
251 | pcidev_info->host_pci_dev = host_pci_dev; | 249 | pcidev_info->host_pci_dev = host_pci_dev; |
252 | pcidev_info->pdi_linux_pcidev = dev; | 250 | pcidev_info->pdi_linux_pcidev = dev; |
diff --git a/arch/ia64/xen/irq_xen.c b/arch/ia64/xen/irq_xen.c index 3bb12230721f..01f479ee1c43 100644 --- a/arch/ia64/xen/irq_xen.c +++ b/arch/ia64/xen/irq_xen.c | |||
@@ -433,7 +433,7 @@ xen_resend_irq(unsigned int vector) | |||
433 | (void)resend_irq_on_evtchn(vector); | 433 | (void)resend_irq_on_evtchn(vector); |
434 | } | 434 | } |
435 | 435 | ||
436 | const struct pv_irq_ops xen_irq_ops __initdata = { | 436 | const struct pv_irq_ops xen_irq_ops __initconst = { |
437 | .register_ipi = xen_register_ipi, | 437 | .register_ipi = xen_register_ipi, |
438 | 438 | ||
439 | .assign_irq_vector = xen_assign_irq_vector, | 439 | .assign_irq_vector = xen_assign_irq_vector, |
diff --git a/arch/ia64/xen/irq_xen.h b/arch/ia64/xen/irq_xen.h index 26110f330c87..1778517b90fe 100644 --- a/arch/ia64/xen/irq_xen.h +++ b/arch/ia64/xen/irq_xen.h | |||
@@ -27,7 +27,7 @@ extern void (*late_time_init)(void); | |||
27 | extern char xen_event_callback; | 27 | extern char xen_event_callback; |
28 | void __init xen_init_IRQ(void); | 28 | void __init xen_init_IRQ(void); |
29 | 29 | ||
30 | extern const struct pv_irq_ops xen_irq_ops __initdata; | 30 | extern const struct pv_irq_ops xen_irq_ops __initconst; |
31 | extern void xen_smp_intr_init(void); | 31 | extern void xen_smp_intr_init(void); |
32 | extern void xen_send_ipi(int cpu, int vec); | 32 | extern void xen_send_ipi(int cpu, int vec); |
33 | 33 | ||
diff --git a/arch/ia64/xen/xencomm.c b/arch/ia64/xen/xencomm.c index 1f5d7ac82e97..73d903ca2d64 100644 --- a/arch/ia64/xen/xencomm.c +++ b/arch/ia64/xen/xencomm.c | |||
@@ -17,6 +17,7 @@ | |||
17 | */ | 17 | */ |
18 | 18 | ||
19 | #include <linux/mm.h> | 19 | #include <linux/mm.h> |
20 | #include <linux/err.h> | ||
20 | 21 | ||
21 | static unsigned long kernel_virtual_offset; | 22 | static unsigned long kernel_virtual_offset; |
22 | static int is_xencomm_initialized; | 23 | static int is_xencomm_initialized; |
@@ -98,7 +99,7 @@ xencomm_vtop(unsigned long vaddr) | |||
98 | 99 | ||
99 | /* We assume the page is modified. */ | 100 | /* We assume the page is modified. */ |
100 | page = follow_page(vma, vaddr, FOLL_WRITE | FOLL_TOUCH); | 101 | page = follow_page(vma, vaddr, FOLL_WRITE | FOLL_TOUCH); |
101 | if (!page) | 102 | if (IS_ERR_OR_NULL(page)) |
102 | return ~0UL; | 103 | return ~0UL; |
103 | 104 | ||
104 | return (page_to_pfn(page) << PAGE_SHIFT) | (vaddr & ~PAGE_MASK); | 105 | return (page_to_pfn(page) << PAGE_SHIFT) | (vaddr & ~PAGE_MASK); |