提交 37e53db8 编写于 作者: L Linus Torvalds

Merge branch 'release' of git://git.kernel.org/pub/scm/linux/kernel/git/aegl/linux-2.6

* 'release' of git://git.kernel.org/pub/scm/linux/kernel/git/aegl/linux-2.6:
  [IA64] update sn2 defconfig
  [IA64] Add mca recovery failure messages
  [IA64-SGI] fix SGI Altix tioce_reserve_m32() bug
  [IA64] enable dumps to capture second page of kernel stack
  [IA64-SGI] - Reduce overhead of reading sn_topology
  [IA64-SGI] - Fix discover of nearest cpu node to IO node
  [IA64] IOC4 config option ordering
  [IA64] Setup an IA64 specific reclaim distance
  [IA64] eliminate compile time warnings
  [IA64] eliminate compile time warnings
  [IA64-SGI] SN SAL call to inject memory errors
  [IA64] - Fix MAX_PXM_DOMAINS for systems with > 256 nodes
  [IA64] Remove unused variable in sn_sal.h
  [IA64] Remove redundant NULL checks before kfree
  [IA64] wire up compat_sys_adjtimex()
...@@ -413,6 +413,8 @@ config IA64_PALINFO ...@@ -413,6 +413,8 @@ config IA64_PALINFO
config SGI_SN config SGI_SN
def_bool y if (IA64_SGI_SN2 || IA64_GENERIC) def_bool y if (IA64_SGI_SN2 || IA64_GENERIC)
source "drivers/sn/Kconfig"
source "drivers/firmware/Kconfig" source "drivers/firmware/Kconfig"
source "fs/Kconfig.binfmt" source "fs/Kconfig.binfmt"
......
# #
# Automatically generated make config: don't edit # Automatically generated make config: don't edit
# Linux kernel version: 2.6.16-rc5 # Linux kernel version: 2.6.17-rc3
# Mon Feb 27 16:06:38 2006 # Thu Apr 27 11:48:23 2006
# #
# #
...@@ -24,6 +24,7 @@ CONFIG_SYSCTL=y ...@@ -24,6 +24,7 @@ CONFIG_SYSCTL=y
# CONFIG_AUDIT is not set # CONFIG_AUDIT is not set
# CONFIG_IKCONFIG is not set # CONFIG_IKCONFIG is not set
CONFIG_CPUSETS=y CONFIG_CPUSETS=y
CONFIG_RELAY=y
CONFIG_INITRAMFS_SOURCE="" CONFIG_INITRAMFS_SOURCE=""
CONFIG_CC_OPTIMIZE_FOR_SIZE=y CONFIG_CC_OPTIMIZE_FOR_SIZE=y
# CONFIG_EMBEDDED is not set # CONFIG_EMBEDDED is not set
...@@ -38,10 +39,6 @@ CONFIG_BASE_FULL=y ...@@ -38,10 +39,6 @@ CONFIG_BASE_FULL=y
CONFIG_FUTEX=y CONFIG_FUTEX=y
CONFIG_EPOLL=y CONFIG_EPOLL=y
CONFIG_SHMEM=y CONFIG_SHMEM=y
CONFIG_CC_ALIGN_FUNCTIONS=0
CONFIG_CC_ALIGN_LABELS=0
CONFIG_CC_ALIGN_LOOPS=0
CONFIG_CC_ALIGN_JUMPS=0
CONFIG_SLAB=y CONFIG_SLAB=y
# CONFIG_TINY_SHMEM is not set # CONFIG_TINY_SHMEM is not set
CONFIG_BASE_SMALL=0 CONFIG_BASE_SMALL=0
...@@ -53,7 +50,6 @@ CONFIG_BASE_SMALL=0 ...@@ -53,7 +50,6 @@ CONFIG_BASE_SMALL=0
CONFIG_MODULES=y CONFIG_MODULES=y
CONFIG_MODULE_UNLOAD=y CONFIG_MODULE_UNLOAD=y
# CONFIG_MODULE_FORCE_UNLOAD is not set # CONFIG_MODULE_FORCE_UNLOAD is not set
CONFIG_OBSOLETE_MODPARM=y
# CONFIG_MODVERSIONS is not set # CONFIG_MODVERSIONS is not set
# CONFIG_MODULE_SRCVERSION_ALL is not set # CONFIG_MODULE_SRCVERSION_ALL is not set
CONFIG_KMOD=y CONFIG_KMOD=y
...@@ -62,6 +58,7 @@ CONFIG_STOP_MACHINE=y ...@@ -62,6 +58,7 @@ CONFIG_STOP_MACHINE=y
# #
# Block layer # Block layer
# #
# CONFIG_BLK_DEV_IO_TRACE is not set
# #
# IO Schedulers # IO Schedulers
...@@ -84,8 +81,10 @@ CONFIG_64BIT=y ...@@ -84,8 +81,10 @@ CONFIG_64BIT=y
CONFIG_MMU=y CONFIG_MMU=y
CONFIG_SWIOTLB=y CONFIG_SWIOTLB=y
CONFIG_RWSEM_XCHGADD_ALGORITHM=y CONFIG_RWSEM_XCHGADD_ALGORITHM=y
CONFIG_GENERIC_FIND_NEXT_BIT=y
CONFIG_GENERIC_CALIBRATE_DELAY=y CONFIG_GENERIC_CALIBRATE_DELAY=y
CONFIG_TIME_INTERPOLATION=y CONFIG_TIME_INTERPOLATION=y
CONFIG_DMI=y
CONFIG_EFI=y CONFIG_EFI=y
CONFIG_GENERIC_IOMAP=y CONFIG_GENERIC_IOMAP=y
CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
...@@ -116,7 +115,6 @@ CONFIG_IA64_SGI_SN_XP=m ...@@ -116,7 +115,6 @@ CONFIG_IA64_SGI_SN_XP=m
CONFIG_FORCE_MAX_ZONEORDER=17 CONFIG_FORCE_MAX_ZONEORDER=17
CONFIG_SMP=y CONFIG_SMP=y
CONFIG_NR_CPUS=1024 CONFIG_NR_CPUS=1024
CONFIG_IA64_NR_NODES=256
# CONFIG_HOTPLUG_CPU is not set # CONFIG_HOTPLUG_CPU is not set
CONFIG_SCHED_SMT=y CONFIG_SCHED_SMT=y
CONFIG_PREEMPT=y CONFIG_PREEMPT=y
...@@ -136,6 +134,7 @@ CONFIG_ARCH_FLATMEM_ENABLE=y ...@@ -136,6 +134,7 @@ CONFIG_ARCH_FLATMEM_ENABLE=y
CONFIG_ARCH_SPARSEMEM_ENABLE=y CONFIG_ARCH_SPARSEMEM_ENABLE=y
CONFIG_ARCH_DISCONTIGMEM_DEFAULT=y CONFIG_ARCH_DISCONTIGMEM_DEFAULT=y
CONFIG_NUMA=y CONFIG_NUMA=y
CONFIG_NODES_SHIFT=8
CONFIG_VIRTUAL_MEM_MAP=y CONFIG_VIRTUAL_MEM_MAP=y
CONFIG_HOLES_IN_ZONE=y CONFIG_HOLES_IN_ZONE=y
CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID=y CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID=y
...@@ -187,7 +186,6 @@ CONFIG_ACPI_SYSTEM=y ...@@ -187,7 +186,6 @@ CONFIG_ACPI_SYSTEM=y
CONFIG_PCI=y CONFIG_PCI=y
CONFIG_PCI_DOMAINS=y CONFIG_PCI_DOMAINS=y
# CONFIG_PCI_MSI is not set # CONFIG_PCI_MSI is not set
CONFIG_PCI_LEGACY_PROC=y
# CONFIG_PCI_DEBUG is not set # CONFIG_PCI_DEBUG is not set
# #
...@@ -231,6 +229,7 @@ CONFIG_SYN_COOKIES=y ...@@ -231,6 +229,7 @@ CONFIG_SYN_COOKIES=y
# CONFIG_INET_AH is not set # CONFIG_INET_AH is not set
# CONFIG_INET_ESP is not set # CONFIG_INET_ESP is not set
# CONFIG_INET_IPCOMP is not set # CONFIG_INET_IPCOMP is not set
# CONFIG_INET_XFRM_TUNNEL is not set
# CONFIG_INET_TUNNEL is not set # CONFIG_INET_TUNNEL is not set
CONFIG_INET_DIAG=m CONFIG_INET_DIAG=m
CONFIG_INET_TCP_DIAG=m CONFIG_INET_TCP_DIAG=m
...@@ -238,9 +237,11 @@ CONFIG_INET_TCP_DIAG=m ...@@ -238,9 +237,11 @@ CONFIG_INET_TCP_DIAG=m
CONFIG_TCP_CONG_BIC=y CONFIG_TCP_CONG_BIC=y
CONFIG_IPV6=m CONFIG_IPV6=m
# CONFIG_IPV6_PRIVACY is not set # CONFIG_IPV6_PRIVACY is not set
# CONFIG_IPV6_ROUTER_PREF is not set
# CONFIG_INET6_AH is not set # CONFIG_INET6_AH is not set
# CONFIG_INET6_ESP is not set # CONFIG_INET6_ESP is not set
# CONFIG_INET6_IPCOMP is not set # CONFIG_INET6_IPCOMP is not set
# CONFIG_INET6_XFRM_TUNNEL is not set
# CONFIG_INET6_TUNNEL is not set # CONFIG_INET6_TUNNEL is not set
# CONFIG_IPV6_TUNNEL is not set # CONFIG_IPV6_TUNNEL is not set
# CONFIG_NETFILTER is not set # CONFIG_NETFILTER is not set
...@@ -468,9 +469,14 @@ CONFIG_SCSI_SATA_VITESSE=y ...@@ -468,9 +469,14 @@ CONFIG_SCSI_SATA_VITESSE=y
# CONFIG_SCSI_INIA100 is not set # CONFIG_SCSI_INIA100 is not set
# CONFIG_SCSI_SYM53C8XX_2 is not set # CONFIG_SCSI_SYM53C8XX_2 is not set
# CONFIG_SCSI_IPR is not set # CONFIG_SCSI_IPR is not set
# CONFIG_SCSI_QLOGIC_FC is not set
CONFIG_SCSI_QLOGIC_1280=y CONFIG_SCSI_QLOGIC_1280=y
# CONFIG_SCSI_QLA_FC is not set CONFIG_SCSI_QLA_FC=y
CONFIG_SCSI_QLA2XXX_EMBEDDED_FIRMWARE=y
# CONFIG_SCSI_QLA21XX is not set
CONFIG_SCSI_QLA22XX=y
CONFIG_SCSI_QLA2300=y
CONFIG_SCSI_QLA2322=y
# CONFIG_SCSI_QLA24XX is not set
# CONFIG_SCSI_LPFC is not set # CONFIG_SCSI_LPFC is not set
# CONFIG_SCSI_DC395x is not set # CONFIG_SCSI_DC395x is not set
# CONFIG_SCSI_DC390T is not set # CONFIG_SCSI_DC390T is not set
...@@ -486,6 +492,7 @@ CONFIG_MD_RAID0=y ...@@ -486,6 +492,7 @@ CONFIG_MD_RAID0=y
CONFIG_MD_RAID1=y CONFIG_MD_RAID1=y
# CONFIG_MD_RAID10 is not set # CONFIG_MD_RAID10 is not set
CONFIG_MD_RAID5=y CONFIG_MD_RAID5=y
# CONFIG_MD_RAID5_RESHAPE is not set
# CONFIG_MD_RAID6 is not set # CONFIG_MD_RAID6 is not set
CONFIG_MD_MULTIPATH=y CONFIG_MD_MULTIPATH=y
# CONFIG_MD_FAULTY is not set # CONFIG_MD_FAULTY is not set
...@@ -694,6 +701,7 @@ CONFIG_EFI_RTC=y ...@@ -694,6 +701,7 @@ CONFIG_EFI_RTC=y
# Ftape, the floppy tape device driver # Ftape, the floppy tape device driver
# #
CONFIG_AGP=y CONFIG_AGP=y
# CONFIG_AGP_VIA is not set
CONFIG_AGP_SGI_TIOCA=y CONFIG_AGP_SGI_TIOCA=y
# CONFIG_DRM is not set # CONFIG_DRM is not set
CONFIG_RAW_DRIVER=m CONFIG_RAW_DRIVER=m
...@@ -734,10 +742,6 @@ CONFIG_MMTIMER=y ...@@ -734,10 +742,6 @@ CONFIG_MMTIMER=y
# Misc devices # Misc devices
# #
#
# Multimedia Capabilities Port drivers
#
# #
# Multimedia devices # Multimedia devices
# #
...@@ -747,6 +751,7 @@ CONFIG_MMTIMER=y ...@@ -747,6 +751,7 @@ CONFIG_MMTIMER=y
# Digital Video Broadcasting Devices # Digital Video Broadcasting Devices
# #
# CONFIG_DVB is not set # CONFIG_DVB is not set
# CONFIG_USB_DABUSB is not set
# #
# Graphics support # Graphics support
...@@ -757,6 +762,7 @@ CONFIG_MMTIMER=y ...@@ -757,6 +762,7 @@ CONFIG_MMTIMER=y
# Console display driver support # Console display driver support
# #
CONFIG_VGA_CONSOLE=y CONFIG_VGA_CONSOLE=y
# CONFIG_VGACON_SOFT_SCROLLBACK is not set
CONFIG_DUMMY_CONSOLE=y CONFIG_DUMMY_CONSOLE=y
# #
...@@ -769,6 +775,7 @@ CONFIG_DUMMY_CONSOLE=y ...@@ -769,6 +775,7 @@ CONFIG_DUMMY_CONSOLE=y
# #
CONFIG_USB_ARCH_HAS_HCD=y CONFIG_USB_ARCH_HAS_HCD=y
CONFIG_USB_ARCH_HAS_OHCI=y CONFIG_USB_ARCH_HAS_OHCI=y
CONFIG_USB_ARCH_HAS_EHCI=y
CONFIG_USB=m CONFIG_USB=m
# CONFIG_USB_DEBUG is not set # CONFIG_USB_DEBUG is not set
...@@ -829,9 +836,7 @@ CONFIG_USB_HIDINPUT=y ...@@ -829,9 +836,7 @@ CONFIG_USB_HIDINPUT=y
# CONFIG_USB_ACECAD is not set # CONFIG_USB_ACECAD is not set
# CONFIG_USB_KBTAB is not set # CONFIG_USB_KBTAB is not set
# CONFIG_USB_POWERMATE is not set # CONFIG_USB_POWERMATE is not set
# CONFIG_USB_MTOUCH is not set # CONFIG_USB_TOUCHSCREEN is not set
# CONFIG_USB_ITMTOUCH is not set
# CONFIG_USB_EGALAX is not set
# CONFIG_USB_YEALINK is not set # CONFIG_USB_YEALINK is not set
# CONFIG_USB_XPAD is not set # CONFIG_USB_XPAD is not set
# CONFIG_USB_ATI_REMOTE is not set # CONFIG_USB_ATI_REMOTE is not set
...@@ -845,15 +850,6 @@ CONFIG_USB_HIDINPUT=y ...@@ -845,15 +850,6 @@ CONFIG_USB_HIDINPUT=y
# CONFIG_USB_MDC800 is not set # CONFIG_USB_MDC800 is not set
# CONFIG_USB_MICROTEK is not set # CONFIG_USB_MICROTEK is not set
#
# USB Multimedia devices
#
# CONFIG_USB_DABUSB is not set
#
# Video4Linux support is needed for USB Multimedia device support
#
# #
# USB Network Adapters # USB Network Adapters
# #
...@@ -904,6 +900,19 @@ CONFIG_USB_MON=y ...@@ -904,6 +900,19 @@ CONFIG_USB_MON=y
# #
# CONFIG_MMC is not set # CONFIG_MMC is not set
#
# LED devices
#
# CONFIG_NEW_LEDS is not set
#
# LED drivers
#
#
# LED Triggers
#
# #
# InfiniBand support # InfiniBand support
# #
...@@ -911,9 +920,10 @@ CONFIG_INFINIBAND=m ...@@ -911,9 +920,10 @@ CONFIG_INFINIBAND=m
# CONFIG_INFINIBAND_USER_MAD is not set # CONFIG_INFINIBAND_USER_MAD is not set
CONFIG_INFINIBAND_USER_ACCESS=m CONFIG_INFINIBAND_USER_ACCESS=m
CONFIG_INFINIBAND_MTHCA=m CONFIG_INFINIBAND_MTHCA=m
# CONFIG_INFINIBAND_MTHCA_DEBUG is not set CONFIG_INFINIBAND_MTHCA_DEBUG=y
CONFIG_INFINIBAND_IPOIB=m CONFIG_INFINIBAND_IPOIB=m
# CONFIG_INFINIBAND_IPOIB_DEBUG is not set CONFIG_INFINIBAND_IPOIB_DEBUG=y
# CONFIG_INFINIBAND_IPOIB_DEBUG_DATA is not set
CONFIG_INFINIBAND_SRP=m CONFIG_INFINIBAND_SRP=m
# #
...@@ -923,8 +933,13 @@ CONFIG_SGI_IOC4=y ...@@ -923,8 +933,13 @@ CONFIG_SGI_IOC4=y
CONFIG_SGI_IOC3=y CONFIG_SGI_IOC3=y
# #
# EDAC - error detection and reporting (RAS) # EDAC - error detection and reporting (RAS) (EXPERIMENTAL)
#
#
# Real Time Clock
# #
# CONFIG_RTC_CLASS is not set
# #
# File systems # File systems
...@@ -997,7 +1012,6 @@ CONFIG_TMPFS=y ...@@ -997,7 +1012,6 @@ CONFIG_TMPFS=y
CONFIG_HUGETLBFS=y CONFIG_HUGETLBFS=y
CONFIG_HUGETLB_PAGE=y CONFIG_HUGETLB_PAGE=y
CONFIG_RAMFS=y CONFIG_RAMFS=y
CONFIG_RELAYFS_FS=m
# CONFIG_CONFIGFS_FS is not set # CONFIG_CONFIGFS_FS is not set
# #
......
...@@ -35,6 +35,9 @@ extern void ia64_elf32_init (struct pt_regs *regs); ...@@ -35,6 +35,9 @@ extern void ia64_elf32_init (struct pt_regs *regs);
static void elf32_set_personality (void); static void elf32_set_personality (void);
static unsigned long __attribute ((unused))
randomize_stack_top(unsigned long stack_top);
#define setup_arg_pages(bprm,tos,exec) ia32_setup_arg_pages(bprm,exec) #define setup_arg_pages(bprm,tos,exec) ia32_setup_arg_pages(bprm,exec)
#define elf_map elf32_map #define elf_map elf32_map
......
...@@ -334,7 +334,7 @@ ia32_syscall_table: ...@@ -334,7 +334,7 @@ ia32_syscall_table:
data8 sys_setdomainname data8 sys_setdomainname
data8 sys32_newuname data8 sys32_newuname
data8 sys32_modify_ldt data8 sys32_modify_ldt
data8 sys_ni_syscall /* adjtimex */ data8 compat_sys_adjtimex
data8 sys32_mprotect /* 125 */ data8 sys32_mprotect /* 125 */
data8 compat_sys_sigprocmask data8 compat_sys_sigprocmask
data8 sys_ni_syscall /* create_module */ data8 sys_ni_syscall /* create_module */
......
...@@ -62,6 +62,11 @@ typedef enum { ...@@ -62,6 +62,11 @@ typedef enum {
ISOLATE_NONE ISOLATE_NONE
} isolate_status_t; } isolate_status_t;
typedef enum {
MCA_NOT_RECOVERED = 0,
MCA_RECOVERED = 1
} recovery_status_t;
/* /*
* This pool keeps pointers to the section part of SAL error record * This pool keeps pointers to the section part of SAL error record
*/ */
...@@ -71,6 +76,18 @@ static struct { ...@@ -71,6 +76,18 @@ static struct {
int max_idx; /* Maximum index of section pointer list pool */ int max_idx; /* Maximum index of section pointer list pool */
} slidx_pool; } slidx_pool;
static int
fatal_mca(const char *fmt, ...)
{
va_list args;
va_start(args, fmt);
vprintk(fmt, args);
va_end(args);
return MCA_NOT_RECOVERED;
}
/** /**
* mca_page_isolate - isolate a poisoned page in order not to use it later * mca_page_isolate - isolate a poisoned page in order not to use it later
* @paddr: poisoned memory location * @paddr: poisoned memory location
...@@ -424,7 +441,7 @@ recover_from_read_error(slidx_table_t *slidx, ...@@ -424,7 +441,7 @@ recover_from_read_error(slidx_table_t *slidx,
/* Is target address valid? */ /* Is target address valid? */
if (!pbci->tv) if (!pbci->tv)
return 0; return fatal_mca(KERN_ALERT "MCA: target address not valid\n");
/* /*
* cpu read or memory-mapped io read * cpu read or memory-mapped io read
...@@ -442,7 +459,7 @@ recover_from_read_error(slidx_table_t *slidx, ...@@ -442,7 +459,7 @@ recover_from_read_error(slidx_table_t *slidx,
/* Is minstate valid? */ /* Is minstate valid? */
if (!peidx_bottom(peidx) || !(peidx_bottom(peidx)->valid.minstate)) if (!peidx_bottom(peidx) || !(peidx_bottom(peidx)->valid.minstate))
return 0; return fatal_mca(KERN_ALERT "MCA: minstate not valid\n");
psr1 =(struct ia64_psr *)&(peidx_minstate_area(peidx)->pmsa_ipsr); psr1 =(struct ia64_psr *)&(peidx_minstate_area(peidx)->pmsa_ipsr);
psr2 =(struct ia64_psr *)&(peidx_minstate_area(peidx)->pmsa_xpsr); psr2 =(struct ia64_psr *)&(peidx_minstate_area(peidx)->pmsa_xpsr);
...@@ -476,12 +493,13 @@ recover_from_read_error(slidx_table_t *slidx, ...@@ -476,12 +493,13 @@ recover_from_read_error(slidx_table_t *slidx,
psr2->bn = 1; psr2->bn = 1;
psr2->i = 0; psr2->i = 0;
return 1; return MCA_RECOVERED;
} }
} }
return 0; return fatal_mca(KERN_ALERT "MCA: kernel context not recovered,"
" iip 0x%lx\n", pmsa->pmsa_iip);
} }
/** /**
...@@ -567,13 +585,13 @@ recover_from_processor_error(int platform, slidx_table_t *slidx, ...@@ -567,13 +585,13 @@ recover_from_processor_error(int platform, slidx_table_t *slidx,
* The machine check is corrected. * The machine check is corrected.
*/ */
if (psp->cm == 1) if (psp->cm == 1)
return 1; return MCA_RECOVERED;
/* /*
* The error was not contained. Software must be reset. * The error was not contained. Software must be reset.
*/ */
if (psp->us || psp->ci == 0) if (psp->us || psp->ci == 0)
return 0; return fatal_mca(KERN_ALERT "MCA: error not contained\n");
/* /*
* The cache check and bus check bits have four possible states * 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,20 +602,22 @@ recover_from_processor_error(int platform, slidx_table_t *slidx,
* 1 1 Memory error, attempt recovery * 1 1 Memory error, attempt recovery
*/ */
if (psp->bc == 0 || pbci == NULL) if (psp->bc == 0 || pbci == NULL)
return 0; return fatal_mca(KERN_ALERT "MCA: No bus check\n");
/* /*
* Sorry, we cannot handle so many. * Sorry, we cannot handle so many.
*/ */
if (peidx_bus_check_num(peidx) > 1) if (peidx_bus_check_num(peidx) > 1)
return 0; return fatal_mca(KERN_ALERT "MCA: Too many bus checks\n");
/* /*
* Well, here is only one bus error. * Well, here is only one bus error.
*/ */
if (pbci->ib || pbci->cc) if (pbci->ib)
return 0; return fatal_mca(KERN_ALERT "MCA: Internal Bus error\n");
if (pbci->cc)
return fatal_mca(KERN_ALERT "MCA: Cache-cache error\n");
if (pbci->eb && pbci->bsi > 0) if (pbci->eb && pbci->bsi > 0)
return 0; return fatal_mca(KERN_ALERT "MCA: External bus check fatal status\n");
/* /*
* This is a local MCA and estimated as recoverble external bus error. * 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,7 +629,7 @@ recover_from_processor_error(int platform, slidx_table_t *slidx,
/* /*
* On account of strange SAL error record, we cannot recover. * On account of strange SAL error record, we cannot recover.
*/ */
return 0; return fatal_mca(KERN_ALERT "MCA: Strange SAL record\n");
} }
/** /**
...@@ -638,12 +658,10 @@ mca_try_to_recover(void *rec, struct ia64_sal_os_state *sos) ...@@ -638,12 +658,10 @@ mca_try_to_recover(void *rec, struct ia64_sal_os_state *sos)
/* Now, OS can recover when there is one processor error section */ /* Now, OS can recover when there is one processor error section */
if (n_proc_err > 1) if (n_proc_err > 1)
return 0; return fatal_mca(KERN_ALERT "MCA: Too Many Errors\n");
else if (n_proc_err == 0) { else if (n_proc_err == 0)
/* Weird SAL record ... We need not to recover */ /* Weird SAL record ... We need not to recover */
return fatal_mca(KERN_ALERT "MCA: Weird SAL record\n");
return 1;
}
/* Make index of processor error section */ /* Make index of processor error section */
mca_make_peidx((sal_log_processor_info_t*) 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,7 +672,7 @@ mca_try_to_recover(void *rec, struct ia64_sal_os_state *sos)
/* Check whether MCA is global or not */ /* Check whether MCA is global or not */
if (is_mca_global(&peidx, &pbci, sos)) if (is_mca_global(&peidx, &pbci, sos))
return 0; return fatal_mca(KERN_ALERT "MCA: global MCA\n");
/* Try to recover a processor error */ /* Try to recover a processor error */
return recover_from_processor_error(platform_err, &slidx, &peidx, return recover_from_processor_error(platform_err, &slidx, &peidx,
......
...@@ -305,13 +305,10 @@ static struct kobj_type cache_ktype_percpu_entry = { ...@@ -305,13 +305,10 @@ static struct kobj_type cache_ktype_percpu_entry = {
static void __cpuinit cpu_cache_sysfs_exit(unsigned int cpu) static void __cpuinit cpu_cache_sysfs_exit(unsigned int cpu)
{ {
if (all_cpu_cache_info[cpu].cache_leaves) { kfree(all_cpu_cache_info[cpu].cache_leaves);
kfree(all_cpu_cache_info[cpu].cache_leaves); all_cpu_cache_info[cpu].cache_leaves = NULL;
all_cpu_cache_info[cpu].cache_leaves = NULL;
}
all_cpu_cache_info[cpu].num_cache_leaves = 0; all_cpu_cache_info[cpu].num_cache_leaves = 0;
memset(&all_cpu_cache_info[cpu].kobj, 0, sizeof(struct kobject)); memset(&all_cpu_cache_info[cpu].kobj, 0, sizeof(struct kobject));
return; return;
} }
......
...@@ -31,7 +31,6 @@ ...@@ -31,7 +31,6 @@
#include <asm/irq.h> #include <asm/irq.h>
#include <asm/hw_irq.h> #include <asm/hw_irq.h>
/* /*
* Low-level SAL-based PCI configuration access functions. Note that SAL * Low-level SAL-based PCI configuration access functions. Note that SAL
* calls are already serialized (via sal_lock), so we don't need another * 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,7 +706,7 @@ int ia64_pci_legacy_read(struct pci_bus *bus, u16 port, u32 *val, u8 size)
* *
* Simply writes @size bytes of @val to @port. * Simply writes @size bytes of @val to @port.
*/ */
int ia64_pci_legacy_write(struct pci_dev *bus, u16 port, u32 val, u8 size) int ia64_pci_legacy_write(struct pci_bus *bus, u16 port, u32 val, u8 size)
{ {
int ret = size; int ret = size;
......
...@@ -284,6 +284,8 @@ static int sn_hwperf_get_nearest_node_objdata(struct sn_hwperf_object_info *objb ...@@ -284,6 +284,8 @@ static int sn_hwperf_get_nearest_node_objdata(struct sn_hwperf_object_info *objb
/* find nearest node with cpus and nearest memory */ /* find nearest node with cpus and nearest memory */
for (router=NULL, j=0; j < op->ports; j++) { for (router=NULL, j=0; j < op->ports; j++) {
dest = sn_hwperf_findobj_id(objbuf, nobj, ptdata[j].conn_id); dest = sn_hwperf_findobj_id(objbuf, nobj, ptdata[j].conn_id);
if (dest && SN_HWPERF_IS_ROUTER(dest))
router = dest;
if (!dest || SN_HWPERF_FOREIGN(dest) || if (!dest || SN_HWPERF_FOREIGN(dest) ||
!SN_HWPERF_IS_NODE(dest) || SN_HWPERF_IS_IONODE(dest)) { !SN_HWPERF_IS_NODE(dest) || SN_HWPERF_IS_IONODE(dest)) {
continue; continue;
...@@ -299,8 +301,6 @@ static int sn_hwperf_get_nearest_node_objdata(struct sn_hwperf_object_info *objb ...@@ -299,8 +301,6 @@ static int sn_hwperf_get_nearest_node_objdata(struct sn_hwperf_object_info *objb
*near_mem_node = c; *near_mem_node = c;
found_mem++; found_mem++;
} }
if (SN_HWPERF_IS_ROUTER(dest))
router = dest;
} }
if (router && (!found_cpu || !found_mem)) { if (router && (!found_cpu || !found_mem)) {
...@@ -493,7 +493,7 @@ static int sn_topology_show(struct seq_file *s, void *d) ...@@ -493,7 +493,7 @@ static int sn_topology_show(struct seq_file *s, void *d)
* numalink ports * numalink ports
*/ */
sz = obj->ports * sizeof(struct sn_hwperf_port_info); sz = obj->ports * sizeof(struct sn_hwperf_port_info);
if ((ptdata = vmalloc(sz)) == NULL) if ((ptdata = kmalloc(sz, GFP_KERNEL)) == NULL)
return -ENOMEM; return -ENOMEM;
e = ia64_sn_hwperf_op(sn_hwperf_master_nasid, e = ia64_sn_hwperf_op(sn_hwperf_master_nasid,
SN_HWPERF_ENUM_PORTS, obj->id, sz, SN_HWPERF_ENUM_PORTS, obj->id, sz,
...@@ -541,7 +541,7 @@ static int sn_topology_show(struct seq_file *s, void *d) ...@@ -541,7 +541,7 @@ static int sn_topology_show(struct seq_file *s, void *d)
(SN_HWPERF_IS_NL3ROUTER(obj) || (SN_HWPERF_IS_NL3ROUTER(obj) ||
SN_HWPERF_IS_NL3ROUTER(p)) ? "LLP3" : "LLP4"); SN_HWPERF_IS_NL3ROUTER(p)) ? "LLP3" : "LLP4");
} }
vfree(ptdata); kfree(ptdata);
} }
return 0; return 0;
......
...@@ -136,9 +136,7 @@ xpc_get_rsvd_page_pa(int nasid) ...@@ -136,9 +136,7 @@ xpc_get_rsvd_page_pa(int nasid)
} }
if (L1_CACHE_ALIGN(len) > buf_len) { if (L1_CACHE_ALIGN(len) > buf_len) {
if (buf_base != NULL) { kfree(buf_base);
kfree(buf_base);
}
buf_len = L1_CACHE_ALIGN(len); buf_len = L1_CACHE_ALIGN(len);
buf = (u64) xpc_kmalloc_cacheline_aligned(buf_len, buf = (u64) xpc_kmalloc_cacheline_aligned(buf_len,
GFP_KERNEL, &buf_base); GFP_KERNEL, &buf_base);
...@@ -159,9 +157,7 @@ xpc_get_rsvd_page_pa(int nasid) ...@@ -159,9 +157,7 @@ xpc_get_rsvd_page_pa(int nasid)
} }
} }
if (buf_base != NULL) { kfree(buf_base);
kfree(buf_base);
}
if (status != SALRET_OK) { if (status != SALRET_OK) {
rp_pa = 0; rp_pa = 0;
......
...@@ -682,9 +682,6 @@ tioce_reserve_m32(struct tioce_kernel *ce_kern, u64 base, u64 limit) ...@@ -682,9 +682,6 @@ tioce_reserve_m32(struct tioce_kernel *ce_kern, u64 base, u64 limit)
int ate_index, last_ate, ps; int ate_index, last_ate, ps;
struct tioce *ce_mmr; struct tioce *ce_mmr;
if (!TIOCE_M32_ADDR(base))
return;
ce_mmr = (struct tioce *)ce_kern->ce_common->ce_pcibus.bs_base; ce_mmr = (struct tioce *)ce_kern->ce_common->ce_pcibus.bs_base;
ps = ce_kern->ce_ate3240_pagesize; ps = ce_kern->ce_ate3240_pagesize;
ate_index = ATE_PAGE(base, ps); ate_index = ATE_PAGE(base, ps);
...@@ -693,6 +690,9 @@ tioce_reserve_m32(struct tioce_kernel *ce_kern, u64 base, u64 limit) ...@@ -693,6 +690,9 @@ tioce_reserve_m32(struct tioce_kernel *ce_kern, u64 base, u64 limit)
if (ate_index < 64) if (ate_index < 64)
ate_index = 64; ate_index = 64;
if (last_ate >= TIOCE_NUM_M3240_ATES)
last_ate = TIOCE_NUM_M3240_ATES - 1;
while (ate_index <= last_ate) { while (ate_index <= last_ate) {
u64 ate; u64 ate;
......
...@@ -68,8 +68,6 @@ source "drivers/leds/Kconfig" ...@@ -68,8 +68,6 @@ source "drivers/leds/Kconfig"
source "drivers/infiniband/Kconfig" source "drivers/infiniband/Kconfig"
source "drivers/sn/Kconfig"
source "drivers/edac/Kconfig" source "drivers/edac/Kconfig"
source "drivers/rtc/Kconfig" source "drivers/rtc/Kconfig"
......
...@@ -110,9 +110,8 @@ extern void prefill_possible_map(void); ...@@ -110,9 +110,8 @@ extern void prefill_possible_map(void);
extern int additional_cpus; extern int additional_cpus;
#ifdef CONFIG_ACPI_NUMA #ifdef CONFIG_ACPI_NUMA
/* Proximity bitmap length; _PXM is at most 255 (8 bit)*/ #if MAX_NUMNODES > 256
#ifdef CONFIG_IA64_NR_NODES #define MAX_PXM_DOMAINS MAX_NUMNODES
#define MAX_PXM_DOMAINS CONFIG_IA64_NR_NODES
#else #else
#define MAX_PXM_DOMAINS (256) #define MAX_PXM_DOMAINS (256)
#endif #endif
......
...@@ -347,9 +347,11 @@ extern ia64_mv_dma_supported swiotlb_dma_supported; ...@@ -347,9 +347,11 @@ extern ia64_mv_dma_supported swiotlb_dma_supported;
#endif #endif
#ifndef platform_pci_legacy_read #ifndef platform_pci_legacy_read
# define platform_pci_legacy_read ia64_pci_legacy_read # define platform_pci_legacy_read ia64_pci_legacy_read
extern int ia64_pci_legacy_read(struct pci_bus *bus, u16 port, u32 *val, u8 size);
#endif #endif
#ifndef platform_pci_legacy_write #ifndef platform_pci_legacy_write
# define platform_pci_legacy_write ia64_pci_legacy_write # define platform_pci_legacy_write ia64_pci_legacy_write
extern int ia64_pci_legacy_write(struct pci_bus *bus, u16 port, u32 val, u8 size);
#endif #endif
#ifndef platform_inb #ifndef platform_inb
# define platform_inb __ia64_inb # define platform_inb __ia64_inb
......
...@@ -45,8 +45,12 @@ struct sn_hwperf_object_info { ...@@ -45,8 +45,12 @@ struct sn_hwperf_object_info {
#define SN_HWPERF_IS_NODE(x) ((x) && strstr((x)->name, "SHub")) #define SN_HWPERF_IS_NODE(x) ((x) && strstr((x)->name, "SHub"))
#define SN_HWPERF_IS_NODE_SHUB2(x) ((x) && strstr((x)->name, "SHub 2.")) #define SN_HWPERF_IS_NODE_SHUB2(x) ((x) && strstr((x)->name, "SHub 2."))
#define SN_HWPERF_IS_IONODE(x) ((x) && strstr((x)->name, "TIO")) #define SN_HWPERF_IS_IONODE(x) ((x) && strstr((x)->name, "TIO"))
#define SN_HWPERF_IS_ROUTER(x) ((x) && strstr((x)->name, "Router"))
#define SN_HWPERF_IS_NL3ROUTER(x) ((x) && strstr((x)->name, "NL3Router")) #define SN_HWPERF_IS_NL3ROUTER(x) ((x) && strstr((x)->name, "NL3Router"))
#define SN_HWPERF_IS_NL4ROUTER(x) ((x) && strstr((x)->name, "NL4Router"))
#define SN_HWPERF_IS_OLDROUTER(x) ((x) && strstr((x)->name, "Router"))
#define SN_HWPERF_IS_ROUTER(x) (SN_HWPERF_IS_NL3ROUTER(x) || \
SN_HWPERF_IS_NL4ROUTER(x) || \
SN_HWPERF_IS_OLDROUTER(x))
#define SN_HWPERF_FOREIGN(x) ((x) && !(x)->sn_hwp_this_part && !(x)->sn_hwp_is_shared) #define SN_HWPERF_FOREIGN(x) ((x) && !(x)->sn_hwp_this_part && !(x)->sn_hwp_is_shared)
#define SN_HWPERF_SAME_OBJTYPE(x,y) ((SN_HWPERF_IS_NODE(x) && SN_HWPERF_IS_NODE(y)) ||\ #define SN_HWPERF_SAME_OBJTYPE(x,y) ((SN_HWPERF_IS_NODE(x) && SN_HWPERF_IS_NODE(y)) ||\
(SN_HWPERF_IS_IONODE(x) && SN_HWPERF_IS_IONODE(y)) ||\ (SN_HWPERF_IS_IONODE(x) && SN_HWPERF_IS_IONODE(y)) ||\
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
* License. See the file "COPYING" in the main directory of this archive * License. See the file "COPYING" in the main directory of this archive
* for more details. * for more details.
* *
* Copyright (c) 2000-2005 Silicon Graphics, Inc. All rights reserved. * Copyright (c) 2000-2006 Silicon Graphics, Inc. All rights reserved.
*/ */
...@@ -85,6 +85,7 @@ ...@@ -85,6 +85,7 @@
#define SN_SAL_GET_PROM_FEATURE_SET 0x02000065 #define SN_SAL_GET_PROM_FEATURE_SET 0x02000065
#define SN_SAL_SET_OS_FEATURE_SET 0x02000066 #define SN_SAL_SET_OS_FEATURE_SET 0x02000066
#define SN_SAL_INJECT_ERROR 0x02000067
/* /*
* Service-specific constants * Service-specific constants
...@@ -705,10 +706,8 @@ static inline int ...@@ -705,10 +706,8 @@ static inline int
sn_change_memprotect(u64 paddr, u64 len, u64 perms, u64 *nasid_array) sn_change_memprotect(u64 paddr, u64 len, u64 perms, u64 *nasid_array)
{ {
struct ia64_sal_retval ret_stuff; struct ia64_sal_retval ret_stuff;
int cnodeid;
unsigned long irq_flags; unsigned long irq_flags;
cnodeid = nasid_to_cnodeid(get_node_number(paddr));
local_irq_save(irq_flags); local_irq_save(irq_flags);
ia64_sal_oemcall_nolock(&ret_stuff, SN_SAL_MEMPROTECT, paddr, len, ia64_sal_oemcall_nolock(&ret_stuff, SN_SAL_MEMPROTECT, paddr, len,
(u64)nasid_array, perms, 0, 0, 0); (u64)nasid_array, perms, 0, 0, 0);
...@@ -1140,4 +1139,16 @@ ia64_sn_set_os_feature(int feature) ...@@ -1140,4 +1139,16 @@ ia64_sn_set_os_feature(int feature)
return rv.status; return rv.status;
} }
static inline int
sn_inject_error(u64 paddr, u64 *data, u64 *ecc)
{
struct ia64_sal_retval ret_stuff;
unsigned long irq_flags;
local_irq_save(irq_flags);
ia64_sal_oemcall_nolock(&ret_stuff, SN_SAL_INJECT_ERROR, paddr, (u64)data,
(u64)ecc, 0, 0, 0, 0);
local_irq_restore(irq_flags);
return ret_stuff.status;
}
#endif /* _ASM_IA64_SN_SN_SAL_H */ #endif /* _ASM_IA64_SN_SN_SAL_H */
...@@ -67,7 +67,7 @@ struct thread_info { ...@@ -67,7 +67,7 @@ struct thread_info {
#define end_of_stack(p) (unsigned long *)((void *)(p) + IA64_RBS_OFFSET) #define end_of_stack(p) (unsigned long *)((void *)(p) + IA64_RBS_OFFSET)
#define __HAVE_ARCH_TASK_STRUCT_ALLOCATOR #define __HAVE_ARCH_TASK_STRUCT_ALLOCATOR
#define alloc_task_struct() ((task_t *)__get_free_pages(GFP_KERNEL, KERNEL_STACK_SIZE_ORDER)) #define alloc_task_struct() ((task_t *)__get_free_pages(GFP_KERNEL | __GFP_COMP, KERNEL_STACK_SIZE_ORDER))
#define free_task_struct(tsk) free_pages((unsigned long) (tsk), KERNEL_STACK_SIZE_ORDER) #define free_task_struct(tsk) free_pages((unsigned long) (tsk), KERNEL_STACK_SIZE_ORDER)
#endif /* !__ASSEMBLY */ #endif /* !__ASSEMBLY */
......
...@@ -22,6 +22,11 @@ ...@@ -22,6 +22,11 @@
/* Nodes w/o CPUs are preferred for memory allocations, see build_zonelists */ /* Nodes w/o CPUs are preferred for memory allocations, see build_zonelists */
#define PENALTY_FOR_NODE_WITH_CPUS 255 #define PENALTY_FOR_NODE_WITH_CPUS 255
/*
* Distance above which we begin to use zone reclaim
*/
#define RECLAIM_DISTANCE 15
/* /*
* Returns the number of the node containing CPU 'cpu' * Returns the number of the node containing CPU 'cpu'
*/ */
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册