Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
kernel_linux
提交
8a212ab6
K
kernel_linux
项目概览
OpenHarmony
/
kernel_linux
上一次同步 大约 4 年
通知
14
Star
8
Fork
2
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
K
kernel_linux
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
8a212ab6
编写于
10月 28, 2005
作者:
L
Linus Torvalds
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'release' of
git://git.kernel.org/pub/scm/linux/kernel/git/aegl/linux-2.6
上级
1f419cad
0e1f6060
变更
63
隐藏空白更改
内联
并排
Showing
63 changed file
with
4172 addition
and
1303 deletion
+4172
-1303
arch/ia64/Kconfig
arch/ia64/Kconfig
+58
-40
arch/ia64/configs/bigsur_defconfig
arch/ia64/configs/bigsur_defconfig
+268
-127
arch/ia64/configs/gensparse_defconfig
arch/ia64/configs/gensparse_defconfig
+1319
-0
arch/ia64/configs/tiger_defconfig
arch/ia64/configs/tiger_defconfig
+66
-20
arch/ia64/configs/zx1_defconfig
arch/ia64/configs/zx1_defconfig
+68
-24
arch/ia64/defconfig
arch/ia64/defconfig
+174
-91
arch/ia64/hp/common/hwsw_iommu.c
arch/ia64/hp/common/hwsw_iommu.c
+11
-2
arch/ia64/hp/common/sba_iommu.c
arch/ia64/hp/common/sba_iommu.c
+32
-13
arch/ia64/hp/sim/simscsi.c
arch/ia64/hp/sim/simscsi.c
+8
-5
arch/ia64/kernel/acpi.c
arch/ia64/kernel/acpi.c
+11
-2
arch/ia64/kernel/efi.c
arch/ia64/kernel/efi.c
+329
-181
arch/ia64/kernel/irq.c
arch/ia64/kernel/irq.c
+6
-6
arch/ia64/kernel/mca.c
arch/ia64/kernel/mca.c
+1
-3
arch/ia64/kernel/module.c
arch/ia64/kernel/module.c
+3
-3
arch/ia64/kernel/patch.c
arch/ia64/kernel/patch.c
+12
-4
arch/ia64/kernel/ptrace.c
arch/ia64/kernel/ptrace.c
+11
-17
arch/ia64/kernel/setup.c
arch/ia64/kernel/setup.c
+49
-14
arch/ia64/kernel/smp.c
arch/ia64/kernel/smp.c
+5
-5
arch/ia64/kernel/smpboot.c
arch/ia64/kernel/smpboot.c
+3
-3
arch/ia64/kernel/uncached.c
arch/ia64/kernel/uncached.c
+6
-11
arch/ia64/lib/swiotlb.c
arch/ia64/lib/swiotlb.c
+102
-0
arch/ia64/mm/Makefile
arch/ia64/mm/Makefile
+2
-3
arch/ia64/mm/contig.c
arch/ia64/mm/contig.c
+2
-2
arch/ia64/mm/discontig.c
arch/ia64/mm/discontig.c
+41
-2
arch/ia64/mm/init.c
arch/ia64/mm/init.c
+1
-1
arch/ia64/mm/numa.c
arch/ia64/mm/numa.c
+24
-0
arch/ia64/mm/tlb.c
arch/ia64/mm/tlb.c
+12
-9
arch/ia64/pci/pci.c
arch/ia64/pci/pci.c
+27
-31
arch/ia64/sn/kernel/bte.c
arch/ia64/sn/kernel/bte.c
+1
-1
arch/ia64/sn/kernel/io_init.c
arch/ia64/sn/kernel/io_init.c
+1
-3
arch/ia64/sn/kernel/setup.c
arch/ia64/sn/kernel/setup.c
+51
-109
arch/ia64/sn/kernel/sn2/sn2_smp.c
arch/ia64/sn/kernel/sn2/sn2_smp.c
+19
-12
arch/ia64/sn/kernel/sn2/sn_hwperf.c
arch/ia64/sn/kernel/sn2/sn_hwperf.c
+2
-2
arch/ia64/sn/kernel/tiocx.c
arch/ia64/sn/kernel/tiocx.c
+35
-32
arch/ia64/sn/kernel/xpc.h
arch/ia64/sn/kernel/xpc.h
+324
-42
arch/ia64/sn/kernel/xpc_channel.c
arch/ia64/sn/kernel/xpc_channel.c
+195
-134
arch/ia64/sn/kernel/xpc_main.c
arch/ia64/sn/kernel/xpc_main.c
+256
-74
arch/ia64/sn/kernel/xpc_partition.c
arch/ia64/sn/kernel/xpc_partition.c
+356
-119
arch/ia64/sn/pci/pci_dma.c
arch/ia64/sn/pci/pci_dma.c
+46
-0
arch/ia64/sn/pci/pcibr/pcibr_reg.c
arch/ia64/sn/pci/pcibr/pcibr_reg.c
+31
-28
arch/ia64/sn/pci/tioca_provider.c
arch/ia64/sn/pci/tioca_provider.c
+16
-16
arch/ia64/sn/pci/tioce_provider.c
arch/ia64/sn/pci/tioce_provider.c
+16
-14
drivers/char/agp/sgi-agp.c
drivers/char/agp/sgi-agp.c
+1
-0
drivers/char/mmtimer.c
drivers/char/mmtimer.c
+2
-2
drivers/char/snsc.c
drivers/char/snsc.c
+2
-2
include/asm-ia64/machvec.h
include/asm-ia64/machvec.h
+1
-1
include/asm-ia64/machvec_hpzx1.h
include/asm-ia64/machvec_hpzx1.h
+10
-11
include/asm-ia64/machvec_hpzx1_swiotlb.h
include/asm-ia64/machvec_hpzx1_swiotlb.h
+1
-2
include/asm-ia64/meminit.h
include/asm-ia64/meminit.h
+4
-2
include/asm-ia64/mmzone.h
include/asm-ia64/mmzone.h
+7
-3
include/asm-ia64/nodedata.h
include/asm-ia64/nodedata.h
+2
-2
include/asm-ia64/page.h
include/asm-ia64/page.h
+3
-3
include/asm-ia64/sn/arch.h
include/asm-ia64/sn/arch.h
+26
-10
include/asm-ia64/sn/io.h
include/asm-ia64/sn/io.h
+10
-1
include/asm-ia64/sn/klconfig.h
include/asm-ia64/sn/klconfig.h
+4
-30
include/asm-ia64/sn/l1.h
include/asm-ia64/sn/l1.h
+12
-0
include/asm-ia64/sn/nodepda.h
include/asm-ia64/sn/nodepda.h
+0
-1
include/asm-ia64/sn/sn_cpuid.h
include/asm-ia64/sn/sn_cpuid.h
+0
-3
include/asm-ia64/sn/sn_sal.h
include/asm-ia64/sn/sn_sal.h
+45
-14
include/asm-ia64/sn/tioca_provider.h
include/asm-ia64/sn/tioca_provider.h
+7
-7
include/asm-ia64/sn/tiocx.h
include/asm-ia64/sn/tiocx.h
+2
-1
include/asm-ia64/sn/xp.h
include/asm-ia64/sn/xp.h
+13
-3
include/asm-ia64/sparsemem.h
include/asm-ia64/sparsemem.h
+20
-0
未找到文件。
arch/ia64/Kconfig
浏览文件 @
8a212ab6
...
...
@@ -63,8 +63,6 @@ config IA64_GENERIC
select ACPI
select NUMA
select ACPI_NUMA
select VIRTUAL_MEM_MAP
select DISCONTIGMEM
help
This selects the system type of your hardware. A "generic" kernel
will run on any supported IA-64 system. However, if you configure
...
...
@@ -176,40 +174,6 @@ config IA64_L1_CACHE_SHIFT
default "6" if ITANIUM
# align cache-sensitive data to 64 bytes
config NUMA
bool "NUMA support"
depends on !IA64_HP_SIM
default y if IA64_SGI_SN2
select ACPI_NUMA
help
Say Y to compile the kernel to support NUMA (Non-Uniform Memory
Access). This option is for configuring high-end multiprocessor
server systems. If in doubt, say N.
config VIRTUAL_MEM_MAP
bool "Virtual mem map"
default y if !IA64_HP_SIM
help
Say Y to compile the kernel with support for a virtual mem map.
This code also only takes effect if a memory hole of greater than
1 Gb is found during boot. You must turn this option on if you
require the DISCONTIGMEM option for your machine. If you are
unsure, say Y.
config HOLES_IN_ZONE
bool
default y if VIRTUAL_MEM_MAP
config ARCH_DISCONTIGMEM_ENABLE
bool "Discontiguous memory support"
depends on (IA64_DIG || IA64_SGI_SN2 || IA64_GENERIC || IA64_HP_ZX1 || IA64_HP_ZX1_SWIOTLB) && NUMA && VIRTUAL_MEM_MAP
default y if (IA64_SGI_SN2 || IA64_GENERIC) && NUMA
help
Say Y to support efficient handling of discontiguous physical memory,
for architectures which are either NUMA (Non-Uniform Memory Access)
or have huge holes in the physical address space for other reasons.
See <file:Documentation/vm/numa> for more.
config IA64_CYCLONE
bool "Cyclone (EXA) Time Source support"
help
...
...
@@ -232,8 +196,10 @@ config IA64_SGI_SN_XP
based on a network adapter and DMA messaging.
config FORCE_MAX_ZONEORDER
int
default "18"
int "MAX_ORDER (11 - 17)" if !HUGETLB_PAGE
range 11 17 if !HUGETLB_PAGE
default "17" if HUGETLB_PAGE
default "11"
config SMP
bool "Symmetric multi-processing support"
...
...
@@ -254,8 +220,8 @@ config SMP
If you don't know what to do here, say N.
config NR_CPUS
int "Maximum number of CPUs (2-
512
)"
range 2
512
int "Maximum number of CPUs (2-
1024
)"
range 2
1024
depends on SMP
default "64"
help
...
...
@@ -298,6 +264,58 @@ config PREEMPT
source "mm/Kconfig"
config ARCH_SELECT_MEMORY_MODEL
def_bool y
config ARCH_DISCONTIGMEM_ENABLE
def_bool y
help
Say Y to support efficient handling of discontiguous physical memory,
for architectures which are either NUMA (Non-Uniform Memory Access)
or have huge holes in the physical address space for other reasons.
See <file:Documentation/vm/numa> for more.
config ARCH_FLATMEM_ENABLE
def_bool y
config ARCH_SPARSEMEM_ENABLE
def_bool y
depends on ARCH_DISCONTIGMEM_ENABLE
config ARCH_DISCONTIGMEM_DEFAULT
def_bool y if (IA64_SGI_SN2 || IA64_GENERIC || IA64_HP_ZX1 || IA64_HP_ZX1_SWIOTLB)
depends on ARCH_DISCONTIGMEM_ENABLE
config NUMA
bool "NUMA support"
depends on !IA64_HP_SIM && !FLATMEM
default y if IA64_SGI_SN2
help
Say Y to compile the kernel to support NUMA (Non-Uniform Memory
Access). This option is for configuring high-end multiprocessor
server systems. If in doubt, say N.
# VIRTUAL_MEM_MAP and FLAT_NODE_MEM_MAP are functionally equivalent.
# VIRTUAL_MEM_MAP has been retained for historical reasons.
config VIRTUAL_MEM_MAP
bool "Virtual mem map"
depends on !SPARSEMEM
default y if !IA64_HP_SIM
help
Say Y to compile the kernel with support for a virtual mem map.
This code also only takes effect if a memory hole of greater than
1 Gb is found during boot. You must turn this option on if you
require the DISCONTIGMEM option for your machine. If you are
unsure, say Y.
config HOLES_IN_ZONE
bool
default y if VIRTUAL_MEM_MAP
config HAVE_ARCH_EARLY_PFN_TO_NID
def_bool y
depends on NEED_MULTIPLE_NODES
config IA32_SUPPORT
bool "Support for Linux/x86 binaries"
help
...
...
arch/ia64/configs/bigsur_defconfig
浏览文件 @
8a212ab6
#
# Automatically generated make config: don't edit
# Linux kernel version: 2.6.1
0-rc2
#
Mon Nov 29 13:27:48 2004
# Linux kernel version: 2.6.1
4-rc1
#
Wed Sep 14 15:18:49 2005
#
#
...
...
@@ -10,34 +10,40 @@
CONFIG_EXPERIMENTAL=y
CONFIG_CLEAN_COMPILE=y
CONFIG_LOCK_KERNEL=y
CONFIG_INIT_ENV_ARG_LIMIT=32
#
# General setup
#
CONFIG_LOCALVERSION=""
CONFIG_LOCALVERSION_AUTO=y
CONFIG_SWAP=y
CONFIG_SYSVIPC=y
CONFIG_POSIX_MQUEUE=y
# CONFIG_BSD_PROCESS_ACCT is not set
CONFIG_SYSCTL=y
# CONFIG_AUDIT is not set
CONFIG_LOG_BUF_SHIFT=16
CONFIG_HOTPLUG=y
CONFIG_KOBJECT_UEVENT=y
# CONFIG_IKCONFIG is not set
# CONFIG_CPUSETS is not set
CONFIG_INITRAMFS_SOURCE=""
# CONFIG_EMBEDDED is not set
CONFIG_KALLSYMS=y
# CONFIG_KALLSYMS_ALL is not set
# CONFIG_KALLSYMS_EXTRA_PASS is not set
CONFIG_PRINTK=y
CONFIG_BUG=y
CONFIG_BASE_FULL=y
CONFIG_FUTEX=y
CONFIG_EPOLL=y
# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
CONFIG_SHMEM=y
CONFIG_CC_ALIGN_FUNCTIONS=0
CONFIG_CC_ALIGN_LABELS=0
CONFIG_CC_ALIGN_LOOPS=0
CONFIG_CC_ALIGN_JUMPS=0
# CONFIG_TINY_SHMEM is not set
CONFIG_BASE_SMALL=0
#
# Loadable module support
...
...
@@ -58,12 +64,15 @@ CONFIG_IA64=y
CONFIG_64BIT=y
CONFIG_MMU=y
CONFIG_RWSEM_XCHGADD_ALGORITHM=y
CONFIG_GENERIC_CALIBRATE_DELAY=y
CONFIG_TIME_INTERPOLATION=y
CONFIG_EFI=y
CONFIG_GENERIC_IOMAP=y
CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
# CONFIG_IA64_GENERIC is not set
CONFIG_IA64_DIG=y
# CONFIG_IA64_HP_ZX1 is not set
# CONFIG_IA64_HP_ZX1_SWIOTLB is not set
# CONFIG_IA64_SGI_SN2 is not set
# CONFIG_IA64_HP_SIM is not set
CONFIG_ITANIUM=y
...
...
@@ -72,17 +81,30 @@ CONFIG_ITANIUM=y
# CONFIG_IA64_PAGE_SIZE_8KB is not set
CONFIG_IA64_PAGE_SIZE_16KB=y
# CONFIG_IA64_PAGE_SIZE_64KB is not set
# CONFIG_HZ_100 is not set
CONFIG_HZ_250=y
# CONFIG_HZ_1000 is not set
CONFIG_HZ=250
CONFIG_IA64_BRL_EMU=y
CONFIG_IA64_L1_CACHE_SHIFT=6
# CONFIG_NUMA is not set
# CONFIG_VIRTUAL_MEM_MAP is not set
# CONFIG_IA64_CYCLONE is not set
CONFIG_IOSAPIC=y
# CONFIG_IA64_SGI_SN_XP is not set
CONFIG_FORCE_MAX_ZONEORDER=18
CONFIG_SMP=y
CONFIG_NR_CPUS=2
# CONFIG_HOTPLUG_CPU is not set
# CONFIG_SCHED_SMT is not set
CONFIG_PREEMPT=y
CONFIG_SELECT_MEMORY_MODEL=y
CONFIG_FLATMEM_MANUAL=y
# CONFIG_DISCONTIGMEM_MANUAL is not set
# CONFIG_SPARSEMEM_MANUAL is not set
CONFIG_FLATMEM=y
CONFIG_FLAT_NODE_MEM_MAP=y
# CONFIG_SPARSEMEM_STATIC is not set
CONFIG_HAVE_DEC_LOCK=y
CONFIG_IA32_SUPPORT=y
CONFIG_COMPAT=y
...
...
@@ -95,6 +117,7 @@ CONFIG_IA64_PALINFO=y
#
CONFIG_EFI_VARS=y
CONFIG_EFI_PCDP=y
# CONFIG_DELL_RBU is not set
CONFIG_BINFMT_ELF=y
CONFIG_BINFMT_MISC=m
...
...
@@ -102,18 +125,26 @@ CONFIG_BINFMT_MISC=m
# Power management and ACPI
#
CONFIG_PM=y
CONFIG_ACPI=y
# CONFIG_PM_DEBUG is not set
#
# ACPI (Advanced Configuration and Power Interface) Support
#
CONFIG_ACPI=y
CONFIG_ACPI_BUTTON=m
CONFIG_ACPI_FAN=m
CONFIG_ACPI_PROCESSOR=m
CONFIG_ACPI_THERMAL=m
CONFIG_ACPI_BLACKLIST_YEAR=0
# CONFIG_ACPI_DEBUG is not set
CONFIG_ACPI_POWER=y
CONFIG_ACPI_SYSTEM=y
# CONFIG_ACPI_CONTAINER is not set
#
# CPU Frequency scaling
#
# CONFIG_CPU_FREQ is not set
#
# Bus options (PCI, PCMCIA)
...
...
@@ -122,7 +153,7 @@ CONFIG_PCI=y
CONFIG_PCI_DOMAINS=y
# CONFIG_PCI_MSI is not set
CONFIG_PCI_LEGACY_PROC=y
CONFIG_PCI_NAMES=y
# CONFIG_PCI_DEBUG is not set
#
# PCI Hotplug Support
...
...
@@ -135,8 +166,70 @@ CONFIG_PCI_NAMES=y
# CONFIG_PCCARD is not set
#
# PC-card bridges
# Networking
#
CONFIG_NET=y
#
# Networking options
#
CONFIG_PACKET=y
CONFIG_PACKET_MMAP=y
CONFIG_UNIX=y
# CONFIG_NET_KEY is not set
CONFIG_INET=y
# CONFIG_IP_MULTICAST is not set
# CONFIG_IP_ADVANCED_ROUTER is not set
CONFIG_IP_FIB_HASH=y
# CONFIG_IP_PNP is not set
# CONFIG_NET_IPIP is not set
# CONFIG_NET_IPGRE is not set
# CONFIG_ARPD is not set
# CONFIG_SYN_COOKIES is not set
# CONFIG_INET_AH is not set
# CONFIG_INET_ESP is not set
# CONFIG_INET_IPCOMP is not set
# CONFIG_INET_TUNNEL is not set
CONFIG_INET_DIAG=y
CONFIG_INET_TCP_DIAG=y
# CONFIG_TCP_CONG_ADVANCED is not set
CONFIG_TCP_CONG_BIC=y
# CONFIG_IPV6 is not set
# CONFIG_NETFILTER is not set
#
# DCCP Configuration (EXPERIMENTAL)
#
# CONFIG_IP_DCCP is not set
#
# SCTP Configuration (EXPERIMENTAL)
#
# CONFIG_IP_SCTP is not set
# CONFIG_ATM is not set
# CONFIG_BRIDGE is not set
# CONFIG_VLAN_8021Q is not set
# CONFIG_DECNET is not set
# CONFIG_LLC2 is not set
# CONFIG_IPX is not set
# CONFIG_ATALK is not set
# CONFIG_X25 is not set
# CONFIG_LAPB is not set
# CONFIG_NET_DIVERT is not set
# CONFIG_ECONET is not set
# CONFIG_WAN_ROUTER is not set
# CONFIG_NET_SCHED is not set
# CONFIG_NET_CLS_ROUTE is not set
#
# Network testing
#
# CONFIG_NET_PKTGEN is not set
# CONFIG_NETFILTER_NETLINK is not set
# CONFIG_HAMRADIO is not set
# CONFIG_IRDA is not set
# CONFIG_BT is not set
# CONFIG_IEEE80211 is not set
#
# Device Drivers
...
...
@@ -150,6 +243,11 @@ CONFIG_PREVENT_FIRMWARE_BUILD=y
# CONFIG_FW_LOADER is not set
# CONFIG_DEBUG_DRIVER is not set
#
# Connector - unified userspace <-> kernelspace linker
#
# CONFIG_CONNECTOR is not set
#
# Memory Technology Devices (MTD)
#
...
...
@@ -163,7 +261,13 @@ CONFIG_PREVENT_FIRMWARE_BUILD=y
#
# Plug and Play support
#
# CONFIG_PNP is not set
CONFIG_PNP=y
# CONFIG_PNP_DEBUG is not set
#
# Protocols
#
CONFIG_PNPACPI=y
#
# Block devices
...
...
@@ -172,14 +276,15 @@ CONFIG_PREVENT_FIRMWARE_BUILD=y
# CONFIG_BLK_CPQ_CISS_DA is not set
# CONFIG_BLK_DEV_DAC960 is not set
# CONFIG_BLK_DEV_UMEM is not set
# CONFIG_BLK_DEV_COW_COMMON is not set
CONFIG_BLK_DEV_LOOP=m
CONFIG_BLK_DEV_CRYPTOLOOP=m
CONFIG_BLK_DEV_NBD=m
# CONFIG_BLK_DEV_SX8 is not set
# CONFIG_BLK_DEV_UB is not set
CONFIG_BLK_DEV_RAM=m
CONFIG_BLK_DEV_RAM_COUNT=16
CONFIG_BLK_DEV_RAM_SIZE=4096
CONFIG_INITRAMFS_SOURCE=""
# CONFIG_CDROM_PKTCDVD is not set
#
...
...
@@ -189,6 +294,7 @@ CONFIG_IOSCHED_NOOP=y
CONFIG_IOSCHED_AS=y
CONFIG_IOSCHED_DEADLINE=y
CONFIG_IOSCHED_CFQ=y
# CONFIG_ATA_OVER_ETH is not set
#
# ATA/ATAPI/MFM/RLL support
...
...
@@ -211,7 +317,8 @@ CONFIG_BLK_DEV_IDEFLOPPY=m
#
# IDE chipset support/bugfixes
#
CONFIG_IDE_GENERIC=m
# CONFIG_IDE_GENERIC is not set
# CONFIG_BLK_DEV_IDEPNP is not set
CONFIG_BLK_DEV_IDEPCI=y
CONFIG_IDEPCI_SHARE_IRQ=y
# CONFIG_BLK_DEV_OFFBOARD is not set
...
...
@@ -233,6 +340,7 @@ CONFIG_IDEDMA_PCI_AUTO=y
# CONFIG_BLK_DEV_HPT366 is not set
# CONFIG_BLK_DEV_SC1200 is not set
CONFIG_BLK_DEV_PIIX=m
# CONFIG_BLK_DEV_IT821X is not set
# CONFIG_BLK_DEV_NS87415 is not set
# CONFIG_BLK_DEV_PDC202XX_OLD is not set
# CONFIG_BLK_DEV_PDC202XX_NEW is not set
...
...
@@ -250,6 +358,7 @@ CONFIG_IDEDMA_AUTO=y
#
# SCSI device support
#
# CONFIG_RAID_ATTRS is not set
CONFIG_SCSI=y
CONFIG_SCSI_PROC_FS=y
...
...
@@ -261,6 +370,7 @@ CONFIG_BLK_DEV_SD=y
# CONFIG_CHR_DEV_OSST is not set
# CONFIG_BLK_DEV_SR is not set
# CONFIG_CHR_DEV_SG is not set
# CONFIG_CHR_DEV_SCH is not set
#
# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
...
...
@@ -274,6 +384,8 @@ CONFIG_SCSI_LOGGING=y
#
CONFIG_SCSI_SPI_ATTRS=m
# CONFIG_SCSI_FC_ATTRS is not set
# CONFIG_SCSI_ISCSI_ATTRS is not set
# CONFIG_SCSI_SAS_ATTRS is not set
#
# SCSI low-level drivers
...
...
@@ -288,18 +400,13 @@ CONFIG_SCSI_SPI_ATTRS=m
# CONFIG_MEGARAID_NEWGEN is not set
# CONFIG_MEGARAID_LEGACY is not set
# CONFIG_SCSI_SATA is not set
# CONFIG_SCSI_BUSLOGIC is not set
# CONFIG_SCSI_DMX3191D is not set
# CONFIG_SCSI_EATA is not set
# CONFIG_SCSI_EATA_PIO is not set
# CONFIG_SCSI_FUTURE_DOMAIN is not set
# CONFIG_SCSI_GDTH is not set
# CONFIG_SCSI_IPS is not set
# CONFIG_SCSI_INITIO is not set
# CONFIG_SCSI_INIA100 is not set
# CONFIG_SCSI_SYM53C8XX_2 is not set
# CONFIG_SCSI_IPR is not set
# CONFIG_SCSI_QLOGIC_ISP is not set
# CONFIG_SCSI_QLOGIC_FC is not set
CONFIG_SCSI_QLOGIC_1280=y
# CONFIG_SCSI_QLOGIC_1280_1040 is not set
...
...
@@ -309,7 +416,8 @@ CONFIG_SCSI_QLA2XXX=y
# CONFIG_SCSI_QLA2300 is not set
# CONFIG_SCSI_QLA2322 is not set
# CONFIG_SCSI_QLA6312 is not set
# CONFIG_SCSI_QLA6322 is not set
# CONFIG_SCSI_QLA24XX is not set
# CONFIG_SCSI_LPFC is not set
# CONFIG_SCSI_DC395x is not set
# CONFIG_SCSI_DC390T is not set
# CONFIG_SCSI_DEBUG is not set
...
...
@@ -332,11 +440,14 @@ CONFIG_DM_CRYPT=m
CONFIG_DM_SNAPSHOT=m
CONFIG_DM_MIRROR=m
CONFIG_DM_ZERO=m
# CONFIG_DM_MULTIPATH is not set
#
# Fusion MPT device support
#
# CONFIG_FUSION is not set
# CONFIG_FUSION_SPI is not set
# CONFIG_FUSION_FC is not set
#
# IEEE 1394 (FireWire) support
...
...
@@ -349,78 +460,25 @@ CONFIG_DM_ZERO=m
# CONFIG_I2O is not set
#
# Network
ing
support
# Network
device
support
#
CONFIG_NET=y
#
# Networking options
#
CONFIG_PACKET=y
CONFIG_PACKET_MMAP=y
# CONFIG_NETLINK_DEV is not set
CONFIG_UNIX=y
# CONFIG_NET_KEY is not set
CONFIG_INET=y
# CONFIG_IP_MULTICAST is not set
# CONFIG_IP_ADVANCED_ROUTER is not set
# CONFIG_IP_PNP is not set
# CONFIG_NET_IPIP is not set
# CONFIG_NET_IPGRE is not set
# CONFIG_ARPD is not set
# CONFIG_SYN_COOKIES is not set
# CONFIG_INET_AH is not set
# CONFIG_INET_ESP is not set
# CONFIG_INET_IPCOMP is not set
# CONFIG_INET_TUNNEL is not set
CONFIG_IP_TCPDIAG=y
# CONFIG_IP_TCPDIAG_IPV6 is not set
# CONFIG_IPV6 is not set
# CONFIG_NETFILTER is not set
#
# SCTP Configuration (EXPERIMENTAL)
#
# CONFIG_IP_SCTP is not set
# CONFIG_ATM is not set
# CONFIG_BRIDGE is not set
# CONFIG_VLAN_8021Q is not set
# CONFIG_DECNET is not set
# CONFIG_LLC2 is not set
# CONFIG_IPX is not set
# CONFIG_ATALK is not set
# CONFIG_X25 is not set
# CONFIG_LAPB is not set
# CONFIG_NET_DIVERT is not set
# CONFIG_ECONET is not set
# CONFIG_WAN_ROUTER is not set
#
# QoS and/or fair queueing
#
# CONFIG_NET_SCHED is not set
# CONFIG_NET_CLS_ROUTE is not set
#
# Network testing
#
# CONFIG_NET_PKTGEN is not set
# CONFIG_NETPOLL is not set
# CONFIG_NET_POLL_CONTROLLER is not set
# CONFIG_HAMRADIO is not set
# CONFIG_IRDA is not set
# CONFIG_BT is not set
CONFIG_NETDEVICES=y
CONFIG_DUMMY=y
# CONFIG_BONDING is not set
# CONFIG_EQUALIZER is not set
# CONFIG_TUN is not set
# CONFIG_NET_SB1000 is not set
#
# ARCnet devices
#
# CONFIG_ARCNET is not set
#
# PHY device support
#
# CONFIG_PHYLIB is not set
#
# Ethernet (10 or 100Mbit)
#
...
...
@@ -443,7 +501,6 @@ CONFIG_NET_PCI=y
# CONFIG_FORCEDETH is not set
# CONFIG_DGRS is not set
CONFIG_EEPRO100=y
# CONFIG_EEPRO100_PIO is not set
# CONFIG_E100 is not set
# CONFIG_FEALNX is not set
# CONFIG_NATSEMI is not set
...
...
@@ -465,13 +522,17 @@ CONFIG_EEPRO100=y
# CONFIG_HAMACHI is not set
# CONFIG_YELLOWFIN is not set
# CONFIG_R8169 is not set
# CONFIG_SIS190 is not set
# CONFIG_SKGE is not set
# CONFIG_SK98LIN is not set
# CONFIG_VIA_VELOCITY is not set
# CONFIG_TIGON3 is not set
# CONFIG_BNX2 is not set
#
# Ethernet (10000 Mbit)
#
# CONFIG_CHELSIO_T1 is not set
# CONFIG_IXGB is not set
# CONFIG_S2IO is not set
...
...
@@ -496,6 +557,8 @@ CONFIG_EEPRO100=y
# CONFIG_NET_FC is not set
# CONFIG_SHAPER is not set
# CONFIG_NETCONSOLE is not set
# CONFIG_NETPOLL is not set
# CONFIG_NET_POLL_CONTROLLER is not set
#
# ISDN subsystem
...
...
@@ -524,18 +587,6 @@ CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
CONFIG_INPUT_EVDEV=y
# CONFIG_INPUT_EVBUG is not set
#
# Input I/O drivers
#
# CONFIG_GAMEPORT is not set
CONFIG_SOUND_GAMEPORT=y
CONFIG_SERIO=y
CONFIG_SERIO_I8042=y
CONFIG_SERIO_SERPORT=y
# CONFIG_SERIO_CT82C710 is not set
# CONFIG_SERIO_PCIPS2 is not set
# CONFIG_SERIO_RAW is not set
#
# Input Device Drivers
#
...
...
@@ -553,6 +604,17 @@ CONFIG_MOUSE_PS2=y
# CONFIG_INPUT_TOUCHSCREEN is not set
# CONFIG_INPUT_MISC is not set
#
# Hardware I/O ports
#
CONFIG_SERIO=y
CONFIG_SERIO_I8042=y
CONFIG_SERIO_SERPORT=y
# CONFIG_SERIO_PCIPS2 is not set
CONFIG_SERIO_LIBPS2=y
# CONFIG_SERIO_RAW is not set
# CONFIG_GAMEPORT is not set
#
# Character devices
#
...
...
@@ -571,7 +633,6 @@ CONFIG_SERIAL_8250_NR_UARTS=4
CONFIG_SERIAL_8250_EXTENDED=y
CONFIG_SERIAL_8250_SHARE_IRQ=y
# CONFIG_SERIAL_8250_DETECT_IRQ is not set
# CONFIG_SERIAL_8250_MULTIPORT is not set
# CONFIG_SERIAL_8250_RSA is not set
#
...
...
@@ -579,6 +640,7 @@ CONFIG_SERIAL_8250_SHARE_IRQ=y
#
CONFIG_SERIAL_CORE=y
CONFIG_SERIAL_CORE_CONSOLE=y
# CONFIG_SERIAL_JSM is not set
CONFIG_UNIX98_PTYS=y
CONFIG_LEGACY_PTYS=y
CONFIG_LEGACY_PTY_COUNT=256
...
...
@@ -603,14 +665,22 @@ CONFIG_EFI_RTC=y
#
CONFIG_AGP=m
CONFIG_AGP_I460=m
CONFIG_DRM=
y
CONFIG_DRM=
m
# CONFIG_DRM_TDFX is not set
CONFIG_DRM_R128=m
# CONFIG_DRM_RADEON is not set
# CONFIG_DRM_MGA is not set
# CONFIG_DRM_SIS is not set
# CONFIG_DRM_VIA is not set
# CONFIG_DRM_SAVAGE is not set
# CONFIG_RAW_DRIVER is not set
# CONFIG_HPET is not set
# CONFIG_HANGCHECK_TIMER is not set
#
# TPM devices
#
# CONFIG_TCG_TPM is not set
#
# I2C support
...
...
@@ -635,7 +705,7 @@ CONFIG_I2C_ALGOBIT=y
# CONFIG_I2C_AMD8111 is not set
# CONFIG_I2C_I801 is not set
# CONFIG_I2C_I810 is not set
# CONFIG_I2C_
ISA
is not set
# CONFIG_I2C_
PIIX4
is not set
# CONFIG_I2C_NFORCE2 is not set
# CONFIG_I2C_PARPORT_LIGHT is not set
# CONFIG_I2C_PROSAVAGE is not set
...
...
@@ -651,16 +721,43 @@ CONFIG_I2C_ALGOBIT=y
# CONFIG_I2C_PCA_ISA is not set
#
#
Hardware Sensors
Chip support
#
Miscellaneous I2C
Chip support
#
# CONFIG_I2C_SENSOR is not set
# CONFIG_SENSORS_DS1337 is not set
# CONFIG_SENSORS_DS1374 is not set
# CONFIG_SENSORS_EEPROM is not set
# CONFIG_SENSORS_PCF8574 is not set
# CONFIG_SENSORS_PCA9539 is not set
# CONFIG_SENSORS_PCF8591 is not set
# CONFIG_SENSORS_RTC8564 is not set
# CONFIG_SENSORS_MAX6875 is not set
# CONFIG_I2C_DEBUG_CORE is not set
# CONFIG_I2C_DEBUG_ALGO is not set
# CONFIG_I2C_DEBUG_BUS is not set
# CONFIG_I2C_DEBUG_CHIP is not set
#
# Dallas's 1-wire bus
#
# CONFIG_W1 is not set
#
# Hardware Monitoring support
#
CONFIG_HWMON=y
# CONFIG_HWMON_VID is not set
# CONFIG_SENSORS_ADM1021 is not set
# CONFIG_SENSORS_ADM1025 is not set
# CONFIG_SENSORS_ADM1026 is not set
# CONFIG_SENSORS_ADM1031 is not set
# CONFIG_SENSORS_ADM9240 is not set
# CONFIG_SENSORS_ASB100 is not set
# CONFIG_SENSORS_ATXP1 is not set
# CONFIG_SENSORS_DS1621 is not set
# CONFIG_SENSORS_FSCHER is not set
# CONFIG_SENSORS_FSCPOS is not set
# CONFIG_SENSORS_GL518SM is not set
# CONFIG_SENSORS_GL520SM is not set
# CONFIG_SENSORS_IT87 is not set
# CONFIG_SENSORS_LM63 is not set
# CONFIG_SENSORS_LM75 is not set
...
...
@@ -671,33 +768,26 @@ CONFIG_I2C_ALGOBIT=y
# CONFIG_SENSORS_LM85 is not set
# CONFIG_SENSORS_LM87 is not set
# CONFIG_SENSORS_LM90 is not set
# CONFIG_SENSORS_LM92 is not set
# CONFIG_SENSORS_MAX1619 is not set
# CONFIG_SENSORS_PC87360 is not set
# CONFIG_SENSORS_SIS5595 is not set
# CONFIG_SENSORS_SMSC47M1 is not set
# CONFIG_SENSORS_SMSC47B397 is not set
# CONFIG_SENSORS_VIA686A is not set
# CONFIG_SENSORS_W83781D is not set
# CONFIG_SENSORS_W83792D is not set
# CONFIG_SENSORS_W83L785TS is not set
# CONFIG_SENSORS_W83627HF is not set
# CONFIG_SENSORS_W83627EHF is not set
# CONFIG_HWMON_DEBUG_CHIP is not set
#
# Other I2C Chip support
#
# CONFIG_SENSORS_EEPROM is not set
# CONFIG_SENSORS_PCF8574 is not set
# CONFIG_SENSORS_PCF8591 is not set
# CONFIG_SENSORS_RTC8564 is not set
# CONFIG_I2C_DEBUG_CORE is not set
# CONFIG_I2C_DEBUG_ALGO is not set
# CONFIG_I2C_DEBUG_BUS is not set
# CONFIG_I2C_DEBUG_CHIP is not set
#
# Dallas's 1-wire bus
# Misc devices
#
# CONFIG_W1 is not set
#
# M
isc device
s
# M
ultimedia Capabilities Port driver
s
#
#
...
...
@@ -752,11 +842,12 @@ CONFIG_SND_OPL3_LIB=m
# CONFIG_SND_MTPAV is not set
# CONFIG_SND_SERIAL_U16550 is not set
# CONFIG_SND_MPU401 is not set
CONFIG_SND_AC97_CODEC=m
CONFIG_SND_AC97_BUS=m
#
# PCI devices
#
CONFIG_SND_AC97_CODEC=m
# CONFIG_SND_ALI5451 is not set
# CONFIG_SND_ATIIXP is not set
# CONFIG_SND_ATIIXP_MODEM is not set
...
...
@@ -768,6 +859,8 @@ CONFIG_SND_AC97_CODEC=m
# CONFIG_SND_CS46XX is not set
CONFIG_SND_CS4281=m
# CONFIG_SND_EMU10K1 is not set
# CONFIG_SND_EMU10K1X is not set
# CONFIG_SND_CA0106 is not set
# CONFIG_SND_KORG1212 is not set
# CONFIG_SND_MIXART is not set
# CONFIG_SND_NM256 is not set
...
...
@@ -775,9 +868,10 @@ CONFIG_SND_CS4281=m
# CONFIG_SND_RME96 is not set
# CONFIG_SND_RME9652 is not set
# CONFIG_SND_HDSP is not set
# CONFIG_SND_HDSPM is not set
# CONFIG_SND_TRIDENT is not set
# CONFIG_SND_YMFPCI is not set
# CONFIG_SND_A
LS4000
is not set
# CONFIG_SND_A
D1889
is not set
# CONFIG_SND_CMIPCI is not set
# CONFIG_SND_ENS1370 is not set
# CONFIG_SND_ENS1371 is not set
...
...
@@ -791,13 +885,14 @@ CONFIG_SND_CS4281=m
# CONFIG_SND_INTEL8X0M is not set
# CONFIG_SND_SONICVIBES is not set
# CONFIG_SND_VIA82XX is not set
# CONFIG_SND_VIA82XX_MODEM is not set
# CONFIG_SND_VX222 is not set
# CONFIG_SND_HDA_INTEL is not set
#
# USB devices
#
# CONFIG_SND_USB_AUDIO is not set
# CONFIG_SND_USB_USX2Y is not set
#
# Open Sound System
...
...
@@ -807,6 +902,8 @@ CONFIG_SND_CS4281=m
#
# USB support
#
CONFIG_USB_ARCH_HAS_HCD=y
CONFIG_USB_ARCH_HAS_OHCI=y
CONFIG_USB=m
# CONFIG_USB_DEBUG is not set
...
...
@@ -818,35 +915,38 @@ CONFIG_USB_DEVICEFS=y
# CONFIG_USB_DYNAMIC_MINORS is not set
# CONFIG_USB_SUSPEND is not set
# CONFIG_USB_OTG is not set
CONFIG_USB_ARCH_HAS_HCD=y
CONFIG_USB_ARCH_HAS_OHCI=y
#
# USB Host Controller Drivers
#
# CONFIG_USB_EHCI_HCD is not set
# CONFIG_USB_ISP116X_HCD is not set
# CONFIG_USB_OHCI_HCD is not set
CONFIG_USB_UHCI_HCD=m
# CONFIG_USB_SL811_HCD is not set
#
# USB Device Class drivers
#
CONFIG_USB_AUDIO=m
# CONFIG_OBSOLETE_OSS_USB_DRIVER is not set
CONFIG_USB_BLUETOOTH_TTY=m
CONFIG_USB_MIDI=m
CONFIG_USB_ACM=m
CONFIG_USB_PRINTER=m
#
# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' may also be needed; see USB_STORAGE Help for more information
#
CONFIG_USB_STORAGE=m
# CONFIG_USB_STORAGE_DEBUG is not set
# CONFIG_USB_STORAGE_RW_DETECT is not set
# CONFIG_USB_STORAGE_DATAFAB is not set
# CONFIG_USB_STORAGE_FREECOM is not set
# CONFIG_USB_STORAGE_ISD200 is not set
# CONFIG_USB_STORAGE_DPCM is not set
# CONFIG_USB_STORAGE_
HP8200e
is not set
# CONFIG_USB_STORAGE_
USBAT
is not set
# CONFIG_USB_STORAGE_SDDR09 is not set
# CONFIG_USB_STORAGE_SDDR55 is not set
# CONFIG_USB_STORAGE_JUMPSHOT is not set
# CONFIG_USB_STORAGE_ONETOUCH is not set
#
# USB Input Devices
...
...
@@ -863,19 +963,23 @@ CONFIG_USB_HIDDEV=y
# CONFIG_USB_MOUSE is not set
# CONFIG_USB_AIPTEK is not set
# CONFIG_USB_WACOM is not set
# CONFIG_USB_ACECAD is not set
# CONFIG_USB_KBTAB is not set
# CONFIG_USB_POWERMATE is not set
# CONFIG_USB_MTOUCH is not set
# CONFIG_USB_ITMTOUCH is not set
# CONFIG_USB_EGALAX is not set
# CONFIG_USB_YEALINK is not set
# CONFIG_USB_XPAD is not set
# CONFIG_USB_ATI_REMOTE is not set
# CONFIG_USB_KEYSPAN_REMOTE is not set
# CONFIG_USB_APPLETOUCH is not set
#
# USB Imaging devices
#
# CONFIG_USB_MDC800 is not set
# CONFIG_USB_MICROTEK is not set
# CONFIG_USB_HPUSBSCSI is not set
#
# USB Multimedia devices
...
...
@@ -894,6 +998,7 @@ CONFIG_USB_HIDDEV=y
# CONFIG_USB_PEGASUS is not set
# CONFIG_USB_RTL8150 is not set
# CONFIG_USB_USBNET is not set
CONFIG_USB_MON=y
#
# USB port drivers
...
...
@@ -909,7 +1014,6 @@ CONFIG_USB_HIDDEV=y
#
# CONFIG_USB_EMI62 is not set
# CONFIG_USB_EMI26 is not set
# CONFIG_USB_TIGL is not set
# CONFIG_USB_AUERSWALD is not set
# CONFIG_USB_RIO500 is not set
# CONFIG_USB_LEGOTOWER is not set
...
...
@@ -918,10 +1022,12 @@ CONFIG_USB_HIDDEV=y
# CONFIG_USB_CYTHERM is not set
# CONFIG_USB_PHIDGETKIT is not set
# CONFIG_USB_PHIDGETSERVO is not set
# CONFIG_USB_IDMOUSE is not set
# CONFIG_USB_LD is not set
# CONFIG_USB_TEST is not set
#
# USB
ATM/DSL drivers
# USB
DSL modem support
#
#
...
...
@@ -929,11 +1035,26 @@ CONFIG_USB_HIDDEV=y
#
# CONFIG_USB_GADGET is not set
#
# MMC/SD Card support
#
# CONFIG_MMC is not set
#
# InfiniBand support
#
# CONFIG_INFINIBAND is not set
#
# SN Devices
#
#
# File systems
#
CONFIG_EXT2_FS=y
# CONFIG_EXT2_FS_XATTR is not set
# CONFIG_EXT2_FS_XIP is not set
CONFIG_EXT3_FS=y
CONFIG_EXT3_FS_XATTR=y
# CONFIG_EXT3_FS_POSIX_ACL is not set
...
...
@@ -945,17 +1066,20 @@ CONFIG_FS_MBCACHE=y
# CONFIG_JFS_FS is not set
CONFIG_FS_POSIX_ACL=y
CONFIG_XFS_FS=y
# CONFIG_XFS_RT is not set
CONFIG_XFS_EXPORT=y
CONFIG_XFS_QUOTA=y
CONFIG_XFS_SECURITY=y
CONFIG_XFS_POSIX_ACL=y
# CONFIG_XFS_RT is not set
# CONFIG_MINIX_FS is not set
# CONFIG_ROMFS_FS is not set
CONFIG_INOTIFY=y
# CONFIG_QUOTA is not set
CONFIG_QUOTACTL=y
CONFIG_DNOTIFY=y
CONFIG_AUTOFS_FS=m
CONFIG_AUTOFS4_FS=m
# CONFIG_FUSE_FS is not set
#
# CD-ROM/DVD Filesystems
...
...
@@ -982,14 +1106,11 @@ CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
CONFIG_PROC_FS=y
CONFIG_PROC_KCORE=y
CONFIG_SYSFS=y
# CONFIG_DEVFS_FS is not set
CONFIG_DEVPTS_FS_XATTR=y
CONFIG_DEVPTS_FS_SECURITY=y
CONFIG_TMPFS=y
# CONFIG_TMPFS_XATTR is not set
CONFIG_HUGETLBFS=y
CONFIG_HUGETLB_PAGE=y
CONFIG_RAMFS=y
# CONFIG_RELAYFS_FS is not set
#
# Miscellaneous filesystems
...
...
@@ -1013,15 +1134,18 @@ CONFIG_RAMFS=y
#
CONFIG_NFS_FS=m
CONFIG_NFS_V3=y
# CONFIG_NFS_V3_ACL is not set
CONFIG_NFS_V4=y
# CONFIG_NFS_DIRECTIO is not set
CONFIG_NFSD=m
CONFIG_NFSD_V3=y
# CONFIG_NFSD_V3_ACL is not set
CONFIG_NFSD_V4=y
CONFIG_NFSD_TCP=y
CONFIG_LOCKD=m
CONFIG_LOCKD_V4=y
CONFIG_EXPORTFS=m
CONFIG_EXPORTFS=y
CONFIG_NFS_COMMON=y
CONFIG_SUNRPC=m
CONFIG_SUNRPC_GSS=m
CONFIG_RPCSEC_GSS_KRB5=m
...
...
@@ -1031,9 +1155,11 @@ CONFIG_CIFS=m
CONFIG_CIFS_STATS=y
CONFIG_CIFS_XATTR=y
CONFIG_CIFS_POSIX=y
# CONFIG_CIFS_EXPERIMENTAL is not set
# CONFIG_NCP_FS is not set
# CONFIG_CODA_FS is not set
# CONFIG_AFS_FS is not set
# CONFIG_9P_FS is not set
#
# Partition Types
...
...
@@ -1103,8 +1229,12 @@ CONFIG_NLS_UTF8=m
# Library routines
#
# CONFIG_CRC_CCITT is not set
# CONFIG_CRC16 is not set
CONFIG_CRC32=y
# CONFIG_LIBCRC32C is not set
CONFIG_GENERIC_HARDIRQS=y
CONFIG_GENERIC_IRQ_PROBE=y
CONFIG_GENERIC_PENDING_IRQ=y
#
# Profiling support
...
...
@@ -1115,14 +1245,20 @@ CONFIG_OPROFILE=y
#
# Kernel hacking
#
# CONFIG_PRINTK_TIME is not set
CONFIG_DEBUG_KERNEL=y
CONFIG_MAGIC_SYSRQ=y
CONFIG_LOG_BUF_SHIFT=16
CONFIG_DETECT_SOFTLOCKUP=y
# CONFIG_SCHEDSTATS is not set
# CONFIG_DEBUG_SLAB is not set
CONFIG_DEBUG_PREEMPT=y
# CONFIG_DEBUG_SPINLOCK is not set
# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
# CONFIG_DEBUG_KOBJECT is not set
# CONFIG_DEBUG_INFO is not set
# CONFIG_DEBUG_FS is not set
# CONFIG_KPROBES is not set
# CONFIG_IA64_GRANULE_16MB is not set
CONFIG_IA64_GRANULE_64MB=y
# CONFIG_IA64_PRINT_HAZARDS is not set
...
...
@@ -1149,6 +1285,7 @@ CONFIG_CRYPTO_MD5=y
# CONFIG_CRYPTO_SHA256 is not set
# CONFIG_CRYPTO_SHA512 is not set
# CONFIG_CRYPTO_WP512 is not set
# CONFIG_CRYPTO_TGR192 is not set
CONFIG_CRYPTO_DES=y
# CONFIG_CRYPTO_BLOWFISH is not set
# CONFIG_CRYPTO_TWOFISH is not set
...
...
@@ -1164,3 +1301,7 @@ CONFIG_CRYPTO_DES=y
# CONFIG_CRYPTO_MICHAEL_MIC is not set
# CONFIG_CRYPTO_CRC32C is not set
# CONFIG_CRYPTO_TEST is not set
#
# Hardware crypto devices
#
arch/ia64/configs/gensparse_defconfig
0 → 100644
浏览文件 @
8a212ab6
#
# Automatically generated make config: don't edit
# Linux kernel version: 2.6.14-rc2
# Wed Sep 28 08:27:29 2005
#
#
# Code maturity level options
#
CONFIG_EXPERIMENTAL=y
CONFIG_CLEAN_COMPILE=y
CONFIG_LOCK_KERNEL=y
CONFIG_INIT_ENV_ARG_LIMIT=32
#
# General setup
#
CONFIG_LOCALVERSION=""
CONFIG_LOCALVERSION_AUTO=y
CONFIG_SWAP=y
CONFIG_SYSVIPC=y
CONFIG_POSIX_MQUEUE=y
# CONFIG_BSD_PROCESS_ACCT is not set
CONFIG_SYSCTL=y
# CONFIG_AUDIT is not set
CONFIG_HOTPLUG=y
CONFIG_KOBJECT_UEVENT=y
CONFIG_IKCONFIG=y
CONFIG_IKCONFIG_PROC=y
# CONFIG_CPUSETS is not set
CONFIG_INITRAMFS_SOURCE=""
# CONFIG_EMBEDDED is not set
CONFIG_KALLSYMS=y
CONFIG_KALLSYMS_ALL=y
# CONFIG_KALLSYMS_EXTRA_PASS is not set
CONFIG_PRINTK=y
CONFIG_BUG=y
CONFIG_BASE_FULL=y
CONFIG_FUTEX=y
CONFIG_EPOLL=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_TINY_SHMEM is not set
CONFIG_BASE_SMALL=0
#
# Loadable module support
#
CONFIG_MODULES=y
CONFIG_MODULE_UNLOAD=y
# CONFIG_MODULE_FORCE_UNLOAD is not set
CONFIG_OBSOLETE_MODPARM=y
CONFIG_MODVERSIONS=y
# CONFIG_MODULE_SRCVERSION_ALL is not set
CONFIG_KMOD=y
CONFIG_STOP_MACHINE=y
#
# Processor type and features
#
CONFIG_IA64=y
CONFIG_64BIT=y
CONFIG_MMU=y
CONFIG_RWSEM_XCHGADD_ALGORITHM=y
CONFIG_GENERIC_CALIBRATE_DELAY=y
CONFIG_TIME_INTERPOLATION=y
CONFIG_EFI=y
CONFIG_GENERIC_IOMAP=y
CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
CONFIG_IA64_GENERIC=y
# CONFIG_IA64_DIG is not set
# CONFIG_IA64_HP_ZX1 is not set
# CONFIG_IA64_HP_ZX1_SWIOTLB is not set
# CONFIG_IA64_SGI_SN2 is not set
# CONFIG_IA64_HP_SIM is not set
# CONFIG_ITANIUM is not set
CONFIG_MCKINLEY=y
# CONFIG_IA64_PAGE_SIZE_4KB is not set
# CONFIG_IA64_PAGE_SIZE_8KB is not set
CONFIG_IA64_PAGE_SIZE_16KB=y
# CONFIG_IA64_PAGE_SIZE_64KB is not set
# CONFIG_HZ_100 is not set
CONFIG_HZ_250=y
# CONFIG_HZ_1000 is not set
CONFIG_HZ=250
CONFIG_IA64_L1_CACHE_SHIFT=7
CONFIG_IA64_CYCLONE=y
CONFIG_IOSAPIC=y
# CONFIG_IA64_SGI_SN_XP is not set
CONFIG_FORCE_MAX_ZONEORDER=17
CONFIG_SMP=y
CONFIG_NR_CPUS=512
CONFIG_HOTPLUG_CPU=y
# CONFIG_SCHED_SMT is not set
# CONFIG_PREEMPT is not set
CONFIG_SELECT_MEMORY_MODEL=y
# CONFIG_FLATMEM_MANUAL is not set
# CONFIG_DISCONTIGMEM_MANUAL is not set
CONFIG_SPARSEMEM_MANUAL=y
CONFIG_SPARSEMEM=y
CONFIG_NEED_MULTIPLE_NODES=y
CONFIG_HAVE_MEMORY_PRESENT=y
# CONFIG_SPARSEMEM_STATIC is not set
CONFIG_SPARSEMEM_EXTREME=y
CONFIG_ARCH_SELECT_MEMORY_MODEL=y
CONFIG_ARCH_DISCONTIGMEM_ENABLE=y
CONFIG_ARCH_FLATMEM_ENABLE=y
CONFIG_ARCH_SPARSEMEM_ENABLE=y
CONFIG_ARCH_DISCONTIGMEM_DEFAULT=y
CONFIG_NUMA=y
CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID=y
CONFIG_IA32_SUPPORT=y
CONFIG_COMPAT=y
CONFIG_IA64_MCA_RECOVERY=y
CONFIG_PERFMON=y
CONFIG_IA64_PALINFO=y
#
# Firmware Drivers
#
CONFIG_EFI_VARS=y
CONFIG_EFI_PCDP=y
# CONFIG_DELL_RBU is not set
CONFIG_BINFMT_ELF=y
CONFIG_BINFMT_MISC=m
#
# Power management and ACPI
#
CONFIG_PM=y
# CONFIG_PM_DEBUG is not set
#
# ACPI (Advanced Configuration and Power Interface) Support
#
CONFIG_ACPI=y
CONFIG_ACPI_BUTTON=m
CONFIG_ACPI_FAN=m
CONFIG_ACPI_PROCESSOR=m
CONFIG_ACPI_HOTPLUG_CPU=y
CONFIG_ACPI_THERMAL=m
CONFIG_ACPI_NUMA=y
CONFIG_ACPI_BLACKLIST_YEAR=0
# CONFIG_ACPI_DEBUG is not set
CONFIG_ACPI_POWER=y
CONFIG_ACPI_SYSTEM=y
CONFIG_ACPI_CONTAINER=m
#
# CPU Frequency scaling
#
# CONFIG_CPU_FREQ is not set
#
# Bus options (PCI, PCMCIA)
#
CONFIG_PCI=y
CONFIG_PCI_DOMAINS=y
# CONFIG_PCI_MSI is not set
CONFIG_PCI_LEGACY_PROC=y
# CONFIG_PCI_DEBUG is not set
#
# PCI Hotplug Support
#
CONFIG_HOTPLUG_PCI=m
# CONFIG_HOTPLUG_PCI_FAKE is not set
CONFIG_HOTPLUG_PCI_ACPI=m
# CONFIG_HOTPLUG_PCI_ACPI_IBM is not set
# CONFIG_HOTPLUG_PCI_CPCI is not set
# CONFIG_HOTPLUG_PCI_SHPC is not set
# CONFIG_HOTPLUG_PCI_SGI is not set
#
# PCCARD (PCMCIA/CardBus) support
#
# CONFIG_PCCARD is not set
#
# Networking
#
CONFIG_NET=y
#
# Networking options
#
CONFIG_PACKET=y
# CONFIG_PACKET_MMAP is not set
CONFIG_UNIX=y
# CONFIG_NET_KEY is not set
CONFIG_INET=y
CONFIG_IP_MULTICAST=y
# CONFIG_IP_ADVANCED_ROUTER is not set
CONFIG_IP_FIB_HASH=y
# CONFIG_IP_PNP is not set
# CONFIG_NET_IPIP is not set
# CONFIG_NET_IPGRE is not set
# CONFIG_IP_MROUTE is not set
CONFIG_ARPD=y
CONFIG_SYN_COOKIES=y
# CONFIG_INET_AH is not set
# CONFIG_INET_ESP is not set
# CONFIG_INET_IPCOMP is not set
# CONFIG_INET_TUNNEL is not set
CONFIG_INET_DIAG=y
CONFIG_INET_TCP_DIAG=y
# CONFIG_TCP_CONG_ADVANCED is not set
CONFIG_TCP_CONG_BIC=y
# CONFIG_IPV6 is not set
# CONFIG_NETFILTER is not set
#
# DCCP Configuration (EXPERIMENTAL)
#
# CONFIG_IP_DCCP is not set
#
# SCTP Configuration (EXPERIMENTAL)
#
# CONFIG_IP_SCTP is not set
# CONFIG_ATM is not set
# CONFIG_BRIDGE is not set
# CONFIG_VLAN_8021Q is not set
# CONFIG_DECNET is not set
# CONFIG_LLC2 is not set
# CONFIG_IPX is not set
# CONFIG_ATALK is not set
# CONFIG_X25 is not set
# CONFIG_LAPB is not set
# CONFIG_NET_DIVERT is not set
# CONFIG_ECONET is not set
# CONFIG_WAN_ROUTER is not set
# CONFIG_NET_SCHED is not set
# CONFIG_NET_CLS_ROUTE is not set
#
# Network testing
#
# CONFIG_NET_PKTGEN is not set
# CONFIG_HAMRADIO is not set
# CONFIG_IRDA is not set
# CONFIG_BT is not set
# CONFIG_IEEE80211 is not set
#
# Device Drivers
#
#
# Generic Driver Options
#
CONFIG_STANDALONE=y
CONFIG_PREVENT_FIRMWARE_BUILD=y
CONFIG_FW_LOADER=m
# CONFIG_DEBUG_DRIVER is not set
#
# Connector - unified userspace <-> kernelspace linker
#
# CONFIG_CONNECTOR is not set
#
# Memory Technology Devices (MTD)
#
# CONFIG_MTD is not set
#
# Parallel port support
#
# CONFIG_PARPORT is not set
#
# Plug and Play support
#
# CONFIG_PNP is not set
#
# Block devices
#
# CONFIG_BLK_CPQ_DA is not set
# CONFIG_BLK_CPQ_CISS_DA is not set
# CONFIG_BLK_DEV_DAC960 is not set
# CONFIG_BLK_DEV_UMEM is not set
# CONFIG_BLK_DEV_COW_COMMON is not set
CONFIG_BLK_DEV_LOOP=m
CONFIG_BLK_DEV_CRYPTOLOOP=m
CONFIG_BLK_DEV_NBD=m
# CONFIG_BLK_DEV_SX8 is not set
# CONFIG_BLK_DEV_UB is not set
CONFIG_BLK_DEV_RAM=y
CONFIG_BLK_DEV_RAM_COUNT=16
CONFIG_BLK_DEV_RAM_SIZE=4096
CONFIG_BLK_DEV_INITRD=y
# CONFIG_CDROM_PKTCDVD is not set
#
# IO Schedulers
#
CONFIG_IOSCHED_NOOP=y
CONFIG_IOSCHED_AS=y
CONFIG_IOSCHED_DEADLINE=y
CONFIG_IOSCHED_CFQ=y
# CONFIG_ATA_OVER_ETH is not set
#
# ATA/ATAPI/MFM/RLL support
#
CONFIG_IDE=y
CONFIG_BLK_DEV_IDE=y
#
# Please see Documentation/ide.txt for help/info on IDE drives
#
# CONFIG_BLK_DEV_IDE_SATA is not set
CONFIG_BLK_DEV_IDEDISK=y
# CONFIG_IDEDISK_MULTI_MODE is not set
CONFIG_BLK_DEV_IDECD=y
# CONFIG_BLK_DEV_IDETAPE is not set
CONFIG_BLK_DEV_IDEFLOPPY=y
CONFIG_BLK_DEV_IDESCSI=m
# CONFIG_IDE_TASK_IOCTL is not set
#
# IDE chipset support/bugfixes
#
CONFIG_IDE_GENERIC=y
CONFIG_BLK_DEV_IDEPCI=y
# CONFIG_IDEPCI_SHARE_IRQ is not set
# CONFIG_BLK_DEV_OFFBOARD is not set
CONFIG_BLK_DEV_GENERIC=y
# CONFIG_BLK_DEV_OPTI621 is not set
CONFIG_BLK_DEV_IDEDMA_PCI=y
# CONFIG_BLK_DEV_IDEDMA_FORCED is not set
CONFIG_IDEDMA_PCI_AUTO=y
# CONFIG_IDEDMA_ONLYDISK is not set
# CONFIG_BLK_DEV_AEC62XX is not set
# CONFIG_BLK_DEV_ALI15X3 is not set
# CONFIG_BLK_DEV_AMD74XX is not set
CONFIG_BLK_DEV_CMD64X=y
# CONFIG_BLK_DEV_TRIFLEX is not set
# CONFIG_BLK_DEV_CY82C693 is not set
# CONFIG_BLK_DEV_CS5520 is not set
# CONFIG_BLK_DEV_CS5530 is not set
# CONFIG_BLK_DEV_HPT34X is not set
# CONFIG_BLK_DEV_HPT366 is not set
# CONFIG_BLK_DEV_SC1200 is not set
CONFIG_BLK_DEV_PIIX=y
# CONFIG_BLK_DEV_IT821X is not set
# CONFIG_BLK_DEV_NS87415 is not set
# CONFIG_BLK_DEV_PDC202XX_OLD is not set
# CONFIG_BLK_DEV_PDC202XX_NEW is not set
# CONFIG_BLK_DEV_SVWKS is not set
CONFIG_BLK_DEV_SGIIOC4=y
# CONFIG_BLK_DEV_SIIMAGE is not set
# CONFIG_BLK_DEV_SLC90E66 is not set
# CONFIG_BLK_DEV_TRM290 is not set
# CONFIG_BLK_DEV_VIA82CXXX is not set
# CONFIG_IDE_ARM is not set
CONFIG_BLK_DEV_IDEDMA=y
# CONFIG_IDEDMA_IVB is not set
CONFIG_IDEDMA_AUTO=y
# CONFIG_BLK_DEV_HD is not set
#
# SCSI device support
#
# CONFIG_RAID_ATTRS is not set
CONFIG_SCSI=y
CONFIG_SCSI_PROC_FS=y
#
# SCSI support type (disk, tape, CD-ROM)
#
CONFIG_BLK_DEV_SD=y
CONFIG_CHR_DEV_ST=m
# CONFIG_CHR_DEV_OSST is not set
CONFIG_BLK_DEV_SR=m
# CONFIG_BLK_DEV_SR_VENDOR is not set
CONFIG_CHR_DEV_SG=m
# CONFIG_CHR_DEV_SCH is not set
#
# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
#
# CONFIG_SCSI_MULTI_LUN is not set
# CONFIG_SCSI_CONSTANTS is not set
# CONFIG_SCSI_LOGGING is not set
#
# SCSI Transport Attributes
#
CONFIG_SCSI_SPI_ATTRS=y
CONFIG_SCSI_FC_ATTRS=y
# CONFIG_SCSI_ISCSI_ATTRS is not set
# CONFIG_SCSI_SAS_ATTRS is not set
#
# SCSI low-level drivers
#
# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
# CONFIG_SCSI_3W_9XXX is not set
# CONFIG_SCSI_ACARD is not set
# CONFIG_SCSI_AACRAID is not set
# CONFIG_SCSI_AIC7XXX is not set
# CONFIG_SCSI_AIC7XXX_OLD is not set
# CONFIG_SCSI_AIC79XX is not set
# CONFIG_MEGARAID_NEWGEN is not set
# CONFIG_MEGARAID_LEGACY is not set
CONFIG_SCSI_SATA=y
# CONFIG_SCSI_SATA_AHCI is not set
# CONFIG_SCSI_SATA_SVW is not set
# CONFIG_SCSI_ATA_PIIX is not set
# CONFIG_SCSI_SATA_MV is not set
# CONFIG_SCSI_SATA_NV is not set
# CONFIG_SCSI_SATA_PROMISE is not set
# CONFIG_SCSI_SATA_QSTOR is not set
# CONFIG_SCSI_SATA_SX4 is not set
# CONFIG_SCSI_SATA_SIL is not set
# CONFIG_SCSI_SATA_SIS is not set
# CONFIG_SCSI_SATA_ULI is not set
# CONFIG_SCSI_SATA_VIA is not set
CONFIG_SCSI_SATA_VITESSE=y
# CONFIG_SCSI_DMX3191D is not set
# CONFIG_SCSI_FUTURE_DOMAIN is not set
# CONFIG_SCSI_IPS is not set
# CONFIG_SCSI_INITIO is not set
# CONFIG_SCSI_INIA100 is not set
CONFIG_SCSI_SYM53C8XX_2=y
CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=1
CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16
CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64
# CONFIG_SCSI_SYM53C8XX_IOMAPPED 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_1040 is not set
CONFIG_SCSI_QLA2XXX=y
CONFIG_SCSI_QLA21XX=m
CONFIG_SCSI_QLA22XX=m
CONFIG_SCSI_QLA2300=m
CONFIG_SCSI_QLA2322=m
# CONFIG_SCSI_QLA6312 is not set
# CONFIG_SCSI_QLA24XX is not set
# CONFIG_SCSI_LPFC is not set
# CONFIG_SCSI_DC395x is not set
# CONFIG_SCSI_DC390T is not set
# CONFIG_SCSI_DEBUG is not set
#
# Multi-device support (RAID and LVM)
#
CONFIG_MD=y
CONFIG_BLK_DEV_MD=m
CONFIG_MD_LINEAR=m
CONFIG_MD_RAID0=m
CONFIG_MD_RAID1=m
# CONFIG_MD_RAID10 is not set
CONFIG_MD_RAID5=m
CONFIG_MD_RAID6=m
CONFIG_MD_MULTIPATH=m
# CONFIG_MD_FAULTY is not set
CONFIG_BLK_DEV_DM=m
CONFIG_DM_CRYPT=m
CONFIG_DM_SNAPSHOT=m
CONFIG_DM_MIRROR=m
CONFIG_DM_ZERO=m
CONFIG_DM_MULTIPATH=m
# CONFIG_DM_MULTIPATH_EMC is not set
#
# Fusion MPT device support
#
CONFIG_FUSION=y
CONFIG_FUSION_SPI=y
CONFIG_FUSION_FC=m
CONFIG_FUSION_MAX_SGE=128
# CONFIG_FUSION_CTL is not set
#
# IEEE 1394 (FireWire) support
#
# CONFIG_IEEE1394 is not set
#
# I2O device support
#
# CONFIG_I2O is not set
#
# Network device support
#
CONFIG_NETDEVICES=y
CONFIG_DUMMY=m
# CONFIG_BONDING is not set
# CONFIG_EQUALIZER is not set
# CONFIG_TUN is not set
#
# ARCnet devices
#
# CONFIG_ARCNET is not set
#
# PHY device support
#
# CONFIG_PHYLIB is not set
#
# Ethernet (10 or 100Mbit)
#
CONFIG_NET_ETHERNET=y
CONFIG_MII=m
# CONFIG_HAPPYMEAL is not set
# CONFIG_SUNGEM is not set
# CONFIG_NET_VENDOR_3COM is not set
#
# Tulip family network device support
#
CONFIG_NET_TULIP=y
# CONFIG_DE2104X is not set
CONFIG_TULIP=m
# CONFIG_TULIP_MWI is not set
# CONFIG_TULIP_MMIO is not set
# CONFIG_TULIP_NAPI is not set
# CONFIG_DE4X5 is not set
# CONFIG_WINBOND_840 is not set
# CONFIG_DM9102 is not set
# CONFIG_ULI526X is not set
# CONFIG_HP100 is not set
CONFIG_NET_PCI=y
# CONFIG_PCNET32 is not set
# CONFIG_AMD8111_ETH is not set
# CONFIG_ADAPTEC_STARFIRE is not set
# CONFIG_B44 is not set
# CONFIG_FORCEDETH is not set
# CONFIG_DGRS is not set
CONFIG_EEPRO100=m
CONFIG_E100=m
# CONFIG_FEALNX is not set
# CONFIG_NATSEMI is not set
# CONFIG_NE2K_PCI is not set
# CONFIG_8139CP is not set
# CONFIG_8139TOO is not set
# CONFIG_SIS900 is not set
# CONFIG_EPIC100 is not set
# CONFIG_SUNDANCE is not set
# CONFIG_VIA_RHINE is not set
#
# Ethernet (1000 Mbit)
#
# CONFIG_ACENIC is not set
# CONFIG_DL2K is not set
CONFIG_E1000=y
# CONFIG_E1000_NAPI is not set
# CONFIG_NS83820 is not set
# CONFIG_HAMACHI is not set
# CONFIG_YELLOWFIN is not set
# CONFIG_R8169 is not set
# CONFIG_SIS190 is not set
# CONFIG_SKGE is not set
# CONFIG_SK98LIN is not set
# CONFIG_VIA_VELOCITY is not set
CONFIG_TIGON3=y
# CONFIG_BNX2 is not set
#
# Ethernet (10000 Mbit)
#
# CONFIG_CHELSIO_T1 is not set
# CONFIG_IXGB is not set
# CONFIG_S2IO is not set
#
# Token Ring devices
#
# CONFIG_TR is not set
#
# Wireless LAN (non-hamradio)
#
# CONFIG_NET_RADIO is not set
#
# Wan interfaces
#
# CONFIG_WAN is not set
# CONFIG_FDDI is not set
# CONFIG_HIPPI is not set
# CONFIG_PPP is not set
# CONFIG_SLIP is not set
# CONFIG_NET_FC is not set
# CONFIG_SHAPER is not set
CONFIG_NETCONSOLE=y
CONFIG_NETPOLL=y
# CONFIG_NETPOLL_RX is not set
# CONFIG_NETPOLL_TRAP is not set
CONFIG_NET_POLL_CONTROLLER=y
#
# ISDN subsystem
#
# CONFIG_ISDN is not set
#
# Telephony Support
#
# CONFIG_PHONE is not set
#
# Input device support
#
CONFIG_INPUT=y
#
# Userland interfaces
#
CONFIG_INPUT_MOUSEDEV=y
CONFIG_INPUT_MOUSEDEV_PSAUX=y
CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
# CONFIG_INPUT_JOYDEV is not set
# CONFIG_INPUT_TSDEV is not set
# CONFIG_INPUT_EVDEV is not set
# CONFIG_INPUT_EVBUG is not set
#
# Input Device Drivers
#
CONFIG_INPUT_KEYBOARD=y
CONFIG_KEYBOARD_ATKBD=y
# CONFIG_KEYBOARD_SUNKBD is not set
# CONFIG_KEYBOARD_LKKBD is not set
# CONFIG_KEYBOARD_XTKBD is not set
# CONFIG_KEYBOARD_NEWTON is not set
CONFIG_INPUT_MOUSE=y
CONFIG_MOUSE_PS2=y
# CONFIG_MOUSE_SERIAL is not set
# CONFIG_MOUSE_VSXXXAA is not set
# CONFIG_INPUT_JOYSTICK is not set
# CONFIG_INPUT_TOUCHSCREEN is not set
# CONFIG_INPUT_MISC is not set
#
# Hardware I/O ports
#
CONFIG_SERIO=y
CONFIG_SERIO_I8042=y
# CONFIG_SERIO_SERPORT is not set
# CONFIG_SERIO_PCIPS2 is not set
CONFIG_SERIO_LIBPS2=y
# CONFIG_SERIO_RAW is not set
CONFIG_GAMEPORT=m
# CONFIG_GAMEPORT_NS558 is not set
# CONFIG_GAMEPORT_L4 is not set
# CONFIG_GAMEPORT_EMU10K1 is not set
# CONFIG_GAMEPORT_FM801 is not set
#
# Character devices
#
CONFIG_VT=y
CONFIG_VT_CONSOLE=y
CONFIG_HW_CONSOLE=y
CONFIG_SERIAL_NONSTANDARD=y
# CONFIG_ROCKETPORT is not set
# CONFIG_CYCLADES is not set
# CONFIG_DIGIEPCA is not set
# CONFIG_MOXA_SMARTIO is not set
# CONFIG_ISI is not set
# CONFIG_SYNCLINKMP is not set
# CONFIG_N_HDLC is not set
# CONFIG_SPECIALIX is not set
# CONFIG_SX is not set
# CONFIG_STALDRV is not set
CONFIG_SGI_SNSC=y
CONFIG_SGI_TIOCX=y
CONFIG_SGI_MBCS=m
#
# Serial drivers
#
CONFIG_SERIAL_8250=y
CONFIG_SERIAL_8250_CONSOLE=y
CONFIG_SERIAL_8250_ACPI=y
CONFIG_SERIAL_8250_NR_UARTS=6
CONFIG_SERIAL_8250_EXTENDED=y
CONFIG_SERIAL_8250_SHARE_IRQ=y
# CONFIG_SERIAL_8250_DETECT_IRQ is not set
# CONFIG_SERIAL_8250_RSA is not set
#
# Non-8250 serial port support
#
CONFIG_SERIAL_CORE=y
CONFIG_SERIAL_CORE_CONSOLE=y
CONFIG_SERIAL_SGI_L1_CONSOLE=y
# CONFIG_SERIAL_JSM is not set
CONFIG_SERIAL_SGI_IOC4=y
CONFIG_UNIX98_PTYS=y
CONFIG_LEGACY_PTYS=y
CONFIG_LEGACY_PTY_COUNT=256
#
# IPMI
#
# CONFIG_IPMI_HANDLER is not set
#
# Watchdog Cards
#
# CONFIG_WATCHDOG is not set
# CONFIG_HW_RANDOM is not set
CONFIG_EFI_RTC=y
# CONFIG_DTLK is not set
# CONFIG_R3964 is not set
# CONFIG_APPLICOM is not set
#
# Ftape, the floppy tape device driver
#
CONFIG_AGP=m
CONFIG_AGP_I460=m
CONFIG_AGP_HP_ZX1=m
CONFIG_AGP_SGI_TIOCA=m
CONFIG_DRM=m
CONFIG_DRM_TDFX=m
CONFIG_DRM_R128=m
CONFIG_DRM_RADEON=m
CONFIG_DRM_MGA=m
CONFIG_DRM_SIS=m
# CONFIG_DRM_VIA is not set
# CONFIG_DRM_SAVAGE is not set
CONFIG_RAW_DRIVER=m
CONFIG_HPET=y
# CONFIG_HPET_RTC_IRQ is not set
CONFIG_HPET_MMAP=y
CONFIG_MAX_RAW_DEVS=256
# CONFIG_HANGCHECK_TIMER is not set
CONFIG_MMTIMER=y
#
# TPM devices
#
# CONFIG_TCG_TPM is not set
#
# I2C support
#
# CONFIG_I2C is not set
#
# Dallas's 1-wire bus
#
# CONFIG_W1 is not set
#
# Hardware Monitoring support
#
CONFIG_HWMON=y
# CONFIG_HWMON_VID is not set
# CONFIG_HWMON_DEBUG_CHIP is not set
#
# Misc devices
#
#
# Multimedia Capabilities Port drivers
#
#
# Multimedia devices
#
# CONFIG_VIDEO_DEV is not set
#
# Digital Video Broadcasting Devices
#
# CONFIG_DVB is not set
#
# Graphics support
#
# CONFIG_FB is not set
#
# Console display driver support
#
CONFIG_VGA_CONSOLE=y
CONFIG_DUMMY_CONSOLE=y
#
# Sound
#
CONFIG_SOUND=m
#
# Advanced Linux Sound Architecture
#
CONFIG_SND=m
CONFIG_SND_TIMER=m
CONFIG_SND_PCM=m
CONFIG_SND_HWDEP=m
CONFIG_SND_RAWMIDI=m
CONFIG_SND_SEQUENCER=m
CONFIG_SND_SEQ_DUMMY=m
CONFIG_SND_OSSEMUL=y
CONFIG_SND_MIXER_OSS=m
CONFIG_SND_PCM_OSS=m
CONFIG_SND_SEQUENCER_OSS=y
CONFIG_SND_VERBOSE_PRINTK=y
# CONFIG_SND_DEBUG is not set
CONFIG_SND_GENERIC_DRIVER=y
#
# Generic devices
#
CONFIG_SND_MPU401_UART=m
CONFIG_SND_OPL3_LIB=m
CONFIG_SND_DUMMY=m
CONFIG_SND_VIRMIDI=m
CONFIG_SND_MTPAV=m
CONFIG_SND_SERIAL_U16550=m
CONFIG_SND_MPU401=m
CONFIG_SND_AC97_CODEC=m
CONFIG_SND_AC97_BUS=m
#
# PCI devices
#
# CONFIG_SND_ALI5451 is not set
# CONFIG_SND_ATIIXP is not set
# CONFIG_SND_ATIIXP_MODEM is not set
# CONFIG_SND_AU8810 is not set
# CONFIG_SND_AU8820 is not set
# CONFIG_SND_AU8830 is not set
# CONFIG_SND_AZT3328 is not set
# CONFIG_SND_BT87X is not set
CONFIG_SND_CS46XX=m
CONFIG_SND_CS46XX_NEW_DSP=y
CONFIG_SND_CS4281=m
CONFIG_SND_EMU10K1=m
# CONFIG_SND_EMU10K1X is not set
# CONFIG_SND_CA0106 is not set
# CONFIG_SND_KORG1212 is not set
# CONFIG_SND_MIXART is not set
# CONFIG_SND_NM256 is not set
# CONFIG_SND_RME32 is not set
# CONFIG_SND_RME96 is not set
# CONFIG_SND_RME9652 is not set
# CONFIG_SND_HDSP is not set
# CONFIG_SND_HDSPM is not set
# CONFIG_SND_TRIDENT is not set
# CONFIG_SND_YMFPCI is not set
# CONFIG_SND_AD1889 is not set
# CONFIG_SND_CMIPCI is not set
# CONFIG_SND_ENS1370 is not set
# CONFIG_SND_ENS1371 is not set
# CONFIG_SND_ES1938 is not set
# CONFIG_SND_ES1968 is not set
# CONFIG_SND_MAESTRO3 is not set
CONFIG_SND_FM801=m
# CONFIG_SND_FM801_TEA575X is not set
# CONFIG_SND_ICE1712 is not set
# CONFIG_SND_ICE1724 is not set
# CONFIG_SND_INTEL8X0 is not set
# CONFIG_SND_INTEL8X0M is not set
# CONFIG_SND_SONICVIBES is not set
# CONFIG_SND_VIA82XX is not set
# CONFIG_SND_VIA82XX_MODEM is not set
# CONFIG_SND_VX222 is not set
# CONFIG_SND_HDA_INTEL is not set
#
# USB devices
#
# CONFIG_SND_USB_AUDIO is not set
#
# Open Sound System
#
# CONFIG_SOUND_PRIME is not set
#
# USB support
#
CONFIG_USB_ARCH_HAS_HCD=y
CONFIG_USB_ARCH_HAS_OHCI=y
CONFIG_USB=m
# CONFIG_USB_DEBUG is not set
#
# Miscellaneous USB options
#
CONFIG_USB_DEVICEFS=y
# CONFIG_USB_BANDWIDTH is not set
# CONFIG_USB_DYNAMIC_MINORS is not set
# CONFIG_USB_SUSPEND is not set
# CONFIG_USB_OTG is not set
#
# USB Host Controller Drivers
#
CONFIG_USB_EHCI_HCD=m
# CONFIG_USB_EHCI_SPLIT_ISO is not set
# CONFIG_USB_EHCI_ROOT_HUB_TT is not set
# CONFIG_USB_ISP116X_HCD is not set
CONFIG_USB_OHCI_HCD=m
# CONFIG_USB_OHCI_BIG_ENDIAN is not set
CONFIG_USB_OHCI_LITTLE_ENDIAN=y
CONFIG_USB_UHCI_HCD=m
# CONFIG_USB_SL811_HCD is not set
#
# USB Device Class drivers
#
# CONFIG_OBSOLETE_OSS_USB_DRIVER is not set
# CONFIG_USB_BLUETOOTH_TTY is not set
# CONFIG_USB_ACM is not set
# CONFIG_USB_PRINTER is not set
#
# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' may also be needed; see USB_STORAGE Help for more information
#
CONFIG_USB_STORAGE=m
# CONFIG_USB_STORAGE_DEBUG is not set
# CONFIG_USB_STORAGE_DATAFAB is not set
# CONFIG_USB_STORAGE_FREECOM is not set
# CONFIG_USB_STORAGE_ISD200 is not set
# CONFIG_USB_STORAGE_DPCM is not set
# CONFIG_USB_STORAGE_USBAT is not set
# CONFIG_USB_STORAGE_SDDR09 is not set
# CONFIG_USB_STORAGE_SDDR55 is not set
# CONFIG_USB_STORAGE_JUMPSHOT is not set
#
# USB Input Devices
#
CONFIG_USB_HID=m
CONFIG_USB_HIDINPUT=y
# CONFIG_HID_FF is not set
# CONFIG_USB_HIDDEV is not set
#
# USB HID Boot Protocol drivers
#
# CONFIG_USB_KBD is not set
# CONFIG_USB_MOUSE is not set
# CONFIG_USB_AIPTEK is not set
# CONFIG_USB_WACOM is not set
# CONFIG_USB_ACECAD is not set
# CONFIG_USB_KBTAB is not set
# CONFIG_USB_POWERMATE is not set
# CONFIG_USB_MTOUCH is not set
# CONFIG_USB_ITMTOUCH is not set
# CONFIG_USB_EGALAX is not set
# CONFIG_USB_YEALINK is not set
# CONFIG_USB_XPAD is not set
# CONFIG_USB_ATI_REMOTE is not set
# CONFIG_USB_KEYSPAN_REMOTE is not set
# CONFIG_USB_APPLETOUCH is not set
#
# USB Imaging devices
#
# CONFIG_USB_MDC800 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
#
# CONFIG_USB_CATC is not set
# CONFIG_USB_KAWETH is not set
# CONFIG_USB_PEGASUS is not set
# CONFIG_USB_RTL8150 is not set
# CONFIG_USB_USBNET is not set
CONFIG_USB_MON=y
#
# USB port drivers
#
#
# USB Serial Converter support
#
# CONFIG_USB_SERIAL is not set
#
# USB Miscellaneous drivers
#
# CONFIG_USB_EMI62 is not set
# CONFIG_USB_EMI26 is not set
# CONFIG_USB_AUERSWALD is not set
# CONFIG_USB_RIO500 is not set
# CONFIG_USB_LEGOTOWER is not set
# CONFIG_USB_LCD is not set
# CONFIG_USB_LED is not set
# CONFIG_USB_CYTHERM is not set
# CONFIG_USB_PHIDGETKIT is not set
# CONFIG_USB_PHIDGETSERVO is not set
# CONFIG_USB_IDMOUSE is not set
# CONFIG_USB_SISUSBVGA is not set
# CONFIG_USB_LD is not set
# CONFIG_USB_TEST is not set
#
# USB DSL modem support
#
#
# USB Gadget Support
#
# CONFIG_USB_GADGET is not set
#
# MMC/SD Card support
#
# CONFIG_MMC is not set
#
# InfiniBand support
#
CONFIG_INFINIBAND=m
# CONFIG_INFINIBAND_USER_MAD is not set
# CONFIG_INFINIBAND_USER_ACCESS is not set
CONFIG_INFINIBAND_MTHCA=m
# CONFIG_INFINIBAND_MTHCA_DEBUG is not set
CONFIG_INFINIBAND_IPOIB=m
# CONFIG_INFINIBAND_IPOIB_DEBUG is not set
#
# SN Devices
#
CONFIG_SGI_IOC4=y
#
# File systems
#
CONFIG_EXT2_FS=y
CONFIG_EXT2_FS_XATTR=y
CONFIG_EXT2_FS_POSIX_ACL=y
CONFIG_EXT2_FS_SECURITY=y
# CONFIG_EXT2_FS_XIP is not set
CONFIG_EXT3_FS=y
CONFIG_EXT3_FS_XATTR=y
CONFIG_EXT3_FS_POSIX_ACL=y
CONFIG_EXT3_FS_SECURITY=y
CONFIG_JBD=y
# CONFIG_JBD_DEBUG is not set
CONFIG_FS_MBCACHE=y
CONFIG_REISERFS_FS=y
# CONFIG_REISERFS_CHECK is not set
# CONFIG_REISERFS_PROC_INFO is not set
CONFIG_REISERFS_FS_XATTR=y
CONFIG_REISERFS_FS_POSIX_ACL=y
CONFIG_REISERFS_FS_SECURITY=y
# CONFIG_JFS_FS is not set
CONFIG_FS_POSIX_ACL=y
CONFIG_XFS_FS=y
CONFIG_XFS_EXPORT=y
# CONFIG_XFS_QUOTA is not set
# CONFIG_XFS_SECURITY is not set
# CONFIG_XFS_POSIX_ACL is not set
# CONFIG_XFS_RT is not set
# CONFIG_MINIX_FS is not set
# CONFIG_ROMFS_FS is not set
CONFIG_INOTIFY=y
# CONFIG_QUOTA is not set
CONFIG_DNOTIFY=y
CONFIG_AUTOFS_FS=y
CONFIG_AUTOFS4_FS=y
# CONFIG_FUSE_FS is not set
#
# CD-ROM/DVD Filesystems
#
CONFIG_ISO9660_FS=m
CONFIG_JOLIET=y
# CONFIG_ZISOFS is not set
CONFIG_UDF_FS=m
CONFIG_UDF_NLS=y
#
# DOS/FAT/NT Filesystems
#
CONFIG_FAT_FS=y
# CONFIG_MSDOS_FS is not set
CONFIG_VFAT_FS=y
CONFIG_FAT_DEFAULT_CODEPAGE=437
CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
CONFIG_NTFS_FS=m
# CONFIG_NTFS_DEBUG is not set
# CONFIG_NTFS_RW is not set
#
# Pseudo filesystems
#
CONFIG_PROC_FS=y
CONFIG_PROC_KCORE=y
CONFIG_SYSFS=y
CONFIG_TMPFS=y
CONFIG_HUGETLBFS=y
CONFIG_HUGETLB_PAGE=y
CONFIG_RAMFS=y
# CONFIG_RELAYFS_FS is not set
#
# Miscellaneous filesystems
#
# CONFIG_ADFS_FS is not set
# CONFIG_AFFS_FS is not set
# CONFIG_HFS_FS is not set
# CONFIG_HFSPLUS_FS is not set
# CONFIG_BEFS_FS is not set
# CONFIG_BFS_FS is not set
# CONFIG_EFS_FS is not set
# CONFIG_CRAMFS is not set
# CONFIG_VXFS_FS is not set
# CONFIG_HPFS_FS is not set
# CONFIG_QNX4FS_FS is not set
# CONFIG_SYSV_FS is not set
# CONFIG_UFS_FS is not set
#
# Network File Systems
#
CONFIG_NFS_FS=m
CONFIG_NFS_V3=y
# CONFIG_NFS_V3_ACL is not set
CONFIG_NFS_V4=y
CONFIG_NFS_DIRECTIO=y
CONFIG_NFSD=m
CONFIG_NFSD_V3=y
# CONFIG_NFSD_V3_ACL is not set
CONFIG_NFSD_V4=y
CONFIG_NFSD_TCP=y
CONFIG_LOCKD=m
CONFIG_LOCKD_V4=y
CONFIG_EXPORTFS=y
CONFIG_NFS_COMMON=y
CONFIG_SUNRPC=m
CONFIG_SUNRPC_GSS=m
CONFIG_RPCSEC_GSS_KRB5=m
# CONFIG_RPCSEC_GSS_SPKM3 is not set
CONFIG_SMB_FS=m
CONFIG_SMB_NLS_DEFAULT=y
CONFIG_SMB_NLS_REMOTE="cp437"
CONFIG_CIFS=m
# CONFIG_CIFS_STATS is not set
# CONFIG_CIFS_XATTR is not set
# CONFIG_CIFS_EXPERIMENTAL is not set
# CONFIG_NCP_FS is not set
# CONFIG_CODA_FS is not set
# CONFIG_AFS_FS is not set
# CONFIG_9P_FS is not set
#
# Partition Types
#
CONFIG_PARTITION_ADVANCED=y
# CONFIG_ACORN_PARTITION is not set
# CONFIG_OSF_PARTITION is not set
# CONFIG_AMIGA_PARTITION is not set
# CONFIG_ATARI_PARTITION is not set
# CONFIG_MAC_PARTITION is not set
CONFIG_MSDOS_PARTITION=y
# CONFIG_BSD_DISKLABEL is not set
# CONFIG_MINIX_SUBPARTITION is not set
# CONFIG_SOLARIS_X86_PARTITION is not set
# CONFIG_UNIXWARE_DISKLABEL is not set
# CONFIG_LDM_PARTITION is not set
CONFIG_SGI_PARTITION=y
# CONFIG_ULTRIX_PARTITION is not set
# CONFIG_SUN_PARTITION is not set
CONFIG_EFI_PARTITION=y
#
# Native Language Support
#
CONFIG_NLS=y
CONFIG_NLS_DEFAULT="iso8859-1"
CONFIG_NLS_CODEPAGE_437=y
CONFIG_NLS_CODEPAGE_737=m
CONFIG_NLS_CODEPAGE_775=m
CONFIG_NLS_CODEPAGE_850=m
CONFIG_NLS_CODEPAGE_852=m
CONFIG_NLS_CODEPAGE_855=m
CONFIG_NLS_CODEPAGE_857=m
CONFIG_NLS_CODEPAGE_860=m
CONFIG_NLS_CODEPAGE_861=m
CONFIG_NLS_CODEPAGE_862=m
CONFIG_NLS_CODEPAGE_863=m
CONFIG_NLS_CODEPAGE_864=m
CONFIG_NLS_CODEPAGE_865=m
CONFIG_NLS_CODEPAGE_866=m
CONFIG_NLS_CODEPAGE_869=m
CONFIG_NLS_CODEPAGE_936=m
CONFIG_NLS_CODEPAGE_950=m
CONFIG_NLS_CODEPAGE_932=m
CONFIG_NLS_CODEPAGE_949=m
CONFIG_NLS_CODEPAGE_874=m
CONFIG_NLS_ISO8859_8=m
CONFIG_NLS_CODEPAGE_1250=m
CONFIG_NLS_CODEPAGE_1251=m
# CONFIG_NLS_ASCII is not set
CONFIG_NLS_ISO8859_1=y
CONFIG_NLS_ISO8859_2=m
CONFIG_NLS_ISO8859_3=m
CONFIG_NLS_ISO8859_4=m
CONFIG_NLS_ISO8859_5=m
CONFIG_NLS_ISO8859_6=m
CONFIG_NLS_ISO8859_7=m
CONFIG_NLS_ISO8859_9=m
CONFIG_NLS_ISO8859_13=m
CONFIG_NLS_ISO8859_14=m
CONFIG_NLS_ISO8859_15=m
CONFIG_NLS_KOI8_R=m
CONFIG_NLS_KOI8_U=m
CONFIG_NLS_UTF8=m
#
# Library routines
#
# CONFIG_CRC_CCITT is not set
# CONFIG_CRC16 is not set
CONFIG_CRC32=y
# CONFIG_LIBCRC32C is not set
CONFIG_GENERIC_HARDIRQS=y
CONFIG_GENERIC_IRQ_PROBE=y
CONFIG_GENERIC_PENDING_IRQ=y
#
# HP Simulator drivers
#
# CONFIG_HP_SIMETH is not set
# CONFIG_HP_SIMSERIAL is not set
# CONFIG_HP_SIMSCSI is not set
#
# Profiling support
#
# CONFIG_PROFILING is not set
#
# Kernel hacking
#
# CONFIG_PRINTK_TIME is not set
CONFIG_DEBUG_KERNEL=y
CONFIG_MAGIC_SYSRQ=y
CONFIG_LOG_BUF_SHIFT=20
CONFIG_DETECT_SOFTLOCKUP=y
# CONFIG_SCHEDSTATS is not set
# CONFIG_DEBUG_SLAB is not set
# CONFIG_DEBUG_SPINLOCK is not set
# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
# CONFIG_DEBUG_KOBJECT is not set
# CONFIG_DEBUG_INFO is not set
# CONFIG_DEBUG_FS is not set
# CONFIG_KPROBES is not set
CONFIG_IA64_GRANULE_16MB=y
# CONFIG_IA64_GRANULE_64MB is not set
# CONFIG_IA64_PRINT_HAZARDS is not set
# CONFIG_DISABLE_VHPT is not set
# CONFIG_IA64_DEBUG_CMPXCHG is not set
# CONFIG_IA64_DEBUG_IRQ is not set
CONFIG_SYSVIPC_COMPAT=y
#
# Security options
#
# CONFIG_KEYS is not set
# CONFIG_SECURITY is not set
#
# Cryptographic options
#
CONFIG_CRYPTO=y
# CONFIG_CRYPTO_HMAC is not set
# CONFIG_CRYPTO_NULL is not set
# CONFIG_CRYPTO_MD4 is not set
CONFIG_CRYPTO_MD5=y
# CONFIG_CRYPTO_SHA1 is not set
# CONFIG_CRYPTO_SHA256 is not set
# CONFIG_CRYPTO_SHA512 is not set
# CONFIG_CRYPTO_WP512 is not set
# CONFIG_CRYPTO_TGR192 is not set
CONFIG_CRYPTO_DES=m
# CONFIG_CRYPTO_BLOWFISH is not set
# CONFIG_CRYPTO_TWOFISH is not set
# CONFIG_CRYPTO_SERPENT is not set
# CONFIG_CRYPTO_AES is not set
# CONFIG_CRYPTO_CAST5 is not set
# CONFIG_CRYPTO_CAST6 is not set
# CONFIG_CRYPTO_TEA is not set
# CONFIG_CRYPTO_ARC4 is not set
# CONFIG_CRYPTO_KHAZAD is not set
# CONFIG_CRYPTO_ANUBIS is not set
# CONFIG_CRYPTO_DEFLATE is not set
# CONFIG_CRYPTO_MICHAEL_MIC is not set
# CONFIG_CRYPTO_CRC32C is not set
# CONFIG_CRYPTO_TEST is not set
#
# Hardware crypto devices
#
arch/ia64/configs/tiger_defconfig
浏览文件 @
8a212ab6
#
# Automatically generated make config: don't edit
# Linux kernel version: 2.6.1
3-rc6-tiger-smp
# Wed
Aug 17 10:19:51
2005
# Linux kernel version: 2.6.1
4-rc1
# Wed
Sep 14 15:17:57
2005
#
#
...
...
@@ -16,6 +16,7 @@ CONFIG_INIT_ENV_ARG_LIMIT=32
# General setup
#
CONFIG_LOCALVERSION=""
CONFIG_LOCALVERSION_AUTO=y
CONFIG_SWAP=y
CONFIG_SYSVIPC=y
CONFIG_POSIX_MQUEUE=y
...
...
@@ -27,6 +28,7 @@ CONFIG_KOBJECT_UEVENT=y
CONFIG_IKCONFIG=y
CONFIG_IKCONFIG_PROC=y
# CONFIG_CPUSETS is not set
CONFIG_INITRAMFS_SOURCE=""
# CONFIG_EMBEDDED is not set
CONFIG_KALLSYMS=y
CONFIG_KALLSYMS_ALL=y
...
...
@@ -103,6 +105,7 @@ CONFIG_FLATMEM_MANUAL=y
# CONFIG_SPARSEMEM_MANUAL is not set
CONFIG_FLATMEM=y
CONFIG_FLAT_NODE_MEM_MAP=y
# CONFIG_SPARSEMEM_STATIC is not set
CONFIG_HAVE_DEC_LOCK=y
CONFIG_IA32_SUPPORT=y
CONFIG_COMPAT=y
...
...
@@ -115,6 +118,7 @@ CONFIG_IA64_PALINFO=y
#
CONFIG_EFI_VARS=y
CONFIG_EFI_PCDP=y
# CONFIG_DELL_RBU is not set
CONFIG_BINFMT_ELF=y
CONFIG_BINFMT_MISC=m
...
...
@@ -122,20 +126,27 @@ CONFIG_BINFMT_MISC=m
# Power management and ACPI
#
CONFIG_PM=y
CONFIG_ACPI=y
# CONFIG_PM_DEBUG is not set
#
# ACPI (Advanced Configuration and Power Interface) Support
#
CONFIG_ACPI=y
CONFIG_ACPI_BUTTON=m
CONFIG_ACPI_FAN=m
CONFIG_ACPI_PROCESSOR=m
# CONFIG_ACPI_HOTPLUG_CPU is not set
CONFIG_ACPI_HOTPLUG_CPU=y
CONFIG_ACPI_THERMAL=m
CONFIG_ACPI_BLACKLIST_YEAR=0
# CONFIG_ACPI_DEBUG is not set
CONFIG_ACPI_POWER=y
CONFIG_ACPI_SYSTEM=y
# CONFIG_ACPI_CONTAINER is not set
CONFIG_ACPI_CONTAINER=m
#
# CPU Frequency scaling
#
# CONFIG_CPU_FREQ is not set
#
# Bus options (PCI, PCMCIA)
...
...
@@ -144,7 +155,6 @@ CONFIG_PCI=y
CONFIG_PCI_DOMAINS=y
# CONFIG_PCI_MSI is not set
CONFIG_PCI_LEGACY_PROC=y
CONFIG_PCI_NAMES=y
# CONFIG_PCI_DEBUG is not set
#
...
...
@@ -188,13 +198,18 @@ CONFIG_SYN_COOKIES=y
# CONFIG_INET_ESP is not set
# CONFIG_INET_IPCOMP is not set
# CONFIG_INET_TUNNEL is not set
CONFIG_I
P_TCP
DIAG=y
# CONFIG_IP_TCPDIAG_IPV6 is not set
CONFIG_I
NET_
DIAG=y
CONFIG_INET_TCP_DIAG=y
# CONFIG_TCP_CONG_ADVANCED is not set
CONFIG_TCP_CONG_BIC=y
# CONFIG_IPV6 is not set
# CONFIG_NETFILTER is not set
#
# DCCP Configuration (EXPERIMENTAL)
#
# CONFIG_IP_DCCP is not set
#
# SCTP Configuration (EXPERIMENTAL)
#
...
...
@@ -218,9 +233,11 @@ CONFIG_TCP_CONG_BIC=y
# Network testing
#
# CONFIG_NET_PKTGEN is not set
# CONFIG_NETFILTER_NETLINK is not set
# CONFIG_HAMRADIO is not set
# CONFIG_IRDA is not set
# CONFIG_BT is not set
# CONFIG_IEEE80211 is not set
#
# Device Drivers
...
...
@@ -234,6 +251,11 @@ CONFIG_PREVENT_FIRMWARE_BUILD=y
CONFIG_FW_LOADER=m
# CONFIG_DEBUG_DRIVER is not set
#
# Connector - unified userspace <-> kernelspace linker
#
# CONFIG_CONNECTOR is not set
#
# Memory Technology Devices (MTD)
#
...
...
@@ -247,7 +269,13 @@ CONFIG_FW_LOADER=m
#
# Plug and Play support
#
# CONFIG_PNP is not set
CONFIG_PNP=y
# CONFIG_PNP_DEBUG is not set
#
# Protocols
#
CONFIG_PNPACPI=y
#
# Block devices
...
...
@@ -266,7 +294,6 @@ CONFIG_BLK_DEV_RAM=y
CONFIG_BLK_DEV_RAM_COUNT=16
CONFIG_BLK_DEV_RAM_SIZE=4096
CONFIG_BLK_DEV_INITRD=y
CONFIG_INITRAMFS_SOURCE=""
# CONFIG_CDROM_PKTCDVD is not set
#
...
...
@@ -299,7 +326,8 @@ CONFIG_BLK_DEV_IDESCSI=m
#
# IDE chipset support/bugfixes
#
CONFIG_IDE_GENERIC=y
# CONFIG_IDE_GENERIC is not set
# CONFIG_BLK_DEV_IDEPNP is not set
CONFIG_BLK_DEV_IDEPCI=y
# CONFIG_IDEPCI_SHARE_IRQ is not set
# CONFIG_BLK_DEV_OFFBOARD is not set
...
...
@@ -339,6 +367,7 @@ CONFIG_IDEDMA_AUTO=y
#
# SCSI device support
#
# CONFIG_RAID_ATTRS is not set
CONFIG_SCSI=y
CONFIG_SCSI_PROC_FS=y
...
...
@@ -366,6 +395,7 @@ CONFIG_CHR_DEV_SG=m
CONFIG_SCSI_SPI_ATTRS=y
CONFIG_SCSI_FC_ATTRS=y
# CONFIG_SCSI_ISCSI_ATTRS is not set
# CONFIG_SCSI_SAS_ATTRS is not set
#
# SCSI low-level drivers
...
...
@@ -454,12 +484,18 @@ CONFIG_DUMMY=m
# CONFIG_BONDING is not set
# CONFIG_EQUALIZER is not set
# CONFIG_TUN is not set
# CONFIG_NET_SB1000 is not set
#
# ARCnet devices
#
# CONFIG_ARCNET is not set
#
# PHY device support
#
# CONFIG_PHYLIB is not set
#
# Ethernet (10 or 100Mbit)
#
...
...
@@ -481,6 +517,7 @@ CONFIG_TULIP=m
# CONFIG_DE4X5 is not set
# CONFIG_WINBOND_840 is not set
# CONFIG_DM9102 is not set
# CONFIG_ULI526X is not set
# CONFIG_HP100 is not set
CONFIG_NET_PCI=y
# CONFIG_PCNET32 is not set
...
...
@@ -512,6 +549,7 @@ CONFIG_E1000=y
# CONFIG_HAMACHI is not set
# CONFIG_YELLOWFIN is not set
# CONFIG_R8169 is not set
# CONFIG_SIS190 is not set
# CONFIG_SKGE is not set
# CONFIG_SK98LIN is not set
# CONFIG_VIA_VELOCITY is not set
...
...
@@ -521,6 +559,7 @@ CONFIG_TIGON3=y
#
# Ethernet (10000 Mbit)
#
# CONFIG_CHELSIO_T1 is not set
# CONFIG_IXGB is not set
# CONFIG_S2IO is not set
...
...
@@ -618,6 +657,7 @@ CONFIG_HW_CONSOLE=y
CONFIG_SERIAL_NONSTANDARD=y
# CONFIG_ROCKETPORT is not set
# CONFIG_CYCLADES is not set
# CONFIG_DIGIEPCA is not set
# CONFIG_MOXA_SMARTIO is not set
# CONFIG_ISI is not set
# CONFIG_SYNCLINKMP is not set
...
...
@@ -675,6 +715,7 @@ CONFIG_DRM_RADEON=m
CONFIG_DRM_MGA=m
CONFIG_DRM_SIS=m
# CONFIG_DRM_VIA is not set
# CONFIG_DRM_SAVAGE is not set
CONFIG_RAW_DRIVER=m
CONFIG_HPET=y
# CONFIG_HPET_RTC_IRQ is not set
...
...
@@ -691,7 +732,6 @@ CONFIG_MAX_RAW_DEVS=256
# I2C support
#
# CONFIG_I2C is not set
# CONFIG_I2C_SENSOR is not set
#
# Dallas's 1-wire bus
...
...
@@ -702,12 +742,17 @@ CONFIG_MAX_RAW_DEVS=256
# Hardware Monitoring support
#
CONFIG_HWMON=y
# CONFIG_HWMON_VID is not set
# CONFIG_HWMON_DEBUG_CHIP is not set
#
# Misc devices
#
#
# Multimedia Capabilities Port drivers
#
#
# Multimedia devices
#
...
...
@@ -800,9 +845,11 @@ CONFIG_USB_HIDINPUT=y
# CONFIG_USB_MTOUCH is not set
# CONFIG_USB_ITMTOUCH is not set
# CONFIG_USB_EGALAX is not set
# CONFIG_USB_YEALINK is not set
# CONFIG_USB_XPAD is not set
# CONFIG_USB_ATI_REMOTE is not set
# CONFIG_USB_KEYSPAN_REMOTE is not set
# CONFIG_USB_APPLETOUCH is not set
#
# USB Imaging devices
...
...
@@ -902,16 +949,12 @@ CONFIG_REISERFS_FS_POSIX_ACL=y
CONFIG_REISERFS_FS_SECURITY=y
# CONFIG_JFS_FS is not set
CONFIG_FS_POSIX_ACL=y
#
# XFS support
#
CONFIG_XFS_FS=y
CONFIG_XFS_EXPORT=y
# CONFIG_XFS_RT is not set
# CONFIG_XFS_QUOTA is not set
# CONFIG_XFS_SECURITY is not set
# CONFIG_XFS_POSIX_ACL is not set
# CONFIG_XFS_RT is not set
# CONFIG_MINIX_FS is not set
# CONFIG_ROMFS_FS is not set
CONFIG_INOTIFY=y
...
...
@@ -919,6 +962,7 @@ CONFIG_INOTIFY=y
CONFIG_DNOTIFY=y
CONFIG_AUTOFS_FS=y
CONFIG_AUTOFS4_FS=y
# CONFIG_FUSE_FS is not set
#
# CD-ROM/DVD Filesystems
...
...
@@ -947,13 +991,11 @@ CONFIG_NTFS_FS=m
CONFIG_PROC_FS=y
CONFIG_PROC_KCORE=y
CONFIG_SYSFS=y
# CONFIG_DEVPTS_FS_XATTR is not set
CONFIG_TMPFS=y
CONFIG_TMPFS_XATTR=y
CONFIG_TMPFS_SECURITY=y
CONFIG_HUGETLBFS=y
CONFIG_HUGETLB_PAGE=y
CONFIG_RAMFS=y
# CONFIG_RELAYFS_FS is not set
#
# Miscellaneous filesystems
...
...
@@ -1003,6 +1045,7 @@ CONFIG_CIFS=m
# CONFIG_NCP_FS is not set
# CONFIG_CODA_FS is not set
# CONFIG_AFS_FS is not set
# CONFIG_9P_FS is not set
#
# Partition Types
...
...
@@ -1072,10 +1115,12 @@ CONFIG_NLS_UTF8=m
# Library routines
#
# CONFIG_CRC_CCITT is not set
# CONFIG_CRC16 is not set
CONFIG_CRC32=y
# CONFIG_LIBCRC32C is not set
CONFIG_GENERIC_HARDIRQS=y
CONFIG_GENERIC_IRQ_PROBE=y
CONFIG_GENERIC_PENDING_IRQ=y
#
# Profiling support
...
...
@@ -1089,6 +1134,7 @@ CONFIG_GENERIC_IRQ_PROBE=y
CONFIG_DEBUG_KERNEL=y
CONFIG_MAGIC_SYSRQ=y
CONFIG_LOG_BUF_SHIFT=20
CONFIG_DETECT_SOFTLOCKUP=y
# CONFIG_SCHEDSTATS is not set
# CONFIG_DEBUG_SLAB is not set
# CONFIG_DEBUG_SPINLOCK is not set
...
...
arch/ia64/configs/zx1_defconfig
浏览文件 @
8a212ab6
#
# Automatically generated make config: don't edit
# Linux kernel version: 2.6.1
3-rc6
# Wed
Aug 17 10:02:43
2005
# Linux kernel version: 2.6.1
4-rc1
# Wed
Sep 14 15:15:01
2005
#
#
...
...
@@ -18,6 +18,7 @@ CONFIG_INIT_ENV_ARG_LIMIT=32
# General setup
#
CONFIG_LOCALVERSION=""
CONFIG_LOCALVERSION_AUTO=y
CONFIG_SWAP=y
CONFIG_SYSVIPC=y
# CONFIG_POSIX_MQUEUE is not set
...
...
@@ -29,6 +30,7 @@ CONFIG_HOTPLUG=y
CONFIG_KOBJECT_UEVENT=y
# CONFIG_IKCONFIG is not set
# CONFIG_CPUSETS is not set
CONFIG_INITRAMFS_SOURCE=""
# CONFIG_EMBEDDED is not set
CONFIG_KALLSYMS=y
# CONFIG_KALLSYMS_ALL is not set
...
...
@@ -103,6 +105,7 @@ CONFIG_FLATMEM_MANUAL=y
# CONFIG_SPARSEMEM_MANUAL is not set
CONFIG_FLATMEM=y
CONFIG_FLAT_NODE_MEM_MAP=y
# CONFIG_SPARSEMEM_STATIC is not set
CONFIG_HAVE_DEC_LOCK=y
CONFIG_IA32_SUPPORT=y
CONFIG_COMPAT=y
...
...
@@ -115,6 +118,7 @@ CONFIG_IA64_PALINFO=y
#
CONFIG_EFI_VARS=y
CONFIG_EFI_PCDP=y
# CONFIG_DELL_RBU is not set
CONFIG_BINFMT_ELF=y
CONFIG_BINFMT_MISC=y
...
...
@@ -122,20 +126,27 @@ CONFIG_BINFMT_MISC=y
# Power management and ACPI
#
CONFIG_PM=y
CONFIG_ACPI=y
# CONFIG_PM_DEBUG is not set
#
# ACPI (Advanced Configuration and Power Interface) Support
#
CONFIG_ACPI=y
CONFIG_ACPI_BUTTON=y
CONFIG_ACPI_FAN=y
CONFIG_ACPI_PROCESSOR=y
CONFIG_ACPI_THERMAL=y
CONFIG_ACPI_BLACKLIST_YEAR=0
# CONFIG_ACPI_DEBUG is not set
CONFIG_ACPI_POWER=y
CONFIG_ACPI_SYSTEM=y
# CONFIG_ACPI_CONTAINER is not set
#
# CPU Frequency scaling
#
# CONFIG_CPU_FREQ is not set
#
# Bus options (PCI, PCMCIA)
#
...
...
@@ -143,7 +154,6 @@ CONFIG_PCI=y
CONFIG_PCI_DOMAINS=y
# CONFIG_PCI_MSI is not set
CONFIG_PCI_LEGACY_PROC=y
CONFIG_PCI_NAMES=y
# CONFIG_PCI_DEBUG is not set
#
...
...
@@ -187,8 +197,8 @@ CONFIG_IP_FIB_HASH=y
# CONFIG_INET_ESP is not set
# CONFIG_INET_IPCOMP is not set
# CONFIG_INET_TUNNEL is not set
# CONFIG_IP_TCPDIAG is not set
# CONFIG_IP_TCPDIAG_IPV6 is not set
CONFIG_INET_DIAG=y
CONFIG_INET_TCP_DIAG=y
# CONFIG_TCP_CONG_ADVANCED is not set
CONFIG_TCP_CONG_BIC=y
...
...
@@ -204,13 +214,17 @@ CONFIG_NETFILTER=y
# IP: Netfilter Configuration
#
# CONFIG_IP_NF_CONNTRACK is not set
# CONFIG_IP_NF_CONNTRACK_MARK is not set
# CONFIG_IP_NF_QUEUE is not set
# CONFIG_IP_NF_IPTABLES is not set
CONFIG_IP_NF_ARPTABLES=y
# CONFIG_IP_NF_ARPFILTER is not set
# CONFIG_IP_NF_ARP_MANGLE is not set
#
# DCCP Configuration (EXPERIMENTAL)
#
# CONFIG_IP_DCCP is not set
#
# SCTP Configuration (EXPERIMENTAL)
#
...
...
@@ -234,9 +248,11 @@ CONFIG_IP_NF_ARPTABLES=y
# Network testing
#
# CONFIG_NET_PKTGEN is not set
# CONFIG_NETFILTER_NETLINK is not set
# CONFIG_HAMRADIO is not set
# CONFIG_IRDA is not set
# CONFIG_BT is not set
# CONFIG_IEEE80211 is not set
#
# Device Drivers
...
...
@@ -250,6 +266,11 @@ CONFIG_PREVENT_FIRMWARE_BUILD=y
# CONFIG_FW_LOADER is not set
# CONFIG_DEBUG_DRIVER is not set
#
# Connector - unified userspace <-> kernelspace linker
#
# CONFIG_CONNECTOR is not set
#
# Memory Technology Devices (MTD)
#
...
...
@@ -263,7 +284,13 @@ CONFIG_PREVENT_FIRMWARE_BUILD=y
#
# Plug and Play support
#
# CONFIG_PNP is not set
CONFIG_PNP=y
# CONFIG_PNP_DEBUG is not set
#
# Protocols
#
CONFIG_PNPACPI=y
#
# Block devices
...
...
@@ -282,7 +309,6 @@ CONFIG_BLK_DEV_RAM=y
CONFIG_BLK_DEV_RAM_COUNT=16
CONFIG_BLK_DEV_RAM_SIZE=4096
CONFIG_BLK_DEV_INITRD=y
CONFIG_INITRAMFS_SOURCE=""
# CONFIG_CDROM_PKTCDVD is not set
#
...
...
@@ -315,7 +341,8 @@ CONFIG_BLK_DEV_IDECD=y
#
# IDE chipset support/bugfixes
#
CONFIG_IDE_GENERIC=y
# CONFIG_IDE_GENERIC is not set
# CONFIG_BLK_DEV_IDEPNP is not set
CONFIG_BLK_DEV_IDEPCI=y
CONFIG_IDEPCI_SHARE_IRQ=y
# CONFIG_BLK_DEV_OFFBOARD is not set
...
...
@@ -354,6 +381,7 @@ CONFIG_BLK_DEV_IDEDMA=y
#
# SCSI device support
#
# CONFIG_RAID_ATTRS is not set
CONFIG_SCSI=y
CONFIG_SCSI_PROC_FS=y
...
...
@@ -381,6 +409,7 @@ CONFIG_SCSI_LOGGING=y
CONFIG_SCSI_SPI_ATTRS=y
# CONFIG_SCSI_FC_ATTRS is not set
# CONFIG_SCSI_ISCSI_ATTRS is not set
# CONFIG_SCSI_SAS_ATTRS is not set
#
# SCSI low-level drivers
...
...
@@ -457,12 +486,18 @@ CONFIG_DUMMY=y
# CONFIG_BONDING is not set
# CONFIG_EQUALIZER is not set
# CONFIG_TUN is not set
# CONFIG_NET_SB1000 is not set
#
# ARCnet devices
#
# CONFIG_ARCNET is not set
#
# PHY device support
#
# CONFIG_PHYLIB is not set
#
# Ethernet (10 or 100Mbit)
#
...
...
@@ -485,6 +520,7 @@ CONFIG_TULIP_NAPI_HW_MITIGATION=y
# CONFIG_DE4X5 is not set
# CONFIG_WINBOND_840 is not set
# CONFIG_DM9102 is not set
# CONFIG_ULI526X is not set
# CONFIG_HP100 is not set
CONFIG_NET_PCI=y
# CONFIG_PCNET32 is not set
...
...
@@ -516,6 +552,7 @@ CONFIG_E1000=y
# CONFIG_HAMACHI is not set
# CONFIG_YELLOWFIN is not set
# CONFIG_R8169 is not set
# CONFIG_SIS190 is not set
# CONFIG_SKGE is not set
# CONFIG_SK98LIN is not set
# CONFIG_VIA_VELOCITY is not set
...
...
@@ -525,6 +562,7 @@ CONFIG_TIGON3=y
#
# Ethernet (10000 Mbit)
#
# CONFIG_CHELSIO_T1 is not set
# CONFIG_IXGB is not set
# CONFIG_S2IO is not set
...
...
@@ -650,12 +688,12 @@ CONFIG_AGP=y
CONFIG_AGP_HP_ZX1=y
CONFIG_DRM=y
# CONFIG_DRM_TDFX is not set
# CONFIG_DRM_GAMMA is not set
# CONFIG_DRM_R128 is not set
CONFIG_DRM_RADEON=y
# CONFIG_DRM_MGA is not set
# CONFIG_DRM_SIS is not set
# CONFIG_DRM_VIA is not set
# CONFIG_DRM_SAVAGE is not set
# CONFIG_RAW_DRIVER is not set
# CONFIG_HPET is not set
# CONFIG_HANGCHECK_TIMER is not set
...
...
@@ -689,7 +727,6 @@ CONFIG_I2C_ALGOPCF=y
# CONFIG_I2C_I801 is not set
# CONFIG_I2C_I810 is not set
# CONFIG_I2C_PIIX4 is not set
# CONFIG_I2C_ISA is not set
# CONFIG_I2C_NFORCE2 is not set
# CONFIG_I2C_PARPORT_LIGHT is not set
# CONFIG_I2C_PROSAVAGE is not set
...
...
@@ -703,7 +740,6 @@ CONFIG_I2C_ALGOPCF=y
# CONFIG_I2C_VIAPRO is not set
# CONFIG_I2C_VOODOO3 is not set
# CONFIG_I2C_PCA_ISA is not set
# CONFIG_I2C_SENSOR is not set
#
# Miscellaneous I2C Chip support
...
...
@@ -730,11 +766,16 @@ CONFIG_I2C_ALGOPCF=y
# Hardware Monitoring support
#
# CONFIG_HWMON is not set
# CONFIG_HWMON_VID is not set
#
# Misc devices
#
#
# Multimedia Capabilities Port drivers
#
#
# Multimedia devices
#
...
...
@@ -806,6 +847,7 @@ CONFIG_FB_RADEON_DEBUG=y
# CONFIG_FB_KYRO is not set
# CONFIG_FB_3DFX is not set
# CONFIG_FB_VOODOO1 is not set
# CONFIG_FB_CYBLA is not set
# CONFIG_FB_TRIDENT is not set
# CONFIG_FB_PM3 is not set
# CONFIG_FB_S1D13XXX is not set
...
...
@@ -862,11 +904,12 @@ CONFIG_SND_OPL3_LIB=y
# CONFIG_SND_MTPAV is not set
# CONFIG_SND_SERIAL_U16550 is not set
# CONFIG_SND_MPU401 is not set
CONFIG_SND_AC97_CODEC=y
CONFIG_SND_AC97_BUS=y
#
# PCI devices
#
CONFIG_SND_AC97_CODEC=y
# CONFIG_SND_ALI5451 is not set
# CONFIG_SND_ATIIXP is not set
# CONFIG_SND_ATIIXP_MODEM is not set
...
...
@@ -890,7 +933,7 @@ CONFIG_SND_AC97_CODEC=y
# CONFIG_SND_HDSPM is not set
# CONFIG_SND_TRIDENT is not set
# CONFIG_SND_YMFPCI is not set
# CONFIG_SND_A
LS4000
is not set
# CONFIG_SND_A
D1889
is not set
# CONFIG_SND_CMIPCI is not set
# CONFIG_SND_ENS1370 is not set
# CONFIG_SND_ENS1371 is not set
...
...
@@ -952,9 +995,8 @@ CONFIG_USB_UHCI_HCD=y
#
# USB Device Class drivers
#
# CONFIG_
USB_AUDIO
is not set
# CONFIG_
OBSOLETE_OSS_USB_DRIVER
is not set
# CONFIG_USB_BLUETOOTH_TTY is not set
# CONFIG_USB_MIDI is not set
# CONFIG_USB_ACM is not set
# CONFIG_USB_PRINTER is not set
...
...
@@ -971,6 +1013,7 @@ CONFIG_USB_STORAGE=y
# CONFIG_USB_STORAGE_SDDR09 is not set
# CONFIG_USB_STORAGE_SDDR55 is not set
# CONFIG_USB_STORAGE_JUMPSHOT is not set
# CONFIG_USB_STORAGE_ONETOUCH is not set
#
# USB Input Devices
...
...
@@ -987,9 +1030,11 @@ CONFIG_USB_HIDDEV=y
# CONFIG_USB_MTOUCH is not set
# CONFIG_USB_ITMTOUCH is not set
# CONFIG_USB_EGALAX is not set
# CONFIG_USB_YEALINK is not set
# CONFIG_USB_XPAD is not set
# CONFIG_USB_ATI_REMOTE is not set
# CONFIG_USB_KEYSPAN_REMOTE is not set
# CONFIG_USB_APPLETOUCH is not set
#
# USB Imaging devices
...
...
@@ -1088,10 +1133,6 @@ CONFIG_FS_MBCACHE=y
# CONFIG_REISERFS_FS is not set
# CONFIG_JFS_FS is not set
# CONFIG_FS_POSIX_ACL is not set
#
# XFS support
#
# CONFIG_XFS_FS is not set
# CONFIG_MINIX_FS is not set
# CONFIG_ROMFS_FS is not set
...
...
@@ -1100,6 +1141,7 @@ CONFIG_FS_MBCACHE=y
CONFIG_DNOTIFY=y
CONFIG_AUTOFS_FS=y
# CONFIG_AUTOFS4_FS is not set
# CONFIG_FUSE_FS is not set
#
# CD-ROM/DVD Filesystems
...
...
@@ -1126,13 +1168,11 @@ CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
CONFIG_PROC_FS=y
CONFIG_PROC_KCORE=y
CONFIG_SYSFS=y
# CONFIG_DEVPTS_FS_XATTR is not set
CONFIG_TMPFS=y
CONFIG_TMPFS_XATTR=y
CONFIG_TMPFS_SECURITY=y
CONFIG_HUGETLBFS=y
CONFIG_HUGETLB_PAGE=y
CONFIG_RAMFS=y
# CONFIG_RELAYFS_FS is not set
#
# Miscellaneous filesystems
...
...
@@ -1177,6 +1217,7 @@ CONFIG_RPCSEC_GSS_KRB5=y
# CONFIG_NCP_FS is not set
# CONFIG_CODA_FS is not set
# CONFIG_AFS_FS is not set
# CONFIG_9P_FS is not set
#
# Partition Types
...
...
@@ -1246,10 +1287,12 @@ CONFIG_NLS_UTF8=y
# Library routines
#
# CONFIG_CRC_CCITT is not set
# CONFIG_CRC16 is not set
CONFIG_CRC32=y
# CONFIG_LIBCRC32C is not set
CONFIG_GENERIC_HARDIRQS=y
CONFIG_GENERIC_IRQ_PROBE=y
CONFIG_GENERIC_PENDING_IRQ=y
#
# Profiling support
...
...
@@ -1263,6 +1306,7 @@ CONFIG_GENERIC_IRQ_PROBE=y
CONFIG_DEBUG_KERNEL=y
CONFIG_MAGIC_SYSRQ=y
CONFIG_LOG_BUF_SHIFT=17
CONFIG_DETECT_SOFTLOCKUP=y
# CONFIG_SCHEDSTATS is not set
# CONFIG_DEBUG_SLAB is not set
# CONFIG_DEBUG_SPINLOCK is not set
...
...
arch/ia64/defconfig
浏览文件 @
8a212ab6
#
# Automatically generated make config: don't edit
# Linux kernel version: 2.6.1
2
#
Tue Jun 21 11:30:42
2005
# Linux kernel version: 2.6.1
4-rc1
#
Wed Sep 14 15:13:03
2005
#
#
...
...
@@ -16,6 +16,7 @@ CONFIG_INIT_ENV_ARG_LIMIT=32
# General setup
#
CONFIG_LOCALVERSION=""
CONFIG_LOCALVERSION_AUTO=y
CONFIG_SWAP=y
CONFIG_SYSVIPC=y
CONFIG_POSIX_MQUEUE=y
...
...
@@ -27,6 +28,7 @@ CONFIG_KOBJECT_UEVENT=y
CONFIG_IKCONFIG=y
CONFIG_IKCONFIG_PROC=y
# CONFIG_CPUSETS is not set
CONFIG_INITRAMFS_SOURCE=""
# CONFIG_EMBEDDED is not set
CONFIG_KALLSYMS=y
CONFIG_KALLSYMS_ALL=y
...
...
@@ -80,6 +82,10 @@ CONFIG_MCKINLEY=y
# CONFIG_IA64_PAGE_SIZE_8KB is not set
CONFIG_IA64_PAGE_SIZE_16KB=y
# CONFIG_IA64_PAGE_SIZE_64KB is not set
# CONFIG_HZ_100 is not set
CONFIG_HZ_250=y
# CONFIG_HZ_1000 is not set
CONFIG_HZ=250
CONFIG_IA64_L1_CACHE_SHIFT=7
CONFIG_NUMA=y
CONFIG_VIRTUAL_MEM_MAP=y
...
...
@@ -87,12 +93,21 @@ CONFIG_HOLES_IN_ZONE=y
CONFIG_ARCH_DISCONTIGMEM_ENABLE=y
CONFIG_IA64_CYCLONE=y
CONFIG_IOSAPIC=y
# CONFIG_IA64_SGI_SN_XP is not set
CONFIG_FORCE_MAX_ZONEORDER=18
CONFIG_SMP=y
CONFIG_NR_CPUS=512
CONFIG_HOTPLUG_CPU=y
# CONFIG_SCHED_SMT is not set
# CONFIG_PREEMPT is not set
CONFIG_SELECT_MEMORY_MODEL=y
# CONFIG_FLATMEM_MANUAL is not set
CONFIG_DISCONTIGMEM_MANUAL=y
# CONFIG_SPARSEMEM_MANUAL is not set
CONFIG_DISCONTIGMEM=y
CONFIG_FLAT_NODE_MEM_MAP=y
CONFIG_NEED_MULTIPLE_NODES=y
# CONFIG_SPARSEMEM_STATIC is not set
CONFIG_HAVE_DEC_LOCK=y
CONFIG_IA32_SUPPORT=y
CONFIG_COMPAT=y
...
...
@@ -105,6 +120,7 @@ CONFIG_IA64_PALINFO=y
#
CONFIG_EFI_VARS=y
CONFIG_EFI_PCDP=y
# CONFIG_DELL_RBU is not set
CONFIG_BINFMT_ELF=y
CONFIG_BINFMT_MISC=m
...
...
@@ -112,22 +128,29 @@ CONFIG_BINFMT_MISC=m
# Power management and ACPI
#
CONFIG_PM=y
CONFIG_ACPI=y
# CONFIG_PM_DEBUG is not set
#
# ACPI (Advanced Configuration and Power Interface) Support
#
CONFIG_ACPI=y
CONFIG_ACPI_BUTTON=m
CONFIG_ACPI_FAN=m
CONFIG_ACPI_PROCESSOR=m
CONFIG_ACPI_HOTPLUG_CPU=y
CONFIG_ACPI_THERMAL=m
CONFIG_ACPI_NUMA=y
CONFIG_ACPI_BLACKLIST_YEAR=0
# CONFIG_ACPI_DEBUG is not set
CONFIG_ACPI_POWER=y
CONFIG_ACPI_SYSTEM=y
CONFIG_ACPI_CONTAINER=m
#
# CPU Frequency scaling
#
# CONFIG_CPU_FREQ is not set
#
# Bus options (PCI, PCMCIA)
#
...
...
@@ -135,7 +158,6 @@ CONFIG_PCI=y
CONFIG_PCI_DOMAINS=y
# CONFIG_PCI_MSI is not set
CONFIG_PCI_LEGACY_PROC=y
CONFIG_PCI_NAMES=y
# CONFIG_PCI_DEBUG is not set
#
...
...
@@ -147,12 +169,80 @@ CONFIG_HOTPLUG_PCI_ACPI=m
# CONFIG_HOTPLUG_PCI_ACPI_IBM is not set
# CONFIG_HOTPLUG_PCI_CPCI is not set
# CONFIG_HOTPLUG_PCI_SHPC is not set
# CONFIG_HOTPLUG_PCI_SGI is not set
#
# PCCARD (PCMCIA/CardBus) support
#
# CONFIG_PCCARD is not set
#
# Networking
#
CONFIG_NET=y
#
# Networking options
#
CONFIG_PACKET=y
# CONFIG_PACKET_MMAP is not set
CONFIG_UNIX=y
# CONFIG_NET_KEY is not set
CONFIG_INET=y
CONFIG_IP_MULTICAST=y
# CONFIG_IP_ADVANCED_ROUTER is not set
CONFIG_IP_FIB_HASH=y
# CONFIG_IP_PNP is not set
# CONFIG_NET_IPIP is not set
# CONFIG_NET_IPGRE is not set
# CONFIG_IP_MROUTE is not set
CONFIG_ARPD=y
CONFIG_SYN_COOKIES=y
# CONFIG_INET_AH is not set
# CONFIG_INET_ESP is not set
# CONFIG_INET_IPCOMP is not set
# CONFIG_INET_TUNNEL is not set
CONFIG_INET_DIAG=y
CONFIG_INET_TCP_DIAG=y
# CONFIG_TCP_CONG_ADVANCED is not set
CONFIG_TCP_CONG_BIC=y
# CONFIG_IPV6 is not set
# CONFIG_NETFILTER is not set
#
# DCCP Configuration (EXPERIMENTAL)
#
# CONFIG_IP_DCCP is not set
#
# SCTP Configuration (EXPERIMENTAL)
#
# CONFIG_IP_SCTP is not set
# CONFIG_ATM is not set
# CONFIG_BRIDGE is not set
# CONFIG_VLAN_8021Q is not set
# CONFIG_DECNET is not set
# CONFIG_LLC2 is not set
# CONFIG_IPX is not set
# CONFIG_ATALK is not set
# CONFIG_X25 is not set
# CONFIG_LAPB is not set
# CONFIG_NET_DIVERT is not set
# CONFIG_ECONET is not set
# CONFIG_WAN_ROUTER is not set
# CONFIG_NET_SCHED is not set
# CONFIG_NET_CLS_ROUTE is not set
#
# Network testing
#
# CONFIG_NET_PKTGEN is not set
# CONFIG_NETFILTER_NETLINK is not set
# CONFIG_HAMRADIO is not set
# CONFIG_IRDA is not set
# CONFIG_BT is not set
# CONFIG_IEEE80211 is not set
#
# Device Drivers
#
...
...
@@ -162,9 +252,14 @@ CONFIG_HOTPLUG_PCI_ACPI=m
#
CONFIG_STANDALONE=y
CONFIG_PREVENT_FIRMWARE_BUILD=y
# CONFIG_FW_LOADER is not set
CONFIG_FW_LOADER=m
# CONFIG_DEBUG_DRIVER is not set
#
# Connector - unified userspace <-> kernelspace linker
#
# CONFIG_CONNECTOR is not set
#
# Memory Technology Devices (MTD)
#
...
...
@@ -178,7 +273,13 @@ CONFIG_PREVENT_FIRMWARE_BUILD=y
#
# Plug and Play support
#
# CONFIG_PNP is not set
CONFIG_PNP=y
# CONFIG_PNP_DEBUG is not set
#
# Protocols
#
CONFIG_PNPACPI=y
#
# Block devices
...
...
@@ -197,7 +298,6 @@ CONFIG_BLK_DEV_RAM=y
CONFIG_BLK_DEV_RAM_COUNT=16
CONFIG_BLK_DEV_RAM_SIZE=4096
CONFIG_BLK_DEV_INITRD=y
CONFIG_INITRAMFS_SOURCE=""
# CONFIG_CDROM_PKTCDVD is not set
#
...
...
@@ -230,7 +330,8 @@ CONFIG_BLK_DEV_IDESCSI=m
#
# IDE chipset support/bugfixes
#
CONFIG_IDE_GENERIC=y
# CONFIG_IDE_GENERIC is not set
# CONFIG_BLK_DEV_IDEPNP is not set
CONFIG_BLK_DEV_IDEPCI=y
# CONFIG_IDEPCI_SHARE_IRQ is not set
# CONFIG_BLK_DEV_OFFBOARD is not set
...
...
@@ -252,6 +353,7 @@ CONFIG_BLK_DEV_CMD64X=y
# CONFIG_BLK_DEV_HPT366 is not set
# CONFIG_BLK_DEV_SC1200 is not set
CONFIG_BLK_DEV_PIIX=y
# CONFIG_BLK_DEV_IT821X is not set
# CONFIG_BLK_DEV_NS87415 is not set
# CONFIG_BLK_DEV_PDC202XX_OLD is not set
# CONFIG_BLK_DEV_PDC202XX_NEW is not set
...
...
@@ -270,6 +372,7 @@ CONFIG_IDEDMA_AUTO=y
#
# SCSI device support
#
# CONFIG_RAID_ATTRS is not set
CONFIG_SCSI=y
CONFIG_SCSI_PROC_FS=y
...
...
@@ -297,6 +400,7 @@ CONFIG_CHR_DEV_SG=m
CONFIG_SCSI_SPI_ATTRS=y
CONFIG_SCSI_FC_ATTRS=y
# CONFIG_SCSI_ISCSI_ATTRS is not set
# CONFIG_SCSI_SAS_ATTRS is not set
#
# SCSI low-level drivers
...
...
@@ -314,6 +418,7 @@ CONFIG_SCSI_SATA=y
# CONFIG_SCSI_SATA_AHCI is not set
# CONFIG_SCSI_SATA_SVW is not set
# CONFIG_SCSI_ATA_PIIX is not set
# CONFIG_SCSI_SATA_MV is not set
# CONFIG_SCSI_SATA_NV is not set
# CONFIG_SCSI_SATA_PROMISE is not set
# CONFIG_SCSI_SATA_QSTOR is not set
...
...
@@ -335,7 +440,6 @@ CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64
# CONFIG_SCSI_SYM53C8XX_IOMAPPED is not set
# CONFIG_SCSI_IPR is not set
# CONFIG_SCSI_QLOGIC_FC is not set
# CONFIG_SCSI_QLOGIC_FC_FIRMWARE is not set
CONFIG_SCSI_QLOGIC_1280=y
# CONFIG_SCSI_QLOGIC_1280_1040 is not set
CONFIG_SCSI_QLA2XXX=y
...
...
@@ -344,6 +448,7 @@ CONFIG_SCSI_QLA22XX=m
CONFIG_SCSI_QLA2300=m
CONFIG_SCSI_QLA2322=m
# CONFIG_SCSI_QLA6312 is not set
# CONFIG_SCSI_QLA24XX is not set
# CONFIG_SCSI_LPFC is not set
# CONFIG_SCSI_DC395x is not set
# CONFIG_SCSI_DC390T is not set
...
...
@@ -390,80 +495,25 @@ CONFIG_FUSION_MAX_SGE=128
# CONFIG_I2O is not set
#
# Networking support
#
CONFIG_NET=y
#
# Networking options
#
CONFIG_PACKET=y
# CONFIG_PACKET_MMAP is not set
CONFIG_UNIX=y
# CONFIG_NET_KEY is not set
CONFIG_INET=y
CONFIG_IP_MULTICAST=y
# CONFIG_IP_ADVANCED_ROUTER is not set
# CONFIG_IP_PNP is not set
# CONFIG_NET_IPIP is not set
# CONFIG_NET_IPGRE is not set
# CONFIG_IP_MROUTE is not set
CONFIG_ARPD=y
CONFIG_SYN_COOKIES=y
# CONFIG_INET_AH is not set
# CONFIG_INET_ESP is not set
# CONFIG_INET_IPCOMP is not set
# CONFIG_INET_TUNNEL is not set
CONFIG_IP_TCPDIAG=y
# CONFIG_IP_TCPDIAG_IPV6 is not set
# CONFIG_IPV6 is not set
# CONFIG_NETFILTER is not set
#
# SCTP Configuration (EXPERIMENTAL)
#
# CONFIG_IP_SCTP is not set
# CONFIG_ATM is not set
# CONFIG_BRIDGE is not set
# CONFIG_VLAN_8021Q is not set
# CONFIG_DECNET is not set
# CONFIG_LLC2 is not set
# CONFIG_IPX is not set
# CONFIG_ATALK is not set
# CONFIG_X25 is not set
# CONFIG_LAPB is not set
# CONFIG_NET_DIVERT is not set
# CONFIG_ECONET is not set
# CONFIG_WAN_ROUTER is not set
# Network device support
#
# QoS and/or fair queueing
#
# CONFIG_NET_SCHED is not set
# CONFIG_NET_CLS_ROUTE is not set
#
# Network testing
#
# CONFIG_NET_PKTGEN is not set
CONFIG_NETPOLL=y
# CONFIG_NETPOLL_RX is not set
# CONFIG_NETPOLL_TRAP is not set
CONFIG_NET_POLL_CONTROLLER=y
# CONFIG_HAMRADIO is not set
# CONFIG_IRDA is not set
# CONFIG_BT is not set
CONFIG_NETDEVICES=y
CONFIG_DUMMY=m
# CONFIG_BONDING is not set
# CONFIG_EQUALIZER is not set
# CONFIG_TUN is not set
# CONFIG_NET_SB1000 is not set
#
# ARCnet devices
#
# CONFIG_ARCNET is not set
#
# PHY device support
#
# CONFIG_PHYLIB is not set
#
# Ethernet (10 or 100Mbit)
#
...
...
@@ -485,6 +535,7 @@ CONFIG_TULIP=m
# CONFIG_DE4X5 is not set
# CONFIG_WINBOND_840 is not set
# CONFIG_DM9102 is not set
# CONFIG_ULI526X is not set
# CONFIG_HP100 is not set
CONFIG_NET_PCI=y
# CONFIG_PCNET32 is not set
...
...
@@ -516,6 +567,7 @@ CONFIG_E1000=y
# CONFIG_HAMACHI is not set
# CONFIG_YELLOWFIN is not set
# CONFIG_R8169 is not set
# CONFIG_SIS190 is not set
# CONFIG_SKGE is not set
# CONFIG_SK98LIN is not set
# CONFIG_VIA_VELOCITY is not set
...
...
@@ -525,6 +577,7 @@ CONFIG_TIGON3=y
#
# Ethernet (10000 Mbit)
#
# CONFIG_CHELSIO_T1 is not set
# CONFIG_IXGB is not set
# CONFIG_S2IO is not set
...
...
@@ -549,6 +602,10 @@ CONFIG_TIGON3=y
# CONFIG_NET_FC is not set
# CONFIG_SHAPER is not set
CONFIG_NETCONSOLE=y
CONFIG_NETPOLL=y
# CONFIG_NETPOLL_RX is not set
# CONFIG_NETPOLL_TRAP is not set
CONFIG_NET_POLL_CONTROLLER=y
#
# ISDN subsystem
...
...
@@ -607,9 +664,7 @@ CONFIG_GAMEPORT=m
# CONFIG_GAMEPORT_NS558 is not set
# CONFIG_GAMEPORT_L4 is not set
# CONFIG_GAMEPORT_EMU10K1 is not set
# CONFIG_GAMEPORT_VORTEX is not set
# CONFIG_GAMEPORT_FM801 is not set
# CONFIG_GAMEPORT_CS461X is not set
#
# Character devices
...
...
@@ -620,6 +675,7 @@ CONFIG_HW_CONSOLE=y
CONFIG_SERIAL_NONSTANDARD=y
# CONFIG_ROCKETPORT is not set
# CONFIG_CYCLADES is not set
# CONFIG_DIGIEPCA is not set
# CONFIG_MOXA_SMARTIO is not set
# CONFIG_ISI is not set
# CONFIG_SYNCLINKMP is not set
...
...
@@ -641,7 +697,6 @@ CONFIG_SERIAL_8250_NR_UARTS=6
CONFIG_SERIAL_8250_EXTENDED=y
CONFIG_SERIAL_8250_SHARE_IRQ=y
# CONFIG_SERIAL_8250_DETECT_IRQ is not set
# CONFIG_SERIAL_8250_MULTIPORT is not set
# CONFIG_SERIAL_8250_RSA is not set
#
...
...
@@ -650,8 +705,8 @@ CONFIG_SERIAL_8250_SHARE_IRQ=y
CONFIG_SERIAL_CORE=y
CONFIG_SERIAL_CORE_CONSOLE=y
CONFIG_SERIAL_SGI_L1_CONSOLE=y
CONFIG_SERIAL_SGI_IOC4=y
# CONFIG_SERIAL_JSM is not set
CONFIG_SERIAL_SGI_IOC4=y
CONFIG_UNIX98_PTYS=y
CONFIG_LEGACY_PTYS=y
CONFIG_LEGACY_PTY_COUNT=256
...
...
@@ -684,6 +739,8 @@ CONFIG_DRM_R128=m
CONFIG_DRM_RADEON=m
CONFIG_DRM_MGA=m
CONFIG_DRM_SIS=m
# CONFIG_DRM_VIA is not set
# CONFIG_DRM_SAVAGE is not set
CONFIG_RAW_DRIVER=m
CONFIG_HPET=y
# CONFIG_HPET_RTC_IRQ is not set
...
...
@@ -707,10 +764,21 @@ CONFIG_MMTIMER=y
#
# CONFIG_W1 is not set
#
# Hardware Monitoring support
#
CONFIG_HWMON=y
# CONFIG_HWMON_VID is not set
# CONFIG_HWMON_DEBUG_CHIP is not set
#
# Misc devices
#
#
# Multimedia Capabilities Port drivers
#
#
# Multimedia devices
#
...
...
@@ -753,6 +821,7 @@ CONFIG_SND_PCM_OSS=m
CONFIG_SND_SEQUENCER_OSS=y
CONFIG_SND_VERBOSE_PRINTK=y
# CONFIG_SND_DEBUG is not set
CONFIG_SND_GENERIC_DRIVER=y
#
# Generic devices
...
...
@@ -764,11 +833,12 @@ CONFIG_SND_VIRMIDI=m
CONFIG_SND_MTPAV=m
CONFIG_SND_SERIAL_U16550=m
CONFIG_SND_MPU401=m
CONFIG_SND_AC97_CODEC=m
CONFIG_SND_AC97_BUS=m
#
# PCI devices
#
CONFIG_SND_AC97_CODEC=m
# CONFIG_SND_ALI5451 is not set
# CONFIG_SND_ATIIXP is not set
# CONFIG_SND_ATIIXP_MODEM is not set
...
...
@@ -790,9 +860,10 @@ CONFIG_SND_EMU10K1=m
# CONFIG_SND_RME96 is not set
# CONFIG_SND_RME9652 is not set
# CONFIG_SND_HDSP is not set
# CONFIG_SND_HDSPM is not set
# CONFIG_SND_TRIDENT is not set
# CONFIG_SND_YMFPCI is not set
# CONFIG_SND_A
LS4000
is not set
# CONFIG_SND_A
D1889
is not set
# CONFIG_SND_CMIPCI is not set
# CONFIG_SND_ENS1370 is not set
# CONFIG_SND_ENS1371 is not set
...
...
@@ -844,6 +915,7 @@ CONFIG_USB_DEVICEFS=y
CONFIG_USB_EHCI_HCD=m
# CONFIG_USB_EHCI_SPLIT_ISO is not set
# CONFIG_USB_EHCI_ROOT_HUB_TT is not set
# CONFIG_USB_ISP116X_HCD is not set
CONFIG_USB_OHCI_HCD=m
# CONFIG_USB_OHCI_BIG_ENDIAN is not set
CONFIG_USB_OHCI_LITTLE_ENDIAN=y
...
...
@@ -853,9 +925,8 @@ CONFIG_USB_UHCI_HCD=m
#
# USB Device Class drivers
#
# CONFIG_
USB_AUDIO
is not set
# CONFIG_
OBSOLETE_OSS_USB_DRIVER
is not set
# CONFIG_USB_BLUETOOTH_TTY is not set
# CONFIG_USB_MIDI is not set
# CONFIG_USB_ACM is not set
# CONFIG_USB_PRINTER is not set
...
...
@@ -888,12 +959,17 @@ CONFIG_USB_HIDINPUT=y
# CONFIG_USB_MOUSE is not set
# CONFIG_USB_AIPTEK is not set
# CONFIG_USB_WACOM is not set
# CONFIG_USB_ACECAD is not set
# CONFIG_USB_KBTAB is not set
# CONFIG_USB_POWERMATE is not set
# CONFIG_USB_MTOUCH is not set
# CONFIG_USB_ITMTOUCH is not set
# CONFIG_USB_EGALAX is not set
# CONFIG_USB_YEALINK is not set
# CONFIG_USB_XPAD is not set
# CONFIG_USB_ATI_REMOTE is not set
# CONFIG_USB_KEYSPAN_REMOTE is not set
# CONFIG_USB_APPLETOUCH is not set
#
# USB Imaging devices
...
...
@@ -918,7 +994,7 @@ CONFIG_USB_HIDINPUT=y
# CONFIG_USB_PEGASUS is not set
# CONFIG_USB_RTL8150 is not set
# CONFIG_USB_USBNET is not set
CONFIG_USB_MON=
m
CONFIG_USB_MON=
y
#
# USB port drivers
...
...
@@ -944,10 +1020,11 @@ CONFIG_USB_MON=m
# CONFIG_USB_PHIDGETSERVO is not set
# CONFIG_USB_IDMOUSE is not set
# CONFIG_USB_SISUSBVGA is not set
# CONFIG_USB_LD is not set
# CONFIG_USB_TEST is not set
#
# USB
ATM/DSL drivers
# USB
DSL modem support
#
#
...
...
@@ -964,6 +1041,8 @@ CONFIG_USB_MON=m
# InfiniBand support
#
CONFIG_INFINIBAND=m
# CONFIG_INFINIBAND_USER_MAD is not set
# CONFIG_INFINIBAND_USER_ACCESS is not set
CONFIG_INFINIBAND_MTHCA=m
# CONFIG_INFINIBAND_MTHCA_DEBUG is not set
CONFIG_INFINIBAND_IPOIB=m
...
...
@@ -981,6 +1060,7 @@ CONFIG_EXT2_FS=y
CONFIG_EXT2_FS_XATTR=y
CONFIG_EXT2_FS_POSIX_ACL=y
CONFIG_EXT2_FS_SECURITY=y
# CONFIG_EXT2_FS_XIP is not set
CONFIG_EXT3_FS=y
CONFIG_EXT3_FS_XATTR=y
CONFIG_EXT3_FS_POSIX_ACL=y
...
...
@@ -996,22 +1076,20 @@ CONFIG_REISERFS_FS_POSIX_ACL=y
CONFIG_REISERFS_FS_SECURITY=y
# CONFIG_JFS_FS is not set
CONFIG_FS_POSIX_ACL=y
#
# XFS support
#
CONFIG_XFS_FS=y
CONFIG_XFS_EXPORT=y
# CONFIG_XFS_RT is not set
# CONFIG_XFS_QUOTA is not set
# CONFIG_XFS_SECURITY is not set
# CONFIG_XFS_POSIX_ACL is not set
# CONFIG_XFS_RT is not set
# CONFIG_MINIX_FS is not set
# CONFIG_ROMFS_FS is not set
CONFIG_INOTIFY=y
# CONFIG_QUOTA is not set
CONFIG_DNOTIFY=y
CONFIG_AUTOFS_FS=y
CONFIG_AUTOFS4_FS=y
# CONFIG_FUSE_FS is not set
#
# CD-ROM/DVD Filesystems
...
...
@@ -1040,14 +1118,11 @@ CONFIG_NTFS_FS=m
CONFIG_PROC_FS=y
CONFIG_PROC_KCORE=y
CONFIG_SYSFS=y
# CONFIG_DEVFS_FS is not set
# CONFIG_DEVPTS_FS_XATTR is not set
CONFIG_TMPFS=y
CONFIG_TMPFS_XATTR=y
CONFIG_TMPFS_SECURITY=y
CONFIG_HUGETLBFS=y
CONFIG_HUGETLB_PAGE=y
CONFIG_RAMFS=y
# CONFIG_RELAYFS_FS is not set
#
# Miscellaneous filesystems
...
...
@@ -1071,15 +1146,18 @@ CONFIG_RAMFS=y
#
CONFIG_NFS_FS=m
CONFIG_NFS_V3=y
# CONFIG_NFS_V3_ACL is not set
CONFIG_NFS_V4=y
CONFIG_NFS_DIRECTIO=y
CONFIG_NFSD=m
CONFIG_NFSD_V3=y
# CONFIG_NFSD_V3_ACL is not set
CONFIG_NFSD_V4=y
CONFIG_NFSD_TCP=y
CONFIG_LOCKD=m
CONFIG_LOCKD_V4=y
CONFIG_EXPORTFS=y
CONFIG_NFS_COMMON=y
CONFIG_SUNRPC=m
CONFIG_SUNRPC_GSS=m
CONFIG_RPCSEC_GSS_KRB5=m
...
...
@@ -1094,6 +1172,7 @@ CONFIG_CIFS=m
# CONFIG_NCP_FS is not set
# CONFIG_CODA_FS is not set
# CONFIG_AFS_FS is not set
# CONFIG_9P_FS is not set
#
# Partition Types
...
...
@@ -1163,10 +1242,12 @@ CONFIG_NLS_UTF8=m
# Library routines
#
# CONFIG_CRC_CCITT is not set
# CONFIG_CRC16 is not set
CONFIG_CRC32=y
# CONFIG_LIBCRC32C is not set
CONFIG_GENERIC_HARDIRQS=y
CONFIG_GENERIC_IRQ_PROBE=y
CONFIG_GENERIC_PENDING_IRQ=y
#
# HP Simulator drivers
...
...
@@ -1187,6 +1268,7 @@ CONFIG_GENERIC_IRQ_PROBE=y
CONFIG_DEBUG_KERNEL=y
CONFIG_MAGIC_SYSRQ=y
CONFIG_LOG_BUF_SHIFT=20
CONFIG_DETECT_SOFTLOCKUP=y
# CONFIG_SCHEDSTATS is not set
# CONFIG_DEBUG_SLAB is not set
# CONFIG_DEBUG_SPINLOCK is not set
...
...
@@ -1194,6 +1276,7 @@ CONFIG_LOG_BUF_SHIFT=20
# CONFIG_DEBUG_KOBJECT is not set
# CONFIG_DEBUG_INFO is not set
# CONFIG_DEBUG_FS is not set
# CONFIG_KPROBES is not set
CONFIG_IA64_GRANULE_16MB=y
# CONFIG_IA64_GRANULE_64MB is not set
# CONFIG_IA64_PRINT_HAZARDS is not set
...
...
@@ -1215,7 +1298,7 @@ CONFIG_CRYPTO=y
# CONFIG_CRYPTO_HMAC is not set
# CONFIG_CRYPTO_NULL is not set
# CONFIG_CRYPTO_MD4 is not set
CONFIG_CRYPTO_MD5=
m
CONFIG_CRYPTO_MD5=
y
# CONFIG_CRYPTO_SHA1 is not set
# CONFIG_CRYPTO_SHA256 is not set
# CONFIG_CRYPTO_SHA512 is not set
...
...
arch/ia64/hp/common/hwsw_iommu.c
浏览文件 @
8a212ab6
...
...
@@ -17,7 +17,7 @@
#include <asm/machvec.h>
/* swiotlb declarations & definitions: */
extern
void
swiotlb
_init_with_default_size
(
size_t
size
);
extern
int
swiotlb_late
_init_with_default_size
(
size_t
size
);
extern
ia64_mv_dma_alloc_coherent
swiotlb_alloc_coherent
;
extern
ia64_mv_dma_free_coherent
swiotlb_free_coherent
;
extern
ia64_mv_dma_map_single
swiotlb_map_single
;
...
...
@@ -67,7 +67,16 @@ void
hwsw_init
(
void
)
{
/* default to a smallish 2MB sw I/O TLB */
swiotlb_init_with_default_size
(
2
*
(
1
<<
20
));
if
(
swiotlb_late_init_with_default_size
(
2
*
(
1
<<
20
))
!=
0
)
{
#ifdef CONFIG_IA64_GENERIC
/* Better to have normal DMA than panic */
printk
(
KERN_WARNING
"%s: Failed to initialize software I/O TLB,"
" reverting to hpzx1 platform vector
\n
"
,
__FUNCTION__
);
machvec_init
(
"hpzx1"
);
#else
panic
(
"Unable to initialize software I/O TLB services"
);
#endif
}
}
void
*
...
...
arch/ia64/hp/common/sba_iommu.c
浏览文件 @
8a212ab6
...
...
@@ -2028,9 +2028,40 @@ static struct acpi_driver acpi_sba_ioc_driver = {
static
int
__init
sba_init
(
void
)
{
if
(
!
ia64_platform_is
(
"hpzx1"
)
&&
!
ia64_platform_is
(
"hpzx1_swiotlb"
))
return
0
;
acpi_bus_register_driver
(
&
acpi_sba_ioc_driver
);
if
(
!
ioc_list
)
if
(
!
ioc_list
)
{
#ifdef CONFIG_IA64_GENERIC
extern
int
swiotlb_late_init_with_default_size
(
size_t
size
);
/*
* If we didn't find something sba_iommu can claim, we
* need to setup the swiotlb and switch to the dig machvec.
*/
if
(
swiotlb_late_init_with_default_size
(
64
*
(
1
<<
20
))
!=
0
)
panic
(
"Unable to find SBA IOMMU or initialize "
"software I/O TLB: Try machvec=dig boot option"
);
machvec_init
(
"dig"
);
#else
panic
(
"Unable to find SBA IOMMU: Try a generic or DIG kernel"
);
#endif
return
0
;
}
#if defined(CONFIG_IA64_GENERIC) || defined(CONFIG_IA64_HP_ZX1_SWIOTLB)
/*
* hpzx1_swiotlb needs to have a fairly small swiotlb bounce
* buffer setup to support devices with smaller DMA masks than
* sba_iommu can handle.
*/
if
(
ia64_platform_is
(
"hpzx1_swiotlb"
))
{
extern
void
hwsw_init
(
void
);
hwsw_init
();
}
#endif
#ifdef CONFIG_PCI
{
...
...
@@ -2048,18 +2079,6 @@ sba_init(void)
subsys_initcall
(
sba_init
);
/* must be initialized after ACPI etc., but before any drivers... */
extern
void
dig_setup
(
char
**
);
/*
* MAX_DMA_ADDRESS needs to be setup prior to paging_init to do any good,
* so we use the platform_setup hook to fix it up.
*/
void
__init
sba_setup
(
char
**
cmdline_p
)
{
MAX_DMA_ADDRESS
=
~
0UL
;
dig_setup
(
cmdline_p
);
}
static
int
__init
nosbagart
(
char
*
str
)
{
...
...
arch/ia64/hp/sim/simscsi.c
浏览文件 @
8a212ab6
...
...
@@ -205,10 +205,11 @@ simscsi_get_disk_size (int fd)
char
buf
[
512
];
/*
* This is a bit kludgey: the simulator doesn't provide a direct way of determining
* the disk size, so we do a binary search, assuming a maximum disk size of 4GB.
* This is a bit kludgey: the simulator doesn't provide a
* direct way of determining the disk size, so we do a binary
* search, assuming a maximum disk size of 128GB.
*/
for
(
bit
=
(
4
UL
<<
30
)
/
512
;
bit
!=
0
;
bit
>>=
1
)
{
for
(
bit
=
(
128
UL
<<
30
)
/
512
;
bit
!=
0
;
bit
>>=
1
)
{
req
.
addr
=
__pa
(
&
buf
);
req
.
len
=
sizeof
(
buf
);
ia64_ssc
(
fd
,
1
,
__pa
(
&
req
),
((
sectors
|
bit
)
-
1
)
*
512
,
SSC_READ
);
...
...
@@ -225,8 +226,10 @@ simscsi_readwrite10 (struct scsi_cmnd *sc, int mode)
{
unsigned
long
offset
;
offset
=
(
(
sc
->
cmnd
[
2
]
<<
24
)
|
(
sc
->
cmnd
[
3
]
<<
16
)
|
(
sc
->
cmnd
[
4
]
<<
8
)
|
(
sc
->
cmnd
[
5
]
<<
0
))
*
512
;
offset
=
(((
unsigned
long
)
sc
->
cmnd
[
2
]
<<
24
)
|
((
unsigned
long
)
sc
->
cmnd
[
3
]
<<
16
)
|
((
unsigned
long
)
sc
->
cmnd
[
4
]
<<
8
)
|
((
unsigned
long
)
sc
->
cmnd
[
5
]
<<
0
))
*
512UL
;
if
(
sc
->
use_sg
>
0
)
simscsi_sg_readwrite
(
sc
,
mode
,
offset
);
else
...
...
arch/ia64/kernel/acpi.c
浏览文件 @
8a212ab6
...
...
@@ -838,7 +838,7 @@ EXPORT_SYMBOL(acpi_unmap_lsapic);
#endif
/* CONFIG_ACPI_HOTPLUG_CPU */
#ifdef CONFIG_ACPI_NUMA
acpi_status
__devinit
static
acpi_status
__devinit
acpi_map_iosapic
(
acpi_handle
handle
,
u32
depth
,
void
*
context
,
void
**
ret
)
{
struct
acpi_buffer
buffer
=
{
ACPI_ALLOCATE_BUFFER
,
NULL
};
...
...
@@ -890,7 +890,16 @@ acpi_map_iosapic(acpi_handle handle, u32 depth, void *context, void **ret)
map_iosapic_to_node
(
gsi_base
,
node
);
return
AE_OK
;
}
#endif
/* CONFIG_NUMA */
static
int
__init
acpi_map_iosapics
(
void
)
{
acpi_get_devices
(
NULL
,
acpi_map_iosapic
,
NULL
,
NULL
);
return
0
;
}
fs_initcall
(
acpi_map_iosapics
);
#endif
/* CONFIG_ACPI_NUMA */
int
acpi_register_ioapic
(
acpi_handle
handle
,
u64
phys_addr
,
u32
gsi_base
)
{
...
...
arch/ia64/kernel/efi.c
浏览文件 @
8a212ab6
...
...
@@ -239,57 +239,30 @@ is_available_memory (efi_memory_desc_t *md)
return
0
;
}
/*
* Trim descriptor MD so its starts at address START_ADDR. If the descriptor covers
* memory that is normally available to the kernel, issue a warning that some memory
* is being ignored.
*/
static
void
trim_bottom
(
efi_memory_desc_t
*
md
,
u64
start_addr
)
{
u64
num_skipped_pages
;
typedef
struct
kern_memdesc
{
u64
attribute
;
u64
start
;
u64
num_pages
;
}
kern_memdesc_t
;
if
(
md
->
phys_addr
>=
start_addr
||
!
md
->
num_pages
)
return
;
num_skipped_pages
=
(
start_addr
-
md
->
phys_addr
)
>>
EFI_PAGE_SHIFT
;
if
(
num_skipped_pages
>
md
->
num_pages
)
num_skipped_pages
=
md
->
num_pages
;
if
(
is_available_memory
(
md
))
printk
(
KERN_NOTICE
"efi.%s: ignoring %luKB of memory at 0x%lx due to granule hole "
"at 0x%lx
\n
"
,
__FUNCTION__
,
(
num_skipped_pages
<<
EFI_PAGE_SHIFT
)
>>
10
,
md
->
phys_addr
,
start_addr
-
IA64_GRANULE_SIZE
);
/*
* NOTE: Don't set md->phys_addr to START_ADDR because that could cause the memory
* descriptor list to become unsorted. In such a case, md->num_pages will be
* zero, so the Right Thing will happen.
*/
md
->
phys_addr
+=
num_skipped_pages
<<
EFI_PAGE_SHIFT
;
md
->
num_pages
-=
num_skipped_pages
;
}
static
kern_memdesc_t
*
kern_memmap
;
static
void
trim_top
(
efi_memory_desc_t
*
md
,
u64
end_add
r
)
walk
(
efi_freemem_callback_t
callback
,
void
*
arg
,
u64
att
r
)
{
u64
num_dropped_pages
,
md_end_addr
;
md_end_addr
=
md
->
phys_addr
+
(
md
->
num_pages
<<
EFI_PAGE_SHIFT
);
if
(
md_end_addr
<=
end_addr
||
!
md
->
num_pages
)
return
;
kern_memdesc_t
*
k
;
u64
start
,
end
,
voff
;
num_dropped_pages
=
(
md_end_addr
-
end_addr
)
>>
EFI_PAGE_SHIF
T
;
if
(
num_dropped_pages
>
md
->
num_pages
)
num_dropped_pages
=
md
->
num_pages
;
if
(
is_available_memory
(
md
))
printk
(
KERN_NOTICE
"efi.%s: ignoring %luKB of memory at 0x%lx due to granule hole "
"at 0x%lx
\n
"
,
__FUNCTION__
,
(
num_dropped_pages
<<
EFI_PAGE_SHIFT
)
>>
10
,
md
->
phys_addr
,
end_addr
)
;
md
->
num_pages
-=
num_dropped_pages
;
voff
=
(
attr
==
EFI_MEMORY_WB
)
?
PAGE_OFFSET
:
__IA64_UNCACHED_OFFSE
T
;
for
(
k
=
kern_memmap
;
k
->
start
!=
~
0UL
;
k
++
)
{
if
(
k
->
attribute
!=
attr
)
continue
;
start
=
PAGE_ALIGN
(
k
->
start
);
end
=
(
k
->
start
+
(
k
->
num_pages
<<
EFI_PAGE_SHIFT
))
&
PAGE_MASK
;
if
(
start
<
end
)
if
((
*
callback
)(
start
+
voff
,
end
+
voff
,
arg
)
<
0
)
return
;
}
}
/*
...
...
@@ -299,148 +272,19 @@ trim_top (efi_memory_desc_t *md, u64 end_addr)
void
efi_memmap_walk
(
efi_freemem_callback_t
callback
,
void
*
arg
)
{
int
prev_valid
=
0
;
struct
range
{
u64
start
;
u64
end
;
}
prev
,
curr
;
void
*
efi_map_start
,
*
efi_map_end
,
*
p
,
*
q
;
efi_memory_desc_t
*
md
,
*
check_md
;
u64
efi_desc_size
,
start
,
end
,
granule_addr
,
last_granule_addr
,
first_non_wb_addr
=
0
;
unsigned
long
total_mem
=
0
;
efi_map_start
=
__va
(
ia64_boot_param
->
efi_memmap
);
efi_map_end
=
efi_map_start
+
ia64_boot_param
->
efi_memmap_size
;
efi_desc_size
=
ia64_boot_param
->
efi_memdesc_size
;
for
(
p
=
efi_map_start
;
p
<
efi_map_end
;
p
+=
efi_desc_size
)
{
md
=
p
;
/* skip over non-WB memory descriptors; that's all we're interested in... */
if
(
!
(
md
->
attribute
&
EFI_MEMORY_WB
))
continue
;
/*
* granule_addr is the base of md's first granule.
* [granule_addr - first_non_wb_addr) is guaranteed to
* be contiguous WB memory.
*/
granule_addr
=
GRANULEROUNDDOWN
(
md
->
phys_addr
);
first_non_wb_addr
=
max
(
first_non_wb_addr
,
granule_addr
);
if
(
first_non_wb_addr
<
md
->
phys_addr
)
{
trim_bottom
(
md
,
granule_addr
+
IA64_GRANULE_SIZE
);
granule_addr
=
GRANULEROUNDDOWN
(
md
->
phys_addr
);
first_non_wb_addr
=
max
(
first_non_wb_addr
,
granule_addr
);
}
for
(
q
=
p
;
q
<
efi_map_end
;
q
+=
efi_desc_size
)
{
check_md
=
q
;
if
((
check_md
->
attribute
&
EFI_MEMORY_WB
)
&&
(
check_md
->
phys_addr
==
first_non_wb_addr
))
first_non_wb_addr
+=
check_md
->
num_pages
<<
EFI_PAGE_SHIFT
;
else
break
;
/* non-WB or hole */
}
last_granule_addr
=
GRANULEROUNDDOWN
(
first_non_wb_addr
);
if
(
last_granule_addr
<
md
->
phys_addr
+
(
md
->
num_pages
<<
EFI_PAGE_SHIFT
))
trim_top
(
md
,
last_granule_addr
);
if
(
is_available_memory
(
md
))
{
if
(
md
->
phys_addr
+
(
md
->
num_pages
<<
EFI_PAGE_SHIFT
)
>=
max_addr
)
{
if
(
md
->
phys_addr
>=
max_addr
)
continue
;
md
->
num_pages
=
(
max_addr
-
md
->
phys_addr
)
>>
EFI_PAGE_SHIFT
;
first_non_wb_addr
=
max_addr
;
}
if
(
total_mem
>=
mem_limit
)
continue
;
if
(
total_mem
+
(
md
->
num_pages
<<
EFI_PAGE_SHIFT
)
>
mem_limit
)
{
unsigned
long
limit_addr
=
md
->
phys_addr
;
limit_addr
+=
mem_limit
-
total_mem
;
limit_addr
=
GRANULEROUNDDOWN
(
limit_addr
);
if
(
md
->
phys_addr
>
limit_addr
)
continue
;
md
->
num_pages
=
(
limit_addr
-
md
->
phys_addr
)
>>
EFI_PAGE_SHIFT
;
first_non_wb_addr
=
max_addr
=
md
->
phys_addr
+
(
md
->
num_pages
<<
EFI_PAGE_SHIFT
);
}
total_mem
+=
(
md
->
num_pages
<<
EFI_PAGE_SHIFT
);
if
(
md
->
num_pages
==
0
)
continue
;
curr
.
start
=
PAGE_OFFSET
+
md
->
phys_addr
;
curr
.
end
=
curr
.
start
+
(
md
->
num_pages
<<
EFI_PAGE_SHIFT
);
if
(
!
prev_valid
)
{
prev
=
curr
;
prev_valid
=
1
;
}
else
{
if
(
curr
.
start
<
prev
.
start
)
printk
(
KERN_ERR
"Oops: EFI memory table not ordered!
\n
"
);
if
(
prev
.
end
==
curr
.
start
)
{
/* merge two consecutive memory ranges */
prev
.
end
=
curr
.
end
;
}
else
{
start
=
PAGE_ALIGN
(
prev
.
start
);
end
=
prev
.
end
&
PAGE_MASK
;
if
((
end
>
start
)
&&
(
*
callback
)(
start
,
end
,
arg
)
<
0
)
return
;
prev
=
curr
;
}
}
}
}
if
(
prev_valid
)
{
start
=
PAGE_ALIGN
(
prev
.
start
);
end
=
prev
.
end
&
PAGE_MASK
;
if
(
end
>
start
)
(
*
callback
)(
start
,
end
,
arg
);
}
walk
(
callback
,
arg
,
EFI_MEMORY_WB
);
}
/*
* Walk the EFI memory map to pull out leftover pages in the lower
* memory regions which do not end up in the regular memory map and
* stick them into the uncached allocator
*
* The regular walk function is significantly more complex than the
* uncached walk which means it really doesn't make sense to try and
* marge the two.
* Walks the EFI memory map and calls CALLBACK once for each EFI memory descriptor that
* has memory that is available for uncached allocator.
*/
void
__init
efi_memmap_walk_uc
(
efi_freemem_callback_t
callback
)
void
efi_memmap_walk_uc
(
efi_freemem_callback_t
callback
,
void
*
arg
)
{
void
*
efi_map_start
,
*
efi_map_end
,
*
p
;
efi_memory_desc_t
*
md
;
u64
efi_desc_size
,
start
,
end
;
efi_map_start
=
__va
(
ia64_boot_param
->
efi_memmap
);
efi_map_end
=
efi_map_start
+
ia64_boot_param
->
efi_memmap_size
;
efi_desc_size
=
ia64_boot_param
->
efi_memdesc_size
;
for
(
p
=
efi_map_start
;
p
<
efi_map_end
;
p
+=
efi_desc_size
)
{
md
=
p
;
if
(
md
->
attribute
==
EFI_MEMORY_UC
)
{
start
=
PAGE_ALIGN
(
md
->
phys_addr
);
end
=
PAGE_ALIGN
((
md
->
phys_addr
+
(
md
->
num_pages
<<
EFI_PAGE_SHIFT
))
&
PAGE_MASK
);
if
((
*
callback
)(
start
,
end
,
NULL
)
<
0
)
return
;
}
}
walk
(
callback
,
arg
,
EFI_MEMORY_UC
);
}
/*
* Look for the PAL_CODE region reported by EFI and maps it using an
* ITR to enable safe PAL calls in virtual mode. See IA-64 Processor
...
...
@@ -862,3 +706,307 @@ efi_uart_console_only(void)
printk
(
KERN_ERR
"Malformed %s value
\n
"
,
name
);
return
0
;
}
#define efi_md_size(md) (md->num_pages << EFI_PAGE_SHIFT)
static
inline
u64
kmd_end
(
kern_memdesc_t
*
kmd
)
{
return
(
kmd
->
start
+
(
kmd
->
num_pages
<<
EFI_PAGE_SHIFT
));
}
static
inline
u64
efi_md_end
(
efi_memory_desc_t
*
md
)
{
return
(
md
->
phys_addr
+
efi_md_size
(
md
));
}
static
inline
int
efi_wb
(
efi_memory_desc_t
*
md
)
{
return
(
md
->
attribute
&
EFI_MEMORY_WB
);
}
static
inline
int
efi_uc
(
efi_memory_desc_t
*
md
)
{
return
(
md
->
attribute
&
EFI_MEMORY_UC
);
}
/*
* Look for the first granule aligned memory descriptor memory
* that is big enough to hold EFI memory map. Make sure this
* descriptor is atleast granule sized so it does not get trimmed
*/
struct
kern_memdesc
*
find_memmap_space
(
void
)
{
u64
contig_low
=
0
,
contig_high
=
0
;
u64
as
=
0
,
ae
;
void
*
efi_map_start
,
*
efi_map_end
,
*
p
,
*
q
;
efi_memory_desc_t
*
md
,
*
pmd
=
NULL
,
*
check_md
;
u64
space_needed
,
efi_desc_size
;
unsigned
long
total_mem
=
0
;
efi_map_start
=
__va
(
ia64_boot_param
->
efi_memmap
);
efi_map_end
=
efi_map_start
+
ia64_boot_param
->
efi_memmap_size
;
efi_desc_size
=
ia64_boot_param
->
efi_memdesc_size
;
/*
* Worst case: we need 3 kernel descriptors for each efi descriptor
* (if every entry has a WB part in the middle, and UC head and tail),
* plus one for the end marker.
*/
space_needed
=
sizeof
(
kern_memdesc_t
)
*
(
3
*
(
ia64_boot_param
->
efi_memmap_size
/
efi_desc_size
)
+
1
);
for
(
p
=
efi_map_start
;
p
<
efi_map_end
;
pmd
=
md
,
p
+=
efi_desc_size
)
{
md
=
p
;
if
(
!
efi_wb
(
md
))
{
continue
;
}
if
(
pmd
==
NULL
||
!
efi_wb
(
pmd
)
||
efi_md_end
(
pmd
)
!=
md
->
phys_addr
)
{
contig_low
=
GRANULEROUNDUP
(
md
->
phys_addr
);
contig_high
=
efi_md_end
(
md
);
for
(
q
=
p
+
efi_desc_size
;
q
<
efi_map_end
;
q
+=
efi_desc_size
)
{
check_md
=
q
;
if
(
!
efi_wb
(
check_md
))
break
;
if
(
contig_high
!=
check_md
->
phys_addr
)
break
;
contig_high
=
efi_md_end
(
check_md
);
}
contig_high
=
GRANULEROUNDDOWN
(
contig_high
);
}
if
(
!
is_available_memory
(
md
)
||
md
->
type
==
EFI_LOADER_DATA
)
continue
;
/* Round ends inward to granule boundaries */
as
=
max
(
contig_low
,
md
->
phys_addr
);
ae
=
min
(
contig_high
,
efi_md_end
(
md
));
/* keep within max_addr= command line arg */
ae
=
min
(
ae
,
max_addr
);
if
(
ae
<=
as
)
continue
;
/* avoid going over mem= command line arg */
if
(
total_mem
+
(
ae
-
as
)
>
mem_limit
)
ae
-=
total_mem
+
(
ae
-
as
)
-
mem_limit
;
if
(
ae
<=
as
)
continue
;
if
(
ae
-
as
>
space_needed
)
break
;
}
if
(
p
>=
efi_map_end
)
panic
(
"Can't allocate space for kernel memory descriptors"
);
return
__va
(
as
);
}
/*
* Walk the EFI memory map and gather all memory available for kernel
* to use. We can allocate partial granules only if the unavailable
* parts exist, and are WB.
*/
void
efi_memmap_init
(
unsigned
long
*
s
,
unsigned
long
*
e
)
{
struct
kern_memdesc
*
k
,
*
prev
=
0
;
u64
contig_low
=
0
,
contig_high
=
0
;
u64
as
,
ae
,
lim
;
void
*
efi_map_start
,
*
efi_map_end
,
*
p
,
*
q
;
efi_memory_desc_t
*
md
,
*
pmd
=
NULL
,
*
check_md
;
u64
efi_desc_size
;
unsigned
long
total_mem
=
0
;
k
=
kern_memmap
=
find_memmap_space
();
efi_map_start
=
__va
(
ia64_boot_param
->
efi_memmap
);
efi_map_end
=
efi_map_start
+
ia64_boot_param
->
efi_memmap_size
;
efi_desc_size
=
ia64_boot_param
->
efi_memdesc_size
;
for
(
p
=
efi_map_start
;
p
<
efi_map_end
;
pmd
=
md
,
p
+=
efi_desc_size
)
{
md
=
p
;
if
(
!
efi_wb
(
md
))
{
if
(
efi_uc
(
md
)
&&
(
md
->
type
==
EFI_CONVENTIONAL_MEMORY
||
md
->
type
==
EFI_BOOT_SERVICES_DATA
))
{
k
->
attribute
=
EFI_MEMORY_UC
;
k
->
start
=
md
->
phys_addr
;
k
->
num_pages
=
md
->
num_pages
;
k
++
;
}
continue
;
}
if
(
pmd
==
NULL
||
!
efi_wb
(
pmd
)
||
efi_md_end
(
pmd
)
!=
md
->
phys_addr
)
{
contig_low
=
GRANULEROUNDUP
(
md
->
phys_addr
);
contig_high
=
efi_md_end
(
md
);
for
(
q
=
p
+
efi_desc_size
;
q
<
efi_map_end
;
q
+=
efi_desc_size
)
{
check_md
=
q
;
if
(
!
efi_wb
(
check_md
))
break
;
if
(
contig_high
!=
check_md
->
phys_addr
)
break
;
contig_high
=
efi_md_end
(
check_md
);
}
contig_high
=
GRANULEROUNDDOWN
(
contig_high
);
}
if
(
!
is_available_memory
(
md
))
continue
;
/*
* Round ends inward to granule boundaries
* Give trimmings to uncached allocator
*/
if
(
md
->
phys_addr
<
contig_low
)
{
lim
=
min
(
efi_md_end
(
md
),
contig_low
);
if
(
efi_uc
(
md
))
{
if
(
k
>
kern_memmap
&&
(
k
-
1
)
->
attribute
==
EFI_MEMORY_UC
&&
kmd_end
(
k
-
1
)
==
md
->
phys_addr
)
{
(
k
-
1
)
->
num_pages
+=
(
lim
-
md
->
phys_addr
)
>>
EFI_PAGE_SHIFT
;
}
else
{
k
->
attribute
=
EFI_MEMORY_UC
;
k
->
start
=
md
->
phys_addr
;
k
->
num_pages
=
(
lim
-
md
->
phys_addr
)
>>
EFI_PAGE_SHIFT
;
k
++
;
}
}
as
=
contig_low
;
}
else
as
=
md
->
phys_addr
;
if
(
efi_md_end
(
md
)
>
contig_high
)
{
lim
=
max
(
md
->
phys_addr
,
contig_high
);
if
(
efi_uc
(
md
))
{
if
(
lim
==
md
->
phys_addr
&&
k
>
kern_memmap
&&
(
k
-
1
)
->
attribute
==
EFI_MEMORY_UC
&&
kmd_end
(
k
-
1
)
==
md
->
phys_addr
)
{
(
k
-
1
)
->
num_pages
+=
md
->
num_pages
;
}
else
{
k
->
attribute
=
EFI_MEMORY_UC
;
k
->
start
=
lim
;
k
->
num_pages
=
(
efi_md_end
(
md
)
-
lim
)
>>
EFI_PAGE_SHIFT
;
k
++
;
}
}
ae
=
contig_high
;
}
else
ae
=
efi_md_end
(
md
);
/* keep within max_addr= command line arg */
ae
=
min
(
ae
,
max_addr
);
if
(
ae
<=
as
)
continue
;
/* avoid going over mem= command line arg */
if
(
total_mem
+
(
ae
-
as
)
>
mem_limit
)
ae
-=
total_mem
+
(
ae
-
as
)
-
mem_limit
;
if
(
ae
<=
as
)
continue
;
if
(
prev
&&
kmd_end
(
prev
)
==
md
->
phys_addr
)
{
prev
->
num_pages
+=
(
ae
-
as
)
>>
EFI_PAGE_SHIFT
;
total_mem
+=
ae
-
as
;
continue
;
}
k
->
attribute
=
EFI_MEMORY_WB
;
k
->
start
=
as
;
k
->
num_pages
=
(
ae
-
as
)
>>
EFI_PAGE_SHIFT
;
total_mem
+=
ae
-
as
;
prev
=
k
++
;
}
k
->
start
=
~
0L
;
/* end-marker */
/* reserve the memory we are using for kern_memmap */
*
s
=
(
u64
)
kern_memmap
;
*
e
=
(
u64
)
++
k
;
}
void
efi_initialize_iomem_resources
(
struct
resource
*
code_resource
,
struct
resource
*
data_resource
)
{
struct
resource
*
res
;
void
*
efi_map_start
,
*
efi_map_end
,
*
p
;
efi_memory_desc_t
*
md
;
u64
efi_desc_size
;
char
*
name
;
unsigned
long
flags
;
efi_map_start
=
__va
(
ia64_boot_param
->
efi_memmap
);
efi_map_end
=
efi_map_start
+
ia64_boot_param
->
efi_memmap_size
;
efi_desc_size
=
ia64_boot_param
->
efi_memdesc_size
;
res
=
NULL
;
for
(
p
=
efi_map_start
;
p
<
efi_map_end
;
p
+=
efi_desc_size
)
{
md
=
p
;
if
(
md
->
num_pages
==
0
)
/* should not happen */
continue
;
flags
=
IORESOURCE_MEM
;
switch
(
md
->
type
)
{
case
EFI_MEMORY_MAPPED_IO
:
case
EFI_MEMORY_MAPPED_IO_PORT_SPACE
:
continue
;
case
EFI_LOADER_CODE
:
case
EFI_LOADER_DATA
:
case
EFI_BOOT_SERVICES_DATA
:
case
EFI_BOOT_SERVICES_CODE
:
case
EFI_CONVENTIONAL_MEMORY
:
if
(
md
->
attribute
&
EFI_MEMORY_WP
)
{
name
=
"System ROM"
;
flags
|=
IORESOURCE_READONLY
;
}
else
{
name
=
"System RAM"
;
}
break
;
case
EFI_ACPI_MEMORY_NVS
:
name
=
"ACPI Non-volatile Storage"
;
flags
|=
IORESOURCE_BUSY
;
break
;
case
EFI_UNUSABLE_MEMORY
:
name
=
"reserved"
;
flags
|=
IORESOURCE_BUSY
|
IORESOURCE_DISABLED
;
break
;
case
EFI_RESERVED_TYPE
:
case
EFI_RUNTIME_SERVICES_CODE
:
case
EFI_RUNTIME_SERVICES_DATA
:
case
EFI_ACPI_RECLAIM_MEMORY
:
default:
name
=
"reserved"
;
flags
|=
IORESOURCE_BUSY
;
break
;
}
if
((
res
=
kcalloc
(
1
,
sizeof
(
struct
resource
),
GFP_KERNEL
))
==
NULL
)
{
printk
(
KERN_ERR
"failed to alocate resource for iomem
\n
"
);
return
;
}
res
->
name
=
name
;
res
->
start
=
md
->
phys_addr
;
res
->
end
=
md
->
phys_addr
+
(
md
->
num_pages
<<
EFI_PAGE_SHIFT
)
-
1
;
res
->
flags
=
flags
;
if
(
insert_resource
(
&
iomem_resource
,
res
)
<
0
)
kfree
(
res
);
else
{
/*
* We don't know which region contains
* kernel data so we try it repeatedly and
* let the resource manager test it.
*/
insert_resource
(
res
,
code_resource
);
insert_resource
(
res
,
data_resource
);
}
}
}
arch/ia64/kernel/irq.c
浏览文件 @
8a212ab6
...
...
@@ -57,9 +57,9 @@ int show_interrupts(struct seq_file *p, void *v)
if
(
i
==
0
)
{
seq_printf
(
p
,
" "
);
for
(
j
=
0
;
j
<
NR_CPUS
;
j
++
)
if
(
cpu_online
(
j
))
seq_printf
(
p
,
"CPU%d "
,
j
);
for
_each_online_cpu
(
j
)
{
seq_printf
(
p
,
"CPU%d "
,
j
);
}
seq_putc
(
p
,
'\n'
);
}
...
...
@@ -72,9 +72,9 @@ int show_interrupts(struct seq_file *p, void *v)
#ifndef CONFIG_SMP
seq_printf
(
p
,
"%10u "
,
kstat_irqs
(
i
));
#else
for
(
j
=
0
;
j
<
NR_CPUS
;
j
++
)
if
(
cpu_online
(
j
))
seq_printf
(
p
,
"%10u "
,
kstat_cpu
(
j
).
irqs
[
i
]);
for
_each_online_cpu
(
j
)
{
seq_printf
(
p
,
"%10u "
,
kstat_cpu
(
j
).
irqs
[
i
]);
}
#endif
seq_printf
(
p
,
" %14s"
,
irq_desc
[
i
].
handler
->
typename
);
seq_printf
(
p
,
" %s"
,
action
->
name
);
...
...
arch/ia64/kernel/mca.c
浏览文件 @
8a212ab6
...
...
@@ -508,9 +508,7 @@ ia64_mca_wakeup_all(void)
int
cpu
;
/* Clear the Rendez checkin flag for all cpus */
for
(
cpu
=
0
;
cpu
<
NR_CPUS
;
cpu
++
)
{
if
(
!
cpu_online
(
cpu
))
continue
;
for_each_online_cpu
(
cpu
)
{
if
(
ia64_mc_info
.
imi_rendez_checkin
[
cpu
]
==
IA64_MCA_RENDEZ_CHECKIN_DONE
)
ia64_mca_wakeup
(
cpu
);
}
...
...
arch/ia64/kernel/module.c
浏览文件 @
8a212ab6
...
...
@@ -947,8 +947,8 @@ void
percpu_modcopy
(
void
*
pcpudst
,
const
void
*
src
,
unsigned
long
size
)
{
unsigned
int
i
;
for
(
i
=
0
;
i
<
NR_CPUS
;
i
++
)
if
(
cpu_possible
(
i
))
memcpy
(
pcpudst
+
__per_cpu_offset
[
i
],
src
,
size
);
for
_each_cpu
(
i
)
{
memcpy
(
pcpudst
+
__per_cpu_offset
[
i
],
src
,
size
);
}
}
#endif
/* CONFIG_SMP */
arch/ia64/kernel/patch.c
浏览文件 @
8a212ab6
...
...
@@ -64,22 +64,30 @@ ia64_patch (u64 insn_addr, u64 mask, u64 val)
void
ia64_patch_imm64
(
u64
insn_addr
,
u64
val
)
{
ia64_patch
(
insn_addr
,
/* The assembler may generate offset pointing to either slot 1
or slot 2 for a long (2-slot) instruction, occupying slots 1
and 2. */
insn_addr
&=
-
16UL
;
ia64_patch
(
insn_addr
+
2
,
0x01fffefe000UL
,
(
((
val
&
0x8000000000000000UL
)
>>
27
)
/* bit 63 -> 36 */
|
((
val
&
0x0000000000200000UL
)
<<
0
)
/* bit 21 -> 21 */
|
((
val
&
0x00000000001f0000UL
)
<<
6
)
/* bit 16 -> 22 */
|
((
val
&
0x000000000000ff80UL
)
<<
20
)
/* bit 7 -> 27 */
|
((
val
&
0x000000000000007fUL
)
<<
13
)
/* bit 0 -> 13 */
));
ia64_patch
(
insn_addr
-
1
,
0x1ffffffffffUL
,
val
>>
22
);
ia64_patch
(
insn_addr
+
1
,
0x1ffffffffffUL
,
val
>>
22
);
}
void
ia64_patch_imm60
(
u64
insn_addr
,
u64
val
)
{
ia64_patch
(
insn_addr
,
/* The assembler may generate offset pointing to either slot 1
or slot 2 for a long (2-slot) instruction, occupying slots 1
and 2. */
insn_addr
&=
-
16UL
;
ia64_patch
(
insn_addr
+
2
,
0x011ffffe000UL
,
(
((
val
&
0x0800000000000000UL
)
>>
23
)
/* bit 59 -> 36 */
|
((
val
&
0x00000000000fffffUL
)
<<
13
)
/* bit 0 -> 13 */
));
ia64_patch
(
insn_addr
-
1
,
0x1fffffffffcUL
,
val
>>
18
);
ia64_patch
(
insn_addr
+
1
,
0x1fffffffffcUL
,
val
>>
18
);
}
/*
...
...
arch/ia64/kernel/ptrace.c
浏览文件 @
8a212ab6
...
...
@@ -587,8 +587,9 @@ thread_matches (struct task_struct *thread, unsigned long addr)
static
struct
task_struct
*
find_thread_for_addr
(
struct
task_struct
*
child
,
unsigned
long
addr
)
{
struct
task_struct
*
g
,
*
p
;
struct
task_struct
*
p
;
struct
mm_struct
*
mm
;
struct
list_head
*
this
,
*
next
;
int
mm_users
;
if
(
!
(
mm
=
get_task_mm
(
child
)))
...
...
@@ -600,28 +601,21 @@ find_thread_for_addr (struct task_struct *child, unsigned long addr)
goto
out
;
/* not multi-threaded */
/*
* First, traverse the child's thread-list. Good for scalability with
* NPTL-threads.
* Traverse the current process' children list. Every task that
* one attaches to becomes a child. And it is only attached children
* of the debugger that are of interest (ptrace_check_attach checks
* for this).
*/
p
=
child
;
do
{
if
(
thread_matches
(
p
,
addr
))
{
child
=
p
;
goto
out
;
}
if
(
mm_users
--
<=
1
)
goto
out
;
}
while
((
p
=
next_thread
(
p
))
!=
child
);
do_each_thread
(
g
,
p
)
{
if
(
child
->
mm
!=
mm
)
list_for_each_safe
(
this
,
next
,
&
current
->
children
)
{
p
=
list_entry
(
this
,
struct
task_struct
,
sibling
);
if
(
p
->
mm
!=
mm
)
continue
;
if
(
thread_matches
(
p
,
addr
))
{
child
=
p
;
goto
out
;
}
}
while_each_thread
(
g
,
p
);
}
out:
mmput
(
mm
);
return
child
;
...
...
arch/ia64/kernel/setup.c
浏览文件 @
8a212ab6
...
...
@@ -78,6 +78,19 @@ struct screen_info screen_info;
unsigned
long
vga_console_iobase
;
unsigned
long
vga_console_membase
;
static
struct
resource
data_resource
=
{
.
name
=
"Kernel data"
,
.
flags
=
IORESOURCE_BUSY
|
IORESOURCE_MEM
};
static
struct
resource
code_resource
=
{
.
name
=
"Kernel code"
,
.
flags
=
IORESOURCE_BUSY
|
IORESOURCE_MEM
};
extern
void
efi_initialize_iomem_resources
(
struct
resource
*
,
struct
resource
*
);
extern
char
_text
[],
_end
[],
_etext
[];
unsigned
long
ia64_max_cacheline_size
;
unsigned
long
ia64_iobase
;
/* virtual address for I/O accesses */
EXPORT_SYMBOL
(
ia64_iobase
);
...
...
@@ -171,6 +184,22 @@ sort_regions (struct rsvd_region *rsvd_region, int max)
}
}
/*
* Request address space for all standard resources
*/
static
int
__init
register_memory
(
void
)
{
code_resource
.
start
=
ia64_tpa
(
_text
);
code_resource
.
end
=
ia64_tpa
(
_etext
)
-
1
;
data_resource
.
start
=
ia64_tpa
(
_etext
);
data_resource
.
end
=
ia64_tpa
(
_end
)
-
1
;
efi_initialize_iomem_resources
(
&
code_resource
,
&
data_resource
);
return
0
;
}
__initcall
(
register_memory
);
/**
* reserve_memory - setup reserved memory areas
*
...
...
@@ -211,6 +240,9 @@ reserve_memory (void)
}
#endif
efi_memmap_init
(
&
rsvd_region
[
n
].
start
,
&
rsvd_region
[
n
].
end
);
n
++
;
/* end of memory marker */
rsvd_region
[
n
].
start
=
~
0UL
;
rsvd_region
[
n
].
end
=
~
0UL
;
...
...
@@ -244,28 +276,31 @@ find_initrd (void)
static
void
__init
io_port_init
(
void
)
{
extern
unsigned
long
ia64_iobase
;
unsigned
long
phys_iobase
;
/*
* Set `iobase' to the appropriate address in region 6 (uncached access range).
* Set `iobase' based on the EFI memory map or, failing that, the
* value firmware left in ar.k0.
*
* The EFI memory map is the "preferred" location to get the I/O port space base,
* rather the relying on AR.KR0. This should become more clear in future SAL
* specs. We'll fall back to getting it out of AR.KR0 if no appropriate entry is
* found in the memory map.
* Note that in ia32 mode, IN/OUT instructions use ar.k0 to compute
* the port's virtual address, so ia32_load_state() loads it with a
* user virtual address. But in ia64 mode, glibc uses the
* *physical* address in ar.k0 to mmap the appropriate area from
* /dev/mem, and the inX()/outX() interfaces use MMIO. In both
* cases, user-mode can only use the legacy 0-64K I/O port space.
*
* ar.k0 is not involved in kernel I/O port accesses, which can use
* any of the I/O port spaces and are done via MMIO using the
* virtual mmio_base from the appropriate io_space[].
*/
phys_iobase
=
efi_get_iobase
();
if
(
phys_iobase
)
/* set AR.KR0 since this is all we use it for anyway */
ia64_set_kr
(
IA64_KR_IO_BASE
,
phys_iobase
);
else
{
if
(
!
phys_iobase
)
{
phys_iobase
=
ia64_get_kr
(
IA64_KR_IO_BASE
);
printk
(
KERN_INFO
"No I/O port range found in EFI memory map, falling back "
"to AR.KR0
\n
"
);
printk
(
KERN_INFO
"I/O port base = 0x%lx
\n
"
,
phys_iobase
);
printk
(
KERN_INFO
"No I/O port range found in EFI memory map, "
"falling back to AR.KR0 (0x%lx)
\n
"
,
phys_iobase
);
}
ia64_iobase
=
(
unsigned
long
)
ioremap
(
phys_iobase
,
0
);
ia64_set_kr
(
IA64_KR_IO_BASE
,
__pa
(
ia64_iobase
));
/* setup legacy IO port space */
io_space
[
0
].
mmio_base
=
ia64_iobase
;
...
...
@@ -526,7 +561,7 @@ show_cpuinfo (struct seq_file *m, void *v)
c
->
itc_freq
/
1000000
,
c
->
itc_freq
%
1000000
,
lpj
*
HZ
/
500000
,
(
lpj
*
HZ
/
5000
)
%
100
);
#ifdef CONFIG_SMP
seq_printf
(
m
,
"siblings : %u
\n
"
,
c
->
num_log
);
seq_printf
(
m
,
"siblings : %u
\n
"
,
c
pus_weight
(
cpu_core_map
[
cpunum
])
);
if
(
c
->
threads_per_core
>
1
||
c
->
cores_per_socket
>
1
)
seq_printf
(
m
,
"physical id: %u
\n
"
...
...
arch/ia64/kernel/smp.c
浏览文件 @
8a212ab6
...
...
@@ -185,8 +185,8 @@ send_IPI_allbutself (int op)
{
unsigned
int
i
;
for
(
i
=
0
;
i
<
NR_CPUS
;
i
++
)
{
if
(
cpu_online
(
i
)
&&
i
!=
smp_processor_id
())
for
_each_online_cpu
(
i
)
{
if
(
i
!=
smp_processor_id
())
send_IPI_single
(
i
,
op
);
}
}
...
...
@@ -199,9 +199,9 @@ send_IPI_all (int op)
{
int
i
;
for
(
i
=
0
;
i
<
NR_CPUS
;
i
++
)
if
(
cpu_online
(
i
))
send_IPI_single
(
i
,
op
);
for
_each_online_cpu
(
i
)
{
send_IPI_single
(
i
,
op
);
}
}
/*
...
...
arch/ia64/kernel/smpboot.c
浏览文件 @
8a212ab6
...
...
@@ -694,9 +694,9 @@ smp_cpus_done (unsigned int dummy)
* Allow the user to impress friends.
*/
for
(
cpu
=
0
;
cpu
<
NR_CPUS
;
cpu
++
)
if
(
cpu_online
(
cpu
))
bogosum
+=
cpu_data
(
cpu
)
->
loops_per_jiffy
;
for
_each_online_cpu
(
cpu
)
{
bogosum
+=
cpu_data
(
cpu
)
->
loops_per_jiffy
;
}
printk
(
KERN_INFO
"Total of %d processors activated (%lu.%02lu BogoMIPS).
\n
"
,
(
int
)
num_online_cpus
(),
bogosum
/
(
500000
/
HZ
),
(
bogosum
/
(
5000
/
HZ
))
%
100
);
...
...
arch/ia64/kernel/uncached.c
浏览文件 @
8a212ab6
...
...
@@ -205,23 +205,18 @@ EXPORT_SYMBOL(uncached_free_page);
static
int
__init
uncached_build_memmap
(
unsigned
long
start
,
unsigned
long
end
,
void
*
arg
)
{
long
length
;
unsigned
long
vstart
,
vend
;
long
length
=
end
-
start
;
int
node
;
length
=
end
-
start
;
vstart
=
start
+
__IA64_UNCACHED_OFFSET
;
vend
=
end
+
__IA64_UNCACHED_OFFSET
;
dprintk
(
KERN_ERR
"uncached_build_memmap(%lx %lx)
\n
"
,
start
,
end
);
memset
((
char
*
)
v
start
,
0
,
length
);
memset
((
char
*
)
start
,
0
,
length
);
node
=
paddr_to_nid
(
start
);
node
=
paddr_to_nid
(
start
-
__IA64_UNCACHED_OFFSET
);
for
(;
vstart
<
vend
;
v
start
+=
PAGE_SIZE
)
{
dprintk
(
KERN_INFO
"sticking %lx into the pool!
\n
"
,
v
start
);
gen_pool_free
(
uncached_pool
[
node
],
v
start
,
PAGE_SIZE
);
for
(;
start
<
end
;
start
+=
PAGE_SIZE
)
{
dprintk
(
KERN_INFO
"sticking %lx into the pool!
\n
"
,
start
);
gen_pool_free
(
uncached_pool
[
node
],
start
,
PAGE_SIZE
);
}
return
0
;
...
...
arch/ia64/lib/swiotlb.c
浏览文件 @
8a212ab6
...
...
@@ -49,6 +49,15 @@
*/
#define IO_TLB_SHIFT 11
#define SLABS_PER_PAGE (1 << (PAGE_SHIFT - IO_TLB_SHIFT))
/*
* Minimum IO TLB size to bother booting with. Systems with mainly
* 64bit capable cards will only lightly use the swiotlb. If we can't
* allocate a contiguous 1MB, we're probably in trouble anyway.
*/
#define IO_TLB_MIN_SLABS ((1<<20) >> IO_TLB_SHIFT)
int
swiotlb_force
;
/*
...
...
@@ -154,6 +163,99 @@ swiotlb_init (void)
swiotlb_init_with_default_size
(
64
*
(
1
<<
20
));
/* default to 64MB */
}
/*
* Systems with larger DMA zones (those that don't support ISA) can
* initialize the swiotlb later using the slab allocator if needed.
* This should be just like above, but with some error catching.
*/
int
swiotlb_late_init_with_default_size
(
size_t
default_size
)
{
unsigned
long
i
,
req_nslabs
=
io_tlb_nslabs
;
unsigned
int
order
;
if
(
!
io_tlb_nslabs
)
{
io_tlb_nslabs
=
(
default_size
>>
IO_TLB_SHIFT
);
io_tlb_nslabs
=
ALIGN
(
io_tlb_nslabs
,
IO_TLB_SEGSIZE
);
}
/*
* Get IO TLB memory from the low pages
*/
order
=
get_order
(
io_tlb_nslabs
*
(
1
<<
IO_TLB_SHIFT
));
io_tlb_nslabs
=
SLABS_PER_PAGE
<<
order
;
while
((
SLABS_PER_PAGE
<<
order
)
>
IO_TLB_MIN_SLABS
)
{
io_tlb_start
=
(
char
*
)
__get_free_pages
(
GFP_DMA
|
__GFP_NOWARN
,
order
);
if
(
io_tlb_start
)
break
;
order
--
;
}
if
(
!
io_tlb_start
)
goto
cleanup1
;
if
(
order
!=
get_order
(
io_tlb_nslabs
*
(
1
<<
IO_TLB_SHIFT
)))
{
printk
(
KERN_WARNING
"Warning: only able to allocate %ld MB "
"for software IO TLB
\n
"
,
(
PAGE_SIZE
<<
order
)
>>
20
);
io_tlb_nslabs
=
SLABS_PER_PAGE
<<
order
;
}
io_tlb_end
=
io_tlb_start
+
io_tlb_nslabs
*
(
1
<<
IO_TLB_SHIFT
);
memset
(
io_tlb_start
,
0
,
io_tlb_nslabs
*
(
1
<<
IO_TLB_SHIFT
));
/*
* Allocate and initialize the free list array. This array is used
* to find contiguous free memory regions of size up to IO_TLB_SEGSIZE
* between io_tlb_start and io_tlb_end.
*/
io_tlb_list
=
(
unsigned
int
*
)
__get_free_pages
(
GFP_KERNEL
,
get_order
(
io_tlb_nslabs
*
sizeof
(
int
)));
if
(
!
io_tlb_list
)
goto
cleanup2
;
for
(
i
=
0
;
i
<
io_tlb_nslabs
;
i
++
)
io_tlb_list
[
i
]
=
IO_TLB_SEGSIZE
-
OFFSET
(
i
,
IO_TLB_SEGSIZE
);
io_tlb_index
=
0
;
io_tlb_orig_addr
=
(
unsigned
char
**
)
__get_free_pages
(
GFP_KERNEL
,
get_order
(
io_tlb_nslabs
*
sizeof
(
char
*
)));
if
(
!
io_tlb_orig_addr
)
goto
cleanup3
;
memset
(
io_tlb_orig_addr
,
0
,
io_tlb_nslabs
*
sizeof
(
char
*
));
/*
* Get the overflow emergency buffer
*/
io_tlb_overflow_buffer
=
(
void
*
)
__get_free_pages
(
GFP_DMA
,
get_order
(
io_tlb_overflow
));
if
(
!
io_tlb_overflow_buffer
)
goto
cleanup4
;
printk
(
KERN_INFO
"Placing %ldMB software IO TLB between 0x%lx - "
"0x%lx
\n
"
,
(
io_tlb_nslabs
*
(
1
<<
IO_TLB_SHIFT
))
>>
20
,
virt_to_phys
(
io_tlb_start
),
virt_to_phys
(
io_tlb_end
));
return
0
;
cleanup4:
free_pages
((
unsigned
long
)
io_tlb_orig_addr
,
get_order
(
io_tlb_nslabs
*
sizeof
(
char
*
)));
io_tlb_orig_addr
=
NULL
;
cleanup3:
free_pages
((
unsigned
long
)
io_tlb_list
,
get_order
(
io_tlb_nslabs
*
sizeof
(
int
)));
io_tlb_list
=
NULL
;
io_tlb_end
=
NULL
;
cleanup2:
free_pages
((
unsigned
long
)
io_tlb_start
,
order
);
io_tlb_start
=
NULL
;
cleanup1:
io_tlb_nslabs
=
req_nslabs
;
return
-
ENOMEM
;
}
static
inline
int
address_needs_mapping
(
struct
device
*
hwdev
,
dma_addr_t
addr
)
{
...
...
arch/ia64/mm/Makefile
浏览文件 @
8a212ab6
...
...
@@ -7,6 +7,5 @@ obj-y := init.o fault.o tlb.o extable.o
obj-$(CONFIG_HUGETLB_PAGE)
+=
hugetlbpage.o
obj-$(CONFIG_NUMA)
+=
numa.o
obj-$(CONFIG_DISCONTIGMEM)
+=
discontig.o
ifndef
CONFIG_DISCONTIGMEM
obj-y
+=
contig.o
endif
obj-$(CONFIG_SPARSEMEM)
+=
discontig.o
obj-$(CONFIG_FLATMEM)
+=
contig.o
arch/ia64/mm/contig.c
浏览文件 @
8a212ab6
...
...
@@ -269,7 +269,7 @@ paging_init (void)
efi_memmap_walk
(
find_largest_hole
,
(
u64
*
)
&
max_gap
);
if
(
max_gap
<
LARGE_GAP
)
{
vmem_map
=
(
struct
page
*
)
0
;
free_area_init_node
(
0
,
&
contig_page_data
,
zones_size
,
0
,
free_area_init_node
(
0
,
NODE_DATA
(
0
)
,
zones_size
,
0
,
zholes_size
);
}
else
{
unsigned
long
map_size
;
...
...
@@ -282,7 +282,7 @@ paging_init (void)
efi_memmap_walk
(
create_mem_map_page_table
,
NULL
);
NODE_DATA
(
0
)
->
node_mem_map
=
vmem_map
;
free_area_init_node
(
0
,
&
contig_page_data
,
zones_size
,
free_area_init_node
(
0
,
NODE_DATA
(
0
)
,
zones_size
,
0
,
zholes_size
);
printk
(
"Virtual mem_map starts at 0x%p
\n
"
,
mem_map
);
...
...
arch/ia64/mm/discontig.c
浏览文件 @
8a212ab6
...
...
@@ -421,6 +421,37 @@ static void __init memory_less_nodes(void)
return
;
}
#ifdef CONFIG_SPARSEMEM
/**
* register_sparse_mem - notify SPARSEMEM that this memory range exists.
* @start: physical start of range
* @end: physical end of range
* @arg: unused
*
* Simply calls SPARSEMEM to register memory section(s).
*/
static
int
__init
register_sparse_mem
(
unsigned
long
start
,
unsigned
long
end
,
void
*
arg
)
{
int
nid
;
start
=
__pa
(
start
)
>>
PAGE_SHIFT
;
end
=
__pa
(
end
)
>>
PAGE_SHIFT
;
nid
=
early_pfn_to_nid
(
start
);
memory_present
(
nid
,
start
,
end
);
return
0
;
}
static
void
__init
arch_sparse_init
(
void
)
{
efi_memmap_walk
(
register_sparse_mem
,
NULL
);
sparse_init
();
}
#else
#define arch_sparse_init() do {} while (0)
#endif
/**
* find_memory - walk the EFI memory map and setup the bootmem allocator
*
...
...
@@ -528,8 +559,10 @@ void show_mem(void)
int
shared
=
0
,
cached
=
0
,
reserved
=
0
;
printk
(
"Node ID: %d
\n
"
,
pgdat
->
node_id
);
for
(
i
=
0
;
i
<
pgdat
->
node_spanned_pages
;
i
++
)
{
struct
page
*
page
=
pgdat_page_nr
(
pgdat
,
i
);
if
(
!
ia64_pfn_valid
(
pgdat
->
node_start_pfn
+
i
))
struct
page
*
page
;
if
(
pfn_valid
(
pgdat
->
node_start_pfn
+
i
))
page
=
pfn_to_page
(
pgdat
->
node_start_pfn
+
i
);
else
continue
;
if
(
PageReserved
(
page
))
reserved
++
;
...
...
@@ -648,12 +681,16 @@ void __init paging_init(void)
max_dma
=
virt_to_phys
((
void
*
)
MAX_DMA_ADDRESS
)
>>
PAGE_SHIFT
;
arch_sparse_init
();
efi_memmap_walk
(
filter_rsvd_memory
,
count_node_pages
);
#ifdef CONFIG_VIRTUAL_MEM_MAP
vmalloc_end
-=
PAGE_ALIGN
(
max_low_pfn
*
sizeof
(
struct
page
));
vmem_map
=
(
struct
page
*
)
vmalloc_end
;
efi_memmap_walk
(
create_mem_map_page_table
,
NULL
);
printk
(
"Virtual mem_map starts at 0x%p
\n
"
,
vmem_map
);
#endif
for_each_online_node
(
node
)
{
memset
(
zones_size
,
0
,
sizeof
(
zones_size
));
...
...
@@ -690,7 +727,9 @@ void __init paging_init(void)
pfn_offset
=
mem_data
[
node
].
min_pfn
;
#ifdef CONFIG_VIRTUAL_MEM_MAP
NODE_DATA
(
node
)
->
node_mem_map
=
vmem_map
+
pfn_offset
;
#endif
free_area_init_node
(
node
,
NODE_DATA
(
node
),
zones_size
,
pfn_offset
,
zholes_size
);
}
...
...
arch/ia64/mm/init.c
浏览文件 @
8a212ab6
...
...
@@ -593,7 +593,7 @@ mem_init (void)
platform_dma_init
();
#endif
#if
ndef CONFIG_DISCONTIG
MEM
#if
def CONFIG_FLAT
MEM
if
(
!
mem_map
)
BUG
();
max_mapnr
=
max_low_pfn
;
...
...
arch/ia64/mm/numa.c
浏览文件 @
8a212ab6
...
...
@@ -47,3 +47,27 @@ paddr_to_nid(unsigned long paddr)
return
(
i
<
num_node_memblks
)
?
node_memblk
[
i
].
nid
:
(
num_node_memblks
?
-
1
:
0
);
}
#if defined(CONFIG_SPARSEMEM) && defined(CONFIG_NUMA)
/*
* Because of holes evaluate on section limits.
* If the section of memory exists, then return the node where the section
* resides. Otherwise return node 0 as the default. This is used by
* SPARSEMEM to allocate the SPARSEMEM sectionmap on the NUMA node where
* the section resides.
*/
int
early_pfn_to_nid
(
unsigned
long
pfn
)
{
int
i
,
section
=
pfn
>>
PFN_SECTION_SHIFT
,
ssec
,
esec
;
for
(
i
=
0
;
i
<
num_node_memblks
;
i
++
)
{
ssec
=
node_memblk
[
i
].
start_paddr
>>
PA_SECTION_SHIFT
;
esec
=
(
node_memblk
[
i
].
start_paddr
+
node_memblk
[
i
].
size
+
((
1L
<<
PA_SECTION_SHIFT
)
-
1
))
>>
PA_SECTION_SHIFT
;
if
(
section
>=
ssec
&&
section
<
esec
)
return
node_memblk
[
i
].
nid
;
}
return
0
;
}
#endif
arch/ia64/mm/tlb.c
浏览文件 @
8a212ab6
...
...
@@ -77,19 +77,25 @@ wrap_mmu_context (struct mm_struct *mm)
/* can't call flush_tlb_all() here because of race condition with O(1) scheduler [EF] */
{
int
cpu
=
get_cpu
();
/* prevent preemption/migration */
for
(
i
=
0
;
i
<
NR_CPUS
;
++
i
)
if
(
cpu_online
(
i
)
&&
(
i
!=
cpu
)
)
for
_each_online_cpu
(
i
)
{
if
(
i
!=
cpu
)
per_cpu
(
ia64_need_tlb_flush
,
i
)
=
1
;
}
put_cpu
();
}
local_flush_tlb_all
();
}
void
ia64_global_tlb_purge
(
unsigned
long
start
,
unsigned
long
end
,
unsigned
long
nbits
)
ia64_global_tlb_purge
(
struct
mm_struct
*
mm
,
unsigned
long
start
,
unsigned
long
end
,
unsigned
long
nbits
)
{
static
DEFINE_SPINLOCK
(
ptcg_lock
);
if
(
mm
!=
current
->
active_mm
)
{
flush_tlb_all
();
return
;
}
/* HW requires global serialization of ptc.ga. */
spin_lock
(
&
ptcg_lock
);
{
...
...
@@ -135,15 +141,12 @@ flush_tlb_range (struct vm_area_struct *vma, unsigned long start, unsigned long
unsigned
long
size
=
end
-
start
;
unsigned
long
nbits
;
#ifndef CONFIG_SMP
if
(
mm
!=
current
->
active_mm
)
{
/* this does happen, but perhaps it's not worth optimizing for? */
#ifdef CONFIG_SMP
flush_tlb_all
();
#else
mm
->
context
=
0
;
#endif
return
;
}
#endif
nbits
=
ia64_fls
(
size
+
0xfff
);
while
(
unlikely
(((
1UL
<<
nbits
)
&
purge
.
mask
)
==
0
)
&&
(
nbits
<
purge
.
max_bits
))
...
...
@@ -153,7 +156,7 @@ flush_tlb_range (struct vm_area_struct *vma, unsigned long start, unsigned long
start
&=
~
((
1UL
<<
nbits
)
-
1
);
# ifdef CONFIG_SMP
platform_global_tlb_purge
(
start
,
end
,
nbits
);
platform_global_tlb_purge
(
mm
,
start
,
end
,
nbits
);
# else
do
{
ia64_ptcl
(
start
,
(
nbits
<<
2
));
...
...
arch/ia64/pci/pci.c
浏览文件 @
8a212ab6
...
...
@@ -120,29 +120,6 @@ struct pci_ops pci_root_ops = {
.
write
=
pci_write
,
};
#ifdef CONFIG_NUMA
extern
acpi_status
acpi_map_iosapic
(
acpi_handle
,
u32
,
void
*
,
void
**
);
static
void
acpi_map_iosapics
(
void
)
{
acpi_get_devices
(
NULL
,
acpi_map_iosapic
,
NULL
,
NULL
);
}
#else
static
void
acpi_map_iosapics
(
void
)
{
return
;
}
#endif
/* CONFIG_NUMA */
static
int
__init
pci_acpi_init
(
void
)
{
acpi_map_iosapics
();
return
0
;
}
subsys_initcall
(
pci_acpi_init
);
/* Called by ACPI when it finds a new root bus. */
static
struct
pci_controller
*
__devinit
...
...
@@ -191,6 +168,29 @@ add_io_space (struct acpi_resource_address64 *addr)
return
IO_SPACE_BASE
(
i
);
}
static
acpi_status
__devinit
resource_to_window
(
struct
acpi_resource
*
resource
,
struct
acpi_resource_address64
*
addr
)
{
acpi_status
status
;
/*
* We're only interested in _CRS descriptors that are
* - address space descriptors for memory or I/O space
* - non-zero size
* - producers, i.e., the address space is routed downstream,
* not consumed by the bridge itself
*/
status
=
acpi_resource_to_address64
(
resource
,
addr
);
if
(
ACPI_SUCCESS
(
status
)
&&
(
addr
->
resource_type
==
ACPI_MEMORY_RANGE
||
addr
->
resource_type
==
ACPI_IO_RANGE
)
&&
addr
->
address_length
&&
addr
->
producer_consumer
==
ACPI_PRODUCER
)
return
AE_OK
;
return
AE_ERROR
;
}
static
acpi_status
__devinit
count_window
(
struct
acpi_resource
*
resource
,
void
*
data
)
{
...
...
@@ -198,11 +198,9 @@ count_window (struct acpi_resource *resource, void *data)
struct
acpi_resource_address64
addr
;
acpi_status
status
;
status
=
acpi_resource_to_address64
(
resource
,
&
addr
);
status
=
resource_to_window
(
resource
,
&
addr
);
if
(
ACPI_SUCCESS
(
status
))
if
(
addr
.
resource_type
==
ACPI_MEMORY_RANGE
||
addr
.
resource_type
==
ACPI_IO_RANGE
)
(
*
windows
)
++
;
(
*
windows
)
++
;
return
AE_OK
;
}
...
...
@@ -221,13 +219,11 @@ static __devinit acpi_status add_window(struct acpi_resource *res, void *data)
unsigned
long
flags
,
offset
=
0
;
struct
resource
*
root
;
status
=
acpi_resource_to_address64
(
res
,
&
addr
);
/* Return AE_OK for non-window resources to keep scanning for more */
status
=
resource_to_window
(
res
,
&
addr
);
if
(
!
ACPI_SUCCESS
(
status
))
return
AE_OK
;
if
(
!
addr
.
address_length
)
return
AE_OK
;
if
(
addr
.
resource_type
==
ACPI_MEMORY_RANGE
)
{
flags
=
IORESOURCE_MEM
;
root
=
&
iomem_resource
;
...
...
arch/ia64/sn/kernel/bte.c
浏览文件 @
8a212ab6
...
...
@@ -87,7 +87,7 @@ bte_result_t bte_copy(u64 src, u64 dest, u64 len, u64 mode, void *notification)
unsigned
long
irq_flags
;
unsigned
long
itc_end
=
0
;
int
nasid_to_try
[
MAX_NODES_TO_TRY
];
int
my_nasid
=
get_nasid
(
);
int
my_nasid
=
cpuid_to_nasid
(
raw_smp_processor_id
()
);
int
bte_if_index
,
nasid_index
;
int
bte_first
,
btes_per_node
=
BTES_PER_NODE
;
...
...
arch/ia64/sn/kernel/io_init.c
浏览文件 @
8a212ab6
...
...
@@ -22,8 +22,6 @@
#include "xtalk/hubdev.h"
#include "xtalk/xwidgetdev.h"
nasid_t
master_nasid
=
INVALID_NASID
;
/* Partition Master */
static
struct
list_head
sn_sysdata_list
;
/* sysdata list struct */
...
...
@@ -165,7 +163,7 @@ static void sn_fixup_ionodes(void)
* Get SGI Specific HUB chipset information.
* Inform Prom that this kernel can support domain bus numbering.
*/
for
(
i
=
0
;
i
<
num
io
nodes
;
i
++
)
{
for
(
i
=
0
;
i
<
num
_c
nodes
;
i
++
)
{
hubdev
=
(
struct
hubdev_info
*
)(
NODEPDA
(
i
)
->
pdinfo
);
nasid
=
cnodeid_to_nasid
(
i
);
hubdev
->
max_segment_number
=
0xffffffff
;
...
...
arch/ia64/sn/kernel/setup.c
浏览文件 @
8a212ab6
...
...
@@ -59,8 +59,6 @@ DEFINE_PER_CPU(struct pda_s, pda_percpu);
#define MAX_PHYS_MEMORY (1UL << IA64_MAX_PHYS_BITS)
/* Max physical address supported */
lboard_t
*
root_lboard
[
MAX_COMPACT_NODES
];
extern
void
bte_init_node
(
nodepda_t
*
,
cnodeid_t
);
extern
void
sn_timer_init
(
void
);
...
...
@@ -97,15 +95,15 @@ u8 sn_region_size;
EXPORT_SYMBOL
(
sn_region_size
);
int
sn_prom_type
;
/* 0=hardware, 1=medusa/realprom, 2=medusa/fakeprom */
short
physical_node_map
[
MAX_
PHYSNODE_ID
];
short
physical_node_map
[
MAX_
NUMALINK_NODES
];
static
unsigned
long
sn_prom_features
[
MAX_PROM_FEATURE_SETS
];
EXPORT_SYMBOL
(
physical_node_map
);
int
num
io
nodes
;
int
num
_c
nodes
;
static
void
sn_init_pdas
(
char
**
);
static
void
scan_for_ionod
es
(
void
);
static
void
build_cnode_tabl
es
(
void
);
static
nodepda_t
*
nodepdaindr
[
MAX_COMPACT_NODES
];
...
...
@@ -139,19 +137,6 @@ extern char drive_info[4 * 16];
char
drive_info
[
4
*
16
];
#endif
/*
* Get nasid of current cpu early in boot before nodepda is initialized
*/
static
int
boot_get_nasid
(
void
)
{
int
nasid
;
if
(
ia64_sn_get_sapic_info
(
get_sapicid
(),
&
nasid
,
NULL
,
NULL
))
BUG
();
return
nasid
;
}
/*
* This routine can only be used during init, since
* smp_boot_data is an init data structure.
...
...
@@ -223,7 +208,6 @@ void __init early_sn_setup(void)
}
extern
int
platform_intr_list
[];
extern
nasid_t
master_nasid
;
static
int
__initdata
shub_1_1_found
=
0
;
/*
...
...
@@ -269,7 +253,6 @@ static void __init sn_check_for_wars(void)
void
__init
sn_setup
(
char
**
cmdline_p
)
{
long
status
,
ticks_per_sec
,
drift
;
int
pxm
;
u32
version
=
sn_sal_rev
();
extern
void
sn_cpu_init
(
void
);
...
...
@@ -300,11 +283,10 @@ void __init sn_setup(char **cmdline_p)
MAX_DMA_ADDRESS
=
PAGE_OFFSET
+
MAX_PHYS_MEMORY
;
memset
(
physical_node_map
,
-
1
,
sizeof
(
physical_node_map
));
for
(
pxm
=
0
;
pxm
<
MAX_PXM_DOMAINS
;
pxm
++
)
if
(
pxm_to_nid_map
[
pxm
]
!=
-
1
)
physical_node_map
[
pxm_to_nasid
(
pxm
)]
=
pxm_to_nid_map
[
pxm
];
/*
* Build the tables for managing cnodes.
*/
build_cnode_tables
();
/*
* Old PROMs do not provide an ACPI FADT. Disable legacy keyboard
...
...
@@ -319,8 +301,6 @@ void __init sn_setup(char **cmdline_p)
printk
(
"SGI SAL version %x.%02x
\n
"
,
version
>>
8
,
version
&
0x00FF
);
master_nasid
=
boot_get_nasid
();
status
=
ia64_sal_freq_base
(
SAL_FREQ_BASE_REALTIME_CLOCK
,
&
ticks_per_sec
,
&
drift
);
...
...
@@ -378,15 +358,6 @@ static void __init sn_init_pdas(char **cmdline_p)
{
cnodeid_t
cnode
;
memset
(
sn_cnodeid_to_nasid
,
-
1
,
sizeof
(
__ia64_per_cpu_var
(
__sn_cnodeid_to_nasid
)));
for_each_online_node
(
cnode
)
sn_cnodeid_to_nasid
[
cnode
]
=
pxm_to_nasid
(
nid_to_pxm_map
[
cnode
]);
numionodes
=
num_online_nodes
();
scan_for_ionodes
();
/*
* Allocate & initalize the nodepda for each node.
*/
...
...
@@ -402,7 +373,7 @@ static void __init sn_init_pdas(char **cmdline_p)
/*
* Allocate & initialize nodepda for TIOs. For now, put them on node 0.
*/
for
(
cnode
=
num_online_nodes
();
cnode
<
num
io
nodes
;
cnode
++
)
{
for
(
cnode
=
num_online_nodes
();
cnode
<
num
_c
nodes
;
cnode
++
)
{
nodepdaindr
[
cnode
]
=
alloc_bootmem_node
(
NODE_DATA
(
0
),
sizeof
(
nodepda_t
));
memset
(
nodepdaindr
[
cnode
],
0
,
sizeof
(
nodepda_t
));
...
...
@@ -411,7 +382,7 @@ static void __init sn_init_pdas(char **cmdline_p)
/*
* Now copy the array of nodepda pointers to each nodepda.
*/
for
(
cnode
=
0
;
cnode
<
num
io
nodes
;
cnode
++
)
for
(
cnode
=
0
;
cnode
<
num
_c
nodes
;
cnode
++
)
memcpy
(
nodepdaindr
[
cnode
]
->
pernode_pdaindr
,
nodepdaindr
,
sizeof
(
nodepdaindr
));
...
...
@@ -428,7 +399,7 @@ static void __init sn_init_pdas(char **cmdline_p)
* Initialize the per node hubdev. This includes IO Nodes and
* headless/memless nodes.
*/
for
(
cnode
=
0
;
cnode
<
num
io
nodes
;
cnode
++
)
{
for
(
cnode
=
0
;
cnode
<
num
_c
nodes
;
cnode
++
)
{
hubdev_init_node
(
nodepdaindr
[
cnode
],
cnode
);
}
}
...
...
@@ -553,87 +524,58 @@ void __init sn_cpu_init(void)
}
/*
* Scan klconfig for ionodes. Add the nasids to the
* physical_node_map and the pda and increment numionodes.
* Build tables for converting between NASIDs and cnodes.
*/
static
inline
int
__init
board_needs_cnode
(
int
type
)
{
return
(
type
==
KLTYPE_SNIA
||
type
==
KLTYPE_TIO
);
}
static
void
__init
scan_for_ionod
es
(
void
)
void
__init
build_cnode_tabl
es
(
void
)
{
int
nasid
=
0
;
int
nasid
;
int
node
;
lboard_t
*
brd
;
/* fakeprom does not support klgraph */
if
(
IS_RUNNING_ON_FAKE_PROM
())
return
;
/* Setup ionodes with memory */
for
(
nasid
=
0
;
nasid
<
MAX_PHYSNODE_ID
;
nasid
+=
2
)
{
char
*
klgraph_header
;
cnodeid_t
cnodeid
;
if
(
physical_node_map
[
nasid
]
==
-
1
)
continue
;
memset
(
physical_node_map
,
-
1
,
sizeof
(
physical_node_map
));
memset
(
sn_cnodeid_to_nasid
,
-
1
,
sizeof
(
__ia64_per_cpu_var
(
__sn_cnodeid_to_nasid
)));
cnodeid
=
-
1
;
klgraph_header
=
__va
(
ia64_sn_get_klconfig_addr
(
nasid
));
if
(
!
klgraph_header
)
{
BUG
();
/* All nodes must have klconfig tables! */
}
cnodeid
=
nasid_to_cnodeid
(
nasid
);
root_lboard
[
cnodeid
]
=
(
lboard_t
*
)
NODE_OFFSET_TO_LBOARD
((
nasid
),
((
kl_config_hdr_t
*
)
(
klgraph_header
))
->
ch_board_info
);
/*
* First populate the tables with C/M bricks. This ensures that
* cnode == node for all C & M bricks.
*/
for_each_online_node
(
node
)
{
nasid
=
pxm_to_nasid
(
nid_to_pxm_map
[
node
]);
sn_cnodeid_to_nasid
[
node
]
=
nasid
;
physical_node_map
[
nasid
]
=
node
;
}
/* Scan headless/memless IO Nodes. */
for
(
nasid
=
0
;
nasid
<
MAX_PHYSNODE_ID
;
nasid
+=
2
)
{
/* if there's no nasid, don't try to read the klconfig on the node */
if
(
physical_node_map
[
nasid
]
==
-
1
)
continue
;
brd
=
find_lboard_any
((
lboard_t
*
)
root_lboard
[
nasid_to_cnodeid
(
nasid
)],
KLTYPE_SNIA
);
if
(
brd
)
{
brd
=
KLCF_NEXT_ANY
(
brd
);
/* Skip this node's lboard */
if
(
!
brd
)
continue
;
}
brd
=
find_lboard_any
(
brd
,
KLTYPE_SNIA
);
/*
* num_cnodes is total number of C/M/TIO bricks. Because of the 256 node
* limit on the number of nodes, we can't use the generic node numbers
* for this. Note that num_cnodes is incremented below as TIOs or
* headless/memoryless nodes are discovered.
*/
num_cnodes
=
num_online_nodes
();
while
(
brd
)
{
sn_cnodeid_to_nasid
[
numionodes
]
=
brd
->
brd_nasid
;
physical_node_map
[
brd
->
brd_nasid
]
=
numionodes
;
root_lboard
[
numionodes
]
=
brd
;
numionodes
++
;
brd
=
KLCF_NEXT_ANY
(
brd
);
if
(
!
brd
)
break
;
brd
=
find_lboard_any
(
brd
,
KLTYPE_SNIA
);
}
}
/* fakeprom does not support klgraph */
if
(
IS_RUNNING_ON_FAKE_PROM
())
return
;
/* Scan for TIO nodes. */
for
(
nasid
=
0
;
nasid
<
MAX_PHYSNODE_ID
;
nasid
+=
2
)
{
/* if there's no nasid, don't try to read the klconfig on the node */
if
(
physical_node_map
[
nasid
]
==
-
1
)
continue
;
brd
=
find_lboard_any
((
lboard_t
*
)
root_lboard
[
nasid_to_cnodeid
(
nasid
)],
KLTYPE_TIO
);
/* Find TIOs & headless/memoryless nodes and add them to the tables */
for_each_online_node
(
node
)
{
kl_config_hdr_t
*
klgraph_header
;
nasid
=
cnodeid_to_nasid
(
node
);
if
((
klgraph_header
=
ia64_sn_get_klconfig_addr
(
nasid
))
==
NULL
)
BUG
();
brd
=
NODE_OFFSET_TO_LBOARD
(
nasid
,
klgraph_header
->
ch_board_info
);
while
(
brd
)
{
sn_cnodeid_to_nasid
[
numionodes
]
=
brd
->
brd_nasid
;
physical_node_map
[
brd
->
brd_nasid
]
=
numionodes
;
root_lboard
[
numionodes
]
=
brd
;
numionodes
++
;
brd
=
KLCF_NEXT_ANY
(
brd
);
if
(
!
brd
)
break
;
brd
=
find_lboard_any
(
brd
,
KLTYPE_TIO
);
if
(
board_needs_cnode
(
brd
->
brd_type
)
&&
physical_node_map
[
brd
->
brd_nasid
]
<
0
)
{
sn_cnodeid_to_nasid
[
num_cnodes
]
=
brd
->
brd_nasid
;
physical_node_map
[
brd
->
brd_nasid
]
=
num_cnodes
++
;
}
brd
=
find_lboard_next
(
brd
);
}
}
}
...
...
arch/ia64/sn/kernel/sn2/sn2_smp.c
浏览文件 @
8a212ab6
...
...
@@ -177,6 +177,7 @@ void sn_tlb_migrate_finish(struct mm_struct *mm)
/**
* sn2_global_tlb_purge - globally purge translation cache of virtual address range
* @mm: mm_struct containing virtual address range
* @start: start of virtual address range
* @end: end of virtual address range
* @nbits: specifies number of bytes to purge per instruction (num = 1<<(nbits & 0xfc))
...
...
@@ -188,21 +189,22 @@ void sn_tlb_migrate_finish(struct mm_struct *mm)
* - cpu_vm_mask is a bit mask that indicates which cpus have loaded the context.
* - cpu_vm_mask is converted into a nodemask of the nodes containing the
* cpus in cpu_vm_mask.
* - if only one bit is set in cpu_vm_mask & it is the current cpu,
* then only the local TLB needs to be flushed. This flushing can be done
* using ptc.l. This is the common case & avoids the global spinlock.
* - if only one bit is set in cpu_vm_mask & it is the current cpu & the
* process is purging its own virtual address range, then only the
* local TLB needs to be flushed. This flushing can be done using
* ptc.l. This is the common case & avoids the global spinlock.
* - if multiple cpus have loaded the context, then flushing has to be
* done with ptc.g/MMRs under protection of the global ptc_lock.
*/
void
sn2_global_tlb_purge
(
unsigned
long
start
,
unsigned
long
end
,
unsigned
long
nbits
)
sn2_global_tlb_purge
(
struct
mm_struct
*
mm
,
unsigned
long
start
,
unsigned
long
end
,
unsigned
long
nbits
)
{
int
i
,
opt
,
shub1
,
cnode
,
mynasid
,
cpu
,
lcpu
=
0
,
nasid
,
flushed
=
0
;
int
mymm
=
(
mm
==
current
->
active_mm
);
volatile
unsigned
long
*
ptc0
,
*
ptc1
;
unsigned
long
itc
,
itc2
,
flags
,
data0
=
0
,
data1
=
0
;
struct
mm_struct
*
mm
=
current
->
active_mm
;
unsigned
long
itc
,
itc2
,
flags
,
data0
=
0
,
data1
=
0
,
rr_value
;
short
nasids
[
MAX_NUMNODES
],
nix
;
nodemask_t
nodes_flushed
;
...
...
@@ -216,9 +218,12 @@ sn2_global_tlb_purge(unsigned long start, unsigned long end,
i
++
;
}
if
(
i
==
0
)
return
;
preempt_disable
();
if
(
likely
(
i
==
1
&&
lcpu
==
smp_processor_id
()))
{
if
(
likely
(
i
==
1
&&
lcpu
==
smp_processor_id
()
&&
mymm
))
{
do
{
ia64_ptcl
(
start
,
nbits
<<
2
);
start
+=
(
1UL
<<
nbits
);
...
...
@@ -229,7 +234,7 @@ sn2_global_tlb_purge(unsigned long start, unsigned long end,
return
;
}
if
(
atomic_read
(
&
mm
->
mm_users
)
==
1
)
{
if
(
atomic_read
(
&
mm
->
mm_users
)
==
1
&&
mymm
)
{
flush_tlb_mm
(
mm
);
__get_cpu_var
(
ptcstats
).
change_rid
++
;
preempt_enable
();
...
...
@@ -241,11 +246,13 @@ sn2_global_tlb_purge(unsigned long start, unsigned long end,
for_each_node_mask
(
cnode
,
nodes_flushed
)
nasids
[
nix
++
]
=
cnodeid_to_nasid
(
cnode
);
rr_value
=
(
mm
->
context
<<
3
)
|
REGION_NUMBER
(
start
);
shub1
=
is_shub1
();
if
(
shub1
)
{
data0
=
(
1UL
<<
SH1_PTC_0_A_SHFT
)
|
(
nbits
<<
SH1_PTC_0_PS_SHFT
)
|
((
ia64_get_rr
(
start
)
>>
8
)
<<
SH1_PTC_0_RID_SHFT
)
|
(
rr_value
<<
SH1_PTC_0_RID_SHFT
)
|
(
1UL
<<
SH1_PTC_0_START_SHFT
);
ptc0
=
(
long
*
)
GLOBAL_MMR_PHYS_ADDR
(
0
,
SH1_PTC_0
);
ptc1
=
(
long
*
)
GLOBAL_MMR_PHYS_ADDR
(
0
,
SH1_PTC_1
);
...
...
@@ -254,7 +261,7 @@ sn2_global_tlb_purge(unsigned long start, unsigned long end,
(
nbits
<<
SH2_PTC_PS_SHFT
)
|
(
1UL
<<
SH2_PTC_START_SHFT
);
ptc0
=
(
long
*
)
GLOBAL_MMR_PHYS_ADDR
(
0
,
SH2_PTC
+
(
(
ia64_get_rr
(
start
)
>>
8
)
<<
SH2_PTC_RID_SHFT
)
);
(
rr_value
<<
SH2_PTC_RID_SHFT
)
);
ptc1
=
NULL
;
}
...
...
@@ -275,7 +282,7 @@ sn2_global_tlb_purge(unsigned long start, unsigned long end,
data0
=
(
data0
&
~
SH2_PTC_ADDR_MASK
)
|
(
start
&
SH2_PTC_ADDR_MASK
);
for
(
i
=
0
;
i
<
nix
;
i
++
)
{
nasid
=
nasids
[
i
];
if
((
!
(
sn2_ptctest
&
3
))
&&
unlikely
(
nasid
==
mynasid
))
{
if
((
!
(
sn2_ptctest
&
3
))
&&
unlikely
(
nasid
==
mynasid
&&
mymm
))
{
ia64_ptcga
(
start
,
nbits
<<
2
);
ia64_srlz_i
();
}
else
{
...
...
arch/ia64/sn/kernel/sn2/sn_hwperf.c
浏览文件 @
8a212ab6
...
...
@@ -476,8 +476,8 @@ static int sn_topology_show(struct seq_file *s, void *d)
for_each_online_cpu
(
j
)
{
seq_printf
(
s
,
j
?
":%d"
:
", dist %d"
,
node_distance
(
cpu
id_to_cnodeid
(
i
),
cpu
id_to_cnodeid
(
j
)));
cpu
_to_node
(
i
),
cpu
_to_node
(
j
)));
}
seq_putc
(
s
,
'\n'
);
}
...
...
arch/ia64/sn/kernel/tiocx.c
浏览文件 @
8a212ab6
...
...
@@ -183,11 +183,12 @@ int cx_driver_unregister(struct cx_drv *cx_driver)
* @part_num: device's part number
* @mfg_num: device's manufacturer number
* @hubdev: hub info associated with this device
* @bt: board type of the device
*
*/
int
cx_device_register
(
nasid_t
nasid
,
int
part_num
,
int
mfg_num
,
struct
hubdev_info
*
hubdev
)
struct
hubdev_info
*
hubdev
,
int
bt
)
{
struct
cx_dev
*
cx_dev
;
...
...
@@ -200,6 +201,7 @@ cx_device_register(nasid_t nasid, int part_num, int mfg_num,
cx_dev
->
cx_id
.
mfg_num
=
mfg_num
;
cx_dev
->
cx_id
.
nasid
=
nasid
;
cx_dev
->
hubdev
=
hubdev
;
cx_dev
->
bt
=
bt
;
cx_dev
->
dev
.
parent
=
NULL
;
cx_dev
->
dev
.
bus
=
&
tiocx_bus_type
;
...
...
@@ -238,7 +240,8 @@ static int cx_device_reload(struct cx_dev *cx_dev)
{
cx_device_unregister
(
cx_dev
);
return
cx_device_register
(
cx_dev
->
cx_id
.
nasid
,
cx_dev
->
cx_id
.
part_num
,
cx_dev
->
cx_id
.
mfg_num
,
cx_dev
->
hubdev
);
cx_dev
->
cx_id
.
mfg_num
,
cx_dev
->
hubdev
,
cx_dev
->
bt
);
}
static
inline
uint64_t
tiocx_intr_alloc
(
nasid_t
nasid
,
int
widget
,
...
...
@@ -365,26 +368,20 @@ static void tio_corelet_reset(nasid_t nasid, int corelet)
udelay
(
2000
);
}
static
int
tiocx_btchar_get
(
int
nasid
)
static
int
is_fpga_tio
(
int
nasid
,
int
*
bt
)
{
moduleid_t
module_id
;
geoid_t
geoid
;
int
cnodeid
;
cnodeid
=
nasid_to_cnodeid
(
nasid
);
geoid
=
cnodeid_get_geoid
(
cnodeid
);
module_id
=
geo_module
(
geoid
);
return
MODULE_GET_BTCHAR
(
module_id
);
}
int
ioboard_type
;
static
int
is_fpga_brick
(
int
nasid
)
{
switch
(
tiocx_btchar_get
(
nasid
)
)
{
ioboard_type
=
ia64_sn_sysctl_ioboard_get
(
nasid
);
switch
(
ioboard_type
)
{
case
L1_BRICKTYPE_SA
:
case
L1_BRICKTYPE_ATHENA
:
case
L1_BRICKTYPE_DAYTONA
:
case
L1_BOARDTYPE_DAYTONA
:
*
bt
=
ioboard_type
;
return
1
;
}
return
0
;
}
...
...
@@ -407,16 +404,22 @@ static int tiocx_reload(struct cx_dev *cx_dev)
if
(
bitstream_loaded
(
nasid
))
{
uint64_t
cx_id
;
cx_id
=
*
(
volatile
uint64_t
*
)(
TIO_SWIN_BASE
(
nasid
,
TIOCX_CORELET
)
+
int
rv
;
rv
=
ia64_sn_sysctl_tio_clock_reset
(
nasid
);
if
(
rv
)
{
printk
(
KERN_ALERT
"CX port JTAG reset failed.
\n
"
);
}
else
{
cx_id
=
*
(
volatile
uint64_t
*
)
(
TIO_SWIN_BASE
(
nasid
,
TIOCX_CORELET
)
+
WIDGET_ID
);
part_num
=
XWIDGET_PART_NUM
(
cx_id
);
mfg_num
=
XWIDGET_MFG_NUM
(
cx_id
);
DBG
(
"part= 0x%x, mfg= 0x%x
\n
"
,
part_num
,
mfg_num
);
/* just ignore it if it's a CE */
if
(
part_num
==
TIO_CE_ASIC_PARTNUM
)
return
0
;
part_num
=
XWIDGET_PART_NUM
(
cx_id
);
mfg_num
=
XWIDGET_MFG_NUM
(
cx_id
);
DBG
(
"part= 0x%x, mfg= 0x%x
\n
"
,
part_num
,
mfg_num
);
/* just ignore it if it's a CE */
if
(
part_num
==
TIO_CE_ASIC_PARTNUM
)
return
0
;
}
}
cx_dev
->
cx_id
.
part_num
=
part_num
;
...
...
@@ -436,10 +439,10 @@ static ssize_t show_cxdev_control(struct device *dev, struct device_attribute *a
{
struct
cx_dev
*
cx_dev
=
to_cx_dev
(
dev
);
return
sprintf
(
buf
,
"0x%x 0x%x 0x%x
%d
\n
"
,
return
sprintf
(
buf
,
"0x%x 0x%x 0x%x
0x%x
\n
"
,
cx_dev
->
cx_id
.
nasid
,
cx_dev
->
cx_id
.
part_num
,
cx_dev
->
cx_id
.
mfg_num
,
tiocx_btchar_get
(
cx_dev
->
cx_id
.
nasid
)
);
cx_dev
->
bt
);
}
static
ssize_t
store_cxdev_control
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
const
char
*
buf
,
...
...
@@ -486,13 +489,13 @@ static int __init tiocx_init(void)
bus_register
(
&
tiocx_bus_type
);
for
(
cnodeid
=
0
;
cnodeid
<
MAX_COMPACT_NODES
;
cnodeid
++
)
{
for
(
cnodeid
=
0
;
cnodeid
<
num_cnodes
;
cnodeid
++
)
{
nasid_t
nasid
;
int
bt
;
if
((
nasid
=
cnodeid_to_nasid
(
cnodeid
))
<
0
)
break
;
/* No more nasids .. bail out of loop */
nasid
=
cnodeid_to_nasid
(
cnodeid
);
if
((
nasid
&
0x1
)
&&
is_fpga_
brick
(
nasid
))
{
if
((
nasid
&
0x1
)
&&
is_fpga_
tio
(
nasid
,
&
bt
))
{
struct
hubdev_info
*
hubdev
;
struct
xwidget_info
*
widgetp
;
...
...
@@ -512,7 +515,7 @@ static int __init tiocx_init(void)
if
(
cx_device_register
(
nasid
,
widgetp
->
xwi_hwid
.
part_num
,
widgetp
->
xwi_hwid
.
mfg_num
,
hubdev
)
<
0
)
widgetp
->
xwi_hwid
.
mfg_num
,
hubdev
,
bt
)
<
0
)
return
-
ENXIO
;
else
found_tiocx_device
++
;
...
...
arch/ia64/sn/kernel/xpc.h
浏览文件 @
8a212ab6
...
...
@@ -57,7 +57,7 @@
#define XPC_NASID_FROM_W_B(_w, _b) (((_w) * 64 + (_b)) * 2)
#define XPC_HB_DEFAULT_INTERVAL 5
/* incr HB every x secs */
#define XPC_HB_CHECK_DEFAULT_
TIMEOUT
20
/* check HB every x secs */
#define XPC_HB_CHECK_DEFAULT_
INTERVAL
20
/* check HB every x secs */
/* define the process name of HB checker and the CPU it is pinned to */
#define XPC_HB_CHECK_THREAD_NAME "xpc_hb"
...
...
@@ -67,34 +67,82 @@
#define XPC_DISCOVERY_THREAD_NAME "xpc_discovery"
#define XPC_HB_ALLOWED(_p, _v) ((_v)->heartbeating_to_mask & (1UL << (_p)))
#define XPC_ALLOW_HB(_p, _v) (_v)->heartbeating_to_mask |= (1UL << (_p))
#define XPC_DISALLOW_HB(_p, _v) (_v)->heartbeating_to_mask &= (~(1UL << (_p)))
/*
* Reserved Page provided by SAL.
* the reserved page
*
* SAL reserves one page of memory per partition for XPC. Though a full page
* in length (16384 bytes), its starting address is not page aligned, but it
* is cacheline aligned. The reserved page consists of the following:
*
* reserved page header
*
* The first cacheline of the reserved page contains the header
* (struct xpc_rsvd_page). Before SAL initialization has completed,
* SAL has set up the following fields of the reserved page header:
* SAL_signature, SAL_version, partid, and nasids_size. The other
* fields are set up by XPC. (xpc_rsvd_page points to the local
* partition's reserved page.)
*
* SAL provides one page per partition of reserved memory. When SAL
* initialization is complete, SAL_signature, SAL_version, partid,
* part_nasids, and mach_nasids are set.
* part_nasids mask
* mach_nasids mask
*
* SAL also sets up two bitmaps (or masks), one that reflects the actual
* nasids in this partition (part_nasids), and the other that reflects
* the actual nasids in the entire machine (mach_nasids). We're only
* interested in the even numbered nasids (which contain the processors
* and/or memory), so we only need half as many bits to represent the
* nasids. The part_nasids mask is located starting at the first cacheline
* following the reserved page header. The mach_nasids mask follows right
* after the part_nasids mask. The size in bytes of each mask is reflected
* by the reserved page header field 'nasids_size'. (Local partition's
* mask pointers are xpc_part_nasids and xpc_mach_nasids.)
*
* vars
* vars part
*
* Immediately following the mach_nasids mask are the XPC variables
* required by other partitions. First are those that are generic to all
* partitions (vars), followed on the next available cacheline by those
* which are partition specific (vars part). These are setup by XPC.
* (Local partition's vars pointers are xpc_vars and xpc_vars_part.)
*
* Note: Until vars_pa is set, the partition XPC code has not been initialized.
*/
struct
xpc_rsvd_page
{
u64
SAL_signature
;
/* SAL unique signature */
u64
SAL_version
;
/* SAL
specified
version */
u8
partid
;
/*
partition ID from SAL
*/
u64
SAL_signature
;
/* SAL
:
unique signature */
u64
SAL_version
;
/* SAL
:
version */
u8
partid
;
/*
SAL: partition ID
*/
u8
version
;
u8
pad
[
6
];
/* pad to u64 align
*/
u8
pad
1
[
6
];
/* align to next u64 in cacheline
*/
volatile
u64
vars_pa
;
u64
part_nasids
[
XP_NASID_MASK_WORDS
]
____cacheline_aligned
;
u64
mach_nasids
[
XP_NASID_MASK_WORDS
]
____cacheline_aligned
;
struct
timespec
stamp
;
/* time when reserved page was setup by XPC */
u64
pad2
[
9
];
/* align to last u64 in cacheline */
u64
nasids_size
;
/* SAL: size of each nasid mask in bytes */
};
#define XPC_RP_VERSION _XPC_VERSION(1,0)
/* version 1.0 of the reserved page */
#define XPC_RSVD_PAGE_ALIGNED_SIZE \
(L1_CACHE_ALIGN(sizeof(struct xpc_rsvd_page)))
#define XPC_RP_VERSION _XPC_VERSION(1,1)
/* version 1.1 of the reserved page */
#define XPC_SUPPORTS_RP_STAMP(_version) \
(_version >= _XPC_VERSION(1,1))
/*
* compare stamps - the return value is:
*
* < 0, if stamp1 < stamp2
* = 0, if stamp1 == stamp2
* > 0, if stamp1 > stamp2
*/
static
inline
int
xpc_compare_stamps
(
struct
timespec
*
stamp1
,
struct
timespec
*
stamp2
)
{
int
ret
;
if
((
ret
=
stamp1
->
tv_sec
-
stamp2
->
tv_sec
)
==
0
)
{
ret
=
stamp1
->
tv_nsec
-
stamp2
->
tv_nsec
;
}
return
ret
;
}
/*
...
...
@@ -121,11 +169,58 @@ struct xpc_vars {
u64
vars_part_pa
;
u64
amos_page_pa
;
/* paddr of page of AMOs from MSPEC driver */
AMO_t
*
amos_page
;
/* vaddr of page of AMOs from MSPEC driver */
AMO_t
*
act_amos
;
/* pointer to the first activation AMO */
};
#define XPC_V_VERSION _XPC_VERSION(3,0)
/* version 3.0 of the cross vars */
#define XPC_VARS_ALIGNED_SIZE (L1_CACHE_ALIGN(sizeof(struct xpc_vars)))
#define XPC_V_VERSION _XPC_VERSION(3,1)
/* version 3.1 of the cross vars */
#define XPC_SUPPORTS_DISENGAGE_REQUEST(_version) \
(_version >= _XPC_VERSION(3,1))
static
inline
int
xpc_hb_allowed
(
partid_t
partid
,
struct
xpc_vars
*
vars
)
{
return
((
vars
->
heartbeating_to_mask
&
(
1UL
<<
partid
))
!=
0
);
}
static
inline
void
xpc_allow_hb
(
partid_t
partid
,
struct
xpc_vars
*
vars
)
{
u64
old_mask
,
new_mask
;
do
{
old_mask
=
vars
->
heartbeating_to_mask
;
new_mask
=
(
old_mask
|
(
1UL
<<
partid
));
}
while
(
cmpxchg
(
&
vars
->
heartbeating_to_mask
,
old_mask
,
new_mask
)
!=
old_mask
);
}
static
inline
void
xpc_disallow_hb
(
partid_t
partid
,
struct
xpc_vars
*
vars
)
{
u64
old_mask
,
new_mask
;
do
{
old_mask
=
vars
->
heartbeating_to_mask
;
new_mask
=
(
old_mask
&
~
(
1UL
<<
partid
));
}
while
(
cmpxchg
(
&
vars
->
heartbeating_to_mask
,
old_mask
,
new_mask
)
!=
old_mask
);
}
/*
* The AMOs page consists of a number of AMO variables which are divided into
* four groups, The first two groups are used to identify an IRQ's sender.
* These two groups consist of 64 and 128 AMO variables respectively. The last
* two groups, consisting of just one AMO variable each, are used to identify
* the remote partitions that are currently engaged (from the viewpoint of
* the XPC running on the remote partition).
*/
#define XPC_NOTIFY_IRQ_AMOS 0
#define XPC_ACTIVATE_IRQ_AMOS (XPC_NOTIFY_IRQ_AMOS + XP_MAX_PARTITIONS)
#define XPC_ENGAGED_PARTITIONS_AMO (XPC_ACTIVATE_IRQ_AMOS + XP_NASID_MASK_WORDS)
#define XPC_DISENGAGE_REQUEST_AMO (XPC_ENGAGED_PARTITIONS_AMO + 1)
/*
* The following structure describes the per partition specific variables.
...
...
@@ -165,6 +260,16 @@ struct xpc_vars_part {
#define XPC_VP_MAGIC2 0x0073726176435058L
/* 'XPCvars\0'L (little endian) */
/* the reserved page sizes and offsets */
#define XPC_RP_HEADER_SIZE L1_CACHE_ALIGN(sizeof(struct xpc_rsvd_page))
#define XPC_RP_VARS_SIZE L1_CACHE_ALIGN(sizeof(struct xpc_vars))
#define XPC_RP_PART_NASIDS(_rp) (u64 *) ((u8 *) _rp + XPC_RP_HEADER_SIZE)
#define XPC_RP_MACH_NASIDS(_rp) (XPC_RP_PART_NASIDS(_rp) + xp_nasid_mask_words)
#define XPC_RP_VARS(_rp) ((struct xpc_vars *) XPC_RP_MACH_NASIDS(_rp) + xp_nasid_mask_words)
#define XPC_RP_VARS_PART(_rp) (struct xpc_vars_part *) ((u8 *) XPC_RP_VARS(rp) + XPC_RP_VARS_SIZE)
/*
* Functions registered by add_timer() or called by kernel_thread() only
...
...
@@ -349,6 +454,9 @@ struct xpc_channel {
atomic_t
n_on_msg_allocate_wq
;
/* #on msg allocation wait queue */
wait_queue_head_t
msg_allocate_wq
;
/* msg allocation wait queue */
u8
delayed_IPI_flags
;
/* IPI flags received, but delayed */
/* action until channel disconnected */
/* queue of msg senders who want to be notified when msg received */
atomic_t
n_to_notify
;
/* #of msg senders to notify */
...
...
@@ -358,7 +466,7 @@ struct xpc_channel {
void
*
key
;
/* pointer to user's key */
struct
semaphore
msg_to_pull_sema
;
/* next msg to pull serialization */
struct
semaphore
teardown_sema
;
/* wait for teardown completion
*/
struct
semaphore
wdisconnect_sema
;
/* wait for channel disconnect
*/
struct
xpc_openclose_args
*
local_openclose_args
;
/* args passed on */
/* opening or closing of channel */
...
...
@@ -410,6 +518,8 @@ struct xpc_channel {
#define XPC_C_DISCONNECTED 0x00002000
/* channel is disconnected */
#define XPC_C_DISCONNECTING 0x00004000
/* channel is being disconnected */
#define XPC_C_DISCONNECTCALLOUT 0x00008000
/* chan disconnected callout made */
#define XPC_C_WDISCONNECT 0x00010000
/* waiting for channel disconnect */
...
...
@@ -422,6 +532,8 @@ struct xpc_partition {
/* XPC HB infrastructure */
u8
remote_rp_version
;
/* version# of partition's rsvd pg */
struct
timespec
remote_rp_stamp
;
/* time when rsvd pg was initialized */
u64
remote_rp_pa
;
/* phys addr of partition's rsvd pg */
u64
remote_vars_pa
;
/* phys addr of partition's vars */
u64
remote_vars_part_pa
;
/* phys addr of partition's vars part */
...
...
@@ -432,14 +544,18 @@ struct xpc_partition {
u32
act_IRQ_rcvd
;
/* IRQs since activation */
spinlock_t
act_lock
;
/* protect updating of act_state */
u8
act_state
;
/* from XPC HB viewpoint */
u8
remote_vars_version
;
/* version# of partition's vars */
enum
xpc_retval
reason
;
/* reason partition is deactivating */
int
reason_line
;
/* line# deactivation initiated from */
int
reactivate_nasid
;
/* nasid in partition to reactivate */
unsigned
long
disengage_request_timeout
;
/* timeout in jiffies */
struct
timer_list
disengage_request_timer
;
/* XPC infrastructure referencing and teardown control */
volatile
u8
setup_state
;
/* infrastructure setup state */
volatile
u8
setup_state
;
/* infrastructure setup state */
wait_queue_head_t
teardown_wq
;
/* kthread waiting to teardown infra */
atomic_t
references
;
/* #of references to infrastructure */
...
...
@@ -454,6 +570,7 @@ struct xpc_partition {
u8
nchannels
;
/* #of defined channels supported */
atomic_t
nchannels_active
;
/* #of channels that are not DISCONNECTED */
atomic_t
nchannels_engaged
;
/* #of channels engaged with remote part */
struct
xpc_channel
*
channels
;
/* array of channel structures */
void
*
local_GPs_base
;
/* base address of kmalloc'd space */
...
...
@@ -518,6 +635,7 @@ struct xpc_partition {
#define XPC_P_TORNDOWN 0x03
/* infrastructure is torndown */
/*
* struct xpc_partition IPI_timer #of seconds to wait before checking for
* dropped IPIs. These occur whenever an IPI amo write doesn't complete until
...
...
@@ -526,6 +644,13 @@ struct xpc_partition {
#define XPC_P_DROPPED_IPI_WAIT (0.25 * HZ)
/* number of seconds to wait for other partitions to disengage */
#define XPC_DISENGAGE_REQUEST_DEFAULT_TIMELIMIT 90
/* interval in seconds to print 'waiting disengagement' messages */
#define XPC_DISENGAGE_PRINTMSG_INTERVAL 10
#define XPC_PARTID(_p) ((partid_t) ((_p) - &xpc_partitions[0]))
...
...
@@ -534,24 +659,20 @@ struct xpc_partition {
extern
struct
xpc_registration
xpc_registrations
[];
/*
>>> found in xpc_main.c only
*/
/*
found in xpc_main.c
*/
extern
struct
device
*
xpc_part
;
extern
struct
device
*
xpc_chan
;
extern
int
xpc_disengage_request_timelimit
;
extern
irqreturn_t
xpc_notify_IRQ_handler
(
int
,
void
*
,
struct
pt_regs
*
);
extern
void
xpc_dropped_IPI_check
(
struct
xpc_partition
*
);
extern
void
xpc_activate_partition
(
struct
xpc_partition
*
);
extern
void
xpc_activate_kthreads
(
struct
xpc_channel
*
,
int
);
extern
void
xpc_create_kthreads
(
struct
xpc_channel
*
,
int
);
extern
void
xpc_disconnect_wait
(
int
);
/* found in xpc_main.c and efi-xpc.c */
extern
void
xpc_activate_partition
(
struct
xpc_partition
*
);
/* found in xpc_partition.c */
extern
int
xpc_exiting
;
extern
int
xpc_hb_interval
;
extern
int
xpc_hb_check_interval
;
extern
struct
xpc_vars
*
xpc_vars
;
extern
struct
xpc_rsvd_page
*
xpc_rsvd_page
;
extern
struct
xpc_vars_part
*
xpc_vars_part
;
...
...
@@ -561,6 +682,7 @@ extern struct xpc_rsvd_page *xpc_rsvd_page_init(void);
extern
void
xpc_allow_IPI_ops
(
void
);
extern
void
xpc_restrict_IPI_ops
(
void
);
extern
int
xpc_identify_act_IRQ_sender
(
void
);
extern
int
xpc_partition_disengaged
(
struct
xpc_partition
*
);
extern
enum
xpc_retval
xpc_mark_partition_active
(
struct
xpc_partition
*
);
extern
void
xpc_mark_partition_inactive
(
struct
xpc_partition
*
);
extern
void
xpc_discovery
(
void
);
...
...
@@ -585,8 +707,8 @@ extern void xpc_connected_callout(struct xpc_channel *);
extern
void
xpc_deliver_msg
(
struct
xpc_channel
*
);
extern
void
xpc_disconnect_channel
(
const
int
,
struct
xpc_channel
*
,
enum
xpc_retval
,
unsigned
long
*
);
extern
void
xpc_disconnect
ed
_callout
(
struct
xpc_channel
*
);
extern
void
xpc_partition_down
(
struct
xpc_partition
*
,
enum
xpc_retval
);
extern
void
xpc_disconnect
ing
_callout
(
struct
xpc_channel
*
);
extern
void
xpc_partition_
going_
down
(
struct
xpc_partition
*
,
enum
xpc_retval
);
extern
void
xpc_teardown_infrastructure
(
struct
xpc_partition
*
);
...
...
@@ -673,6 +795,157 @@ xpc_part_ref(struct xpc_partition *part)
/*
* This next set of inlines are used to keep track of when a partition is
* potentially engaged in accessing memory belonging to another partition.
*/
static
inline
void
xpc_mark_partition_engaged
(
struct
xpc_partition
*
part
)
{
unsigned
long
irq_flags
;
AMO_t
*
amo
=
(
AMO_t
*
)
__va
(
part
->
remote_amos_page_pa
+
(
XPC_ENGAGED_PARTITIONS_AMO
*
sizeof
(
AMO_t
)));
local_irq_save
(
irq_flags
);
/* set bit corresponding to our partid in remote partition's AMO */
FETCHOP_STORE_OP
(
TO_AMO
((
u64
)
&
amo
->
variable
),
FETCHOP_OR
,
(
1UL
<<
sn_partition_id
));
/*
* We must always use the nofault function regardless of whether we
* are on a Shub 1.1 system or a Shub 1.2 slice 0xc processor. If we
* didn't, we'd never know that the other partition is down and would
* keep sending IPIs and AMOs to it until the heartbeat times out.
*/
(
void
)
xp_nofault_PIOR
((
u64
*
)
GLOBAL_MMR_ADDR
(
NASID_GET
(
&
amo
->
variable
),
xp_nofault_PIOR_target
));
local_irq_restore
(
irq_flags
);
}
static
inline
void
xpc_mark_partition_disengaged
(
struct
xpc_partition
*
part
)
{
unsigned
long
irq_flags
;
AMO_t
*
amo
=
(
AMO_t
*
)
__va
(
part
->
remote_amos_page_pa
+
(
XPC_ENGAGED_PARTITIONS_AMO
*
sizeof
(
AMO_t
)));
local_irq_save
(
irq_flags
);
/* clear bit corresponding to our partid in remote partition's AMO */
FETCHOP_STORE_OP
(
TO_AMO
((
u64
)
&
amo
->
variable
),
FETCHOP_AND
,
~
(
1UL
<<
sn_partition_id
));
/*
* We must always use the nofault function regardless of whether we
* are on a Shub 1.1 system or a Shub 1.2 slice 0xc processor. If we
* didn't, we'd never know that the other partition is down and would
* keep sending IPIs and AMOs to it until the heartbeat times out.
*/
(
void
)
xp_nofault_PIOR
((
u64
*
)
GLOBAL_MMR_ADDR
(
NASID_GET
(
&
amo
->
variable
),
xp_nofault_PIOR_target
));
local_irq_restore
(
irq_flags
);
}
static
inline
void
xpc_request_partition_disengage
(
struct
xpc_partition
*
part
)
{
unsigned
long
irq_flags
;
AMO_t
*
amo
=
(
AMO_t
*
)
__va
(
part
->
remote_amos_page_pa
+
(
XPC_DISENGAGE_REQUEST_AMO
*
sizeof
(
AMO_t
)));
local_irq_save
(
irq_flags
);
/* set bit corresponding to our partid in remote partition's AMO */
FETCHOP_STORE_OP
(
TO_AMO
((
u64
)
&
amo
->
variable
),
FETCHOP_OR
,
(
1UL
<<
sn_partition_id
));
/*
* We must always use the nofault function regardless of whether we
* are on a Shub 1.1 system or a Shub 1.2 slice 0xc processor. If we
* didn't, we'd never know that the other partition is down and would
* keep sending IPIs and AMOs to it until the heartbeat times out.
*/
(
void
)
xp_nofault_PIOR
((
u64
*
)
GLOBAL_MMR_ADDR
(
NASID_GET
(
&
amo
->
variable
),
xp_nofault_PIOR_target
));
local_irq_restore
(
irq_flags
);
}
static
inline
void
xpc_cancel_partition_disengage_request
(
struct
xpc_partition
*
part
)
{
unsigned
long
irq_flags
;
AMO_t
*
amo
=
(
AMO_t
*
)
__va
(
part
->
remote_amos_page_pa
+
(
XPC_DISENGAGE_REQUEST_AMO
*
sizeof
(
AMO_t
)));
local_irq_save
(
irq_flags
);
/* clear bit corresponding to our partid in remote partition's AMO */
FETCHOP_STORE_OP
(
TO_AMO
((
u64
)
&
amo
->
variable
),
FETCHOP_AND
,
~
(
1UL
<<
sn_partition_id
));
/*
* We must always use the nofault function regardless of whether we
* are on a Shub 1.1 system or a Shub 1.2 slice 0xc processor. If we
* didn't, we'd never know that the other partition is down and would
* keep sending IPIs and AMOs to it until the heartbeat times out.
*/
(
void
)
xp_nofault_PIOR
((
u64
*
)
GLOBAL_MMR_ADDR
(
NASID_GET
(
&
amo
->
variable
),
xp_nofault_PIOR_target
));
local_irq_restore
(
irq_flags
);
}
static
inline
u64
xpc_partition_engaged
(
u64
partid_mask
)
{
AMO_t
*
amo
=
xpc_vars
->
amos_page
+
XPC_ENGAGED_PARTITIONS_AMO
;
/* return our partition's AMO variable ANDed with partid_mask */
return
(
FETCHOP_LOAD_OP
(
TO_AMO
((
u64
)
&
amo
->
variable
),
FETCHOP_LOAD
)
&
partid_mask
);
}
static
inline
u64
xpc_partition_disengage_requested
(
u64
partid_mask
)
{
AMO_t
*
amo
=
xpc_vars
->
amos_page
+
XPC_DISENGAGE_REQUEST_AMO
;
/* return our partition's AMO variable ANDed with partid_mask */
return
(
FETCHOP_LOAD_OP
(
TO_AMO
((
u64
)
&
amo
->
variable
),
FETCHOP_LOAD
)
&
partid_mask
);
}
static
inline
void
xpc_clear_partition_engaged
(
u64
partid_mask
)
{
AMO_t
*
amo
=
xpc_vars
->
amos_page
+
XPC_ENGAGED_PARTITIONS_AMO
;
/* clear bit(s) based on partid_mask in our partition's AMO */
FETCHOP_STORE_OP
(
TO_AMO
((
u64
)
&
amo
->
variable
),
FETCHOP_AND
,
~
partid_mask
);
}
static
inline
void
xpc_clear_partition_disengage_request
(
u64
partid_mask
)
{
AMO_t
*
amo
=
xpc_vars
->
amos_page
+
XPC_DISENGAGE_REQUEST_AMO
;
/* clear bit(s) based on partid_mask in our partition's AMO */
FETCHOP_STORE_OP
(
TO_AMO
((
u64
)
&
amo
->
variable
),
FETCHOP_AND
,
~
partid_mask
);
}
/*
* The following set of macros and inlines are used for the sending and
* receiving of IPIs (also known as IRQs). There are two flavors of IPIs,
...
...
@@ -722,13 +995,13 @@ xpc_IPI_send(AMO_t *amo, u64 flag, int nasid, int phys_cpuid, int vector)
* Flag the appropriate AMO variable and send an IPI to the specified node.
*/
static
inline
void
xpc_activate_IRQ_send
(
u64
amos_page
,
int
from_nasid
,
int
to_nasid
,
xpc_activate_IRQ_send
(
u64
amos_page
_pa
,
int
from_nasid
,
int
to_nasid
,
int
to_phys_cpuid
)
{
int
w_index
=
XPC_NASID_W_INDEX
(
from_nasid
);
int
b_index
=
XPC_NASID_B_INDEX
(
from_nasid
);
AMO_t
*
amos
=
(
AMO_t
*
)
__va
(
amos_page
+
(
XP_MAX_PARTITION
S
*
sizeof
(
AMO_t
)));
AMO_t
*
amos
=
(
AMO_t
*
)
__va
(
amos_page
_pa
+
(
XPC_ACTIVATE_IRQ_AMO
S
*
sizeof
(
AMO_t
)));
(
void
)
xpc_IPI_send
(
&
amos
[
w_index
],
(
1UL
<<
b_index
),
to_nasid
,
...
...
@@ -756,6 +1029,13 @@ xpc_IPI_send_reactivate(struct xpc_partition *part)
xpc_vars
->
act_nasid
,
xpc_vars
->
act_phys_cpuid
);
}
static
inline
void
xpc_IPI_send_disengage
(
struct
xpc_partition
*
part
)
{
xpc_activate_IRQ_send
(
part
->
remote_amos_page_pa
,
cnodeid_to_nasid
(
0
),
part
->
remote_act_nasid
,
part
->
remote_act_phys_cpuid
);
}
/*
* IPIs associated with SGI_XPC_NOTIFY IRQ.
...
...
@@ -836,6 +1116,7 @@ xpc_notify_IRQ_send_local(struct xpc_channel *ch, u8 ipi_flag,
/* given an AMO variable and a channel#, get its associated IPI flags */
#define XPC_GET_IPI_FLAGS(_amo, _c) ((u8) (((_amo) >> ((_c) * 8)) & 0xff))
#define XPC_SET_IPI_FLAGS(_amo, _c, _f) (_amo) |= ((u64) (_f) << ((_c) * 8))
#define XPC_ANY_OPENCLOSE_IPI_FLAGS_SET(_amo) ((_amo) & 0x0f0f0f0f0f0f0f0f)
#define XPC_ANY_MSG_IPI_FLAGS_SET(_amo) ((_amo) & 0x1010101010101010)
...
...
@@ -903,17 +1184,18 @@ xpc_IPI_send_local_msgrequest(struct xpc_channel *ch)
* cacheable mapping for the entire region. This will prevent speculative
* reading of cached copies of our lines from being issued which will cause
* a PI FSB Protocol error to be generated by the SHUB. For XPC, we need 64
* (XP_MAX_PARTITIONS) AMO variables for message notification (xpc_main.c)
* and an additional 16 AMO variables for partition activation (xpc_hb.c).
* AMO variables (based on XP_MAX_PARTITIONS) for message notification and an
* additional 128 AMO variables (based on XP_NASID_MASK_WORDS) for partition
* activation and 2 AMO variables for partition deactivation.
*/
static
inline
AMO_t
*
xpc_IPI_init
(
partid_t
partid
)
xpc_IPI_init
(
int
index
)
{
AMO_t
*
part_amo
=
xpc_vars
->
amos_page
+
partid
;
AMO_t
*
amo
=
xpc_vars
->
amos_page
+
index
;
xpc_IPI_receive
(
part_amo
);
return
part_
amo
;
(
void
)
xpc_IPI_receive
(
amo
);
/* clear AMO variable */
return
amo
;
}
...
...
arch/ia64/sn/kernel/xpc_channel.c
浏览文件 @
8a212ab6
...
...
@@ -57,6 +57,7 @@ xpc_initialize_channels(struct xpc_partition *part, partid_t partid)
spin_lock_init
(
&
ch
->
lock
);
sema_init
(
&
ch
->
msg_to_pull_sema
,
1
);
/* mutex */
sema_init
(
&
ch
->
wdisconnect_sema
,
0
);
/* event wait */
atomic_set
(
&
ch
->
n_on_msg_allocate_wq
,
0
);
init_waitqueue_head
(
&
ch
->
msg_allocate_wq
);
...
...
@@ -166,6 +167,7 @@ xpc_setup_infrastructure(struct xpc_partition *part)
xpc_initialize_channels
(
part
,
partid
);
atomic_set
(
&
part
->
nchannels_active
,
0
);
atomic_set
(
&
part
->
nchannels_engaged
,
0
);
/* local_IPI_amo were set to 0 by an earlier memset() */
...
...
@@ -555,8 +557,6 @@ xpc_allocate_msgqueues(struct xpc_channel *ch)
sema_init
(
&
ch
->
notify_queue
[
i
].
sema
,
0
);
}
sema_init
(
&
ch
->
teardown_sema
,
0
);
/* event wait */
spin_lock_irqsave
(
&
ch
->
lock
,
irq_flags
);
ch
->
flags
|=
XPC_C_SETUP
;
spin_unlock_irqrestore
(
&
ch
->
lock
,
irq_flags
);
...
...
@@ -625,6 +625,55 @@ xpc_process_connect(struct xpc_channel *ch, unsigned long *irq_flags)
}
/*
* Notify those who wanted to be notified upon delivery of their message.
*/
static
void
xpc_notify_senders
(
struct
xpc_channel
*
ch
,
enum
xpc_retval
reason
,
s64
put
)
{
struct
xpc_notify
*
notify
;
u8
notify_type
;
s64
get
=
ch
->
w_remote_GP
.
get
-
1
;
while
(
++
get
<
put
&&
atomic_read
(
&
ch
->
n_to_notify
)
>
0
)
{
notify
=
&
ch
->
notify_queue
[
get
%
ch
->
local_nentries
];
/*
* See if the notify entry indicates it was associated with
* a message who's sender wants to be notified. It is possible
* that it is, but someone else is doing or has done the
* notification.
*/
notify_type
=
notify
->
type
;
if
(
notify_type
==
0
||
cmpxchg
(
&
notify
->
type
,
notify_type
,
0
)
!=
notify_type
)
{
continue
;
}
DBUG_ON
(
notify_type
!=
XPC_N_CALL
);
atomic_dec
(
&
ch
->
n_to_notify
);
if
(
notify
->
func
!=
NULL
)
{
dev_dbg
(
xpc_chan
,
"notify->func() called, notify=0x%p, "
"msg_number=%ld, partid=%d, channel=%d
\n
"
,
(
void
*
)
notify
,
get
,
ch
->
partid
,
ch
->
number
);
notify
->
func
(
reason
,
ch
->
partid
,
ch
->
number
,
notify
->
key
);
dev_dbg
(
xpc_chan
,
"notify->func() returned, "
"notify=0x%p, msg_number=%ld, partid=%d, "
"channel=%d
\n
"
,
(
void
*
)
notify
,
get
,
ch
->
partid
,
ch
->
number
);
}
}
}
/*
* Free up message queues and other stuff that were allocated for the specified
* channel.
...
...
@@ -669,9 +718,6 @@ xpc_free_msgqueues(struct xpc_channel *ch)
ch
->
remote_msgqueue
=
NULL
;
kfree
(
ch
->
notify_queue
);
ch
->
notify_queue
=
NULL
;
/* in case someone is waiting for the teardown to complete */
up
(
&
ch
->
teardown_sema
);
}
}
...
...
@@ -683,7 +729,7 @@ static void
xpc_process_disconnect
(
struct
xpc_channel
*
ch
,
unsigned
long
*
irq_flags
)
{
struct
xpc_partition
*
part
=
&
xpc_partitions
[
ch
->
partid
];
u32
ch
_flags
=
ch
->
flags
;
u32
ch
annel_was_connected
=
(
ch
->
flags
&
XPC_C_WASCONNECTED
)
;
DBUG_ON
(
!
spin_is_locked
(
&
ch
->
lock
));
...
...
@@ -701,12 +747,13 @@ xpc_process_disconnect(struct xpc_channel *ch, unsigned long *irq_flags)
}
DBUG_ON
(
atomic_read
(
&
ch
->
kthreads_assigned
)
!=
0
);
/* it's now safe to free the channel's message queues */
xpc_free_msgqueues
(
ch
);
DBUG_ON
(
ch
->
flags
&
XPC_C_SETUP
);
if
(
part
->
act_state
==
XPC_P_DEACTIVATING
)
{
/* can't proceed until the other side disengages from us */
if
(
xpc_partition_engaged
(
1UL
<<
ch
->
partid
))
{
return
;
}
if
(
part
->
act_state
!=
XPC_P_DEACTIVATING
)
{
}
else
{
/* as long as the other side is up do the full protocol */
...
...
@@ -724,16 +771,42 @@ xpc_process_disconnect(struct xpc_channel *ch, unsigned long *irq_flags)
}
}
/* wake those waiting for notify completion */
if
(
atomic_read
(
&
ch
->
n_to_notify
)
>
0
)
{
/* >>> we do callout while holding ch->lock */
xpc_notify_senders
(
ch
,
ch
->
reason
,
ch
->
w_local_GP
.
put
);
}
/* both sides are disconnected now */
ch
->
flags
=
XPC_C_DISCONNECTED
;
/* clear all flags, but this one */
/* it's now safe to free the channel's message queues */
xpc_free_msgqueues
(
ch
);
/* mark disconnected, clear all other flags except XPC_C_WDISCONNECT */
ch
->
flags
=
(
XPC_C_DISCONNECTED
|
(
ch
->
flags
&
XPC_C_WDISCONNECT
));
atomic_dec
(
&
part
->
nchannels_active
);
if
(
ch
_flags
&
XPC_C_WASCONNECTED
)
{
if
(
ch
annel_was_connected
)
{
dev_info
(
xpc_chan
,
"channel %d to partition %d disconnected, "
"reason=%d
\n
"
,
ch
->
number
,
ch
->
partid
,
ch
->
reason
);
}
if
(
ch
->
flags
&
XPC_C_WDISCONNECT
)
{
spin_unlock_irqrestore
(
&
ch
->
lock
,
*
irq_flags
);
up
(
&
ch
->
wdisconnect_sema
);
spin_lock_irqsave
(
&
ch
->
lock
,
*
irq_flags
);
}
else
if
(
ch
->
delayed_IPI_flags
)
{
if
(
part
->
act_state
!=
XPC_P_DEACTIVATING
)
{
/* time to take action on any delayed IPI flags */
spin_lock
(
&
part
->
IPI_lock
);
XPC_SET_IPI_FLAGS
(
part
->
local_IPI_amo
,
ch
->
number
,
ch
->
delayed_IPI_flags
);
spin_unlock
(
&
part
->
IPI_lock
);
}
ch
->
delayed_IPI_flags
=
0
;
}
}
...
...
@@ -754,6 +827,19 @@ xpc_process_openclose_IPI(struct xpc_partition *part, int ch_number,
spin_lock_irqsave
(
&
ch
->
lock
,
irq_flags
);
again:
if
((
ch
->
flags
&
XPC_C_DISCONNECTED
)
&&
(
ch
->
flags
&
XPC_C_WDISCONNECT
))
{
/*
* Delay processing IPI flags until thread waiting disconnect
* has had a chance to see that the channel is disconnected.
*/
ch
->
delayed_IPI_flags
|=
IPI_flags
;
spin_unlock_irqrestore
(
&
ch
->
lock
,
irq_flags
);
return
;
}
if
(
IPI_flags
&
XPC_IPI_CLOSEREQUEST
)
{
...
...
@@ -764,7 +850,7 @@ xpc_process_openclose_IPI(struct xpc_partition *part, int ch_number,
/*
* If RCLOSEREQUEST is set, we're probably waiting for
* RCLOSEREPLY. We should find it and a ROPENREQUEST packed
* with this RCLOSE
QREUQ
EST in the IPI_flags.
* with this RCLOSE
REQU
EST in the IPI_flags.
*/
if
(
ch
->
flags
&
XPC_C_RCLOSEREQUEST
)
{
...
...
@@ -779,14 +865,22 @@ xpc_process_openclose_IPI(struct xpc_partition *part, int ch_number,
/* both sides have finished disconnecting */
xpc_process_disconnect
(
ch
,
&
irq_flags
);
DBUG_ON
(
!
(
ch
->
flags
&
XPC_C_DISCONNECTED
));
goto
again
;
}
if
(
ch
->
flags
&
XPC_C_DISCONNECTED
)
{
// >>> explain this section
if
(
!
(
IPI_flags
&
XPC_IPI_OPENREQUEST
))
{
DBUG_ON
(
part
->
act_state
!=
XPC_P_DEACTIVATING
);
if
((
XPC_GET_IPI_FLAGS
(
part
->
local_IPI_amo
,
ch_number
)
&
XPC_IPI_OPENREQUEST
))
{
DBUG_ON
(
ch
->
delayed_IPI_flags
!=
0
);
spin_lock
(
&
part
->
IPI_lock
);
XPC_SET_IPI_FLAGS
(
part
->
local_IPI_amo
,
ch_number
,
XPC_IPI_CLOSEREQUEST
);
spin_unlock
(
&
part
->
IPI_lock
);
}
spin_unlock_irqrestore
(
&
ch
->
lock
,
irq_flags
);
return
;
}
...
...
@@ -816,9 +910,13 @@ xpc_process_openclose_IPI(struct xpc_partition *part, int ch_number,
}
XPC_DISCONNECT_CHANNEL
(
ch
,
reason
,
&
irq_flags
);
}
else
{
xpc_process_disconnect
(
ch
,
&
irq_flags
);
DBUG_ON
(
IPI_flags
&
XPC_IPI_CLOSEREPLY
);
spin_unlock_irqrestore
(
&
ch
->
lock
,
irq_flags
);
return
;
}
xpc_process_disconnect
(
ch
,
&
irq_flags
);
}
...
...
@@ -834,7 +932,20 @@ xpc_process_openclose_IPI(struct xpc_partition *part, int ch_number,
}
DBUG_ON
(
!
(
ch
->
flags
&
XPC_C_CLOSEREQUEST
));
DBUG_ON
(
!
(
ch
->
flags
&
XPC_C_RCLOSEREQUEST
));
if
(
!
(
ch
->
flags
&
XPC_C_RCLOSEREQUEST
))
{
if
((
XPC_GET_IPI_FLAGS
(
part
->
local_IPI_amo
,
ch_number
)
&
XPC_IPI_CLOSEREQUEST
))
{
DBUG_ON
(
ch
->
delayed_IPI_flags
!=
0
);
spin_lock
(
&
part
->
IPI_lock
);
XPC_SET_IPI_FLAGS
(
part
->
local_IPI_amo
,
ch_number
,
XPC_IPI_CLOSEREPLY
);
spin_unlock
(
&
part
->
IPI_lock
);
}
spin_unlock_irqrestore
(
&
ch
->
lock
,
irq_flags
);
return
;
}
ch
->
flags
|=
XPC_C_RCLOSEREPLY
;
...
...
@@ -852,8 +963,14 @@ xpc_process_openclose_IPI(struct xpc_partition *part, int ch_number,
"channel=%d
\n
"
,
args
->
msg_size
,
args
->
local_nentries
,
ch
->
partid
,
ch
->
number
);
if
((
ch
->
flags
&
XPC_C_DISCONNECTING
)
||
part
->
act_state
==
XPC_P_DEACTIVATING
)
{
if
(
part
->
act_state
==
XPC_P_DEACTIVATING
||
(
ch
->
flags
&
XPC_C_ROPENREQUEST
))
{
spin_unlock_irqrestore
(
&
ch
->
lock
,
irq_flags
);
return
;
}
if
(
ch
->
flags
&
(
XPC_C_DISCONNECTING
|
XPC_C_WDISCONNECT
))
{
ch
->
delayed_IPI_flags
|=
XPC_IPI_OPENREQUEST
;
spin_unlock_irqrestore
(
&
ch
->
lock
,
irq_flags
);
return
;
}
...
...
@@ -867,8 +984,11 @@ xpc_process_openclose_IPI(struct xpc_partition *part, int ch_number,
* msg_size = size of channel's messages in bytes
* local_nentries = remote partition's local_nentries
*/
DBUG_ON
(
args
->
msg_size
==
0
);
DBUG_ON
(
args
->
local_nentries
==
0
);
if
(
args
->
msg_size
==
0
||
args
->
local_nentries
==
0
)
{
/* assume OPENREQUEST was delayed by mistake */
spin_unlock_irqrestore
(
&
ch
->
lock
,
irq_flags
);
return
;
}
ch
->
flags
|=
(
XPC_C_ROPENREQUEST
|
XPC_C_CONNECTING
);
ch
->
remote_nentries
=
args
->
local_nentries
;
...
...
@@ -906,7 +1026,13 @@ xpc_process_openclose_IPI(struct xpc_partition *part, int ch_number,
spin_unlock_irqrestore
(
&
ch
->
lock
,
irq_flags
);
return
;
}
DBUG_ON
(
!
(
ch
->
flags
&
XPC_C_OPENREQUEST
));
if
(
!
(
ch
->
flags
&
XPC_C_OPENREQUEST
))
{
XPC_DISCONNECT_CHANNEL
(
ch
,
xpcOpenCloseError
,
&
irq_flags
);
spin_unlock_irqrestore
(
&
ch
->
lock
,
irq_flags
);
return
;
}
DBUG_ON
(
!
(
ch
->
flags
&
XPC_C_ROPENREQUEST
));
DBUG_ON
(
ch
->
flags
&
XPC_C_CONNECTED
);
...
...
@@ -960,8 +1086,8 @@ xpc_connect_channel(struct xpc_channel *ch)
struct
xpc_registration
*
registration
=
&
xpc_registrations
[
ch
->
number
];
if
(
down_
interruptible
(
&
registration
->
sema
)
!=
0
)
{
return
xpc
Interrupted
;
if
(
down_
trylock
(
&
registration
->
sema
)
!=
0
)
{
return
xpc
Retry
;
}
if
(
!
XPC_CHANNEL_REGISTERED
(
ch
->
number
))
{
...
...
@@ -1039,55 +1165,6 @@ xpc_connect_channel(struct xpc_channel *ch)
}
/*
* Notify those who wanted to be notified upon delivery of their message.
*/
static
void
xpc_notify_senders
(
struct
xpc_channel
*
ch
,
enum
xpc_retval
reason
,
s64
put
)
{
struct
xpc_notify
*
notify
;
u8
notify_type
;
s64
get
=
ch
->
w_remote_GP
.
get
-
1
;
while
(
++
get
<
put
&&
atomic_read
(
&
ch
->
n_to_notify
)
>
0
)
{
notify
=
&
ch
->
notify_queue
[
get
%
ch
->
local_nentries
];
/*
* See if the notify entry indicates it was associated with
* a message who's sender wants to be notified. It is possible
* that it is, but someone else is doing or has done the
* notification.
*/
notify_type
=
notify
->
type
;
if
(
notify_type
==
0
||
cmpxchg
(
&
notify
->
type
,
notify_type
,
0
)
!=
notify_type
)
{
continue
;
}
DBUG_ON
(
notify_type
!=
XPC_N_CALL
);
atomic_dec
(
&
ch
->
n_to_notify
);
if
(
notify
->
func
!=
NULL
)
{
dev_dbg
(
xpc_chan
,
"notify->func() called, notify=0x%p, "
"msg_number=%ld, partid=%d, channel=%d
\n
"
,
(
void
*
)
notify
,
get
,
ch
->
partid
,
ch
->
number
);
notify
->
func
(
reason
,
ch
->
partid
,
ch
->
number
,
notify
->
key
);
dev_dbg
(
xpc_chan
,
"notify->func() returned, "
"notify=0x%p, msg_number=%ld, partid=%d, "
"channel=%d
\n
"
,
(
void
*
)
notify
,
get
,
ch
->
partid
,
ch
->
number
);
}
}
}
/*
* Clear some of the msg flags in the local message queue.
*/
...
...
@@ -1240,6 +1317,7 @@ xpc_process_channel_activity(struct xpc_partition *part)
u64
IPI_amo
,
IPI_flags
;
struct
xpc_channel
*
ch
;
int
ch_number
;
u32
ch_flags
;
IPI_amo
=
xpc_get_IPI_flags
(
part
);
...
...
@@ -1266,8 +1344,9 @@ xpc_process_channel_activity(struct xpc_partition *part)
xpc_process_openclose_IPI
(
part
,
ch_number
,
IPI_flags
);
}
ch_flags
=
ch
->
flags
;
/* need an atomic snapshot of flags */
if
(
ch
->
flags
&
XPC_C_DISCONNECTING
)
{
if
(
ch
_
flags
&
XPC_C_DISCONNECTING
)
{
spin_lock_irqsave
(
&
ch
->
lock
,
irq_flags
);
xpc_process_disconnect
(
ch
,
&
irq_flags
);
spin_unlock_irqrestore
(
&
ch
->
lock
,
irq_flags
);
...
...
@@ -1278,9 +1357,9 @@ xpc_process_channel_activity(struct xpc_partition *part)
continue
;
}
if
(
!
(
ch
->
flags
&
XPC_C_CONNECTED
))
{
if
(
!
(
ch
->
flags
&
XPC_C_OPENREQUEST
))
{
DBUG_ON
(
ch
->
flags
&
XPC_C_SETUP
);
if
(
!
(
ch
_
flags
&
XPC_C_CONNECTED
))
{
if
(
!
(
ch
_
flags
&
XPC_C_OPENREQUEST
))
{
DBUG_ON
(
ch
_
flags
&
XPC_C_SETUP
);
(
void
)
xpc_connect_channel
(
ch
);
}
else
{
spin_lock_irqsave
(
&
ch
->
lock
,
irq_flags
);
...
...
@@ -1305,8 +1384,8 @@ xpc_process_channel_activity(struct xpc_partition *part)
/*
* XPC's heartbeat code calls this function to inform XPC that a partition
ha
s
* go
ne
down. XPC responds by tearing down the XPartition Communication
* XPC's heartbeat code calls this function to inform XPC that a partition
i
s
* go
ing
down. XPC responds by tearing down the XPartition Communication
* infrastructure used for the just downed partition.
*
* XPC's heartbeat code will never call this function and xpc_partition_up()
...
...
@@ -1314,7 +1393,7 @@ xpc_process_channel_activity(struct xpc_partition *part)
* at the same time.
*/
void
xpc_partition_down
(
struct
xpc_partition
*
part
,
enum
xpc_retval
reason
)
xpc_partition_
going_
down
(
struct
xpc_partition
*
part
,
enum
xpc_retval
reason
)
{
unsigned
long
irq_flags
;
int
ch_number
;
...
...
@@ -1330,12 +1409,11 @@ xpc_partition_down(struct xpc_partition *part, enum xpc_retval reason)
}
/* disconnect
all channels associated with the downed partitio
n */
/* disconnect
channels associated with the partition going dow
n */
for
(
ch_number
=
0
;
ch_number
<
part
->
nchannels
;
ch_number
++
)
{
ch
=
&
part
->
channels
[
ch_number
];
xpc_msgqueue_ref
(
ch
);
spin_lock_irqsave
(
&
ch
->
lock
,
irq_flags
);
...
...
@@ -1370,6 +1448,7 @@ xpc_teardown_infrastructure(struct xpc_partition *part)
* this partition.
*/
DBUG_ON
(
atomic_read
(
&
part
->
nchannels_engaged
)
!=
0
);
DBUG_ON
(
atomic_read
(
&
part
->
nchannels_active
)
!=
0
);
DBUG_ON
(
part
->
setup_state
!=
XPC_P_SETUP
);
part
->
setup_state
=
XPC_P_WTEARDOWN
;
...
...
@@ -1428,19 +1507,11 @@ xpc_initiate_connect(int ch_number)
if
(
xpc_part_ref
(
part
))
{
ch
=
&
part
->
channels
[
ch_number
];
if
(
!
(
ch
->
flags
&
XPC_C_DISCONNECTING
))
{
DBUG_ON
(
ch
->
flags
&
XPC_C_OPENREQUEST
);
DBUG_ON
(
ch
->
flags
&
XPC_C_CONNECTED
);
DBUG_ON
(
ch
->
flags
&
XPC_C_SETUP
);
/*
* Initiate the establishment of a connection
* on the newly registered channel to the
* remote partition.
*/
xpc_wakeup_channel_mgr
(
part
);
}
/*
* Initiate the establishment of a connection on the
* newly registered channel to the remote partition.
*/
xpc_wakeup_channel_mgr
(
part
);
xpc_part_deref
(
part
);
}
}
...
...
@@ -1450,9 +1521,6 @@ xpc_initiate_connect(int ch_number)
void
xpc_connected_callout
(
struct
xpc_channel
*
ch
)
{
unsigned
long
irq_flags
;
/* let the registerer know that a connection has been established */
if
(
ch
->
func
!=
NULL
)
{
...
...
@@ -1465,10 +1533,6 @@ xpc_connected_callout(struct xpc_channel *ch)
dev_dbg
(
xpc_chan
,
"ch->func() returned, reason=xpcConnected, "
"partid=%d, channel=%d
\n
"
,
ch
->
partid
,
ch
->
number
);
}
spin_lock_irqsave
(
&
ch
->
lock
,
irq_flags
);
ch
->
flags
|=
XPC_C_CONNECTCALLOUT
;
spin_unlock_irqrestore
(
&
ch
->
lock
,
irq_flags
);
}
...
...
@@ -1506,8 +1570,12 @@ xpc_initiate_disconnect(int ch_number)
spin_lock_irqsave
(
&
ch
->
lock
,
irq_flags
);
XPC_DISCONNECT_CHANNEL
(
ch
,
xpcUnregistering
,
if
(
!
(
ch
->
flags
&
XPC_C_DISCONNECTED
))
{
ch
->
flags
|=
XPC_C_WDISCONNECT
;
XPC_DISCONNECT_CHANNEL
(
ch
,
xpcUnregistering
,
&
irq_flags
);
}
spin_unlock_irqrestore
(
&
ch
->
lock
,
irq_flags
);
...
...
@@ -1523,8 +1591,9 @@ xpc_initiate_disconnect(int ch_number)
/*
* To disconnect a channel, and reflect it back to all who may be waiting.
*
* >>> An OPEN is not allowed until XPC_C_DISCONNECTING is cleared by
* >>> xpc_free_msgqueues().
* An OPEN is not allowed until XPC_C_DISCONNECTING is cleared by
* xpc_process_disconnect(), and if set, XPC_C_WDISCONNECT is cleared by
* xpc_disconnect_wait().
*
* THE CHANNEL IS TO BE LOCKED BY THE CALLER AND WILL REMAIN LOCKED UPON RETURN.
*/
...
...
@@ -1532,7 +1601,7 @@ void
xpc_disconnect_channel
(
const
int
line
,
struct
xpc_channel
*
ch
,
enum
xpc_retval
reason
,
unsigned
long
*
irq_flags
)
{
u32
flags
;
u32
channel_was_connected
=
(
ch
->
flags
&
XPC_C_CONNECTED
)
;
DBUG_ON
(
!
spin_is_locked
(
&
ch
->
lock
));
...
...
@@ -1547,61 +1616,53 @@ xpc_disconnect_channel(const int line, struct xpc_channel *ch,
XPC_SET_REASON
(
ch
,
reason
,
line
);
flags
=
ch
->
flags
;
ch
->
flags
|=
(
XPC_C_CLOSEREQUEST
|
XPC_C_DISCONNECTING
)
;
/* some of these may not have been set */
ch
->
flags
&=
~
(
XPC_C_OPENREQUEST
|
XPC_C_OPENREPLY
|
XPC_C_ROPENREQUEST
|
XPC_C_ROPENREPLY
|
XPC_C_CONNECTING
|
XPC_C_CONNECTED
);
ch
->
flags
|=
(
XPC_C_CLOSEREQUEST
|
XPC_C_DISCONNECTING
);
xpc_IPI_send_closerequest
(
ch
,
irq_flags
);
if
(
flags
&
XPC_C_CONNECTED
)
{
if
(
channel_was_connected
)
{
ch
->
flags
|=
XPC_C_WASCONNECTED
;
}
spin_unlock_irqrestore
(
&
ch
->
lock
,
*
irq_flags
);
/* wake all idle kthreads so they can exit */
if
(
atomic_read
(
&
ch
->
kthreads_idle
)
>
0
)
{
/* wake all idle kthreads so they can exit */
wake_up_all
(
&
ch
->
idle_wq
);
}
spin_unlock_irqrestore
(
&
ch
->
lock
,
*
irq_flags
);
/* wake those waiting to allocate an entry from the local msg queue */
if
(
atomic_read
(
&
ch
->
n_on_msg_allocate_wq
)
>
0
)
{
wake_up
(
&
ch
->
msg_allocate_wq
);
}
/* wake those waiting for notify completion */
if
(
atomic_read
(
&
ch
->
n_to_notify
)
>
0
)
{
xpc_notify_senders
(
ch
,
reason
,
ch
->
w_local_GP
.
put
);
}
spin_lock_irqsave
(
&
ch
->
lock
,
*
irq_flags
);
}
void
xpc_disconnect
ed
_callout
(
struct
xpc_channel
*
ch
)
xpc_disconnect
ing
_callout
(
struct
xpc_channel
*
ch
)
{
/*
* Let the channel's registerer know that the channel is
now
* Let the channel's registerer know that the channel is
being
* disconnected. We don't want to do this if the registerer was never
* informed of a connection being made, unless the disconnect was for
* abnormal reasons.
* informed of a connection being made.
*/
if
(
ch
->
func
!=
NULL
)
{
dev_dbg
(
xpc_chan
,
"ch->func() called, reason=
%d, partid=%d,
"
"
channel=%d
\n
"
,
ch
->
reason
,
ch
->
partid
,
ch
->
number
);
dev_dbg
(
xpc_chan
,
"ch->func() called, reason=
xpcDisconnecting,
"
"
partid=%d, channel=%d
\n
"
,
ch
->
partid
,
ch
->
number
);
ch
->
func
(
ch
->
reason
,
ch
->
partid
,
ch
->
number
,
NULL
,
ch
->
key
);
ch
->
func
(
xpcDisconnecting
,
ch
->
partid
,
ch
->
number
,
NULL
,
ch
->
key
);
dev_dbg
(
xpc_chan
,
"ch->func() returned, reason=%d, partid=%d, "
"channel=%d
\n
"
,
ch
->
reason
,
ch
->
partid
,
ch
->
number
);
dev_dbg
(
xpc_chan
,
"ch->func() returned, reason="
"xpcDisconnecting, partid=%d, channel=%d
\n
"
,
ch
->
partid
,
ch
->
number
);
}
}
...
...
@@ -1848,7 +1909,7 @@ xpc_send_msg(struct xpc_channel *ch, struct xpc_msg *msg, u8 notify_type,
xpc_notify_func
func
,
void
*
key
)
{
enum
xpc_retval
ret
=
xpcSuccess
;
struct
xpc_notify
*
notify
=
NULL
;
// >>> to keep the compiler happy!!
struct
xpc_notify
*
notify
=
notify
;
s64
put
,
msg_number
=
msg
->
number
;
...
...
arch/ia64/sn/kernel/xpc_main.c
浏览文件 @
8a212ab6
...
...
@@ -54,6 +54,7 @@
#include <linux/interrupt.h>
#include <linux/slab.h>
#include <linux/delay.h>
#include <linux/reboot.h>
#include <asm/sn/intr.h>
#include <asm/sn/sn_sal.h>
#include <asm/uaccess.h>
...
...
@@ -82,11 +83,17 @@ struct device *xpc_chan = &xpc_chan_dbg_subname;
/* systune related variables for /proc/sys directories */
static
int
xpc_hb_min
=
1
;
static
int
xpc_hb_max
=
10
;
static
int
xpc_hb_interval
=
XPC_HB_DEFAULT_INTERVAL
;
static
int
xpc_hb_min_interval
=
1
;
static
int
xpc_hb_max_interval
=
10
;
static
int
xpc_hb_check_min
=
10
;
static
int
xpc_hb_check_max
=
120
;
static
int
xpc_hb_check_interval
=
XPC_HB_CHECK_DEFAULT_INTERVAL
;
static
int
xpc_hb_check_min_interval
=
10
;
static
int
xpc_hb_check_max_interval
=
120
;
int
xpc_disengage_request_timelimit
=
XPC_DISENGAGE_REQUEST_DEFAULT_TIMELIMIT
;
static
int
xpc_disengage_request_min_timelimit
=
0
;
static
int
xpc_disengage_request_max_timelimit
=
120
;
static
ctl_table
xpc_sys_xpc_hb_dir
[]
=
{
{
...
...
@@ -99,7 +106,8 @@ static ctl_table xpc_sys_xpc_hb_dir[] = {
&
proc_dointvec_minmax
,
&
sysctl_intvec
,
NULL
,
&
xpc_hb_min
,
&
xpc_hb_max
&
xpc_hb_min_interval
,
&
xpc_hb_max_interval
},
{
2
,
...
...
@@ -111,7 +119,8 @@ static ctl_table xpc_sys_xpc_hb_dir[] = {
&
proc_dointvec_minmax
,
&
sysctl_intvec
,
NULL
,
&
xpc_hb_check_min
,
&
xpc_hb_check_max
&
xpc_hb_check_min_interval
,
&
xpc_hb_check_max_interval
},
{
0
}
};
...
...
@@ -124,6 +133,19 @@ static ctl_table xpc_sys_xpc_dir[] = {
0555
,
xpc_sys_xpc_hb_dir
},
{
2
,
"disengage_request_timelimit"
,
&
xpc_disengage_request_timelimit
,
sizeof
(
int
),
0644
,
NULL
,
&
proc_dointvec_minmax
,
&
sysctl_intvec
,
NULL
,
&
xpc_disengage_request_min_timelimit
,
&
xpc_disengage_request_max_timelimit
},
{
0
}
};
static
ctl_table
xpc_sys_dir
[]
=
{
...
...
@@ -148,10 +170,10 @@ static DECLARE_WAIT_QUEUE_HEAD(xpc_act_IRQ_wq);
static
unsigned
long
xpc_hb_check_timeout
;
/*
xpc_hb_checker thread exited notification
*/
/*
notification that the xpc_hb_checker thread has exited
*/
static
DECLARE_MUTEX_LOCKED
(
xpc_hb_checker_exited
);
/*
xpc_discovery thread exited notification
*/
/*
notification that the xpc_discovery thread has exited
*/
static
DECLARE_MUTEX_LOCKED
(
xpc_discovery_exited
);
...
...
@@ -161,6 +183,30 @@ static struct timer_list xpc_hb_timer;
static
void
xpc_kthread_waitmsgs
(
struct
xpc_partition
*
,
struct
xpc_channel
*
);
static
int
xpc_system_reboot
(
struct
notifier_block
*
,
unsigned
long
,
void
*
);
static
struct
notifier_block
xpc_reboot_notifier
=
{
.
notifier_call
=
xpc_system_reboot
,
};
/*
* Timer function to enforce the timelimit on the partition disengage request.
*/
static
void
xpc_timeout_partition_disengage_request
(
unsigned
long
data
)
{
struct
xpc_partition
*
part
=
(
struct
xpc_partition
*
)
data
;
DBUG_ON
(
jiffies
<
part
->
disengage_request_timeout
);
(
void
)
xpc_partition_disengaged
(
part
);
DBUG_ON
(
part
->
disengage_request_timeout
!=
0
);
DBUG_ON
(
xpc_partition_engaged
(
1UL
<<
XPC_PARTID
(
part
))
!=
0
);
}
/*
* Notify the heartbeat check thread that an IRQ has been received.
*/
...
...
@@ -214,12 +260,6 @@ xpc_hb_checker(void *ignore)
while
(
!
(
volatile
int
)
xpc_exiting
)
{
/* wait for IRQ or timeout */
(
void
)
wait_event_interruptible
(
xpc_act_IRQ_wq
,
(
last_IRQ_count
<
atomic_read
(
&
xpc_act_IRQ_rcvd
)
||
jiffies
>=
xpc_hb_check_timeout
||
(
volatile
int
)
xpc_exiting
));
dev_dbg
(
xpc_part
,
"woke up with %d ticks rem; %d IRQs have "
"been received
\n
"
,
(
int
)
(
xpc_hb_check_timeout
-
jiffies
),
...
...
@@ -240,6 +280,7 @@ xpc_hb_checker(void *ignore)
}
/* check for outstanding IRQs */
new_IRQ_count
=
atomic_read
(
&
xpc_act_IRQ_rcvd
);
if
(
last_IRQ_count
<
new_IRQ_count
||
force_IRQ
!=
0
)
{
force_IRQ
=
0
;
...
...
@@ -257,12 +298,18 @@ xpc_hb_checker(void *ignore)
xpc_hb_check_timeout
=
jiffies
+
(
xpc_hb_check_interval
*
HZ
);
}
/* wait for IRQ or timeout */
(
void
)
wait_event_interruptible
(
xpc_act_IRQ_wq
,
(
last_IRQ_count
<
atomic_read
(
&
xpc_act_IRQ_rcvd
)
||
jiffies
>=
xpc_hb_check_timeout
||
(
volatile
int
)
xpc_exiting
));
}
dev_dbg
(
xpc_part
,
"heartbeat checker is exiting
\n
"
);
/* mark this thread as
inactive
*/
/* mark this thread as
having exited
*/
up
(
&
xpc_hb_checker_exited
);
return
0
;
}
...
...
@@ -282,7 +329,7 @@ xpc_initiate_discovery(void *ignore)
dev_dbg
(
xpc_part
,
"discovery thread is exiting
\n
"
);
/* mark this thread as
inactive
*/
/* mark this thread as
having exited
*/
up
(
&
xpc_discovery_exited
);
return
0
;
}
...
...
@@ -309,7 +356,7 @@ xpc_make_first_contact(struct xpc_partition *part)
"partition %d
\n
"
,
XPC_PARTID
(
part
));
/* wait a 1/4 of a second or so */
msleep_interruptible
(
250
);
(
void
)
msleep_interruptible
(
250
);
if
(
part
->
act_state
==
XPC_P_DEACTIVATING
)
{
return
part
->
reason
;
...
...
@@ -336,7 +383,8 @@ static void
xpc_channel_mgr
(
struct
xpc_partition
*
part
)
{
while
(
part
->
act_state
!=
XPC_P_DEACTIVATING
||
atomic_read
(
&
part
->
nchannels_active
)
>
0
)
{
atomic_read
(
&
part
->
nchannels_active
)
>
0
||
!
xpc_partition_disengaged
(
part
))
{
xpc_process_channel_activity
(
part
);
...
...
@@ -360,7 +408,8 @@ xpc_channel_mgr(struct xpc_partition *part)
(
volatile
u64
)
part
->
local_IPI_amo
!=
0
||
((
volatile
u8
)
part
->
act_state
==
XPC_P_DEACTIVATING
&&
atomic_read
(
&
part
->
nchannels_active
)
==
0
)));
atomic_read
(
&
part
->
nchannels_active
)
==
0
&&
xpc_partition_disengaged
(
part
))));
atomic_set
(
&
part
->
channel_mgr_requests
,
1
);
// >>> Does it need to wakeup periodically as well? In case we
...
...
@@ -482,7 +531,7 @@ xpc_activating(void *__partid)
return
0
;
}
XPC_ALLOW_HB
(
partid
,
xpc_vars
);
xpc_allow_hb
(
partid
,
xpc_vars
);
xpc_IPI_send_activated
(
part
);
...
...
@@ -492,6 +541,7 @@ xpc_activating(void *__partid)
*/
(
void
)
xpc_partition_up
(
part
);
xpc_disallow_hb
(
partid
,
xpc_vars
);
xpc_mark_partition_inactive
(
part
);
if
(
part
->
reason
==
xpcReactivating
)
{
...
...
@@ -670,6 +720,7 @@ xpc_daemonize_kthread(void *args)
struct
xpc_partition
*
part
=
&
xpc_partitions
[
partid
];
struct
xpc_channel
*
ch
;
int
n_needed
;
unsigned
long
irq_flags
;
daemonize
(
"xpc%02dc%d"
,
partid
,
ch_number
);
...
...
@@ -680,11 +731,14 @@ xpc_daemonize_kthread(void *args)
ch
=
&
part
->
channels
[
ch_number
];
if
(
!
(
ch
->
flags
&
XPC_C_DISCONNECTING
))
{
DBUG_ON
(
!
(
ch
->
flags
&
XPC_C_CONNECTED
));
/* let registerer know that connection has been established */
if
(
atomic_read
(
&
ch
->
kthreads_assigned
)
==
1
)
{
spin_lock_irqsave
(
&
ch
->
lock
,
irq_flags
);
if
(
!
(
ch
->
flags
&
XPC_C_CONNECTCALLOUT
))
{
ch
->
flags
|=
XPC_C_CONNECTCALLOUT
;
spin_unlock_irqrestore
(
&
ch
->
lock
,
irq_flags
);
xpc_connected_callout
(
ch
);
/*
...
...
@@ -699,16 +753,28 @@ xpc_daemonize_kthread(void *args)
!
(
ch
->
flags
&
XPC_C_DISCONNECTING
))
{
xpc_activate_kthreads
(
ch
,
n_needed
);
}
}
else
{
spin_unlock_irqrestore
(
&
ch
->
lock
,
irq_flags
);
}
xpc_kthread_waitmsgs
(
part
,
ch
);
}
if
(
atomic_dec_return
(
&
ch
->
kthreads_assigned
)
==
0
&&
((
ch
->
flags
&
XPC_C_CONNECTCALLOUT
)
||
(
ch
->
reason
!=
xpcUnregistering
&&
ch
->
reason
!=
xpcOtherUnregistering
)))
{
xpc_disconnected_callout
(
ch
);
if
(
atomic_dec_return
(
&
ch
->
kthreads_assigned
)
==
0
)
{
spin_lock_irqsave
(
&
ch
->
lock
,
irq_flags
);
if
((
ch
->
flags
&
XPC_C_CONNECTCALLOUT
)
&&
!
(
ch
->
flags
&
XPC_C_DISCONNECTCALLOUT
))
{
ch
->
flags
|=
XPC_C_DISCONNECTCALLOUT
;
spin_unlock_irqrestore
(
&
ch
->
lock
,
irq_flags
);
xpc_disconnecting_callout
(
ch
);
}
else
{
spin_unlock_irqrestore
(
&
ch
->
lock
,
irq_flags
);
}
if
(
atomic_dec_return
(
&
part
->
nchannels_engaged
)
==
0
)
{
xpc_mark_partition_disengaged
(
part
);
xpc_IPI_send_disengage
(
part
);
}
}
...
...
@@ -740,12 +806,33 @@ xpc_create_kthreads(struct xpc_channel *ch, int needed)
unsigned
long
irq_flags
;
pid_t
pid
;
u64
args
=
XPC_PACK_ARGS
(
ch
->
partid
,
ch
->
number
);
struct
xpc_partition
*
part
=
&
xpc_partitions
[
ch
->
partid
];
while
(
needed
--
>
0
)
{
/*
* The following is done on behalf of the newly created
* kthread. That kthread is responsible for doing the
* counterpart to the following before it exits.
*/
(
void
)
xpc_part_ref
(
part
);
xpc_msgqueue_ref
(
ch
);
if
(
atomic_inc_return
(
&
ch
->
kthreads_assigned
)
==
1
&&
atomic_inc_return
(
&
part
->
nchannels_engaged
)
==
1
)
{
xpc_mark_partition_engaged
(
part
);
}
pid
=
kernel_thread
(
xpc_daemonize_kthread
,
(
void
*
)
args
,
0
);
if
(
pid
<
0
)
{
/* the fork failed */
if
(
atomic_dec_return
(
&
ch
->
kthreads_assigned
)
==
0
&&
atomic_dec_return
(
&
part
->
nchannels_engaged
)
==
0
)
{
xpc_mark_partition_disengaged
(
part
);
xpc_IPI_send_disengage
(
part
);
}
xpc_msgqueue_deref
(
ch
);
xpc_part_deref
(
part
);
if
(
atomic_read
(
&
ch
->
kthreads_assigned
)
<
ch
->
kthreads_idle_limit
)
{
...
...
@@ -765,14 +852,6 @@ xpc_create_kthreads(struct xpc_channel *ch, int needed)
break
;
}
/*
* The following is done on behalf of the newly created
* kthread. That kthread is responsible for doing the
* counterpart to the following before it exits.
*/
(
void
)
xpc_part_ref
(
&
xpc_partitions
[
ch
->
partid
]);
xpc_msgqueue_ref
(
ch
);
atomic_inc
(
&
ch
->
kthreads_assigned
);
ch
->
kthreads_created
++
;
// >>> temporary debug only!!!
}
}
...
...
@@ -781,87 +860,142 @@ xpc_create_kthreads(struct xpc_channel *ch, int needed)
void
xpc_disconnect_wait
(
int
ch_number
)
{
unsigned
long
irq_flags
;
partid_t
partid
;
struct
xpc_partition
*
part
;
struct
xpc_channel
*
ch
;
int
wakeup_channel_mgr
;
/* now wait for all callouts to the caller's function to cease */
for
(
partid
=
1
;
partid
<
XP_MAX_PARTITIONS
;
partid
++
)
{
part
=
&
xpc_partitions
[
partid
];
if
(
xpc_part_ref
(
part
))
{
ch
=
&
part
->
channels
[
ch_number
];
if
(
!
xpc_part_ref
(
part
))
{
continue
;
}
// >>> how do we keep from falling into the window between our check and going
// >>> down and coming back up where sema is re-inited?
if
(
ch
->
flags
&
XPC_C_SETUP
)
{
(
void
)
down
(
&
ch
->
teardown_sema
);
}
ch
=
&
part
->
channels
[
ch_number
];
if
(
!
(
ch
->
flags
&
XPC_C_WDISCONNECT
))
{
xpc_part_deref
(
part
);
continue
;
}
(
void
)
down
(
&
ch
->
wdisconnect_sema
);
spin_lock_irqsave
(
&
ch
->
lock
,
irq_flags
);
DBUG_ON
(
!
(
ch
->
flags
&
XPC_C_DISCONNECTED
));
wakeup_channel_mgr
=
0
;
if
(
ch
->
delayed_IPI_flags
)
{
if
(
part
->
act_state
!=
XPC_P_DEACTIVATING
)
{
spin_lock
(
&
part
->
IPI_lock
);
XPC_SET_IPI_FLAGS
(
part
->
local_IPI_amo
,
ch
->
number
,
ch
->
delayed_IPI_flags
);
spin_unlock
(
&
part
->
IPI_lock
);
wakeup_channel_mgr
=
1
;
}
ch
->
delayed_IPI_flags
=
0
;
}
ch
->
flags
&=
~
XPC_C_WDISCONNECT
;
spin_unlock_irqrestore
(
&
ch
->
lock
,
irq_flags
);
if
(
wakeup_channel_mgr
)
{
xpc_wakeup_channel_mgr
(
part
);
}
xpc_part_deref
(
part
);
}
}
static
void
xpc_do_exit
(
void
)
xpc_do_exit
(
enum
xpc_retval
reason
)
{
partid_t
partid
;
int
active_part_count
;
struct
xpc_partition
*
part
;
unsigned
long
printmsg_time
;
/* now it's time to eliminate our heartbeat */
del_timer_sync
(
&
xpc_hb_timer
);
xpc_vars
->
heartbeating_to_mask
=
0
;
/* indicate to others that our reserved page is uninitialized */
xpc_rsvd_page
->
vars_pa
=
0
;
/*
* Ignore all incoming interrupts. Without interupts the heartbeat
* checker won't activate any new partitions that may come up.
*/
free_irq
(
SGI_XPC_ACTIVATE
,
NULL
);
/* a 'rmmod XPC' and a 'reboot' cannot both end up here together */
DBUG_ON
(
xpc_exiting
==
1
);
/*
*
Cause the heartbeat checker and the discovery threads to exit.
*
We don't want them attempting to activate new partitions as we
* t
ry to deactivate the existing ones
.
*
Let the heartbeat checker thread and the discovery thread
*
(if one is running) know that they should exit. Also wake up
* t
he heartbeat checker thread in case it's sleeping
.
*/
xpc_exiting
=
1
;
wake_up_interruptible
(
&
xpc_act_IRQ_wq
);
/*
wait for the heartbeat checker thread to mark itself inactive
*/
down
(
&
xpc_hb_checker_exited
);
/*
ignore all incoming interrupts
*/
free_irq
(
SGI_XPC_ACTIVATE
,
NULL
);
/* wait for the discovery thread to
mark itself inactive
*/
/* wait for the discovery thread to
exit
*/
down
(
&
xpc_discovery_exited
);
/* wait for the heartbeat checker thread to exit */
down
(
&
xpc_hb_checker_exited
);
msleep_interruptible
(
300
);
/* sleep for a 1/3 of a second or so */
(
void
)
msleep_interruptible
(
300
);
/* wait for all partitions to become inactive */
printmsg_time
=
jiffies
;
do
{
active_part_count
=
0
;
for
(
partid
=
1
;
partid
<
XP_MAX_PARTITIONS
;
partid
++
)
{
part
=
&
xpc_partitions
[
partid
];
if
(
part
->
act_state
!=
XPC_P_INACTIVE
)
{
active_part_count
++
;
XPC_DEACTIVATE_PARTITION
(
part
,
xpcUnloading
);
if
(
xpc_partition_disengaged
(
part
)
&&
part
->
act_state
==
XPC_P_INACTIVE
)
{
continue
;
}
active_part_count
++
;
XPC_DEACTIVATE_PARTITION
(
part
,
reason
);
}
if
(
active_part_count
)
msleep_interruptible
(
300
)
;
}
while
(
active_part_count
>
0
);
if
(
active_part_count
==
0
)
{
break
;
}
if
(
jiffies
>=
printmsg_time
)
{
dev_info
(
xpc_part
,
"waiting for partitions to "
"deactivate/disengage, active count=%d, remote "
"engaged=0x%lx
\n
"
,
active_part_count
,
xpc_partition_engaged
(
1UL
<<
partid
));
printmsg_time
=
jiffies
+
(
XPC_DISENGAGE_PRINTMSG_INTERVAL
*
HZ
);
}
/* sleep for a 1/3 of a second or so */
(
void
)
msleep_interruptible
(
300
);
}
while
(
1
);
DBUG_ON
(
xpc_partition_engaged
(
-
1UL
));
/* indicate to others that our reserved page is uninitialized */
xpc_rsvd_page
->
vars_pa
=
0
;
/* now it's time to eliminate our heartbeat */
del_timer_sync
(
&
xpc_hb_timer
);
DBUG_ON
(
xpc_vars
->
heartbeating_to_mask
!=
0
);
/* take ourselves off of the reboot_notifier_list */
(
void
)
unregister_reboot_notifier
(
&
xpc_reboot_notifier
);
/* close down protections for IPI operations */
xpc_restrict_IPI_ops
();
...
...
@@ -876,6 +1010,34 @@ xpc_do_exit(void)
}
/*
* This function is called when the system is being rebooted.
*/
static
int
xpc_system_reboot
(
struct
notifier_block
*
nb
,
unsigned
long
event
,
void
*
unused
)
{
enum
xpc_retval
reason
;
switch
(
event
)
{
case
SYS_RESTART
:
reason
=
xpcSystemReboot
;
break
;
case
SYS_HALT
:
reason
=
xpcSystemHalt
;
break
;
case
SYS_POWER_OFF
:
reason
=
xpcSystemPoweroff
;
break
;
default:
reason
=
xpcSystemGoingDown
;
}
xpc_do_exit
(
reason
);
return
NOTIFY_DONE
;
}
int
__init
xpc_init
(
void
)
{
...
...
@@ -891,11 +1053,11 @@ xpc_init(void)
/*
* xpc_remote_copy_buffer is used as a temporary buffer for bte_copy'ng
*
both a partition's reserved page and its XPC variables. Its size was
*
based on the size of a reserved page. So we need to ensure that th
e
*
XPC variable
s will fit as well.
*
various portions of a partition's reserved page. Its size is based
*
on the size of the reserved page header and part_nasids mask. So w
e
*
need to ensure that the other item
s will fit as well.
*/
if
(
XPC_
VARS_ALIGNED_SIZE
>
XPC_RSVD_PAGE_ALIGNED_SIZE
)
{
if
(
XPC_
RP_VARS_SIZE
>
XPC_RP_HEADER_SIZE
+
XP_NASID_MASK_BYTES
)
{
dev_err
(
xpc_part
,
"xpc_remote_copy_buffer is not big enough
\n
"
);
return
-
EPERM
;
}
...
...
@@ -924,6 +1086,12 @@ xpc_init(void)
spin_lock_init
(
&
part
->
act_lock
);
part
->
act_state
=
XPC_P_INACTIVE
;
XPC_SET_REASON
(
part
,
0
,
0
);
init_timer
(
&
part
->
disengage_request_timer
);
part
->
disengage_request_timer
.
function
=
xpc_timeout_partition_disengage_request
;
part
->
disengage_request_timer
.
data
=
(
unsigned
long
)
part
;
part
->
setup_state
=
XPC_P_UNSET
;
init_waitqueue_head
(
&
part
->
teardown_wq
);
atomic_set
(
&
part
->
references
,
0
);
...
...
@@ -980,6 +1148,13 @@ xpc_init(void)
}
/* add ourselves to the reboot_notifier_list */
ret
=
register_reboot_notifier
(
&
xpc_reboot_notifier
);
if
(
ret
!=
0
)
{
dev_warn
(
xpc_part
,
"can't register reboot notifier
\n
"
);
}
/*
* Set the beating to other partitions into motion. This is
* the last requirement for other partitions' discovery to
...
...
@@ -1001,6 +1176,9 @@ xpc_init(void)
/* indicate to others that our reserved page is uninitialized */
xpc_rsvd_page
->
vars_pa
=
0
;
/* take ourselves off of the reboot_notifier_list */
(
void
)
unregister_reboot_notifier
(
&
xpc_reboot_notifier
);
del_timer_sync
(
&
xpc_hb_timer
);
free_irq
(
SGI_XPC_ACTIVATE
,
NULL
);
xpc_restrict_IPI_ops
();
...
...
@@ -1024,7 +1202,7 @@ xpc_init(void)
/* mark this new thread as a non-starter */
up
(
&
xpc_discovery_exited
);
xpc_do_exit
();
xpc_do_exit
(
xpcUnloading
);
return
-
EBUSY
;
}
...
...
@@ -1043,7 +1221,7 @@ module_init(xpc_init);
void
__exit
xpc_exit
(
void
)
{
xpc_do_exit
();
xpc_do_exit
(
xpcUnloading
);
}
module_exit
(
xpc_exit
);
...
...
@@ -1060,3 +1238,7 @@ module_param(xpc_hb_check_interval, int, 0);
MODULE_PARM_DESC
(
xpc_hb_check_interval
,
"Number of seconds between "
"heartbeat checks."
);
module_param
(
xpc_disengage_request_timelimit
,
int
,
0
);
MODULE_PARM_DESC
(
xpc_disengage_request_timelimit
,
"Number of seconds to wait "
"for disengage request to complete."
);
arch/ia64/sn/kernel/xpc_partition.c
浏览文件 @
8a212ab6
...
...
@@ -44,16 +44,19 @@ static u64 xpc_sh2_IPI_access3;
/* original protection values for each node */
u64
xpc_prot_vec
[
MAX_
COMPACT_
NODES
];
u64
xpc_prot_vec
[
MAX_
NUM
NODES
];
/* this partition's reserved page */
/* this partition's reserved page
pointers
*/
struct
xpc_rsvd_page
*
xpc_rsvd_page
;
/* this partition's XPC variables (within the reserved page) */
static
u64
*
xpc_part_nasids
;
static
u64
*
xpc_mach_nasids
;
struct
xpc_vars
*
xpc_vars
;
struct
xpc_vars_part
*
xpc_vars_part
;
static
int
xp_nasid_mask_bytes
;
/* actual size in bytes of nasid mask */
static
int
xp_nasid_mask_words
;
/* actual size in words of nasid mask */
/*
* For performance reasons, each entry of xpc_partitions[] is cacheline
...
...
@@ -65,20 +68,16 @@ struct xpc_partition xpc_partitions[XP_MAX_PARTITIONS + 1];
/*
* Generic buffer used to store a local copy of the remote partitions
* reserved page or XPC variables.
* Generic buffer used to store a local copy of portions of a remote
* partition's reserved page (either its header and part_nasids mask,
* or its vars).
*
* xpc_discovery runs only once and is a seperate thread that is
* very likely going to be processing in parallel with receiving
* interrupts.
*/
char
____cacheline_aligned
xpc_remote_copy_buffer
[
XPC_RSVD_PAGE_ALIGNED_SIZE
];
/* systune related variables */
int
xpc_hb_interval
=
XPC_HB_DEFAULT_INTERVAL
;
int
xpc_hb_check_interval
=
XPC_HB_CHECK_DEFAULT_TIMEOUT
;
char
____cacheline_aligned
xpc_remote_copy_buffer
[
XPC_RP_HEADER_SIZE
+
XP_NASID_MASK_BYTES
];
/*
...
...
@@ -86,13 +85,16 @@ int xpc_hb_check_interval = XPC_HB_CHECK_DEFAULT_TIMEOUT;
* for that nasid. This function returns 0 on any error.
*/
static
u64
xpc_get_rsvd_page_pa
(
int
nasid
,
u64
buf
,
u64
buf_size
)
xpc_get_rsvd_page_pa
(
int
nasid
)
{
bte_result_t
bte_res
;
s64
status
;
u64
cookie
=
0
;
u64
rp_pa
=
nasid
;
/* seed with nasid */
u64
len
=
0
;
u64
buf
=
buf
;
u64
buf_len
=
0
;
void
*
buf_base
=
NULL
;
while
(
1
)
{
...
...
@@ -108,13 +110,22 @@ xpc_get_rsvd_page_pa(int nasid, u64 buf, u64 buf_size)
break
;
}
if
(
len
>
buf_size
)
{
dev_err
(
xpc_part
,
"len (=0x%016lx) > buf_size
\n
"
,
len
);
status
=
SALRET_ERROR
;
break
;
if
(
L1_CACHE_ALIGN
(
len
)
>
buf_len
)
{
if
(
buf_base
!=
NULL
)
{
kfree
(
buf_base
);
}
buf_len
=
L1_CACHE_ALIGN
(
len
);
buf
=
(
u64
)
xpc_kmalloc_cacheline_aligned
(
buf_len
,
GFP_KERNEL
,
&
buf_base
);
if
(
buf_base
==
NULL
)
{
dev_err
(
xpc_part
,
"unable to kmalloc "
"len=0x%016lx
\n
"
,
buf_len
);
status
=
SALRET_ERROR
;
break
;
}
}
bte_res
=
xp_bte_copy
(
rp_pa
,
ia64_tpa
(
buf
),
buf_
size
,
bte_res
=
xp_bte_copy
(
rp_pa
,
ia64_tpa
(
buf
),
buf_
len
,
(
BTE_NOTIFY
|
BTE_WACQUIRE
),
NULL
);
if
(
bte_res
!=
BTE_SUCCESS
)
{
dev_dbg
(
xpc_part
,
"xp_bte_copy failed %i
\n
"
,
bte_res
);
...
...
@@ -123,6 +134,10 @@ xpc_get_rsvd_page_pa(int nasid, u64 buf, u64 buf_size)
}
}
if
(
buf_base
!=
NULL
)
{
kfree
(
buf_base
);
}
if
(
status
!=
SALRET_OK
)
{
rp_pa
=
0
;
}
...
...
@@ -141,15 +156,15 @@ xpc_rsvd_page_init(void)
{
struct
xpc_rsvd_page
*
rp
;
AMO_t
*
amos_page
;
u64
rp_pa
,
n
ext_cl
,
n
asid_array
=
0
;
u64
rp_pa
,
nasid_array
=
0
;
int
i
,
ret
;
/* get the local reserved page's address */
rp_pa
=
xpc_get_rsvd_page_pa
(
cnodeid_to_nasid
(
0
),
(
u64
)
xpc_remote_copy_buffer
,
XPC_RSVD_PAGE_ALIGNED_SIZE
);
preempt_disable
();
rp_pa
=
xpc_get_rsvd_page_pa
(
cpuid_to_nasid
(
smp_processor_id
()));
preempt_enable
(
);
if
(
rp_pa
==
0
)
{
dev_err
(
xpc_part
,
"SAL failed to locate the reserved page
\n
"
);
return
NULL
;
...
...
@@ -164,12 +179,19 @@ xpc_rsvd_page_init(void)
rp
->
version
=
XPC_RP_VERSION
;
/*
* Place the XPC variables on the cache line following the
* reserved page structure.
*/
next_cl
=
(
u64
)
rp
+
XPC_RSVD_PAGE_ALIGNED_SIZE
;
xpc_vars
=
(
struct
xpc_vars
*
)
next_cl
;
/* establish the actual sizes of the nasid masks */
if
(
rp
->
SAL_version
==
1
)
{
/* SAL_version 1 didn't set the nasids_size field */
rp
->
nasids_size
=
128
;
}
xp_nasid_mask_bytes
=
rp
->
nasids_size
;
xp_nasid_mask_words
=
xp_nasid_mask_bytes
/
8
;
/* setup the pointers to the various items in the reserved page */
xpc_part_nasids
=
XPC_RP_PART_NASIDS
(
rp
);
xpc_mach_nasids
=
XPC_RP_MACH_NASIDS
(
rp
);
xpc_vars
=
XPC_RP_VARS
(
rp
);
xpc_vars_part
=
XPC_RP_VARS_PART
(
rp
);
/*
* Before clearing xpc_vars, see if a page of AMOs had been previously
...
...
@@ -221,33 +243,32 @@ xpc_rsvd_page_init(void)
amos_page
=
(
AMO_t
*
)
TO_AMO
((
u64
)
amos_page
);
}
/* clear xpc_vars */
memset
(
xpc_vars
,
0
,
sizeof
(
struct
xpc_vars
));
/*
* Place the XPC per partition specific variables on the cache line
* following the XPC variables structure.
*/
next_cl
+=
XPC_VARS_ALIGNED_SIZE
;
memset
((
u64
*
)
next_cl
,
0
,
sizeof
(
struct
xpc_vars_part
)
*
XP_MAX_PARTITIONS
);
xpc_vars_part
=
(
struct
xpc_vars_part
*
)
next_cl
;
xpc_vars
->
vars_part_pa
=
__pa
(
next_cl
);
xpc_vars
->
version
=
XPC_V_VERSION
;
xpc_vars
->
act_nasid
=
cpuid_to_nasid
(
0
);
xpc_vars
->
act_phys_cpuid
=
cpu_physical_id
(
0
);
xpc_vars
->
vars_part_pa
=
__pa
(
xpc_vars_part
);
xpc_vars
->
amos_page_pa
=
ia64_tpa
((
u64
)
amos_page
);
xpc_vars
->
amos_page
=
amos_page
;
/* save for next load of XPC */
/*
* Initialize the activation related AMO variables.
*/
xpc_vars
->
act_amos
=
xpc_IPI_init
(
XP_MAX_PARTITIONS
);
for
(
i
=
1
;
i
<
XP_NASID_MASK_WORDS
;
i
++
)
{
xpc_IPI_init
(
i
+
XP_MAX_PARTITIONS
);
/* clear xpc_vars_part */
memset
((
u64
*
)
xpc_vars_part
,
0
,
sizeof
(
struct
xpc_vars_part
)
*
XP_MAX_PARTITIONS
);
/* initialize the activate IRQ related AMO variables */
for
(
i
=
0
;
i
<
xp_nasid_mask_words
;
i
++
)
{
(
void
)
xpc_IPI_init
(
XPC_ACTIVATE_IRQ_AMOS
+
i
);
}
/* export AMO page's physical address to other partitions */
xpc_vars
->
amos_page_pa
=
ia64_tpa
((
u64
)
xpc_vars
->
amos_page
);
/* initialize the engaged remote partitions related AMO variables */
(
void
)
xpc_IPI_init
(
XPC_ENGAGED_PARTITIONS_AMO
);
(
void
)
xpc_IPI_init
(
XPC_DISENGAGE_REQUEST_AMO
);
/* timestamp of when reserved page was setup by XPC */
rp
->
stamp
=
CURRENT_TIME
;
/*
* This signifies to the remote partition that our reserved
...
...
@@ -387,6 +408,11 @@ xpc_check_remote_hb(void)
remote_vars
=
(
struct
xpc_vars
*
)
xpc_remote_copy_buffer
;
for
(
partid
=
1
;
partid
<
XP_MAX_PARTITIONS
;
partid
++
)
{
if
(
xpc_exiting
)
{
break
;
}
if
(
partid
==
sn_partition_id
)
{
continue
;
}
...
...
@@ -401,7 +427,7 @@ xpc_check_remote_hb(void)
/* pull the remote_hb cache line */
bres
=
xp_bte_copy
(
part
->
remote_vars_pa
,
ia64_tpa
((
u64
)
remote_vars
),
XPC_
VARS_ALIGNED
_SIZE
,
XPC_
RP_VARS
_SIZE
,
(
BTE_NOTIFY
|
BTE_WACQUIRE
),
NULL
);
if
(
bres
!=
BTE_SUCCESS
)
{
XPC_DEACTIVATE_PARTITION
(
part
,
...
...
@@ -417,7 +443,7 @@ xpc_check_remote_hb(void)
if
(((
remote_vars
->
heartbeat
==
part
->
last_heartbeat
)
&&
(
remote_vars
->
kdb_status
==
0
))
||
!
XPC_HB_ALLOWED
(
sn_partition_id
,
remote_vars
))
{
!
xpc_hb_allowed
(
sn_partition_id
,
remote_vars
))
{
XPC_DEACTIVATE_PARTITION
(
part
,
xpcNoHeartbeat
);
continue
;
...
...
@@ -429,31 +455,31 @@ xpc_check_remote_hb(void)
/*
* Get a copy of the remote partition's rsvd page.
* Get a copy of
a portion of
the remote partition's rsvd page.
*
* remote_rp points to a buffer that is cacheline aligned for BTE copies and
* assumed to be of size XPC_RSVD_PAGE_ALIGNED_SIZE.
* is large enough to contain a copy of their reserved page header and
* part_nasids mask.
*/
static
enum
xpc_retval
xpc_get_remote_rp
(
int
nasid
,
u64
*
discovered_nasids
,
struct
xpc_rsvd_page
*
remote_rp
,
u64
*
remote_r
svd_page
_pa
)
struct
xpc_rsvd_page
*
remote_rp
,
u64
*
remote_r
p
_pa
)
{
int
bres
,
i
;
/* get the reserved page's physical address */
*
remote_rsvd_page_pa
=
xpc_get_rsvd_page_pa
(
nasid
,
(
u64
)
remote_rp
,
XPC_RSVD_PAGE_ALIGNED_SIZE
);
if
(
*
remote_rsvd_page_pa
==
0
)
{
*
remote_rp_pa
=
xpc_get_rsvd_page_pa
(
nasid
);
if
(
*
remote_rp_pa
==
0
)
{
return
xpcNoRsvdPageAddr
;
}
/* pull over the reserved page
structure
*/
/* pull over the reserved page
header and part_nasids mask
*/
bres
=
xp_bte_copy
(
*
remote_r
svd_page
_pa
,
ia64_tpa
((
u64
)
remote_rp
),
XPC_R
SVD_PAGE_ALIGNED_SIZE
,
bres
=
xp_bte_copy
(
*
remote_r
p
_pa
,
ia64_tpa
((
u64
)
remote_rp
),
XPC_R
P_HEADER_SIZE
+
xp_nasid_mask_bytes
,
(
BTE_NOTIFY
|
BTE_WACQUIRE
),
NULL
);
if
(
bres
!=
BTE_SUCCESS
)
{
return
xpc_map_bte_errors
(
bres
);
...
...
@@ -461,8 +487,11 @@ xpc_get_remote_rp(int nasid, u64 *discovered_nasids,
if
(
discovered_nasids
!=
NULL
)
{
for
(
i
=
0
;
i
<
XP_NASID_MASK_WORDS
;
i
++
)
{
discovered_nasids
[
i
]
|=
remote_rp
->
part_nasids
[
i
];
u64
*
remote_part_nasids
=
XPC_RP_PART_NASIDS
(
remote_rp
);
for
(
i
=
0
;
i
<
xp_nasid_mask_words
;
i
++
)
{
discovered_nasids
[
i
]
|=
remote_part_nasids
[
i
];
}
}
...
...
@@ -489,10 +518,10 @@ xpc_get_remote_rp(int nasid, u64 *discovered_nasids,
/*
* Get a copy of the remote partition's XPC variables.
* Get a copy of the remote partition's XPC variables
from the reserved page
.
*
* remote_vars points to a buffer that is cacheline aligned for BTE copies and
* assumed to be of size XPC_
VARS_ALIGNED
_SIZE.
* assumed to be of size XPC_
RP_VARS
_SIZE.
*/
static
enum
xpc_retval
xpc_get_remote_vars
(
u64
remote_vars_pa
,
struct
xpc_vars
*
remote_vars
)
...
...
@@ -508,7 +537,7 @@ xpc_get_remote_vars(u64 remote_vars_pa, struct xpc_vars *remote_vars)
/* pull over the cross partition variables */
bres
=
xp_bte_copy
(
remote_vars_pa
,
ia64_tpa
((
u64
)
remote_vars
),
XPC_
VARS_ALIGNED
_SIZE
,
XPC_
RP_VARS
_SIZE
,
(
BTE_NOTIFY
|
BTE_WACQUIRE
),
NULL
);
if
(
bres
!=
BTE_SUCCESS
)
{
return
xpc_map_bte_errors
(
bres
);
...
...
@@ -524,7 +553,56 @@ xpc_get_remote_vars(u64 remote_vars_pa, struct xpc_vars *remote_vars)
/*
* Prior code has determine the nasid which generated an IPI. Inspect
* Update the remote partition's info.
*/
static
void
xpc_update_partition_info
(
struct
xpc_partition
*
part
,
u8
remote_rp_version
,
struct
timespec
*
remote_rp_stamp
,
u64
remote_rp_pa
,
u64
remote_vars_pa
,
struct
xpc_vars
*
remote_vars
)
{
part
->
remote_rp_version
=
remote_rp_version
;
dev_dbg
(
xpc_part
,
" remote_rp_version = 0x%016lx
\n
"
,
part
->
remote_rp_version
);
part
->
remote_rp_stamp
=
*
remote_rp_stamp
;
dev_dbg
(
xpc_part
,
" remote_rp_stamp (tv_sec = 0x%lx tv_nsec = 0x%lx
\n
"
,
part
->
remote_rp_stamp
.
tv_sec
,
part
->
remote_rp_stamp
.
tv_nsec
);
part
->
remote_rp_pa
=
remote_rp_pa
;
dev_dbg
(
xpc_part
,
" remote_rp_pa = 0x%016lx
\n
"
,
part
->
remote_rp_pa
);
part
->
remote_vars_pa
=
remote_vars_pa
;
dev_dbg
(
xpc_part
,
" remote_vars_pa = 0x%016lx
\n
"
,
part
->
remote_vars_pa
);
part
->
last_heartbeat
=
remote_vars
->
heartbeat
;
dev_dbg
(
xpc_part
,
" last_heartbeat = 0x%016lx
\n
"
,
part
->
last_heartbeat
);
part
->
remote_vars_part_pa
=
remote_vars
->
vars_part_pa
;
dev_dbg
(
xpc_part
,
" remote_vars_part_pa = 0x%016lx
\n
"
,
part
->
remote_vars_part_pa
);
part
->
remote_act_nasid
=
remote_vars
->
act_nasid
;
dev_dbg
(
xpc_part
,
" remote_act_nasid = 0x%x
\n
"
,
part
->
remote_act_nasid
);
part
->
remote_act_phys_cpuid
=
remote_vars
->
act_phys_cpuid
;
dev_dbg
(
xpc_part
,
" remote_act_phys_cpuid = 0x%x
\n
"
,
part
->
remote_act_phys_cpuid
);
part
->
remote_amos_page_pa
=
remote_vars
->
amos_page_pa
;
dev_dbg
(
xpc_part
,
" remote_amos_page_pa = 0x%lx
\n
"
,
part
->
remote_amos_page_pa
);
part
->
remote_vars_version
=
remote_vars
->
version
;
dev_dbg
(
xpc_part
,
" remote_vars_version = 0x%x
\n
"
,
part
->
remote_vars_version
);
}
/*
* Prior code has determined the nasid which generated an IPI. Inspect
* that nasid to determine if its partition needs to be activated or
* deactivated.
*
...
...
@@ -542,8 +620,12 @@ xpc_identify_act_IRQ_req(int nasid)
{
struct
xpc_rsvd_page
*
remote_rp
;
struct
xpc_vars
*
remote_vars
;
u64
remote_r
svd_page
_pa
;
u64
remote_r
p
_pa
;
u64
remote_vars_pa
;
int
remote_rp_version
;
int
reactivate
=
0
;
int
stamp_diff
;
struct
timespec
remote_rp_stamp
=
{
0
,
0
};
partid_t
partid
;
struct
xpc_partition
*
part
;
enum
xpc_retval
ret
;
...
...
@@ -553,7 +635,7 @@ xpc_identify_act_IRQ_req(int nasid)
remote_rp
=
(
struct
xpc_rsvd_page
*
)
xpc_remote_copy_buffer
;
ret
=
xpc_get_remote_rp
(
nasid
,
NULL
,
remote_rp
,
&
remote_r
svd_page
_pa
);
ret
=
xpc_get_remote_rp
(
nasid
,
NULL
,
remote_rp
,
&
remote_r
p
_pa
);
if
(
ret
!=
xpcSuccess
)
{
dev_warn
(
xpc_part
,
"unable to get reserved page from nasid %d, "
"which sent interrupt, reason=%d
\n
"
,
nasid
,
ret
);
...
...
@@ -561,6 +643,10 @@ xpc_identify_act_IRQ_req(int nasid)
}
remote_vars_pa
=
remote_rp
->
vars_pa
;
remote_rp_version
=
remote_rp
->
version
;
if
(
XPC_SUPPORTS_RP_STAMP
(
remote_rp_version
))
{
remote_rp_stamp
=
remote_rp
->
stamp
;
}
partid
=
remote_rp
->
partid
;
part
=
&
xpc_partitions
[
partid
];
...
...
@@ -586,44 +672,117 @@ xpc_identify_act_IRQ_req(int nasid)
"%ld:0x%lx
\n
"
,
(
int
)
nasid
,
(
int
)
partid
,
part
->
act_IRQ_rcvd
,
remote_vars
->
heartbeat
,
remote_vars
->
heartbeating_to_mask
);
if
(
xpc_partition_disengaged
(
part
)
&&
part
->
act_state
==
XPC_P_INACTIVE
)
{
if
(
part
->
act_state
==
XPC_P_INACTIVE
)
{
xpc_update_partition_info
(
part
,
remote_rp_version
,
&
remote_rp_stamp
,
remote_rp_pa
,
remote_vars_pa
,
remote_vars
);
part
->
remote_rp_pa
=
remote_rsvd_page_pa
;
dev_dbg
(
xpc_part
,
" remote_rp_pa = 0x%016lx
\n
"
,
part
->
remote_rp_pa
);
if
(
XPC_SUPPORTS_DISENGAGE_REQUEST
(
part
->
remote_vars_version
))
{
if
(
xpc_partition_disengage_requested
(
1UL
<<
partid
))
{
/*
* Other side is waiting on us to disengage,
* even though we already have.
*/
return
;
}
}
else
{
/* other side doesn't support disengage requests */
xpc_clear_partition_disengage_request
(
1UL
<<
partid
);
}
part
->
remote_vars_pa
=
remote_vars_pa
;
dev_dbg
(
xpc_part
,
" remote_vars_pa = 0x%016lx
\n
"
,
part
->
remote_vars_pa
);
xpc_activate_partition
(
part
)
;
return
;
}
part
->
last_heartbeat
=
remote_vars
->
heartbeat
;
dev_dbg
(
xpc_part
,
" last_heartbeat = 0x%016lx
\n
"
,
part
->
last_heartbeat
);
DBUG_ON
(
part
->
remote_rp_version
==
0
);
DBUG_ON
(
part
->
remote_vars_version
==
0
);
if
(
!
XPC_SUPPORTS_RP_STAMP
(
part
->
remote_rp_version
))
{
DBUG_ON
(
XPC_SUPPORTS_DISENGAGE_REQUEST
(
part
->
remote_vars_version
));
if
(
!
XPC_SUPPORTS_RP_STAMP
(
remote_rp_version
))
{
DBUG_ON
(
XPC_SUPPORTS_DISENGAGE_REQUEST
(
remote_vars
->
version
));
/* see if the other side rebooted */
if
(
part
->
remote_amos_page_pa
==
remote_vars
->
amos_page_pa
&&
xpc_hb_allowed
(
sn_partition_id
,
remote_vars
))
{
/* doesn't look that way, so ignore the IPI */
return
;
}
}
part
->
remote_vars_part_pa
=
remote_vars
->
vars_part_pa
;
dev_dbg
(
xpc_part
,
" remote_vars_part_pa = 0x%016lx
\n
"
,
part
->
remote_vars_part_pa
);
/*
* Other side rebooted and previous XPC didn't support the
* disengage request, so we don't need to do anything special.
*/
part
->
remote_act_nasid
=
remote_vars
->
act_nasid
;
dev_dbg
(
xpc_part
,
" remote_act_nasid = 0x%x
\n
"
,
part
->
remote_act_nasid
);
xpc_update_partition_info
(
part
,
remote_rp_version
,
&
remote_rp_stamp
,
remote_rp_pa
,
remote_vars_pa
,
remote_vars
);
part
->
reactivate_nasid
=
nasid
;
XPC_DEACTIVATE_PARTITION
(
part
,
xpcReactivating
);
return
;
}
part
->
remote_act_phys_cpuid
=
remote_vars
->
act_phys_cpuid
;
dev_dbg
(
xpc_part
,
" remote_act_phys_cpuid = 0x%x
\n
"
,
part
->
remote_act_phys_cpuid
);
DBUG_ON
(
!
XPC_SUPPORTS_DISENGAGE_REQUEST
(
part
->
remote_vars_version
));
part
->
remote_amos_page_pa
=
remote_vars
->
amos_page_pa
;
dev_dbg
(
xpc_part
,
" remote_amos_page_pa = 0x%lx
\n
"
,
part
->
remote_amos_page_pa
);
if
(
!
XPC_SUPPORTS_RP_STAMP
(
remote_rp_version
))
{
DBUG_ON
(
!
XPC_SUPPORTS_DISENGAGE_REQUEST
(
remote_vars
->
version
));
xpc_activate_partition
(
part
);
/*
* Other side rebooted and previous XPC did support the
* disengage request, but the new one doesn't.
*/
xpc_clear_partition_engaged
(
1UL
<<
partid
);
xpc_clear_partition_disengage_request
(
1UL
<<
partid
);
}
else
if
(
part
->
remote_amos_page_pa
!=
remote_vars
->
amos_page_pa
||
!
XPC_HB_ALLOWED
(
sn_partition_id
,
remote_vars
))
{
xpc_update_partition_info
(
part
,
remote_rp_version
,
&
remote_rp_stamp
,
remote_rp_pa
,
remote_vars_pa
,
remote_vars
);
reactivate
=
1
;
}
else
{
DBUG_ON
(
!
XPC_SUPPORTS_DISENGAGE_REQUEST
(
remote_vars
->
version
));
stamp_diff
=
xpc_compare_stamps
(
&
part
->
remote_rp_stamp
,
&
remote_rp_stamp
);
if
(
stamp_diff
!=
0
)
{
DBUG_ON
(
stamp_diff
>=
0
);
/*
* Other side rebooted and the previous XPC did support
* the disengage request, as does the new one.
*/
DBUG_ON
(
xpc_partition_engaged
(
1UL
<<
partid
));
DBUG_ON
(
xpc_partition_disengage_requested
(
1UL
<<
partid
));
xpc_update_partition_info
(
part
,
remote_rp_version
,
&
remote_rp_stamp
,
remote_rp_pa
,
remote_vars_pa
,
remote_vars
);
reactivate
=
1
;
}
}
if
(
!
xpc_partition_disengaged
(
part
))
{
/* still waiting on other side to disengage from us */
return
;
}
if
(
reactivate
)
{
part
->
reactivate_nasid
=
nasid
;
XPC_DEACTIVATE_PARTITION
(
part
,
xpcReactivating
);
}
else
if
(
XPC_SUPPORTS_DISENGAGE_REQUEST
(
part
->
remote_vars_version
)
&&
xpc_partition_disengage_requested
(
1UL
<<
partid
))
{
XPC_DEACTIVATE_PARTITION
(
part
,
xpcOtherGoingDown
);
}
}
...
...
@@ -643,14 +802,17 @@ xpc_identify_act_IRQ_sender(void)
u64
nasid
;
/* remote nasid */
int
n_IRQs_detected
=
0
;
AMO_t
*
act_amos
;
struct
xpc_rsvd_page
*
rp
=
(
struct
xpc_rsvd_page
*
)
xpc_rsvd_page
;
act_amos
=
xpc_vars
->
a
ct_amos
;
act_amos
=
xpc_vars
->
a
mos_page
+
XPC_ACTIVATE_IRQ_AMOS
;
/* scan through act AMO variable looking for non-zero entries */
for
(
word
=
0
;
word
<
XP_NASID_MASK_WORDS
;
word
++
)
{
for
(
word
=
0
;
word
<
xp_nasid_mask_words
;
word
++
)
{
if
(
xpc_exiting
)
{
break
;
}
nasid_mask
=
xpc_IPI_receive
(
&
act_amos
[
word
]);
if
(
nasid_mask
==
0
)
{
...
...
@@ -668,7 +830,7 @@ xpc_identify_act_IRQ_sender(void)
* remote nasid in our reserved pages machine mask.
* This is used in the event of module reload.
*/
rp
->
mach_nasids
[
word
]
|=
nasid_mask
;
xpc_
mach_nasids
[
word
]
|=
nasid_mask
;
/* locate the nasid(s) which sent interrupts */
...
...
@@ -687,6 +849,55 @@ xpc_identify_act_IRQ_sender(void)
}
/*
* See if the other side has responded to a partition disengage request
* from us.
*/
int
xpc_partition_disengaged
(
struct
xpc_partition
*
part
)
{
partid_t
partid
=
XPC_PARTID
(
part
);
int
disengaged
;
disengaged
=
(
xpc_partition_engaged
(
1UL
<<
partid
)
==
0
);
if
(
part
->
disengage_request_timeout
)
{
if
(
!
disengaged
)
{
if
(
jiffies
<
part
->
disengage_request_timeout
)
{
/* timelimit hasn't been reached yet */
return
0
;
}
/*
* Other side hasn't responded to our disengage
* request in a timely fashion, so assume it's dead.
*/
xpc_clear_partition_engaged
(
1UL
<<
partid
);
disengaged
=
1
;
}
part
->
disengage_request_timeout
=
0
;
/* cancel the timer function, provided it's not us */
if
(
!
in_interrupt
())
{
del_singleshot_timer_sync
(
&
part
->
disengage_request_timer
);
}
DBUG_ON
(
part
->
act_state
!=
XPC_P_DEACTIVATING
&&
part
->
act_state
!=
XPC_P_INACTIVE
);
if
(
part
->
act_state
!=
XPC_P_INACTIVE
)
{
xpc_wakeup_channel_mgr
(
part
);
}
if
(
XPC_SUPPORTS_DISENGAGE_REQUEST
(
part
->
remote_vars_version
))
{
xpc_cancel_partition_disengage_request
(
part
);
}
}
return
disengaged
;
}
/*
* Mark specified partition as active.
*/
...
...
@@ -721,7 +932,6 @@ xpc_deactivate_partition(const int line, struct xpc_partition *part,
enum
xpc_retval
reason
)
{
unsigned
long
irq_flags
;
partid_t
partid
=
XPC_PARTID
(
part
);
spin_lock_irqsave
(
&
part
->
act_lock
,
irq_flags
);
...
...
@@ -749,17 +959,27 @@ xpc_deactivate_partition(const int line, struct xpc_partition *part,
spin_unlock_irqrestore
(
&
part
->
act_lock
,
irq_flags
);
XPC_DISALLOW_HB
(
partid
,
xpc_vars
);
if
(
XPC_SUPPORTS_DISENGAGE_REQUEST
(
part
->
remote_vars_version
))
{
xpc_request_partition_disengage
(
part
);
xpc_IPI_send_disengage
(
part
);
dev_dbg
(
xpc_part
,
"bringing partition %d down, reason = %d
\n
"
,
partid
,
reason
);
/* set a timelimit on the disengage request */
part
->
disengage_request_timeout
=
jiffies
+
(
xpc_disengage_request_timelimit
*
HZ
);
part
->
disengage_request_timer
.
expires
=
part
->
disengage_request_timeout
;
add_timer
(
&
part
->
disengage_request_timer
);
}
dev_dbg
(
xpc_part
,
"bringing partition %d down, reason = %d
\n
"
,
XPC_PARTID
(
part
),
reason
);
xpc_partition_down
(
part
,
reason
);
xpc_partition_
going_
down
(
part
,
reason
);
}
/*
* Mark specified partition as active.
* Mark specified partition as
in
active.
*/
void
xpc_mark_partition_inactive
(
struct
xpc_partition
*
part
)
...
...
@@ -792,9 +1012,10 @@ xpc_discovery(void)
void
*
remote_rp_base
;
struct
xpc_rsvd_page
*
remote_rp
;
struct
xpc_vars
*
remote_vars
;
u64
remote_r
svd_page
_pa
;
u64
remote_r
p
_pa
;
u64
remote_vars_pa
;
int
region
;
int
region_size
;
int
max_regions
;
int
nasid
;
struct
xpc_rsvd_page
*
rp
;
...
...
@@ -804,7 +1025,8 @@ xpc_discovery(void)
enum
xpc_retval
ret
;
remote_rp
=
xpc_kmalloc_cacheline_aligned
(
XPC_RSVD_PAGE_ALIGNED_SIZE
,
remote_rp
=
xpc_kmalloc_cacheline_aligned
(
XPC_RP_HEADER_SIZE
+
xp_nasid_mask_bytes
,
GFP_KERNEL
,
&
remote_rp_base
);
if
(
remote_rp
==
NULL
)
{
return
;
...
...
@@ -812,13 +1034,13 @@ xpc_discovery(void)
remote_vars
=
(
struct
xpc_vars
*
)
remote_rp
;
discovered_nasids
=
kmalloc
(
sizeof
(
u64
)
*
XP_NASID_MASK_WORDS
,
discovered_nasids
=
kmalloc
(
sizeof
(
u64
)
*
xp_nasid_mask_words
,
GFP_KERNEL
);
if
(
discovered_nasids
==
NULL
)
{
kfree
(
remote_rp_base
);
return
;
}
memset
(
discovered_nasids
,
0
,
sizeof
(
u64
)
*
XP_NASID_MASK_WORDS
);
memset
(
discovered_nasids
,
0
,
sizeof
(
u64
)
*
xp_nasid_mask_words
);
rp
=
(
struct
xpc_rsvd_page
*
)
xpc_rsvd_page
;
...
...
@@ -827,11 +1049,19 @@ xpc_discovery(void)
* nodes that can comprise an access protection grouping. The access
* protection is in regards to memory, IOI and IPI.
*/
//>>> move the next two #defines into either include/asm-ia64/sn/arch.h or
//>>> include/asm-ia64/sn/addrs.h
#define SH1_MAX_REGIONS 64
#define SH2_MAX_REGIONS 256
max_regions
=
is_shub2
()
?
SH2_MAX_REGIONS
:
SH1_MAX_REGIONS
;
max_regions
=
64
;
region_size
=
sn_region_size
;
switch
(
region_size
)
{
case
128
:
max_regions
*=
2
;
case
64
:
max_regions
*=
2
;
case
32
:
max_regions
*=
2
;
region_size
=
16
;
DBUG_ON
(
!
is_shub2
());
}
for
(
region
=
0
;
region
<
max_regions
;
region
++
)
{
...
...
@@ -841,8 +1071,8 @@ xpc_discovery(void)
dev_dbg
(
xpc_part
,
"searching region %d
\n
"
,
region
);
for
(
nasid
=
(
region
*
sn_
region_size
*
2
);
nasid
<
((
region
+
1
)
*
sn_
region_size
*
2
);
for
(
nasid
=
(
region
*
region_size
*
2
);
nasid
<
((
region
+
1
)
*
region_size
*
2
);
nasid
+=
2
)
{
if
((
volatile
int
)
xpc_exiting
)
{
...
...
@@ -852,14 +1082,14 @@ xpc_discovery(void)
dev_dbg
(
xpc_part
,
"checking nasid %d
\n
"
,
nasid
);
if
(
XPC_NASID_IN_ARRAY
(
nasid
,
rp
->
part_nasids
))
{
if
(
XPC_NASID_IN_ARRAY
(
nasid
,
xpc_
part_nasids
))
{
dev_dbg
(
xpc_part
,
"PROM indicates Nasid %d is "
"part of the local partition; skipping "
"region
\n
"
,
nasid
);
break
;
}
if
(
!
(
XPC_NASID_IN_ARRAY
(
nasid
,
rp
->
mach_nasids
)))
{
if
(
!
(
XPC_NASID_IN_ARRAY
(
nasid
,
xpc_
mach_nasids
)))
{
dev_dbg
(
xpc_part
,
"PROM indicates Nasid %d was "
"not on Numa-Link network at reset
\n
"
,
nasid
);
...
...
@@ -877,7 +1107,7 @@ xpc_discovery(void)
/* pull over the reserved page structure */
ret
=
xpc_get_remote_rp
(
nasid
,
discovered_nasids
,
remote_rp
,
&
remote_r
svd_page
_pa
);
remote_rp
,
&
remote_r
p
_pa
);
if
(
ret
!=
xpcSuccess
)
{
dev_dbg
(
xpc_part
,
"unable to get reserved page "
"from nasid %d, reason=%d
\n
"
,
nasid
,
...
...
@@ -948,6 +1178,13 @@ xpc_discovery(void)
remote_vars
->
act_nasid
,
remote_vars
->
act_phys_cpuid
);
if
(
XPC_SUPPORTS_DISENGAGE_REQUEST
(
remote_vars
->
version
))
{
part
->
remote_amos_page_pa
=
remote_vars
->
amos_page_pa
;
xpc_mark_partition_disengaged
(
part
);
xpc_cancel_partition_disengage_request
(
part
);
}
xpc_IPI_send_activate
(
remote_vars
);
}
}
...
...
@@ -974,12 +1211,12 @@ xpc_initiate_partid_to_nasids(partid_t partid, void *nasid_mask)
return
xpcPartitionDown
;
}
part_nasid_pa
=
part
->
remote_rp_pa
+
(
u64
)
&
((
struct
xpc_rsvd_page
*
)
0
)
->
part_nasids
;
memset
(
nasid_mask
,
0
,
XP_NASID_MASK_BYTES
);
part_nasid_pa
=
(
u64
)
XPC_RP_PART_NASIDS
(
part
->
remote_rp_pa
);
bte_res
=
xp_bte_copy
(
part_nasid_pa
,
ia64_tpa
((
u64
)
nasid_mask
),
L1_CACHE_ALIGN
(
XP_NASID_MASK_BYTES
),
(
BTE_NOTIFY
|
BTE_WACQUIRE
),
NULL
);
xp_nasid_mask_bytes
,
(
BTE_NOTIFY
|
BTE_WACQUIRE
),
NULL
);
return
xpc_map_bte_errors
(
bte_res
);
}
...
...
arch/ia64/sn/pci/pci_dma.c
浏览文件 @
8a212ab6
...
...
@@ -326,6 +326,29 @@ int sn_pci_legacy_read(struct pci_bus *bus, u16 port, u32 *val, u8 size)
{
unsigned
long
addr
;
int
ret
;
struct
ia64_sal_retval
isrv
;
/*
* First, try the SN_SAL_IOIF_PCI_SAFE SAL call which can work
* around hw issues at the pci bus level. SGI proms older than
* 4.10 don't implment this.
*/
SAL_CALL
(
isrv
,
SN_SAL_IOIF_PCI_SAFE
,
pci_domain_nr
(
bus
),
bus
->
number
,
0
,
/* io */
0
,
/* read */
port
,
size
,
__pa
(
val
));
if
(
isrv
.
status
==
0
)
return
size
;
/*
* If the above failed, retry using the SAL_PROBE call which should
* be present in all proms (but which cannot work round PCI chipset
* bugs). This code is retained for compatability with old
* pre-4.10 proms, and should be removed at some point in the future.
*/
if
(
!
SN_PCIBUS_BUSSOFT
(
bus
))
return
-
ENODEV
;
...
...
@@ -349,6 +372,29 @@ int sn_pci_legacy_write(struct pci_bus *bus, u16 port, u32 val, u8 size)
int
ret
=
size
;
unsigned
long
paddr
;
unsigned
long
*
addr
;
struct
ia64_sal_retval
isrv
;
/*
* First, try the SN_SAL_IOIF_PCI_SAFE SAL call which can work
* around hw issues at the pci bus level. SGI proms older than
* 4.10 don't implment this.
*/
SAL_CALL
(
isrv
,
SN_SAL_IOIF_PCI_SAFE
,
pci_domain_nr
(
bus
),
bus
->
number
,
0
,
/* io */
1
,
/* write */
port
,
size
,
__pa
(
&
val
));
if
(
isrv
.
status
==
0
)
return
size
;
/*
* If the above failed, retry using the SAL_PROBE call which should
* be present in all proms (but which cannot work round PCI chipset
* bugs). This code is retained for compatability with old
* pre-4.10 proms, and should be removed at some point in the future.
*/
if
(
!
SN_PCIBUS_BUSSOFT
(
bus
))
{
ret
=
-
ENODEV
;
...
...
arch/ia64/sn/pci/pcibr/pcibr_reg.c
浏览文件 @
8a212ab6
...
...
@@ -8,6 +8,7 @@
#include <linux/interrupt.h>
#include <linux/types.h>
#include <asm/sn/io.h>
#include <asm/sn/pcibr_provider.h>
#include <asm/sn/pcibus_provider_defs.h>
#include <asm/sn/pcidev.h>
...
...
@@ -29,10 +30,10 @@ void pcireg_control_bit_clr(struct pcibus_info *pcibus_info, uint64_t bits)
if
(
pcibus_info
)
{
switch
(
pcibus_info
->
pbi_bridge_type
)
{
case
PCIBR_BRIDGETYPE_TIOCP
:
ptr
->
tio
.
cp_control
&=
~
bits
;
__sn_clrq_relaxed
(
&
ptr
->
tio
.
cp_control
,
bits
)
;
break
;
case
PCIBR_BRIDGETYPE_PIC
:
ptr
->
pic
.
p_wid_control
&=
~
bits
;
__sn_clrq_relaxed
(
&
ptr
->
pic
.
p_wid_control
,
bits
)
;
break
;
default:
panic
...
...
@@ -49,10 +50,10 @@ void pcireg_control_bit_set(struct pcibus_info *pcibus_info, uint64_t bits)
if
(
pcibus_info
)
{
switch
(
pcibus_info
->
pbi_bridge_type
)
{
case
PCIBR_BRIDGETYPE_TIOCP
:
ptr
->
tio
.
cp_control
|=
bits
;
__sn_setq_relaxed
(
&
ptr
->
tio
.
cp_control
,
bits
)
;
break
;
case
PCIBR_BRIDGETYPE_PIC
:
ptr
->
pic
.
p_wid_control
|=
bits
;
__sn_setq_relaxed
(
&
ptr
->
pic
.
p_wid_control
,
bits
)
;
break
;
default:
panic
...
...
@@ -73,10 +74,10 @@ uint64_t pcireg_tflush_get(struct pcibus_info *pcibus_info)
if
(
pcibus_info
)
{
switch
(
pcibus_info
->
pbi_bridge_type
)
{
case
PCIBR_BRIDGETYPE_TIOCP
:
ret
=
ptr
->
tio
.
cp_tflush
;
ret
=
__sn_readq_relaxed
(
&
ptr
->
tio
.
cp_tflush
)
;
break
;
case
PCIBR_BRIDGETYPE_PIC
:
ret
=
ptr
->
pic
.
p_wid_tflush
;
ret
=
__sn_readq_relaxed
(
&
ptr
->
pic
.
p_wid_tflush
)
;
break
;
default:
panic
...
...
@@ -103,10 +104,10 @@ uint64_t pcireg_intr_status_get(struct pcibus_info * pcibus_info)
if
(
pcibus_info
)
{
switch
(
pcibus_info
->
pbi_bridge_type
)
{
case
PCIBR_BRIDGETYPE_TIOCP
:
ret
=
ptr
->
tio
.
cp_int_status
;
ret
=
__sn_readq_relaxed
(
&
ptr
->
tio
.
cp_int_status
)
;
break
;
case
PCIBR_BRIDGETYPE_PIC
:
ret
=
ptr
->
pic
.
p_int_status
;
ret
=
__sn_readq_relaxed
(
&
ptr
->
pic
.
p_int_status
)
;
break
;
default:
panic
...
...
@@ -127,10 +128,10 @@ void pcireg_intr_enable_bit_clr(struct pcibus_info *pcibus_info, uint64_t bits)
if
(
pcibus_info
)
{
switch
(
pcibus_info
->
pbi_bridge_type
)
{
case
PCIBR_BRIDGETYPE_TIOCP
:
ptr
->
tio
.
cp_int_enable
&=
~
bits
;
__sn_clrq_relaxed
(
&
ptr
->
tio
.
cp_int_enable
,
bits
)
;
break
;
case
PCIBR_BRIDGETYPE_PIC
:
ptr
->
pic
.
p_int_enable
&=
~
bits
;
__sn_clrq_relaxed
(
&
ptr
->
pic
.
p_int_enable
,
~
bits
)
;
break
;
default:
panic
...
...
@@ -147,10 +148,10 @@ void pcireg_intr_enable_bit_set(struct pcibus_info *pcibus_info, uint64_t bits)
if
(
pcibus_info
)
{
switch
(
pcibus_info
->
pbi_bridge_type
)
{
case
PCIBR_BRIDGETYPE_TIOCP
:
ptr
->
tio
.
cp_int_enable
|=
bits
;
__sn_setq_relaxed
(
&
ptr
->
tio
.
cp_int_enable
,
bits
)
;
break
;
case
PCIBR_BRIDGETYPE_PIC
:
ptr
->
pic
.
p_int_enable
|=
bits
;
__sn_setq_relaxed
(
&
ptr
->
pic
.
p_int_enable
,
bits
)
;
break
;
default:
panic
...
...
@@ -171,14 +172,16 @@ void pcireg_intr_addr_addr_set(struct pcibus_info *pcibus_info, int int_n,
if
(
pcibus_info
)
{
switch
(
pcibus_info
->
pbi_bridge_type
)
{
case
PCIBR_BRIDGETYPE_TIOCP
:
ptr
->
tio
.
cp_int_addr
[
int_n
]
&=
~
TIOCP_HOST_INTR_ADDR
;
ptr
->
tio
.
cp_int_addr
[
int_n
]
|=
(
addr
&
TIOCP_HOST_INTR_ADDR
);
__sn_clrq_relaxed
(
&
ptr
->
tio
.
cp_int_addr
[
int_n
],
TIOCP_HOST_INTR_ADDR
);
__sn_setq_relaxed
(
&
ptr
->
tio
.
cp_int_addr
[
int_n
],
(
addr
&
TIOCP_HOST_INTR_ADDR
));
break
;
case
PCIBR_BRIDGETYPE_PIC
:
ptr
->
pic
.
p_int_addr
[
int_n
]
&=
~
PIC_HOST_INTR_ADDR
;
ptr
->
pic
.
p_int_addr
[
int_n
]
|=
(
addr
&
PIC_HOST_INTR_ADDR
);
__sn_clrq_relaxed
(
&
ptr
->
pic
.
p_int_addr
[
int_n
],
PIC_HOST_INTR_ADDR
);
__sn_setq_relaxed
(
&
ptr
->
pic
.
p_int_addr
[
int_n
],
(
addr
&
PIC_HOST_INTR_ADDR
));
break
;
default:
panic
...
...
@@ -198,10 +201,10 @@ void pcireg_force_intr_set(struct pcibus_info *pcibus_info, int int_n)
if
(
pcibus_info
)
{
switch
(
pcibus_info
->
pbi_bridge_type
)
{
case
PCIBR_BRIDGETYPE_TIOCP
:
ptr
->
tio
.
cp_force_pin
[
int_n
]
=
1
;
writeq
(
1
,
&
ptr
->
tio
.
cp_force_pin
[
int_n
])
;
break
;
case
PCIBR_BRIDGETYPE_PIC
:
ptr
->
pic
.
p_force_pin
[
int_n
]
=
1
;
writeq
(
1
,
&
ptr
->
pic
.
p_force_pin
[
int_n
])
;
break
;
default:
panic
...
...
@@ -222,10 +225,12 @@ uint64_t pcireg_wrb_flush_get(struct pcibus_info *pcibus_info, int device)
if
(
pcibus_info
)
{
switch
(
pcibus_info
->
pbi_bridge_type
)
{
case
PCIBR_BRIDGETYPE_TIOCP
:
ret
=
ptr
->
tio
.
cp_wr_req_buf
[
device
];
ret
=
__sn_readq_relaxed
(
&
ptr
->
tio
.
cp_wr_req_buf
[
device
]);
break
;
case
PCIBR_BRIDGETYPE_PIC
:
ret
=
ptr
->
pic
.
p_wr_req_buf
[
device
];
ret
=
__sn_readq_relaxed
(
&
ptr
->
pic
.
p_wr_req_buf
[
device
]);
break
;
default:
panic
(
"pcireg_wrb_flush_get: unknown bridgetype bridge 0x%p"
,
(
void
*
)
ptr
);
...
...
@@ -244,10 +249,10 @@ void pcireg_int_ate_set(struct pcibus_info *pcibus_info, int ate_index,
if
(
pcibus_info
)
{
switch
(
pcibus_info
->
pbi_bridge_type
)
{
case
PCIBR_BRIDGETYPE_TIOCP
:
ptr
->
tio
.
cp_int_ate_ram
[
ate_index
]
=
(
uint64_t
)
val
;
writeq
(
val
,
&
ptr
->
tio
.
cp_int_ate_ram
[
ate_index
])
;
break
;
case
PCIBR_BRIDGETYPE_PIC
:
ptr
->
pic
.
p_int_ate_ram
[
ate_index
]
=
(
uint64_t
)
val
;
writeq
(
val
,
&
ptr
->
pic
.
p_int_ate_ram
[
ate_index
])
;
break
;
default:
panic
...
...
@@ -265,12 +270,10 @@ uint64_t *pcireg_int_ate_addr(struct pcibus_info *pcibus_info, int ate_index)
if
(
pcibus_info
)
{
switch
(
pcibus_info
->
pbi_bridge_type
)
{
case
PCIBR_BRIDGETYPE_TIOCP
:
ret
=
(
uint64_t
*
)
&
(
ptr
->
tio
.
cp_int_ate_ram
[
ate_index
]);
ret
=
&
ptr
->
tio
.
cp_int_ate_ram
[
ate_index
];
break
;
case
PCIBR_BRIDGETYPE_PIC
:
ret
=
(
uint64_t
*
)
&
(
ptr
->
pic
.
p_int_ate_ram
[
ate_index
]);
ret
=
&
ptr
->
pic
.
p_int_ate_ram
[
ate_index
];
break
;
default:
panic
...
...
arch/ia64/sn/pci/tioca_provider.c
浏览文件 @
8a212ab6
...
...
@@ -11,6 +11,7 @@
#include <linux/pci.h>
#include <asm/sn/sn_sal.h>
#include <asm/sn/addrs.h>
#include <asm/sn/io.h>
#include <asm/sn/pcidev.h>
#include <asm/sn/pcibus_provider_defs.h>
#include <asm/sn/tioca_provider.h>
...
...
@@ -37,7 +38,7 @@ tioca_gart_init(struct tioca_kernel *tioca_kern)
uint64_t
offset
;
struct
page
*
tmp
;
struct
tioca_common
*
tioca_common
;
volatile
struct
tioca
*
ca_base
;
struct
tioca
*
ca_base
;
tioca_common
=
tioca_kern
->
ca_common
;
ca_base
=
(
struct
tioca
*
)
tioca_common
->
ca_common
.
bs_base
;
...
...
@@ -174,27 +175,29 @@ tioca_gart_init(struct tioca_kernel *tioca_kern)
* DISABLE GART PREFETCHING due to hw bug tracked in SGI PV930029
*/
ca_base
->
ca_control1
|=
CA_AGPDMA_OP_ENB_COMBDELAY
;
/* PV895469 ? */
ca_base
->
ca_control2
&=
~
(
CA_GART_MEM_PARAM
);
ca_base
->
ca_control2
|=
(
0x2ull
<<
CA_GART_MEM_PARAM_SHFT
);
__sn_setq_relaxed
(
&
ca_base
->
ca_control1
,
CA_AGPDMA_OP_ENB_COMBDELAY
);
/* PV895469 ? */
__sn_clrq_relaxed
(
&
ca_base
->
ca_control2
,
CA_GART_MEM_PARAM
);
__sn_setq_relaxed
(
&
ca_base
->
ca_control2
,
(
0x2ull
<<
CA_GART_MEM_PARAM_SHFT
));
tioca_kern
->
ca_gart_iscoherent
=
1
;
ca_base
->
ca_control2
&=
~
(
CA_GART_WR_PREFETCH_ENB
|
CA_GART_RD_PREFETCH_ENB
);
__sn_clrq_relaxed
(
&
ca_base
->
ca_control2
,
(
CA_GART_WR_PREFETCH_ENB
|
CA_GART_RD_PREFETCH_ENB
)
);
/*
* Unmask GART fetch error interrupts. Clear residual errors first.
*/
ca_base
->
ca_int_status_alias
=
CA_GART_FETCH_ERR
;
ca_base
->
ca_mult_error_alias
=
CA_GART_FETCH_ERR
;
ca_base
->
ca_int_mask
&=
~
CA_GART_FETCH_ERR
;
writeq
(
CA_GART_FETCH_ERR
,
&
ca_base
->
ca_int_status_alias
)
;
writeq
(
CA_GART_FETCH_ERR
,
&
ca_base
->
ca_mult_error_alias
)
;
__sn_clrq_relaxed
(
&
ca_base
->
ca_int_mask
,
CA_GART_FETCH_ERR
)
;
/*
* Program the aperature and gart registers in TIOCA
*/
ca_base
->
ca_gart_aperature
=
ap_reg
;
ca_base
->
ca_gart_ptr_table
=
tioca_kern
->
ca_gart_coretalk_addr
|
1
;
writeq
(
ap_reg
,
&
ca_base
->
ca_gart_aperature
)
;
writeq
(
tioca_kern
->
ca_gart_coretalk_addr
|
1
,
&
ca_base
->
ca_gart_ptr_table
)
;
return
0
;
}
...
...
@@ -211,7 +214,6 @@ void
tioca_fastwrite_enable
(
struct
tioca_kernel
*
tioca_kern
)
{
int
cap_ptr
;
uint64_t
ca_control1
;
uint32_t
reg
;
struct
tioca
*
tioca_base
;
struct
pci_dev
*
pdev
;
...
...
@@ -256,9 +258,7 @@ tioca_fastwrite_enable(struct tioca_kernel *tioca_kern)
*/
tioca_base
=
(
struct
tioca
*
)
common
->
ca_common
.
bs_base
;
ca_control1
=
tioca_base
->
ca_control1
;
ca_control1
|=
CA_AGP_FW_ENABLE
;
tioca_base
->
ca_control1
=
ca_control1
;
__sn_setq_relaxed
(
&
tioca_base
->
ca_control1
,
CA_AGP_FW_ENABLE
);
}
EXPORT_SYMBOL
(
tioca_fastwrite_enable
);
/* used by agp-sgi */
...
...
@@ -345,7 +345,7 @@ tioca_dma_d48(struct pci_dev *pdev, uint64_t paddr)
return
0
;
}
agp_dma_extn
=
ca_base
->
ca_agp_dma_addr_extn
;
agp_dma_extn
=
__sn_readq_relaxed
(
&
ca_base
->
ca_agp_dma_addr_extn
)
;
if
(
node_upper
!=
(
agp_dma_extn
>>
CA_AGP_DMA_NODE_ID_SHFT
))
{
printk
(
KERN_ERR
"%s: coretalk upper node (%u) "
"mismatch with ca_agp_dma_addr_extn (%lu)
\n
"
,
...
...
arch/ia64/sn/pci/tioce_provider.c
浏览文件 @
8a212ab6
...
...
@@ -11,6 +11,7 @@
#include <linux/pci.h>
#include <asm/sn/sn_sal.h>
#include <asm/sn/addrs.h>
#include <asm/sn/io.h>
#include <asm/sn/pcidev.h>
#include <asm/sn/pcibus_provider_defs.h>
#include <asm/sn/tioce_provider.h>
...
...
@@ -227,7 +228,7 @@ tioce_alloc_map(struct tioce_kernel *ce_kern, int type, int port,
ate
=
ATE_MAKE
(
addr
,
pagesize
);
ate_shadow
[
i
+
j
]
=
ate
;
ate_reg
[
i
+
j
]
=
ate
;
writeq
(
ate
,
&
ate_reg
[
i
+
j
])
;
addr
+=
pagesize
;
}
...
...
@@ -268,10 +269,10 @@ tioce_dma_d32(struct pci_dev *pdev, uint64_t ct_addr)
pcidev_to_tioce
(
pdev
,
&
ce_mmr
,
&
ce_kern
,
&
port
);
if
(
ce_kern
->
ce_port
[
port
].
dirmap_refcnt
==
0
)
{
volatile
uint64_t
tmp
;
uint64_t
tmp
;
ce_kern
->
ce_port
[
port
].
dirmap_shadow
=
ct_upper
;
ce_mmr
->
ce_ure_dir_map
[
port
]
=
ct_upper
;
writeq
(
ct_upper
,
&
ce_mmr
->
ce_ure_dir_map
[
port
])
;
tmp
=
ce_mmr
->
ce_ure_dir_map
[
port
];
dma_ok
=
1
;
}
else
...
...
@@ -343,7 +344,7 @@ tioce_dma_unmap(struct pci_dev *pdev, dma_addr_t bus_addr, int dir)
if
(
TIOCE_D32_ADDR
(
bus_addr
))
{
if
(
--
ce_kern
->
ce_port
[
port
].
dirmap_refcnt
==
0
)
{
ce_kern
->
ce_port
[
port
].
dirmap_shadow
=
0
;
ce_mmr
->
ce_ure_dir_map
[
port
]
=
0
;
writeq
(
0
,
&
ce_mmr
->
ce_ure_dir_map
[
port
])
;
}
}
else
{
struct
tioce_dmamap
*
map
;
...
...
@@ -582,18 +583,18 @@ tioce_kern_init(struct tioce_common *tioce_common)
*/
tioce_mmr
=
(
struct
tioce
*
)
tioce_common
->
ce_pcibus
.
bs_base
;
tioce_mmr
->
ce_ure_page_map
&=
~
CE_URE_PAGESIZE_MASK
;
tioce_mmr
->
ce_ure_page_map
|=
CE_URE_256K_PAGESIZE
;
__sn_clrq_relaxed
(
&
tioce_mmr
->
ce_ure_page_map
,
CE_URE_PAGESIZE_MASK
)
;
__sn_setq_relaxed
(
&
tioce_mmr
->
ce_ure_page_map
,
CE_URE_256K_PAGESIZE
)
;
tioce_kern
->
ce_ate3240_pagesize
=
KB
(
256
);
for
(
i
=
0
;
i
<
TIOCE_NUM_M40_ATES
;
i
++
)
{
tioce_kern
->
ce_ate40_shadow
[
i
]
=
0
;
tioce_mmr
->
ce_ure_ate40
[
i
]
=
0
;
writeq
(
0
,
&
tioce_mmr
->
ce_ure_ate40
[
i
])
;
}
for
(
i
=
0
;
i
<
TIOCE_NUM_M3240_ATES
;
i
++
)
{
tioce_kern
->
ce_ate3240_shadow
[
i
]
=
0
;
tioce_mmr
->
ce_ure_ate3240
[
i
]
=
0
;
writeq
(
0
,
&
tioce_mmr
->
ce_ure_ate3240
[
i
])
;
}
return
tioce_kern
;
...
...
@@ -665,7 +666,7 @@ tioce_force_interrupt(struct sn_irq_info *sn_irq_info)
default:
return
;
}
ce_mmr
->
ce_adm_force_int
=
force_int_val
;
writeq
(
force_int_val
,
&
ce_mmr
->
ce_adm_force_int
)
;
}
/**
...
...
@@ -686,6 +687,7 @@ tioce_target_interrupt(struct sn_irq_info *sn_irq_info)
struct
tioce_common
*
ce_common
;
struct
tioce
*
ce_mmr
;
int
bit
;
uint64_t
vector
;
pcidev_info
=
(
struct
pcidev_info
*
)
sn_irq_info
->
irq_pciioinfo
;
if
(
!
pcidev_info
)
...
...
@@ -696,11 +698,11 @@ tioce_target_interrupt(struct sn_irq_info *sn_irq_info)
bit
=
sn_irq_info
->
irq_int_bit
;
ce_mmr
->
ce_adm_int_mask
|=
(
1UL
<<
bit
);
ce_mmr
->
ce_adm_int_dest
[
bit
]
=
((
uint64_t
)
sn_irq_info
->
irq_irq
<<
INTR_VECTOR_SHFT
)
|
sn_irq_info
->
irq_xtalkaddr
;
ce_mmr
->
ce_adm_int_mask
&=
~
(
1UL
<<
bit
);
__sn_setq_relaxed
(
&
ce_mmr
->
ce_adm_int_mask
,
(
1UL
<<
bit
)
);
vector
=
(
uint64_t
)
sn_irq_info
->
irq_irq
<<
INTR_VECTOR_SHFT
;
vector
|=
sn_irq_info
->
irq_xtalkaddr
;
writeq
(
vector
,
&
ce_mmr
->
ce_adm_int_dest
[
bit
])
;
__sn_clrq_relaxed
(
&
ce_mmr
->
ce_adm_int_mask
,
(
1UL
<<
bit
)
);
tioce_force_interrupt
(
sn_irq_info
);
}
...
...
drivers/char/agp/sgi-agp.c
浏览文件 @
8a212ab6
...
...
@@ -17,6 +17,7 @@
#include <linux/init.h>
#include <linux/agp_backend.h>
#include <asm/sn/addrs.h>
#include <asm/sn/io.h>
#include <asm/sn/pcidev.h>
#include <asm/sn/pcibus_provider_defs.h>
#include <asm/sn/tioca_provider.h>
...
...
drivers/char/mmtimer.c
浏览文件 @
8a212ab6
...
...
@@ -441,7 +441,7 @@ static irqreturn_t
mmtimer_interrupt
(
int
irq
,
void
*
dev_id
,
struct
pt_regs
*
regs
)
{
int
i
;
mmtimer_t
*
base
=
timers
+
cpu
id_to_cnodeid
(
smp_processor_id
())
*
mmtimer_t
*
base
=
timers
+
cpu
_to_node
(
smp_processor_id
())
*
NUM_COMPARATORS
;
unsigned
long
expires
=
0
;
int
result
=
IRQ_NONE
;
...
...
@@ -608,7 +608,7 @@ static int sgi_timer_set(struct k_itimer *timr, int flags,
*/
preempt_disable
();
nodeid
=
cpu
id_to_cnodeid
(
smp_processor_id
());
nodeid
=
cpu
_to_node
(
smp_processor_id
());
base
=
timers
+
nodeid
*
NUM_COMPARATORS
;
retry:
/* Don't use an allocated timer, or a deleted one that's pending */
...
...
drivers/char/snsc.c
浏览文件 @
8a212ab6
...
...
@@ -377,7 +377,7 @@ scdrv_init(void)
dev_t
first_dev
,
dev
;
nasid_t
event_nasid
=
ia64_sn_get_console_nasid
();
if
(
alloc_chrdev_region
(
&
first_dev
,
0
,
num
io
nodes
,
if
(
alloc_chrdev_region
(
&
first_dev
,
0
,
num
_c
nodes
,
SYSCTL_BASENAME
)
<
0
)
{
printk
(
"%s: failed to register SN system controller device
\n
"
,
__FUNCTION__
);
...
...
@@ -385,7 +385,7 @@ scdrv_init(void)
}
snsc_class
=
class_create
(
THIS_MODULE
,
SYSCTL_BASENAME
);
for
(
cnode
=
0
;
cnode
<
num
io
nodes
;
cnode
++
)
{
for
(
cnode
=
0
;
cnode
<
num
_c
nodes
;
cnode
++
)
{
geoid
=
cnodeid_get_geoid
(
cnode
);
devnamep
=
devname
;
format_module_id
(
devnamep
,
geo_module
(
geoid
),
...
...
include/asm-ia64/machvec.h
浏览文件 @
8a212ab6
...
...
@@ -26,7 +26,7 @@ typedef void ia64_mv_cpu_init_t (void);
typedef
void
ia64_mv_irq_init_t
(
void
);
typedef
void
ia64_mv_send_ipi_t
(
int
,
int
,
int
,
int
);
typedef
void
ia64_mv_timer_interrupt_t
(
int
,
void
*
,
struct
pt_regs
*
);
typedef
void
ia64_mv_global_tlb_purge_t
(
unsigned
long
,
unsigned
long
,
unsigned
long
);
typedef
void
ia64_mv_global_tlb_purge_t
(
struct
mm_struct
*
,
unsigned
long
,
unsigned
long
,
unsigned
long
);
typedef
void
ia64_mv_tlb_migrate_finish_t
(
struct
mm_struct
*
);
typedef
unsigned
int
ia64_mv_local_vector_to_irq
(
u8
);
typedef
char
*
ia64_mv_pci_get_legacy_mem_t
(
struct
pci_bus
*
);
...
...
include/asm-ia64/machvec_hpzx1.h
浏览文件 @
8a212ab6
#ifndef _ASM_IA64_MACHVEC_HPZX1_h
#define _ASM_IA64_MACHVEC_HPZX1_h
extern
ia64_mv_setup_t
dig_setup
;
extern
ia64_mv_setup_t
sba_setup
;
extern
ia64_mv_setup_t
dig_setup
;
extern
ia64_mv_dma_alloc_coherent
sba_alloc_coherent
;
extern
ia64_mv_dma_free_coherent
sba_free_coherent
;
extern
ia64_mv_dma_map_single
sba_map_single
;
...
...
@@ -19,15 +18,15 @@ extern ia64_mv_dma_mapping_error sba_dma_mapping_error;
* platform's machvec structure. When compiling a non-generic kernel,
* the macros are used directly.
*/
#define platform_name "hpzx1"
#define platform_setup
sba
_setup
#define platform_dma_init machvec_noop
#define platform_dma_alloc_coherent sba_alloc_coherent
#define platform_dma_free_coherent sba_free_coherent
#define platform_dma_map_single sba_map_single
#define platform_dma_unmap_single sba_unmap_single
#define platform_dma_map_sg sba_map_sg
#define platform_dma_unmap_sg sba_unmap_sg
#define platform_name
"hpzx1"
#define platform_setup
dig
_setup
#define platform_dma_init
machvec_noop
#define platform_dma_alloc_coherent
sba_alloc_coherent
#define platform_dma_free_coherent
sba_free_coherent
#define platform_dma_map_single
sba_map_single
#define platform_dma_unmap_single
sba_unmap_single
#define platform_dma_map_sg
sba_map_sg
#define platform_dma_unmap_sg
sba_unmap_sg
#define platform_dma_sync_single_for_cpu machvec_dma_sync_single
#define platform_dma_sync_sg_for_cpu machvec_dma_sync_sg
#define platform_dma_sync_single_for_device machvec_dma_sync_single
...
...
include/asm-ia64/machvec_hpzx1_swiotlb.h
浏览文件 @
8a212ab6
...
...
@@ -2,7 +2,6 @@
#define _ASM_IA64_MACHVEC_HPZX1_SWIOTLB_h
extern
ia64_mv_setup_t
dig_setup
;
extern
ia64_mv_dma_init
hwsw_init
;
extern
ia64_mv_dma_alloc_coherent
hwsw_alloc_coherent
;
extern
ia64_mv_dma_free_coherent
hwsw_free_coherent
;
extern
ia64_mv_dma_map_single
hwsw_map_single
;
...
...
@@ -26,7 +25,7 @@ extern ia64_mv_dma_sync_sg_for_device hwsw_sync_sg_for_device;
#define platform_name "hpzx1_swiotlb"
#define platform_setup dig_setup
#define platform_dma_init
hwsw_init
#define platform_dma_init
machvec_noop
#define platform_dma_alloc_coherent hwsw_alloc_coherent
#define platform_dma_free_coherent hwsw_free_coherent
#define platform_dma_map_single hwsw_map_single
...
...
include/asm-ia64/meminit.h
浏览文件 @
8a212ab6
...
...
@@ -16,10 +16,11 @@
* - initrd (optional)
* - command line string
* - kernel code & data
* - Kernel memory map built from EFI memory map
*
* More could be added if necessary
*/
#define IA64_MAX_RSVD_REGIONS
5
#define IA64_MAX_RSVD_REGIONS
6
struct
rsvd_region
{
unsigned
long
start
;
/* virtual address of beginning of element */
...
...
@@ -33,6 +34,7 @@ extern void find_memory (void);
extern
void
reserve_memory
(
void
);
extern
void
find_initrd
(
void
);
extern
int
filter_rsvd_memory
(
unsigned
long
start
,
unsigned
long
end
,
void
*
arg
);
extern
void
efi_memmap_init
(
unsigned
long
*
,
unsigned
long
*
);
/*
* For rounding an address to the next IA64_GRANULE_SIZE or order
...
...
@@ -41,7 +43,7 @@ extern int filter_rsvd_memory (unsigned long start, unsigned long end, void *arg
#define GRANULEROUNDUP(n) (((n)+IA64_GRANULE_SIZE-1) & ~(IA64_GRANULE_SIZE-1))
#define ORDERROUNDDOWN(n) ((n) & ~((PAGE_SIZE<<MAX_ORDER)-1))
#ifdef CONFIG_
DISCONTIGMEM
#ifdef CONFIG_
NUMA
extern
void
call_pernode_memory
(
unsigned
long
start
,
unsigned
long
len
,
void
*
func
);
#else
# define call_pernode_memory(start, len, func) (*func)(start, len, 0)
...
...
include/asm-ia64/mmzone.h
浏览文件 @
8a212ab6
...
...
@@ -15,7 +15,7 @@
#include <asm/page.h>
#include <asm/meminit.h>
#ifdef CONFIG_
DISCONTIGMEM
#ifdef CONFIG_
NUMA
static
inline
int
pfn_to_nid
(
unsigned
long
pfn
)
{
...
...
@@ -31,6 +31,10 @@ static inline int pfn_to_nid(unsigned long pfn)
#endif
}
#ifdef CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID
extern
int
early_pfn_to_nid
(
unsigned
long
pfn
);
#endif
#ifdef CONFIG_IA64_DIG
/* DIG systems are small */
# define MAX_PHYSNODE_ID 8
# define NR_NODE_MEMBLKS (MAX_NUMNODES * 8)
...
...
@@ -39,8 +43,8 @@ static inline int pfn_to_nid(unsigned long pfn)
# define NR_NODE_MEMBLKS (MAX_NUMNODES * 4)
#endif
#else
/* CONFIG_
DISCONTIGMEM
*/
#else
/* CONFIG_
NUMA
*/
# define NR_NODE_MEMBLKS (MAX_NUMNODES * 4)
#endif
/* CONFIG_
DISCONTIGMEM
*/
#endif
/* CONFIG_
NUMA
*/
#endif
/* _ASM_IA64_MMZONE_H */
include/asm-ia64/nodedata.h
浏览文件 @
8a212ab6
...
...
@@ -17,7 +17,7 @@
#include <asm/percpu.h>
#include <asm/mmzone.h>
#ifdef CONFIG_
DISCONTIGMEM
#ifdef CONFIG_
NUMA
/*
* Node Data. One of these structures is located on each node of a NUMA system.
...
...
@@ -47,6 +47,6 @@ struct ia64_node_data {
*/
#define NODE_DATA(nid) (local_node_data->pg_data_ptrs[nid])
#endif
/* CONFIG_
DISCONTIGMEM
*/
#endif
/* CONFIG_
NUMA
*/
#endif
/* _ASM_IA64_NODEDATA_H */
include/asm-ia64/page.h
浏览文件 @
8a212ab6
...
...
@@ -102,15 +102,15 @@ do { \
#ifdef CONFIG_VIRTUAL_MEM_MAP
extern
int
ia64_pfn_valid
(
unsigned
long
pfn
);
#el
se
#el
if defined(CONFIG_FLATMEM)
# define ia64_pfn_valid(pfn) 1
#endif
#if
ndef CONFIG_DISCONTIG
MEM
#if
def CONFIG_FLAT
MEM
# define pfn_valid(pfn) (((pfn) < max_mapnr) && ia64_pfn_valid(pfn))
# define page_to_pfn(page) ((unsigned long) (page - mem_map))
# define pfn_to_page(pfn) (mem_map + (pfn))
#el
se
#el
if defined(CONFIG_DISCONTIGMEM)
extern
struct
page
*
vmem_map
;
extern
unsigned
long
max_low_pfn
;
# define pfn_valid(pfn) (((pfn) < max_low_pfn) && ia64_pfn_valid(pfn))
...
...
include/asm-ia64/sn/arch.h
浏览文件 @
8a212ab6
...
...
@@ -17,6 +17,32 @@
#include <asm/sn/types.h>
#include <asm/sn/sn_cpuid.h>
/*
* This is the maximum number of NUMALINK nodes that can be part of a single
* SSI kernel. This number includes C-brick, M-bricks, and TIOs. Nodes in
* remote partitions are NOT included in this number.
* The number of compact nodes cannot exceed size of a coherency domain.
* The purpose of this define is to specify a node count that includes
* all C/M/TIO nodes in an SSI system.
*
* SGI system can currently support up to 256 C/M nodes plus additional TIO nodes.
*
* Note: ACPI20 has an architectural limit of 256 nodes. When we upgrade
* to ACPI3.0, this limit will be removed. The notion of "compact nodes"
* should be deleted and TIOs should be included in MAX_NUMNODES.
*/
#define MAX_COMPACT_NODES 512
/*
* Maximum number of nodes in all partitions and in all coherency domains.
* This is the total number of nodes accessible in the numalink fabric. It
* includes all C & M bricks, plus all TIOs.
*
* This value is also the value of the maximum number of NASIDs in the numalink
* fabric.
*/
#define MAX_NUMALINK_NODES 16384
/*
* The following defines attributes of the HUB chip. These attributes are
* frequently referenced. They are kept in the per-cpu data areas of each cpu.
...
...
@@ -40,15 +66,6 @@ DECLARE_PER_CPU(struct sn_hub_info_s, __sn_hub_info);
#define enable_shub_wars_1_1() (sn_hub_info->shub_1_1_found)
/*
* This is the maximum number of nodes that can be part of a kernel.
* Effectively, it's the maximum number of compact node ids (cnodeid_t).
* This is not necessarily the same as MAX_NASIDS.
*/
#define MAX_COMPACT_NODES 2048
#define CPUS_PER_NODE 4
/*
* Compact node ID to nasid mappings kept in the per-cpu data areas of each
* cpu.
...
...
@@ -57,7 +74,6 @@ DECLARE_PER_CPU(short, __sn_cnodeid_to_nasid[MAX_NUMNODES]);
#define sn_cnodeid_to_nasid (&__get_cpu_var(__sn_cnodeid_to_nasid[0]))
extern
u8
sn_partition_id
;
extern
u8
sn_system_size
;
extern
u8
sn_sharing_domain_size
;
...
...
include/asm-ia64/sn/io.h
浏览文件 @
8a212ab6
...
...
@@ -14,7 +14,7 @@
extern
void
*
sn_io_addr
(
unsigned
long
port
)
__attribute_const__
;
/* Forward definition */
extern
void
__sn_mmiowb
(
void
);
/* Forward definition */
extern
int
num
io
nodes
;
extern
int
num
_c
nodes
;
#define __sn_mf_a() ia64_mfa()
...
...
@@ -35,6 +35,15 @@ extern void sn_dma_flush(unsigned long);
#define __sn_readl_relaxed ___sn_readl_relaxed
#define __sn_readq_relaxed ___sn_readq_relaxed
/*
* Convenience macros for setting/clearing bits using the above accessors
*/
#define __sn_setq_relaxed(addr, val) \
writeq((__sn_readq_relaxed(addr) | (val)), (addr))
#define __sn_clrq_relaxed(addr, val) \
writeq((__sn_readq_relaxed(addr) & ~(val)), (addr))
/*
* The following routines are SN Platform specific, called when
* a reference is made to inX/outX set macros. SN Platform
...
...
include/asm-ia64/sn/klconfig.h
浏览文件 @
8a212ab6
...
...
@@ -208,19 +208,6 @@ typedef struct lboard_s {
klconf_off_t
brd_next_same
;
/* Next BOARD with same nasid */
}
lboard_t
;
#define KLCF_NUM_COMPS(_brd) ((_brd)->brd_numcompts)
#define NODE_OFFSET_TO_KLINFO(n,off) ((klinfo_t*) TO_NODE_CAC(n,off))
#define KLCF_NEXT(_brd) \
((_brd)->brd_next_same ? \
(NODE_OFFSET_TO_LBOARD((_brd)->brd_next_same_host, (_brd)->brd_next_same)): NULL)
#define KLCF_NEXT_ANY(_brd) \
((_brd)->brd_next_any ? \
(NODE_OFFSET_TO_LBOARD(NASID_GET(_brd), (_brd)->brd_next_any)): NULL)
#define KLCF_COMP(_brd, _ndx) \
((((_brd)->brd_compts[(_ndx)]) == 0) ? 0 : \
(NODE_OFFSET_TO_KLINFO(NASID_GET(_brd), (_brd)->brd_compts[(_ndx)])))
/*
* Generic info structure. This stores common info about a
* component.
...
...
@@ -249,24 +236,11 @@ typedef struct klinfo_s { /* Generic info */
}
klinfo_t
;
static
inline
lboard_t
*
find_lboard_
any
(
lboard_t
*
start
,
unsigned
char
brd_type
)
static
inline
lboard_t
*
find_lboard_
next
(
lboard_t
*
brd
)
{
/* Search all boards stored on this node. */
while
(
start
)
{
if
(
start
->
brd_type
==
brd_type
)
return
start
;
start
=
KLCF_NEXT_ANY
(
start
);
}
/* Didn't find it. */
return
(
lboard_t
*
)
NULL
;
if
(
brd
&&
brd
->
brd_next_any
)
return
NODE_OFFSET_TO_LBOARD
(
NASID_GET
(
brd
),
brd
->
brd_next_any
);
return
NULL
;
}
/* external declarations of Linux kernel functions. */
extern
lboard_t
*
root_lboard
[];
extern
klinfo_t
*
find_component
(
lboard_t
*
brd
,
klinfo_t
*
kli
,
unsigned
char
type
);
extern
klinfo_t
*
find_first_component
(
lboard_t
*
brd
,
unsigned
char
type
);
#endif
/* _ASM_IA64_SN_KLCONFIG_H */
include/asm-ia64/sn/l1.h
浏览文件 @
8a212ab6
...
...
@@ -35,4 +35,16 @@
#define L1_BRICKTYPE_ATHENA 0x2b
/* + */
#define L1_BRICKTYPE_DAYTONA 0x7a
/* z */
/* board type response codes */
#define L1_BOARDTYPE_IP69 0x0100
/* CA */
#define L1_BOARDTYPE_IP63 0x0200
/* CB */
#define L1_BOARDTYPE_BASEIO 0x0300
/* IB */
#define L1_BOARDTYPE_PCIE2SLOT 0x0400
/* IC */
#define L1_BOARDTYPE_PCIX3SLOT 0x0500
/* ID */
#define L1_BOARDTYPE_PCIXPCIE4SLOT 0x0600
/* IE */
#define L1_BOARDTYPE_ABACUS 0x0700
/* AB */
#define L1_BOARDTYPE_DAYTONA 0x0800
/* AD */
#define L1_BOARDTYPE_INVAL (-1)
/* invalid brick type */
#endif
/* _ASM_IA64_SN_L1_H */
include/asm-ia64/sn/nodepda.h
浏览文件 @
8a212ab6
...
...
@@ -55,7 +55,6 @@ struct nodepda_s {
*/
struct
phys_cpuid
phys_cpuid
[
NR_CPUS
];
spinlock_t
ptc_lock
____cacheline_aligned_in_smp
;
spinlock_t
bist_lock
;
};
typedef
struct
nodepda_s
nodepda_t
;
...
...
include/asm-ia64/sn/sn_cpuid.h
浏览文件 @
8a212ab6
...
...
@@ -105,7 +105,6 @@ extern short physical_node_map[]; /* indexed by nasid to get cnode */
#define cpuid_to_nasid(cpuid) (sn_nodepda->phys_cpuid[cpuid].nasid)
#define cpuid_to_subnode(cpuid) (sn_nodepda->phys_cpuid[cpuid].subnode)
#define cpuid_to_slice(cpuid) (sn_nodepda->phys_cpuid[cpuid].slice)
#define cpuid_to_cnodeid(cpuid) (physical_node_map[cpuid_to_nasid(cpuid)])
/*
...
...
@@ -113,8 +112,6 @@ extern short physical_node_map[]; /* indexed by nasid to get cnode */
* of potentially large tables.
*/
extern
int
nasid_slice_to_cpuid
(
int
,
int
);
#define nasid_slice_to_cpu_physical_id(nasid, slice) \
cpu_physical_id(nasid_slice_to_cpuid(nasid, slice))
/*
* cnodeid_to_nasid - convert a cnodeid to a NASID
...
...
include/asm-ia64/sn/sn_sal.h
浏览文件 @
8a212ab6
...
...
@@ -47,6 +47,7 @@
#define SN_SAL_CONSOLE_PUTB 0x02000028
#define SN_SAL_CONSOLE_XMIT_CHARS 0x0200002a
#define SN_SAL_CONSOLE_READC 0x0200002b
#define SN_SAL_SYSCTL_OP 0x02000030
#define SN_SAL_SYSCTL_MODID_GET 0x02000031
#define SN_SAL_SYSCTL_GET 0x02000032
#define SN_SAL_SYSCTL_IOBRICK_MODULE_GET 0x02000033
...
...
@@ -67,7 +68,7 @@
#define SN_SAL_IOIF_INTERRUPT 0x0200004a
#define SN_SAL_HWPERF_OP 0x02000050 // lock
#define SN_SAL_IOIF_ERROR_INTERRUPT 0x02000051
#define SN_SAL_IOIF_PCI_SAFE 0x02000052
#define SN_SAL_IOIF_SLOT_ENABLE 0x02000053
#define SN_SAL_IOIF_SLOT_DISABLE 0x02000054
#define SN_SAL_IOIF_GET_HUBDEV_INFO 0x02000055
...
...
@@ -100,6 +101,13 @@
#define SAL_INTR_ALLOC 1
#define SAL_INTR_FREE 2
/*
* operations available on the generic SN_SAL_SYSCTL_OP
* runtime service
*/
#define SAL_SYSCTL_OP_IOBOARD 0x0001
/* retrieve board type */
#define SAL_SYSCTL_OP_TIO_JLCK_RST 0x0002
/* issue TIO clock reset */
/*
* IRouter (i.e. generalized system controller) operations
*/
...
...
@@ -198,26 +206,16 @@ ia64_sn_get_master_baseio_nasid(void)
return
ret_stuff
.
v0
;
}
static
inline
char
*
static
inline
void
*
ia64_sn_get_klconfig_addr
(
nasid_t
nasid
)
{
struct
ia64_sal_retval
ret_stuff
;
int
cnodeid
;
cnodeid
=
nasid_to_cnodeid
(
nasid
);
ret_stuff
.
status
=
0
;
ret_stuff
.
v0
=
0
;
ret_stuff
.
v1
=
0
;
ret_stuff
.
v2
=
0
;
SAL_CALL
(
ret_stuff
,
SN_SAL_GET_KLCONFIG_ADDR
,
(
u64
)
nasid
,
0
,
0
,
0
,
0
,
0
,
0
);
/*
* We should panic if a valid cnode nasid does not produce
* a klconfig address.
*/
if
(
ret_stuff
.
status
!=
0
)
{
panic
(
"ia64_sn_get_klconfig_addr: Returned error %lx
\n
"
,
ret_stuff
.
status
);
}
return
ret_stuff
.
v0
?
__va
(
ret_stuff
.
v0
)
:
NULL
;
}
...
...
@@ -694,12 +692,10 @@ sn_change_memprotect(u64 paddr, u64 len, u64 perms, u64 *nasid_array)
unsigned
long
irq_flags
;
cnodeid
=
nasid_to_cnodeid
(
get_node_number
(
paddr
));
// spin_lock(&NODEPDA(cnodeid)->bist_lock);
local_irq_save
(
irq_flags
);
ia64_sal_oemcall_nolock
(
&
ret_stuff
,
SN_SAL_MEMPROTECT
,
paddr
,
len
,
(
u64
)
nasid_array
,
perms
,
0
,
0
,
0
);
local_irq_restore
(
irq_flags
);
// spin_unlock(&NODEPDA(cnodeid)->bist_lock);
return
ret_stuff
.
status
;
}
#define SN_MEMPROT_ACCESS_CLASS_0 0x14a080
...
...
@@ -873,6 +869,41 @@ ia64_sn_sysctl_event_init(nasid_t nasid)
return
(
int
)
rv
.
v0
;
}
/*
* Ask the system controller on the specified nasid to reset
* the CX corelet clock. Only valid on TIO nodes.
*/
static
inline
int
ia64_sn_sysctl_tio_clock_reset
(
nasid_t
nasid
)
{
struct
ia64_sal_retval
rv
;
SAL_CALL_REENTRANT
(
rv
,
SN_SAL_SYSCTL_OP
,
SAL_SYSCTL_OP_TIO_JLCK_RST
,
nasid
,
0
,
0
,
0
,
0
,
0
);
if
(
rv
.
status
!=
0
)
return
(
int
)
rv
.
status
;
if
(
rv
.
v0
!=
0
)
return
(
int
)
rv
.
v0
;
return
0
;
}
/*
* Get the associated ioboard type for a given nasid.
*/
static
inline
int
ia64_sn_sysctl_ioboard_get
(
nasid_t
nasid
)
{
struct
ia64_sal_retval
rv
;
SAL_CALL_REENTRANT
(
rv
,
SN_SAL_SYSCTL_OP
,
SAL_SYSCTL_OP_IOBOARD
,
nasid
,
0
,
0
,
0
,
0
,
0
);
if
(
rv
.
v0
!=
0
)
return
(
int
)
rv
.
v0
;
if
(
rv
.
v1
!=
0
)
return
(
int
)
rv
.
v1
;
return
0
;
}
/**
* ia64_sn_get_fit_compt - read a FIT entry from the PROM header
* @nasid: NASID of node to read
...
...
include/asm-ia64/sn/tioca_provider.h
浏览文件 @
8a212ab6
...
...
@@ -182,11 +182,11 @@ tioca_tlbflush(struct tioca_kernel *tioca_kernel)
* touch every CL aligned GART entry.
*/
ca_base
->
ca_control2
&=
~
(
CA_GART_MEM_PARAM
);
ca_base
->
ca_control2
|=
CA_GART_FLUSH_TLB
;
ca_base
->
ca_control2
|=
(
0x2ull
<<
CA_GART_MEM_PARAM_SHFT
);
tmp
=
ca_base
->
ca_control2
;
__sn_clrq_relaxed
(
&
ca_base
->
ca_control2
,
CA_GART_MEM_PARAM
);
__sn_setq_relaxed
(
&
ca_base
->
ca_control2
,
CA_GART_FLUSH_TLB
)
;
__sn_setq_relaxed
(
&
ca_base
->
ca_control2
,
(
0x2ull
<<
CA_GART_MEM_PARAM_SHFT
)
)
;
tmp
=
__sn_readq_relaxed
(
&
ca_base
->
ca_control2
)
;
}
return
;
...
...
@@ -196,8 +196,8 @@ tioca_tlbflush(struct tioca_kernel *tioca_kernel)
* Gart in uncached mode ... need an explicit flush.
*/
ca_base
->
ca_control2
|=
CA_GART_FLUSH_TLB
;
tmp
=
ca_base
->
ca_control2
;
__sn_setq_relaxed
(
&
ca_base
->
ca_control2
,
CA_GART_FLUSH_TLB
)
;
tmp
=
__sn_readq_relaxed
(
&
ca_base
->
ca_control2
)
;
}
extern
uint32_t
tioca_gart_found
;
...
...
include/asm-ia64/sn/tiocx.h
浏览文件 @
8a212ab6
...
...
@@ -19,6 +19,7 @@ struct cx_id_s {
struct
cx_dev
{
struct
cx_id_s
cx_id
;
int
bt
;
/* board/blade type */
void
*
soft
;
/* driver specific */
struct
hubdev_info
*
hubdev
;
struct
device
dev
;
...
...
@@ -59,7 +60,7 @@ struct cx_drv {
extern
struct
sn_irq_info
*
tiocx_irq_alloc
(
nasid_t
,
int
,
int
,
nasid_t
,
int
);
extern
void
tiocx_irq_free
(
struct
sn_irq_info
*
);
extern
int
cx_device_unregister
(
struct
cx_dev
*
);
extern
int
cx_device_register
(
nasid_t
,
int
,
int
,
struct
hubdev_info
*
);
extern
int
cx_device_register
(
nasid_t
,
int
,
int
,
struct
hubdev_info
*
,
int
);
extern
int
cx_driver_unregister
(
struct
cx_drv
*
);
extern
int
cx_driver_register
(
struct
cx_drv
*
);
extern
uint64_t
tiocx_dma_addr
(
uint64_t
addr
);
...
...
include/asm-ia64/sn/xp.h
浏览文件 @
8a212ab6
...
...
@@ -49,7 +49,7 @@
* C-brick nasids, thus the need for bitmaps which don't account for
* odd-numbered (non C-brick) nasids.
*/
#define XP_MAX_PHYSNODE_ID (MAX_
PHYSNODE_ID
/ 2)
#define XP_MAX_PHYSNODE_ID (MAX_
NUMALINK_NODES
/ 2)
#define XP_NASID_MASK_BYTES ((XP_MAX_PHYSNODE_ID + 7) / 8)
#define XP_NASID_MASK_WORDS ((XP_MAX_PHYSNODE_ID + 63) / 64)
...
...
@@ -217,7 +217,17 @@ enum xpc_retval {
xpcInvalidPartid
,
/* 42: invalid partition ID */
xpcLocalPartid
,
/* 43: local partition ID */
xpcUnknownReason
/* 44: unknown reason -- must be last in list */
xpcOtherGoingDown
,
/* 44: other side going down, reason unknown */
xpcSystemGoingDown
,
/* 45: system is going down, reason unknown */
xpcSystemHalt
,
/* 46: system is being halted */
xpcSystemReboot
,
/* 47: system is being rebooted */
xpcSystemPoweroff
,
/* 48: system is being powered off */
xpcDisconnecting
,
/* 49: channel disconnecting (closing) */
xpcOpenCloseError
,
/* 50: channel open/close protocol error */
xpcUnknownReason
/* 51: unknown reason -- must be last in list */
};
...
...
@@ -342,7 +352,7 @@ typedef void (*xpc_notify_func)(enum xpc_retval reason, partid_t partid,
*
* The 'func' field points to the function to call when aynchronous
* notification is required for such events as: a connection established/lost,
* or an incom
m
ing message received, or an error condition encountered. A
* or an incoming message received, or an error condition encountered. A
* non-NULL 'func' field indicates that there is an active registration for
* the channel.
*/
...
...
include/asm-ia64/sparsemem.h
0 → 100644
浏览文件 @
8a212ab6
#ifndef _ASM_IA64_SPARSEMEM_H
#define _ASM_IA64_SPARSEMEM_H
#ifdef CONFIG_SPARSEMEM
/*
* SECTION_SIZE_BITS 2^N: how big each section will be
* MAX_PHYSMEM_BITS 2^N: how much memory we can have in that space
*/
#define SECTION_SIZE_BITS (30)
#define MAX_PHYSMEM_BITS (50)
#ifdef CONFIG_FORCE_MAX_ZONEORDER
#if ((CONFIG_FORCE_MAX_ZONEORDER - 1 + PAGE_SHIFT) > SECTION_SIZE_BITS)
#undef SECTION_SIZE_BITS
#define SECTION_SIZE_BITS (CONFIG_FORCE_MAX_ZONEORDER - 1 + PAGE_SHIFT)
#endif
#endif
#endif
/* CONFIG_SPARSEMEM */
#endif
/* _ASM_IA64_SPARSEMEM_H */
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录