aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/ia64/Kconfig2
-rw-r--r--arch/ia64/configs/sn2_defconfig76
-rw-r--r--arch/ia64/ia32/binfmt_elf32.c3
-rw-r--r--arch/ia64/ia32/ia32_entry.S2
-rw-r--r--arch/ia64/kernel/mca_drv.c54
-rw-r--r--arch/ia64/kernel/topology.c7
-rw-r--r--arch/ia64/pci/pci.c3
-rw-r--r--arch/ia64/sn/kernel/sn2/sn_hwperf.c8
-rw-r--r--arch/ia64/sn/kernel/xpc_partition.c8
-rw-r--r--arch/ia64/sn/pci/tioce_provider.c6
-rw-r--r--drivers/Kconfig2
-rw-r--r--include/asm-ia64/acpi.h5
-rw-r--r--include/asm-ia64/machvec.h2
-rw-r--r--include/asm-ia64/sn/sn2/sn_hwperf.h6
-rw-r--r--include/asm-ia64/sn/sn_sal.h17
-rw-r--r--include/asm-ia64/thread_info.h2
-rw-r--r--include/asm-ia64/topology.h5
17 files changed, 128 insertions, 80 deletions
diff --git a/arch/ia64/Kconfig b/arch/ia64/Kconfig
index 9f40eeff0b5c..0f3076a820c3 100644
--- a/arch/ia64/Kconfig
+++ b/arch/ia64/Kconfig
@@ -413,6 +413,8 @@ config IA64_PALINFO
413config SGI_SN 413config SGI_SN
414 def_bool y if (IA64_SGI_SN2 || IA64_GENERIC) 414 def_bool y if (IA64_SGI_SN2 || IA64_GENERIC)
415 415
416source "drivers/sn/Kconfig"
417
416source "drivers/firmware/Kconfig" 418source "drivers/firmware/Kconfig"
417 419
418source "fs/Kconfig.binfmt" 420source "fs/Kconfig.binfmt"
diff --git a/arch/ia64/configs/sn2_defconfig b/arch/ia64/configs/sn2_defconfig
index a718034d68d0..f6a8853cd1b4 100644
--- a/arch/ia64/configs/sn2_defconfig
+++ b/arch/ia64/configs/sn2_defconfig
@@ -1,7 +1,7 @@
1# 1#
2# Automatically generated make config: don't edit 2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.16-rc5 3# Linux kernel version: 2.6.17-rc3
4# Mon Feb 27 16:06:38 2006 4# Thu Apr 27 11:48:23 2006
5# 5#
6 6
7# 7#
@@ -24,6 +24,7 @@ CONFIG_SYSCTL=y
24# CONFIG_AUDIT is not set 24# CONFIG_AUDIT is not set
25# CONFIG_IKCONFIG is not set 25# CONFIG_IKCONFIG is not set
26CONFIG_CPUSETS=y 26CONFIG_CPUSETS=y
27CONFIG_RELAY=y
27CONFIG_INITRAMFS_SOURCE="" 28CONFIG_INITRAMFS_SOURCE=""
28CONFIG_CC_OPTIMIZE_FOR_SIZE=y 29CONFIG_CC_OPTIMIZE_FOR_SIZE=y
29# CONFIG_EMBEDDED is not set 30# CONFIG_EMBEDDED is not set
@@ -38,10 +39,6 @@ CONFIG_BASE_FULL=y
38CONFIG_FUTEX=y 39CONFIG_FUTEX=y
39CONFIG_EPOLL=y 40CONFIG_EPOLL=y
40CONFIG_SHMEM=y 41CONFIG_SHMEM=y
41CONFIG_CC_ALIGN_FUNCTIONS=0
42CONFIG_CC_ALIGN_LABELS=0
43CONFIG_CC_ALIGN_LOOPS=0
44CONFIG_CC_ALIGN_JUMPS=0
45CONFIG_SLAB=y 42CONFIG_SLAB=y
46# CONFIG_TINY_SHMEM is not set 43# CONFIG_TINY_SHMEM is not set
47CONFIG_BASE_SMALL=0 44CONFIG_BASE_SMALL=0
@@ -53,7 +50,6 @@ CONFIG_BASE_SMALL=0
53CONFIG_MODULES=y 50CONFIG_MODULES=y
54CONFIG_MODULE_UNLOAD=y 51CONFIG_MODULE_UNLOAD=y
55# CONFIG_MODULE_FORCE_UNLOAD is not set 52# CONFIG_MODULE_FORCE_UNLOAD is not set
56CONFIG_OBSOLETE_MODPARM=y
57# CONFIG_MODVERSIONS is not set 53# CONFIG_MODVERSIONS is not set
58# CONFIG_MODULE_SRCVERSION_ALL is not set 54# CONFIG_MODULE_SRCVERSION_ALL is not set
59CONFIG_KMOD=y 55CONFIG_KMOD=y
@@ -62,6 +58,7 @@ CONFIG_STOP_MACHINE=y
62# 58#
63# Block layer 59# Block layer
64# 60#
61# CONFIG_BLK_DEV_IO_TRACE is not set
65 62
66# 63#
67# IO Schedulers 64# IO Schedulers
@@ -84,8 +81,10 @@ CONFIG_64BIT=y
84CONFIG_MMU=y 81CONFIG_MMU=y
85CONFIG_SWIOTLB=y 82CONFIG_SWIOTLB=y
86CONFIG_RWSEM_XCHGADD_ALGORITHM=y 83CONFIG_RWSEM_XCHGADD_ALGORITHM=y
84CONFIG_GENERIC_FIND_NEXT_BIT=y
87CONFIG_GENERIC_CALIBRATE_DELAY=y 85CONFIG_GENERIC_CALIBRATE_DELAY=y
88CONFIG_TIME_INTERPOLATION=y 86CONFIG_TIME_INTERPOLATION=y
87CONFIG_DMI=y
89CONFIG_EFI=y 88CONFIG_EFI=y
90CONFIG_GENERIC_IOMAP=y 89CONFIG_GENERIC_IOMAP=y
91CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y 90CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
@@ -116,7 +115,6 @@ CONFIG_IA64_SGI_SN_XP=m
116CONFIG_FORCE_MAX_ZONEORDER=17 115CONFIG_FORCE_MAX_ZONEORDER=17
117CONFIG_SMP=y 116CONFIG_SMP=y
118CONFIG_NR_CPUS=1024 117CONFIG_NR_CPUS=1024
119CONFIG_IA64_NR_NODES=256
120# CONFIG_HOTPLUG_CPU is not set 118# CONFIG_HOTPLUG_CPU is not set
121CONFIG_SCHED_SMT=y 119CONFIG_SCHED_SMT=y
122CONFIG_PREEMPT=y 120CONFIG_PREEMPT=y
@@ -136,6 +134,7 @@ CONFIG_ARCH_FLATMEM_ENABLE=y
136CONFIG_ARCH_SPARSEMEM_ENABLE=y 134CONFIG_ARCH_SPARSEMEM_ENABLE=y
137CONFIG_ARCH_DISCONTIGMEM_DEFAULT=y 135CONFIG_ARCH_DISCONTIGMEM_DEFAULT=y
138CONFIG_NUMA=y 136CONFIG_NUMA=y
137CONFIG_NODES_SHIFT=8
139CONFIG_VIRTUAL_MEM_MAP=y 138CONFIG_VIRTUAL_MEM_MAP=y
140CONFIG_HOLES_IN_ZONE=y 139CONFIG_HOLES_IN_ZONE=y
141CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID=y 140CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID=y
@@ -187,7 +186,6 @@ CONFIG_ACPI_SYSTEM=y
187CONFIG_PCI=y 186CONFIG_PCI=y
188CONFIG_PCI_DOMAINS=y 187CONFIG_PCI_DOMAINS=y
189# CONFIG_PCI_MSI is not set 188# CONFIG_PCI_MSI is not set
190CONFIG_PCI_LEGACY_PROC=y
191# CONFIG_PCI_DEBUG is not set 189# CONFIG_PCI_DEBUG is not set
192 190
193# 191#
@@ -231,6 +229,7 @@ CONFIG_SYN_COOKIES=y
231# CONFIG_INET_AH is not set 229# CONFIG_INET_AH is not set
232# CONFIG_INET_ESP is not set 230# CONFIG_INET_ESP is not set
233# CONFIG_INET_IPCOMP is not set 231# CONFIG_INET_IPCOMP is not set
232# CONFIG_INET_XFRM_TUNNEL is not set
234# CONFIG_INET_TUNNEL is not set 233# CONFIG_INET_TUNNEL is not set
235CONFIG_INET_DIAG=m 234CONFIG_INET_DIAG=m
236CONFIG_INET_TCP_DIAG=m 235CONFIG_INET_TCP_DIAG=m
@@ -238,9 +237,11 @@ CONFIG_INET_TCP_DIAG=m
238CONFIG_TCP_CONG_BIC=y 237CONFIG_TCP_CONG_BIC=y
239CONFIG_IPV6=m 238CONFIG_IPV6=m
240# CONFIG_IPV6_PRIVACY is not set 239# CONFIG_IPV6_PRIVACY is not set
240# CONFIG_IPV6_ROUTER_PREF is not set
241# CONFIG_INET6_AH is not set 241# CONFIG_INET6_AH is not set
242# CONFIG_INET6_ESP is not set 242# CONFIG_INET6_ESP is not set
243# CONFIG_INET6_IPCOMP is not set 243# CONFIG_INET6_IPCOMP is not set
244# CONFIG_INET6_XFRM_TUNNEL is not set
244# CONFIG_INET6_TUNNEL is not set 245# CONFIG_INET6_TUNNEL is not set
245# CONFIG_IPV6_TUNNEL is not set 246# CONFIG_IPV6_TUNNEL is not set
246# CONFIG_NETFILTER is not set 247# CONFIG_NETFILTER is not set
@@ -468,9 +469,14 @@ CONFIG_SCSI_SATA_VITESSE=y
468# CONFIG_SCSI_INIA100 is not set 469# CONFIG_SCSI_INIA100 is not set
469# CONFIG_SCSI_SYM53C8XX_2 is not set 470# CONFIG_SCSI_SYM53C8XX_2 is not set
470# CONFIG_SCSI_IPR is not set 471# CONFIG_SCSI_IPR is not set
471# CONFIG_SCSI_QLOGIC_FC is not set
472CONFIG_SCSI_QLOGIC_1280=y 472CONFIG_SCSI_QLOGIC_1280=y
473# CONFIG_SCSI_QLA_FC is not set 473CONFIG_SCSI_QLA_FC=y
474CONFIG_SCSI_QLA2XXX_EMBEDDED_FIRMWARE=y
475# CONFIG_SCSI_QLA21XX is not set
476CONFIG_SCSI_QLA22XX=y
477CONFIG_SCSI_QLA2300=y
478CONFIG_SCSI_QLA2322=y
479# CONFIG_SCSI_QLA24XX is not set
474# CONFIG_SCSI_LPFC is not set 480# CONFIG_SCSI_LPFC is not set
475# CONFIG_SCSI_DC395x is not set 481# CONFIG_SCSI_DC395x is not set
476# CONFIG_SCSI_DC390T is not set 482# CONFIG_SCSI_DC390T is not set
@@ -486,6 +492,7 @@ CONFIG_MD_RAID0=y
486CONFIG_MD_RAID1=y 492CONFIG_MD_RAID1=y
487# CONFIG_MD_RAID10 is not set 493# CONFIG_MD_RAID10 is not set
488CONFIG_MD_RAID5=y 494CONFIG_MD_RAID5=y
495# CONFIG_MD_RAID5_RESHAPE is not set
489# CONFIG_MD_RAID6 is not set 496# CONFIG_MD_RAID6 is not set
490CONFIG_MD_MULTIPATH=y 497CONFIG_MD_MULTIPATH=y
491# CONFIG_MD_FAULTY is not set 498# CONFIG_MD_FAULTY is not set
@@ -694,6 +701,7 @@ CONFIG_EFI_RTC=y
694# Ftape, the floppy tape device driver 701# Ftape, the floppy tape device driver
695# 702#
696CONFIG_AGP=y 703CONFIG_AGP=y
704# CONFIG_AGP_VIA is not set
697CONFIG_AGP_SGI_TIOCA=y 705CONFIG_AGP_SGI_TIOCA=y
698# CONFIG_DRM is not set 706# CONFIG_DRM is not set
699CONFIG_RAW_DRIVER=m 707CONFIG_RAW_DRIVER=m
@@ -735,10 +743,6 @@ CONFIG_MMTIMER=y
735# 743#
736 744
737# 745#
738# Multimedia Capabilities Port drivers
739#
740
741#
742# Multimedia devices 746# Multimedia devices
743# 747#
744# CONFIG_VIDEO_DEV is not set 748# CONFIG_VIDEO_DEV is not set
@@ -747,6 +751,7 @@ CONFIG_MMTIMER=y
747# Digital Video Broadcasting Devices 751# Digital Video Broadcasting Devices
748# 752#
749# CONFIG_DVB is not set 753# CONFIG_DVB is not set
754# CONFIG_USB_DABUSB is not set
750 755
751# 756#
752# Graphics support 757# Graphics support
@@ -757,6 +762,7 @@ CONFIG_MMTIMER=y
757# Console display driver support 762# Console display driver support
758# 763#
759CONFIG_VGA_CONSOLE=y 764CONFIG_VGA_CONSOLE=y
765# CONFIG_VGACON_SOFT_SCROLLBACK is not set
760CONFIG_DUMMY_CONSOLE=y 766CONFIG_DUMMY_CONSOLE=y
761 767
762# 768#
@@ -769,6 +775,7 @@ CONFIG_DUMMY_CONSOLE=y
769# 775#
770CONFIG_USB_ARCH_HAS_HCD=y 776CONFIG_USB_ARCH_HAS_HCD=y
771CONFIG_USB_ARCH_HAS_OHCI=y 777CONFIG_USB_ARCH_HAS_OHCI=y
778CONFIG_USB_ARCH_HAS_EHCI=y
772CONFIG_USB=m 779CONFIG_USB=m
773# CONFIG_USB_DEBUG is not set 780# CONFIG_USB_DEBUG is not set
774 781
@@ -829,9 +836,7 @@ CONFIG_USB_HIDINPUT=y
829# CONFIG_USB_ACECAD is not set 836# CONFIG_USB_ACECAD is not set
830# CONFIG_USB_KBTAB is not set 837# CONFIG_USB_KBTAB is not set
831# CONFIG_USB_POWERMATE is not set 838# CONFIG_USB_POWERMATE is not set
832# CONFIG_USB_MTOUCH is not set 839# CONFIG_USB_TOUCHSCREEN is not set
833# CONFIG_USB_ITMTOUCH is not set
834# CONFIG_USB_EGALAX is not set
835# CONFIG_USB_YEALINK is not set 840# CONFIG_USB_YEALINK is not set
836# CONFIG_USB_XPAD is not set 841# CONFIG_USB_XPAD is not set
837# CONFIG_USB_ATI_REMOTE is not set 842# CONFIG_USB_ATI_REMOTE is not set
@@ -846,15 +851,6 @@ CONFIG_USB_HIDINPUT=y
846# CONFIG_USB_MICROTEK is not set 851# CONFIG_USB_MICROTEK is not set
847 852
848# 853#
849# USB Multimedia devices
850#
851# CONFIG_USB_DABUSB is not set
852
853#
854# Video4Linux support is needed for USB Multimedia device support
855#
856
857#
858# USB Network Adapters 854# USB Network Adapters
859# 855#
860# CONFIG_USB_CATC is not set 856# CONFIG_USB_CATC is not set
@@ -905,15 +901,29 @@ CONFIG_USB_MON=y
905# CONFIG_MMC is not set 901# CONFIG_MMC is not set
906 902
907# 903#
904# LED devices
905#
906# CONFIG_NEW_LEDS is not set
907
908#
909# LED drivers
910#
911
912#
913# LED Triggers
914#
915
916#
908# InfiniBand support 917# InfiniBand support
909# 918#
910CONFIG_INFINIBAND=m 919CONFIG_INFINIBAND=m
911# CONFIG_INFINIBAND_USER_MAD is not set 920# CONFIG_INFINIBAND_USER_MAD is not set
912CONFIG_INFINIBAND_USER_ACCESS=m 921CONFIG_INFINIBAND_USER_ACCESS=m
913CONFIG_INFINIBAND_MTHCA=m 922CONFIG_INFINIBAND_MTHCA=m
914# CONFIG_INFINIBAND_MTHCA_DEBUG is not set 923CONFIG_INFINIBAND_MTHCA_DEBUG=y
915CONFIG_INFINIBAND_IPOIB=m 924CONFIG_INFINIBAND_IPOIB=m
916# CONFIG_INFINIBAND_IPOIB_DEBUG is not set 925CONFIG_INFINIBAND_IPOIB_DEBUG=y
926# CONFIG_INFINIBAND_IPOIB_DEBUG_DATA is not set
917CONFIG_INFINIBAND_SRP=m 927CONFIG_INFINIBAND_SRP=m
918 928
919# 929#
@@ -923,8 +933,13 @@ CONFIG_SGI_IOC4=y
923CONFIG_SGI_IOC3=y 933CONFIG_SGI_IOC3=y
924 934
925# 935#
926# EDAC - error detection and reporting (RAS) 936# EDAC - error detection and reporting (RAS) (EXPERIMENTAL)
937#
938
939#
940# Real Time Clock
927# 941#
942# CONFIG_RTC_CLASS is not set
928 943
929# 944#
930# File systems 945# File systems
@@ -997,7 +1012,6 @@ CONFIG_TMPFS=y
997CONFIG_HUGETLBFS=y 1012CONFIG_HUGETLBFS=y
998CONFIG_HUGETLB_PAGE=y 1013CONFIG_HUGETLB_PAGE=y
999CONFIG_RAMFS=y 1014CONFIG_RAMFS=y
1000CONFIG_RELAYFS_FS=m
1001# CONFIG_CONFIGFS_FS is not set 1015# CONFIG_CONFIGFS_FS is not set
1002 1016
1003# 1017#
diff --git a/arch/ia64/ia32/binfmt_elf32.c b/arch/ia64/ia32/binfmt_elf32.c
index 4e7a6a1ec6c7..da03c06744f1 100644
--- a/arch/ia64/ia32/binfmt_elf32.c
+++ b/arch/ia64/ia32/binfmt_elf32.c
@@ -35,6 +35,9 @@ extern void ia64_elf32_init (struct pt_regs *regs);
35 35
36static void elf32_set_personality (void); 36static void elf32_set_personality (void);
37 37
38static unsigned long __attribute ((unused))
39randomize_stack_top(unsigned long stack_top);
40
38#define setup_arg_pages(bprm,tos,exec) ia32_setup_arg_pages(bprm,exec) 41#define setup_arg_pages(bprm,tos,exec) ia32_setup_arg_pages(bprm,exec)
39#define elf_map elf32_map 42#define elf_map elf32_map
40 43
diff --git a/arch/ia64/ia32/ia32_entry.S b/arch/ia64/ia32/ia32_entry.S
index 95fe04400f6b..a32cd59b81ed 100644
--- a/arch/ia64/ia32/ia32_entry.S
+++ b/arch/ia64/ia32/ia32_entry.S
@@ -334,7 +334,7 @@ ia32_syscall_table:
334 data8 sys_setdomainname 334 data8 sys_setdomainname
335 data8 sys32_newuname 335 data8 sys32_newuname
336 data8 sys32_modify_ldt 336 data8 sys32_modify_ldt
337 data8 sys_ni_syscall /* adjtimex */ 337 data8 compat_sys_adjtimex
338 data8 sys32_mprotect /* 125 */ 338 data8 sys32_mprotect /* 125 */
339 data8 compat_sys_sigprocmask 339 data8 compat_sys_sigprocmask
340 data8 sys_ni_syscall /* create_module */ 340 data8 sys_ni_syscall /* create_module */
diff --git a/arch/ia64/kernel/mca_drv.c b/arch/ia64/kernel/mca_drv.c
index 37c88eb55873..ca6666b51ccb 100644
--- a/arch/ia64/kernel/mca_drv.c
+++ b/arch/ia64/kernel/mca_drv.c
@@ -62,6 +62,11 @@ typedef enum {
62 ISOLATE_NONE 62 ISOLATE_NONE
63} isolate_status_t; 63} isolate_status_t;
64 64
65typedef enum {
66 MCA_NOT_RECOVERED = 0,
67 MCA_RECOVERED = 1
68} recovery_status_t;
69
65/* 70/*
66 * This pool keeps pointers to the section part of SAL error record 71 * This pool keeps pointers to the section part of SAL error record
67 */ 72 */
@@ -71,6 +76,18 @@ static struct {
71 int max_idx; /* Maximum index of section pointer list pool */ 76 int max_idx; /* Maximum index of section pointer list pool */
72} slidx_pool; 77} slidx_pool;
73 78
79static int
80fatal_mca(const char *fmt, ...)
81{
82 va_list args;
83
84 va_start(args, fmt);
85 vprintk(fmt, args);
86 va_end(args);
87
88 return MCA_NOT_RECOVERED;
89}
90
74/** 91/**
75 * mca_page_isolate - isolate a poisoned page in order not to use it later 92 * mca_page_isolate - isolate a poisoned page in order not to use it later
76 * @paddr: poisoned memory location 93 * @paddr: poisoned memory location
@@ -424,7 +441,7 @@ recover_from_read_error(slidx_table_t *slidx,
424 441
425 /* Is target address valid? */ 442 /* Is target address valid? */
426 if (!pbci->tv) 443 if (!pbci->tv)
427 return 0; 444 return fatal_mca(KERN_ALERT "MCA: target address not valid\n");
428 445
429 /* 446 /*
430 * cpu read or memory-mapped io read 447 * cpu read or memory-mapped io read
@@ -442,7 +459,7 @@ recover_from_read_error(slidx_table_t *slidx,
442 459
443 /* Is minstate valid? */ 460 /* Is minstate valid? */
444 if (!peidx_bottom(peidx) || !(peidx_bottom(peidx)->valid.minstate)) 461 if (!peidx_bottom(peidx) || !(peidx_bottom(peidx)->valid.minstate))
445 return 0; 462 return fatal_mca(KERN_ALERT "MCA: minstate not valid\n");
446 psr1 =(struct ia64_psr *)&(peidx_minstate_area(peidx)->pmsa_ipsr); 463 psr1 =(struct ia64_psr *)&(peidx_minstate_area(peidx)->pmsa_ipsr);
447 psr2 =(struct ia64_psr *)&(peidx_minstate_area(peidx)->pmsa_xpsr); 464 psr2 =(struct ia64_psr *)&(peidx_minstate_area(peidx)->pmsa_xpsr);
448 465
@@ -476,12 +493,13 @@ recover_from_read_error(slidx_table_t *slidx,
476 psr2->bn = 1; 493 psr2->bn = 1;
477 psr2->i = 0; 494 psr2->i = 0;
478 495
479 return 1; 496 return MCA_RECOVERED;
480 } 497 }
481 498
482 } 499 }
483 500
484 return 0; 501 return fatal_mca(KERN_ALERT "MCA: kernel context not recovered,"
502 " iip 0x%lx\n", pmsa->pmsa_iip);
485} 503}
486 504
487/** 505/**
@@ -567,13 +585,13 @@ recover_from_processor_error(int platform, slidx_table_t *slidx,
567 * The machine check is corrected. 585 * The machine check is corrected.
568 */ 586 */
569 if (psp->cm == 1) 587 if (psp->cm == 1)
570 return 1; 588 return MCA_RECOVERED;
571 589
572 /* 590 /*
573 * The error was not contained. Software must be reset. 591 * The error was not contained. Software must be reset.
574 */ 592 */
575 if (psp->us || psp->ci == 0) 593 if (psp->us || psp->ci == 0)
576 return 0; 594 return fatal_mca(KERN_ALERT "MCA: error not contained\n");
577 595
578 /* 596 /*
579 * The cache check and bus check bits have four possible states 597 * The cache check and bus check bits have four possible states
@@ -584,20 +602,22 @@ recover_from_processor_error(int platform, slidx_table_t *slidx,
584 * 1 1 Memory error, attempt recovery 602 * 1 1 Memory error, attempt recovery
585 */ 603 */
586 if (psp->bc == 0 || pbci == NULL) 604 if (psp->bc == 0 || pbci == NULL)
587 return 0; 605 return fatal_mca(KERN_ALERT "MCA: No bus check\n");
588 606
589 /* 607 /*
590 * Sorry, we cannot handle so many. 608 * Sorry, we cannot handle so many.
591 */ 609 */
592 if (peidx_bus_check_num(peidx) > 1) 610 if (peidx_bus_check_num(peidx) > 1)
593 return 0; 611 return fatal_mca(KERN_ALERT "MCA: Too many bus checks\n");
594 /* 612 /*
595 * Well, here is only one bus error. 613 * Well, here is only one bus error.
596 */ 614 */
597 if (pbci->ib || pbci->cc) 615 if (pbci->ib)
598 return 0; 616 return fatal_mca(KERN_ALERT "MCA: Internal Bus error\n");
617 if (pbci->cc)
618 return fatal_mca(KERN_ALERT "MCA: Cache-cache error\n");
599 if (pbci->eb && pbci->bsi > 0) 619 if (pbci->eb && pbci->bsi > 0)
600 return 0; 620 return fatal_mca(KERN_ALERT "MCA: External bus check fatal status\n");
601 621
602 /* 622 /*
603 * This is a local MCA and estimated as recoverble external bus error. 623 * This is a local MCA and estimated as recoverble external bus error.
@@ -609,7 +629,7 @@ recover_from_processor_error(int platform, slidx_table_t *slidx,
609 /* 629 /*
610 * On account of strange SAL error record, we cannot recover. 630 * On account of strange SAL error record, we cannot recover.
611 */ 631 */
612 return 0; 632 return fatal_mca(KERN_ALERT "MCA: Strange SAL record\n");
613} 633}
614 634
615/** 635/**
@@ -638,12 +658,10 @@ mca_try_to_recover(void *rec, struct ia64_sal_os_state *sos)
638 658
639 /* Now, OS can recover when there is one processor error section */ 659 /* Now, OS can recover when there is one processor error section */
640 if (n_proc_err > 1) 660 if (n_proc_err > 1)
641 return 0; 661 return fatal_mca(KERN_ALERT "MCA: Too Many Errors\n");
642 else if (n_proc_err == 0) { 662 else if (n_proc_err == 0)
643 /* Weird SAL record ... We need not to recover */ 663 /* Weird SAL record ... We need not to recover */
644 664 return fatal_mca(KERN_ALERT "MCA: Weird SAL record\n");
645 return 1;
646 }
647 665
648 /* Make index of processor error section */ 666 /* Make index of processor error section */
649 mca_make_peidx((sal_log_processor_info_t*) 667 mca_make_peidx((sal_log_processor_info_t*)
@@ -654,7 +672,7 @@ mca_try_to_recover(void *rec, struct ia64_sal_os_state *sos)
654 672
655 /* Check whether MCA is global or not */ 673 /* Check whether MCA is global or not */
656 if (is_mca_global(&peidx, &pbci, sos)) 674 if (is_mca_global(&peidx, &pbci, sos))
657 return 0; 675 return fatal_mca(KERN_ALERT "MCA: global MCA\n");
658 676
659 /* Try to recover a processor error */ 677 /* Try to recover a processor error */
660 return recover_from_processor_error(platform_err, &slidx, &peidx, 678 return recover_from_processor_error(platform_err, &slidx, &peidx,
diff --git a/arch/ia64/kernel/topology.c b/arch/ia64/kernel/topology.c
index 7da4739f536e..4f3a16b37f8f 100644
--- a/arch/ia64/kernel/topology.c
+++ b/arch/ia64/kernel/topology.c
@@ -305,13 +305,10 @@ static struct kobj_type cache_ktype_percpu_entry = {
305 305
306static void __cpuinit cpu_cache_sysfs_exit(unsigned int cpu) 306static void __cpuinit cpu_cache_sysfs_exit(unsigned int cpu)
307{ 307{
308 if (all_cpu_cache_info[cpu].cache_leaves) { 308 kfree(all_cpu_cache_info[cpu].cache_leaves);
309 kfree(all_cpu_cache_info[cpu].cache_leaves); 309 all_cpu_cache_info[cpu].cache_leaves = NULL;
310 all_cpu_cache_info[cpu].cache_leaves = NULL;
311 }
312 all_cpu_cache_info[cpu].num_cache_leaves = 0; 310 all_cpu_cache_info[cpu].num_cache_leaves = 0;
313 memset(&all_cpu_cache_info[cpu].kobj, 0, sizeof(struct kobject)); 311 memset(&all_cpu_cache_info[cpu].kobj, 0, sizeof(struct kobject));
314
315 return; 312 return;
316} 313}
317 314
diff --git a/arch/ia64/pci/pci.c b/arch/ia64/pci/pci.c
index 9ba32b2d96d0..ab829a22f8a4 100644
--- a/arch/ia64/pci/pci.c
+++ b/arch/ia64/pci/pci.c
@@ -31,7 +31,6 @@
31#include <asm/irq.h> 31#include <asm/irq.h>
32#include <asm/hw_irq.h> 32#include <asm/hw_irq.h>
33 33
34
35/* 34/*
36 * Low-level SAL-based PCI configuration access functions. Note that SAL 35 * Low-level SAL-based PCI configuration access functions. Note that SAL
37 * calls are already serialized (via sal_lock), so we don't need another 36 * calls are already serialized (via sal_lock), so we don't need another
@@ -707,7 +706,7 @@ int ia64_pci_legacy_read(struct pci_bus *bus, u16 port, u32 *val, u8 size)
707 * 706 *
708 * Simply writes @size bytes of @val to @port. 707 * Simply writes @size bytes of @val to @port.
709 */ 708 */
710int ia64_pci_legacy_write(struct pci_dev *bus, u16 port, u32 val, u8 size) 709int ia64_pci_legacy_write(struct pci_bus *bus, u16 port, u32 val, u8 size)
711{ 710{
712 int ret = size; 711 int ret = size;
713 712
diff --git a/arch/ia64/sn/kernel/sn2/sn_hwperf.c b/arch/ia64/sn/kernel/sn2/sn_hwperf.c
index d917afa30b27..739c948dc504 100644
--- a/arch/ia64/sn/kernel/sn2/sn_hwperf.c
+++ b/arch/ia64/sn/kernel/sn2/sn_hwperf.c
@@ -284,6 +284,8 @@ static int sn_hwperf_get_nearest_node_objdata(struct sn_hwperf_object_info *objb
284 /* find nearest node with cpus and nearest memory */ 284 /* find nearest node with cpus and nearest memory */
285 for (router=NULL, j=0; j < op->ports; j++) { 285 for (router=NULL, j=0; j < op->ports; j++) {
286 dest = sn_hwperf_findobj_id(objbuf, nobj, ptdata[j].conn_id); 286 dest = sn_hwperf_findobj_id(objbuf, nobj, ptdata[j].conn_id);
287 if (dest && SN_HWPERF_IS_ROUTER(dest))
288 router = dest;
287 if (!dest || SN_HWPERF_FOREIGN(dest) || 289 if (!dest || SN_HWPERF_FOREIGN(dest) ||
288 !SN_HWPERF_IS_NODE(dest) || SN_HWPERF_IS_IONODE(dest)) { 290 !SN_HWPERF_IS_NODE(dest) || SN_HWPERF_IS_IONODE(dest)) {
289 continue; 291 continue;
@@ -299,8 +301,6 @@ static int sn_hwperf_get_nearest_node_objdata(struct sn_hwperf_object_info *objb
299 *near_mem_node = c; 301 *near_mem_node = c;
300 found_mem++; 302 found_mem++;
301 } 303 }
302 if (SN_HWPERF_IS_ROUTER(dest))
303 router = dest;
304 } 304 }
305 305
306 if (router && (!found_cpu || !found_mem)) { 306 if (router && (!found_cpu || !found_mem)) {
@@ -493,7 +493,7 @@ static int sn_topology_show(struct seq_file *s, void *d)
493 * numalink ports 493 * numalink ports
494 */ 494 */
495 sz = obj->ports * sizeof(struct sn_hwperf_port_info); 495 sz = obj->ports * sizeof(struct sn_hwperf_port_info);
496 if ((ptdata = vmalloc(sz)) == NULL) 496 if ((ptdata = kmalloc(sz, GFP_KERNEL)) == NULL)
497 return -ENOMEM; 497 return -ENOMEM;
498 e = ia64_sn_hwperf_op(sn_hwperf_master_nasid, 498 e = ia64_sn_hwperf_op(sn_hwperf_master_nasid,
499 SN_HWPERF_ENUM_PORTS, obj->id, sz, 499 SN_HWPERF_ENUM_PORTS, obj->id, sz,
@@ -541,7 +541,7 @@ static int sn_topology_show(struct seq_file *s, void *d)
541 (SN_HWPERF_IS_NL3ROUTER(obj) || 541 (SN_HWPERF_IS_NL3ROUTER(obj) ||
542 SN_HWPERF_IS_NL3ROUTER(p)) ? "LLP3" : "LLP4"); 542 SN_HWPERF_IS_NL3ROUTER(p)) ? "LLP3" : "LLP4");
543 } 543 }
544 vfree(ptdata); 544 kfree(ptdata);
545 } 545 }
546 546
547 return 0; 547 return 0;
diff --git a/arch/ia64/sn/kernel/xpc_partition.c b/arch/ia64/sn/kernel/xpc_partition.c
index 94211429fd0c..2a89cfce4954 100644
--- a/arch/ia64/sn/kernel/xpc_partition.c
+++ b/arch/ia64/sn/kernel/xpc_partition.c
@@ -136,9 +136,7 @@ xpc_get_rsvd_page_pa(int nasid)
136 } 136 }
137 137
138 if (L1_CACHE_ALIGN(len) > buf_len) { 138 if (L1_CACHE_ALIGN(len) > buf_len) {
139 if (buf_base != NULL) { 139 kfree(buf_base);
140 kfree(buf_base);
141 }
142 buf_len = L1_CACHE_ALIGN(len); 140 buf_len = L1_CACHE_ALIGN(len);
143 buf = (u64) xpc_kmalloc_cacheline_aligned(buf_len, 141 buf = (u64) xpc_kmalloc_cacheline_aligned(buf_len,
144 GFP_KERNEL, &buf_base); 142 GFP_KERNEL, &buf_base);
@@ -159,9 +157,7 @@ xpc_get_rsvd_page_pa(int nasid)
159 } 157 }
160 } 158 }
161 159
162 if (buf_base != NULL) { 160 kfree(buf_base);
163 kfree(buf_base);
164 }
165 161
166 if (status != SALRET_OK) { 162 if (status != SALRET_OK) {
167 rp_pa = 0; 163 rp_pa = 0;
diff --git a/arch/ia64/sn/pci/tioce_provider.c b/arch/ia64/sn/pci/tioce_provider.c
index fa073cc4b565..833295624e5d 100644
--- a/arch/ia64/sn/pci/tioce_provider.c
+++ b/arch/ia64/sn/pci/tioce_provider.c
@@ -682,9 +682,6 @@ tioce_reserve_m32(struct tioce_kernel *ce_kern, u64 base, u64 limit)
682 int ate_index, last_ate, ps; 682 int ate_index, last_ate, ps;
683 struct tioce *ce_mmr; 683 struct tioce *ce_mmr;
684 684
685 if (!TIOCE_M32_ADDR(base))
686 return;
687
688 ce_mmr = (struct tioce *)ce_kern->ce_common->ce_pcibus.bs_base; 685 ce_mmr = (struct tioce *)ce_kern->ce_common->ce_pcibus.bs_base;
689 ps = ce_kern->ce_ate3240_pagesize; 686 ps = ce_kern->ce_ate3240_pagesize;
690 ate_index = ATE_PAGE(base, ps); 687 ate_index = ATE_PAGE(base, ps);
@@ -693,6 +690,9 @@ tioce_reserve_m32(struct tioce_kernel *ce_kern, u64 base, u64 limit)
693 if (ate_index < 64) 690 if (ate_index < 64)
694 ate_index = 64; 691 ate_index = 64;
695 692
693 if (last_ate >= TIOCE_NUM_M3240_ATES)
694 last_ate = TIOCE_NUM_M3240_ATES - 1;
695
696 while (ate_index <= last_ate) { 696 while (ate_index <= last_ate) {
697 u64 ate; 697 u64 ate;
698 698
diff --git a/drivers/Kconfig b/drivers/Kconfig
index 5c91d6afb117..aeb5ab2391e4 100644
--- a/drivers/Kconfig
+++ b/drivers/Kconfig
@@ -68,8 +68,6 @@ source "drivers/leds/Kconfig"
68 68
69source "drivers/infiniband/Kconfig" 69source "drivers/infiniband/Kconfig"
70 70
71source "drivers/sn/Kconfig"
72
73source "drivers/edac/Kconfig" 71source "drivers/edac/Kconfig"
74 72
75source "drivers/rtc/Kconfig" 73source "drivers/rtc/Kconfig"
diff --git a/include/asm-ia64/acpi.h b/include/asm-ia64/acpi.h
index d734585a23cf..09a5dd0e44a8 100644
--- a/include/asm-ia64/acpi.h
+++ b/include/asm-ia64/acpi.h
@@ -110,9 +110,8 @@ extern void prefill_possible_map(void);
110extern int additional_cpus; 110extern int additional_cpus;
111 111
112#ifdef CONFIG_ACPI_NUMA 112#ifdef CONFIG_ACPI_NUMA
113/* Proximity bitmap length; _PXM is at most 255 (8 bit)*/ 113#if MAX_NUMNODES > 256
114#ifdef CONFIG_IA64_NR_NODES 114#define MAX_PXM_DOMAINS MAX_NUMNODES
115#define MAX_PXM_DOMAINS CONFIG_IA64_NR_NODES
116#else 115#else
117#define MAX_PXM_DOMAINS (256) 116#define MAX_PXM_DOMAINS (256)
118#endif 117#endif
diff --git a/include/asm-ia64/machvec.h b/include/asm-ia64/machvec.h
index c3e4ed8a3e17..a9c995a86c21 100644
--- a/include/asm-ia64/machvec.h
+++ b/include/asm-ia64/machvec.h
@@ -347,9 +347,11 @@ extern ia64_mv_dma_supported swiotlb_dma_supported;
347#endif 347#endif
348#ifndef platform_pci_legacy_read 348#ifndef platform_pci_legacy_read
349# define platform_pci_legacy_read ia64_pci_legacy_read 349# define platform_pci_legacy_read ia64_pci_legacy_read
350extern int ia64_pci_legacy_read(struct pci_bus *bus, u16 port, u32 *val, u8 size);
350#endif 351#endif
351#ifndef platform_pci_legacy_write 352#ifndef platform_pci_legacy_write
352# define platform_pci_legacy_write ia64_pci_legacy_write 353# define platform_pci_legacy_write ia64_pci_legacy_write
354extern int ia64_pci_legacy_write(struct pci_bus *bus, u16 port, u32 val, u8 size);
353#endif 355#endif
354#ifndef platform_inb 356#ifndef platform_inb
355# define platform_inb __ia64_inb 357# define platform_inb __ia64_inb
diff --git a/include/asm-ia64/sn/sn2/sn_hwperf.h b/include/asm-ia64/sn/sn2/sn_hwperf.h
index 291ef3d69da2..e61ebac38cdd 100644
--- a/include/asm-ia64/sn/sn2/sn_hwperf.h
+++ b/include/asm-ia64/sn/sn2/sn_hwperf.h
@@ -45,8 +45,12 @@ struct sn_hwperf_object_info {
45#define SN_HWPERF_IS_NODE(x) ((x) && strstr((x)->name, "SHub")) 45#define SN_HWPERF_IS_NODE(x) ((x) && strstr((x)->name, "SHub"))
46#define SN_HWPERF_IS_NODE_SHUB2(x) ((x) && strstr((x)->name, "SHub 2.")) 46#define SN_HWPERF_IS_NODE_SHUB2(x) ((x) && strstr((x)->name, "SHub 2."))
47#define SN_HWPERF_IS_IONODE(x) ((x) && strstr((x)->name, "TIO")) 47#define SN_HWPERF_IS_IONODE(x) ((x) && strstr((x)->name, "TIO"))
48#define SN_HWPERF_IS_ROUTER(x) ((x) && strstr((x)->name, "Router"))
49#define SN_HWPERF_IS_NL3ROUTER(x) ((x) && strstr((x)->name, "NL3Router")) 48#define SN_HWPERF_IS_NL3ROUTER(x) ((x) && strstr((x)->name, "NL3Router"))
49#define SN_HWPERF_IS_NL4ROUTER(x) ((x) && strstr((x)->name, "NL4Router"))
50#define SN_HWPERF_IS_OLDROUTER(x) ((x) && strstr((x)->name, "Router"))
51#define SN_HWPERF_IS_ROUTER(x) (SN_HWPERF_IS_NL3ROUTER(x) || \
52 SN_HWPERF_IS_NL4ROUTER(x) || \
53 SN_HWPERF_IS_OLDROUTER(x))
50#define SN_HWPERF_FOREIGN(x) ((x) && !(x)->sn_hwp_this_part && !(x)->sn_hwp_is_shared) 54#define SN_HWPERF_FOREIGN(x) ((x) && !(x)->sn_hwp_this_part && !(x)->sn_hwp_is_shared)
51#define SN_HWPERF_SAME_OBJTYPE(x,y) ((SN_HWPERF_IS_NODE(x) && SN_HWPERF_IS_NODE(y)) ||\ 55#define SN_HWPERF_SAME_OBJTYPE(x,y) ((SN_HWPERF_IS_NODE(x) && SN_HWPERF_IS_NODE(y)) ||\
52 (SN_HWPERF_IS_IONODE(x) && SN_HWPERF_IS_IONODE(y)) ||\ 56 (SN_HWPERF_IS_IONODE(x) && SN_HWPERF_IS_IONODE(y)) ||\
diff --git a/include/asm-ia64/sn/sn_sal.h b/include/asm-ia64/sn/sn_sal.h
index bf4cc867a698..51aca022cf39 100644
--- a/include/asm-ia64/sn/sn_sal.h
+++ b/include/asm-ia64/sn/sn_sal.h
@@ -8,7 +8,7 @@
8 * License. See the file "COPYING" in the main directory of this archive 8 * License. See the file "COPYING" in the main directory of this archive
9 * for more details. 9 * for more details.
10 * 10 *
11 * Copyright (c) 2000-2005 Silicon Graphics, Inc. All rights reserved. 11 * Copyright (c) 2000-2006 Silicon Graphics, Inc. All rights reserved.
12 */ 12 */
13 13
14 14
@@ -85,6 +85,7 @@
85 85
86#define SN_SAL_GET_PROM_FEATURE_SET 0x02000065 86#define SN_SAL_GET_PROM_FEATURE_SET 0x02000065
87#define SN_SAL_SET_OS_FEATURE_SET 0x02000066 87#define SN_SAL_SET_OS_FEATURE_SET 0x02000066
88#define SN_SAL_INJECT_ERROR 0x02000067
88 89
89/* 90/*
90 * Service-specific constants 91 * Service-specific constants
@@ -705,10 +706,8 @@ static inline int
705sn_change_memprotect(u64 paddr, u64 len, u64 perms, u64 *nasid_array) 706sn_change_memprotect(u64 paddr, u64 len, u64 perms, u64 *nasid_array)
706{ 707{
707 struct ia64_sal_retval ret_stuff; 708 struct ia64_sal_retval ret_stuff;
708 int cnodeid;
709 unsigned long irq_flags; 709 unsigned long irq_flags;
710 710
711 cnodeid = nasid_to_cnodeid(get_node_number(paddr));
712 local_irq_save(irq_flags); 711 local_irq_save(irq_flags);
713 ia64_sal_oemcall_nolock(&ret_stuff, SN_SAL_MEMPROTECT, paddr, len, 712 ia64_sal_oemcall_nolock(&ret_stuff, SN_SAL_MEMPROTECT, paddr, len,
714 (u64)nasid_array, perms, 0, 0, 0); 713 (u64)nasid_array, perms, 0, 0, 0);
@@ -1140,4 +1139,16 @@ ia64_sn_set_os_feature(int feature)
1140 return rv.status; 1139 return rv.status;
1141} 1140}
1142 1141
1142static inline int
1143sn_inject_error(u64 paddr, u64 *data, u64 *ecc)
1144{
1145 struct ia64_sal_retval ret_stuff;
1146 unsigned long irq_flags;
1147
1148 local_irq_save(irq_flags);
1149 ia64_sal_oemcall_nolock(&ret_stuff, SN_SAL_INJECT_ERROR, paddr, (u64)data,
1150 (u64)ecc, 0, 0, 0, 0);
1151 local_irq_restore(irq_flags);
1152 return ret_stuff.status;
1153}
1143#endif /* _ASM_IA64_SN_SN_SAL_H */ 1154#endif /* _ASM_IA64_SN_SN_SAL_H */
diff --git a/include/asm-ia64/thread_info.h b/include/asm-ia64/thread_info.h
index 56394a2c7055..e5392c4d30c6 100644
--- a/include/asm-ia64/thread_info.h
+++ b/include/asm-ia64/thread_info.h
@@ -67,7 +67,7 @@ struct thread_info {
67#define end_of_stack(p) (unsigned long *)((void *)(p) + IA64_RBS_OFFSET) 67#define end_of_stack(p) (unsigned long *)((void *)(p) + IA64_RBS_OFFSET)
68 68
69#define __HAVE_ARCH_TASK_STRUCT_ALLOCATOR 69#define __HAVE_ARCH_TASK_STRUCT_ALLOCATOR
70#define alloc_task_struct() ((task_t *)__get_free_pages(GFP_KERNEL, KERNEL_STACK_SIZE_ORDER)) 70#define alloc_task_struct() ((task_t *)__get_free_pages(GFP_KERNEL | __GFP_COMP, KERNEL_STACK_SIZE_ORDER))
71#define free_task_struct(tsk) free_pages((unsigned long) (tsk), KERNEL_STACK_SIZE_ORDER) 71#define free_task_struct(tsk) free_pages((unsigned long) (tsk), KERNEL_STACK_SIZE_ORDER)
72 72
73#endif /* !__ASSEMBLY */ 73#endif /* !__ASSEMBLY */
diff --git a/include/asm-ia64/topology.h b/include/asm-ia64/topology.h
index 3ee19dfa46df..616b5ed2aa72 100644
--- a/include/asm-ia64/topology.h
+++ b/include/asm-ia64/topology.h
@@ -23,6 +23,11 @@
23#define PENALTY_FOR_NODE_WITH_CPUS 255 23#define PENALTY_FOR_NODE_WITH_CPUS 255
24 24
25/* 25/*
26 * Distance above which we begin to use zone reclaim
27 */
28#define RECLAIM_DISTANCE 15
29
30/*
26 * Returns the number of the node containing CPU 'cpu' 31 * Returns the number of the node containing CPU 'cpu'
27 */ 32 */
28#define cpu_to_node(cpu) (int)(cpu_to_node_map[cpu]) 33#define cpu_to_node(cpu) (int)(cpu_to_node_map[cpu])