Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
gsplhtlxg
clone-Linux
提交
89a2fa5f
C
clone-Linux
项目概览
gsplhtlxg
/
clone-Linux
通知
2
Star
0
Fork
1
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
C
clone-Linux
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
89a2fa5f
编写于
2月 03, 2006
作者:
L
Linus Torvalds
浏览文件
操作
浏览文件
下载
差异文件
Merge master.kernel.org:/pub/scm/linux/kernel/git/kyle/parisc-2.6
上级
27266a18
68ee3eb8
变更
40
展开全部
隐藏空白更改
内联
并排
Showing
40 changed file
with
904 addition
and
328 deletion
+904
-328
arch/parisc/Kconfig
arch/parisc/Kconfig
+13
-7
arch/parisc/Kconfig.debug
arch/parisc/Kconfig.debug
+10
-0
arch/parisc/configs/b180_defconfig
arch/parisc/configs/b180_defconfig
+146
-36
arch/parisc/hpux/entry_hpux.S
arch/parisc/hpux/entry_hpux.S
+1
-2
arch/parisc/kernel/drivers.c
arch/parisc/kernel/drivers.c
+1
-2
arch/parisc/kernel/parisc_ksyms.c
arch/parisc/kernel/parisc_ksyms.c
+0
-3
arch/parisc/kernel/pci.c
arch/parisc/kernel/pci.c
+7
-6
arch/parisc/kernel/perf.c
arch/parisc/kernel/perf.c
+18
-20
arch/parisc/kernel/perf_images.h
arch/parisc/kernel/perf_images.h
+2
-2
arch/parisc/kernel/process.c
arch/parisc/kernel/process.c
+6
-29
arch/parisc/kernel/ptrace.c
arch/parisc/kernel/ptrace.c
+4
-4
arch/parisc/kernel/signal.c
arch/parisc/kernel/signal.c
+1
-1
arch/parisc/kernel/signal32.c
arch/parisc/kernel/signal32.c
+101
-1
arch/parisc/kernel/signal32.h
arch/parisc/kernel/signal32.h
+125
-2
arch/parisc/kernel/syscall.S
arch/parisc/kernel/syscall.S
+2
-0
arch/parisc/kernel/syscall_table.S
arch/parisc/kernel/syscall_table.S
+19
-0
arch/parisc/kernel/traps.c
arch/parisc/kernel/traps.c
+1
-2
arch/parisc/math-emu/decode_exc.c
arch/parisc/math-emu/decode_exc.c
+1
-0
arch/parisc/mm/init.c
arch/parisc/mm/init.c
+17
-18
drivers/parisc/ccio-dma.c
drivers/parisc/ccio-dma.c
+3
-4
drivers/parisc/dino.c
drivers/parisc/dino.c
+1
-3
drivers/parisc/hppb.c
drivers/parisc/hppb.c
+1
-2
drivers/parisc/iosapic.c
drivers/parisc/iosapic.c
+2
-6
drivers/parisc/lasi.c
drivers/parisc/lasi.c
+3
-2
drivers/parisc/lba_pci.c
drivers/parisc/lba_pci.c
+2
-4
drivers/parisc/pdc_stable.c
drivers/parisc/pdc_stable.c
+262
-94
drivers/parisc/sba_iommu.c
drivers/parisc/sba_iommu.c
+1
-2
drivers/parisc/superio.c
drivers/parisc/superio.c
+22
-19
drivers/parisc/wax.c
drivers/parisc/wax.c
+1
-1
drivers/parport/parport_gsc.c
drivers/parport/parport_gsc.c
+1
-1
drivers/video/console/sticore.c
drivers/video/console/sticore.c
+19
-26
include/asm-parisc/atomic.h
include/asm-parisc/atomic.h
+69
-15
include/asm-parisc/cacheflush.h
include/asm-parisc/cacheflush.h
+6
-0
include/asm-parisc/compat_ucontext.h
include/asm-parisc/compat_ucontext.h
+1
-2
include/asm-parisc/grfioctl.h
include/asm-parisc/grfioctl.h
+1
-1
include/asm-parisc/pci.h
include/asm-parisc/pci.h
+13
-4
include/asm-parisc/pgalloc.h
include/asm-parisc/pgalloc.h
+0
-1
include/asm-parisc/pgtable.h
include/asm-parisc/pgtable.h
+1
-1
include/asm-parisc/rt_sigframe.h
include/asm-parisc/rt_sigframe.h
+0
-4
include/asm-parisc/unistd.h
include/asm-parisc/unistd.h
+20
-1
未找到文件。
arch/parisc/Kconfig
浏览文件 @
89a2fa5f
...
...
@@ -149,14 +149,20 @@ config HOTPLUG_CPU
default y if SMP
select HOTPLUG
config ARCH_SELECT_MEMORY_MODEL
def_bool y
depends on 64BIT
config ARCH_DISCONTIGMEM_ENABLE
bool "Discontiguous memory support (EXPERIMENTAL)"
depends on 64BIT && EXPERIMENTAL
help
Say Y to support efficient handling of discontiguous physical memory,
for architectures which are either NUMA (Non-Uniform Memory Access)
or have huge holes in the physical address space for other reasons.
See <file:Documentation/vm/numa> for more.
def_bool y
depends on 64BIT
config ARCH_FLATMEM_ENABLE
def_bool y
config ARCH_DISCONTIGMEM_DEFAULT
def_bool y
depends on ARCH_DISCONTIGMEM_ENABLE
source "kernel/Kconfig.hz"
source "mm/Kconfig"
...
...
arch/parisc/Kconfig.debug
浏览文件 @
89a2fa5f
...
...
@@ -11,4 +11,14 @@ config DEBUG_RWLOCK
too many attempts. If you suspect a rwlock problem or a kernel
hacker asks for this option then say Y. Otherwise say N.
config DEBUG_RODATA
bool "Write protect kernel read-only data structures"
depends on DEBUG_KERNEL
help
Mark the kernel read-only data as write-protected in the pagetables,
in order to catch accidental (and incorrect) writes to such const
data. This option may have a slight performance impact because a
portion of the kernel code won't be covered by a TLB anymore.
If in doubt, say "N".
endmenu
arch/parisc/configs/b180_defconfig
浏览文件 @
89a2fa5f
#
# Automatically generated make config: don't edit
# Linux kernel version: 2.6.1
4-rc5-pa1
#
Fri Oct 21 23:06:10 2005
# Linux kernel version: 2.6.1
6-rc1-pa0
#
Tue Jan 17 08:21:01 2006
#
CONFIG_PARISC=y
CONFIG_MMU=y
...
...
@@ -29,8 +29,6 @@ CONFIG_SYSVIPC=y
# CONFIG_BSD_PROCESS_ACCT is not set
CONFIG_SYSCTL=y
# CONFIG_AUDIT is not set
# CONFIG_HOTPLUG is not set
CONFIG_KOBJECT_UEVENT=y
CONFIG_IKCONFIG=y
CONFIG_IKCONFIG_PROC=y
CONFIG_INITRAMFS_SOURCE=""
...
...
@@ -38,8 +36,10 @@ CONFIG_INITRAMFS_SOURCE=""
CONFIG_KALLSYMS=y
# CONFIG_KALLSYMS_ALL is not set
# CONFIG_KALLSYMS_EXTRA_PASS is not set
CONFIG_HOTPLUG=y
CONFIG_PRINTK=y
CONFIG_BUG=y
CONFIG_ELF_CORE=y
CONFIG_BASE_FULL=y
CONFIG_FUTEX=y
CONFIG_EPOLL=y
...
...
@@ -48,8 +48,10 @@ CONFIG_CC_ALIGN_FUNCTIONS=0
CONFIG_CC_ALIGN_LABELS=0
CONFIG_CC_ALIGN_LOOPS=0
CONFIG_CC_ALIGN_JUMPS=0
CONFIG_SLAB=y
# CONFIG_TINY_SHMEM is not set
CONFIG_BASE_SMALL=0
# CONFIG_SLOB is not set
#
# Loadable module support
...
...
@@ -57,9 +59,27 @@ CONFIG_BASE_SMALL=0
CONFIG_MODULES=y
# CONFIG_MODULE_UNLOAD is not set
CONFIG_OBSOLETE_MODPARM=y
CONFIG_MODVERSIONS=y
# CONFIG_MODULE_SRCVERSION_ALL is not set
# CONFIG_KMOD is not set
#
# Block layer
#
#
# IO Schedulers
#
CONFIG_IOSCHED_NOOP=y
CONFIG_IOSCHED_AS=y
CONFIG_IOSCHED_DEADLINE=y
CONFIG_IOSCHED_CFQ=y
# CONFIG_DEFAULT_AS is not set
# CONFIG_DEFAULT_DEADLINE is not set
CONFIG_DEFAULT_CFQ=y
# CONFIG_DEFAULT_NOOP is not set
CONFIG_DEFAULT_IOSCHED="cfq"
#
# Processor type and features
#
...
...
@@ -77,6 +97,7 @@ CONFIG_HZ=250
CONFIG_FLATMEM=y
CONFIG_FLAT_NODE_MEM_MAP=y
# CONFIG_SPARSEMEM_STATIC is not set
CONFIG_SPLIT_PTLOCK_CPUS=4096
# CONFIG_PREEMPT is not set
# CONFIG_HPUX is not set
...
...
@@ -84,8 +105,8 @@ CONFIG_FLAT_NODE_MEM_MAP=y
# Bus options (PCI, PCMCIA, EISA, GSC, ISA)
#
CONFIG_GSC=y
# CONFIG_HPPB is not set
# CONFIG_IOMMU_CCIO is not set
CONFIG_HPPB=y
CONFIG_IOMMU_CCIO=y
CONFIG_GSC_LASI=y
CONFIG_GSC_WAX=y
CONFIG_EISA=y
...
...
@@ -165,8 +186,11 @@ CONFIG_IPV6=y
# CONFIG_LLC2 is not set
# CONFIG_IPX is not set
# CONFIG_ATALK is not set
#
# QoS and/or fair queueing
#
# CONFIG_NET_SCHED is not set
# CONFIG_NET_CLS_ROUTE is not set
#
# Network testing
...
...
@@ -205,6 +229,7 @@ CONFIG_STANDALONE=y
CONFIG_PARPORT=y
CONFIG_PARPORT_PC=y
# CONFIG_PARPORT_SERIAL is not set
CONFIG_PARPORT_NOT_PC=y
CONFIG_PARPORT_GSC=y
# CONFIG_PARPORT_1284 is not set
...
...
@@ -230,14 +255,6 @@ CONFIG_BLK_DEV_RAM_COUNT=16
CONFIG_CDROM_PKTCDVD=m
CONFIG_CDROM_PKTCDVD_BUFFERS=8
# CONFIG_CDROM_PKTCDVD_WCACHE is not set
#
# IO Schedulers
#
CONFIG_IOSCHED_NOOP=y
CONFIG_IOSCHED_AS=y
CONFIG_IOSCHED_DEADLINE=y
CONFIG_IOSCHED_CFQ=y
CONFIG_ATA_OVER_ETH=y
#
...
...
@@ -281,6 +298,7 @@ CONFIG_SCSI_SPI_ATTRS=y
#
# SCSI low-level drivers
#
# CONFIG_ISCSI_TCP is not set
# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
# CONFIG_SCSI_3W_9XXX is not set
# CONFIG_SCSI_ACARD is not set
...
...
@@ -313,21 +331,19 @@ CONFIG_SCSI_SYM53C8XX_2=y
CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=0
CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16
CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64
# CONFIG_SCSI_SYM53C8XX_IOMAPPED is not set
CONFIG_SCSI_SYM53C8XX_MMIO=y
# CONFIG_SCSI_IPR is not set
# CONFIG_SCSI_ZALON is not set
CONFIG_SCSI_ZALON=y
CONFIG_SCSI_NCR53C8XX_DEFAULT_TAGS=8
CONFIG_SCSI_NCR53C8XX_MAX_TAGS=32
CONFIG_SCSI_NCR53C8XX_SYNC=40
# CONFIG_SCSI_NCR53C8XX_PROFILE is not set
# CONFIG_SCSI_PAS16 is not set
# CONFIG_SCSI_PSI240I is not set
# CONFIG_SCSI_QLOGIC_FAS is not set
# CONFIG_SCSI_QLOGIC_FC is not set
# CONFIG_SCSI_QLOGIC_1280 is not set
CONFIG_SCSI_QLA2XXX=y
# CONFIG_SCSI_QLA21XX is not set
# CONFIG_SCSI_QLA22XX is not set
# CONFIG_SCSI_QLA2300 is not set
# CONFIG_SCSI_QLA2322 is not set
# CONFIG_SCSI_QLA6312 is not set
# CONFIG_SCSI_QLA24XX is not set
# CONFIG_SCSI_QLA_FC is not set
# CONFIG_SCSI_LPFC is not set
# CONFIG_SCSI_SIM710 is not set
# CONFIG_SCSI_SYM53C416 is not set
...
...
@@ -397,7 +413,7 @@ CONFIG_NETDEVICES=y
#
CONFIG_NET_ETHERNET=y
# CONFIG_MII is not set
# CONFIG_LASI_82596 is not set
CONFIG_LASI_82596=y
# CONFIG_HAPPYMEAL is not set
# CONFIG_SUNGEM is not set
# CONFIG_CASSINI is not set
...
...
@@ -464,6 +480,7 @@ CONFIG_NET_RADIO=y
# Wireless 802.11b ISA/PCI cards support
#
# CONFIG_HERMES is not set
# CONFIG_ATMEL is not set
#
# Prism GT/Duette 802.11(a/b/g) PCI/Cardbus support
...
...
@@ -527,7 +544,7 @@ CONFIG_KEYBOARD_ATKBD_HP_KEYCODES=y
# CONFIG_KEYBOARD_XTKBD is not set
# CONFIG_KEYBOARD_NEWTON is not set
# CONFIG_KEYBOARD_HIL_OLD is not set
# CONFIG_KEYBOARD_HIL is not set
CONFIG_KEYBOARD_HIL=y
CONFIG_INPUT_MOUSE=y
CONFIG_MOUSE_PS2=y
# CONFIG_MOUSE_SERIAL is not set
...
...
@@ -535,7 +552,7 @@ CONFIG_MOUSE_PS2=y
# CONFIG_MOUSE_LOGIBM is not set
# CONFIG_MOUSE_PC110PAD is not set
# CONFIG_MOUSE_VSXXXAA is not set
# CONFIG_MOUSE_HIL is not set
CONFIG_MOUSE_HIL=y
# CONFIG_INPUT_JOYSTICK is not set
# CONFIG_INPUT_TOUCHSCREEN is not set
CONFIG_INPUT_MISC=y
...
...
@@ -549,7 +566,8 @@ CONFIG_SERIO=y
# CONFIG_SERIO_SERPORT is not set
# CONFIG_SERIO_PARKBD is not set
CONFIG_SERIO_GSCPS2=y
# CONFIG_HP_SDC is not set
CONFIG_HP_SDC=y
CONFIG_HIL_MLC=y
# CONFIG_SERIO_PCIPS2 is not set
CONFIG_SERIO_LIBPS2=y
# CONFIG_SERIO_RAW is not set
...
...
@@ -569,6 +587,7 @@ CONFIG_HW_CONSOLE=y
CONFIG_SERIAL_8250=y
CONFIG_SERIAL_8250_CONSOLE=y
CONFIG_SERIAL_8250_NR_UARTS=13
CONFIG_SERIAL_8250_RUNTIME_UARTS=4
CONFIG_SERIAL_8250_EXTENDED=y
CONFIG_SERIAL_8250_MANY_PORTS=y
CONFIG_SERIAL_8250_SHARE_IRQ=y
...
...
@@ -582,11 +601,10 @@ CONFIG_SERIAL_8250_SHARE_IRQ=y
#
# Non-8250 serial port support
#
# CONFIG_SERIAL_MUX is not set
# CONFIG_PDC_CONSOLE is not set
CONFIG_SERIAL_MUX=y
CONFIG_SERIAL_MUX_CONSOLE=y
CONFIG_SERIAL_CORE=y
CONFIG_SERIAL_CORE_CONSOLE=y
# CONFIG_SERIAL_JSM is not set
CONFIG_UNIX98_PTYS=y
CONFIG_LEGACY_PTYS=y
CONFIG_LEGACY_PTY_COUNT=256
...
...
@@ -625,6 +643,12 @@ CONFIG_GEN_RTC=y
#
# CONFIG_I2C is not set
#
# SPI support
#
# CONFIG_SPI is not set
# CONFIG_SPI_MASTER is not set
#
# Dallas's 1-wire bus
#
...
...
@@ -661,7 +685,6 @@ CONFIG_FB=y
CONFIG_FB_CFB_FILLRECT=y
CONFIG_FB_CFB_COPYAREA=y
CONFIG_FB_CFB_IMAGEBLIT=y
CONFIG_FB_SOFT_CURSOR=y
# CONFIG_FB_MACMODES is not set
# CONFIG_FB_MODE_HELPERS is not set
# CONFIG_FB_TILEBLITTING is not set
...
...
@@ -671,6 +694,7 @@ CONFIG_FB_SOFT_CURSOR=y
# CONFIG_FB_ASILIANT is not set
# CONFIG_FB_IMSTT is not set
CONFIG_FB_STI=y
# CONFIG_FB_S1D13XXX is not set
# CONFIG_FB_NVIDIA is not set
# CONFIG_FB_RIVA is not set
# CONFIG_FB_MATROX is not set
...
...
@@ -683,9 +707,7 @@ CONFIG_FB_STI=y
# CONFIG_FB_KYRO is not set
# CONFIG_FB_3DFX is not set
# CONFIG_FB_VOODOO1 is not set
# CONFIG_FB_CYBLA is not set
# CONFIG_FB_TRIDENT is not set
# CONFIG_FB_S1D13XXX is not set
# CONFIG_FB_VIRTUAL is not set
#
...
...
@@ -695,6 +717,7 @@ CONFIG_DUMMY_CONSOLE=y
CONFIG_DUMMY_CONSOLE_COLUMNS=160
CONFIG_DUMMY_CONSOLE_ROWS=64
CONFIG_FRAMEBUFFER_CONSOLE=y
# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
CONFIG_STI_CONSOLE=y
# CONFIG_FONTS is not set
CONFIG_FONT_8x8=y
...
...
@@ -713,7 +736,85 @@ CONFIG_LOGO_PARISC_CLUT224=y
#
# Sound
#
# CONFIG_SOUND is not set
CONFIG_SOUND=y
#
# Advanced Linux Sound Architecture
#
CONFIG_SND=y
CONFIG_SND_TIMER=y
CONFIG_SND_PCM=y
CONFIG_SND_SEQUENCER=y
# CONFIG_SND_SEQ_DUMMY is not set
CONFIG_SND_OSSEMUL=y
CONFIG_SND_MIXER_OSS=y
CONFIG_SND_PCM_OSS=y
CONFIG_SND_SEQUENCER_OSS=y
CONFIG_SND_SUPPORT_OLD_API=y
# CONFIG_SND_VERBOSE_PRINTK is not set
# CONFIG_SND_DEBUG is not set
#
# Generic devices
#
# CONFIG_SND_DUMMY is not set
# CONFIG_SND_VIRMIDI is not set
# CONFIG_SND_MTPAV is not set
# CONFIG_SND_SERIAL_U16550 is not set
# CONFIG_SND_MPU401 is not set
#
# PCI devices
#
# CONFIG_SND_AD1889 is not set
# CONFIG_SND_ALI5451 is not set
# CONFIG_SND_ATIIXP is not set
# CONFIG_SND_ATIIXP_MODEM is not set
# CONFIG_SND_AU8810 is not set
# CONFIG_SND_AU8820 is not set
# CONFIG_SND_AU8830 is not set
# CONFIG_SND_BT87X is not set
# CONFIG_SND_CA0106 is not set
# CONFIG_SND_CMIPCI is not set
# CONFIG_SND_CS4281 is not set
# CONFIG_SND_CS46XX is not set
# CONFIG_SND_EMU10K1 is not set
# CONFIG_SND_EMU10K1X is not set
# CONFIG_SND_ENS1370 is not set
# CONFIG_SND_ENS1371 is not set
# CONFIG_SND_ES1938 is not set
# CONFIG_SND_ES1968 is not set
# CONFIG_SND_FM801 is not set
# CONFIG_SND_HDA_INTEL is not set
# CONFIG_SND_HDSP is not set
# CONFIG_SND_HDSPM is not set
# CONFIG_SND_ICE1712 is not set
# CONFIG_SND_ICE1724 is not set
# CONFIG_SND_INTEL8X0 is not set
# CONFIG_SND_KORG1212 is not set
# CONFIG_SND_MAESTRO3 is not set
# CONFIG_SND_MIXART is not set
# CONFIG_SND_NM256 is not set
# CONFIG_SND_PCXHR is not set
# CONFIG_SND_RME32 is not set
# CONFIG_SND_RME96 is not set
# CONFIG_SND_RME9652 is not set
# CONFIG_SND_SONICVIBES is not set
# CONFIG_SND_TRIDENT is not set
# CONFIG_SND_VIA82XX is not set
# CONFIG_SND_VIA82XX_MODEM is not set
# CONFIG_SND_VX222 is not set
# CONFIG_SND_YMFPCI is not set
#
# GSC devices
#
CONFIG_SND_HARMONY=y
#
# Open Sound System
#
# CONFIG_SOUND_PRIME is not set
#
# USB support
...
...
@@ -722,6 +823,10 @@ CONFIG_USB_ARCH_HAS_HCD=y
CONFIG_USB_ARCH_HAS_OHCI=y
# CONFIG_USB is not set
#
# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
#
#
# USB Gadget Support
#
...
...
@@ -877,18 +982,23 @@ CONFIG_NLS_DEFAULT="iso8859-1"
# Kernel hacking
#
# CONFIG_PRINTK_TIME is not set
CONFIG_DEBUG_KERNEL=y
CONFIG_MAGIC_SYSRQ=y
CONFIG_DEBUG_KERNEL=y
CONFIG_LOG_BUF_SHIFT=16
CONFIG_DETECT_SOFTLOCKUP=y
# CONFIG_SCHEDSTATS is not set
# CONFIG_DEBUG_SLAB is not set
# CONFIG_DEBUG_MUTEXES is not set
# CONFIG_DEBUG_SPINLOCK is not set
# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
# CONFIG_DEBUG_KOBJECT is not set
# CONFIG_DEBUG_INFO is not set
# CONFIG_DEBUG_IOREMAP is not set
# CONFIG_DEBUG_FS is not set
# CONFIG_DEBUG_VM is not set
CONFIG_FORCED_INLINING=y
# CONFIG_RCU_TORTURE_TEST is not set
# CONFIG_DEBUG_RODATA is not set
#
# Security options
...
...
arch/parisc/hpux/entry_hpux.S
浏览文件 @
89a2fa5f
...
...
@@ -22,10 +22,9 @@
#include <linux/linkage.h>
#include <asm/unistd.h>
.
text
#define ENTRY_NAME(_name_) .word _name_
.
section
.
rodata
,
"a"
.
align
4
.
export
hpux_call_table
.
import
hpux_unimplemented_wrapper
...
...
arch/parisc/kernel/drivers.c
浏览文件 @
89a2fa5f
...
...
@@ -408,11 +408,10 @@ static void setup_bus_id(struct parisc_device *padev)
struct
parisc_device
*
create_tree_node
(
char
id
,
struct
device
*
parent
)
{
struct
parisc_device
*
dev
=
k
m
alloc
(
sizeof
(
*
dev
),
GFP_KERNEL
);
struct
parisc_device
*
dev
=
k
z
alloc
(
sizeof
(
*
dev
),
GFP_KERNEL
);
if
(
!
dev
)
return
NULL
;
memset
(
dev
,
0
,
sizeof
(
*
dev
));
dev
->
hw_path
=
id
;
dev
->
id
.
hw_type
=
HPHW_FAULTY
;
...
...
arch/parisc/kernel/parisc_ksyms.c
浏览文件 @
89a2fa5f
...
...
@@ -48,9 +48,6 @@ EXPORT_SYMBOL(strrchr);
EXPORT_SYMBOL
(
strstr
);
EXPORT_SYMBOL
(
strpbrk
);
#include <linux/pm.h>
EXPORT_SYMBOL
(
pm_power_off
);
#include <asm/atomic.h>
EXPORT_SYMBOL
(
__xchg8
);
EXPORT_SYMBOL
(
__xchg32
);
...
...
arch/parisc/kernel/pci.c
浏览文件 @
89a2fa5f
...
...
@@ -47,18 +47,17 @@
* this makes the boot time much longer than necessary.
* 20ms seems to work for all the HP PCI implementations to date.
*
*
XXX: turn into a #defined constant in <asm/pci.h> ?
*
#define pci_post_reset_delay 50
*/
int
pci_post_reset_delay
=
50
;
struct
pci_port_ops
*
pci_port
;
struct
pci_bios_ops
*
pci_bios
;
struct
pci_port_ops
*
pci_port
__read_mostly
;
struct
pci_bios_ops
*
pci_bios
__read_mostly
;
int
pci_hba_count
=
0
;
static
int
pci_hba_count
__read_mostly
;
/* parisc_pci_hba used by pci_port->in/out() ops to lookup bus data. */
#define PCI_HBA_MAX 32
st
ruct
pci_hba_data
*
parisc_pci_hba
[
PCI_HBA_MAX
]
;
st
atic
struct
pci_hba_data
*
parisc_pci_hba
[
PCI_HBA_MAX
]
__read_mostly
;
/********************************************************************
...
...
@@ -259,8 +258,10 @@ void __devinit pcibios_resource_to_bus(struct pci_dev *dev,
void
pcibios_bus_to_resource
(
struct
pci_dev
*
dev
,
struct
resource
*
res
,
struct
pci_bus_region
*
region
)
{
#ifdef CONFIG_64BIT
struct
pci_bus
*
bus
=
dev
->
bus
;
struct
pci_hba_data
*
hba
=
HBA_DATA
(
bus
->
bridge
->
platform_data
);
#endif
if
(
res
->
flags
&
IORESOURCE_MEM
)
{
res
->
start
=
PCI_HOST_ADDR
(
hba
,
region
->
start
);
...
...
arch/parisc/kernel/perf.c
浏览文件 @
89a2fa5f
...
...
@@ -68,20 +68,20 @@ struct rdr_tbl_ent {
};
static
int
perf_processor_interface
__read_mostly
=
UNKNOWN_INTF
;
static
int
perf_enabled
__read_mostly
=
0
;
static
int
perf_enabled
__read_mostly
;
static
spinlock_t
perf_lock
;
struct
parisc_device
*
cpu_device
__read_mostly
=
NULL
;
struct
parisc_device
*
cpu_device
__read_mostly
;
/* RDRs to write for PCX-W */
static
int
perf_rdrs_W
[]
=
static
const
int
perf_rdrs_W
[]
=
{
0
,
1
,
4
,
5
,
6
,
15
,
16
,
17
,
18
,
20
,
21
,
22
,
23
,
24
,
25
,
-
1
};
/* RDRs to write for PCX-U */
static
int
perf_rdrs_U
[]
=
static
const
int
perf_rdrs_U
[]
=
{
0
,
1
,
4
,
5
,
6
,
7
,
16
,
17
,
18
,
20
,
21
,
22
,
23
,
24
,
25
,
-
1
};
/* RDR register descriptions for PCX-W */
static
struct
rdr_tbl_ent
perf_rdr_tbl_W
[]
=
{
static
const
struct
rdr_tbl_ent
perf_rdr_tbl_W
[]
=
{
{
19
,
1
,
8
},
/* RDR 0 */
{
16
,
1
,
16
},
/* RDR 1 */
{
72
,
2
,
0
},
/* RDR 2 */
...
...
@@ -117,7 +117,7 @@ static struct rdr_tbl_ent perf_rdr_tbl_W[] = {
};
/* RDR register descriptions for PCX-U */
static
struct
rdr_tbl_ent
perf_rdr_tbl_U
[]
=
{
static
const
struct
rdr_tbl_ent
perf_rdr_tbl_U
[]
=
{
{
19
,
1
,
8
},
/* RDR 0 */
{
32
,
1
,
16
},
/* RDR 1 */
{
20
,
1
,
0
},
/* RDR 2 */
...
...
@@ -156,7 +156,7 @@ static struct rdr_tbl_ent perf_rdr_tbl_U[] = {
* A non-zero write_control in the above tables is a byte offset into
* this array.
*/
static
uint64_t
perf_bitmasks
[]
=
{
static
const
uint64_t
perf_bitmasks
[]
=
{
0x0000000000000000ul
,
/* first dbl word must be zero */
0xfdffe00000000000ul
,
/* RDR0 bitmask */
0x003f000000000000ul
,
/* RDR1 bitmask */
...
...
@@ -173,7 +173,7 @@ static uint64_t perf_bitmasks[] = {
* Write control bitmasks for Pa-8700 processor given
* somethings have changed slightly.
*/
static
uint64_t
perf_bitmasks_piranha
[]
=
{
static
const
uint64_t
perf_bitmasks_piranha
[]
=
{
0x0000000000000000ul
,
/* first dbl word must be zero */
0xfdffe00000000000ul
,
/* RDR0 bitmask */
0x003f000000000000ul
,
/* RDR1 bitmask */
...
...
@@ -186,7 +186,7 @@ static uint64_t perf_bitmasks_piranha[] = {
0xfffc000000000000ul
};
static
uint64_t
*
bitmask_array
;
/* array of bitmasks to use */
static
const
uint64_t
*
bitmask_array
;
/* array of bitmasks to use */
/******************************************************************************
* Function Prototypes
...
...
@@ -200,7 +200,7 @@ static ssize_t perf_write(struct file *file, const char __user *buf, size_t coun
static
long
perf_ioctl
(
struct
file
*
file
,
unsigned
int
cmd
,
unsigned
long
arg
);
static
void
perf_start_counters
(
void
);
static
int
perf_stop_counters
(
uint32_t
*
raddr
);
static
struct
rdr_tbl_ent
*
perf_rdr_get_entry
(
uint32_t
rdr_num
);
static
const
struct
rdr_tbl_ent
*
perf_rdr_get_entry
(
uint32_t
rdr_num
);
static
int
perf_rdr_read_ubuf
(
uint32_t
rdr_num
,
uint64_t
*
buffer
);
static
int
perf_rdr_clear
(
uint32_t
rdr_num
);
static
int
perf_write_image
(
uint64_t
*
memaddr
);
...
...
@@ -444,7 +444,6 @@ static long perf_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
uint32_t
raddr
[
4
];
int
error
=
0
;
lock_kernel
();
switch
(
cmd
)
{
case
PA_PERF_ON
:
...
...
@@ -477,8 +476,6 @@ static long perf_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
error
=
-
ENOTTY
;
}
unlock_kernel
();
return
error
;
}
...
...
@@ -655,7 +652,7 @@ static int perf_stop_counters(uint32_t *raddr)
* Retrieve a pointer to the description of what this
* RDR contains.
*/
static
struct
rdr_tbl_ent
*
perf_rdr_get_entry
(
uint32_t
rdr_num
)
static
const
struct
rdr_tbl_ent
*
perf_rdr_get_entry
(
uint32_t
rdr_num
)
{
if
(
perf_processor_interface
==
ONYX_INTF
)
{
return
&
perf_rdr_tbl_U
[
rdr_num
];
...
...
@@ -673,7 +670,7 @@ static int perf_rdr_read_ubuf(uint32_t rdr_num, uint64_t *buffer)
{
uint64_t
data
,
data_mask
=
0
;
uint32_t
width
,
xbits
,
i
;
struct
rdr_tbl_ent
*
tentry
;
const
struct
rdr_tbl_ent
*
tentry
;
tentry
=
perf_rdr_get_entry
(
rdr_num
);
if
((
width
=
tentry
->
width
)
==
0
)
...
...
@@ -721,7 +718,7 @@ static int perf_rdr_read_ubuf(uint32_t rdr_num, uint64_t *buffer)
*/
static
int
perf_rdr_clear
(
uint32_t
rdr_num
)
{
struct
rdr_tbl_ent
*
tentry
;
const
struct
rdr_tbl_ent
*
tentry
;
int32_t
i
;
tentry
=
perf_rdr_get_entry
(
rdr_num
);
...
...
@@ -753,10 +750,11 @@ static int perf_write_image(uint64_t *memaddr)
uint64_t
buffer
[
MAX_RDR_WORDS
];
uint64_t
*
bptr
;
uint32_t
dwords
;
uint32_t
*
intrigue_rdr
;
uint64_t
*
intrigue_bitmask
,
tmp64
;
const
uint32_t
*
intrigue_rdr
;
const
uint64_t
*
intrigue_bitmask
;
uint64_t
tmp64
;
void
__iomem
*
runway
;
struct
rdr_tbl_ent
*
tentry
;
const
struct
rdr_tbl_ent
*
tentry
;
int
i
;
/* Clear out counters */
...
...
@@ -830,7 +828,7 @@ static int perf_write_image(uint64_t *memaddr)
*/
static
void
perf_rdr_write
(
uint32_t
rdr_num
,
uint64_t
*
buffer
)
{
struct
rdr_tbl_ent
*
tentry
;
const
struct
rdr_tbl_ent
*
tentry
;
int32_t
i
;
printk
(
"perf_rdr_write
\n
"
);
...
...
arch/parisc/kernel/perf_images.h
浏览文件 @
89a2fa5f
...
...
@@ -25,7 +25,7 @@
#define PCXU_IMAGE_SIZE 584
static
uint32_t
onyx_images
[][
PCXU_IMAGE_SIZE
/
sizeof
(
uint32_t
)]
=
{
static
uint32_t
onyx_images
[][
PCXU_IMAGE_SIZE
/
sizeof
(
uint32_t
)]
__read_mostly
=
{
/*
* CPI:
*
...
...
@@ -2093,7 +2093,7 @@ static uint32_t onyx_images[][PCXU_IMAGE_SIZE/sizeof(uint32_t)] = {
};
#define PCXW_IMAGE_SIZE 576
static
uint32_t
cuda_images
[][
PCXW_IMAGE_SIZE
/
sizeof
(
uint32_t
)]
=
{
static
uint32_t
cuda_images
[][
PCXW_IMAGE_SIZE
/
sizeof
(
uint32_t
)]
__read_mostly
=
{
/*
* CPI: FROM CPI.IDF (Image 0)
*
...
...
arch/parisc/kernel/process.c
浏览文件 @
89a2fa5f
...
...
@@ -54,27 +54,6 @@
#include <asm/uaccess.h>
#include <asm/unwind.h>
static
int
hlt_counter
__read_mostly
;
/*
* Power off function, if any
*/
void
(
*
pm_power_off
)(
void
);
void
disable_hlt
(
void
)
{
hlt_counter
++
;
}
EXPORT_SYMBOL
(
disable_hlt
);
void
enable_hlt
(
void
)
{
hlt_counter
--
;
}
EXPORT_SYMBOL
(
enable_hlt
);
void
default_idle
(
void
)
{
barrier
();
...
...
@@ -102,12 +81,7 @@ void cpu_idle(void)
}
#ifdef __LP64__
#define COMMAND_GLOBAL 0xfffffffffffe0030UL
#else
#define COMMAND_GLOBAL 0xfffe0030
#endif
#define COMMAND_GLOBAL F_EXTEND(0xfffe0030)
#define CMD_RESET 5
/* reset any module */
/*
...
...
@@ -162,6 +136,7 @@ void machine_halt(void)
*/
}
void
(
*
chassis_power_off
)(
void
);
/*
* This routine is called from sys_reboot to actually turn off the
...
...
@@ -170,8 +145,8 @@ void machine_halt(void)
void
machine_power_off
(
void
)
{
/* If there is a registered power off handler, call it. */
if
(
pm
_power_off
)
pm
_power_off
();
if
(
chassis
_power_off
)
chassis
_power_off
();
/* Put the soft power button back under hardware control.
* If the user had already pressed the power button, the
...
...
@@ -187,6 +162,8 @@ void machine_power_off(void)
KERN_EMERG
"Please power this system off now."
);
}
void
(
*
pm_power_off
)(
void
)
=
machine_power_off
;
EXPORT_SYMBOL
(
pm_power_off
);
/*
* Create a kernel thread
...
...
arch/parisc/kernel/ptrace.c
浏览文件 @
89a2fa5f
...
...
@@ -91,7 +91,7 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data)
int
copied
;
#ifdef __LP64__
if
(
is_compat_task
(
child
)
)
{
if
(
personality
(
child
->
personality
)
==
PER_LINUX32
)
{
unsigned
int
tmp
;
addr
&=
0xffffffffL
;
...
...
@@ -123,7 +123,7 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data)
case
PTRACE_POKEDATA
:
ret
=
0
;
#ifdef __LP64__
if
(
is_compat_task
(
child
)
)
{
if
(
personality
(
child
->
personality
)
==
PER_LINUX32
)
{
unsigned
int
tmp
=
(
unsigned
int
)
data
;
DBG
(
"sys_ptrace(POKE%s, %d, %lx, %lx)
\n
"
,
request
==
PTRACE_POKETEXT
?
"TEXT"
:
"DATA"
,
...
...
@@ -146,7 +146,7 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data)
case
PTRACE_PEEKUSR
:
{
ret
=
-
EIO
;
#ifdef __LP64__
if
(
is_compat_task
(
child
)
)
{
if
(
personality
(
child
->
personality
)
==
PER_LINUX32
)
{
unsigned
int
tmp
;
if
(
addr
&
(
sizeof
(
int
)
-
1
))
...
...
@@ -205,7 +205,7 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data)
goto
out_tsk
;
}
#ifdef __LP64__
if
(
is_compat_task
(
child
)
)
{
if
(
personality
(
child
->
personality
)
==
PER_LINUX32
)
{
if
(
addr
&
(
sizeof
(
int
)
-
1
))
goto
out_tsk
;
if
((
addr
=
translate_usr_offset
(
addr
))
<
0
)
...
...
arch/parisc/kernel/signal.c
浏览文件 @
89a2fa5f
...
...
@@ -317,7 +317,7 @@ setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info,
if
(
personality
(
current
->
personality
)
==
PER_LINUX32
)
{
DBG
(
1
,
"setup_rt_frame: frame->info = 0x%p
\n
"
,
&
compat_frame
->
info
);
err
|=
co
mpat_copy_siginfo_to_user
(
&
compat_frame
->
info
,
info
);
err
|=
co
py_siginfo_to_user32
(
&
compat_frame
->
info
,
info
);
DBG
(
1
,
"SETUP_RT_FRAME: 1
\n
"
);
compat_val
=
(
compat_int_t
)
current
->
sas_ss_sp
;
err
|=
__put_user
(
compat_val
,
&
compat_frame
->
uc
.
uc_stack
.
ss_sp
);
...
...
arch/parisc/kernel/signal32.c
浏览文件 @
89a2fa5f
...
...
@@ -31,7 +31,6 @@
#include <linux/types.h>
#include <linux/errno.h>
#include <asm/compat_signal.h>
#include <asm/uaccess.h>
#include "signal32.h"
...
...
@@ -398,3 +397,104 @@ setup_sigcontext32(struct compat_sigcontext __user *sc, struct compat_regfile __
return
err
;
}
int
copy_siginfo_from_user32
(
siginfo_t
*
to
,
compat_siginfo_t
__user
*
from
)
{
unsigned
long
tmp
;
int
err
;
if
(
!
access_ok
(
VERIFY_READ
,
from
,
sizeof
(
compat_siginfo_t
)))
return
-
EFAULT
;
err
=
__get_user
(
to
->
si_signo
,
&
from
->
si_signo
);
err
|=
__get_user
(
to
->
si_errno
,
&
from
->
si_errno
);
err
|=
__get_user
(
to
->
si_code
,
&
from
->
si_code
);
if
(
to
->
si_code
<
0
)
err
|=
__copy_from_user
(
&
to
->
_sifields
.
_pad
,
&
from
->
_sifields
.
_pad
,
SI_PAD_SIZE
);
else
{
switch
(
to
->
si_code
>>
16
)
{
case
__SI_CHLD
>>
16
:
err
|=
__get_user
(
to
->
si_utime
,
&
from
->
si_utime
);
err
|=
__get_user
(
to
->
si_stime
,
&
from
->
si_stime
);
err
|=
__get_user
(
to
->
si_status
,
&
from
->
si_status
);
default:
err
|=
__get_user
(
to
->
si_pid
,
&
from
->
si_pid
);
err
|=
__get_user
(
to
->
si_uid
,
&
from
->
si_uid
);
break
;
case
__SI_FAULT
>>
16
:
err
|=
__get_user
(
tmp
,
&
from
->
si_addr
);
to
->
si_addr
=
(
void
__user
*
)
tmp
;
break
;
case
__SI_POLL
>>
16
:
err
|=
__get_user
(
to
->
si_band
,
&
from
->
si_band
);
err
|=
__get_user
(
to
->
si_fd
,
&
from
->
si_fd
);
break
;
case
__SI_RT
>>
16
:
/* This is not generated by the kernel as of now. */
case
__SI_MESGQ
>>
16
:
err
|=
__get_user
(
to
->
si_pid
,
&
from
->
si_pid
);
err
|=
__get_user
(
to
->
si_uid
,
&
from
->
si_uid
);
err
|=
__get_user
(
to
->
si_int
,
&
from
->
si_int
);
break
;
}
}
return
err
;
}
int
copy_siginfo_to_user32
(
compat_siginfo_t
__user
*
to
,
siginfo_t
*
from
)
{
unsigned
int
addr
;
int
err
;
if
(
!
access_ok
(
VERIFY_WRITE
,
to
,
sizeof
(
compat_siginfo_t
)))
return
-
EFAULT
;
/* If you change siginfo_t structure, please be sure
this code is fixed accordingly.
It should never copy any pad contained in the structure
to avoid security leaks, but must copy the generic
3 ints plus the relevant union member.
This routine must convert siginfo from 64bit to 32bit as well
at the same time. */
err
=
__put_user
(
from
->
si_signo
,
&
to
->
si_signo
);
err
|=
__put_user
(
from
->
si_errno
,
&
to
->
si_errno
);
err
|=
__put_user
((
short
)
from
->
si_code
,
&
to
->
si_code
);
if
(
from
->
si_code
<
0
)
err
|=
__copy_to_user
(
&
to
->
_sifields
.
_pad
,
&
from
->
_sifields
.
_pad
,
SI_PAD_SIZE
);
else
{
switch
(
from
->
si_code
>>
16
)
{
case
__SI_CHLD
>>
16
:
err
|=
__put_user
(
from
->
si_utime
,
&
to
->
si_utime
);
err
|=
__put_user
(
from
->
si_stime
,
&
to
->
si_stime
);
err
|=
__put_user
(
from
->
si_status
,
&
to
->
si_status
);
default:
err
|=
__put_user
(
from
->
si_pid
,
&
to
->
si_pid
);
err
|=
__put_user
(
from
->
si_uid
,
&
to
->
si_uid
);
break
;
case
__SI_FAULT
>>
16
:
/* avoid type-checking warnings by copying _pad[0] in lieu of si_addr... */
err
|=
__put_user
(
from
->
_sifields
.
_pad
[
0
],
&
to
->
si_addr
);
break
;
case
__SI_POLL
>>
16
:
err
|=
__put_user
(
from
->
si_band
,
&
to
->
si_band
);
err
|=
__put_user
(
from
->
si_fd
,
&
to
->
si_fd
);
break
;
case
__SI_TIMER
>>
16
:
err
|=
__put_user
(
from
->
si_tid
,
&
to
->
si_tid
);
err
|=
__put_user
(
from
->
si_overrun
,
&
to
->
si_overrun
);
addr
=
(
unsigned
long
)
from
->
si_ptr
;
err
|=
__put_user
(
addr
,
&
to
->
si_ptr
);
break
;
case
__SI_RT
>>
16
:
/* Not generated by the kernel as of now. */
case
__SI_MESGQ
>>
16
:
err
|=
__put_user
(
from
->
si_uid
,
&
to
->
si_uid
);
err
|=
__put_user
(
from
->
si_pid
,
&
to
->
si_pid
);
addr
=
(
unsigned
long
)
from
->
si_ptr
;
err
|=
__put_user
(
addr
,
&
to
->
si_ptr
);
break
;
}
}
return
err
;
}
arch/parisc/kernel/signal32.h
浏览文件 @
89a2fa5f
...
...
@@ -20,8 +20,34 @@
#define _PARISC64_KERNEL_SIGNAL32_H
#include <linux/compat.h>
#include <asm/compat_signal.h>
#include <asm/compat_rt_sigframe.h>
typedef
compat_uptr_t
compat_sighandler_t
;
typedef
struct
compat_sigaltstack
{
compat_uptr_t
ss_sp
;
compat_int_t
ss_flags
;
compat_size_t
ss_size
;
}
compat_stack_t
;
/* Most things should be clean enough to redefine this at will, if care
is taken to make libc match. */
struct
compat_sigaction
{
compat_sighandler_t
sa_handler
;
compat_uint_t
sa_flags
;
compat_sigset_t
sa_mask
;
/* mask last for extensibility */
};
/* 32-bit ucontext as seen from an 64-bit kernel */
struct
compat_ucontext
{
compat_uint_t
uc_flags
;
compat_uptr_t
uc_link
;
compat_stack_t
uc_stack
;
/* struct compat_sigaltstack (12 bytes)*/
/* FIXME: Pad out to get uc_mcontext to start at an 8-byte aligned boundary */
compat_uint_t
pad
[
1
];
struct
compat_sigcontext
uc_mcontext
;
compat_sigset_t
uc_sigmask
;
/* mask last for extensibility */
};
/* ELF32 signal handling */
...
...
@@ -29,6 +55,103 @@ struct k_sigaction32 {
struct
compat_sigaction
sa
;
};
typedef
struct
compat_siginfo
{
int
si_signo
;
int
si_errno
;
int
si_code
;
union
{
int
_pad
[((
128
/
sizeof
(
int
))
-
3
)];
/* kill() */
struct
{
unsigned
int
_pid
;
/* sender's pid */
unsigned
int
_uid
;
/* sender's uid */
}
_kill
;
/* POSIX.1b timers */
struct
{
compat_timer_t
_tid
;
/* timer id */
int
_overrun
;
/* overrun count */
char
_pad
[
sizeof
(
unsigned
int
)
-
sizeof
(
int
)];
compat_sigval_t
_sigval
;
/* same as below */
int
_sys_private
;
/* not to be passed to user */
}
_timer
;
/* POSIX.1b signals */
struct
{
unsigned
int
_pid
;
/* sender's pid */
unsigned
int
_uid
;
/* sender's uid */
compat_sigval_t
_sigval
;
}
_rt
;
/* SIGCHLD */
struct
{
unsigned
int
_pid
;
/* which child */
unsigned
int
_uid
;
/* sender's uid */
int
_status
;
/* exit code */
compat_clock_t
_utime
;
compat_clock_t
_stime
;
}
_sigchld
;
/* SIGILL, SIGFPE, SIGSEGV, SIGBUS */
struct
{
unsigned
int
_addr
;
/* faulting insn/memory ref. */
}
_sigfault
;
/* SIGPOLL */
struct
{
int
_band
;
/* POLL_IN, POLL_OUT, POLL_MSG */
int
_fd
;
}
_sigpoll
;
}
_sifields
;
}
compat_siginfo_t
;
int
copy_siginfo_to_user32
(
compat_siginfo_t
__user
*
to
,
siginfo_t
*
from
);
int
copy_siginfo_from_user32
(
siginfo_t
*
to
,
compat_siginfo_t
__user
*
from
);
/* In a deft move of uber-hackery, we decide to carry the top half of all
* 64-bit registers in a non-portable, non-ABI, hidden structure.
* Userspace can read the hidden structure if it *wants* but is never
* guaranteed to be in the same place. Infact the uc_sigmask from the
* ucontext_t structure may push the hidden register file downards
*/
struct
compat_regfile
{
/* Upper half of all the 64-bit registers that were truncated
on a copy to a 32-bit userspace */
compat_int_t
rf_gr
[
32
];
compat_int_t
rf_iasq
[
2
];
compat_int_t
rf_iaoq
[
2
];
compat_int_t
rf_sar
;
};
#define COMPAT_SIGRETURN_TRAMP 4
#define COMPAT_SIGRESTARTBLOCK_TRAMP 5
#define COMPAT_TRAMP_SIZE (COMPAT_SIGRETURN_TRAMP + \
COMPAT_SIGRESTARTBLOCK_TRAMP)
struct
compat_rt_sigframe
{
/* XXX: Must match trampoline size in arch/parisc/kernel/signal.c
Secondary to that it must protect the ERESTART_RESTARTBLOCK
trampoline we left on the stack (we were bad and didn't
change sp so we could run really fast.) */
compat_uint_t
tramp
[
COMPAT_TRAMP_SIZE
];
compat_siginfo_t
info
;
struct
compat_ucontext
uc
;
/* Hidden location of truncated registers, *must* be last. */
struct
compat_regfile
regs
;
};
/*
* The 32-bit ABI wants at least 48 bytes for a function call frame:
* 16 bytes for arg0-arg3, and 32 bytes for magic (the only part of
* which Linux/parisc uses is sp-20 for the saved return pointer...)
* Then, the stack pointer must be rounded to a cache line (64 bytes).
*/
#define SIGFRAME32 64
#define FUNCTIONCALLFRAME32 48
#define PARISC_RT_SIGFRAME_SIZE32 (((sizeof(struct compat_rt_sigframe) + FUNCTIONCALLFRAME32) + SIGFRAME32) & -SIGFRAME32)
void
sigset_32to64
(
sigset_t
*
s64
,
compat_sigset_t
*
s32
);
void
sigset_64to32
(
compat_sigset_t
*
s32
,
sigset_t
*
s64
);
int
do_sigaltstack32
(
const
compat_stack_t
__user
*
uss32
,
...
...
arch/parisc/kernel/syscall.S
浏览文件 @
89a2fa5f
...
...
@@ -650,6 +650,8 @@ end_linux_gateway_page:
#define LWS_ENTRY(_name_) .word (lws_##_name_ - linux_gateway_page)
#endif
.
section
.
rodata
,
"a"
.
align
4096
/
*
Light
-
weight
-
syscall
table
*/
/
*
Start
of
lws
table
.
*/
...
...
arch/parisc/kernel/syscall_table.S
浏览文件 @
89a2fa5f
...
...
@@ -374,5 +374,24 @@
ENTRY_SAME
(
keyctl
)
ENTRY_SAME
(
ioprio_set
)
ENTRY_SAME
(
ioprio_get
)
ENTRY_SAME
(
inotify_init
)
ENTRY_SAME
(
inotify_add_watch
)
/*
270
*/
ENTRY_SAME
(
inotify_rm_watch
)
ENTRY_COMP
(
pselect6
)
ENTRY_COMP
(
ppoll
)
ENTRY_SAME
(
migrate_pages
)
ENTRY_COMP
(
openat
)
/*
275
*/
ENTRY_SAME
(
mkdirat
)
ENTRY_SAME
(
mknodat
)
ENTRY_SAME
(
fchownat
)
ENTRY_COMP
(
futimesat
)
ENTRY_COMP
(
newfstatat
)
/*
280
*/
ENTRY_SAME
(
unlinkat
)
ENTRY_SAME
(
renameat
)
ENTRY_SAME
(
linkat
)
ENTRY_SAME
(
symlinkat
)
ENTRY_SAME
(
readlinkat
)
/*
285
*/
ENTRY_SAME
(
fchmodat
)
ENTRY_SAME
(
faccessat
)
/
*
Nothing
yet
*/
arch/parisc/kernel/traps.c
浏览文件 @
89a2fa5f
...
...
@@ -193,10 +193,9 @@ void show_stack(struct task_struct *task, unsigned long *s)
HERE:
asm
volatile
(
"copy %%r30, %0"
:
"=r"
(
sp
));
r
=
(
struct
pt_regs
*
)
km
alloc
(
sizeof
(
struct
pt_regs
),
GFP_KERNEL
);
r
=
kz
alloc
(
sizeof
(
struct
pt_regs
),
GFP_KERNEL
);
if
(
!
r
)
return
;
memset
(
r
,
0
,
sizeof
(
struct
pt_regs
));
r
->
iaoq
[
0
]
=
(
unsigned
long
)
&&
HERE
;
r
->
gr
[
2
]
=
(
unsigned
long
)
__builtin_return_address
(
0
);
r
->
gr
[
30
]
=
sp
;
...
...
arch/parisc/math-emu/decode_exc.c
浏览文件 @
89a2fa5f
...
...
@@ -337,6 +337,7 @@ decode_fpu(unsigned int Fpu_register[], unsigned int trap_counts[])
}
break
;
case
INVALIDEXCEPTION
:
case
OPC_2E_INVALIDEXCEPTION
:
update_trap_counts
(
Fpu_register
,
aflags
,
bflags
,
trap_counts
);
return
SIGNALCODE
(
SIGFPE
,
FPE_FLTINV
);
case
DIVISIONBYZEROEXCEPTION
:
...
...
arch/parisc/mm/init.c
浏览文件 @
89a2fa5f
...
...
@@ -371,17 +371,11 @@ static void __init setup_bootmem(void)
void
free_initmem
(
void
)
{
/* FIXME: */
#if 0
printk(KERN_INFO "NOT FREEING INITMEM (%dk)\n",
(&__init_end - &__init_begin) >> 10);
return;
#else
unsigned
long
addr
;
printk
(
KERN_INFO
"Freeing unused kernel memory: "
);
#if
1
#if
def CONFIG_DEBUG_KERNEL
/* Attempt to catch anyone trying to execute code here
* by filling the page with BRK insns.
*
...
...
@@ -414,9 +408,21 @@ void free_initmem(void)
pdc_chassis_send_status
(
PDC_CHASSIS_DIRECT_BCOMPLETE
);
printk
(
"%luk freed
\n
"
,
(
unsigned
long
)(
&
__init_end
-
&
__init_begin
)
>>
10
);
#endif
}
#ifdef CONFIG_DEBUG_RODATA
void
mark_rodata_ro
(
void
)
{
extern
char
__start_rodata
,
__end_rodata
;
/* rodata memory was already mapped with KERNEL_RO access rights by
pagetable_init() and map_pages(). No need to do additional stuff here */
printk
(
KERN_INFO
"Write protecting the kernel read-only data: %luk
\n
"
,
(
unsigned
long
)(
&
__end_rodata
-
&
__start_rodata
)
>>
10
);
}
#endif
/*
* Just an arbitrary offset to serve as a "hole" between mapping areas
* (between top of physical memory and a potential pcxl dma mapping
...
...
@@ -477,11 +483,6 @@ void __init mem_init(void)
}
int
do_check_pgt_cache
(
int
low
,
int
high
)
{
return
0
;
}
unsigned
long
*
empty_zero_page
__read_mostly
;
void
show_mem
(
void
)
...
...
@@ -690,7 +691,7 @@ static void __init pagetable_init(void)
#ifdef CONFIG_BLK_DEV_INITRD
if
(
initrd_end
&&
initrd_end
>
mem_limit
)
{
printk
(
"initrd: mapping %08lx-%08lx
\n
"
,
initrd_start
,
initrd_end
);
printk
(
KERN_INFO
"initrd: mapping %08lx-%08lx
\n
"
,
initrd_start
,
initrd_end
);
map_pages
(
initrd_start
,
__pa
(
initrd_start
),
initrd_end
-
initrd_start
,
PAGE_KERNEL
);
}
...
...
@@ -792,8 +793,6 @@ map_hpux_gateway_page(struct task_struct *tsk, struct mm_struct *mm)
EXPORT_SYMBOL
(
map_hpux_gateway_page
);
#endif
extern
void
flush_tlb_all_local
(
void
);
void
__init
paging_init
(
void
)
{
int
i
;
...
...
@@ -802,7 +801,7 @@ void __init paging_init(void)
pagetable_init
();
gateway_init
();
flush_cache_all_local
();
/* start with known state */
flush_tlb_all_local
();
flush_tlb_all_local
(
NULL
);
for
(
i
=
0
;
i
<
npmem_ranges
;
i
++
)
{
unsigned
long
zones_size
[
MAX_NR_ZONES
]
=
{
0
,
0
,
0
};
...
...
@@ -993,7 +992,7 @@ void flush_tlb_all(void)
do_recycle
++
;
}
spin_unlock
(
&
sid_lock
);
on_each_cpu
(
(
void
(
*
)(
void
*
))
flush_tlb_all_local
,
NULL
,
1
,
1
);
on_each_cpu
(
flush_tlb_all_local
,
NULL
,
1
,
1
);
if
(
do_recycle
)
{
spin_lock
(
&
sid_lock
);
recycle_sids
(
recycle_ndirty
,
recycle_dirty_array
);
...
...
drivers/parisc/ccio-dma.c
浏览文件 @
89a2fa5f
...
...
@@ -1423,7 +1423,7 @@ static void __init ccio_init_resources(struct ioc *ioc)
struct
resource
*
res
=
ioc
->
mmio_region
;
char
*
name
=
kmalloc
(
14
,
GFP_KERNEL
);
s
printf
(
name
,
"GSC Bus [%d/]"
,
ioc
->
hw_path
);
s
nprintf
(
name
,
14
,
"GSC Bus [%d/]"
,
ioc
->
hw_path
);
ccio_init_resource
(
res
,
name
,
&
ioc
->
ioc_regs
->
io_io_low
);
ccio_init_resource
(
res
+
1
,
name
,
&
ioc
->
ioc_regs
->
io_io_low_hv
);
...
...
@@ -1557,12 +1557,11 @@ static int ccio_probe(struct parisc_device *dev)
int
i
;
struct
ioc
*
ioc
,
**
ioc_p
=
&
ioc_list
;
ioc
=
k
m
alloc
(
sizeof
(
struct
ioc
),
GFP_KERNEL
);
ioc
=
k
z
alloc
(
sizeof
(
struct
ioc
),
GFP_KERNEL
);
if
(
ioc
==
NULL
)
{
printk
(
KERN_ERR
MODULE_NAME
": memory allocation failure
\n
"
);
return
1
;
}
memset
(
ioc
,
0
,
sizeof
(
struct
ioc
));
ioc
->
name
=
dev
->
id
.
hversion
==
U2_IOA_RUNWAY
?
"U2"
:
"UTurn"
;
...
...
@@ -1578,7 +1577,7 @@ static int ccio_probe(struct parisc_device *dev)
ccio_ioc_init
(
ioc
);
ccio_init_resources
(
ioc
);
hppa_dma_ops
=
&
ccio_ops
;
dev
->
dev
.
platform_data
=
k
m
alloc
(
sizeof
(
struct
pci_hba_data
),
GFP_KERNEL
);
dev
->
dev
.
platform_data
=
k
z
alloc
(
sizeof
(
struct
pci_hba_data
),
GFP_KERNEL
);
/* if this fails, no I/O cards will work, so may as well bug */
BUG_ON
(
dev
->
dev
.
platform_data
==
NULL
);
...
...
drivers/parisc/dino.c
浏览文件 @
89a2fa5f
...
...
@@ -989,14 +989,12 @@ static int __init dino_probe(struct parisc_device *dev)
*/
}
dino_dev
=
k
m
alloc
(
sizeof
(
struct
dino_device
),
GFP_KERNEL
);
dino_dev
=
k
z
alloc
(
sizeof
(
struct
dino_device
),
GFP_KERNEL
);
if
(
!
dino_dev
)
{
printk
(
"dino_init_chip - couldn't alloc dino_device
\n
"
);
return
1
;
}
memset
(
dino_dev
,
0
,
sizeof
(
struct
dino_device
));
dino_dev
->
hba
.
dev
=
dev
;
dino_dev
->
hba
.
base_addr
=
ioremap
(
hpa
,
4096
);
dino_dev
->
hba
.
lmmio_space_offset
=
0
;
/* CPU addrs == bus addrs */
...
...
drivers/parisc/hppb.c
浏览文件 @
89a2fa5f
...
...
@@ -60,12 +60,11 @@ static int hppb_probe(struct parisc_device *dev)
}
if
(
card
->
hpa
)
{
card
->
next
=
k
m
alloc
(
sizeof
(
struct
hppb_card
),
GFP_KERNEL
);
card
->
next
=
k
z
alloc
(
sizeof
(
struct
hppb_card
),
GFP_KERNEL
);
if
(
!
card
->
next
)
{
printk
(
KERN_ERR
"HP-PB: Unable to allocate memory.
\n
"
);
return
1
;
}
memset
(
card
->
next
,
'\0'
,
sizeof
(
struct
hppb_card
));
card
=
card
->
next
;
}
printk
(
KERN_INFO
"Found GeckoBoa at 0x%lx
\n
"
,
dev
->
hpa
.
start
);
...
...
drivers/parisc/iosapic.c
浏览文件 @
89a2fa5f
...
...
@@ -873,28 +873,24 @@ void *iosapic_register(unsigned long hpa)
return
NULL
;
}
isi
=
(
struct
iosapic_info
*
)
k
m
alloc
(
sizeof
(
struct
iosapic_info
),
GFP_KERNEL
);
isi
=
(
struct
iosapic_info
*
)
k
z
alloc
(
sizeof
(
struct
iosapic_info
),
GFP_KERNEL
);
if
(
!
isi
)
{
BUG
();
return
NULL
;
}
memset
(
isi
,
0
,
sizeof
(
struct
iosapic_info
));
isi
->
addr
=
ioremap
(
hpa
,
4096
);
isi
->
isi_hpa
=
hpa
;
isi
->
isi_version
=
iosapic_rd_version
(
isi
);
isi
->
isi_num_vectors
=
IOSAPIC_IRDT_MAX_ENTRY
(
isi
->
isi_version
)
+
1
;
vip
=
isi
->
isi_vector
=
(
struct
vector_info
*
)
k
m
alloc
(
sizeof
(
struct
vector_info
)
*
isi
->
isi_num_vectors
,
GFP_KERNEL
);
k
z
alloc
(
sizeof
(
struct
vector_info
)
*
isi
->
isi_num_vectors
,
GFP_KERNEL
);
if
(
vip
==
NULL
)
{
kfree
(
isi
);
return
NULL
;
}
memset
(
vip
,
0
,
sizeof
(
struct
vector_info
)
*
isi
->
isi_num_vectors
);
for
(
cnt
=
0
;
cnt
<
isi
->
isi_num_vectors
;
cnt
++
,
vip
++
)
{
vip
->
irqline
=
(
unsigned
char
)
cnt
;
vip
->
iosapic
=
isi
;
...
...
drivers/parisc/lasi.c
浏览文件 @
89a2fa5f
...
...
@@ -166,11 +166,12 @@ static void lasi_power_off(void)
int
__init
lasi_init_chip
(
struct
parisc_device
*
dev
)
{
extern
void
(
*
chassis_power_off
)(
void
);
struct
gsc_asic
*
lasi
;
struct
gsc_irq
gsc_irq
;
int
ret
;
lasi
=
k
m
alloc
(
sizeof
(
*
lasi
),
GFP_KERNEL
);
lasi
=
k
z
alloc
(
sizeof
(
*
lasi
),
GFP_KERNEL
);
if
(
!
lasi
)
return
-
ENOMEM
;
...
...
@@ -222,7 +223,7 @@ lasi_init_chip(struct parisc_device *dev)
* ensure that only the first LASI (the one controlling the power off)
* should set the HPA here */
lasi_power_off_hpa
=
lasi
->
hpa
;
pm
_power_off
=
lasi_power_off
;
chassis
_power_off
=
lasi_power_off
;
return
ret
;
}
...
...
drivers/parisc/lba_pci.c
浏览文件 @
89a2fa5f
...
...
@@ -1565,7 +1565,7 @@ lba_driver_probe(struct parisc_device *dev)
}
else
if
(
IS_MERCURY
(
dev
)
||
IS_QUICKSILVER
(
dev
))
{
func_class
&=
0xff
;
version
=
kmalloc
(
6
,
GFP_KERNEL
);
s
printf
(
version
,
"TR%d.%d"
,(
func_class
>>
4
),(
func_class
&
0xf
));
s
nprintf
(
version
,
6
,
"TR%d.%d"
,(
func_class
>>
4
),(
func_class
&
0xf
));
/* We could use one printk for both Elroy and Mercury,
* but for the mask for func_class.
*/
...
...
@@ -1586,14 +1586,12 @@ lba_driver_probe(struct parisc_device *dev)
** have an IRT entry will get NULL back from iosapic code.
*/
lba_dev
=
k
m
alloc
(
sizeof
(
struct
lba_device
),
GFP_KERNEL
);
lba_dev
=
k
z
alloc
(
sizeof
(
struct
lba_device
),
GFP_KERNEL
);
if
(
!
lba_dev
)
{
printk
(
KERN_ERR
"lba_init_chip - couldn't alloc lba_device
\n
"
);
return
(
1
);
}
memset
(
lba_dev
,
0
,
sizeof
(
struct
lba_device
));
/* ---------- First : initialize data we already have --------- */
...
...
drivers/parisc/pdc_stable.c
浏览文件 @
89a2fa5f
此差异已折叠。
点击以展开。
drivers/parisc/sba_iommu.c
浏览文件 @
89a2fa5f
...
...
@@ -2064,14 +2064,13 @@ sba_driver_callback(struct parisc_device *dev)
printk
(
KERN_INFO
"%s found %s at 0x%lx
\n
"
,
MODULE_NAME
,
version
,
dev
->
hpa
.
start
);
sba_dev
=
k
m
alloc
(
sizeof
(
struct
sba_device
),
GFP_KERNEL
);
sba_dev
=
k
z
alloc
(
sizeof
(
struct
sba_device
),
GFP_KERNEL
);
if
(
!
sba_dev
)
{
printk
(
KERN_ERR
MODULE_NAME
" - couldn't alloc sba_device
\n
"
);
return
-
ENOMEM
;
}
parisc_set_drvdata
(
dev
,
sba_dev
);
memset
(
sba_dev
,
0
,
sizeof
(
struct
sba_device
));
for
(
i
=
0
;
i
<
MAX_IOC
;
i
++
)
spin_lock_init
(
&
(
sba_dev
->
ioc
[
i
].
res_lock
));
...
...
drivers/parisc/superio.c
浏览文件 @
89a2fa5f
...
...
@@ -89,6 +89,9 @@ static struct superio_device sio_dev;
#define DBG_INIT(x...)
#endif
#define SUPERIO "SuperIO"
#define PFX SUPERIO ": "
static
irqreturn_t
superio_interrupt
(
int
parent_irq
,
void
*
devp
,
struct
pt_regs
*
regs
)
{
...
...
@@ -117,7 +120,7 @@ superio_interrupt(int parent_irq, void *devp, struct pt_regs *regs)
local_irq
=
results
&
0x0f
;
if
(
local_irq
==
2
||
local_irq
>
7
)
{
printk
(
KERN_ERR
"SuperIO:
slave interrupted!
\n
"
);
printk
(
KERN_ERR
PFX
"
slave interrupted!
\n
"
);
return
IRQ_HANDLED
;
}
...
...
@@ -128,7 +131,7 @@ superio_interrupt(int parent_irq, void *devp, struct pt_regs *regs)
outb
(
OCW3_ISR
,
IC_PIC1
+
0
);
results
=
inb
(
IC_PIC1
+
0
);
if
((
results
&
0x80
)
==
0
)
{
/* if ISR7 not set: spurious */
printk
(
KERN_WARNING
"SuperIO:
spurious interrupt!
\n
"
);
printk
(
KERN_WARNING
PFX
"
spurious interrupt!
\n
"
);
return
IRQ_HANDLED
;
}
}
...
...
@@ -163,27 +166,27 @@ superio_init(struct pci_dev *pcidev)
/* ...then properly fixup the USB to point at suckyio PIC */
sio
->
usb_pdev
->
irq
=
superio_fixup_irq
(
sio
->
usb_pdev
);
printk
(
KERN_INFO
"SuperIO:
Found NS87560 Legacy I/O device at %s (IRQ %i)
\n
"
,
printk
(
KERN_INFO
PFX
"
Found NS87560 Legacy I/O device at %s (IRQ %i)
\n
"
,
pci_name
(
pdev
),
pdev
->
irq
);
pci_read_config_dword
(
pdev
,
SIO_SP1BAR
,
&
sio
->
sp1_base
);
sio
->
sp1_base
&=
~
1
;
printk
(
KERN_INFO
"SuperIO:
Serial port 1 at 0x%x
\n
"
,
sio
->
sp1_base
);
printk
(
KERN_INFO
PFX
"
Serial port 1 at 0x%x
\n
"
,
sio
->
sp1_base
);
pci_read_config_dword
(
pdev
,
SIO_SP2BAR
,
&
sio
->
sp2_base
);
sio
->
sp2_base
&=
~
1
;
printk
(
KERN_INFO
"SuperIO:
Serial port 2 at 0x%x
\n
"
,
sio
->
sp2_base
);
printk
(
KERN_INFO
PFX
"
Serial port 2 at 0x%x
\n
"
,
sio
->
sp2_base
);
pci_read_config_dword
(
pdev
,
SIO_PPBAR
,
&
sio
->
pp_base
);
sio
->
pp_base
&=
~
1
;
printk
(
KERN_INFO
"SuperIO:
Parallel port at 0x%x
\n
"
,
sio
->
pp_base
);
printk
(
KERN_INFO
PFX
"
Parallel port at 0x%x
\n
"
,
sio
->
pp_base
);
pci_read_config_dword
(
pdev
,
SIO_FDCBAR
,
&
sio
->
fdc_base
);
sio
->
fdc_base
&=
~
1
;
printk
(
KERN_INFO
"SuperIO:
Floppy controller at 0x%x
\n
"
,
sio
->
fdc_base
);
printk
(
KERN_INFO
PFX
"
Floppy controller at 0x%x
\n
"
,
sio
->
fdc_base
);
pci_read_config_dword
(
pdev
,
SIO_ACPIBAR
,
&
sio
->
acpi_base
);
sio
->
acpi_base
&=
~
1
;
printk
(
KERN_INFO
"SuperIO:
ACPI at 0x%x
\n
"
,
sio
->
acpi_base
);
printk
(
KERN_INFO
PFX
"
ACPI at 0x%x
\n
"
,
sio
->
acpi_base
);
request_region
(
IC_PIC1
,
0x1f
,
"pic1"
);
request_region
(
IC_PIC2
,
0x1f
,
"pic2"
);
...
...
@@ -263,14 +266,14 @@ superio_init(struct pci_dev *pcidev)
/* Setup USB power regulation */
outb
(
1
,
sio
->
acpi_base
+
USB_REG_CR
);
if
(
inb
(
sio
->
acpi_base
+
USB_REG_CR
)
&
1
)
printk
(
KERN_INFO
"SuperIO:
USB regulator enabled
\n
"
);
printk
(
KERN_INFO
PFX
"
USB regulator enabled
\n
"
);
else
printk
(
KERN_ERR
"USB regulator not initialized!
\n
"
);
printk
(
KERN_ERR
PFX
"USB regulator not initialized!
\n
"
);
if
(
request_irq
(
pdev
->
irq
,
superio_interrupt
,
SA_INTERRUPT
,
"SuperIO"
,
(
void
*
)
sio
))
{
SUPERIO
,
(
void
*
)
sio
))
{
printk
(
KERN_ERR
"SuperIO:
could not get irq
\n
"
);
printk
(
KERN_ERR
PFX
"
could not get irq
\n
"
);
BUG
();
return
;
}
...
...
@@ -284,7 +287,7 @@ static void superio_disable_irq(unsigned int irq)
u8
r8
;
if
((
irq
<
1
)
||
(
irq
==
2
)
||
(
irq
>
7
))
{
printk
(
KERN_ERR
"SuperIO:
Illegal irq number.
\n
"
);
printk
(
KERN_ERR
PFX
"
Illegal irq number.
\n
"
);
BUG
();
return
;
}
...
...
@@ -301,7 +304,7 @@ static void superio_enable_irq(unsigned int irq)
u8
r8
;
if
((
irq
<
1
)
||
(
irq
==
2
)
||
(
irq
>
7
))
{
printk
(
KERN_ERR
"SuperIO:
Illegal irq number (%d).
\n
"
,
irq
);
printk
(
KERN_ERR
PFX
"
Illegal irq number (%d).
\n
"
,
irq
);
BUG
();
return
;
}
...
...
@@ -319,7 +322,7 @@ static unsigned int superio_startup_irq(unsigned int irq)
}
static
struct
hw_interrupt_type
superio_interrupt_type
=
{
.
typename
=
"SuperIO"
,
.
typename
=
SUPERIO
,
.
startup
=
superio_startup_irq
,
.
shutdown
=
superio_disable_irq
,
.
enable
=
superio_enable_irq
,
...
...
@@ -413,7 +416,7 @@ static void __devinit superio_serial_init(void)
retval
=
early_serial_setup
(
&
serial
[
0
]);
if
(
retval
<
0
)
{
printk
(
KERN_WARNING
"SuperIO:
Register Serial #0 failed.
\n
"
);
printk
(
KERN_WARNING
PFX
"
Register Serial #0 failed.
\n
"
);
return
;
}
...
...
@@ -423,7 +426,7 @@ static void __devinit superio_serial_init(void)
retval
=
early_serial_setup
(
&
serial
[
1
]);
if
(
retval
<
0
)
printk
(
KERN_WARNING
"SuperIO:
Register Serial #1 failed.
\n
"
);
printk
(
KERN_WARNING
PFX
"
Register Serial #1 failed.
\n
"
);
#endif
/* CONFIG_SERIAL_8250 */
}
...
...
@@ -437,7 +440,7 @@ static void __devinit superio_parport_init(void)
PARPORT_DMA_NONE
/* dma */
,
NULL
/*struct pci_dev* */
)
)
printk
(
KERN_WARNING
"SuperIO:
Probing parallel port failed.
\n
"
);
printk
(
KERN_WARNING
PFX
"
Probing parallel port failed.
\n
"
);
#endif
/* CONFIG_PARPORT_PC */
}
...
...
@@ -499,7 +502,7 @@ static struct pci_device_id superio_tbl[] = {
};
static
struct
pci_driver
superio_driver
=
{
.
name
=
"SuperIO"
,
.
name
=
SUPERIO
,
.
id_table
=
superio_tbl
,
.
probe
=
superio_probe
,
};
...
...
drivers/parisc/wax.c
浏览文件 @
89a2fa5f
...
...
@@ -76,7 +76,7 @@ wax_init_chip(struct parisc_device *dev)
struct
gsc_irq
gsc_irq
;
int
ret
;
wax
=
k
m
alloc
(
sizeof
(
*
wax
),
GFP_KERNEL
);
wax
=
k
z
alloc
(
sizeof
(
*
wax
),
GFP_KERNEL
);
if
(
!
wax
)
return
-
ENOMEM
;
...
...
drivers/parport/parport_gsc.c
浏览文件 @
89a2fa5f
...
...
@@ -249,7 +249,7 @@ struct parport *__devinit parport_gsc_probe_port (unsigned long base,
struct
parport
tmp
;
struct
parport
*
p
=
&
tmp
;
priv
=
k
m
alloc
(
sizeof
(
struct
parport_gsc_private
),
GFP_KERNEL
);
priv
=
k
z
alloc
(
sizeof
(
struct
parport_gsc_private
),
GFP_KERNEL
);
if
(
!
priv
)
{
printk
(
KERN_DEBUG
"parport (0x%lx): no memory!
\n
"
,
base
);
return
NULL
;
...
...
drivers/video/console/sticore.c
浏览文件 @
89a2fa5f
...
...
@@ -30,10 +30,11 @@
#define STI_DRIVERVERSION "Version 0.9a"
struct
sti_struct
*
default_sti
;
struct
sti_struct
*
default_sti
__read_mostly
;
static
int
num_sti_roms
;
/* # of STI ROMS found */
static
struct
sti_struct
*
sti_roms
[
MAX_STI_ROMS
];
/* ptr to each sti_struct */
/* number of STI ROMS found and their ptrs to each struct */
static
int
num_sti_roms
__read_mostly
;
static
struct
sti_struct
*
sti_roms
[
MAX_STI_ROMS
]
__read_mostly
;
/* The colour indices used by STI are
...
...
@@ -266,7 +267,7 @@ sti_rom_copy(unsigned long base, unsigned long count, void *dest)
static
char
default_sti_path
[
21
];
static
char
default_sti_path
[
21
]
__read_mostly
;
#ifndef MODULE
static
int
__init
sti_setup
(
char
*
str
)
...
...
@@ -414,10 +415,10 @@ sti_init_glob_cfg(struct sti_struct *sti,
if
(
!
sti
->
sti_mem_request
)
sti
->
sti_mem_request
=
256
;
/* STI default */
glob_cfg
=
k
m
alloc
(
sizeof
(
*
sti
->
glob_cfg
),
GFP_KERNEL
);
glob_cfg_ext
=
k
m
alloc
(
sizeof
(
*
glob_cfg_ext
),
GFP_KERNEL
);
save_addr
=
k
m
alloc
(
save_addr_size
,
GFP_KERNEL
);
sti_mem_addr
=
k
m
alloc
(
sti
->
sti_mem_request
,
GFP_KERNEL
);
glob_cfg
=
k
z
alloc
(
sizeof
(
*
sti
->
glob_cfg
),
GFP_KERNEL
);
glob_cfg_ext
=
k
z
alloc
(
sizeof
(
*
glob_cfg_ext
),
GFP_KERNEL
);
save_addr
=
k
z
alloc
(
save_addr_size
,
GFP_KERNEL
);
sti_mem_addr
=
k
z
alloc
(
sti
->
sti_mem_request
,
GFP_KERNEL
);
if
(
!
(
glob_cfg
&&
glob_cfg_ext
&&
save_addr
&&
sti_mem_addr
))
{
kfree
(
glob_cfg
);
...
...
@@ -427,11 +428,6 @@ sti_init_glob_cfg(struct sti_struct *sti,
return
-
ENOMEM
;
}
memset
(
glob_cfg
,
0
,
sizeof
(
*
glob_cfg
));
memset
(
glob_cfg_ext
,
0
,
sizeof
(
*
glob_cfg_ext
));
memset
(
save_addr
,
0
,
save_addr_size
);
memset
(
sti_mem_addr
,
0
,
sti
->
sti_mem_request
);
glob_cfg
->
ext_ptr
=
STI_PTR
(
glob_cfg_ext
);
glob_cfg
->
save_addr
=
STI_PTR
(
save_addr
);
for
(
i
=
0
;
i
<
8
;
i
++
)
{
...
...
@@ -502,9 +498,9 @@ sti_init_glob_cfg(struct sti_struct *sti,
#ifdef CONFIG_FB
struct
sti_cooked_font
*
__init
sti_select_fbfont
(
struct
sti_cooked_rom
*
cooked_rom
,
char
*
fbfont_name
)
sti_select_fbfont
(
struct
sti_cooked_rom
*
cooked_rom
,
const
char
*
fbfont_name
)
{
struct
font_desc
*
fbfont
;
const
struct
font_desc
*
fbfont
;
unsigned
int
size
,
bpc
;
void
*
dest
;
struct
sti_rom_font
*
nf
;
...
...
@@ -525,10 +521,9 @@ sti_select_fbfont( struct sti_cooked_rom *cooked_rom, char *fbfont_name )
size
=
bpc
*
256
;
size
+=
sizeof
(
struct
sti_rom_font
);
nf
=
k
m
alloc
(
size
,
GFP_KERNEL
);
nf
=
k
z
alloc
(
size
,
GFP_KERNEL
);
if
(
!
nf
)
return
NULL
;
memset
(
nf
,
0
,
size
);
nf
->
first_char
=
0
;
nf
->
last_char
=
255
;
...
...
@@ -544,7 +539,7 @@ sti_select_fbfont( struct sti_cooked_rom *cooked_rom, char *fbfont_name )
dest
+=
sizeof
(
struct
sti_rom_font
);
memcpy
(
dest
,
fbfont
->
data
,
bpc
*
256
);
cooked_font
=
k
m
alloc
(
sizeof
(
*
cooked_font
),
GFP_KERNEL
);
cooked_font
=
k
z
alloc
(
sizeof
(
*
cooked_font
),
GFP_KERNEL
);
if
(
!
cooked_font
)
{
kfree
(
nf
);
return
NULL
;
...
...
@@ -559,7 +554,7 @@ sti_select_fbfont( struct sti_cooked_rom *cooked_rom, char *fbfont_name )
}
#else
struct
sti_cooked_font
*
__init
sti_select_fbfont
(
struct
sti_cooked_rom
*
cooked_rom
,
char
*
fbfont_name
)
sti_select_fbfont
(
struct
sti_cooked_rom
*
cooked_rom
,
c
onst
c
har
*
fbfont_name
)
{
return
NULL
;
}
...
...
@@ -617,7 +612,7 @@ sti_cook_fonts(struct sti_cooked_rom *cooked_rom,
struct
sti_rom_font
*
raw_font
,
*
font_start
;
struct
sti_cooked_font
*
cooked_font
;
cooked_font
=
k
m
alloc
(
sizeof
(
*
cooked_font
),
GFP_KERNEL
);
cooked_font
=
k
z
alloc
(
sizeof
(
*
cooked_font
),
GFP_KERNEL
);
if
(
!
cooked_font
)
return
0
;
...
...
@@ -631,7 +626,7 @@ sti_cook_fonts(struct sti_cooked_rom *cooked_rom,
while
(
raw_font
->
next_font
)
{
raw_font
=
((
void
*
)
font_start
)
+
(
raw_font
->
next_font
);
cooked_font
->
next_font
=
k
m
alloc
(
sizeof
(
*
cooked_font
),
GFP_KERNEL
);
cooked_font
->
next_font
=
k
z
alloc
(
sizeof
(
*
cooked_font
),
GFP_KERNEL
);
if
(
!
cooked_font
->
next_font
)
return
1
;
...
...
@@ -668,10 +663,9 @@ sti_bmode_font_raw(struct sti_cooked_font *f)
unsigned
char
*
n
,
*
p
,
*
q
;
int
size
=
f
->
raw
->
bytes_per_char
*
256
+
sizeof
(
struct
sti_rom_font
);
n
=
k
m
alloc
(
4
*
size
,
GFP_KERNEL
);
n
=
k
z
alloc
(
4
*
size
,
GFP_KERNEL
);
if
(
!
n
)
return
NULL
;
memset
(
n
,
0
,
4
*
size
);
p
=
n
+
3
;
q
=
(
unsigned
char
*
)
f
->
raw
;
while
(
size
--
)
{
...
...
@@ -816,13 +810,12 @@ sti_try_rom_generic(unsigned long address, unsigned long hpa, struct pci_dev *pd
return
NULL
;
}
sti
=
k
m
alloc
(
sizeof
(
*
sti
),
GFP_KERNEL
);
sti
=
k
z
alloc
(
sizeof
(
*
sti
),
GFP_KERNEL
);
if
(
!
sti
)
{
printk
(
KERN_ERR
"Not enough memory !
\n
"
);
return
NULL
;
}
memset
(
sti
,
0
,
sizeof
(
*
sti
));
spin_lock_init
(
&
sti
->
lock
);
test_rom:
...
...
@@ -1035,7 +1028,7 @@ static struct parisc_driver pa_sti_driver = {
* sti_init_roms() - detects all STI ROMs and stores them in sti_roms[]
*/
static
int
sticore_initialized
;
static
int
sticore_initialized
__read_mostly
;
static
void
__init
sti_init_roms
(
void
)
{
...
...
include/asm-parisc/atomic.h
浏览文件 @
89a2fa5f
/* Copyright (C) 2000 Philipp Rumpf <prumpf@tux.org>
* Copyright (C) 2006 Kyle McMartin <kyle@parisc-linux.org>
*/
#ifndef _ASM_PARISC_ATOMIC_H_
#define _ASM_PARISC_ATOMIC_H_
#include <linux/config.h>
#include <linux/types.h>
#include <asm/system.h>
/* Copyright (C) 2000 Philipp Rumpf <prumpf@tux.org>. */
/*
* Atomic operations that C can't guarantee us. Useful for
...
...
@@ -46,15 +50,6 @@ extern raw_spinlock_t __atomic_hash[ATOMIC_HASH_SIZE] __lock_aligned;
# define _atomic_spin_unlock_irqrestore(l,f) do { local_irq_restore(f); } while (0)
#endif
/* Note that we need not lock read accesses - aligned word writes/reads
* are atomic, so a reader never sees unconsistent values.
*
* Cache-line alignment would conflict with, for example, linux/module.h
*/
typedef
struct
{
volatile
int
counter
;
}
atomic_t
;
/* This should get optimized out since it's never called.
** Or get a link error if xchg is used "wrong".
*/
...
...
@@ -69,10 +64,9 @@ extern unsigned long __xchg64(unsigned long, unsigned long *);
#endif
/* optimizer better get rid of switch since size is a constant */
static
__inline__
unsigned
long
__xchg
(
unsigned
long
x
,
__volatile__
void
*
ptr
,
int
size
)
static
__inline__
unsigned
long
__xchg
(
unsigned
long
x
,
__volatile__
void
*
ptr
,
int
size
)
{
switch
(
size
)
{
#ifdef __LP64__
case
8
:
return
__xchg64
(
x
,(
unsigned
long
*
)
ptr
);
...
...
@@ -129,7 +123,13 @@ __cmpxchg(volatile void *ptr, unsigned long old, unsigned long new_, int size)
(unsigned long)_n_, sizeof(*(ptr))); \
})
/* Note that we need not lock read accesses - aligned word writes/reads
* are atomic, so a reader never sees unconsistent values.
*
* Cache-line alignment would conflict with, for example, linux/module.h
*/
typedef
struct
{
volatile
int
counter
;
}
atomic_t
;
/* It's possible to reduce all atomic operations to either
* __atomic_add_return, atomic_set and atomic_read (the latter
...
...
@@ -210,12 +210,66 @@ static __inline__ int atomic_read(const atomic_t *v)
#define atomic_dec_and_test(v) (atomic_dec_return(v) == 0)
#define ATOMIC_INIT(i)
{ (i) }
#define ATOMIC_INIT(i)
((atomic_t) { (i) })
#define smp_mb__before_atomic_dec() smp_mb()
#define smp_mb__after_atomic_dec() smp_mb()
#define smp_mb__before_atomic_inc() smp_mb()
#define smp_mb__after_atomic_inc() smp_mb()
#ifdef __LP64__
typedef
struct
{
volatile
s64
counter
;
}
atomic64_t
;
#define ATOMIC64_INIT(i) ((atomic64_t) { (i) })
static
__inline__
int
__atomic64_add_return
(
s64
i
,
atomic64_t
*
v
)
{
int
ret
;
unsigned
long
flags
;
_atomic_spin_lock_irqsave
(
v
,
flags
);
ret
=
(
v
->
counter
+=
i
);
_atomic_spin_unlock_irqrestore
(
v
,
flags
);
return
ret
;
}
static
__inline__
void
atomic64_set
(
atomic64_t
*
v
,
s64
i
)
{
unsigned
long
flags
;
_atomic_spin_lock_irqsave
(
v
,
flags
);
v
->
counter
=
i
;
_atomic_spin_unlock_irqrestore
(
v
,
flags
);
}
static
__inline__
s64
atomic64_read
(
const
atomic64_t
*
v
)
{
return
v
->
counter
;
}
#define atomic64_add(i,v) ((void)(__atomic64_add_return( ((s64)i),(v))))
#define atomic64_sub(i,v) ((void)(__atomic64_add_return(-((s64)i),(v))))
#define atomic64_inc(v) ((void)(__atomic64_add_return( 1,(v))))
#define atomic64_dec(v) ((void)(__atomic64_add_return( -1,(v))))
#define atomic64_add_return(i,v) (__atomic64_add_return( ((s64)i),(v)))
#define atomic64_sub_return(i,v) (__atomic64_add_return(-((s64)i),(v)))
#define atomic64_inc_return(v) (__atomic64_add_return( 1,(v)))
#define atomic64_dec_return(v) (__atomic64_add_return( -1,(v)))
#define atomic64_add_negative(a, v) (atomic64_add_return((a), (v)) < 0)
#define atomic64_inc_and_test(v) (atomic64_inc_return(v) == 0)
#define atomic64_dec_and_test(v) (atomic64_dec_return(v) == 0)
#endif
/* __LP64__ */
#include <asm-generic/atomic.h>
#endif
#endif
/* _ASM_PARISC_ATOMIC_H_ */
include/asm-parisc/cacheflush.h
浏览文件 @
89a2fa5f
...
...
@@ -183,4 +183,10 @@ flush_cache_page(struct vm_area_struct *vma, unsigned long vmaddr, unsigned long
__flush_cache_page
(
vma
,
vmaddr
);
}
#ifdef CONFIG_DEBUG_RODATA
void
mark_rodata_ro
(
void
);
#endif
#endif
/* _PARISC_CACHEFLUSH_H */
include/asm-parisc/compat_ucontext.h
浏览文件 @
89a2fa5f
#ifndef _ASM_PARISC_COMPAT_UCONTEXT_H
#define _ASM_PARISC_COMPAT_UCONTEXT_H
#include<linux/compat.h>
#include<asm/compat_signal.h>
#include <linux/compat.h>
/* 32-bit ucontext as seen from an 64-bit kernel */
struct
compat_ucontext
{
...
...
include/asm-parisc/grfioctl.h
浏览文件 @
89a2fa5f
...
...
@@ -58,7 +58,7 @@
#define CRT_ID_ELK_1024DB 0x27849CA5
/* Elk 1024x768 double buffer */
#define CRT_ID_ELK_GS S9000_ID_A1924A
/* Elk 1280x1024 GreyScale */
#define CRT_ID_CRX24 S9000_ID_A1439A
/* Piranha */
#define CRT_ID_VISUALIZE_EG 0x2D08C0A7
/* Graffiti (built-in B132+/B160L) */
#define CRT_ID_VISUALIZE_EG 0x2D08C0A7
/* Graffiti
, A4450A
(built-in B132+/B160L) */
#define CRT_ID_THUNDER 0x2F23E5FC
/* Thunder 1 VISUALIZE 48*/
#define CRT_ID_THUNDER2 0x2F8D570E
/* Thunder 2 VISUALIZE 48 XP*/
#define CRT_ID_HCRX S9000_ID_HCRX
/* Hyperdrive HCRX */
...
...
include/asm-parisc/pci.h
浏览文件 @
89a2fa5f
...
...
@@ -18,6 +18,18 @@
*/
#define PCI_MAX_BUSSES 256
/* To be used as: mdelay(pci_post_reset_delay);
*
* post_reset is the time the kernel should stall to prevent anyone from
* accessing the PCI bus once #RESET is de-asserted.
* PCI spec somewhere says 1 second but with multi-PCI bus systems,
* this makes the boot time much longer than necessary.
* 20ms seems to work for all the HP PCI implementations to date.
*/
#define pci_post_reset_delay 50
/*
** pci_hba_data (aka H2P_OBJECT in HP/UX)
**
...
...
@@ -83,7 +95,7 @@ static __inline__ int pci_is_lmmio(struct pci_hba_data *hba, unsigned long a)
/*
** Convert between PCI (IO_VIEW) addresses and processor (PA_VIEW) addresses.
** See pci
bios
.c for more conversions used by Generic PCI code.
** See pci.c for more conversions used by Generic PCI code.
**
** Platform characteristics/firmware guarantee that
** (1) PA_VIEW - IO_VIEW = lmmio_offset for both LMMIO and ELMMIO
...
...
@@ -191,9 +203,6 @@ struct pci_bios_ops {
*/
extern
struct
pci_port_ops
*
pci_port
;
extern
struct
pci_bios_ops
*
pci_bios
;
extern
int
pci_post_reset_delay
;
/* delay after de-asserting #RESET */
extern
int
pci_hba_count
;
extern
struct
pci_hba_data
*
parisc_pci_hba
[];
#ifdef CONFIG_PCI
extern
void
pcibios_register_hba
(
struct
pci_hba_data
*
);
...
...
include/asm-parisc/pgalloc.h
浏览文件 @
89a2fa5f
...
...
@@ -137,7 +137,6 @@ static inline void pte_free_kernel(pte_t *pte)
#define pte_free(page) pte_free_kernel(page_address(page))
extern
int
do_check_pgt_cache
(
int
,
int
);
#define check_pgt_cache() do { } while (0)
#endif
include/asm-parisc/pgtable.h
浏览文件 @
89a2fa5f
...
...
@@ -213,7 +213,7 @@ extern void *vmalloc_start;
#define PAGE_COPY PAGE_EXECREAD
#define PAGE_RWX __pgprot(_PAGE_PRESENT | _PAGE_USER | _PAGE_READ | _PAGE_WRITE | _PAGE_EXEC |_PAGE_ACCESSED)
#define PAGE_KERNEL __pgprot(_PAGE_KERNEL)
#define PAGE_KERNEL_RO __pgprot(_PAGE_
PRESENT | _PAGE_EXEC | _PAGE_READ | _PAGE_DIRTY | _PAGE_ACCESSED
)
#define PAGE_KERNEL_RO __pgprot(_PAGE_
KERNEL & ~_PAGE_WRITE
)
#define PAGE_KERNEL_UNC __pgprot(_PAGE_KERNEL | _PAGE_NO_CACHE)
#define PAGE_GATEWAY __pgprot(_PAGE_PRESENT | _PAGE_USER | _PAGE_ACCESSED | _PAGE_GATEWAY| _PAGE_READ)
#define PAGE_FLUSH __pgprot(_PAGE_FLUSH)
...
...
include/asm-parisc/rt_sigframe.h
浏览文件 @
89a2fa5f
#ifndef _ASM_PARISC_RT_SIGFRAME_H
#define _ASM_PARISC_RT_SIGFRAME_H
#ifdef CONFIG_COMPAT
#include <asm/compat_rt_sigframe.h>
#endif
#define SIGRETURN_TRAMP 4
#define SIGRESTARTBLOCK_TRAMP 5
#define TRAMP_SIZE (SIGRETURN_TRAMP + SIGRESTARTBLOCK_TRAMP)
...
...
include/asm-parisc/unistd.h
浏览文件 @
89a2fa5f
...
...
@@ -761,8 +761,27 @@
#define __NR_keyctl (__NR_Linux + 266)
#define __NR_ioprio_set (__NR_Linux + 267)
#define __NR_ioprio_get (__NR_Linux + 268)
#define __NR_inotify_init (__NR_Linux + 269)
#define __NR_inotify_add_watch (__NR_Linux + 270)
#define __NR_inotify_rm_watch (__NR_Linux + 271)
#define __NR_migrate_pages (__NR_Linux + 272)
#define __NR_pselect6 (__NR_Linux + 273)
#define __NR_ppoll (__NR_Linux + 274)
#define __NR_openat (__NR_Linux + 275)
#define __NR_mkdirat (__NR_Linux + 276)
#define __NR_mknodat (__NR_Linux + 277)
#define __NR_fchownat (__NR_Linux + 278)
#define __NR_futimesat (__NR_Linux + 279)
#define __NR_newfstatat (__NR_Linux + 280)
#define __NR_unlinkat (__NR_Linux + 281)
#define __NR_renameat (__NR_Linux + 282)
#define __NR_linkat (__NR_Linux + 283)
#define __NR_symlinkat (__NR_Linux + 284)
#define __NR_readlinkat (__NR_Linux + 285)
#define __NR_fchmodat (__NR_Linux + 286)
#define __NR_faccessat (__NR_Linux + 287)
#define __NR_Linux_syscalls 2
69
#define __NR_Linux_syscalls 2
88
#define HPUX_GATEWAY_ADDR 0xC0000004
#define LINUX_GATEWAY_ADDR 0x100
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录