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
0c860bc9
Commit
0c860bc9
authored
Mar 13, 2002
by
David Mosberger
Browse files
Options
Browse Files
Download
Plain Diff
Merge wailua.hpl.hp.com:/bk/vanilla/linux-2.5
into wailua.hpl.hp.com:/bk/lia64/to-linus-2.5
parents
597db13e
93e55b5f
Changes
22
Hide whitespace changes
Inline
Side-by-side
Showing
22 changed files
with
473 additions
and
416 deletions
+473
-416
arch/ia64/config.in
arch/ia64/config.in
+11
-0
arch/ia64/defconfig
arch/ia64/defconfig
+139
-70
arch/ia64/ia32/ia32_entry.S
arch/ia64/ia32/ia32_entry.S
+7
-3
arch/ia64/kernel/entry.S
arch/ia64/kernel/entry.S
+6
-1
arch/ia64/kernel/ia64_ksyms.c
arch/ia64/kernel/ia64_ksyms.c
+1
-1
arch/ia64/kernel/ivt.S
arch/ia64/kernel/ivt.S
+0
-1
arch/ia64/kernel/perfmon.c
arch/ia64/kernel/perfmon.c
+212
-165
arch/ia64/kernel/process.c
arch/ia64/kernel/process.c
+6
-1
arch/ia64/kernel/setup.c
arch/ia64/kernel/setup.c
+22
-43
arch/ia64/kernel/smp.c
arch/ia64/kernel/smp.c
+5
-23
arch/ia64/lib/clear_page.S
arch/ia64/lib/clear_page.S
+1
-1
arch/ia64/mm/init.c
arch/ia64/mm/init.c
+5
-5
arch/ia64/tools/print_offsets.awk
arch/ia64/tools/print_offsets.awk
+0
-6
arch/ia64/tools/print_offsets.c
arch/ia64/tools/print_offsets.c
+0
-20
arch/ia64/vmlinux.lds.S
arch/ia64/vmlinux.lds.S
+14
-15
include/asm-ia64/cache.h
include/asm-ia64/cache.h
+1
-1
include/asm-ia64/hardirq.h
include/asm-ia64/hardirq.h
+2
-2
include/asm-ia64/offsets.h
include/asm-ia64/offsets.h
+1
-11
include/asm-ia64/processor.h
include/asm-ia64/processor.h
+15
-31
include/asm-ia64/siginfo.h
include/asm-ia64/siginfo.h
+1
-0
include/asm-ia64/smplock.h
include/asm-ia64/smplock.h
+22
-16
kernel/sched.c
kernel/sched.c
+2
-0
No files found.
arch/ia64/config.in
View file @
0c860bc9
...
...
@@ -136,6 +136,17 @@ else
fi
endmenu
else # ! HP_SIM
mainmenu_option next_comment
comment 'Block devices'
tristate 'Loopback device support' CONFIG_BLK_DEV_LOOP
dep_tristate 'Network block device support' CONFIG_BLK_DEV_NBD $CONFIG_NET
tristate 'RAM disk support' CONFIG_BLK_DEV_RAM
if [ "$CONFIG_BLK_DEV_RAM" = "y" -o "$CONFIG_BLK_DEV_RAM" = "m" ]; then
int ' Default RAM disk size' CONFIG_BLK_DEV_RAM_SIZE 4096
fi
endmenu
fi # !HP_SIM
mainmenu_option next_comment
...
...
arch/ia64/defconfig
View file @
0c860bc9
...
...
@@ -7,6 +7,14 @@
#
CONFIG_EXPERIMENTAL=y
#
# General setup
#
CONFIG_NET=y
CONFIG_SYSVIPC=y
# CONFIG_BSD_PROCESS_ACCT is not set
CONFIG_SYSCTL=y
#
# Loadable module support
#
...
...
@@ -50,21 +58,17 @@ CONFIG_IA32_SUPPORT=y
CONFIG_PERFMON=y
CONFIG_IA64_PALINFO=y
CONFIG_EFI_VARS=y
CONFIG_NET=y
CONFIG_SYSVIPC=y
# CONFIG_BSD_PROCESS_ACCT is not set
CONFIG_SYSCTL=y
CONFIG_BINFMT_ELF=y
# CONFIG_BINFMT_MISC is not set
# CONFIG_ACPI_DEBUG is not set
# CONFIG_ACPI_BUSMGR is not set
# CONFIG_ACPI_SYS is not set
# CONFIG_ACPI_CPU is not set
# CONFIG_ACPI_BUTTON is not set
# CONFIG_ACPI_AC is not set
# CONFIG_ACPI_EC is not set
# CONFIG_ACPI_CMBATT is not set
# CONFIG_ACPI_THERMAL is not set
CONFIG_ACPI_BUSMGR=y
CONFIG_ACPI_SYS=y
CONFIG_ACPI_CPU=y
CONFIG_ACPI_BUTTON=y
CONFIG_ACPI_AC=y
CONFIG_ACPI_EC=y
CONFIG_ACPI_CMBATT=y
CONFIG_ACPI_THERMAL=y
CONFIG_PCI=y
CONFIG_PCI_NAMES=y
# CONFIG_HOTPLUG is not set
...
...
@@ -80,7 +84,7 @@ CONFIG_PCI_NAMES=y
#
CONFIG_PACKET=y
CONFIG_PACKET_MMAP=y
# CONFIG_NETLINK is not set
# CONFIG_NETLINK
_DEV
is not set
# CONFIG_NETFILTER is not set
CONFIG_FILTER=y
CONFIG_UNIX=y
...
...
@@ -90,6 +94,7 @@ CONFIG_INET=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_INET_ECN is not set
# CONFIG_SYN_COOKIES is not set
# CONFIG_IPV6 is not set
...
...
@@ -128,6 +133,7 @@ CONFIG_INET=y
#
# CONFIG_PNP is not set
# CONFIG_ISAPNP is not set
# CONFIG_PNPBIOS is not set
#
# Block devices
...
...
@@ -137,12 +143,18 @@ CONFIG_INET=y
# CONFIG_PARIDE is not set
# CONFIG_BLK_CPQ_DA is not set
# CONFIG_BLK_CPQ_CISS_DA is not set
# CONFIG_CISS_SCSI_TAPE is not set
# CONFIG_BLK_DEV_DAC960 is not set
CONFIG_BLK_DEV_LOOP=y
# CONFIG_BLK_DEV_NBD is not set
# CONFIG_BLK_DEV_RAM is not set
# CONFIG_BLK_DEV_INITRD is not set
#
# IEEE 1394 (FireWire) support (EXPERIMENTAL)
#
# CONFIG_IEEE1394 is not set
#
# I2O device support
#
...
...
@@ -182,6 +194,7 @@ CONFIG_BLK_DEV_IDE=y
# CONFIG_BLK_DEV_HD is not set
CONFIG_BLK_DEV_IDEDISK=y
CONFIG_IDEDISK_MULTI_MODE=y
# CONFIG_IDEDISK_STROKE is not set
# CONFIG_BLK_DEV_IDEDISK_VENDOR is not set
# CONFIG_BLK_DEV_IDEDISK_FUJITSU is not set
# CONFIG_BLK_DEV_IDEDISK_IBM is not set
...
...
@@ -198,7 +211,7 @@ CONFIG_BLK_DEV_IDEFLOPPY=y
CONFIG_BLK_DEV_IDESCSI=y
#
# IDE chipset support
/bugfixes
# IDE chipset support
#
# CONFIG_BLK_DEV_CMD640 is not set
# CONFIG_BLK_DEV_CMD640_ENHANCED is not set
...
...
@@ -209,9 +222,12 @@ CONFIG_IDEPCI_SHARE_IRQ=y
CONFIG_BLK_DEV_IDEDMA_PCI=y
# CONFIG_BLK_DEV_OFFBOARD is not set
# CONFIG_IDEDMA_PCI_AUTO is not set
# CONFIG_IDEDMA_ONLYDISK is not set
CONFIG_BLK_DEV_IDEDMA=y
# CONFIG_IDEDMA_PCI_WIP is not set
# CONFIG_BLK_DEV_IDEDMA_TIMEOUT is not set
# CONFIG_IDEDMA_NEW_DRIVE_LISTINGS is not set
CONFIG_BLK_DEV_ADMA=y
# CONFIG_BLK_DEV_AEC62XX is not set
# CONFIG_AEC62XX_TUNING is not set
# CONFIG_BLK_DEV_ALI15X3 is not set
...
...
@@ -228,6 +244,7 @@ CONFIG_BLK_DEV_PIIX=y
# CONFIG_PIIX_TUNING is not set
# CONFIG_BLK_DEV_NS87415 is not set
# CONFIG_BLK_DEV_OPTI621 is not set
# CONFIG_BLK_DEV_PDC_ADMA is not set
# CONFIG_BLK_DEV_PDC202XX is not set
# CONFIG_PDC202XX_BURST is not set
# CONFIG_PDC202XX_FORCE is not set
...
...
@@ -263,7 +280,6 @@ CONFIG_SD_EXTRA_DEVS=40
#
# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
#
CONFIG_SCSI_DEBUG_QUEUES=y
# CONFIG_SCSI_MULTI_LUN is not set
CONFIG_SCSI_CONSTANTS=y
CONFIG_SCSI_LOGGING=y
...
...
@@ -298,6 +314,7 @@ CONFIG_SCSI_LOGGING=y
# CONFIG_SCSI_INIA100 is not set
# CONFIG_SCSI_NCR53C406A is not set
# CONFIG_SCSI_NCR53C7xx is not set
# CONFIG_SCSI_SYM53C8XX_2 is not set
# CONFIG_SCSI_NCR53C8XX is not set
# CONFIG_SCSI_SYM53C8XX is not set
# CONFIG_SCSI_PAS16 is not set
...
...
@@ -329,6 +346,7 @@ CONFIG_DUMMY=y
# CONFIG_BONDING is not set
# CONFIG_EQUALIZER is not set
# CONFIG_TUN is not set
# CONFIG_ETHERTAP is not set
#
# Ethernet (10 or 100Mbit)
...
...
@@ -338,7 +356,6 @@ CONFIG_NET_ETHERNET=y
# CONFIG_HAPPYMEAL is not set
# CONFIG_SUNBMAC is not set
# CONFIG_SUNQE is not set
# CONFIG_SUNLANCE is not set
# CONFIG_SUNGEM is not set
# CONFIG_NET_VENDOR_3COM is not set
# CONFIG_LANCE is not set
...
...
@@ -351,11 +368,9 @@ CONFIG_NET_PCI=y
# CONFIG_ADAPTEC_STARFIRE is not set
# CONFIG_APRICOT is not set
# CONFIG_CS89x0 is not set
# CONFIG_TULIP is not set
# CONFIG_DE4X5 is not set
# CONFIG_DGRS is not set
# CONFIG_DM9102 is not set
CONFIG_EEPRO100=y
# CONFIG_E100 is not set
# CONFIG_LNE390 is not set
# CONFIG_FEALNX is not set
# CONFIG_NATSEMI is not set
...
...
@@ -367,12 +382,13 @@ CONFIG_EEPRO100=y
# CONFIG_8139TOO_PIO is not set
# CONFIG_8139TOO_TUNE_TWISTER is not set
# CONFIG_8139TOO_8129 is not set
# CONFIG_8139_NEW_RX_RESET is not set
# CONFIG_SIS900 is not set
# CONFIG_EPIC100 is not set
# CONFIG_SUNDANCE is not set
# CONFIG_TLAN is not set
# CONFIG_VIA_RHINE is not set
# CONFIG_
WINBOND_840
is not set
# CONFIG_
VIA_RHINE_MMIO
is not set
# CONFIG_NET_POCKET is not set
#
...
...
@@ -380,11 +396,13 @@ CONFIG_EEPRO100=y
#
# CONFIG_ACENIC is not set
# CONFIG_DL2K is not set
# CONFIG_E1000 is not set
# CONFIG_MYRI_SBUS is not set
# CONFIG_NS83820 is not set
# CONFIG_HAMACHI is not set
# CONFIG_YELLOWFIN is not set
# CONFIG_SK98LIN is not set
# CONFIG_TIGON3 is not set
# CONFIG_FDDI is not set
# CONFIG_HIPPI is not set
# CONFIG_PLIP is not set
...
...
@@ -409,6 +427,11 @@ CONFIG_EEPRO100=y
#
# CONFIG_WAN is not set
#
# "Tulip" family network device support
#
# CONFIG_NET_TULIP is not set
#
# Amateur Radio support
#
...
...
@@ -425,7 +448,7 @@ CONFIG_EEPRO100=y
# CONFIG_CD_NO_IDESCSI is not set
#
# Input
cor
e support
# Input
devic
e support
#
CONFIG_INPUT=y
CONFIG_INPUT_KEYBDEV=y
...
...
@@ -434,6 +457,36 @@ CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
# CONFIG_INPUT_JOYDEV is not set
CONFIG_INPUT_EVDEV=y
# CONFIG_GAMEPORT is not set
CONFIG_SOUND_GAMEPORT=y
# CONFIG_GAMEPORT_NS558 is not set
# CONFIG_GAMEPORT_L4 is not set
# CONFIG_INPUT_EMU10K1 is not set
# CONFIG_GAMEPORT_PCIGAME is not set
# CONFIG_GAMEPORT_FM801 is not set
# CONFIG_GAMEPORT_CS461x is not set
CONFIG_SERIO=y
CONFIG_SERIO_SERPORT=y
# CONFIG_INPUT_JOYSTICK is not set
# CONFIG_JOYSTICK_ANALOG is not set
# CONFIG_JOYSTICK_A3D is not set
# CONFIG_JOYSTICK_ADI is not set
# CONFIG_JOYSTICK_COBRA is not set
# CONFIG_JOYSTICK_GF2K is not set
# CONFIG_JOYSTICK_GRIP is not set
# CONFIG_JOYSTICK_INTERACT is not set
# CONFIG_JOYSTICK_SIDEWINDER is not set
# CONFIG_JOYSTICK_TMDC is not set
# CONFIG_JOYSTICK_IFORCE_USB is not set
# CONFIG_JOYSTICK_IFORCE_232 is not set
# CONFIG_JOYSTICK_WARRIOR is not set
# CONFIG_JOYSTICK_MAGELLAN is not set
# CONFIG_JOYSTICK_SPACEORB is not set
# CONFIG_JOYSTICK_SPACEBALL is not set
# CONFIG_JOYSTICK_STINGER is not set
# CONFIG_JOYSTICK_DB9 is not set
# CONFIG_JOYSTICK_GAMECON is not set
# CONFIG_JOYSTICK_TURBOGRAFX is not set
#
# Character devices
...
...
@@ -442,7 +495,7 @@ CONFIG_VT=y
CONFIG_VT_CONSOLE=y
CONFIG_SERIAL=y
CONFIG_SERIAL_CONSOLE=y
# CONFIG_SERIAL_ACPI is not set
CONFIG_SERIAL_ACPI=y
# CONFIG_SERIAL_EXTENDED is not set
# CONFIG_SERIAL_NONSTANDARD is not set
CONFIG_UNIX98_PTYS=y
...
...
@@ -451,7 +504,14 @@ CONFIG_UNIX98_PTY_COUNT=256
#
# I2C support
#
# CONFIG_I2C is not set
CONFIG_I2C=y
CONFIG_I2C_ALGOBIT=y
# CONFIG_I2C_PHILIPSPAR is not set
# CONFIG_I2C_ELV is not set
# CONFIG_I2C_VELLEMAN is not set
# CONFIG_I2C_ALGOPCF is not set
CONFIG_I2C_CHARDEV=y
CONFIG_I2C_PROC=y
#
# Mice
...
...
@@ -461,41 +521,6 @@ CONFIG_MOUSE=y
CONFIG_PSMOUSE=y
# CONFIG_82C710_MOUSE is not set
# CONFIG_PC110_PAD is not set
#
# Joysticks
#
# CONFIG_INPUT_GAMEPORT is not set
# CONFIG_INPUT_NS558 is not set
# CONFIG_INPUT_LIGHTNING is not set
# CONFIG_INPUT_PCIGAME is not set
# CONFIG_INPUT_CS461X is not set
# CONFIG_INPUT_EMU10K1 is not set
CONFIG_INPUT_SERIO=y
CONFIG_INPUT_SERPORT=y
#
# Joysticks
#
# CONFIG_INPUT_ANALOG is not set
# CONFIG_INPUT_A3D is not set
# CONFIG_INPUT_ADI is not set
# CONFIG_INPUT_COBRA is not set
# CONFIG_INPUT_GF2K is not set
# CONFIG_INPUT_GRIP is not set
# CONFIG_INPUT_INTERACT is not set
# CONFIG_INPUT_TMDC is not set
# CONFIG_INPUT_SIDEWINDER is not set
# CONFIG_INPUT_IFORCE_USB is not set
# CONFIG_INPUT_IFORCE_232 is not set
# CONFIG_INPUT_WARRIOR is not set
# CONFIG_INPUT_MAGELLAN is not set
# CONFIG_INPUT_SPACEORB is not set
# CONFIG_INPUT_SPACEBALL is not set
# CONFIG_INPUT_STINGER is not set
# CONFIG_INPUT_DB9 is not set
# CONFIG_INPUT_GAMECON is not set
# CONFIG_INPUT_TURBOGRAFX is not set
# CONFIG_QIC02_TAPE is not set
#
...
...
@@ -523,15 +548,12 @@ CONFIG_AGP_I460=y
# CONFIG_AGP_SIS is not set
# CONFIG_AGP_ALI is not set
# CONFIG_AGP_SWORKS is not set
CONFIG_DRM=y
# CONFIG_DRM_NEW is not set
CONFIG_DRM_OLD=y
CONFIG_DRM40_TDFX=y
# CONFIG_DRM40_GAMMA is not set
# CONFIG_DRM40_R128 is not set
# CONFIG_DRM40_RADEON is not set
# CONFIG_DRM40_I810 is not set
# CONFIG_DRM40_MGA is not set
CONFIG_DRM_TDFX=y
# CONFIG_DRM_GAMMA is not set
# CONFIG_DRM_R128 is not set
# CONFIG_DRM_RADEON is not set
# CONFIG_DRM_I810 is not set
# CONFIG_DRM_MGA is not set
#
# Multimedia devices
...
...
@@ -547,12 +569,16 @@ CONFIG_VIDEO_PROC_FS=y
#
# Video Adapters
#
# CONFIG_VIDEO_BT848 is not set
# CONFIG_VIDEO_PMS is not set
# CONFIG_VIDEO_CPIA is not set
# CONFIG_VIDEO_SAA5249 is not set
# CONFIG_TUNER_3036 is not set
# CONFIG_VIDEO_STRADIS is not set
# CONFIG_VIDEO_ZORAN is not set
# CONFIG_VIDEO_ZORAN_BUZ is not set
# CONFIG_VIDEO_ZORAN_DC10 is not set
# CONFIG_VIDEO_ZORAN_LML33 is not set
# CONFIG_VIDEO_ZR36120 is not set
# CONFIG_VIDEO_MEYE is not set
...
...
@@ -583,11 +609,15 @@ CONFIG_AUTOFS_FS=y
# CONFIG_AUTOFS4_FS is not set
# CONFIG_REISERFS_FS is not set
# CONFIG_REISERFS_CHECK is not set
# CONFIG_REISERFS_PROC_INFO is not set
# CONFIG_ADFS_FS is not set
# CONFIG_ADFS_FS_RW is not set
# CONFIG_AFFS_FS is not set
# CONFIG_HFS_FS is not set
# CONFIG_BFS_FS is not set
CONFIG_EXT3_FS=m
CONFIG_JBD=m
CONFIG_JBD_DEBUG=y
CONFIG_FAT_FS=y
CONFIG_MSDOS_FS=y
# CONFIG_UMSDOS_FS is not set
...
...
@@ -597,10 +627,13 @@ CONFIG_VFAT_FS=y
# CONFIG_JFFS2_FS is not set
# CONFIG_CRAMFS is not set
# CONFIG_TMPFS is not set
# CONFIG_RAMFS is not set
CONFIG_RAMFS=y
CONFIG_ISO9660_FS=y
# CONFIG_JOLIET is not set
# CONFIG_ZISOFS is not set
# CONFIG_JFS_FS is not set
# CONFIG_JFS_DEBUG is not set
# CONFIG_JFS_STATISTICS is not set
# CONFIG_MINIX_FS is not set
# CONFIG_VXFS_FS is not set
# CONFIG_NTFS_FS is not set
...
...
@@ -625,11 +658,13 @@ CONFIG_EXT2_FS=y
# Network File Systems
#
# CONFIG_CODA_FS is not set
# CONFIG_INTERMEZZO_FS is not set
CONFIG_NFS_FS=y
CONFIG_NFS_V3=y
# CONFIG_ROOT_NFS is not set
CONFIG_NFSD=y
CONFIG_NFSD_V3=y
# CONFIG_NFSD_TCP is not set
CONFIG_SUNRPC=y
CONFIG_LOCKD=y
CONFIG_LOCKD_V4=y
...
...
@@ -644,7 +679,6 @@ CONFIG_LOCKD_V4=y
# CONFIG_NCPFS_NLS is not set
# CONFIG_NCPFS_EXTRAS is not set
# CONFIG_ZISOFS_FS is not set
# CONFIG_ZLIB_FS_INFLATE is not set
#
# Partition Types
...
...
@@ -666,6 +700,7 @@ CONFIG_EFI_PARTITION=y
# CONFIG_SGI_PARTITION is not set
# CONFIG_ULTRIX_PARTITION is not set
# CONFIG_SUN_PARTITION is not set
CONFIG_EFI_PARTITION=y
# CONFIG_SMB_NLS is not set
CONFIG_NLS=y
...
...
@@ -724,6 +759,11 @@ CONFIG_VGA_CONSOLE=y
# Sound
#
CONFIG_SOUND=y
#
# Open Sound System
#
CONFIG_SOUND_PRIME=y
# CONFIG_SOUND_BT878 is not set
# CONFIG_SOUND_CMPCI is not set
# CONFIG_SOUND_EMU10K1 is not set
...
...
@@ -746,6 +786,11 @@ CONFIG_SOUND_CS4281=y
# CONFIG_SOUND_OSS is not set
# CONFIG_SOUND_TVMIXER is not set
#
# Advanced Linux Sound Architecture
#
# CONFIG_SND is not set
#
# USB support
#
...
...
@@ -760,8 +805,10 @@ CONFIG_USB_DEVICEFS=y
# CONFIG_USB_LONG_TIMEOUT is not set
#
# USB
Controll
ers
# USB
Host Controller Driv
ers
#
# CONFIG_USB_EHCI_HCD is not set
# CONFIG_USB_OHCI_HCD is not set
CONFIG_USB_UHCI=m
# CONFIG_USB_UHCI_ALT is not set
# CONFIG_USB_OHCI is not set
...
...
@@ -808,8 +855,11 @@ CONFIG_USB_MOUSE=m
# CONFIG_USB_OV511 is not set
# CONFIG_USB_PWC is not set
# CONFIG_USB_SE401 is not set
# CONFIG_USB_STV680 is not set
# CONFIG_USB_VICAM is not set
# CONFIG_USB_DSBR is not set
# CONFIG_USB_DABUSB is not set
# CONFIG_USB_KONICAWC is not set
#
# USB Network adaptors
...
...
@@ -836,6 +886,7 @@ CONFIG_USB_MOUSE=m
# CONFIG_USB_SERIAL_EMPEG is not set
# CONFIG_USB_SERIAL_FTDI_SIO is not set
# CONFIG_USB_SERIAL_VISOR is not set
# CONFIG_USB_SERIAL_IPAQ is not set
# CONFIG_USB_SERIAL_IR is not set
# CONFIG_USB_SERIAL_EDGEPORT is not set
# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set
...
...
@@ -849,6 +900,7 @@ CONFIG_USB_MOUSE=m
# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set
# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set
# CONFIG_USB_SERIAL_MCT_U232 is not set
# CONFIG_USB_SERIAL_KLSI is not set
# CONFIG_USB_SERIAL_PL2303 is not set
# CONFIG_USB_SERIAL_CYBERJACK is not set
# CONFIG_USB_SERIAL_XIRCOM is not set
...
...
@@ -858,6 +910,14 @@ CONFIG_USB_MOUSE=m
# USB Miscellaneous drivers
#
# CONFIG_USB_RIO500 is not set
# CONFIG_USB_AUERSWALD is not set
#
# Library routines
#
# CONFIG_CRC32 is not set
# CONFIG_ZLIB_INFLATE is not set
# CONFIG_ZLIB_DEFLATE is not set
#
# Bluetooth support
...
...
@@ -873,7 +933,16 @@ CONFIG_DEBUG_KERNEL=y
CONFIG_IA64_PRINT_HAZARDS=y
# CONFIG_DISABLE_VHPT is not set
CONFIG_MAGIC_SYSRQ=y
CONFIG_IA64_EARLY_PRINTK=y
# CONFIG_DEBUG_SLAB is not set
# CONFIG_DEBUG_SPINLOCK is not set
# CONFIG_IA64_DEBUG_CMPXCHG is not set
# CONFIG_IA64_DEBUG_IRQ is not set
CONFIG_KDB=y
# CONFIG_KDB_MODULES is not set
# CONFIG_KDB_OFF is not set
#
# Load all symbols for debugging is required for KDB
#
CONFIG_KALLSYMS=y
arch/ia64/ia32/ia32_entry.S
View file @
0c860bc9
#include <asm/asmmacro.h>
#include <asm/offsets.h>
#include <asm/signal.h>
#include <asm/thread_info.h>
#include "../kernel/minstate.h"
...
...
@@ -87,18 +88,21 @@ END(sys32_sigsuspend)
GLOBAL_ENTRY
(
ia32_ret_from_clone
)
PT_REGS_UNWIND_INFO
(0)
#if defined(CONFIG_SMP) || defined(CONFIG_PREEMPT)
/
*
*
We
need
to
call
schedule_tail
()
to
complete
the
scheduling
process
.
*
Called
by
ia64_switch_to
after
do_fork
()->
copy_thread
()
.
r8
contains
the
*
address
of
the
previously
executing
task
.
*/
br.call.sptk.many
rp
=
ia64_invoke_schedule_tail
.
ret1
:
adds
r2
=
IA64_TASK_PTRACE_OFFSET
,
r13
.
ret1
:
#endif
adds
r2
=
TI_FLAGS
+
IA64_TASK_SIZE
,
r13
;;
ld
8
r2
=[
r2
]
ld
4
r2
=[
r2
]
;;
mov
r8
=
0
tbit.nz
p6
,
p0
=
r2
,
PT_SYSCALLTRACE_BIT
tbit.nz
p6
,
p0
=
r2
,
TIF_SYSCALL_TRACE
(
p6
)
br.cond.spnt
.
ia32_strace_check_retval
;; // prevent RAW on r8
END
(
ia32_ret_from_clone
)
...
...
arch/ia64/kernel/entry.S
View file @
0c860bc9
...
...
@@ -486,6 +486,7 @@ END(ia64_trace_syscall)
GLOBAL_ENTRY
(
ia64_ret_from_clone
)
PT_REGS_UNWIND_INFO
(0)
#if defined(CONFIG_SMP) || defined(CONFIG_PREEMPT)
/
*
*
We
need
to
call
schedule_tail
()
to
complete
the
scheduling
process
.
*
Called
by
ia64_switch_to
after
do_fork
()->
copy_thread
()
.
r8
contains
the
...
...
@@ -493,6 +494,7 @@ GLOBAL_ENTRY(ia64_ret_from_clone)
*/
br.call.sptk.many
rp
=
ia64_invoke_schedule_tail
.
ret8
:
#endif
adds
r2
=
TI_FLAGS
+
IA64_TASK_SIZE
,
r13
;;
ld4
r2
=[
r2
]
...
...
@@ -620,7 +622,7 @@ GLOBAL_ENTRY(ia64_leave_kernel)
shr.u
r18
=
r19
,
16
//
get
byte
size
of
existing
"dirty"
partition
;;
mov
r16
=
ar
.
bsp
//
get
existing
backing
store
pointer
movl
r17
=
PERCPU_ADDR
+
IA64_CPU_PHYS_STACKED_SIZE_P8_OFFSET
movl
r17
=
THIS_CPU
(
ia64_phys_stacked_size_p8
)
;;
ld4
r17
=[
r17
]
//
r17
=
cpu_data
->
phys_stacked_size_p8
(
pKern
)
br.cond.dpnt
skip_rbs_switch
...
...
@@ -756,6 +758,7 @@ ENTRY(handle_syscall_error)
br.cond.sptk
ia64_leave_kernel
END
(
handle_syscall_error
)
#ifdef CONFIG_SMP
/
*
*
Invoke
schedule_tail
(
task
)
while
preserving
in0
-
in7
,
which
may
be
needed
*
in
case
a
system
call
gets
restarted
.
...
...
@@ -772,6 +775,8 @@ GLOBAL_ENTRY(ia64_invoke_schedule_tail)
br.ret.sptk.many
rp
END
(
ia64_invoke_schedule_tail
)
#endif /* CONFIG_SMP */
#if __GNUC__ < 3
/
*
...
...
arch/ia64/kernel/ia64_ksyms.c
View file @
0c860bc9
...
...
@@ -59,7 +59,7 @@ EXPORT_SYMBOL(clear_page);
#include <asm/processor.h>
# ifndef CONFIG_NUMA
EXPORT_SYMBOL
(
_cpu_data
);
EXPORT_SYMBOL
(
cpu_info
);
# endif
EXPORT_SYMBOL
(
kernel_thread
);
...
...
arch/ia64/kernel/ivt.S
View file @
0c860bc9
...
...
@@ -645,7 +645,6 @@ ENTRY(break_fault)
mov
r3
=
255
adds
r15
=-
1024
,
r15
//
r15
contains
the
syscall
number
---
subtract
1024
adds
r2
=
IA64_TASK_PTRACE_OFFSET
,
r13
//
r2
=
&c
urrent
->
ptrace
;;
cmp.geu
p6
,
p7
=
r3
,
r15
//
(
syscall
>
0
&&
syscall
<=
1024
+
255
)
?
movl
r16
=
sys_call_table
...
...
arch/ia64/kernel/perfmon.c
View file @
0c860bc9
...
...
@@ -38,8 +38,8 @@
#ifdef CONFIG_PERFMON
/*
* For PMU
which rely on the debug registers for some features, you must
*
you
must enable the following flag to activate the support for
* For PMU
s which rely on the debug registers for some features, you
* must enable the following flag to activate the support for
* accessing the registers via the perfmonctl() interface.
*/
#ifdef CONFIG_ITANIUM
...
...
@@ -313,6 +313,9 @@ static unsigned long pfm_spurious_ovfl_intr_count; /* keep track of spurious ovf
static
unsigned
long
pfm_ovfl_intr_count
;
/* keep track of spurious ovfl interrupts */
static
unsigned
long
pfm_recorded_samples_count
;
static
unsigned
long
reset_pmcs
[
IA64_NUM_PMC_REGS
];
/* contains PAL reset values for PMCS */
static
void
pfm_vm_close
(
struct
vm_area_struct
*
area
);
static
struct
vm_operations_struct
pfm_vm_ops
=
{
close:
pfm_vm_close
...
...
@@ -331,7 +334,9 @@ static struct {
* forward declarations
*/
static
void
ia64_reset_pmu
(
struct
task_struct
*
);
#ifdef CONFIG_SMP
static
void
pfm_fetch_regs
(
int
cpu
,
struct
task_struct
*
task
,
pfm_context_t
*
ctx
);
#endif
static
void
pfm_lazy_save_regs
(
struct
task_struct
*
ta
);
static
inline
unsigned
long
...
...
@@ -422,7 +427,7 @@ pfm_rvfree(void *mem, unsigned long size)
if
(
mem
)
{
adr
=
(
unsigned
long
)
mem
;
while
((
long
)
size
>
0
)
while
((
long
)
size
>
0
)
{
mem_map_unreserve
(
vmalloc_to_page
((
void
*
)
adr
));
adr
+=
PAGE_SIZE
;
size
-=
PAGE_SIZE
;
...
...
@@ -1500,11 +1505,12 @@ pfm_restart(struct task_struct *task, pfm_context_t *ctx, void *arg, int count,
*/
if
(
!
CTX_IS_ENABLED
(
ctx
))
return
-
EINVAL
;
#if 0
if (ctx->ctx_fl_frozen==0) {
printk("task %d without pmu_frozen set\n", task->pid);
return -EINVAL;
}
#endif
if
(
task
==
current
)
{
DBprintk
((
"restarting self %d frozen=%d
\n
"
,
current
->
pid
,
ctx
->
ctx_fl_frozen
));
...
...
@@ -1569,32 +1575,150 @@ pfm_restart(struct task_struct *task, pfm_context_t *ctx, void *arg, int count,
return
0
;
}
#ifndef CONFIG_SMP
/*
* On UP kernels, we do not need to constantly set the psr.pp bit
* when a task is scheduled. The psr.pp bit can only be changed in
* the kernel because of a user request. Given we are on a UP non preeemptive
* kernel we know that no other task is running, so we cna simply update their
* psr.pp from their saved state. There is this no impact on the context switch
* code compared to the SMP case.
*/
static
void
pfm_tasklist_toggle_pp
(
unsigned
int
val
)
{
struct
task_struct
*
p
;
struct
pt_regs
*
regs
;
DBprintk
((
"invoked by [%d] pp=%u
\n
"
,
current
->
pid
,
val
));
read_lock
(
&
tasklist_lock
);
for_each_task
(
p
)
{
regs
=
(
struct
pt_regs
*
)((
unsigned
long
)
p
+
IA64_STK_OFFSET
);
/*
* position on pt_regs saved on stack on 1st entry into the kernel
*/
regs
--
;
/*
* update psr.pp
*/
ia64_psr
(
regs
)
->
pp
=
val
;
}
read_unlock
(
&
tasklist_lock
);
}
#endif
static
int
pfm_
destroy_context
(
struct
task_struct
*
task
,
pfm_context_t
*
ctx
,
void
*
arg
,
int
count
,
pfm_
stop
(
struct
task_struct
*
task
,
pfm_context_t
*
ctx
,
void
*
arg
,
int
count
,
struct
pt_regs
*
regs
)
{
/* we don't quite support this right now */
if
(
task
!=
current
)
return
-
EINVAL
;
if
(
ctx
->
ctx_fl_system
)
{
ia64_psr
(
regs
)
->
pp
=
0
;
/*
* Cannot do anything before PMU is enabled
*/
if
(
!
CTX_IS_ENABLED
(
ctx
))
return
-
EINVAL
;
DBprintk
((
"[%d] fl_system=%d owner=%p current=%p
\n
"
,
current
->
pid
,
ctx
->
ctx_fl_system
,
PMU_OWNER
(),
current
));
/* simply stop monitoring but not the PMU */
if
(
ctx
->
ctx_fl_system
)
{
__asm__
__volatile__
(
"rsm psr.pp;;"
:::
"memory"
);
/* disable dcr pp */
ia64_set_dcr
(
ia64_get_dcr
()
&
~
IA64_DCR_PP
);
#ifdef CONFIG_SMP
local_cpu_data
->
pfm_dcr_pp
=
0
;
#else
pfm_tasklist_toggle_pp
(
0
);
#endif
ia64_psr
(
regs
)
->
pp
=
0
;
}
else
{
ia64_psr
(
regs
)
->
up
=
0
;
__asm__
__volatile__
(
"rum psr.up;;"
:::
"memory"
);
task
->
thread
.
flags
&=
~
IA64_THREAD_PM_VALID
;
ia64_psr
(
regs
)
->
up
=
0
;
}
return
0
;
}
SET_PMU_OWNER
(
NULL
);
static
int
pfm_disable
(
struct
task_struct
*
task
,
pfm_context_t
*
ctx
,
void
*
arg
,
int
count
,
struct
pt_regs
*
regs
)
{
/* we don't quite support this right now */
if
(
task
!=
current
)
return
-
EINVAL
;
/* freeze PMU */
ia64_set_pmc
(
0
,
1
);
ia64_srlz_d
();
if
(
!
CTX_IS_ENABLED
(
ctx
))
return
-
EINVAL
;
/*
* stop monitoring, freeze PMU, and save state in context
* this call will clear IA64_THREAD_PM_VALID for per-task sessions.
*/
pfm_flush_regs
(
task
);
if
(
ctx
->
ctx_fl_system
)
{
ia64_psr
(
regs
)
->
pp
=
0
;
}
else
{
ia64_psr
(
regs
)
->
up
=
0
;
}
/*
* goes back to default behavior
* no need to change live psr.sp because useless at the kernel level
*/
ia64_psr
(
regs
)
->
sp
=
1
;
DBprintk
((
"enabling psr.sp for [%d]
\n
"
,
current
->
pid
));
ctx
->
ctx_flags
.
state
=
PFM_CTX_DISABLED
;
return
0
;
}
static
int
pfm_destroy_context
(
struct
task_struct
*
task
,
pfm_context_t
*
ctx
,
void
*
arg
,
int
count
,
struct
pt_regs
*
regs
)
{
/* we don't quite support this right now */
if
(
task
!=
current
)
return
-
EINVAL
;
/*
* if context was never enabled, then there is not much
* to do
*/
if
(
!
CTX_IS_ENABLED
(
ctx
))
goto
skipped_stop
;
/*
* Disable context: stop monitoring, flush regs to software state (useless here),
* and freeze PMU
*
* The IA64_THREAD_PM_VALID is cleared by pfm_flush_regs() called from pfm_disable()
*/
pfm_disable
(
task
,
ctx
,
arg
,
count
,
regs
);
if
(
ctx
->
ctx_fl_system
)
{
ia64_psr
(
regs
)
->
pp
=
0
;
}
else
{
ia64_psr
(
regs
)
->
up
=
0
;
}
/* restore security level */
ia64_psr
(
regs
)
->
sp
=
1
;
skipped_stop:
/*
* remove sampling buffer mapping, if any
*/
...
...
@@ -1910,8 +2034,13 @@ pfm_start(struct task_struct *task, pfm_context_t *ctx, void *arg, int count,
/* enable dcr pp */
ia64_set_dcr
(
ia64_get_dcr
()
|
IA64_DCR_PP
);
#ifdef CONFIG_SMP
local_cpu_data
->
pfm_dcr_pp
=
1
;
#else
pfm_tasklist_toggle_pp
(
1
);
#endif
ia64_psr
(
regs
)
->
pp
=
1
;
__asm__
__volatile__
(
"ssm psr.pp;;"
:::
"memory"
);
}
else
{
...
...
@@ -1985,80 +2114,6 @@ pfm_enable(struct task_struct *task, pfm_context_t *ctx, void *arg, int count,
return
0
;
}
static
int
pfm_disable
(
struct
task_struct
*
task
,
pfm_context_t
*
ctx
,
void
*
arg
,
int
count
,
struct
pt_regs
*
regs
)
{
/* we don't quite support this right now */
if
(
task
!=
current
)
return
-
EINVAL
;
if
(
!
CTX_IS_ENABLED
(
ctx
))
return
-
EINVAL
;
/*
* stop monitoring, freeze PMU, and save state in context
*/
pfm_flush_regs
(
task
);
/*
* just to make sure nothing starts again when back in user mode.
* pfm_flush_regs() freezes the PMU anyway.
*/
if
(
ctx
->
ctx_fl_system
)
{
ia64_psr
(
regs
)
->
pp
=
0
;
}
else
{
ia64_psr
(
regs
)
->
up
=
0
;
}
/*
* goes back to default behavior
* no need to change live psr.sp because useless at the kernel level
*/
ia64_psr
(
regs
)
->
sp
=
1
;
DBprintk
((
"enabling psr.sp for [%d]
\n
"
,
current
->
pid
));
ctx
->
ctx_flags
.
state
=
PFM_CTX_DISABLED
;
return
0
;
}
static
int
pfm_stop
(
struct
task_struct
*
task
,
pfm_context_t
*
ctx
,
void
*
arg
,
int
count
,
struct
pt_regs
*
regs
)
{
/* we don't quite support this right now */
if
(
task
!=
current
)
return
-
EINVAL
;
/*
* Cannot do anything before PMU is enabled
*/
if
(
!
CTX_IS_ENABLED
(
ctx
))
return
-
EINVAL
;
DBprintk
((
"[%d] fl_system=%d owner=%p current=%p
\n
"
,
current
->
pid
,
ctx
->
ctx_fl_system
,
PMU_OWNER
(),
current
));
/* simply stop monitoring but not the PMU */
if
(
ctx
->
ctx_fl_system
)
{
__asm__
__volatile__
(
"rsm psr.pp;;"
:::
"memory"
);
/* disable dcr pp */
ia64_set_dcr
(
ia64_get_dcr
()
&
~
IA64_DCR_PP
);
local_cpu_data
->
pfm_dcr_pp
=
0
;
ia64_psr
(
regs
)
->
pp
=
0
;
__asm__
__volatile__
(
"rsm psr.pp;;"
:::
"memory"
);
}
else
{
ia64_psr
(
regs
)
->
up
=
0
;
__asm__
__volatile__
(
"rum psr.up;;"
:::
"memory"
);
}
return
0
;
}
/*
* functions MUST be listed in the increasing order of their index (see permfon.h)
*/
...
...
@@ -2730,10 +2785,12 @@ perfmon_proc_info(char *page)
p
+=
sprintf
(
p
,
"recorded samples=%lu
\n
"
,
pfm_recorded_samples_count
);
p
+=
sprintf
(
p
,
"CPU%d.pmc[0]=%lx
\n
Perfmon debug: %s
\n
"
,
smp_processor_id
(),
pmc0
,
pfm_debug
?
"On"
:
"Off"
);
smp_processor_id
(),
pmc0
,
pfm_debug
_mode
?
"On"
:
"Off"
);
#ifdef CONFIG_SMP
p
+=
sprintf
(
p
,
"CPU%d cpu_data.pfm_syst_wide=%d cpu_data.dcr_pp=%d
\n
"
,
smp_processor_id
(),
local_cpu_data
->
pfm_syst_wide
,
local_cpu_data
->
pfm_dcr_pp
);
#endif
LOCK_PFS
();
p
+=
sprintf
(
p
,
"proc_sessions=%lu
\n
sys_sessions=%lu
\n
sys_use_dbregs=%lu
\n
ptrace_use_dbregs=%lu
\n
"
,
...
...
@@ -2772,6 +2829,7 @@ perfmon_read_entry(char *page, char **start, off_t off, int count, int *eof, voi
return
len
;
}
#ifdef CONFIG_SMP
void
pfm_syst_wide_update_task
(
struct
task_struct
*
task
,
int
mode
)
{
...
...
@@ -2784,6 +2842,8 @@ pfm_syst_wide_update_task(struct task_struct *task, int mode)
*/
ia64_psr
(
regs
)
->
pp
=
mode
?
local_cpu_data
->
pfm_dcr_pp
:
0
;
}
#endif
void
pfm_save_regs
(
struct
task_struct
*
task
)
...
...
@@ -2873,7 +2933,9 @@ pfm_lazy_save_regs (struct task_struct *task)
/* not owned by this CPU */
atomic_set
(
&
ctx
->
ctx_last_cpu
,
-
1
);
#ifdef CONFIG_SMP
do_nothing:
#endif
/*
* declare we are done saving this context
*
...
...
@@ -3010,7 +3072,10 @@ pfm_load_regs (struct task_struct *task)
struct
task_struct
*
owner
;
unsigned
long
mask
;
u64
psr
;
int
i
,
cpu
;
int
i
;
#ifdef CONFIG_SMP
int
cpu
;
#endif
owner
=
PMU_OWNER
();
ctx
=
task
->
thread
.
pfm_context
;
...
...
@@ -3119,49 +3184,14 @@ pfm_load_regs (struct task_struct *task)
}
static
void
pfm_model_specific_reset_pmu
(
struct
task_struct
*
task
)
{
int
i
;
#ifdef CONFIG_ITANIUM
/* opcode matcher set to all 1s */
ia64_set_pmc
(
8
,
~
0UL
);
ia64_set_pmc
(
9
,
~
0UL
);
/* I-EAR config cleared, plm=0 */
ia64_set_pmc
(
10
,
0UL
);
/* D-EAR config cleared, PMC[11].pt must be 1 */
ia64_set_pmc
(
11
,
1UL
<<
28
);
/* BTB config. plm=0 */
ia64_set_pmc
(
12
,
0UL
);
/* Instruction address range, PMC[13].ta must be 1 */
ia64_set_pmc
(
13
,
1UL
);
/*
* Clear all PMDs
*
* XXX: may be good enough to rely on the impl_regs to generalize
* this.
*/
for
(
i
=
0
;
i
<
18
;
i
++
)
{
ia64_set_pmd
(
i
,
0UL
);
}
#endif
}
/*
* XXX: this routine is not very portable for PMCs
* XXX: make this routine able to work with non current context
*/
static
void
ia64_reset_pmu
(
struct
task_struct
*
task
)
{
pfm_context_t
*
ctx
=
task
->
thread
.
pfm_context
;
struct
thread_struct
*
t
=
&
task
->
thread
;
pfm_context_t
*
ctx
=
t
->
pfm_context
;
unsigned
long
mask
;
int
i
;
...
...
@@ -3170,34 +3200,36 @@ ia64_reset_pmu(struct task_struct *task)
return
;
}
/*
PMU is frozen, no pending overflow bits
*/
/*
Let's make sure the PMU is frozen
*/
ia64_set_pmc
(
0
,
1
);
/*
* Let's first do the architected initializations
* install reset values for PMC. We skip PMC0 (done above)
* XX: good up to 64 PMCS
*/
/* clear counters */
ia64_set_pmd
(
4
,
0UL
);
ia64_set_pmd
(
5
,
0UL
);
ia64_set_pmd
(
6
,
0UL
);
ia64_set_pmd
(
7
,
0UL
);
/* clear overflow status bits */
ia64_set_pmc
(
1
,
0UL
);
ia64_set_pmc
(
2
,
0UL
);
ia64_set_pmc
(
3
,
0UL
);
/* clear counting monitor configuration */
ia64_set_pmc
(
4
,
0UL
);
ia64_set_pmc
(
5
,
0UL
);
ia64_set_pmc
(
6
,
0UL
);
ia64_set_pmc
(
7
,
0UL
);
mask
=
pmu_conf
.
impl_regs
[
0
]
>>
1
;
for
(
i
=
1
;
mask
;
mask
>>=
1
,
i
++
)
{
if
(
mask
&
0x1
)
{
ia64_set_pmc
(
i
,
reset_pmcs
[
i
]);
/*
* When restoring context, we must restore ALL pmcs, even the ones
* that the task does not use to avoid leaks and possibly corruption
* of the sesion because of configuration conflicts. So here, we
* initializaed the table used in the context switch restore routine.
*/
t
->
pmc
[
i
]
=
reset_pmcs
[
i
];
DBprintk
((
" pmc[%d]=0x%lx
\n
"
,
i
,
reset_pmcs
[
i
]));
}
}
/*
* Now let's do the CPU model specific initializations
* clear reset values for PMD.
* XX: good up to 64 PMDS. Suppose that zero is a valid value.
*/
pfm_model_specific_reset_pmu
(
task
);
mask
=
pmu_conf
.
impl_regs
[
4
];
for
(
i
=
0
;
mask
;
mask
>>=
1
,
i
++
)
{
if
(
mask
&
0x1
)
ia64_set_pmd
(
i
,
0UL
);
}
/*
* On context switched restore, we must restore ALL pmc even
...
...
@@ -3221,19 +3253,6 @@ ia64_reset_pmu(struct task_struct *task)
*/
ctx
->
ctx_reload_pmcs
[
0
]
=
pmu_conf
.
impl_regs
[
0
];
/*
* make sure we pick up whatever values were installed
* for the CPU model specific reset. We also include
* the architected PMC (pmc4-pmc7)
*
* This step is required in order to restore the correct values in PMC when
* the task is switched out and back in just after the PFM_ENABLE.
*/
mask
=
pmu_conf
.
impl_regs
[
0
];
for
(
i
=
0
;
mask
;
i
++
,
mask
>>=
1
)
{
if
(
mask
&
0x1
)
t
->
pmc
[
i
]
=
ia64_get_pmc
(
i
);
}
/*
* useful in case of re-enable after disable
*/
...
...
@@ -3280,14 +3299,18 @@ pfm_flush_regs (struct task_struct *task)
* By now, we could still have an overflow interrupt in-flight.
*/
if
(
ctx
->
ctx_fl_system
)
{
__asm__
__volatile__
(
"rsm psr.pp;;"
:::
"memory"
);
/* disable dcr pp */
ia64_set_dcr
(
ia64_get_dcr
()
&
~
IA64_DCR_PP
);
#ifdef CONFIG_SMP
local_cpu_data
->
pfm_syst_wide
=
0
;
local_cpu_data
->
pfm_dcr_pp
=
0
;
__asm__
__volatile__
(
"rsm psr.pp;;"
:::
"memory"
);
#else
pfm_tasklist_toggle_pp
(
0
);
#endif
}
else
{
...
...
@@ -3386,6 +3409,7 @@ pfm_flush_regs (struct task_struct *task)
}
/*
* task is the newly created task, pt_regs for new child
*/
...
...
@@ -3803,6 +3827,17 @@ static struct irqaction perfmon_irqaction = {
};
static
void
pfm_pmu_snapshot
(
void
)
{
int
i
;
for
(
i
=
0
;
i
<
IA64_NUM_PMC_REGS
;
i
++
)
{
if
(
i
>=
pmu_conf
.
num_pmcs
)
break
;
if
(
PMC_IS_IMPL
(
i
))
reset_pmcs
[
i
]
=
ia64_get_pmc
(
i
);
}
}
/*
* perfmon initialization routine, called from the initcall() table
*/
...
...
@@ -3836,8 +3871,7 @@ perfmon_init (void)
pmu_conf
.
num_pmcs
=
find_num_pm_regs
(
pmu_conf
.
impl_regs
);
pmu_conf
.
num_pmds
=
find_num_pm_regs
(
&
pmu_conf
.
impl_regs
[
4
]);
printk
(
"perfmon: %u bits counters (max value 0x%016lx)
\n
"
,
pm_info
.
pal_perf_mon_info_s
.
width
,
pmu_conf
.
perf_ovfl_val
);
printk
(
"perfmon: %u bits counters
\n
"
,
pm_info
.
pal_perf_mon_info_s
.
width
);
printk
(
"perfmon: %lu PMC/PMD pairs, %lu PMCs, %lu PMDs
\n
"
,
pmu_conf
.
max_counters
,
pmu_conf
.
num_pmcs
,
pmu_conf
.
num_pmds
);
...
...
@@ -3856,6 +3890,19 @@ perfmon_init (void)
pmu_conf
.
num_ibrs
<<=
1
;
pmu_conf
.
num_dbrs
<<=
1
;
/*
* take a snapshot of all PMU registers. PAL is supposed
* to configure them with stable/safe values, i.e., not
* capturing anything.
* We take a snapshot now, before we make any modifications. This
* will become our master copy. Then we will reuse the snapshot
* to reset the PMU in pfm_enable(). Using this technique, perfmon
* does NOT have to know about the specific values to program for
* the PMC/PMD. The safe values may be different from one CPU model to
* the other.
*/
pfm_pmu_snapshot
();
/*
* list the pmc registers used to control monitors
* XXX: unfortunately this information is not provided by PAL
...
...
arch/ia64/kernel/process.c
View file @
0c860bc9
...
...
@@ -193,7 +193,10 @@ ia64_save_extra (struct task_struct *task)
if
((
task
->
thread
.
flags
&
IA64_THREAD_PM_VALID
)
!=
0
)
pfm_save_regs
(
task
);
if
(
local_cpu_data
->
pfm_syst_wide
)
pfm_syst_wide_update_task
(
task
,
0
);
# ifdef CONFIG_SMP
if
(
local_cpu_data
->
pfm_syst_wide
)
pfm_syst_wide_update_task
(
task
,
0
);
# endif
#endif
if
(
IS_IA32_PROCESS
(
ia64_task_regs
(
task
)))
...
...
@@ -210,7 +213,9 @@ ia64_load_extra (struct task_struct *task)
if
((
task
->
thread
.
flags
&
IA64_THREAD_PM_VALID
)
!=
0
)
pfm_load_regs
(
task
);
# ifdef CONFIG_SMP
if
(
local_cpu_data
->
pfm_syst_wide
)
pfm_syst_wide_update_task
(
task
,
1
);
# endif
#endif
if
(
IS_IA32_PROCESS
(
ia64_task_regs
(
task
)))
...
...
arch/ia64/kernel/setup.c
View file @
0c860bc9
...
...
@@ -54,12 +54,10 @@
extern
char
_end
;
#ifdef CONFIG_NUMA
struct
cpuinfo_ia64
*
boot_cpu_data
;
#else
struct
cpuinfo_ia64
_cpu_data
[
NR_CPUS
]
__attribute__
((
section
(
"__special_page_section"
)));
#endif
unsigned
long
__per_cpu_offset
[
NR_CPUS
];
struct
cpuinfo_ia64
cpu_info
__per_cpu_data
;
unsigned
long
ia64_phys_stacked_size_p8
;
unsigned
long
ia64_cycles_per_usec
;
struct
ia64_boot_param
*
ia64_boot_param
;
struct
screen_info
screen_info
;
...
...
@@ -511,6 +509,12 @@ identify_cpu (struct cpuinfo_ia64 *c)
c
->
unimpl_pa_mask
=
~
((
1L
<<
63
)
|
((
1L
<<
phys_addr_size
)
-
1
));
}
void
setup_per_cpu_areas
(
void
)
{
/* start_kernel() requires this... */
}
/*
* cpu_init() initializes state that is per-CPU. This function acts
* as a 'CPU state barrier', nothing should get across.
...
...
@@ -518,46 +522,21 @@ identify_cpu (struct cpuinfo_ia64 *c)
void
cpu_init
(
void
)
{
extern
char
__per_cpu_start
[],
__phys_per_cpu_start
[],
__per_cpu_end
[];
extern
void
__init
ia64_mmu_init
(
void
*
);
unsigned
long
num_phys_stacked
;
pal_vm_info_2_u_t
vmi
;
unsigned
int
max_ctx
;
struct
cpuinfo_ia64
*
my_cpu_
data
;
#ifdef CONFIG_NUMA
int
cpu
,
order
;
struct
cpuinfo_ia64
*
my_cpu_
info
;
void
*
my_cpu_data
;
int
cpu
=
smp_processor_id
()
;
/*
* If NUMA is configured, the cpu_data array is not preallocated. The boot cpu
* allocates entries for every possible cpu. As the remaining cpus come online,
* they reallocate a new cpu_data structure on their local node. This extra work
* is required because some boot code references all cpu_data structures
* before the cpus are actually started.
*/
if
(
!
boot_cpu_data
)
{
my_cpu_data
=
alloc_bootmem_pages_node
(
NODE_DATA
(
numa_node_id
()),
sizeof
(
struct
cpuinfo_ia64
));
boot_cpu_data
=
my_cpu_data
;
my_cpu_data
->
cpu_data
[
0
]
=
my_cpu_data
;
for
(
cpu
=
1
;
cpu
<
NR_CPUS
;
++
cpu
)
my_cpu_data
->
cpu_data
[
cpu
]
=
alloc_bootmem_pages_node
(
NODE_DATA
(
numa_node_id
()),
sizeof
(
struct
cpuinfo_ia64
));
for
(
cpu
=
1
;
cpu
<
NR_CPUS
;
++
cpu
)
memcpy
(
my_cpu_data
->
cpu_data
[
cpu
]
->
cpu_data
,
my_cpu_data
->
cpu_data
,
sizeof
(
my_cpu_data
->
cpu_data
));
}
else
{
order
=
get_order
(
sizeof
(
struct
cpuinfo_ia64
));
my_cpu_data
=
page_address
(
alloc_pages_node
(
numa_node_id
(),
GFP_KERNEL
,
order
));
memcpy
(
my_cpu_data
,
boot_cpu_data
->
cpu_data
[
smp_processor_id
()],
sizeof
(
struct
cpuinfo_ia64
));
__free_pages
(
virt_to_page
(
boot_cpu_data
->
cpu_data
[
smp_processor_id
()]),
order
);
for
(
cpu
=
0
;
cpu
<
NR_CPUS
;
++
cpu
)
boot_cpu_data
->
cpu_data
[
cpu
]
->
cpu_data
[
smp_processor_id
()]
=
my_cpu_data
;
}
#else
my_cpu_data
=
cpu_data
(
smp_processor_id
());
#endif
my_cpu_data
=
alloc_bootmem_pages
(
__per_cpu_end
-
__per_cpu_start
);
memcpy
(
my_cpu_data
,
__phys_per_cpu_start
,
__per_cpu_end
-
__per_cpu_start
);
__per_cpu_offset
[
cpu
]
=
(
char
*
)
my_cpu_data
-
__per_cpu_start
;
my_cpu_info
=
my_cpu_data
+
((
char
*
)
&
cpu_info
-
__per_cpu_start
);
/*
* We can't pass "local_cpu_data" to identify_cpu() because we haven't called
...
...
@@ -565,7 +544,7 @@ cpu_init (void)
* depends on the data returned by identify_cpu(). We break the dependency by
* accessing cpu_data() the old way, through identity mapped space.
*/
identify_cpu
(
my_cpu_
data
);
identify_cpu
(
my_cpu_
info
);
/* Clear the stack memory reserved for pt_regs: */
memset
(
ia64_task_regs
(
current
),
0
,
sizeof
(
struct
pt_regs
));
...
...
@@ -626,7 +605,7 @@ cpu_init (void)
printk
(
"cpu_init: PAL RSE info failed, assuming 96 physical stacked regs
\n
"
);
num_phys_stacked
=
96
;
}
local_cpu_data
->
phys_stacked_size_p8
=
num_phys_stacked
*
8
+
8
;
/* size of physical stacked register partition plus 8 bytes: */
ia64_phys_stacked_size_p8
=
num_phys_stacked
*
8
+
8
;
platform_cpu_init
();
}
arch/ia64/kernel/smp.c
View file @
0c860bc9
...
...
@@ -75,12 +75,11 @@ struct call_data_struct {
static
volatile
struct
call_data_struct
*
call_data
;
static
spinlock_t
migration_lock
=
SPIN_LOCK_UNLOCKED
;
static
task_t
*
migrating_task
;
#define IPI_CALL_FUNC 0
#define IPI_CPU_STOP 1
#define IPI_MIGRATE_TASK 2
/* This needs to be cacheline aligned because it is written to by *other* CPUs. */
static
__u64
ipi_operation
__per_cpu_data
____cacheline_aligned
;
static
void
stop_this_cpu
(
void
)
...
...
@@ -99,7 +98,7 @@ void
handle_IPI
(
int
irq
,
void
*
dev_id
,
struct
pt_regs
*
regs
)
{
int
this_cpu
=
smp_processor_id
();
unsigned
long
*
pending_ipis
=
&
local_cpu_data
->
ipi_operation
;
unsigned
long
*
pending_ipis
=
&
ipi_operation
;
unsigned
long
ops
;
/* Count this now; we may make a call that never returns. */
...
...
@@ -143,14 +142,6 @@ handle_IPI (int irq, void *dev_id, struct pt_regs *regs)
}
break
;
case
IPI_MIGRATE_TASK
:
{
task_t
*
p
=
migrating_task
;
spin_unlock
(
&
migration_lock
);
sched_task_migrated
(
p
);
}
break
;
case
IPI_CPU_STOP
:
stop_this_cpu
();
break
;
...
...
@@ -167,7 +158,7 @@ handle_IPI (int irq, void *dev_id, struct pt_regs *regs)
static
inline
void
send_IPI_single
(
int
dest_cpu
,
int
op
)
{
set_bit
(
op
,
&
cpu_data
(
dest_cpu
)
->
ipi_operation
);
set_bit
(
op
,
&
ipi_operation
);
platform_send_ipi
(
dest_cpu
,
IA64_IPI_VECTOR
,
IA64_IPI_DM_INT
,
0
);
}
...
...
@@ -350,15 +341,6 @@ smp_send_stop (void)
smp_num_cpus
=
1
;
}
void
smp_migrate_task
(
int
cpu
,
task_t
*
p
)
{
/* The target CPU will unlock the migration spinlock: */
spin_lock
(
&
migration_lock
);
migrating_task
=
p
;
send_IPI_single
(
cpu
,
IPI_MIGRATE_TASK
);
}
int
__init
setup_profiling_timer
(
unsigned
int
multiplier
)
{
...
...
arch/ia64/lib/clear_page.S
View file @
0c860bc9
...
...
@@ -18,7 +18,7 @@
# define PREFETCH_LINES 9 // magic number
#else
# define L3_LINE_SIZE 128 // McKinley L3 line size
# define PREFETCH_LINES
7
// magic number
# define PREFETCH_LINES
12
// magic number
#endif
#define saved_lc r2
...
...
arch/ia64/mm/init.c
View file @
0c860bc9
...
...
@@ -103,12 +103,12 @@ free_initmem (void)
free_page
(
addr
);
++
totalram_pages
;
}
printk
(
"Freeing unused kernel memory: %ldkB freed
\n
"
,
(
&
__init_end
-
&
__init_begin
)
>>
10
);
printk
(
KERN_INFO
"Freeing unused kernel memory: %ldkB freed
\n
"
,
(
&
__init_end
-
&
__init_begin
)
>>
10
);
}
void
free_initrd_mem
(
unsigned
long
start
,
unsigned
long
end
)
free_initrd_mem
(
unsigned
long
start
,
unsigned
long
end
)
{
/*
* EFI uses 4KB pages while the kernel can use 4KB or bigger.
...
...
@@ -145,7 +145,7 @@ free_initrd_mem(unsigned long start, unsigned long end)
end
=
end
&
PAGE_MASK
;
if
(
start
<
end
)
printk
(
"Freeing initrd memory: %ldkB freed
\n
"
,
(
end
-
start
)
>>
10
);
printk
(
KERN_INFO
"Freeing initrd memory: %ldkB freed
\n
"
,
(
end
-
start
)
>>
10
);
for
(;
start
<
end
;
start
+=
PAGE_SIZE
)
{
if
(
!
VALID_PAGE
(
virt_to_page
(
start
)))
...
...
@@ -445,4 +445,4 @@ mem_init (void)
#ifdef CONFIG_IA32_SUPPORT
ia32_gdt_init
();
#endif
}
}
\ No newline at end of file
arch/ia64/tools/print_offsets.awk
View file @
0c860bc9
...
...
@@ -7,12 +7,6 @@ BEGIN {
print
" * This file was generated by arch/ia64/tools/print_offsets.awk."
print
" *"
print
" */"
#
# This is a cheesy hack. Make sure that
# PT_PTRACED == 1<<PT_PTRACED_BIT.
#
print
"#define PT_PTRACED_BIT 0"
print
"#define PT_SYSCALLTRACE_BIT 1"
}
# look for .tab:
...
...
arch/ia64/tools/print_offsets.c
View file @
0c860bc9
...
...
@@ -52,14 +52,7 @@ tab[] =
{
"SIGFRAME_SIZE"
,
sizeof
(
struct
sigframe
)
},
{
"UNW_FRAME_INFO_SIZE"
,
sizeof
(
struct
unw_frame_info
)
},
{
""
,
0
},
/* spacer */
{
"IA64_TASK_PTRACE_OFFSET"
,
offsetof
(
struct
task_struct
,
ptrace
)
},
{
"IA64_TASK_THREAD_OFFSET"
,
offsetof
(
struct
task_struct
,
thread
)
},
{
"IA64_TASK_THREAD_KSP_OFFSET"
,
offsetof
(
struct
task_struct
,
thread
.
ksp
)
},
#ifdef CONFIG_PERFMON
{
"IA64_TASK_PFM_OVFL_BLOCK_RESET_OFFSET"
,
offsetof
(
struct
task_struct
,
thread
.
pfm_ovfl_block_reset
)
},
#endif
{
"IA64_TASK_PID_OFFSET"
,
offsetof
(
struct
task_struct
,
pid
)
},
{
"IA64_TASK_MM_OFFSET"
,
offsetof
(
struct
task_struct
,
mm
)
},
{
"IA64_PT_REGS_CR_IPSR_OFFSET"
,
offsetof
(
struct
pt_regs
,
cr_ipsr
)
},
{
"IA64_PT_REGS_CR_IIP_OFFSET"
,
offsetof
(
struct
pt_regs
,
cr_iip
)
},
{
"IA64_PT_REGS_CR_IFS_OFFSET"
,
offsetof
(
struct
pt_regs
,
cr_ifs
)
},
...
...
@@ -169,9 +162,6 @@ tab[] =
{
"IA64_SIGFRAME_SIGCONTEXT_OFFSET"
,
offsetof
(
struct
sigframe
,
sc
)
},
{
"IA64_CLONE_VFORK"
,
CLONE_VFORK
},
{
"IA64_CLONE_VM"
,
CLONE_VM
},
{
"IA64_CPU_IRQ_COUNT_OFFSET"
,
offsetof
(
struct
cpuinfo_ia64
,
irq_stat
.
f
.
irq_count
)
},
{
"IA64_CPU_BH_COUNT_OFFSET"
,
offsetof
(
struct
cpuinfo_ia64
,
irq_stat
.
f
.
bh_count
)
},
{
"IA64_CPU_PHYS_STACKED_SIZE_P8_OFFSET"
,
offsetof
(
struct
cpuinfo_ia64
,
phys_stacked_size_p8
)},
};
static
const
char
*
tabs
=
"
\t\t\t\t\t\t\t\t\t\t
"
;
...
...
@@ -189,16 +179,6 @@ main (int argc, char **argv)
printf
(
"/*
\n
* DO NOT MODIFY
\n
*
\n
* This file was generated by "
"arch/ia64/tools/print_offsets.
\n
*
\n
*/
\n\n
"
);
/* This is stretching things a bit, but entry.S needs the bit number
for PT_PTRACED and it can't include <linux/sched.h> so this seems
like a reasonably solution. At least the code won't break in
subtle ways should PT_PTRACED ever change. Ditto for
PT_TRACESYS_BIT. */
printf
(
"#define PT_PTRACED_BIT
\t\t\t
%u
\n
"
,
ffs
(
PT_PTRACED
)
-
1
);
#if 0
printf ("#define PT_SYSCALLTRACE_BIT\t\t\t%u\n\n", ffs (PT_SYSCALLTRACE) - 1);
#endif
for
(
i
=
0
;
i
<
sizeof
(
tab
)
/
sizeof
(
tab
[
0
]);
++
i
)
{
if
(
tab
[
i
].
name
[
0
]
==
'\0'
)
...
...
arch/ia64/vmlinux.lds.S
View file @
0c860bc9
#include <linux/config.h>
#include <asm/cache.h>
#include <asm/ptrace.h>
#include <asm/system.h>
...
...
@@ -65,16 +66,6 @@ SECTIONS
machvec_end
=
.
;
#endif
__start___ksymtab
=
.
; /* Kernel symbol table */
__ksymtab
:
AT
(
ADDR
(
__ksymtab
)
-
PAGE_OFFSET
)
{
*(
__ksymtab
)
}
__stop___ksymtab
=
.
;
__start___kallsyms
=
.
; /* All kernel symbols for debugging */
__kallsyms
:
AT
(
ADDR
(
__kallsyms
)
-
PAGE_OFFSET
)
{
*(
__kallsyms
)
}
__stop___kallsyms
=
.
;
/
*
Unwind
info
&
table
:
*/
.
=
ALIGN
(
8
)
;
.
IA_64
.
unwind_info
:
AT
(
ADDR
(
.
IA_64
.
unwind_info
)
-
PAGE_OFFSET
)
...
...
@@ -124,10 +115,7 @@ SECTIONS
.
data.
init_task
:
AT
(
ADDR
(
.
data
.
init_task
)
-
PAGE_OFFSET
)
{
*(
.
data
.
init_task
)
}
.
data.
page_aligned
:
AT
(
ADDR
(
.
data
.
page_aligned
)
-
PAGE_OFFSET
)
{
*(
.
data
.
idt
)
}
.
=
ALIGN
(
64
)
;
.
=
ALIGN
(
SMP_CACHE_BYTES
)
;
.
data.
cacheline_aligned
:
AT
(
ADDR
(
.
data
.
cacheline_aligned
)
-
PAGE_OFFSET
)
{
*(
.
data
.
cacheline_aligned
)
}
...
...
@@ -135,6 +123,17 @@ SECTIONS
.
kstrtab
:
AT
(
ADDR
(
.
kstrtab
)
-
PAGE_OFFSET
)
{
*(
.
kstrtab
)
}
/
*
Per
-
cpu
data
:
*/
.
=
ALIGN
(
PAGE_SIZE
)
;
__phys_per_cpu_start
=
.
;
.
data.percpu
PERCPU_ADDR
:
AT
(
__phys_per_cpu_start
-
PAGE_OFFSET
)
{
__per_cpu_start
=
.
;
*(.
data.percpu
)
__per_cpu_end
=
.
;
}
.
=
__phys_per_cpu_start
+
4096
; /* ensure percpu fits into smallest page size (4KB) */
.
data
:
AT
(
ADDR
(
.
data
)
-
PAGE_OFFSET
)
{
*(
.
data
)
*(
.
gnu
.
linkonce
.
d
*)
CONSTRUCTORS
}
...
...
@@ -151,7 +150,7 @@ SECTIONS
{
*(
.
sbss
)
*(
.
scommon
)
}
.
bss
:
AT
(
ADDR
(
.
bss
)
-
PAGE_OFFSET
)
{
*(
.
bss
)
*(
COMMON
)
}
.
=
ALIGN
(
64
/
8
)
;
_end
=
.
;
/
*
Stabs
debugging
sections
.
*/
...
...
include/asm-ia64/cache.h
View file @
0c860bc9
...
...
@@ -5,7 +5,7 @@
/*
* Copyright (C) 1998-2000 Hewlett-Packard Co
*
Copyright (C) 1998-2000
David Mosberger-Tang <davidm@hpl.hp.com>
*
David Mosberger-Tang <davidm@hpl.hp.com>
*/
/* Bytes per L1 (data) cache line. */
...
...
include/asm-ia64/hardirq.h
View file @
0c860bc9
...
...
@@ -2,8 +2,8 @@
#define _ASM_IA64_HARDIRQ_H
/*
* Copyright (C) 1998-200
1
Hewlett-Packard Co
*
Copyright (C) 1998-2001
David Mosberger-Tang <davidm@hpl.hp.com>
* Copyright (C) 1998-200
2
Hewlett-Packard Co
*
David Mosberger-Tang <davidm@hpl.hp.com>
*/
#include <linux/config.h>
...
...
include/asm-ia64/offsets.h
View file @
0c860bc9
...
...
@@ -6,23 +6,16 @@
* This file was generated by arch/ia64/tools/print_offsets.awk.
*
*/
#define PT_PTRACED_BIT 0
#define PT_SYSCALLTRACE_BIT 1
#define IA64_TASK_SIZE 3936
/* 0xf60 */
#define IA64_THREAD_INFO_SIZE 24
/* 0x18 */
#define IA64_PT_REGS_SIZE 400
/* 0x190 */
#define IA64_SWITCH_STACK_SIZE 560
/* 0x230 */
#define IA64_SIGINFO_SIZE 128
/* 0x80 */
#define IA64_CPU_SIZE
16384
/* 0x400
0 */
#define IA64_CPU_SIZE
224
/* 0xe
0 */
#define SIGFRAME_SIZE 2816
/* 0xb00 */
#define UNW_FRAME_INFO_SIZE 448
/* 0x1c0 */
#define IA64_TASK_PTRACE_OFFSET 32
/* 0x20 */
#define IA64_TASK_THREAD_OFFSET 1472
/* 0x5c0 */
#define IA64_TASK_THREAD_KSP_OFFSET 1480
/* 0x5c8 */
#define IA64_TASK_PFM_OVFL_BLOCK_RESET_OFFSET 2096
/* 0x830 */
#define IA64_TASK_PID_OFFSET 212
/* 0xd4 */
#define IA64_TASK_MM_OFFSET 136
/* 0x88 */
#define IA64_PT_REGS_CR_IPSR_OFFSET 0
/* 0x0 */
#define IA64_PT_REGS_CR_IIP_OFFSET 8
/* 0x8 */
#define IA64_PT_REGS_CR_IFS_OFFSET 16
/* 0x10 */
...
...
@@ -132,8 +125,5 @@
#define IA64_SIGFRAME_SIGCONTEXT_OFFSET 160
/* 0xa0 */
#define IA64_CLONE_VFORK 16384
/* 0x4000 */
#define IA64_CLONE_VM 256
/* 0x100 */
#define IA64_CPU_IRQ_COUNT_OFFSET 0
/* 0x0 */
#define IA64_CPU_BH_COUNT_OFFSET 4
/* 0x4 */
#define IA64_CPU_PHYS_STACKED_SIZE_P8_OFFSET 12
/* 0xc */
#endif
/* _ASM_IA64_OFFSETS_H */
include/asm-ia64/processor.h
View file @
0c860bc9
...
...
@@ -15,6 +15,8 @@
#include <linux/config.h>
#include <linux/compiler.h>
#include <asm/ptrace.h>
#include <asm/kregs.h>
#include <asm/system.h>
...
...
@@ -184,6 +186,10 @@
*/
#define IA64_USEC_PER_CYC_SHIFT 41
#define __HAVE_ARCH_PER_CPU
#define THIS_CPU(var) (var)
#ifndef __ASSEMBLY__
#include <linux/threads.h>
...
...
@@ -196,6 +202,11 @@
#include <asm/unwind.h>
#include <asm/atomic.h>
extern
unsigned
long
__per_cpu_offset
[
NR_CPUS
];
#define per_cpu(var, cpu) (*(__typeof__(&(var))) ((void *) &(var) + __per_cpu_offset[cpu]))
#define this_cpu(var) (var)
/* like above but expressed as bitfields for more efficient access: */
struct
ia64_psr
{
__u64
reserved0
:
1
;
...
...
@@ -239,7 +250,7 @@ struct ia64_psr {
* CPU type, hardware bug flags, and per-CPU state. Frequently used
* state comes earlier:
*/
struct
cpuinfo_ia64
{
extern
struct
cpuinfo_ia64
{
/* irq_stat must be 64-bit aligned */
union
{
struct
{
...
...
@@ -249,7 +260,6 @@ struct cpuinfo_ia64 {
__u64
irq_and_bh_counts
;
}
irq_stat
;
__u32
softirq_pending
;
__u32
phys_stacked_size_p8
;
/* size of physical stacked registers + 8 */
__u64
itm_delta
;
/* # of clock cycles between clock ticks */
__u64
itm_next
;
/* interval timer mask value to use for next clock tick */
__u64
*
pgd_quick
;
...
...
@@ -282,41 +292,15 @@ struct cpuinfo_ia64 {
__u64
prof_multiplier
;
__u32
pfm_syst_wide
;
__u32
pfm_dcr_pp
;
/* this is written to by *other* CPUs: */
__u64
ipi_operation
____cacheline_aligned
;
#endif
#ifdef CONFIG_NUMA
void
*
node_directory
;
int
numa_node_id
;
struct
cpuinfo_ia64
*
cpu_data
[
NR_CPUS
];
#endif
/* Platform specific word. MUST BE LAST IN STRUCT */
__u64
platform_specific
;
}
__attribute__
((
aligned
(
PAGE_SIZE
)))
;
}
cpu_info
__per_cpu_data
;
/*
* The "local" data pointer. It points to the per-CPU data of the currently executing
* CPU, much like "current" points to the per-task data of the currently executing task.
*/
#define local_cpu_data ((struct cpuinfo_ia64 *) PERCPU_ADDR)
/*
* On NUMA systems, cpu_data for each cpu is allocated during cpu_init() & is allocated on
* the node that contains the cpu. This minimizes off-node memory references. cpu_data
* for each cpu contains an array of pointers to the cpu_data structures of each of the
* other cpus.
*
* On non-NUMA systems, cpu_data is a static array allocated at compile time. References
* to the cpu_data of another cpu is done by direct references to the appropriate entry of
* the array.
*/
#ifdef CONFIG_NUMA
# define cpu_data(cpu) local_cpu_data->cpu_data[cpu]
# define numa_node_id() (local_cpu_data->numa_node_id)
#else
extern
struct
cpuinfo_ia64
_cpu_data
[
NR_CPUS
];
# define cpu_data(cpu) (&_cpu_data[cpu])
#endif
#define local_cpu_data (&this_cpu(cpu_info))
#define cpu_data(cpu) (&per_cpu(cpu_info, cpu))
extern
void
identify_cpu
(
struct
cpuinfo_ia64
*
);
extern
void
print_cpu_info
(
struct
cpuinfo_ia64
*
);
...
...
include/asm-ia64/siginfo.h
View file @
0c860bc9
...
...
@@ -136,6 +136,7 @@ typedef struct siginfo {
#define SI_ASYNCIO (-4)
/* sent by AIO completion */
#define SI_SIGIO (-5)
/* sent by queued SIGIO */
#define SI_TKILL (-6)
/* sent by tkill system call */
#define SI_DETHREAD (-7)
/* sent by execve() killing subsidiary threads */
#define SI_FROMUSER(siptr) ((siptr)->si_code <= 0)
#define SI_FROMKERNEL(siptr) ((siptr)->si_code > 0)
...
...
include/asm-ia64/smplock.h
View file @
0c860bc9
...
...
@@ -12,30 +12,36 @@
extern
spinlock_t
kernel_flag
;
#define kernel_locked() spin_is_locked(&kernel_flag)
#ifdef CONFIG_SMP
# define kernel_locked() spin_is_locked(&kernel_flag)
# define check_irq_holder(cpu) \
do { \
if (global_irq_holder == (cpu)) \
BUG(); \
} while (0)
#else
# define kernel_locked() (1)
#endif
/*
* Release global kernel lock and global interrupt lock
*/
static
__inline__
void
release_kernel_lock
(
struct
task_struct
*
task
,
int
cpu
)
{
if
(
unlikely
(
task
->
lock_depth
>=
0
))
{
spin_unlock
(
&
kernel_flag
);
if
(
global_irq_holder
==
(
cpu
))
\
BUG
();
\
}
}
#define release_kernel_lock(task, cpu) \
do { \
if (unlikely(task->lock_depth >= 0)) { \
spin_unlock(&kernel_flag); \
check_irq_holder(cpu); \
} \
} while (0)
/*
* Re-acquire the kernel lock
*/
static
__inline__
void
reacquire_kernel_lock
(
struct
task_struct
*
task
)
{
if
(
unlikely
(
task
->
lock_depth
>=
0
))
spin_lock
(
&
kernel_flag
);
}
#define reacquire_kernel_lock(task) \
do { \
if (unlikely(task->lock_depth >= 0)) \
spin_lock(&kernel_flag); \
} while (0)
/*
* Getting the big kernel lock.
...
...
kernel/sched.c
View file @
0c860bc9
...
...
@@ -1451,8 +1451,10 @@ void __init init_idle(task_t *idle, int cpu)
set_tsk_need_resched
(
idle
);
__restore_flags
(
flags
);
#ifdef CONFIG_PREEMPT
/* Set the preempt count _outside_ the spinlocks! */
idle
->
thread_info
->
preempt_count
=
(
idle
->
lock_depth
>=
0
);
#endif
}
extern
void
init_timervecs
(
void
);
...
...
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