diff options
Diffstat (limited to 'arch/ia64')
-rw-r--r-- | arch/ia64/Kconfig | 19 | ||||
-rw-r--r-- | arch/ia64/hp/common/hwsw_iommu.c | 9 | ||||
-rw-r--r-- | arch/ia64/include/asm/io.h | 24 | ||||
-rw-r--r-- | arch/ia64/include/asm/iommu.h | 1 | ||||
-rw-r--r-- | arch/ia64/include/asm/kvm_host.h | 6 | ||||
-rw-r--r-- | arch/ia64/include/asm/machvec.h | 22 | ||||
-rw-r--r-- | arch/ia64/include/asm/meminit.h | 1 | ||||
-rw-r--r-- | arch/ia64/include/asm/sal.h | 15 | ||||
-rw-r--r-- | arch/ia64/include/asm/sn/sn_sal.h | 45 | ||||
-rw-r--r-- | arch/ia64/kernel/acpi.c | 29 | ||||
-rw-r--r-- | arch/ia64/kernel/pci-dma.c | 9 | ||||
-rw-r--r-- | arch/ia64/kernel/perfmon.c | 5 | ||||
-rw-r--r-- | arch/ia64/kernel/setup.c | 9 | ||||
-rw-r--r-- | arch/ia64/kvm/Makefile | 8 | ||||
-rw-r--r-- | arch/ia64/kvm/kvm-ia64.c | 80 | ||||
-rw-r--r-- | arch/ia64/kvm/kvm_fw.c | 9 | ||||
-rw-r--r-- | arch/ia64/kvm/process.c | 2 | ||||
-rw-r--r-- | arch/ia64/mm/discontig.c | 1 | ||||
-rw-r--r-- | arch/ia64/uv/kernel/setup.c | 6 |
19 files changed, 166 insertions, 134 deletions
diff --git a/arch/ia64/Kconfig b/arch/ia64/Kconfig index 27eec71429b0..6bd91ed7cd03 100644 --- a/arch/ia64/Kconfig +++ b/arch/ia64/Kconfig | |||
@@ -148,6 +148,7 @@ config IA64_GENERIC | |||
148 | select ACPI_NUMA | 148 | select ACPI_NUMA |
149 | select SWIOTLB | 149 | select SWIOTLB |
150 | select PCI_MSI | 150 | select PCI_MSI |
151 | select DMAR | ||
151 | help | 152 | help |
152 | This selects the system type of your hardware. A "generic" kernel | 153 | This selects the system type of your hardware. A "generic" kernel |
153 | will run on any supported IA-64 system. However, if you configure | 154 | will run on any supported IA-64 system. However, if you configure |
@@ -585,7 +586,7 @@ source "fs/Kconfig.binfmt" | |||
585 | 586 | ||
586 | endmenu | 587 | endmenu |
587 | 588 | ||
588 | menu "Power management and ACPI" | 589 | menu "Power management and ACPI options" |
589 | 590 | ||
590 | source "kernel/power/Kconfig" | 591 | source "kernel/power/Kconfig" |
591 | 592 | ||
@@ -641,6 +642,8 @@ source "net/Kconfig" | |||
641 | 642 | ||
642 | source "drivers/Kconfig" | 643 | source "drivers/Kconfig" |
643 | 644 | ||
645 | source "arch/ia64/hp/sim/Kconfig" | ||
646 | |||
644 | config MSPEC | 647 | config MSPEC |
645 | tristate "Memory special operations driver" | 648 | tristate "Memory special operations driver" |
646 | depends on IA64 | 649 | depends on IA64 |
@@ -652,6 +655,12 @@ config MSPEC | |||
652 | 655 | ||
653 | source "fs/Kconfig" | 656 | source "fs/Kconfig" |
654 | 657 | ||
658 | source "arch/ia64/Kconfig.debug" | ||
659 | |||
660 | source "security/Kconfig" | ||
661 | |||
662 | source "crypto/Kconfig" | ||
663 | |||
655 | source "arch/ia64/kvm/Kconfig" | 664 | source "arch/ia64/kvm/Kconfig" |
656 | 665 | ||
657 | source "lib/Kconfig" | 666 | source "lib/Kconfig" |
@@ -678,11 +687,3 @@ config IRQ_PER_CPU | |||
678 | 687 | ||
679 | config IOMMU_HELPER | 688 | config IOMMU_HELPER |
680 | def_bool (IA64_HP_ZX1 || IA64_HP_ZX1_SWIOTLB || IA64_GENERIC || SWIOTLB) | 689 | def_bool (IA64_HP_ZX1 || IA64_HP_ZX1_SWIOTLB || IA64_GENERIC || SWIOTLB) |
681 | |||
682 | source "arch/ia64/hp/sim/Kconfig" | ||
683 | |||
684 | source "arch/ia64/Kconfig.debug" | ||
685 | |||
686 | source "security/Kconfig" | ||
687 | |||
688 | source "crypto/Kconfig" | ||
diff --git a/arch/ia64/hp/common/hwsw_iommu.c b/arch/ia64/hp/common/hwsw_iommu.c index 88b6e6f3fd88..2769dbfd03bf 100644 --- a/arch/ia64/hp/common/hwsw_iommu.c +++ b/arch/ia64/hp/common/hwsw_iommu.c | |||
@@ -13,19 +13,12 @@ | |||
13 | */ | 13 | */ |
14 | 14 | ||
15 | #include <linux/device.h> | 15 | #include <linux/device.h> |
16 | #include <linux/swiotlb.h> | ||
16 | 17 | ||
17 | #include <asm/machvec.h> | 18 | #include <asm/machvec.h> |
18 | 19 | ||
19 | /* swiotlb declarations & definitions: */ | 20 | /* swiotlb declarations & definitions: */ |
20 | extern int swiotlb_late_init_with_default_size (size_t size); | 21 | extern int swiotlb_late_init_with_default_size (size_t size); |
21 | extern ia64_mv_dma_alloc_coherent swiotlb_alloc_coherent; | ||
22 | extern ia64_mv_dma_free_coherent swiotlb_free_coherent; | ||
23 | extern ia64_mv_dma_map_single_attrs swiotlb_map_single_attrs; | ||
24 | extern ia64_mv_dma_unmap_single_attrs swiotlb_unmap_single_attrs; | ||
25 | extern ia64_mv_dma_map_sg_attrs swiotlb_map_sg_attrs; | ||
26 | extern ia64_mv_dma_unmap_sg_attrs swiotlb_unmap_sg_attrs; | ||
27 | extern ia64_mv_dma_supported swiotlb_dma_supported; | ||
28 | extern ia64_mv_dma_mapping_error swiotlb_dma_mapping_error; | ||
29 | 22 | ||
30 | /* hwiommu declarations & definitions: */ | 23 | /* hwiommu declarations & definitions: */ |
31 | 24 | ||
diff --git a/arch/ia64/include/asm/io.h b/arch/ia64/include/asm/io.h index 7f257507cd86..0d9d16e2d949 100644 --- a/arch/ia64/include/asm/io.h +++ b/arch/ia64/include/asm/io.h | |||
@@ -434,28 +434,4 @@ extern void memset_io(volatile void __iomem *s, int c, long n); | |||
434 | 434 | ||
435 | # endif /* __KERNEL__ */ | 435 | # endif /* __KERNEL__ */ |
436 | 436 | ||
437 | /* | ||
438 | * Enabling BIO_VMERGE_BOUNDARY forces us to turn off I/O MMU bypassing. It is said that | ||
439 | * BIO-level virtual merging can give up to 4% performance boost (not verified for ia64). | ||
440 | * On the other hand, we know that I/O MMU bypassing gives ~8% performance improvement on | ||
441 | * SPECweb-like workloads on zx1-based machines. Thus, for now we favor I/O MMU bypassing | ||
442 | * over BIO-level virtual merging. | ||
443 | */ | ||
444 | extern unsigned long ia64_max_iommu_merge_mask; | ||
445 | #if 1 | ||
446 | #define BIO_VMERGE_BOUNDARY 0 | ||
447 | #else | ||
448 | /* | ||
449 | * It makes no sense at all to have this BIO_VMERGE_BOUNDARY macro here. Should be | ||
450 | * replaced by dma_merge_mask() or something of that sort. Note: the only way | ||
451 | * BIO_VMERGE_BOUNDARY is used is to mask off bits. Effectively, our definition gets | ||
452 | * expanded into: | ||
453 | * | ||
454 | * addr & ((ia64_max_iommu_merge_mask + 1) - 1) == (addr & ia64_max_iommu_vmerge_mask) | ||
455 | * | ||
456 | * which is precisely what we want. | ||
457 | */ | ||
458 | #define BIO_VMERGE_BOUNDARY (ia64_max_iommu_merge_mask + 1) | ||
459 | #endif | ||
460 | |||
461 | #endif /* _ASM_IA64_IO_H */ | 437 | #endif /* _ASM_IA64_IO_H */ |
diff --git a/arch/ia64/include/asm/iommu.h b/arch/ia64/include/asm/iommu.h index 5fb2bb93de3b..0490794fe4aa 100644 --- a/arch/ia64/include/asm/iommu.h +++ b/arch/ia64/include/asm/iommu.h | |||
@@ -11,6 +11,5 @@ extern int force_iommu, no_iommu; | |||
11 | extern int iommu_detected; | 11 | extern int iommu_detected; |
12 | extern void iommu_dma_init(void); | 12 | extern void iommu_dma_init(void); |
13 | extern void machvec_init(const char *name); | 13 | extern void machvec_init(const char *name); |
14 | extern int forbid_dac; | ||
15 | 14 | ||
16 | #endif | 15 | #endif |
diff --git a/arch/ia64/include/asm/kvm_host.h b/arch/ia64/include/asm/kvm_host.h index 85db124d37f6..c60d324da540 100644 --- a/arch/ia64/include/asm/kvm_host.h +++ b/arch/ia64/include/asm/kvm_host.h | |||
@@ -365,7 +365,8 @@ struct kvm_vcpu_arch { | |||
365 | long itc_offset; | 365 | long itc_offset; |
366 | unsigned long itc_check; | 366 | unsigned long itc_check; |
367 | unsigned long timer_check; | 367 | unsigned long timer_check; |
368 | unsigned long timer_pending; | 368 | unsigned int timer_pending; |
369 | unsigned int timer_fired; | ||
369 | 370 | ||
370 | unsigned long vrr[8]; | 371 | unsigned long vrr[8]; |
371 | unsigned long ibr[8]; | 372 | unsigned long ibr[8]; |
@@ -417,6 +418,9 @@ struct kvm_arch { | |||
417 | struct list_head assigned_dev_head; | 418 | struct list_head assigned_dev_head; |
418 | struct dmar_domain *intel_iommu_domain; | 419 | struct dmar_domain *intel_iommu_domain; |
419 | struct hlist_head irq_ack_notifier_list; | 420 | struct hlist_head irq_ack_notifier_list; |
421 | |||
422 | unsigned long irq_sources_bitmap; | ||
423 | unsigned long irq_states[KVM_IOAPIC_NUM_PINS]; | ||
420 | }; | 424 | }; |
421 | 425 | ||
422 | union cpuid3_t { | 426 | union cpuid3_t { |
diff --git a/arch/ia64/include/asm/machvec.h b/arch/ia64/include/asm/machvec.h index 1ea28bcee33b..59c17e446683 100644 --- a/arch/ia64/include/asm/machvec.h +++ b/arch/ia64/include/asm/machvec.h | |||
@@ -11,6 +11,7 @@ | |||
11 | #define _ASM_IA64_MACHVEC_H | 11 | #define _ASM_IA64_MACHVEC_H |
12 | 12 | ||
13 | #include <linux/types.h> | 13 | #include <linux/types.h> |
14 | #include <linux/swiotlb.h> | ||
14 | 15 | ||
15 | /* forward declarations: */ | 16 | /* forward declarations: */ |
16 | struct device; | 17 | struct device; |
@@ -298,27 +299,6 @@ extern void machvec_init_from_cmdline(const char *cmdline); | |||
298 | # endif /* CONFIG_IA64_GENERIC */ | 299 | # endif /* CONFIG_IA64_GENERIC */ |
299 | 300 | ||
300 | /* | 301 | /* |
301 | * Declare default routines which aren't declared anywhere else: | ||
302 | */ | ||
303 | extern ia64_mv_dma_init swiotlb_init; | ||
304 | extern ia64_mv_dma_alloc_coherent swiotlb_alloc_coherent; | ||
305 | extern ia64_mv_dma_free_coherent swiotlb_free_coherent; | ||
306 | extern ia64_mv_dma_map_single swiotlb_map_single; | ||
307 | extern ia64_mv_dma_map_single_attrs swiotlb_map_single_attrs; | ||
308 | extern ia64_mv_dma_unmap_single swiotlb_unmap_single; | ||
309 | extern ia64_mv_dma_unmap_single_attrs swiotlb_unmap_single_attrs; | ||
310 | extern ia64_mv_dma_map_sg swiotlb_map_sg; | ||
311 | extern ia64_mv_dma_map_sg_attrs swiotlb_map_sg_attrs; | ||
312 | extern ia64_mv_dma_unmap_sg swiotlb_unmap_sg; | ||
313 | extern ia64_mv_dma_unmap_sg_attrs swiotlb_unmap_sg_attrs; | ||
314 | extern ia64_mv_dma_sync_single_for_cpu swiotlb_sync_single_for_cpu; | ||
315 | extern ia64_mv_dma_sync_sg_for_cpu swiotlb_sync_sg_for_cpu; | ||
316 | extern ia64_mv_dma_sync_single_for_device swiotlb_sync_single_for_device; | ||
317 | extern ia64_mv_dma_sync_sg_for_device swiotlb_sync_sg_for_device; | ||
318 | extern ia64_mv_dma_mapping_error swiotlb_dma_mapping_error; | ||
319 | extern ia64_mv_dma_supported swiotlb_dma_supported; | ||
320 | |||
321 | /* | ||
322 | * Define default versions so we can extend machvec for new platforms without having | 302 | * Define default versions so we can extend machvec for new platforms without having |
323 | * to update the machvec files for all existing platforms. | 303 | * to update the machvec files for all existing platforms. |
324 | */ | 304 | */ |
diff --git a/arch/ia64/include/asm/meminit.h b/arch/ia64/include/asm/meminit.h index 6bc96ee54327..c0cea375620a 100644 --- a/arch/ia64/include/asm/meminit.h +++ b/arch/ia64/include/asm/meminit.h | |||
@@ -48,7 +48,6 @@ extern int reserve_elfcorehdr(unsigned long *start, unsigned long *end); | |||
48 | */ | 48 | */ |
49 | #define GRANULEROUNDDOWN(n) ((n) & ~(IA64_GRANULE_SIZE-1)) | 49 | #define GRANULEROUNDDOWN(n) ((n) & ~(IA64_GRANULE_SIZE-1)) |
50 | #define GRANULEROUNDUP(n) (((n)+IA64_GRANULE_SIZE-1) & ~(IA64_GRANULE_SIZE-1)) | 50 | #define GRANULEROUNDUP(n) (((n)+IA64_GRANULE_SIZE-1) & ~(IA64_GRANULE_SIZE-1)) |
51 | #define ORDERROUNDDOWN(n) ((n) & ~((PAGE_SIZE<<MAX_ORDER)-1)) | ||
52 | 51 | ||
53 | #ifdef CONFIG_NUMA | 52 | #ifdef CONFIG_NUMA |
54 | extern void call_pernode_memory (unsigned long start, unsigned long len, void *func); | 53 | extern void call_pernode_memory (unsigned long start, unsigned long len, void *func); |
diff --git a/arch/ia64/include/asm/sal.h b/arch/ia64/include/asm/sal.h index ea310c0812aa..966797a97c94 100644 --- a/arch/ia64/include/asm/sal.h +++ b/arch/ia64/include/asm/sal.h | |||
@@ -337,11 +337,24 @@ typedef struct sal_log_record_header { | |||
337 | #define sal_log_severity_fatal 1 | 337 | #define sal_log_severity_fatal 1 |
338 | #define sal_log_severity_corrected 2 | 338 | #define sal_log_severity_corrected 2 |
339 | 339 | ||
340 | /* | ||
341 | * Error Recovery Info (ERI) bit decode. From SAL Spec section B.2.2 Table B-3 | ||
342 | * Error Section Error_Recovery_Info Field Definition. | ||
343 | */ | ||
344 | #define ERI_NOT_VALID 0x0 /* Error Recovery Field is not valid */ | ||
345 | #define ERI_NOT_ACCESSIBLE 0x30 /* Resource not accessible */ | ||
346 | #define ERI_CONTAINMENT_WARN 0x22 /* Corrupt data propagated */ | ||
347 | #define ERI_UNCORRECTED_ERROR 0x20 /* Uncorrected error */ | ||
348 | #define ERI_COMPONENT_RESET 0x24 /* Component must be reset */ | ||
349 | #define ERI_CORR_ERROR_LOG 0x21 /* Corrected error, needs logging */ | ||
350 | #define ERI_CORR_ERROR_THRESH 0x29 /* Corrected error threshold exceeded */ | ||
351 | |||
340 | /* Definition of log section header structures */ | 352 | /* Definition of log section header structures */ |
341 | typedef struct sal_log_sec_header { | 353 | typedef struct sal_log_sec_header { |
342 | efi_guid_t guid; /* Unique Section ID */ | 354 | efi_guid_t guid; /* Unique Section ID */ |
343 | sal_log_revision_t revision; /* Major and Minor revision of Section */ | 355 | sal_log_revision_t revision; /* Major and Minor revision of Section */ |
344 | u16 reserved; | 356 | u8 error_recovery_info; /* Platform error recovery status */ |
357 | u8 reserved; | ||
345 | u32 len; /* Section length */ | 358 | u32 len; /* Section length */ |
346 | } sal_log_section_hdr_t; | 359 | } sal_log_section_hdr_t; |
347 | 360 | ||
diff --git a/arch/ia64/include/asm/sn/sn_sal.h b/arch/ia64/include/asm/sn/sn_sal.h index 57e649d388b8..e310fc0135dc 100644 --- a/arch/ia64/include/asm/sn/sn_sal.h +++ b/arch/ia64/include/asm/sn/sn_sal.h | |||
@@ -90,6 +90,8 @@ | |||
90 | #define SN_SAL_SET_CPU_NUMBER 0x02000068 | 90 | #define SN_SAL_SET_CPU_NUMBER 0x02000068 |
91 | 91 | ||
92 | #define SN_SAL_KERNEL_LAUNCH_EVENT 0x02000069 | 92 | #define SN_SAL_KERNEL_LAUNCH_EVENT 0x02000069 |
93 | #define SN_SAL_WATCHLIST_ALLOC 0x02000070 | ||
94 | #define SN_SAL_WATCHLIST_FREE 0x02000071 | ||
93 | 95 | ||
94 | /* | 96 | /* |
95 | * Service-specific constants | 97 | * Service-specific constants |
@@ -1185,4 +1187,47 @@ ia64_sn_kernel_launch_event(void) | |||
1185 | SAL_CALL_NOLOCK(rv, SN_SAL_KERNEL_LAUNCH_EVENT, 0, 0, 0, 0, 0, 0, 0); | 1187 | SAL_CALL_NOLOCK(rv, SN_SAL_KERNEL_LAUNCH_EVENT, 0, 0, 0, 0, 0, 0, 0); |
1186 | return rv.status; | 1188 | return rv.status; |
1187 | } | 1189 | } |
1190 | |||
1191 | union sn_watchlist_u { | ||
1192 | u64 val; | ||
1193 | struct { | ||
1194 | u64 blade : 16, | ||
1195 | size : 32, | ||
1196 | filler : 16; | ||
1197 | }; | ||
1198 | }; | ||
1199 | |||
1200 | static inline int | ||
1201 | sn_mq_watchlist_alloc(int blade, void *mq, unsigned int mq_size, | ||
1202 | unsigned long *intr_mmr_offset) | ||
1203 | { | ||
1204 | struct ia64_sal_retval rv; | ||
1205 | unsigned long addr; | ||
1206 | union sn_watchlist_u size_blade; | ||
1207 | int watchlist; | ||
1208 | |||
1209 | addr = (unsigned long)mq; | ||
1210 | size_blade.size = mq_size; | ||
1211 | size_blade.blade = blade; | ||
1212 | |||
1213 | /* | ||
1214 | * bios returns watchlist number or negative error number. | ||
1215 | */ | ||
1216 | ia64_sal_oemcall_nolock(&rv, SN_SAL_WATCHLIST_ALLOC, addr, | ||
1217 | size_blade.val, (u64)intr_mmr_offset, | ||
1218 | (u64)&watchlist, 0, 0, 0); | ||
1219 | if (rv.status < 0) | ||
1220 | return rv.status; | ||
1221 | |||
1222 | return watchlist; | ||
1223 | } | ||
1224 | |||
1225 | static inline int | ||
1226 | sn_mq_watchlist_free(int blade, int watchlist_num) | ||
1227 | { | ||
1228 | struct ia64_sal_retval rv; | ||
1229 | ia64_sal_oemcall_nolock(&rv, SN_SAL_WATCHLIST_FREE, blade, | ||
1230 | watchlist_num, 0, 0, 0, 0, 0); | ||
1231 | return rv.status; | ||
1232 | } | ||
1188 | #endif /* _ASM_IA64_SN_SN_SAL_H */ | 1233 | #endif /* _ASM_IA64_SN_SN_SAL_H */ |
diff --git a/arch/ia64/kernel/acpi.c b/arch/ia64/kernel/acpi.c index 0635015d0aaa..bd7acc71e8a9 100644 --- a/arch/ia64/kernel/acpi.c +++ b/arch/ia64/kernel/acpi.c | |||
@@ -678,6 +678,30 @@ static int __init acpi_parse_fadt(struct acpi_table_header *table) | |||
678 | return 0; | 678 | return 0; |
679 | } | 679 | } |
680 | 680 | ||
681 | int __init early_acpi_boot_init(void) | ||
682 | { | ||
683 | int ret; | ||
684 | |||
685 | /* | ||
686 | * do a partial walk of MADT to determine how many CPUs | ||
687 | * we have including offline CPUs | ||
688 | */ | ||
689 | if (acpi_table_parse(ACPI_SIG_MADT, acpi_parse_madt)) { | ||
690 | printk(KERN_ERR PREFIX "Can't find MADT\n"); | ||
691 | return 0; | ||
692 | } | ||
693 | |||
694 | ret = acpi_table_parse_madt(ACPI_MADT_TYPE_LOCAL_SAPIC, | ||
695 | acpi_parse_lsapic, NR_CPUS); | ||
696 | if (ret < 1) | ||
697 | printk(KERN_ERR PREFIX | ||
698 | "Error parsing MADT - no LAPIC entries\n"); | ||
699 | |||
700 | return 0; | ||
701 | } | ||
702 | |||
703 | |||
704 | |||
681 | int __init acpi_boot_init(void) | 705 | int __init acpi_boot_init(void) |
682 | { | 706 | { |
683 | 707 | ||
@@ -701,11 +725,6 @@ int __init acpi_boot_init(void) | |||
701 | printk(KERN_ERR PREFIX | 725 | printk(KERN_ERR PREFIX |
702 | "Error parsing LAPIC address override entry\n"); | 726 | "Error parsing LAPIC address override entry\n"); |
703 | 727 | ||
704 | if (acpi_table_parse_madt(ACPI_MADT_TYPE_LOCAL_SAPIC, acpi_parse_lsapic, NR_CPUS) | ||
705 | < 1) | ||
706 | printk(KERN_ERR PREFIX | ||
707 | "Error parsing MADT - no LAPIC entries\n"); | ||
708 | |||
709 | if (acpi_table_parse_madt(ACPI_MADT_TYPE_LOCAL_APIC_NMI, acpi_parse_lapic_nmi, 0) | 728 | if (acpi_table_parse_madt(ACPI_MADT_TYPE_LOCAL_APIC_NMI, acpi_parse_lapic_nmi, 0) |
710 | < 0) | 729 | < 0) |
711 | printk(KERN_ERR PREFIX "Error parsing LAPIC NMI entry\n"); | 730 | printk(KERN_ERR PREFIX "Error parsing LAPIC NMI entry\n"); |
diff --git a/arch/ia64/kernel/pci-dma.c b/arch/ia64/kernel/pci-dma.c index 10a75b557650..dbdb778efa05 100644 --- a/arch/ia64/kernel/pci-dma.c +++ b/arch/ia64/kernel/pci-dma.c | |||
@@ -12,13 +12,11 @@ | |||
12 | #include <asm/machvec.h> | 12 | #include <asm/machvec.h> |
13 | #include <linux/dma-mapping.h> | 13 | #include <linux/dma-mapping.h> |
14 | 14 | ||
15 | #include <asm/machvec.h> | ||
16 | #include <asm/system.h> | 15 | #include <asm/system.h> |
17 | 16 | ||
18 | #ifdef CONFIG_DMAR | 17 | #ifdef CONFIG_DMAR |
19 | 18 | ||
20 | #include <linux/kernel.h> | 19 | #include <linux/kernel.h> |
21 | #include <linux/string.h> | ||
22 | 20 | ||
23 | #include <asm/page.h> | 21 | #include <asm/page.h> |
24 | #include <asm/iommu.h> | 22 | #include <asm/iommu.h> |
@@ -89,13 +87,6 @@ int iommu_dma_supported(struct device *dev, u64 mask) | |||
89 | { | 87 | { |
90 | struct dma_mapping_ops *ops = get_dma_ops(dev); | 88 | struct dma_mapping_ops *ops = get_dma_ops(dev); |
91 | 89 | ||
92 | #ifdef CONFIG_PCI | ||
93 | if (mask > 0xffffffff && forbid_dac > 0) { | ||
94 | dev_info(dev, "Disallowing DAC for device\n"); | ||
95 | return 0; | ||
96 | } | ||
97 | #endif | ||
98 | |||
99 | if (ops->dma_supported_op) | 90 | if (ops->dma_supported_op) |
100 | return ops->dma_supported_op(dev, mask); | 91 | return ops->dma_supported_op(dev, mask); |
101 | 92 | ||
diff --git a/arch/ia64/kernel/perfmon.c b/arch/ia64/kernel/perfmon.c index ada4605d1223..6543a5547c84 100644 --- a/arch/ia64/kernel/perfmon.c +++ b/arch/ia64/kernel/perfmon.c | |||
@@ -1995,11 +1995,6 @@ pfm_close(struct inode *inode, struct file *filp) | |||
1995 | return -EBADF; | 1995 | return -EBADF; |
1996 | } | 1996 | } |
1997 | 1997 | ||
1998 | if (filp->f_flags & FASYNC) { | ||
1999 | DPRINT(("cleaning up async_queue=%p\n", ctx->ctx_async_queue)); | ||
2000 | pfm_do_fasync(-1, filp, ctx, 0); | ||
2001 | } | ||
2002 | |||
2003 | PROTECT_CTX(ctx, flags); | 1998 | PROTECT_CTX(ctx, flags); |
2004 | 1999 | ||
2005 | state = ctx->ctx_state; | 2000 | state = ctx->ctx_state; |
diff --git a/arch/ia64/kernel/setup.c b/arch/ia64/kernel/setup.c index ae7911702bf8..865af27c7737 100644 --- a/arch/ia64/kernel/setup.c +++ b/arch/ia64/kernel/setup.c | |||
@@ -359,7 +359,7 @@ reserve_memory (void) | |||
359 | } | 359 | } |
360 | #endif | 360 | #endif |
361 | 361 | ||
362 | #ifdef CONFIG_CRASH_KERNEL | 362 | #ifdef CONFIG_CRASH_DUMP |
363 | if (reserve_elfcorehdr(&rsvd_region[n].start, | 363 | if (reserve_elfcorehdr(&rsvd_region[n].start, |
364 | &rsvd_region[n].end) == 0) | 364 | &rsvd_region[n].end) == 0) |
365 | n++; | 365 | n++; |
@@ -561,8 +561,12 @@ setup_arch (char **cmdline_p) | |||
561 | #ifdef CONFIG_ACPI | 561 | #ifdef CONFIG_ACPI |
562 | /* Initialize the ACPI boot-time table parser */ | 562 | /* Initialize the ACPI boot-time table parser */ |
563 | acpi_table_init(); | 563 | acpi_table_init(); |
564 | early_acpi_boot_init(); | ||
564 | # ifdef CONFIG_ACPI_NUMA | 565 | # ifdef CONFIG_ACPI_NUMA |
565 | acpi_numa_init(); | 566 | acpi_numa_init(); |
567 | #ifdef CONFIG_ACPI_HOTPLUG_CPU | ||
568 | prefill_possible_map(); | ||
569 | #endif | ||
566 | per_cpu_scan_finalize((cpus_weight(early_cpu_possible_map) == 0 ? | 570 | per_cpu_scan_finalize((cpus_weight(early_cpu_possible_map) == 0 ? |
567 | 32 : cpus_weight(early_cpu_possible_map)), | 571 | 32 : cpus_weight(early_cpu_possible_map)), |
568 | additional_cpus > 0 ? additional_cpus : 0); | 572 | additional_cpus > 0 ? additional_cpus : 0); |
@@ -853,9 +857,6 @@ void __init | |||
853 | setup_per_cpu_areas (void) | 857 | setup_per_cpu_areas (void) |
854 | { | 858 | { |
855 | /* start_kernel() requires this... */ | 859 | /* start_kernel() requires this... */ |
856 | #ifdef CONFIG_ACPI_HOTPLUG_CPU | ||
857 | prefill_possible_map(); | ||
858 | #endif | ||
859 | } | 860 | } |
860 | 861 | ||
861 | /* | 862 | /* |
diff --git a/arch/ia64/kvm/Makefile b/arch/ia64/kvm/Makefile index cf37f8f490c0..3ab4d6d50704 100644 --- a/arch/ia64/kvm/Makefile +++ b/arch/ia64/kvm/Makefile | |||
@@ -29,13 +29,18 @@ define cmd_offsets | |||
29 | echo ""; \ | 29 | echo ""; \ |
30 | echo "#endif" ) > $@ | 30 | echo "#endif" ) > $@ |
31 | endef | 31 | endef |
32 | |||
32 | # We use internal rules to avoid the "is up to date" message from make | 33 | # We use internal rules to avoid the "is up to date" message from make |
33 | arch/ia64/kvm/asm-offsets.s: arch/ia64/kvm/asm-offsets.c | 34 | arch/ia64/kvm/asm-offsets.s: arch/ia64/kvm/asm-offsets.c \ |
35 | $(wildcard $(srctree)/arch/ia64/include/asm/*.h)\ | ||
36 | $(wildcard $(srctree)/include/linux/*.h) | ||
34 | $(call if_changed_dep,cc_s_c) | 37 | $(call if_changed_dep,cc_s_c) |
35 | 38 | ||
36 | $(obj)/$(offsets-file): arch/ia64/kvm/asm-offsets.s | 39 | $(obj)/$(offsets-file): arch/ia64/kvm/asm-offsets.s |
37 | $(call cmd,offsets) | 40 | $(call cmd,offsets) |
38 | 41 | ||
42 | FORCE : $(obj)/$(offsets-file) | ||
43 | |||
39 | # | 44 | # |
40 | # Makefile for Kernel-based Virtual Machine module | 45 | # Makefile for Kernel-based Virtual Machine module |
41 | # | 46 | # |
@@ -53,7 +58,6 @@ endif | |||
53 | kvm-objs := $(common-objs) kvm-ia64.o kvm_fw.o | 58 | kvm-objs := $(common-objs) kvm-ia64.o kvm_fw.o |
54 | obj-$(CONFIG_KVM) += kvm.o | 59 | obj-$(CONFIG_KVM) += kvm.o |
55 | 60 | ||
56 | FORCE : $(obj)/$(offsets-file) | ||
57 | EXTRA_CFLAGS_vcpu.o += -mfixed-range=f2-f5,f12-f127 | 61 | EXTRA_CFLAGS_vcpu.o += -mfixed-range=f2-f5,f12-f127 |
58 | kvm-intel-objs = vmm.o vmm_ivt.o trampoline.o vcpu.o optvfault.o mmio.o \ | 62 | kvm-intel-objs = vmm.o vmm_ivt.o trampoline.o vcpu.o optvfault.o mmio.o \ |
59 | vtlb.o process.o | 63 | vtlb.o process.o |
diff --git a/arch/ia64/kvm/kvm-ia64.c b/arch/ia64/kvm/kvm-ia64.c index a312c9e9b9ef..3caac477de9e 100644 --- a/arch/ia64/kvm/kvm-ia64.c +++ b/arch/ia64/kvm/kvm-ia64.c | |||
@@ -385,6 +385,7 @@ static int handle_global_purge(struct kvm_vcpu *vcpu, struct kvm_run *kvm_run) | |||
385 | struct kvm *kvm = vcpu->kvm; | 385 | struct kvm *kvm = vcpu->kvm; |
386 | struct call_data call_data; | 386 | struct call_data call_data; |
387 | int i; | 387 | int i; |
388 | |||
388 | call_data.ptc_g_data = p->u.ptc_g_data; | 389 | call_data.ptc_g_data = p->u.ptc_g_data; |
389 | 390 | ||
390 | for (i = 0; i < KVM_MAX_VCPUS; i++) { | 391 | for (i = 0; i < KVM_MAX_VCPUS; i++) { |
@@ -418,33 +419,41 @@ int kvm_emulate_halt(struct kvm_vcpu *vcpu) | |||
418 | ktime_t kt; | 419 | ktime_t kt; |
419 | long itc_diff; | 420 | long itc_diff; |
420 | unsigned long vcpu_now_itc; | 421 | unsigned long vcpu_now_itc; |
421 | |||
422 | unsigned long expires; | 422 | unsigned long expires; |
423 | struct hrtimer *p_ht = &vcpu->arch.hlt_timer; | 423 | struct hrtimer *p_ht = &vcpu->arch.hlt_timer; |
424 | unsigned long cyc_per_usec = local_cpu_data->cyc_per_usec; | 424 | unsigned long cyc_per_usec = local_cpu_data->cyc_per_usec; |
425 | struct vpd *vpd = to_host(vcpu->kvm, vcpu->arch.vpd); | 425 | struct vpd *vpd = to_host(vcpu->kvm, vcpu->arch.vpd); |
426 | 426 | ||
427 | vcpu_now_itc = ia64_getreg(_IA64_REG_AR_ITC) + vcpu->arch.itc_offset; | 427 | if (irqchip_in_kernel(vcpu->kvm)) { |
428 | 428 | ||
429 | if (time_after(vcpu_now_itc, vpd->itm)) { | 429 | vcpu_now_itc = ia64_getreg(_IA64_REG_AR_ITC) + vcpu->arch.itc_offset; |
430 | vcpu->arch.timer_check = 1; | ||
431 | return 1; | ||
432 | } | ||
433 | itc_diff = vpd->itm - vcpu_now_itc; | ||
434 | if (itc_diff < 0) | ||
435 | itc_diff = -itc_diff; | ||
436 | 430 | ||
437 | expires = div64_u64(itc_diff, cyc_per_usec); | 431 | if (time_after(vcpu_now_itc, vpd->itm)) { |
438 | kt = ktime_set(0, 1000 * expires); | 432 | vcpu->arch.timer_check = 1; |
439 | vcpu->arch.ht_active = 1; | 433 | return 1; |
440 | hrtimer_start(p_ht, kt, HRTIMER_MODE_ABS); | 434 | } |
435 | itc_diff = vpd->itm - vcpu_now_itc; | ||
436 | if (itc_diff < 0) | ||
437 | itc_diff = -itc_diff; | ||
438 | |||
439 | expires = div64_u64(itc_diff, cyc_per_usec); | ||
440 | kt = ktime_set(0, 1000 * expires); | ||
441 | |||
442 | down_read(&vcpu->kvm->slots_lock); | ||
443 | vcpu->arch.ht_active = 1; | ||
444 | hrtimer_start(p_ht, kt, HRTIMER_MODE_ABS); | ||
441 | 445 | ||
442 | if (irqchip_in_kernel(vcpu->kvm)) { | ||
443 | vcpu->arch.mp_state = KVM_MP_STATE_HALTED; | 446 | vcpu->arch.mp_state = KVM_MP_STATE_HALTED; |
444 | kvm_vcpu_block(vcpu); | 447 | kvm_vcpu_block(vcpu); |
445 | hrtimer_cancel(p_ht); | 448 | hrtimer_cancel(p_ht); |
446 | vcpu->arch.ht_active = 0; | 449 | vcpu->arch.ht_active = 0; |
447 | 450 | ||
451 | if (test_and_clear_bit(KVM_REQ_UNHALT, &vcpu->requests)) | ||
452 | if (vcpu->arch.mp_state == KVM_MP_STATE_HALTED) | ||
453 | vcpu->arch.mp_state = | ||
454 | KVM_MP_STATE_RUNNABLE; | ||
455 | up_read(&vcpu->kvm->slots_lock); | ||
456 | |||
448 | if (vcpu->arch.mp_state != KVM_MP_STATE_RUNNABLE) | 457 | if (vcpu->arch.mp_state != KVM_MP_STATE_RUNNABLE) |
449 | return -EINTR; | 458 | return -EINTR; |
450 | return 1; | 459 | return 1; |
@@ -484,10 +493,6 @@ static int (*kvm_vti_exit_handlers[])(struct kvm_vcpu *vcpu, | |||
484 | static const int kvm_vti_max_exit_handlers = | 493 | static const int kvm_vti_max_exit_handlers = |
485 | sizeof(kvm_vti_exit_handlers)/sizeof(*kvm_vti_exit_handlers); | 494 | sizeof(kvm_vti_exit_handlers)/sizeof(*kvm_vti_exit_handlers); |
486 | 495 | ||
487 | static void kvm_prepare_guest_switch(struct kvm_vcpu *vcpu) | ||
488 | { | ||
489 | } | ||
490 | |||
491 | static uint32_t kvm_get_exit_reason(struct kvm_vcpu *vcpu) | 496 | static uint32_t kvm_get_exit_reason(struct kvm_vcpu *vcpu) |
492 | { | 497 | { |
493 | struct exit_ctl_data *p_exit_data; | 498 | struct exit_ctl_data *p_exit_data; |
@@ -600,8 +605,6 @@ static int __vcpu_run(struct kvm_vcpu *vcpu, struct kvm_run *kvm_run) | |||
600 | 605 | ||
601 | again: | 606 | again: |
602 | preempt_disable(); | 607 | preempt_disable(); |
603 | |||
604 | kvm_prepare_guest_switch(vcpu); | ||
605 | local_irq_disable(); | 608 | local_irq_disable(); |
606 | 609 | ||
607 | if (signal_pending(current)) { | 610 | if (signal_pending(current)) { |
@@ -614,7 +617,7 @@ again: | |||
614 | 617 | ||
615 | vcpu->guest_mode = 1; | 618 | vcpu->guest_mode = 1; |
616 | kvm_guest_enter(); | 619 | kvm_guest_enter(); |
617 | 620 | down_read(&vcpu->kvm->slots_lock); | |
618 | r = vti_vcpu_run(vcpu, kvm_run); | 621 | r = vti_vcpu_run(vcpu, kvm_run); |
619 | if (r < 0) { | 622 | if (r < 0) { |
620 | local_irq_enable(); | 623 | local_irq_enable(); |
@@ -634,9 +637,8 @@ again: | |||
634 | * But we need to prevent reordering, hence this barrier(): | 637 | * But we need to prevent reordering, hence this barrier(): |
635 | */ | 638 | */ |
636 | barrier(); | 639 | barrier(); |
637 | |||
638 | kvm_guest_exit(); | 640 | kvm_guest_exit(); |
639 | 641 | up_read(&vcpu->kvm->slots_lock); | |
640 | preempt_enable(); | 642 | preempt_enable(); |
641 | 643 | ||
642 | r = kvm_handle_exit(kvm_run, vcpu); | 644 | r = kvm_handle_exit(kvm_run, vcpu); |
@@ -673,6 +675,7 @@ int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu, struct kvm_run *kvm_run) | |||
673 | 675 | ||
674 | if (unlikely(vcpu->arch.mp_state == KVM_MP_STATE_UNINITIALIZED)) { | 676 | if (unlikely(vcpu->arch.mp_state == KVM_MP_STATE_UNINITIALIZED)) { |
675 | kvm_vcpu_block(vcpu); | 677 | kvm_vcpu_block(vcpu); |
678 | clear_bit(KVM_REQ_UNHALT, &vcpu->requests); | ||
676 | vcpu_put(vcpu); | 679 | vcpu_put(vcpu); |
677 | return -EAGAIN; | 680 | return -EAGAIN; |
678 | } | 681 | } |
@@ -778,6 +781,9 @@ static void kvm_init_vm(struct kvm *kvm) | |||
778 | kvm_build_io_pmt(kvm); | 781 | kvm_build_io_pmt(kvm); |
779 | 782 | ||
780 | INIT_LIST_HEAD(&kvm->arch.assigned_dev_head); | 783 | INIT_LIST_HEAD(&kvm->arch.assigned_dev_head); |
784 | |||
785 | /* Reserve bit 0 of irq_sources_bitmap for userspace irq source */ | ||
786 | set_bit(KVM_USERSPACE_IRQ_SOURCE_ID, &kvm->arch.irq_sources_bitmap); | ||
781 | } | 787 | } |
782 | 788 | ||
783 | struct kvm *kvm_arch_create_vm(void) | 789 | struct kvm *kvm_arch_create_vm(void) |
@@ -941,9 +947,8 @@ long kvm_arch_vm_ioctl(struct file *filp, | |||
941 | goto out; | 947 | goto out; |
942 | if (irqchip_in_kernel(kvm)) { | 948 | if (irqchip_in_kernel(kvm)) { |
943 | mutex_lock(&kvm->lock); | 949 | mutex_lock(&kvm->lock); |
944 | kvm_ioapic_set_irq(kvm->arch.vioapic, | 950 | kvm_set_irq(kvm, KVM_USERSPACE_IRQ_SOURCE_ID, |
945 | irq_event.irq, | 951 | irq_event.irq, irq_event.level); |
946 | irq_event.level); | ||
947 | mutex_unlock(&kvm->lock); | 952 | mutex_unlock(&kvm->lock); |
948 | r = 0; | 953 | r = 0; |
949 | } | 954 | } |
@@ -1123,15 +1128,16 @@ static enum hrtimer_restart hlt_timer_fn(struct hrtimer *data) | |||
1123 | wait_queue_head_t *q; | 1128 | wait_queue_head_t *q; |
1124 | 1129 | ||
1125 | vcpu = container_of(data, struct kvm_vcpu, arch.hlt_timer); | 1130 | vcpu = container_of(data, struct kvm_vcpu, arch.hlt_timer); |
1131 | q = &vcpu->wq; | ||
1132 | |||
1126 | if (vcpu->arch.mp_state != KVM_MP_STATE_HALTED) | 1133 | if (vcpu->arch.mp_state != KVM_MP_STATE_HALTED) |
1127 | goto out; | 1134 | goto out; |
1128 | 1135 | ||
1129 | q = &vcpu->wq; | 1136 | if (waitqueue_active(q)) |
1130 | if (waitqueue_active(q)) { | ||
1131 | vcpu->arch.mp_state = KVM_MP_STATE_RUNNABLE; | ||
1132 | wake_up_interruptible(q); | 1137 | wake_up_interruptible(q); |
1133 | } | 1138 | |
1134 | out: | 1139 | out: |
1140 | vcpu->arch.timer_fired = 1; | ||
1135 | vcpu->arch.timer_check = 1; | 1141 | vcpu->arch.timer_check = 1; |
1136 | return HRTIMER_NORESTART; | 1142 | return HRTIMER_NORESTART; |
1137 | } | 1143 | } |
@@ -1700,12 +1706,14 @@ static void vcpu_kick_intr(void *info) | |||
1700 | void kvm_vcpu_kick(struct kvm_vcpu *vcpu) | 1706 | void kvm_vcpu_kick(struct kvm_vcpu *vcpu) |
1701 | { | 1707 | { |
1702 | int ipi_pcpu = vcpu->cpu; | 1708 | int ipi_pcpu = vcpu->cpu; |
1709 | int cpu = get_cpu(); | ||
1703 | 1710 | ||
1704 | if (waitqueue_active(&vcpu->wq)) | 1711 | if (waitqueue_active(&vcpu->wq)) |
1705 | wake_up_interruptible(&vcpu->wq); | 1712 | wake_up_interruptible(&vcpu->wq); |
1706 | 1713 | ||
1707 | if (vcpu->guest_mode) | 1714 | if (vcpu->guest_mode && cpu != ipi_pcpu) |
1708 | smp_call_function_single(ipi_pcpu, vcpu_kick_intr, vcpu, 0); | 1715 | smp_call_function_single(ipi_pcpu, vcpu_kick_intr, vcpu, 0); |
1716 | put_cpu(); | ||
1709 | } | 1717 | } |
1710 | 1718 | ||
1711 | int kvm_apic_set_irq(struct kvm_vcpu *vcpu, u8 vec, u8 trig) | 1719 | int kvm_apic_set_irq(struct kvm_vcpu *vcpu, u8 vec, u8 trig) |
@@ -1715,13 +1723,7 @@ int kvm_apic_set_irq(struct kvm_vcpu *vcpu, u8 vec, u8 trig) | |||
1715 | 1723 | ||
1716 | if (!test_and_set_bit(vec, &vpd->irr[0])) { | 1724 | if (!test_and_set_bit(vec, &vpd->irr[0])) { |
1717 | vcpu->arch.irq_new_pending = 1; | 1725 | vcpu->arch.irq_new_pending = 1; |
1718 | if (vcpu->arch.mp_state == KVM_MP_STATE_RUNNABLE) | 1726 | kvm_vcpu_kick(vcpu); |
1719 | kvm_vcpu_kick(vcpu); | ||
1720 | else if (vcpu->arch.mp_state == KVM_MP_STATE_HALTED) { | ||
1721 | vcpu->arch.mp_state = KVM_MP_STATE_RUNNABLE; | ||
1722 | if (waitqueue_active(&vcpu->wq)) | ||
1723 | wake_up_interruptible(&vcpu->wq); | ||
1724 | } | ||
1725 | return 1; | 1727 | return 1; |
1726 | } | 1728 | } |
1727 | return 0; | 1729 | return 0; |
@@ -1791,7 +1793,7 @@ int kvm_cpu_has_interrupt(struct kvm_vcpu *vcpu) | |||
1791 | 1793 | ||
1792 | int kvm_cpu_has_pending_timer(struct kvm_vcpu *vcpu) | 1794 | int kvm_cpu_has_pending_timer(struct kvm_vcpu *vcpu) |
1793 | { | 1795 | { |
1794 | return 0; | 1796 | return vcpu->arch.timer_fired; |
1795 | } | 1797 | } |
1796 | 1798 | ||
1797 | gfn_t unalias_gfn(struct kvm *kvm, gfn_t gfn) | 1799 | gfn_t unalias_gfn(struct kvm *kvm, gfn_t gfn) |
diff --git a/arch/ia64/kvm/kvm_fw.c b/arch/ia64/kvm/kvm_fw.c index 0c69d9ec92d4..cb7600bdff9d 100644 --- a/arch/ia64/kvm/kvm_fw.c +++ b/arch/ia64/kvm/kvm_fw.c | |||
@@ -286,6 +286,12 @@ static u64 kvm_get_pal_call_index(struct kvm_vcpu *vcpu) | |||
286 | return index; | 286 | return index; |
287 | } | 287 | } |
288 | 288 | ||
289 | static void prepare_for_halt(struct kvm_vcpu *vcpu) | ||
290 | { | ||
291 | vcpu->arch.timer_pending = 1; | ||
292 | vcpu->arch.timer_fired = 0; | ||
293 | } | ||
294 | |||
289 | int kvm_pal_emul(struct kvm_vcpu *vcpu, struct kvm_run *run) | 295 | int kvm_pal_emul(struct kvm_vcpu *vcpu, struct kvm_run *run) |
290 | { | 296 | { |
291 | 297 | ||
@@ -304,11 +310,10 @@ int kvm_pal_emul(struct kvm_vcpu *vcpu, struct kvm_run *run) | |||
304 | break; | 310 | break; |
305 | case PAL_HALT_LIGHT: | 311 | case PAL_HALT_LIGHT: |
306 | { | 312 | { |
307 | vcpu->arch.timer_pending = 1; | ||
308 | INIT_PAL_STATUS_SUCCESS(result); | 313 | INIT_PAL_STATUS_SUCCESS(result); |
314 | prepare_for_halt(vcpu); | ||
309 | if (kvm_highest_pending_irq(vcpu) == -1) | 315 | if (kvm_highest_pending_irq(vcpu) == -1) |
310 | ret = kvm_emulate_halt(vcpu); | 316 | ret = kvm_emulate_halt(vcpu); |
311 | |||
312 | } | 317 | } |
313 | break; | 318 | break; |
314 | 319 | ||
diff --git a/arch/ia64/kvm/process.c b/arch/ia64/kvm/process.c index 3417783ae164..800817307b7b 100644 --- a/arch/ia64/kvm/process.c +++ b/arch/ia64/kvm/process.c | |||
@@ -713,7 +713,7 @@ void leave_hypervisor_tail(void) | |||
713 | if (!(VCPU(v, itv) & (1 << 16))) { | 713 | if (!(VCPU(v, itv) & (1 << 16))) { |
714 | vcpu_pend_interrupt(v, VCPU(v, itv) | 714 | vcpu_pend_interrupt(v, VCPU(v, itv) |
715 | & 0xff); | 715 | & 0xff); |
716 | VMX(v, itc_check) = 0; | 716 | VMX(v, itc_check) = 0; |
717 | } else { | 717 | } else { |
718 | v->arch.timer_pending = 1; | 718 | v->arch.timer_pending = 1; |
719 | } | 719 | } |
diff --git a/arch/ia64/mm/discontig.c b/arch/ia64/mm/discontig.c index d8c5fcd89e5b..d85ba98d9008 100644 --- a/arch/ia64/mm/discontig.c +++ b/arch/ia64/mm/discontig.c | |||
@@ -635,7 +635,6 @@ static __init int count_node_pages(unsigned long start, unsigned long len, int n | |||
635 | (min(end, __pa(MAX_DMA_ADDRESS)) - start) >>PAGE_SHIFT; | 635 | (min(end, __pa(MAX_DMA_ADDRESS)) - start) >>PAGE_SHIFT; |
636 | #endif | 636 | #endif |
637 | start = GRANULEROUNDDOWN(start); | 637 | start = GRANULEROUNDDOWN(start); |
638 | start = ORDERROUNDDOWN(start); | ||
639 | end = GRANULEROUNDUP(end); | 638 | end = GRANULEROUNDUP(end); |
640 | mem_data[node].max_pfn = max(mem_data[node].max_pfn, | 639 | mem_data[node].max_pfn = max(mem_data[node].max_pfn, |
641 | end >> PAGE_SHIFT); | 640 | end >> PAGE_SHIFT); |
diff --git a/arch/ia64/uv/kernel/setup.c b/arch/ia64/uv/kernel/setup.c index cf5f28ae96c4..7a5ae633198b 100644 --- a/arch/ia64/uv/kernel/setup.c +++ b/arch/ia64/uv/kernel/setup.c | |||
@@ -19,6 +19,12 @@ EXPORT_PER_CPU_SYMBOL_GPL(__uv_hub_info); | |||
19 | 19 | ||
20 | #ifdef CONFIG_IA64_SGI_UV | 20 | #ifdef CONFIG_IA64_SGI_UV |
21 | int sn_prom_type; | 21 | int sn_prom_type; |
22 | long sn_partition_id; | ||
23 | EXPORT_SYMBOL(sn_partition_id); | ||
24 | long sn_coherency_id; | ||
25 | EXPORT_SYMBOL_GPL(sn_coherency_id); | ||
26 | long sn_region_size; | ||
27 | EXPORT_SYMBOL(sn_region_size); | ||
22 | #endif | 28 | #endif |
23 | 29 | ||
24 | struct redir_addr { | 30 | struct redir_addr { |