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
nexedi
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
Show 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
;
/*
* 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
)
{
ia64_psr
(
regs
)
->
pp
=
0
;
__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
*/
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
]));
/* 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
);
}
}
/*
* 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
"
,
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
)))
...
...
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