提交 89a2fa5f 编写于 作者: L Linus Torvalds

Merge master.kernel.org:/pub/scm/linux/kernel/git/kyle/parisc-2.6

...@@ -149,14 +149,20 @@ config HOTPLUG_CPU ...@@ -149,14 +149,20 @@ config HOTPLUG_CPU
default y if SMP default y if SMP
select HOTPLUG select HOTPLUG
config ARCH_SELECT_MEMORY_MODEL
def_bool y
depends on 64BIT
config ARCH_DISCONTIGMEM_ENABLE config ARCH_DISCONTIGMEM_ENABLE
bool "Discontiguous memory support (EXPERIMENTAL)" def_bool y
depends on 64BIT && EXPERIMENTAL depends on 64BIT
help
Say Y to support efficient handling of discontiguous physical memory, config ARCH_FLATMEM_ENABLE
for architectures which are either NUMA (Non-Uniform Memory Access) def_bool y
or have huge holes in the physical address space for other reasons.
See <file:Documentation/vm/numa> for more. config ARCH_DISCONTIGMEM_DEFAULT
def_bool y
depends on ARCH_DISCONTIGMEM_ENABLE
source "kernel/Kconfig.hz" source "kernel/Kconfig.hz"
source "mm/Kconfig" source "mm/Kconfig"
......
...@@ -11,4 +11,14 @@ config DEBUG_RWLOCK ...@@ -11,4 +11,14 @@ config DEBUG_RWLOCK
too many attempts. If you suspect a rwlock problem or a kernel too many attempts. If you suspect a rwlock problem or a kernel
hacker asks for this option then say Y. Otherwise say N. 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 endmenu
# #
# Automatically generated make config: don't edit # Automatically generated make config: don't edit
# Linux kernel version: 2.6.14-rc5-pa1 # Linux kernel version: 2.6.16-rc1-pa0
# Fri Oct 21 23:06:10 2005 # Tue Jan 17 08:21:01 2006
# #
CONFIG_PARISC=y CONFIG_PARISC=y
CONFIG_MMU=y CONFIG_MMU=y
...@@ -29,8 +29,6 @@ CONFIG_SYSVIPC=y ...@@ -29,8 +29,6 @@ CONFIG_SYSVIPC=y
# CONFIG_BSD_PROCESS_ACCT is not set # CONFIG_BSD_PROCESS_ACCT is not set
CONFIG_SYSCTL=y CONFIG_SYSCTL=y
# CONFIG_AUDIT is not set # CONFIG_AUDIT is not set
# CONFIG_HOTPLUG is not set
CONFIG_KOBJECT_UEVENT=y
CONFIG_IKCONFIG=y CONFIG_IKCONFIG=y
CONFIG_IKCONFIG_PROC=y CONFIG_IKCONFIG_PROC=y
CONFIG_INITRAMFS_SOURCE="" CONFIG_INITRAMFS_SOURCE=""
...@@ -38,8 +36,10 @@ CONFIG_INITRAMFS_SOURCE="" ...@@ -38,8 +36,10 @@ CONFIG_INITRAMFS_SOURCE=""
CONFIG_KALLSYMS=y CONFIG_KALLSYMS=y
# CONFIG_KALLSYMS_ALL is not set # CONFIG_KALLSYMS_ALL is not set
# CONFIG_KALLSYMS_EXTRA_PASS is not set # CONFIG_KALLSYMS_EXTRA_PASS is not set
CONFIG_HOTPLUG=y
CONFIG_PRINTK=y CONFIG_PRINTK=y
CONFIG_BUG=y CONFIG_BUG=y
CONFIG_ELF_CORE=y
CONFIG_BASE_FULL=y CONFIG_BASE_FULL=y
CONFIG_FUTEX=y CONFIG_FUTEX=y
CONFIG_EPOLL=y CONFIG_EPOLL=y
...@@ -48,8 +48,10 @@ CONFIG_CC_ALIGN_FUNCTIONS=0 ...@@ -48,8 +48,10 @@ CONFIG_CC_ALIGN_FUNCTIONS=0
CONFIG_CC_ALIGN_LABELS=0 CONFIG_CC_ALIGN_LABELS=0
CONFIG_CC_ALIGN_LOOPS=0 CONFIG_CC_ALIGN_LOOPS=0
CONFIG_CC_ALIGN_JUMPS=0 CONFIG_CC_ALIGN_JUMPS=0
CONFIG_SLAB=y
# CONFIG_TINY_SHMEM is not set # CONFIG_TINY_SHMEM is not set
CONFIG_BASE_SMALL=0 CONFIG_BASE_SMALL=0
# CONFIG_SLOB is not set
# #
# Loadable module support # Loadable module support
...@@ -57,9 +59,27 @@ CONFIG_BASE_SMALL=0 ...@@ -57,9 +59,27 @@ CONFIG_BASE_SMALL=0
CONFIG_MODULES=y CONFIG_MODULES=y
# CONFIG_MODULE_UNLOAD is not set # CONFIG_MODULE_UNLOAD is not set
CONFIG_OBSOLETE_MODPARM=y CONFIG_OBSOLETE_MODPARM=y
CONFIG_MODVERSIONS=y
# CONFIG_MODULE_SRCVERSION_ALL is not set # CONFIG_MODULE_SRCVERSION_ALL is not set
# CONFIG_KMOD 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 # Processor type and features
# #
...@@ -77,6 +97,7 @@ CONFIG_HZ=250 ...@@ -77,6 +97,7 @@ CONFIG_HZ=250
CONFIG_FLATMEM=y CONFIG_FLATMEM=y
CONFIG_FLAT_NODE_MEM_MAP=y CONFIG_FLAT_NODE_MEM_MAP=y
# CONFIG_SPARSEMEM_STATIC is not set # CONFIG_SPARSEMEM_STATIC is not set
CONFIG_SPLIT_PTLOCK_CPUS=4096
# CONFIG_PREEMPT is not set # CONFIG_PREEMPT is not set
# CONFIG_HPUX is not set # CONFIG_HPUX is not set
...@@ -84,8 +105,8 @@ CONFIG_FLAT_NODE_MEM_MAP=y ...@@ -84,8 +105,8 @@ CONFIG_FLAT_NODE_MEM_MAP=y
# Bus options (PCI, PCMCIA, EISA, GSC, ISA) # Bus options (PCI, PCMCIA, EISA, GSC, ISA)
# #
CONFIG_GSC=y CONFIG_GSC=y
# CONFIG_HPPB is not set CONFIG_HPPB=y
# CONFIG_IOMMU_CCIO is not set CONFIG_IOMMU_CCIO=y
CONFIG_GSC_LASI=y CONFIG_GSC_LASI=y
CONFIG_GSC_WAX=y CONFIG_GSC_WAX=y
CONFIG_EISA=y CONFIG_EISA=y
...@@ -165,8 +186,11 @@ CONFIG_IPV6=y ...@@ -165,8 +186,11 @@ CONFIG_IPV6=y
# CONFIG_LLC2 is not set # CONFIG_LLC2 is not set
# CONFIG_IPX is not set # CONFIG_IPX is not set
# CONFIG_ATALK is not set # CONFIG_ATALK is not set
#
# QoS and/or fair queueing
#
# CONFIG_NET_SCHED is not set # CONFIG_NET_SCHED is not set
# CONFIG_NET_CLS_ROUTE is not set
# #
# Network testing # Network testing
...@@ -205,6 +229,7 @@ CONFIG_STANDALONE=y ...@@ -205,6 +229,7 @@ CONFIG_STANDALONE=y
CONFIG_PARPORT=y CONFIG_PARPORT=y
CONFIG_PARPORT_PC=y CONFIG_PARPORT_PC=y
# CONFIG_PARPORT_SERIAL is not set # CONFIG_PARPORT_SERIAL is not set
CONFIG_PARPORT_NOT_PC=y
CONFIG_PARPORT_GSC=y CONFIG_PARPORT_GSC=y
# CONFIG_PARPORT_1284 is not set # CONFIG_PARPORT_1284 is not set
...@@ -230,14 +255,6 @@ CONFIG_BLK_DEV_RAM_COUNT=16 ...@@ -230,14 +255,6 @@ CONFIG_BLK_DEV_RAM_COUNT=16
CONFIG_CDROM_PKTCDVD=m CONFIG_CDROM_PKTCDVD=m
CONFIG_CDROM_PKTCDVD_BUFFERS=8 CONFIG_CDROM_PKTCDVD_BUFFERS=8
# CONFIG_CDROM_PKTCDVD_WCACHE is not set # 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 CONFIG_ATA_OVER_ETH=y
# #
...@@ -281,6 +298,7 @@ CONFIG_SCSI_SPI_ATTRS=y ...@@ -281,6 +298,7 @@ CONFIG_SCSI_SPI_ATTRS=y
# #
# SCSI low-level drivers # SCSI low-level drivers
# #
# CONFIG_ISCSI_TCP is not set
# CONFIG_BLK_DEV_3W_XXXX_RAID is not set # CONFIG_BLK_DEV_3W_XXXX_RAID is not set
# CONFIG_SCSI_3W_9XXX is not set # CONFIG_SCSI_3W_9XXX is not set
# CONFIG_SCSI_ACARD is not set # CONFIG_SCSI_ACARD is not set
...@@ -313,21 +331,19 @@ CONFIG_SCSI_SYM53C8XX_2=y ...@@ -313,21 +331,19 @@ CONFIG_SCSI_SYM53C8XX_2=y
CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=0 CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=0
CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16 CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16
CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64 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_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_PAS16 is not set
# CONFIG_SCSI_PSI240I is not set # CONFIG_SCSI_PSI240I is not set
# CONFIG_SCSI_QLOGIC_FAS is not set # CONFIG_SCSI_QLOGIC_FAS is not set
# CONFIG_SCSI_QLOGIC_FC is not set # CONFIG_SCSI_QLOGIC_FC is not set
# CONFIG_SCSI_QLOGIC_1280 is not set # CONFIG_SCSI_QLOGIC_1280 is not set
CONFIG_SCSI_QLA2XXX=y # CONFIG_SCSI_QLA_FC is not set
# 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_LPFC is not set # CONFIG_SCSI_LPFC is not set
# CONFIG_SCSI_SIM710 is not set # CONFIG_SCSI_SIM710 is not set
# CONFIG_SCSI_SYM53C416 is not set # CONFIG_SCSI_SYM53C416 is not set
...@@ -397,7 +413,7 @@ CONFIG_NETDEVICES=y ...@@ -397,7 +413,7 @@ CONFIG_NETDEVICES=y
# #
CONFIG_NET_ETHERNET=y CONFIG_NET_ETHERNET=y
# CONFIG_MII is not set # CONFIG_MII is not set
# CONFIG_LASI_82596 is not set CONFIG_LASI_82596=y
# CONFIG_HAPPYMEAL is not set # CONFIG_HAPPYMEAL is not set
# CONFIG_SUNGEM is not set # CONFIG_SUNGEM is not set
# CONFIG_CASSINI is not set # CONFIG_CASSINI is not set
...@@ -464,6 +480,7 @@ CONFIG_NET_RADIO=y ...@@ -464,6 +480,7 @@ CONFIG_NET_RADIO=y
# Wireless 802.11b ISA/PCI cards support # Wireless 802.11b ISA/PCI cards support
# #
# CONFIG_HERMES is not set # CONFIG_HERMES is not set
# CONFIG_ATMEL is not set
# #
# Prism GT/Duette 802.11(a/b/g) PCI/Cardbus support # Prism GT/Duette 802.11(a/b/g) PCI/Cardbus support
...@@ -527,7 +544,7 @@ CONFIG_KEYBOARD_ATKBD_HP_KEYCODES=y ...@@ -527,7 +544,7 @@ CONFIG_KEYBOARD_ATKBD_HP_KEYCODES=y
# CONFIG_KEYBOARD_XTKBD is not set # CONFIG_KEYBOARD_XTKBD is not set
# CONFIG_KEYBOARD_NEWTON is not set # CONFIG_KEYBOARD_NEWTON is not set
# CONFIG_KEYBOARD_HIL_OLD 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_INPUT_MOUSE=y
CONFIG_MOUSE_PS2=y CONFIG_MOUSE_PS2=y
# CONFIG_MOUSE_SERIAL is not set # CONFIG_MOUSE_SERIAL is not set
...@@ -535,7 +552,7 @@ CONFIG_MOUSE_PS2=y ...@@ -535,7 +552,7 @@ CONFIG_MOUSE_PS2=y
# CONFIG_MOUSE_LOGIBM is not set # CONFIG_MOUSE_LOGIBM is not set
# CONFIG_MOUSE_PC110PAD is not set # CONFIG_MOUSE_PC110PAD is not set
# CONFIG_MOUSE_VSXXXAA 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_JOYSTICK is not set
# CONFIG_INPUT_TOUCHSCREEN is not set # CONFIG_INPUT_TOUCHSCREEN is not set
CONFIG_INPUT_MISC=y CONFIG_INPUT_MISC=y
...@@ -549,7 +566,8 @@ CONFIG_SERIO=y ...@@ -549,7 +566,8 @@ CONFIG_SERIO=y
# CONFIG_SERIO_SERPORT is not set # CONFIG_SERIO_SERPORT is not set
# CONFIG_SERIO_PARKBD is not set # CONFIG_SERIO_PARKBD is not set
CONFIG_SERIO_GSCPS2=y 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_PCIPS2 is not set
CONFIG_SERIO_LIBPS2=y CONFIG_SERIO_LIBPS2=y
# CONFIG_SERIO_RAW is not set # CONFIG_SERIO_RAW is not set
...@@ -569,6 +587,7 @@ CONFIG_HW_CONSOLE=y ...@@ -569,6 +587,7 @@ CONFIG_HW_CONSOLE=y
CONFIG_SERIAL_8250=y CONFIG_SERIAL_8250=y
CONFIG_SERIAL_8250_CONSOLE=y CONFIG_SERIAL_8250_CONSOLE=y
CONFIG_SERIAL_8250_NR_UARTS=13 CONFIG_SERIAL_8250_NR_UARTS=13
CONFIG_SERIAL_8250_RUNTIME_UARTS=4
CONFIG_SERIAL_8250_EXTENDED=y CONFIG_SERIAL_8250_EXTENDED=y
CONFIG_SERIAL_8250_MANY_PORTS=y CONFIG_SERIAL_8250_MANY_PORTS=y
CONFIG_SERIAL_8250_SHARE_IRQ=y CONFIG_SERIAL_8250_SHARE_IRQ=y
...@@ -582,11 +601,10 @@ CONFIG_SERIAL_8250_SHARE_IRQ=y ...@@ -582,11 +601,10 @@ CONFIG_SERIAL_8250_SHARE_IRQ=y
# #
# Non-8250 serial port support # Non-8250 serial port support
# #
# CONFIG_SERIAL_MUX is not set CONFIG_SERIAL_MUX=y
# CONFIG_PDC_CONSOLE is not set CONFIG_SERIAL_MUX_CONSOLE=y
CONFIG_SERIAL_CORE=y CONFIG_SERIAL_CORE=y
CONFIG_SERIAL_CORE_CONSOLE=y CONFIG_SERIAL_CORE_CONSOLE=y
# CONFIG_SERIAL_JSM is not set
CONFIG_UNIX98_PTYS=y CONFIG_UNIX98_PTYS=y
CONFIG_LEGACY_PTYS=y CONFIG_LEGACY_PTYS=y
CONFIG_LEGACY_PTY_COUNT=256 CONFIG_LEGACY_PTY_COUNT=256
...@@ -625,6 +643,12 @@ CONFIG_GEN_RTC=y ...@@ -625,6 +643,12 @@ CONFIG_GEN_RTC=y
# #
# CONFIG_I2C is not set # CONFIG_I2C is not set
#
# SPI support
#
# CONFIG_SPI is not set
# CONFIG_SPI_MASTER is not set
# #
# Dallas's 1-wire bus # Dallas's 1-wire bus
# #
...@@ -661,7 +685,6 @@ CONFIG_FB=y ...@@ -661,7 +685,6 @@ CONFIG_FB=y
CONFIG_FB_CFB_FILLRECT=y CONFIG_FB_CFB_FILLRECT=y
CONFIG_FB_CFB_COPYAREA=y CONFIG_FB_CFB_COPYAREA=y
CONFIG_FB_CFB_IMAGEBLIT=y CONFIG_FB_CFB_IMAGEBLIT=y
CONFIG_FB_SOFT_CURSOR=y
# CONFIG_FB_MACMODES is not set # CONFIG_FB_MACMODES is not set
# CONFIG_FB_MODE_HELPERS is not set # CONFIG_FB_MODE_HELPERS is not set
# CONFIG_FB_TILEBLITTING is not set # CONFIG_FB_TILEBLITTING is not set
...@@ -671,6 +694,7 @@ CONFIG_FB_SOFT_CURSOR=y ...@@ -671,6 +694,7 @@ CONFIG_FB_SOFT_CURSOR=y
# CONFIG_FB_ASILIANT is not set # CONFIG_FB_ASILIANT is not set
# CONFIG_FB_IMSTT is not set # CONFIG_FB_IMSTT is not set
CONFIG_FB_STI=y CONFIG_FB_STI=y
# CONFIG_FB_S1D13XXX is not set
# CONFIG_FB_NVIDIA is not set # CONFIG_FB_NVIDIA is not set
# CONFIG_FB_RIVA is not set # CONFIG_FB_RIVA is not set
# CONFIG_FB_MATROX is not set # CONFIG_FB_MATROX is not set
...@@ -683,9 +707,7 @@ CONFIG_FB_STI=y ...@@ -683,9 +707,7 @@ CONFIG_FB_STI=y
# CONFIG_FB_KYRO is not set # CONFIG_FB_KYRO is not set
# CONFIG_FB_3DFX is not set # CONFIG_FB_3DFX is not set
# CONFIG_FB_VOODOO1 is not set # CONFIG_FB_VOODOO1 is not set
# CONFIG_FB_CYBLA is not set
# CONFIG_FB_TRIDENT is not set # CONFIG_FB_TRIDENT is not set
# CONFIG_FB_S1D13XXX is not set
# CONFIG_FB_VIRTUAL is not set # CONFIG_FB_VIRTUAL is not set
# #
...@@ -695,6 +717,7 @@ CONFIG_DUMMY_CONSOLE=y ...@@ -695,6 +717,7 @@ CONFIG_DUMMY_CONSOLE=y
CONFIG_DUMMY_CONSOLE_COLUMNS=160 CONFIG_DUMMY_CONSOLE_COLUMNS=160
CONFIG_DUMMY_CONSOLE_ROWS=64 CONFIG_DUMMY_CONSOLE_ROWS=64
CONFIG_FRAMEBUFFER_CONSOLE=y CONFIG_FRAMEBUFFER_CONSOLE=y
# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
CONFIG_STI_CONSOLE=y CONFIG_STI_CONSOLE=y
# CONFIG_FONTS is not set # CONFIG_FONTS is not set
CONFIG_FONT_8x8=y CONFIG_FONT_8x8=y
...@@ -713,7 +736,85 @@ CONFIG_LOGO_PARISC_CLUT224=y ...@@ -713,7 +736,85 @@ CONFIG_LOGO_PARISC_CLUT224=y
# #
# Sound # 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 # USB support
...@@ -722,6 +823,10 @@ CONFIG_USB_ARCH_HAS_HCD=y ...@@ -722,6 +823,10 @@ CONFIG_USB_ARCH_HAS_HCD=y
CONFIG_USB_ARCH_HAS_OHCI=y CONFIG_USB_ARCH_HAS_OHCI=y
# CONFIG_USB is not set # CONFIG_USB is not set
#
# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
#
# #
# USB Gadget Support # USB Gadget Support
# #
...@@ -877,18 +982,23 @@ CONFIG_NLS_DEFAULT="iso8859-1" ...@@ -877,18 +982,23 @@ CONFIG_NLS_DEFAULT="iso8859-1"
# Kernel hacking # Kernel hacking
# #
# CONFIG_PRINTK_TIME is not set # CONFIG_PRINTK_TIME is not set
CONFIG_DEBUG_KERNEL=y
CONFIG_MAGIC_SYSRQ=y CONFIG_MAGIC_SYSRQ=y
CONFIG_DEBUG_KERNEL=y
CONFIG_LOG_BUF_SHIFT=16 CONFIG_LOG_BUF_SHIFT=16
CONFIG_DETECT_SOFTLOCKUP=y CONFIG_DETECT_SOFTLOCKUP=y
# CONFIG_SCHEDSTATS is not set # CONFIG_SCHEDSTATS is not set
# CONFIG_DEBUG_SLAB is not set # CONFIG_DEBUG_SLAB is not set
# CONFIG_DEBUG_MUTEXES is not set
# CONFIG_DEBUG_SPINLOCK is not set # CONFIG_DEBUG_SPINLOCK is not set
# CONFIG_DEBUG_SPINLOCK_SLEEP is not set # CONFIG_DEBUG_SPINLOCK_SLEEP is not set
# CONFIG_DEBUG_KOBJECT is not set # CONFIG_DEBUG_KOBJECT is not set
# CONFIG_DEBUG_INFO is not set # CONFIG_DEBUG_INFO is not set
# CONFIG_DEBUG_IOREMAP is not set # CONFIG_DEBUG_IOREMAP is not set
# CONFIG_DEBUG_FS 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 # Security options
......
...@@ -22,10 +22,9 @@ ...@@ -22,10 +22,9 @@
#include <linux/linkage.h> #include <linux/linkage.h>
#include <asm/unistd.h> #include <asm/unistd.h>
.text
#define ENTRY_NAME(_name_) .word _name_ #define ENTRY_NAME(_name_) .word _name_
.section .rodata,"a"
.align 4 .align 4
.export hpux_call_table .export hpux_call_table
.import hpux_unimplemented_wrapper .import hpux_unimplemented_wrapper
......
...@@ -408,11 +408,10 @@ static void setup_bus_id(struct parisc_device *padev) ...@@ -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 * create_tree_node(char id, struct device *parent)
{ {
struct parisc_device *dev = kmalloc(sizeof(*dev), GFP_KERNEL); struct parisc_device *dev = kzalloc(sizeof(*dev), GFP_KERNEL);
if (!dev) if (!dev)
return NULL; return NULL;
memset(dev, 0, sizeof(*dev));
dev->hw_path = id; dev->hw_path = id;
dev->id.hw_type = HPHW_FAULTY; dev->id.hw_type = HPHW_FAULTY;
......
...@@ -48,9 +48,6 @@ EXPORT_SYMBOL(strrchr); ...@@ -48,9 +48,6 @@ EXPORT_SYMBOL(strrchr);
EXPORT_SYMBOL(strstr); EXPORT_SYMBOL(strstr);
EXPORT_SYMBOL(strpbrk); EXPORT_SYMBOL(strpbrk);
#include <linux/pm.h>
EXPORT_SYMBOL(pm_power_off);
#include <asm/atomic.h> #include <asm/atomic.h>
EXPORT_SYMBOL(__xchg8); EXPORT_SYMBOL(__xchg8);
EXPORT_SYMBOL(__xchg32); EXPORT_SYMBOL(__xchg32);
......
...@@ -47,18 +47,17 @@ ...@@ -47,18 +47,17 @@
* this makes the boot time much longer than necessary. * this makes the boot time much longer than necessary.
* 20ms seems to work for all the HP PCI implementations to date. * 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_port_ops *pci_port __read_mostly;
struct pci_bios_ops *pci_bios; 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. */ /* parisc_pci_hba used by pci_port->in/out() ops to lookup bus data. */
#define PCI_HBA_MAX 32 #define PCI_HBA_MAX 32
struct pci_hba_data *parisc_pci_hba[PCI_HBA_MAX]; static 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, ...@@ -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, void pcibios_bus_to_resource(struct pci_dev *dev, struct resource *res,
struct pci_bus_region *region) struct pci_bus_region *region)
{ {
#ifdef CONFIG_64BIT
struct pci_bus *bus = dev->bus; struct pci_bus *bus = dev->bus;
struct pci_hba_data *hba = HBA_DATA(bus->bridge->platform_data); struct pci_hba_data *hba = HBA_DATA(bus->bridge->platform_data);
#endif
if (res->flags & IORESOURCE_MEM) { if (res->flags & IORESOURCE_MEM) {
res->start = PCI_HOST_ADDR(hba, region->start); res->start = PCI_HOST_ADDR(hba, region->start);
......
...@@ -68,20 +68,20 @@ struct rdr_tbl_ent { ...@@ -68,20 +68,20 @@ struct rdr_tbl_ent {
}; };
static int perf_processor_interface __read_mostly = UNKNOWN_INTF; 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; 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 */ /* 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 }; { 0, 1, 4, 5, 6, 15, 16, 17, 18, 20, 21, 22, 23, 24, 25, -1 };
/* RDRs to write for PCX-U */ /* 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 }; { 0, 1, 4, 5, 6, 7, 16, 17, 18, 20, 21, 22, 23, 24, 25, -1 };
/* RDR register descriptions for PCX-W */ /* 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 */ { 19, 1, 8 }, /* RDR 0 */
{ 16, 1, 16 }, /* RDR 1 */ { 16, 1, 16 }, /* RDR 1 */
{ 72, 2, 0 }, /* RDR 2 */ { 72, 2, 0 }, /* RDR 2 */
...@@ -117,7 +117,7 @@ static struct rdr_tbl_ent perf_rdr_tbl_W[] = { ...@@ -117,7 +117,7 @@ static struct rdr_tbl_ent perf_rdr_tbl_W[] = {
}; };
/* RDR register descriptions for PCX-U */ /* 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 */ { 19, 1, 8 }, /* RDR 0 */
{ 32, 1, 16 }, /* RDR 1 */ { 32, 1, 16 }, /* RDR 1 */
{ 20, 1, 0 }, /* RDR 2 */ { 20, 1, 0 }, /* RDR 2 */
...@@ -156,7 +156,7 @@ static struct rdr_tbl_ent perf_rdr_tbl_U[] = { ...@@ -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 * A non-zero write_control in the above tables is a byte offset into
* this array. * this array.
*/ */
static uint64_t perf_bitmasks[] = { static const uint64_t perf_bitmasks[] = {
0x0000000000000000ul, /* first dbl word must be zero */ 0x0000000000000000ul, /* first dbl word must be zero */
0xfdffe00000000000ul, /* RDR0 bitmask */ 0xfdffe00000000000ul, /* RDR0 bitmask */
0x003f000000000000ul, /* RDR1 bitmask */ 0x003f000000000000ul, /* RDR1 bitmask */
...@@ -173,7 +173,7 @@ static uint64_t perf_bitmasks[] = { ...@@ -173,7 +173,7 @@ static uint64_t perf_bitmasks[] = {
* Write control bitmasks for Pa-8700 processor given * Write control bitmasks for Pa-8700 processor given
* somethings have changed slightly. * somethings have changed slightly.
*/ */
static uint64_t perf_bitmasks_piranha[] = { static const uint64_t perf_bitmasks_piranha[] = {
0x0000000000000000ul, /* first dbl word must be zero */ 0x0000000000000000ul, /* first dbl word must be zero */
0xfdffe00000000000ul, /* RDR0 bitmask */ 0xfdffe00000000000ul, /* RDR0 bitmask */
0x003f000000000000ul, /* RDR1 bitmask */ 0x003f000000000000ul, /* RDR1 bitmask */
...@@ -186,7 +186,7 @@ static uint64_t perf_bitmasks_piranha[] = { ...@@ -186,7 +186,7 @@ static uint64_t perf_bitmasks_piranha[] = {
0xfffc000000000000ul 0xfffc000000000000ul
}; };
static uint64_t *bitmask_array; /* array of bitmasks to use */ static const uint64_t *bitmask_array; /* array of bitmasks to use */
/****************************************************************************** /******************************************************************************
* Function Prototypes * Function Prototypes
...@@ -200,7 +200,7 @@ static ssize_t perf_write(struct file *file, const char __user *buf, size_t coun ...@@ -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 long perf_ioctl(struct file *file, unsigned int cmd, unsigned long arg);
static void perf_start_counters(void); static void perf_start_counters(void);
static int perf_stop_counters(uint32_t *raddr); 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_read_ubuf(uint32_t rdr_num, uint64_t *buffer);
static int perf_rdr_clear(uint32_t rdr_num); static int perf_rdr_clear(uint32_t rdr_num);
static int perf_write_image(uint64_t *memaddr); 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) ...@@ -444,7 +444,6 @@ static long perf_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
uint32_t raddr[4]; uint32_t raddr[4];
int error = 0; int error = 0;
lock_kernel();
switch (cmd) { switch (cmd) {
case PA_PERF_ON: case PA_PERF_ON:
...@@ -477,8 +476,6 @@ static long perf_ioctl(struct file *file, unsigned int cmd, unsigned long arg) ...@@ -477,8 +476,6 @@ static long perf_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
error = -ENOTTY; error = -ENOTTY;
} }
unlock_kernel();
return error; return error;
} }
...@@ -655,7 +652,7 @@ static int perf_stop_counters(uint32_t *raddr) ...@@ -655,7 +652,7 @@ static int perf_stop_counters(uint32_t *raddr)
* Retrieve a pointer to the description of what this * Retrieve a pointer to the description of what this
* RDR contains. * 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) { if (perf_processor_interface == ONYX_INTF) {
return &perf_rdr_tbl_U[rdr_num]; return &perf_rdr_tbl_U[rdr_num];
...@@ -673,7 +670,7 @@ static int perf_rdr_read_ubuf(uint32_t rdr_num, uint64_t *buffer) ...@@ -673,7 +670,7 @@ static int perf_rdr_read_ubuf(uint32_t rdr_num, uint64_t *buffer)
{ {
uint64_t data, data_mask = 0; uint64_t data, data_mask = 0;
uint32_t width, xbits, i; uint32_t width, xbits, i;
struct rdr_tbl_ent *tentry; const struct rdr_tbl_ent *tentry;
tentry = perf_rdr_get_entry(rdr_num); tentry = perf_rdr_get_entry(rdr_num);
if ((width = tentry->width) == 0) if ((width = tentry->width) == 0)
...@@ -721,7 +718,7 @@ static int perf_rdr_read_ubuf(uint32_t rdr_num, uint64_t *buffer) ...@@ -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) static int perf_rdr_clear(uint32_t rdr_num)
{ {
struct rdr_tbl_ent *tentry; const struct rdr_tbl_ent *tentry;
int32_t i; int32_t i;
tentry = perf_rdr_get_entry(rdr_num); tentry = perf_rdr_get_entry(rdr_num);
...@@ -753,10 +750,11 @@ static int perf_write_image(uint64_t *memaddr) ...@@ -753,10 +750,11 @@ static int perf_write_image(uint64_t *memaddr)
uint64_t buffer[MAX_RDR_WORDS]; uint64_t buffer[MAX_RDR_WORDS];
uint64_t *bptr; uint64_t *bptr;
uint32_t dwords; uint32_t dwords;
uint32_t *intrigue_rdr; const uint32_t *intrigue_rdr;
uint64_t *intrigue_bitmask, tmp64; const uint64_t *intrigue_bitmask;
uint64_t tmp64;
void __iomem *runway; void __iomem *runway;
struct rdr_tbl_ent *tentry; const struct rdr_tbl_ent *tentry;
int i; int i;
/* Clear out counters */ /* Clear out counters */
...@@ -830,7 +828,7 @@ static int perf_write_image(uint64_t *memaddr) ...@@ -830,7 +828,7 @@ static int perf_write_image(uint64_t *memaddr)
*/ */
static void perf_rdr_write(uint32_t rdr_num, uint64_t *buffer) 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; int32_t i;
printk("perf_rdr_write\n"); printk("perf_rdr_write\n");
......
...@@ -25,7 +25,7 @@ ...@@ -25,7 +25,7 @@
#define PCXU_IMAGE_SIZE 584 #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: * CPI:
* *
...@@ -2093,7 +2093,7 @@ static uint32_t onyx_images[][PCXU_IMAGE_SIZE/sizeof(uint32_t)] = { ...@@ -2093,7 +2093,7 @@ static uint32_t onyx_images[][PCXU_IMAGE_SIZE/sizeof(uint32_t)] = {
}; };
#define PCXW_IMAGE_SIZE 576 #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) * CPI: FROM CPI.IDF (Image 0)
* *
......
...@@ -54,27 +54,6 @@ ...@@ -54,27 +54,6 @@
#include <asm/uaccess.h> #include <asm/uaccess.h>
#include <asm/unwind.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) void default_idle(void)
{ {
barrier(); barrier();
...@@ -102,12 +81,7 @@ void cpu_idle(void) ...@@ -102,12 +81,7 @@ void cpu_idle(void)
} }
#ifdef __LP64__ #define COMMAND_GLOBAL F_EXTEND(0xfffe0030)
#define COMMAND_GLOBAL 0xfffffffffffe0030UL
#else
#define COMMAND_GLOBAL 0xfffe0030
#endif
#define CMD_RESET 5 /* reset any module */ #define CMD_RESET 5 /* reset any module */
/* /*
...@@ -162,6 +136,7 @@ void machine_halt(void) ...@@ -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 * This routine is called from sys_reboot to actually turn off the
...@@ -170,8 +145,8 @@ void machine_halt(void) ...@@ -170,8 +145,8 @@ void machine_halt(void)
void machine_power_off(void) void machine_power_off(void)
{ {
/* If there is a registered power off handler, call it. */ /* If there is a registered power off handler, call it. */
if(pm_power_off) if (chassis_power_off)
pm_power_off(); chassis_power_off();
/* Put the soft power button back under hardware control. /* Put the soft power button back under hardware control.
* If the user had already pressed the power button, the * If the user had already pressed the power button, the
...@@ -187,6 +162,8 @@ void machine_power_off(void) ...@@ -187,6 +162,8 @@ void machine_power_off(void)
KERN_EMERG "Please power this system off now."); 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 * Create a kernel thread
......
...@@ -91,7 +91,7 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data) ...@@ -91,7 +91,7 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data)
int copied; int copied;
#ifdef __LP64__ #ifdef __LP64__
if (is_compat_task(child)) { if (personality(child->personality) == PER_LINUX32) {
unsigned int tmp; unsigned int tmp;
addr &= 0xffffffffL; addr &= 0xffffffffL;
...@@ -123,7 +123,7 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data) ...@@ -123,7 +123,7 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data)
case PTRACE_POKEDATA: case PTRACE_POKEDATA:
ret = 0; ret = 0;
#ifdef __LP64__ #ifdef __LP64__
if (is_compat_task(child)) { if (personality(child->personality) == PER_LINUX32) {
unsigned int tmp = (unsigned int)data; unsigned int tmp = (unsigned int)data;
DBG("sys_ptrace(POKE%s, %d, %lx, %lx)\n", DBG("sys_ptrace(POKE%s, %d, %lx, %lx)\n",
request == PTRACE_POKETEXT ? "TEXT" : "DATA", request == PTRACE_POKETEXT ? "TEXT" : "DATA",
...@@ -146,7 +146,7 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data) ...@@ -146,7 +146,7 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data)
case PTRACE_PEEKUSR: { case PTRACE_PEEKUSR: {
ret = -EIO; ret = -EIO;
#ifdef __LP64__ #ifdef __LP64__
if (is_compat_task(child)) { if (personality(child->personality) == PER_LINUX32) {
unsigned int tmp; unsigned int tmp;
if (addr & (sizeof(int)-1)) if (addr & (sizeof(int)-1))
...@@ -205,7 +205,7 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data) ...@@ -205,7 +205,7 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data)
goto out_tsk; goto out_tsk;
} }
#ifdef __LP64__ #ifdef __LP64__
if (is_compat_task(child)) { if (personality(child->personality) == PER_LINUX32) {
if (addr & (sizeof(int)-1)) if (addr & (sizeof(int)-1))
goto out_tsk; goto out_tsk;
if ((addr = translate_usr_offset(addr)) < 0) if ((addr = translate_usr_offset(addr)) < 0)
......
...@@ -317,7 +317,7 @@ setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info, ...@@ -317,7 +317,7 @@ setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info,
if(personality(current->personality) == PER_LINUX32) { if(personality(current->personality) == PER_LINUX32) {
DBG(1,"setup_rt_frame: frame->info = 0x%p\n", &compat_frame->info); DBG(1,"setup_rt_frame: frame->info = 0x%p\n", &compat_frame->info);
err |= compat_copy_siginfo_to_user(&compat_frame->info, info); err |= copy_siginfo_to_user32(&compat_frame->info, info);
DBG(1,"SETUP_RT_FRAME: 1\n"); DBG(1,"SETUP_RT_FRAME: 1\n");
compat_val = (compat_int_t)current->sas_ss_sp; compat_val = (compat_int_t)current->sas_ss_sp;
err |= __put_user(compat_val, &compat_frame->uc.uc_stack.ss_sp); err |= __put_user(compat_val, &compat_frame->uc.uc_stack.ss_sp);
......
...@@ -31,7 +31,6 @@ ...@@ -31,7 +31,6 @@
#include <linux/types.h> #include <linux/types.h>
#include <linux/errno.h> #include <linux/errno.h>
#include <asm/compat_signal.h>
#include <asm/uaccess.h> #include <asm/uaccess.h>
#include "signal32.h" #include "signal32.h"
...@@ -398,3 +397,104 @@ setup_sigcontext32(struct compat_sigcontext __user *sc, struct compat_regfile __ ...@@ -398,3 +397,104 @@ setup_sigcontext32(struct compat_sigcontext __user *sc, struct compat_regfile __
return err; 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;
}
...@@ -20,8 +20,34 @@ ...@@ -20,8 +20,34 @@
#define _PARISC64_KERNEL_SIGNAL32_H #define _PARISC64_KERNEL_SIGNAL32_H
#include <linux/compat.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 */ /* ELF32 signal handling */
...@@ -29,6 +55,103 @@ struct k_sigaction32 { ...@@ -29,6 +55,103 @@ struct k_sigaction32 {
struct compat_sigaction sa; 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_32to64(sigset_t *s64, compat_sigset_t *s32);
void sigset_64to32(compat_sigset_t *s32, sigset_t *s64); void sigset_64to32(compat_sigset_t *s32, sigset_t *s64);
int do_sigaltstack32 (const compat_stack_t __user *uss32, int do_sigaltstack32 (const compat_stack_t __user *uss32,
......
...@@ -650,6 +650,8 @@ end_linux_gateway_page: ...@@ -650,6 +650,8 @@ end_linux_gateway_page:
#define LWS_ENTRY(_name_) .word (lws_##_name_ - linux_gateway_page) #define LWS_ENTRY(_name_) .word (lws_##_name_ - linux_gateway_page)
#endif #endif
.section .rodata,"a"
.align 4096 .align 4096
/* Light-weight-syscall table */ /* Light-weight-syscall table */
/* Start of lws table. */ /* Start of lws table. */
......
...@@ -374,5 +374,24 @@ ...@@ -374,5 +374,24 @@
ENTRY_SAME(keyctl) ENTRY_SAME(keyctl)
ENTRY_SAME(ioprio_set) ENTRY_SAME(ioprio_set)
ENTRY_SAME(ioprio_get) 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 */ /* Nothing yet */
...@@ -193,10 +193,9 @@ void show_stack(struct task_struct *task, unsigned long *s) ...@@ -193,10 +193,9 @@ void show_stack(struct task_struct *task, unsigned long *s)
HERE: HERE:
asm volatile ("copy %%r30, %0" : "=r"(sp)); asm volatile ("copy %%r30, %0" : "=r"(sp));
r = (struct pt_regs *)kmalloc(sizeof(struct pt_regs), GFP_KERNEL); r = kzalloc(sizeof(struct pt_regs), GFP_KERNEL);
if (!r) if (!r)
return; return;
memset(r, 0, sizeof(struct pt_regs));
r->iaoq[0] = (unsigned long)&&HERE; r->iaoq[0] = (unsigned long)&&HERE;
r->gr[2] = (unsigned long)__builtin_return_address(0); r->gr[2] = (unsigned long)__builtin_return_address(0);
r->gr[30] = sp; r->gr[30] = sp;
......
...@@ -337,6 +337,7 @@ decode_fpu(unsigned int Fpu_register[], unsigned int trap_counts[]) ...@@ -337,6 +337,7 @@ decode_fpu(unsigned int Fpu_register[], unsigned int trap_counts[])
} }
break; break;
case INVALIDEXCEPTION: case INVALIDEXCEPTION:
case OPC_2E_INVALIDEXCEPTION:
update_trap_counts(Fpu_register, aflags, bflags, trap_counts); update_trap_counts(Fpu_register, aflags, bflags, trap_counts);
return SIGNALCODE(SIGFPE, FPE_FLTINV); return SIGNALCODE(SIGFPE, FPE_FLTINV);
case DIVISIONBYZEROEXCEPTION: case DIVISIONBYZEROEXCEPTION:
......
...@@ -371,17 +371,11 @@ static void __init setup_bootmem(void) ...@@ -371,17 +371,11 @@ static void __init setup_bootmem(void)
void free_initmem(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; unsigned long addr;
printk(KERN_INFO "Freeing unused kernel memory: "); printk(KERN_INFO "Freeing unused kernel memory: ");
#if 1 #ifdef CONFIG_DEBUG_KERNEL
/* Attempt to catch anyone trying to execute code here /* Attempt to catch anyone trying to execute code here
* by filling the page with BRK insns. * by filling the page with BRK insns.
* *
...@@ -414,9 +408,21 @@ void free_initmem(void) ...@@ -414,9 +408,21 @@ void free_initmem(void)
pdc_chassis_send_status(PDC_CHASSIS_DIRECT_BCOMPLETE); pdc_chassis_send_status(PDC_CHASSIS_DIRECT_BCOMPLETE);
printk("%luk freed\n", (unsigned long)(&__init_end - &__init_begin) >> 10); 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 * Just an arbitrary offset to serve as a "hole" between mapping areas
* (between top of physical memory and a potential pcxl dma mapping * (between top of physical memory and a potential pcxl dma mapping
...@@ -477,11 +483,6 @@ void __init mem_init(void) ...@@ -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; unsigned long *empty_zero_page __read_mostly;
void show_mem(void) void show_mem(void)
...@@ -690,7 +691,7 @@ static void __init pagetable_init(void) ...@@ -690,7 +691,7 @@ static void __init pagetable_init(void)
#ifdef CONFIG_BLK_DEV_INITRD #ifdef CONFIG_BLK_DEV_INITRD
if (initrd_end && initrd_end > mem_limit) { 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), map_pages(initrd_start, __pa(initrd_start),
initrd_end - initrd_start, PAGE_KERNEL); initrd_end - initrd_start, PAGE_KERNEL);
} }
...@@ -792,8 +793,6 @@ map_hpux_gateway_page(struct task_struct *tsk, struct mm_struct *mm) ...@@ -792,8 +793,6 @@ map_hpux_gateway_page(struct task_struct *tsk, struct mm_struct *mm)
EXPORT_SYMBOL(map_hpux_gateway_page); EXPORT_SYMBOL(map_hpux_gateway_page);
#endif #endif
extern void flush_tlb_all_local(void);
void __init paging_init(void) void __init paging_init(void)
{ {
int i; int i;
...@@ -802,7 +801,7 @@ void __init paging_init(void) ...@@ -802,7 +801,7 @@ void __init paging_init(void)
pagetable_init(); pagetable_init();
gateway_init(); gateway_init();
flush_cache_all_local(); /* start with known state */ flush_cache_all_local(); /* start with known state */
flush_tlb_all_local(); flush_tlb_all_local(NULL);
for (i = 0; i < npmem_ranges; i++) { for (i = 0; i < npmem_ranges; i++) {
unsigned long zones_size[MAX_NR_ZONES] = { 0, 0, 0 }; unsigned long zones_size[MAX_NR_ZONES] = { 0, 0, 0 };
...@@ -993,7 +992,7 @@ void flush_tlb_all(void) ...@@ -993,7 +992,7 @@ void flush_tlb_all(void)
do_recycle++; do_recycle++;
} }
spin_unlock(&sid_lock); 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) { if (do_recycle) {
spin_lock(&sid_lock); spin_lock(&sid_lock);
recycle_sids(recycle_ndirty,recycle_dirty_array); recycle_sids(recycle_ndirty,recycle_dirty_array);
......
...@@ -1423,7 +1423,7 @@ static void __init ccio_init_resources(struct ioc *ioc) ...@@ -1423,7 +1423,7 @@ static void __init ccio_init_resources(struct ioc *ioc)
struct resource *res = ioc->mmio_region; struct resource *res = ioc->mmio_region;
char *name = kmalloc(14, GFP_KERNEL); char *name = kmalloc(14, GFP_KERNEL);
sprintf(name, "GSC Bus [%d/]", ioc->hw_path); snprintf(name, 14, "GSC Bus [%d/]", ioc->hw_path);
ccio_init_resource(res, name, &ioc->ioc_regs->io_io_low); ccio_init_resource(res, name, &ioc->ioc_regs->io_io_low);
ccio_init_resource(res + 1, name, &ioc->ioc_regs->io_io_low_hv); 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) ...@@ -1557,12 +1557,11 @@ static int ccio_probe(struct parisc_device *dev)
int i; int i;
struct ioc *ioc, **ioc_p = &ioc_list; struct ioc *ioc, **ioc_p = &ioc_list;
ioc = kmalloc(sizeof(struct ioc), GFP_KERNEL); ioc = kzalloc(sizeof(struct ioc), GFP_KERNEL);
if (ioc == NULL) { if (ioc == NULL) {
printk(KERN_ERR MODULE_NAME ": memory allocation failure\n"); printk(KERN_ERR MODULE_NAME ": memory allocation failure\n");
return 1; return 1;
} }
memset(ioc, 0, sizeof(struct ioc));
ioc->name = dev->id.hversion == U2_IOA_RUNWAY ? "U2" : "UTurn"; ioc->name = dev->id.hversion == U2_IOA_RUNWAY ? "U2" : "UTurn";
...@@ -1578,7 +1577,7 @@ static int ccio_probe(struct parisc_device *dev) ...@@ -1578,7 +1577,7 @@ static int ccio_probe(struct parisc_device *dev)
ccio_ioc_init(ioc); ccio_ioc_init(ioc);
ccio_init_resources(ioc); ccio_init_resources(ioc);
hppa_dma_ops = &ccio_ops; hppa_dma_ops = &ccio_ops;
dev->dev.platform_data = kmalloc(sizeof(struct pci_hba_data), GFP_KERNEL); dev->dev.platform_data = kzalloc(sizeof(struct pci_hba_data), GFP_KERNEL);
/* if this fails, no I/O cards will work, so may as well bug */ /* if this fails, no I/O cards will work, so may as well bug */
BUG_ON(dev->dev.platform_data == NULL); BUG_ON(dev->dev.platform_data == NULL);
......
...@@ -989,14 +989,12 @@ static int __init dino_probe(struct parisc_device *dev) ...@@ -989,14 +989,12 @@ static int __init dino_probe(struct parisc_device *dev)
*/ */
} }
dino_dev = kmalloc(sizeof(struct dino_device), GFP_KERNEL); dino_dev = kzalloc(sizeof(struct dino_device), GFP_KERNEL);
if (!dino_dev) { if (!dino_dev) {
printk("dino_init_chip - couldn't alloc dino_device\n"); printk("dino_init_chip - couldn't alloc dino_device\n");
return 1; return 1;
} }
memset(dino_dev, 0, sizeof(struct dino_device));
dino_dev->hba.dev = dev; dino_dev->hba.dev = dev;
dino_dev->hba.base_addr = ioremap(hpa, 4096); dino_dev->hba.base_addr = ioremap(hpa, 4096);
dino_dev->hba.lmmio_space_offset = 0; /* CPU addrs == bus addrs */ dino_dev->hba.lmmio_space_offset = 0; /* CPU addrs == bus addrs */
......
...@@ -60,12 +60,11 @@ static int hppb_probe(struct parisc_device *dev) ...@@ -60,12 +60,11 @@ static int hppb_probe(struct parisc_device *dev)
} }
if(card->hpa) { if(card->hpa) {
card->next = kmalloc(sizeof(struct hppb_card), GFP_KERNEL); card->next = kzalloc(sizeof(struct hppb_card), GFP_KERNEL);
if(!card->next) { if(!card->next) {
printk(KERN_ERR "HP-PB: Unable to allocate memory.\n"); printk(KERN_ERR "HP-PB: Unable to allocate memory.\n");
return 1; return 1;
} }
memset(card->next, '\0', sizeof(struct hppb_card));
card = card->next; card = card->next;
} }
printk(KERN_INFO "Found GeckoBoa at 0x%lx\n", dev->hpa.start); printk(KERN_INFO "Found GeckoBoa at 0x%lx\n", dev->hpa.start);
......
...@@ -873,28 +873,24 @@ void *iosapic_register(unsigned long hpa) ...@@ -873,28 +873,24 @@ void *iosapic_register(unsigned long hpa)
return NULL; return NULL;
} }
isi = (struct iosapic_info *)kmalloc(sizeof(struct iosapic_info), GFP_KERNEL); isi = (struct iosapic_info *)kzalloc(sizeof(struct iosapic_info), GFP_KERNEL);
if (!isi) { if (!isi) {
BUG(); BUG();
return NULL; return NULL;
} }
memset(isi, 0, sizeof(struct iosapic_info));
isi->addr = ioremap(hpa, 4096); isi->addr = ioremap(hpa, 4096);
isi->isi_hpa = hpa; isi->isi_hpa = hpa;
isi->isi_version = iosapic_rd_version(isi); isi->isi_version = iosapic_rd_version(isi);
isi->isi_num_vectors = IOSAPIC_IRDT_MAX_ENTRY(isi->isi_version) + 1; isi->isi_num_vectors = IOSAPIC_IRDT_MAX_ENTRY(isi->isi_version) + 1;
vip = isi->isi_vector = (struct vector_info *) vip = isi->isi_vector = (struct vector_info *)
kmalloc(sizeof(struct vector_info) * isi->isi_num_vectors, GFP_KERNEL); kzalloc(sizeof(struct vector_info) * isi->isi_num_vectors, GFP_KERNEL);
if (vip == NULL) { if (vip == NULL) {
kfree(isi); kfree(isi);
return NULL; return NULL;
} }
memset(vip, 0, sizeof(struct vector_info) * isi->isi_num_vectors);
for (cnt=0; cnt < isi->isi_num_vectors; cnt++, vip++) { for (cnt=0; cnt < isi->isi_num_vectors; cnt++, vip++) {
vip->irqline = (unsigned char) cnt; vip->irqline = (unsigned char) cnt;
vip->iosapic = isi; vip->iosapic = isi;
......
...@@ -166,11 +166,12 @@ static void lasi_power_off(void) ...@@ -166,11 +166,12 @@ static void lasi_power_off(void)
int __init int __init
lasi_init_chip(struct parisc_device *dev) lasi_init_chip(struct parisc_device *dev)
{ {
extern void (*chassis_power_off)(void);
struct gsc_asic *lasi; struct gsc_asic *lasi;
struct gsc_irq gsc_irq; struct gsc_irq gsc_irq;
int ret; int ret;
lasi = kmalloc(sizeof(*lasi), GFP_KERNEL); lasi = kzalloc(sizeof(*lasi), GFP_KERNEL);
if (!lasi) if (!lasi)
return -ENOMEM; return -ENOMEM;
...@@ -222,7 +223,7 @@ lasi_init_chip(struct parisc_device *dev) ...@@ -222,7 +223,7 @@ lasi_init_chip(struct parisc_device *dev)
* ensure that only the first LASI (the one controlling the power off) * ensure that only the first LASI (the one controlling the power off)
* should set the HPA here */ * should set the HPA here */
lasi_power_off_hpa = lasi->hpa; lasi_power_off_hpa = lasi->hpa;
pm_power_off = lasi_power_off; chassis_power_off = lasi_power_off;
return ret; return ret;
} }
......
...@@ -1565,7 +1565,7 @@ lba_driver_probe(struct parisc_device *dev) ...@@ -1565,7 +1565,7 @@ lba_driver_probe(struct parisc_device *dev)
} else if (IS_MERCURY(dev) || IS_QUICKSILVER(dev)) { } else if (IS_MERCURY(dev) || IS_QUICKSILVER(dev)) {
func_class &= 0xff; func_class &= 0xff;
version = kmalloc(6, GFP_KERNEL); version = kmalloc(6, GFP_KERNEL);
sprintf(version,"TR%d.%d",(func_class >> 4),(func_class & 0xf)); snprintf(version, 6, "TR%d.%d",(func_class >> 4),(func_class & 0xf));
/* We could use one printk for both Elroy and Mercury, /* We could use one printk for both Elroy and Mercury,
* but for the mask for func_class. * but for the mask for func_class.
*/ */
...@@ -1586,14 +1586,12 @@ lba_driver_probe(struct parisc_device *dev) ...@@ -1586,14 +1586,12 @@ lba_driver_probe(struct parisc_device *dev)
** have an IRT entry will get NULL back from iosapic code. ** have an IRT entry will get NULL back from iosapic code.
*/ */
lba_dev = kmalloc(sizeof(struct lba_device), GFP_KERNEL); lba_dev = kzalloc(sizeof(struct lba_device), GFP_KERNEL);
if (!lba_dev) { if (!lba_dev) {
printk(KERN_ERR "lba_init_chip - couldn't alloc lba_device\n"); printk(KERN_ERR "lba_init_chip - couldn't alloc lba_device\n");
return(1); return(1);
} }
memset(lba_dev, 0, sizeof(struct lba_device));
/* ---------- First : initialize data we already have --------- */ /* ---------- First : initialize data we already have --------- */
......
此差异已折叠。
...@@ -2064,14 +2064,13 @@ sba_driver_callback(struct parisc_device *dev) ...@@ -2064,14 +2064,13 @@ sba_driver_callback(struct parisc_device *dev)
printk(KERN_INFO "%s found %s at 0x%lx\n", printk(KERN_INFO "%s found %s at 0x%lx\n",
MODULE_NAME, version, dev->hpa.start); MODULE_NAME, version, dev->hpa.start);
sba_dev = kmalloc(sizeof(struct sba_device), GFP_KERNEL); sba_dev = kzalloc(sizeof(struct sba_device), GFP_KERNEL);
if (!sba_dev) { if (!sba_dev) {
printk(KERN_ERR MODULE_NAME " - couldn't alloc sba_device\n"); printk(KERN_ERR MODULE_NAME " - couldn't alloc sba_device\n");
return -ENOMEM; return -ENOMEM;
} }
parisc_set_drvdata(dev, sba_dev); parisc_set_drvdata(dev, sba_dev);
memset(sba_dev, 0, sizeof(struct sba_device));
for(i=0; i<MAX_IOC; i++) for(i=0; i<MAX_IOC; i++)
spin_lock_init(&(sba_dev->ioc[i].res_lock)); spin_lock_init(&(sba_dev->ioc[i].res_lock));
......
...@@ -89,6 +89,9 @@ static struct superio_device sio_dev; ...@@ -89,6 +89,9 @@ static struct superio_device sio_dev;
#define DBG_INIT(x...) #define DBG_INIT(x...)
#endif #endif
#define SUPERIO "SuperIO"
#define PFX SUPERIO ": "
static irqreturn_t static irqreturn_t
superio_interrupt(int parent_irq, void *devp, struct pt_regs *regs) 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) ...@@ -117,7 +120,7 @@ superio_interrupt(int parent_irq, void *devp, struct pt_regs *regs)
local_irq = results & 0x0f; local_irq = results & 0x0f;
if (local_irq == 2 || local_irq > 7) { if (local_irq == 2 || local_irq > 7) {
printk(KERN_ERR "SuperIO: slave interrupted!\n"); printk(KERN_ERR PFX "slave interrupted!\n");
return IRQ_HANDLED; return IRQ_HANDLED;
} }
...@@ -128,7 +131,7 @@ superio_interrupt(int parent_irq, void *devp, struct pt_regs *regs) ...@@ -128,7 +131,7 @@ superio_interrupt(int parent_irq, void *devp, struct pt_regs *regs)
outb(OCW3_ISR,IC_PIC1+0); outb(OCW3_ISR,IC_PIC1+0);
results = inb(IC_PIC1+0); results = inb(IC_PIC1+0);
if ((results & 0x80) == 0) { /* if ISR7 not set: spurious */ 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; return IRQ_HANDLED;
} }
} }
...@@ -163,27 +166,27 @@ superio_init(struct pci_dev *pcidev) ...@@ -163,27 +166,27 @@ superio_init(struct pci_dev *pcidev)
/* ...then properly fixup the USB to point at suckyio PIC */ /* ...then properly fixup the USB to point at suckyio PIC */
sio->usb_pdev->irq = superio_fixup_irq(sio->usb_pdev); 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_name(pdev), pdev->irq);
pci_read_config_dword (pdev, SIO_SP1BAR, &sio->sp1_base); pci_read_config_dword (pdev, SIO_SP1BAR, &sio->sp1_base);
sio->sp1_base &= ~1; 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); pci_read_config_dword (pdev, SIO_SP2BAR, &sio->sp2_base);
sio->sp2_base &= ~1; 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); pci_read_config_dword (pdev, SIO_PPBAR, &sio->pp_base);
sio->pp_base &= ~1; 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); pci_read_config_dword (pdev, SIO_FDCBAR, &sio->fdc_base);
sio->fdc_base &= ~1; 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); pci_read_config_dword (pdev, SIO_ACPIBAR, &sio->acpi_base);
sio->acpi_base &= ~1; 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_PIC1, 0x1f, "pic1");
request_region (IC_PIC2, 0x1f, "pic2"); request_region (IC_PIC2, 0x1f, "pic2");
...@@ -263,14 +266,14 @@ superio_init(struct pci_dev *pcidev) ...@@ -263,14 +266,14 @@ superio_init(struct pci_dev *pcidev)
/* Setup USB power regulation */ /* Setup USB power regulation */
outb(1, sio->acpi_base + USB_REG_CR); outb(1, sio->acpi_base + USB_REG_CR);
if (inb(sio->acpi_base + USB_REG_CR) & 1) 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 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, 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(); BUG();
return; return;
} }
...@@ -284,7 +287,7 @@ static void superio_disable_irq(unsigned int irq) ...@@ -284,7 +287,7 @@ static void superio_disable_irq(unsigned int irq)
u8 r8; u8 r8;
if ((irq < 1) || (irq == 2) || (irq > 7)) { if ((irq < 1) || (irq == 2) || (irq > 7)) {
printk(KERN_ERR "SuperIO: Illegal irq number.\n"); printk(KERN_ERR PFX "Illegal irq number.\n");
BUG(); BUG();
return; return;
} }
...@@ -301,7 +304,7 @@ static void superio_enable_irq(unsigned int irq) ...@@ -301,7 +304,7 @@ static void superio_enable_irq(unsigned int irq)
u8 r8; u8 r8;
if ((irq < 1) || (irq == 2) || (irq > 7)) { 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(); BUG();
return; return;
} }
...@@ -319,7 +322,7 @@ static unsigned int superio_startup_irq(unsigned int irq) ...@@ -319,7 +322,7 @@ static unsigned int superio_startup_irq(unsigned int irq)
} }
static struct hw_interrupt_type superio_interrupt_type = { static struct hw_interrupt_type superio_interrupt_type = {
.typename = "SuperIO", .typename = SUPERIO,
.startup = superio_startup_irq, .startup = superio_startup_irq,
.shutdown = superio_disable_irq, .shutdown = superio_disable_irq,
.enable = superio_enable_irq, .enable = superio_enable_irq,
...@@ -413,7 +416,7 @@ static void __devinit superio_serial_init(void) ...@@ -413,7 +416,7 @@ static void __devinit superio_serial_init(void)
retval = early_serial_setup(&serial[0]); retval = early_serial_setup(&serial[0]);
if (retval < 0) { if (retval < 0) {
printk(KERN_WARNING "SuperIO: Register Serial #0 failed.\n"); printk(KERN_WARNING PFX "Register Serial #0 failed.\n");
return; return;
} }
...@@ -423,7 +426,7 @@ static void __devinit superio_serial_init(void) ...@@ -423,7 +426,7 @@ static void __devinit superio_serial_init(void)
retval = early_serial_setup(&serial[1]); retval = early_serial_setup(&serial[1]);
if (retval < 0) 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 */ #endif /* CONFIG_SERIAL_8250 */
} }
...@@ -437,7 +440,7 @@ static void __devinit superio_parport_init(void) ...@@ -437,7 +440,7 @@ static void __devinit superio_parport_init(void)
PARPORT_DMA_NONE /* dma */, PARPORT_DMA_NONE /* dma */,
NULL /*struct pci_dev* */) ) 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 */ #endif /* CONFIG_PARPORT_PC */
} }
...@@ -499,7 +502,7 @@ static struct pci_device_id superio_tbl[] = { ...@@ -499,7 +502,7 @@ static struct pci_device_id superio_tbl[] = {
}; };
static struct pci_driver superio_driver = { static struct pci_driver superio_driver = {
.name = "SuperIO", .name = SUPERIO,
.id_table = superio_tbl, .id_table = superio_tbl,
.probe = superio_probe, .probe = superio_probe,
}; };
......
...@@ -76,7 +76,7 @@ wax_init_chip(struct parisc_device *dev) ...@@ -76,7 +76,7 @@ wax_init_chip(struct parisc_device *dev)
struct gsc_irq gsc_irq; struct gsc_irq gsc_irq;
int ret; int ret;
wax = kmalloc(sizeof(*wax), GFP_KERNEL); wax = kzalloc(sizeof(*wax), GFP_KERNEL);
if (!wax) if (!wax)
return -ENOMEM; return -ENOMEM;
......
...@@ -249,7 +249,7 @@ struct parport *__devinit parport_gsc_probe_port (unsigned long base, ...@@ -249,7 +249,7 @@ struct parport *__devinit parport_gsc_probe_port (unsigned long base,
struct parport tmp; struct parport tmp;
struct parport *p = &tmp; struct parport *p = &tmp;
priv = kmalloc (sizeof (struct parport_gsc_private), GFP_KERNEL); priv = kzalloc (sizeof (struct parport_gsc_private), GFP_KERNEL);
if (!priv) { if (!priv) {
printk (KERN_DEBUG "parport (0x%lx): no memory!\n", base); printk (KERN_DEBUG "parport (0x%lx): no memory!\n", base);
return NULL; return NULL;
......
...@@ -30,10 +30,11 @@ ...@@ -30,10 +30,11 @@
#define STI_DRIVERVERSION "Version 0.9a" #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 */ /* number of STI ROMS found and their ptrs to each struct */
static struct sti_struct *sti_roms[MAX_STI_ROMS]; /* ptr to each sti_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 /* The colour indices used by STI are
...@@ -266,7 +267,7 @@ sti_rom_copy(unsigned long base, unsigned long count, void *dest) ...@@ -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 #ifndef MODULE
static int __init sti_setup(char *str) static int __init sti_setup(char *str)
...@@ -414,10 +415,10 @@ sti_init_glob_cfg(struct sti_struct *sti, ...@@ -414,10 +415,10 @@ sti_init_glob_cfg(struct sti_struct *sti,
if (!sti->sti_mem_request) if (!sti->sti_mem_request)
sti->sti_mem_request = 256; /* STI default */ sti->sti_mem_request = 256; /* STI default */
glob_cfg = kmalloc(sizeof(*sti->glob_cfg), GFP_KERNEL); glob_cfg = kzalloc(sizeof(*sti->glob_cfg), GFP_KERNEL);
glob_cfg_ext = kmalloc(sizeof(*glob_cfg_ext), GFP_KERNEL); glob_cfg_ext = kzalloc(sizeof(*glob_cfg_ext), GFP_KERNEL);
save_addr = kmalloc(save_addr_size, GFP_KERNEL); save_addr = kzalloc(save_addr_size, GFP_KERNEL);
sti_mem_addr = kmalloc(sti->sti_mem_request, GFP_KERNEL); sti_mem_addr = kzalloc(sti->sti_mem_request, GFP_KERNEL);
if (!(glob_cfg && glob_cfg_ext && save_addr && sti_mem_addr)) { if (!(glob_cfg && glob_cfg_ext && save_addr && sti_mem_addr)) {
kfree(glob_cfg); kfree(glob_cfg);
...@@ -427,11 +428,6 @@ sti_init_glob_cfg(struct sti_struct *sti, ...@@ -427,11 +428,6 @@ sti_init_glob_cfg(struct sti_struct *sti,
return -ENOMEM; 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->ext_ptr = STI_PTR(glob_cfg_ext);
glob_cfg->save_addr = STI_PTR(save_addr); glob_cfg->save_addr = STI_PTR(save_addr);
for (i=0; i<8; i++) { for (i=0; i<8; i++) {
...@@ -502,9 +498,9 @@ sti_init_glob_cfg(struct sti_struct *sti, ...@@ -502,9 +498,9 @@ sti_init_glob_cfg(struct sti_struct *sti,
#ifdef CONFIG_FB #ifdef CONFIG_FB
struct sti_cooked_font * __init 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; unsigned int size, bpc;
void *dest; void *dest;
struct sti_rom_font *nf; struct sti_rom_font *nf;
...@@ -525,10 +521,9 @@ sti_select_fbfont( struct sti_cooked_rom *cooked_rom, char *fbfont_name ) ...@@ -525,10 +521,9 @@ sti_select_fbfont( struct sti_cooked_rom *cooked_rom, char *fbfont_name )
size = bpc * 256; size = bpc * 256;
size += sizeof(struct sti_rom_font); size += sizeof(struct sti_rom_font);
nf = kmalloc(size, GFP_KERNEL); nf = kzalloc(size, GFP_KERNEL);
if (!nf) if (!nf)
return NULL; return NULL;
memset(nf, 0, size);
nf->first_char = 0; nf->first_char = 0;
nf->last_char = 255; nf->last_char = 255;
...@@ -544,7 +539,7 @@ sti_select_fbfont( struct sti_cooked_rom *cooked_rom, char *fbfont_name ) ...@@ -544,7 +539,7 @@ sti_select_fbfont( struct sti_cooked_rom *cooked_rom, char *fbfont_name )
dest += sizeof(struct sti_rom_font); dest += sizeof(struct sti_rom_font);
memcpy(dest, fbfont->data, bpc*256); memcpy(dest, fbfont->data, bpc*256);
cooked_font = kmalloc(sizeof(*cooked_font), GFP_KERNEL); cooked_font = kzalloc(sizeof(*cooked_font), GFP_KERNEL);
if (!cooked_font) { if (!cooked_font) {
kfree(nf); kfree(nf);
return NULL; return NULL;
...@@ -559,7 +554,7 @@ sti_select_fbfont( struct sti_cooked_rom *cooked_rom, char *fbfont_name ) ...@@ -559,7 +554,7 @@ sti_select_fbfont( struct sti_cooked_rom *cooked_rom, char *fbfont_name )
} }
#else #else
struct sti_cooked_font * __init 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)
{ {
return NULL; return NULL;
} }
...@@ -617,7 +612,7 @@ sti_cook_fonts(struct sti_cooked_rom *cooked_rom, ...@@ -617,7 +612,7 @@ sti_cook_fonts(struct sti_cooked_rom *cooked_rom,
struct sti_rom_font *raw_font, *font_start; struct sti_rom_font *raw_font, *font_start;
struct sti_cooked_font *cooked_font; struct sti_cooked_font *cooked_font;
cooked_font = kmalloc(sizeof(*cooked_font), GFP_KERNEL); cooked_font = kzalloc(sizeof(*cooked_font), GFP_KERNEL);
if (!cooked_font) if (!cooked_font)
return 0; return 0;
...@@ -631,7 +626,7 @@ sti_cook_fonts(struct sti_cooked_rom *cooked_rom, ...@@ -631,7 +626,7 @@ sti_cook_fonts(struct sti_cooked_rom *cooked_rom,
while (raw_font->next_font) { while (raw_font->next_font) {
raw_font = ((void *)font_start) + (raw_font->next_font); raw_font = ((void *)font_start) + (raw_font->next_font);
cooked_font->next_font = kmalloc(sizeof(*cooked_font), GFP_KERNEL); cooked_font->next_font = kzalloc(sizeof(*cooked_font), GFP_KERNEL);
if (!cooked_font->next_font) if (!cooked_font->next_font)
return 1; return 1;
...@@ -668,10 +663,9 @@ sti_bmode_font_raw(struct sti_cooked_font *f) ...@@ -668,10 +663,9 @@ sti_bmode_font_raw(struct sti_cooked_font *f)
unsigned char *n, *p, *q; unsigned char *n, *p, *q;
int size = f->raw->bytes_per_char*256+sizeof(struct sti_rom_font); int size = f->raw->bytes_per_char*256+sizeof(struct sti_rom_font);
n = kmalloc (4*size, GFP_KERNEL); n = kzalloc (4*size, GFP_KERNEL);
if (!n) if (!n)
return NULL; return NULL;
memset (n, 0, 4*size);
p = n + 3; p = n + 3;
q = (unsigned char *)f->raw; q = (unsigned char *)f->raw;
while (size--) { while (size--) {
...@@ -816,13 +810,12 @@ sti_try_rom_generic(unsigned long address, unsigned long hpa, struct pci_dev *pd ...@@ -816,13 +810,12 @@ sti_try_rom_generic(unsigned long address, unsigned long hpa, struct pci_dev *pd
return NULL; return NULL;
} }
sti = kmalloc(sizeof(*sti), GFP_KERNEL); sti = kzalloc(sizeof(*sti), GFP_KERNEL);
if (!sti) { if (!sti) {
printk(KERN_ERR "Not enough memory !\n"); printk(KERN_ERR "Not enough memory !\n");
return NULL; return NULL;
} }
memset(sti, 0, sizeof(*sti));
spin_lock_init(&sti->lock); spin_lock_init(&sti->lock);
test_rom: test_rom:
...@@ -1035,7 +1028,7 @@ static struct parisc_driver pa_sti_driver = { ...@@ -1035,7 +1028,7 @@ static struct parisc_driver pa_sti_driver = {
* sti_init_roms() - detects all STI ROMs and stores them in sti_roms[] * 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) static void __init sti_init_roms(void)
{ {
......
/* Copyright (C) 2000 Philipp Rumpf <prumpf@tux.org>
* Copyright (C) 2006 Kyle McMartin <kyle@parisc-linux.org>
*/
#ifndef _ASM_PARISC_ATOMIC_H_ #ifndef _ASM_PARISC_ATOMIC_H_
#define _ASM_PARISC_ATOMIC_H_ #define _ASM_PARISC_ATOMIC_H_
#include <linux/config.h> #include <linux/config.h>
#include <linux/types.h>
#include <asm/system.h> #include <asm/system.h>
/* Copyright (C) 2000 Philipp Rumpf <prumpf@tux.org>. */
/* /*
* Atomic operations that C can't guarantee us. Useful for * 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; ...@@ -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) # define _atomic_spin_unlock_irqrestore(l,f) do { local_irq_restore(f); } while (0)
#endif #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. /* This should get optimized out since it's never called.
** Or get a link error if xchg is used "wrong". ** Or get a link error if xchg is used "wrong".
*/ */
...@@ -69,10 +64,9 @@ extern unsigned long __xchg64(unsigned long, unsigned long *); ...@@ -69,10 +64,9 @@ extern unsigned long __xchg64(unsigned long, unsigned long *);
#endif #endif
/* optimizer better get rid of switch since size is a constant */ /* optimizer better get rid of switch since size is a constant */
static __inline__ unsigned long __xchg(unsigned long x, __volatile__ void * ptr, static __inline__ unsigned long
int size) __xchg(unsigned long x, __volatile__ void * ptr, int size)
{ {
switch(size) { switch(size) {
#ifdef __LP64__ #ifdef __LP64__
case 8: return __xchg64(x,(unsigned long *) ptr); case 8: return __xchg64(x,(unsigned long *) ptr);
...@@ -129,7 +123,13 @@ __cmpxchg(volatile void *ptr, unsigned long old, unsigned long new_, int size) ...@@ -129,7 +123,13 @@ __cmpxchg(volatile void *ptr, unsigned long old, unsigned long new_, int size)
(unsigned long)_n_, sizeof(*(ptr))); \ (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 /* It's possible to reduce all atomic operations to either
* __atomic_add_return, atomic_set and atomic_read (the latter * __atomic_add_return, atomic_set and atomic_read (the latter
...@@ -210,12 +210,66 @@ static __inline__ int atomic_read(const atomic_t *v) ...@@ -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_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__before_atomic_dec() smp_mb()
#define smp_mb__after_atomic_dec() smp_mb() #define smp_mb__after_atomic_dec() smp_mb()
#define smp_mb__before_atomic_inc() smp_mb() #define smp_mb__before_atomic_inc() smp_mb()
#define smp_mb__after_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> #include <asm-generic/atomic.h>
#endif
#endif /* _ASM_PARISC_ATOMIC_H_ */
...@@ -183,4 +183,10 @@ flush_cache_page(struct vm_area_struct *vma, unsigned long vmaddr, unsigned long ...@@ -183,4 +183,10 @@ flush_cache_page(struct vm_area_struct *vma, unsigned long vmaddr, unsigned long
__flush_cache_page(vma, vmaddr); __flush_cache_page(vma, vmaddr);
} }
#ifdef CONFIG_DEBUG_RODATA
void mark_rodata_ro(void);
#endif #endif
#endif /* _PARISC_CACHEFLUSH_H */
#ifndef _ASM_PARISC_COMPAT_UCONTEXT_H #ifndef _ASM_PARISC_COMPAT_UCONTEXT_H
#define _ASM_PARISC_COMPAT_UCONTEXT_H #define _ASM_PARISC_COMPAT_UCONTEXT_H
#include<linux/compat.h> #include <linux/compat.h>
#include<asm/compat_signal.h>
/* 32-bit ucontext as seen from an 64-bit kernel */ /* 32-bit ucontext as seen from an 64-bit kernel */
struct compat_ucontext { struct compat_ucontext {
......
...@@ -58,7 +58,7 @@ ...@@ -58,7 +58,7 @@
#define CRT_ID_ELK_1024DB 0x27849CA5 /* Elk 1024x768 double buffer */ #define CRT_ID_ELK_1024DB 0x27849CA5 /* Elk 1024x768 double buffer */
#define CRT_ID_ELK_GS S9000_ID_A1924A /* Elk 1280x1024 GreyScale */ #define CRT_ID_ELK_GS S9000_ID_A1924A /* Elk 1280x1024 GreyScale */
#define CRT_ID_CRX24 S9000_ID_A1439A /* Piranha */ #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_THUNDER 0x2F23E5FC /* Thunder 1 VISUALIZE 48*/
#define CRT_ID_THUNDER2 0x2F8D570E /* Thunder 2 VISUALIZE 48 XP*/ #define CRT_ID_THUNDER2 0x2F8D570E /* Thunder 2 VISUALIZE 48 XP*/
#define CRT_ID_HCRX S9000_ID_HCRX /* Hyperdrive HCRX */ #define CRT_ID_HCRX S9000_ID_HCRX /* Hyperdrive HCRX */
......
...@@ -18,6 +18,18 @@ ...@@ -18,6 +18,18 @@
*/ */
#define PCI_MAX_BUSSES 256 #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) ** 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) ...@@ -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. ** Convert between PCI (IO_VIEW) addresses and processor (PA_VIEW) addresses.
** See pcibios.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 ** Platform characteristics/firmware guarantee that
** (1) PA_VIEW - IO_VIEW = lmmio_offset for both LMMIO and ELMMIO ** (1) PA_VIEW - IO_VIEW = lmmio_offset for both LMMIO and ELMMIO
...@@ -191,9 +203,6 @@ struct pci_bios_ops { ...@@ -191,9 +203,6 @@ struct pci_bios_ops {
*/ */
extern struct pci_port_ops *pci_port; extern struct pci_port_ops *pci_port;
extern struct pci_bios_ops *pci_bios; 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 #ifdef CONFIG_PCI
extern void pcibios_register_hba(struct pci_hba_data *); extern void pcibios_register_hba(struct pci_hba_data *);
......
...@@ -137,7 +137,6 @@ static inline void pte_free_kernel(pte_t *pte) ...@@ -137,7 +137,6 @@ static inline void pte_free_kernel(pte_t *pte)
#define pte_free(page) pte_free_kernel(page_address(page)) #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) #define check_pgt_cache() do { } while (0)
#endif #endif
...@@ -213,7 +213,7 @@ extern void *vmalloc_start; ...@@ -213,7 +213,7 @@ extern void *vmalloc_start;
#define PAGE_COPY PAGE_EXECREAD #define PAGE_COPY PAGE_EXECREAD
#define PAGE_RWX __pgprot(_PAGE_PRESENT | _PAGE_USER | _PAGE_READ | _PAGE_WRITE | _PAGE_EXEC |_PAGE_ACCESSED) #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 __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_KERNEL_UNC __pgprot(_PAGE_KERNEL | _PAGE_NO_CACHE)
#define PAGE_GATEWAY __pgprot(_PAGE_PRESENT | _PAGE_USER | _PAGE_ACCESSED | _PAGE_GATEWAY| _PAGE_READ) #define PAGE_GATEWAY __pgprot(_PAGE_PRESENT | _PAGE_USER | _PAGE_ACCESSED | _PAGE_GATEWAY| _PAGE_READ)
#define PAGE_FLUSH __pgprot(_PAGE_FLUSH) #define PAGE_FLUSH __pgprot(_PAGE_FLUSH)
......
#ifndef _ASM_PARISC_RT_SIGFRAME_H #ifndef _ASM_PARISC_RT_SIGFRAME_H
#define _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 SIGRETURN_TRAMP 4
#define SIGRESTARTBLOCK_TRAMP 5 #define SIGRESTARTBLOCK_TRAMP 5
#define TRAMP_SIZE (SIGRETURN_TRAMP + SIGRESTARTBLOCK_TRAMP) #define TRAMP_SIZE (SIGRETURN_TRAMP + SIGRESTARTBLOCK_TRAMP)
......
...@@ -761,8 +761,27 @@ ...@@ -761,8 +761,27 @@
#define __NR_keyctl (__NR_Linux + 266) #define __NR_keyctl (__NR_Linux + 266)
#define __NR_ioprio_set (__NR_Linux + 267) #define __NR_ioprio_set (__NR_Linux + 267)
#define __NR_ioprio_get (__NR_Linux + 268) #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 269 #define __NR_Linux_syscalls 288
#define HPUX_GATEWAY_ADDR 0xC0000004 #define HPUX_GATEWAY_ADDR 0xC0000004
#define LINUX_GATEWAY_ADDR 0x100 #define LINUX_GATEWAY_ADDR 0x100
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册