Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
linux
Commits
8a212ab6
Commit
8a212ab6
authored
Oct 28, 2005
by
Linus Torvalds
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'release' of
git://git.kernel.org/pub/scm/linux/kernel/git/aegl/linux-2.6
parents
1f419cad
0e1f6060
Changes
63
Hide whitespace changes
Inline
Side-by-side
Showing
63 changed files
with
4172 additions
and
1303 deletions
+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
No files found.
arch/ia64/Kconfig
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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 */
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment