aboutsummaryrefslogtreecommitdiffstats
path: root/arch/parisc
diff options
context:
space:
mode:
Diffstat (limited to 'arch/parisc')
-rw-r--r--arch/parisc/Kconfig4
-rw-r--r--arch/parisc/Makefile22
-rw-r--r--arch/parisc/configs/712_defconfig2
-rw-r--r--arch/parisc/configs/a500_defconfig2
-rw-r--r--arch/parisc/configs/b180_defconfig3
-rw-r--r--arch/parisc/configs/c3000_defconfig3
-rw-r--r--arch/parisc/configs/c8000_defconfig2
-rw-r--r--arch/parisc/configs/default_defconfig2
-rw-r--r--arch/parisc/configs/generic-32bit_defconfig328
-rw-r--r--arch/parisc/configs/generic-64bit_defconfig346
-rw-r--r--arch/parisc/include/asm/Kbuild1
-rw-r--r--arch/parisc/include/asm/assembly.h12
-rw-r--r--arch/parisc/include/asm/delay.h41
-rw-r--r--arch/parisc/include/asm/hardirq.h1
-rw-r--r--arch/parisc/include/asm/pgalloc.h8
-rw-r--r--arch/parisc/include/asm/ptrace.h4
-rw-r--r--arch/parisc/include/asm/thread_info.h4
-rw-r--r--arch/parisc/include/asm/traps.h2
-rw-r--r--arch/parisc/include/asm/uaccess.h53
-rw-r--r--arch/parisc/include/uapi/asm/errno.h2
-rw-r--r--arch/parisc/include/uapi/asm/socket.h2
-rw-r--r--arch/parisc/install.sh44
-rw-r--r--arch/parisc/kernel/Makefile4
-rw-r--r--arch/parisc/kernel/audit.c81
-rw-r--r--arch/parisc/kernel/compat_audit.c40
-rw-r--r--arch/parisc/kernel/head.S4
-rw-r--r--arch/parisc/kernel/irq.c21
-rw-r--r--arch/parisc/kernel/module.c2
-rw-r--r--arch/parisc/kernel/ptrace.c26
-rw-r--r--arch/parisc/kernel/setup.c8
-rw-r--r--arch/parisc/kernel/signal32.c2
-rw-r--r--arch/parisc/kernel/signal32.h2
-rw-r--r--arch/parisc/kernel/smp.c13
-rw-r--r--arch/parisc/kernel/syscall.S6
-rw-r--r--arch/parisc/kernel/traps.c11
-rw-r--r--arch/parisc/lib/Makefile2
-rw-r--r--arch/parisc/lib/delay.c73
-rw-r--r--arch/parisc/lib/lusercopy.S10
-rw-r--r--arch/parisc/lib/memcpy.c15
-rw-r--r--arch/parisc/math-emu/float.h1
-rw-r--r--arch/parisc/mm/fault.c42
41 files changed, 1119 insertions, 132 deletions
diff --git a/arch/parisc/Kconfig b/arch/parisc/Kconfig
index deb713c647f4..b5f1858baf33 100644
--- a/arch/parisc/Kconfig
+++ b/arch/parisc/Kconfig
@@ -227,7 +227,6 @@ endchoice
227 227
228config SMP 228config SMP
229 bool "Symmetric multi-processing support" 229 bool "Symmetric multi-processing support"
230 select USE_GENERIC_SMP_HELPERS
231 ---help--- 230 ---help---
232 This enables support for systems with more than one CPU. If you have 231 This enables support for systems with more than one CPU. If you have
233 a system with only one CPU, like most personal computers, say N. If 232 a system with only one CPU, like most personal computers, say N. If
@@ -288,6 +287,9 @@ config SYSVIPC_COMPAT
288 def_bool y 287 def_bool y
289 depends on COMPAT && SYSVIPC 288 depends on COMPAT && SYSVIPC
290 289
290config AUDIT_ARCH
291 def_bool y
292
291config HPUX 293config HPUX
292 bool "Support for HP-UX binaries" 294 bool "Support for HP-UX binaries"
293 depends on !64BIT 295 depends on !64BIT
diff --git a/arch/parisc/Makefile b/arch/parisc/Makefile
index e02f665f804a..7187664034c3 100644
--- a/arch/parisc/Makefile
+++ b/arch/parisc/Makefile
@@ -94,7 +94,7 @@ PALOCONF := $(shell if [ -f $(src)/palo.conf ]; then echo $(src)/palo.conf; \
94 else echo $(obj)/palo.conf; \ 94 else echo $(obj)/palo.conf; \
95 fi) 95 fi)
96 96
97palo: vmlinuz 97palo lifimage: vmlinuz
98 @if test ! -x "$(PALO)"; then \ 98 @if test ! -x "$(PALO)"; then \
99 echo 'ERROR: Please install palo first (apt-get install palo)';\ 99 echo 'ERROR: Please install palo first (apt-get install palo)';\
100 echo 'or build it from source and install it somewhere in your $$PATH';\ 100 echo 'or build it from source and install it somewhere in your $$PATH';\
@@ -109,16 +109,23 @@ palo: vmlinuz
109 fi 109 fi
110 $(PALO) -f $(PALOCONF) 110 $(PALO) -f $(PALOCONF)
111 111
112# Shorthands for known targets not supported by parisc, use vmlinux/vmlinuz as default 112BOOT_TARGETS = zImage Image palo lifimage
113INSTALL_TARGETS = zinstall install
114
115PHONY += bzImage $(BOOT_TARGETS) $(INSTALL_TARGETS)
116
117bzImage zImage: vmlinuz
113Image: vmlinux 118Image: vmlinux
114zImage bzImage: vmlinuz
115 119
116vmlinuz: vmlinux 120vmlinuz: vmlinux
117 @gzip -cf -9 $< > $@ 121 @gzip -cf -9 $< > $@
118 122
119install: vmlinuz 123install:
120 sh $(src)/arch/parisc/install.sh \ 124 $(CONFIG_SHELL) $(src)/arch/parisc/install.sh \
121 $(KERNELRELEASE) $< System.map "$(INSTALL_PATH)" 125 $(KERNELRELEASE) vmlinux System.map "$(INSTALL_PATH)"
126zinstall:
127 $(CONFIG_SHELL) $(src)/arch/parisc/install.sh \
128 $(KERNELRELEASE) vmlinuz System.map "$(INSTALL_PATH)"
122 129
123CLEAN_FILES += lifimage 130CLEAN_FILES += lifimage
124MRPROPER_FILES += palo.conf 131MRPROPER_FILES += palo.conf
@@ -127,10 +134,11 @@ define archhelp
127 @echo '* vmlinux - Uncompressed kernel image (./vmlinux)' 134 @echo '* vmlinux - Uncompressed kernel image (./vmlinux)'
128 @echo ' vmlinuz - Compressed kernel image (./vmlinuz)' 135 @echo ' vmlinuz - Compressed kernel image (./vmlinuz)'
129 @echo ' palo - Bootable image (./lifimage)' 136 @echo ' palo - Bootable image (./lifimage)'
130 @echo ' install - Install kernel using' 137 @echo ' install - Install uncompressed vmlinux kernel using'
131 @echo ' (your) ~/bin/$(INSTALLKERNEL) or' 138 @echo ' (your) ~/bin/$(INSTALLKERNEL) or'
132 @echo ' (distribution) /sbin/$(INSTALLKERNEL) or' 139 @echo ' (distribution) /sbin/$(INSTALLKERNEL) or'
133 @echo ' copy to $$(INSTALL_PATH)' 140 @echo ' copy to $$(INSTALL_PATH)'
141 @echo ' zinstall - Install compressed vmlinuz kernel'
134endef 142endef
135 143
136# we require gcc 3.3 or above to compile the kernel 144# we require gcc 3.3 or above to compile the kernel
diff --git a/arch/parisc/configs/712_defconfig b/arch/parisc/configs/712_defconfig
index 0f90569b9d85..9387cc2693f6 100644
--- a/arch/parisc/configs/712_defconfig
+++ b/arch/parisc/configs/712_defconfig
@@ -40,6 +40,8 @@ CONFIG_IP_NF_QUEUE=m
40CONFIG_LLC2=m 40CONFIG_LLC2=m
41CONFIG_NET_PKTGEN=m 41CONFIG_NET_PKTGEN=m
42CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" 42CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
43CONFIG_DEVTMPFS=y
44CONFIG_DEVTMPFS_MOUNT=y
43# CONFIG_STANDALONE is not set 45# CONFIG_STANDALONE is not set
44# CONFIG_PREVENT_FIRMWARE_BUILD is not set 46# CONFIG_PREVENT_FIRMWARE_BUILD is not set
45CONFIG_PARPORT=y 47CONFIG_PARPORT=y
diff --git a/arch/parisc/configs/a500_defconfig b/arch/parisc/configs/a500_defconfig
index b647b182dacc..90025322b75e 100644
--- a/arch/parisc/configs/a500_defconfig
+++ b/arch/parisc/configs/a500_defconfig
@@ -79,6 +79,8 @@ CONFIG_IP_DCCP=m
79CONFIG_LLC2=m 79CONFIG_LLC2=m
80CONFIG_NET_PKTGEN=m 80CONFIG_NET_PKTGEN=m
81CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" 81CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
82CONFIG_DEVTMPFS=y
83CONFIG_DEVTMPFS_MOUNT=y
82# CONFIG_STANDALONE is not set 84# CONFIG_STANDALONE is not set
83# CONFIG_PREVENT_FIRMWARE_BUILD is not set 85# CONFIG_PREVENT_FIRMWARE_BUILD is not set
84CONFIG_BLK_DEV_UMEM=m 86CONFIG_BLK_DEV_UMEM=m
diff --git a/arch/parisc/configs/b180_defconfig b/arch/parisc/configs/b180_defconfig
index e289f5bf3148..f1a0c25bef8d 100644
--- a/arch/parisc/configs/b180_defconfig
+++ b/arch/parisc/configs/b180_defconfig
@@ -4,6 +4,7 @@ CONFIG_IKCONFIG=y
4CONFIG_IKCONFIG_PROC=y 4CONFIG_IKCONFIG_PROC=y
5CONFIG_LOG_BUF_SHIFT=16 5CONFIG_LOG_BUF_SHIFT=16
6CONFIG_SYSFS_DEPRECATED_V2=y 6CONFIG_SYSFS_DEPRECATED_V2=y
7CONFIG_BLK_DEV_INITRD=y
7CONFIG_SLAB=y 8CONFIG_SLAB=y
8CONFIG_MODULES=y 9CONFIG_MODULES=y
9CONFIG_MODVERSIONS=y 10CONFIG_MODVERSIONS=y
@@ -27,6 +28,8 @@ CONFIG_IP_PNP_BOOTP=y
27# CONFIG_INET_LRO is not set 28# CONFIG_INET_LRO is not set
28CONFIG_IPV6=y 29CONFIG_IPV6=y
29CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" 30CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
31CONFIG_DEVTMPFS=y
32CONFIG_DEVTMPFS_MOUNT=y
30# CONFIG_PREVENT_FIRMWARE_BUILD is not set 33# CONFIG_PREVENT_FIRMWARE_BUILD is not set
31CONFIG_PARPORT=y 34CONFIG_PARPORT=y
32CONFIG_PARPORT_PC=y 35CONFIG_PARPORT_PC=y
diff --git a/arch/parisc/configs/c3000_defconfig b/arch/parisc/configs/c3000_defconfig
index 311ca367b622..ec1b014952b6 100644
--- a/arch/parisc/configs/c3000_defconfig
+++ b/arch/parisc/configs/c3000_defconfig
@@ -5,6 +5,7 @@ CONFIG_IKCONFIG=y
5CONFIG_IKCONFIG_PROC=y 5CONFIG_IKCONFIG_PROC=y
6CONFIG_LOG_BUF_SHIFT=16 6CONFIG_LOG_BUF_SHIFT=16
7CONFIG_SYSFS_DEPRECATED_V2=y 7CONFIG_SYSFS_DEPRECATED_V2=y
8CONFIG_BLK_DEV_INITRD=y
8# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set 9# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
9CONFIG_EXPERT=y 10CONFIG_EXPERT=y
10CONFIG_KALLSYMS_ALL=y 11CONFIG_KALLSYMS_ALL=y
@@ -39,6 +40,8 @@ CONFIG_NETFILTER_DEBUG=y
39CONFIG_IP_NF_QUEUE=m 40CONFIG_IP_NF_QUEUE=m
40CONFIG_NET_PKTGEN=m 41CONFIG_NET_PKTGEN=m
41CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" 42CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
43CONFIG_DEVTMPFS=y
44CONFIG_DEVTMPFS_MOUNT=y
42# CONFIG_STANDALONE is not set 45# CONFIG_STANDALONE is not set
43# CONFIG_PREVENT_FIRMWARE_BUILD is not set 46# CONFIG_PREVENT_FIRMWARE_BUILD is not set
44CONFIG_BLK_DEV_UMEM=m 47CONFIG_BLK_DEV_UMEM=m
diff --git a/arch/parisc/configs/c8000_defconfig b/arch/parisc/configs/c8000_defconfig
index f11006361297..e1c8d2015c89 100644
--- a/arch/parisc/configs/c8000_defconfig
+++ b/arch/parisc/configs/c8000_defconfig
@@ -62,6 +62,8 @@ CONFIG_TIPC=m
62CONFIG_LLC2=m 62CONFIG_LLC2=m
63CONFIG_DNS_RESOLVER=y 63CONFIG_DNS_RESOLVER=y
64CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" 64CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
65CONFIG_DEVTMPFS=y
66CONFIG_DEVTMPFS_MOUNT=y
65# CONFIG_STANDALONE is not set 67# CONFIG_STANDALONE is not set
66CONFIG_PARPORT=y 68CONFIG_PARPORT=y
67CONFIG_PARPORT_PC=y 69CONFIG_PARPORT_PC=y
diff --git a/arch/parisc/configs/default_defconfig b/arch/parisc/configs/default_defconfig
index dfe88f6c95c4..ba61495e1fa4 100644
--- a/arch/parisc/configs/default_defconfig
+++ b/arch/parisc/configs/default_defconfig
@@ -49,6 +49,8 @@ CONFIG_INET6_ESP=y
49CONFIG_INET6_IPCOMP=y 49CONFIG_INET6_IPCOMP=y
50CONFIG_LLC2=m 50CONFIG_LLC2=m
51CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" 51CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
52CONFIG_DEVTMPFS=y
53CONFIG_DEVTMPFS_MOUNT=y
52# CONFIG_STANDALONE is not set 54# CONFIG_STANDALONE is not set
53# CONFIG_PREVENT_FIRMWARE_BUILD is not set 55# CONFIG_PREVENT_FIRMWARE_BUILD is not set
54CONFIG_PARPORT=y 56CONFIG_PARPORT=y
diff --git a/arch/parisc/configs/generic-32bit_defconfig b/arch/parisc/configs/generic-32bit_defconfig
new file mode 100644
index 000000000000..33b148f825ba
--- /dev/null
+++ b/arch/parisc/configs/generic-32bit_defconfig
@@ -0,0 +1,328 @@
1CONFIG_LOCALVERSION="-32bit"
2# CONFIG_LOCALVERSION_AUTO is not set
3CONFIG_SYSVIPC=y
4CONFIG_POSIX_MQUEUE=y
5CONFIG_FHANDLE=y
6CONFIG_BSD_PROCESS_ACCT=y
7CONFIG_IKCONFIG=y
8CONFIG_IKCONFIG_PROC=y
9CONFIG_LOG_BUF_SHIFT=16
10CONFIG_BLK_DEV_INITRD=y
11CONFIG_RD_BZIP2=y
12CONFIG_RD_LZMA=y
13CONFIG_RD_LZO=y
14CONFIG_EXPERT=y
15CONFIG_SYSCTL_SYSCALL=y
16CONFIG_PERF_EVENTS=y
17CONFIG_SLAB=y
18CONFIG_MODULES=y
19CONFIG_MODULE_UNLOAD=y
20CONFIG_MODULE_FORCE_UNLOAD=y
21# CONFIG_LBDAF is not set
22# CONFIG_BLK_DEV_BSG is not set
23CONFIG_PA7100LC=y
24CONFIG_SMP=y
25CONFIG_HZ_100=y
26CONFIG_IOMMU_CCIO=y
27CONFIG_GSC_LASI=y
28CONFIG_GSC_WAX=y
29CONFIG_EISA=y
30CONFIG_PCI=y
31CONFIG_GSC_DINO=y
32CONFIG_PCI_LBA=y
33CONFIG_PCCARD=m
34CONFIG_YENTA=m
35# CONFIG_PDC_CHASSIS is not set
36# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
37CONFIG_BINFMT_MISC=m
38CONFIG_NET=y
39CONFIG_PACKET=y
40CONFIG_UNIX=y
41CONFIG_XFRM_USER=m
42CONFIG_NET_KEY=m
43CONFIG_INET=y
44CONFIG_IP_MULTICAST=y
45CONFIG_IP_PNP=y
46CONFIG_IP_PNP_BOOTP=y
47CONFIG_INET_AH=m
48CONFIG_INET_ESP=m
49# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
50# CONFIG_INET_XFRM_MODE_TUNNEL is not set
51# CONFIG_INET_XFRM_MODE_BEET is not set
52# CONFIG_INET_LRO is not set
53CONFIG_INET_DIAG=m
54CONFIG_LLC2=m
55# CONFIG_WIRELESS is not set
56CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
57CONFIG_DEVTMPFS=y
58CONFIG_DEVTMPFS_MOUNT=y
59# CONFIG_STANDALONE is not set
60# CONFIG_PREVENT_FIRMWARE_BUILD is not set
61CONFIG_PARPORT=y
62CONFIG_PARPORT_PC=m
63CONFIG_PARPORT_1284=y
64CONFIG_BLK_DEV_LOOP=y
65CONFIG_BLK_DEV_CRYPTOLOOP=y
66CONFIG_BLK_DEV_RAM=y
67CONFIG_BLK_DEV_RAM_SIZE=6144
68CONFIG_IDE=y
69CONFIG_BLK_DEV_IDECD=y
70CONFIG_BLK_DEV_GENERIC=y
71CONFIG_BLK_DEV_NS87415=y
72CONFIG_BLK_DEV_SD=y
73CONFIG_CHR_DEV_ST=y
74CONFIG_BLK_DEV_SR=y
75CONFIG_CHR_DEV_SG=y
76CONFIG_SCSI_LASI700=y
77CONFIG_SCSI_SYM53C8XX_2=y
78CONFIG_SCSI_ZALON=y
79CONFIG_SCSI_DH=y
80CONFIG_ATA=y
81CONFIG_MD=y
82CONFIG_BLK_DEV_MD=m
83CONFIG_MD_LINEAR=m
84CONFIG_MD_RAID0=m
85CONFIG_MD_RAID1=m
86CONFIG_MD_RAID10=m
87CONFIG_MD_RAID456=m
88CONFIG_BLK_DEV_DM=y
89CONFIG_DM_UEVENT=y
90CONFIG_NETDEVICES=y
91CONFIG_BONDING=m
92CONFIG_DUMMY=m
93CONFIG_TUN=m
94# CONFIG_NET_VENDOR_3COM is not set
95# CONFIG_NET_VENDOR_ADAPTEC is not set
96# CONFIG_NET_VENDOR_ALTEON is not set
97# CONFIG_NET_VENDOR_AMD is not set
98# CONFIG_NET_VENDOR_ATHEROS is not set
99# CONFIG_NET_CADENCE is not set
100# CONFIG_NET_VENDOR_BROADCOM is not set
101# CONFIG_NET_VENDOR_BROCADE is not set
102# CONFIG_NET_VENDOR_CHELSIO is not set
103# CONFIG_NET_VENDOR_CISCO is not set
104CONFIG_NET_TULIP=y
105CONFIG_TULIP=y
106# CONFIG_NET_VENDOR_DLINK is not set
107# CONFIG_NET_VENDOR_EMULEX is not set
108# CONFIG_NET_VENDOR_EXAR is not set
109# CONFIG_NET_VENDOR_HP is not set
110CONFIG_LASI_82596=y
111# CONFIG_NET_VENDOR_MELLANOX is not set
112# CONFIG_NET_VENDOR_MICREL is not set
113# CONFIG_NET_VENDOR_MYRI is not set
114# CONFIG_NET_VENDOR_NATSEMI is not set
115# CONFIG_NET_VENDOR_NVIDIA is not set
116# CONFIG_NET_VENDOR_OKI is not set
117# CONFIG_NET_PACKET_ENGINE is not set
118# CONFIG_NET_VENDOR_QLOGIC is not set
119# CONFIG_NET_VENDOR_REALTEK is not set
120# CONFIG_NET_VENDOR_RDC is not set
121# CONFIG_NET_VENDOR_SEEQ is not set
122# CONFIG_NET_VENDOR_SILAN is not set
123# CONFIG_NET_VENDOR_SIS is not set
124# CONFIG_NET_VENDOR_STMICRO is not set
125# CONFIG_NET_VENDOR_SUN is not set
126# CONFIG_NET_VENDOR_TEHUTI is not set
127# CONFIG_NET_VENDOR_TI is not set
128# CONFIG_NET_VENDOR_VIA is not set
129CONFIG_PPP=m
130CONFIG_PPP_BSDCOMP=m
131CONFIG_PPP_DEFLATE=m
132CONFIG_PPPOE=m
133# CONFIG_WLAN is not set
134CONFIG_INPUT_POLLDEV=y
135CONFIG_KEYBOARD_HIL_OLD=m
136CONFIG_KEYBOARD_HIL=m
137CONFIG_MOUSE_SERIAL=y
138CONFIG_INPUT_MISC=y
139CONFIG_INPUT_UINPUT=m
140CONFIG_LEGACY_PTY_COUNT=64
141CONFIG_SERIAL_8250=y
142# CONFIG_SERIAL_8250_DEPRECATED_OPTIONS is not set
143CONFIG_SERIAL_8250_CONSOLE=y
144CONFIG_SERIAL_8250_NR_UARTS=8
145CONFIG_SERIAL_8250_EXTENDED=y
146CONFIG_SERIAL_8250_MANY_PORTS=y
147CONFIG_SERIAL_8250_SHARE_IRQ=y
148CONFIG_PRINTER=m
149CONFIG_PPDEV=m
150# CONFIG_HW_RANDOM is not set
151CONFIG_I2C=y
152CONFIG_POWER_SUPPLY=y
153# CONFIG_HWMON is not set
154CONFIG_AGP=y
155CONFIG_VIDEO_OUTPUT_CONTROL=y
156CONFIG_FB=y
157CONFIG_FB_FOREIGN_ENDIAN=y
158CONFIG_FB_MODE_HELPERS=y
159CONFIG_FB_MATROX=m
160CONFIG_FB_MATROX_G=y
161CONFIG_FB_VOODOO1=m
162CONFIG_DUMMY_CONSOLE_COLUMNS=128
163CONFIG_DUMMY_CONSOLE_ROWS=48
164CONFIG_FRAMEBUFFER_CONSOLE=y
165CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y
166CONFIG_LOGO=y
167# CONFIG_LOGO_LINUX_MONO is not set
168# CONFIG_LOGO_LINUX_VGA16 is not set
169# CONFIG_LOGO_LINUX_CLUT224 is not set
170CONFIG_SOUND=m
171CONFIG_SND=m
172CONFIG_SND_SEQUENCER=m
173CONFIG_SND_MIXER_OSS=m
174CONFIG_SND_PCM_OSS=m
175CONFIG_SND_SEQUENCER_OSS=y
176CONFIG_SND_DYNAMIC_MINORS=y
177CONFIG_SND_AD1889=m
178CONFIG_SND_HARMONY=m
179CONFIG_HIDRAW=y
180CONFIG_HID_A4TECH=y
181CONFIG_HID_APPLE=y
182CONFIG_HID_BELKIN=y
183CONFIG_HID_CHERRY=y
184CONFIG_HID_CHICONY=y
185CONFIG_HID_CYPRESS=y
186CONFIG_HID_DRAGONRISE=y
187CONFIG_HID_EZKEY=y
188CONFIG_HID_KYE=y
189CONFIG_HID_GYRATION=y
190CONFIG_HID_TWINHAN=y
191CONFIG_HID_KENSINGTON=y
192CONFIG_HID_LOGITECH=y
193CONFIG_HID_LOGITECH_DJ=m
194CONFIG_HID_MICROSOFT=y
195CONFIG_HID_MONTEREY=y
196CONFIG_HID_NTRIG=y
197CONFIG_HID_ORTEK=y
198CONFIG_HID_PANTHERLORD=y
199CONFIG_HID_PETALYNX=y
200CONFIG_HID_SAMSUNG=y
201CONFIG_HID_SONY=y
202CONFIG_HID_SUNPLUS=y
203CONFIG_HID_GREENASIA=y
204CONFIG_HID_SMARTJOYPLUS=y
205CONFIG_HID_TOPSEED=y
206CONFIG_HID_THRUSTMASTER=y
207CONFIG_HID_ZEROPLUS=y
208CONFIG_USB=y
209CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
210CONFIG_USB_MON=y
211CONFIG_USB_OHCI_HCD=y
212CONFIG_USB_UHCI_HCD=y
213CONFIG_NEW_LEDS=y
214CONFIG_LEDS_CLASS=y
215CONFIG_LEDS_TRIGGERS=y
216CONFIG_LEDS_TRIGGER_TIMER=y
217CONFIG_LEDS_TRIGGER_IDE_DISK=y
218CONFIG_LEDS_TRIGGER_HEARTBEAT=y
219CONFIG_LEDS_TRIGGER_DEFAULT_ON=y
220CONFIG_DMADEVICES=y
221CONFIG_AUXDISPLAY=y
222CONFIG_EXT2_FS=y
223CONFIG_EXT2_FS_XATTR=y
224CONFIG_EXT2_FS_SECURITY=y
225CONFIG_EXT3_FS=y
226# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set
227CONFIG_EXT3_FS_SECURITY=y
228CONFIG_EXT4_FS=y
229CONFIG_XFS_FS=m
230CONFIG_XFS_QUOTA=y
231CONFIG_XFS_RT=y
232CONFIG_QUOTA=y
233CONFIG_QUOTA_NETLINK_INTERFACE=y
234CONFIG_QFMT_V2=y
235CONFIG_AUTOFS4_FS=y
236CONFIG_ISO9660_FS=y
237CONFIG_JOLIET=y
238CONFIG_VFAT_FS=y
239CONFIG_PROC_KCORE=y
240CONFIG_TMPFS=y
241CONFIG_TMPFS_XATTR=y
242CONFIG_NFS_FS=m
243# CONFIG_NFS_V2 is not set
244CONFIG_NFSD=m
245CONFIG_NFSD_V3=y
246CONFIG_CIFS=m
247CONFIG_CIFS_WEAK_PW_HASH=y
248CONFIG_CIFS_XATTR=y
249CONFIG_CIFS_POSIX=y
250# CONFIG_CIFS_DEBUG is not set
251CONFIG_NLS_CODEPAGE_437=y
252CONFIG_NLS_CODEPAGE_737=m
253CONFIG_NLS_CODEPAGE_775=m
254CONFIG_NLS_CODEPAGE_850=m
255CONFIG_NLS_CODEPAGE_852=m
256CONFIG_NLS_CODEPAGE_855=m
257CONFIG_NLS_CODEPAGE_857=m
258CONFIG_NLS_CODEPAGE_860=m
259CONFIG_NLS_CODEPAGE_861=m
260CONFIG_NLS_CODEPAGE_862=m
261CONFIG_NLS_CODEPAGE_863=m
262CONFIG_NLS_CODEPAGE_864=m
263CONFIG_NLS_CODEPAGE_865=m
264CONFIG_NLS_CODEPAGE_866=m
265CONFIG_NLS_CODEPAGE_869=m
266CONFIG_NLS_CODEPAGE_936=m
267CONFIG_NLS_CODEPAGE_950=m
268CONFIG_NLS_CODEPAGE_932=m
269CONFIG_NLS_CODEPAGE_949=m
270CONFIG_NLS_CODEPAGE_874=m
271CONFIG_NLS_ISO8859_8=m
272CONFIG_NLS_CODEPAGE_1250=y
273CONFIG_NLS_CODEPAGE_1251=m
274CONFIG_NLS_ASCII=m
275CONFIG_NLS_ISO8859_1=y
276CONFIG_NLS_ISO8859_2=m
277CONFIG_NLS_ISO8859_3=m
278CONFIG_NLS_ISO8859_4=m
279CONFIG_NLS_ISO8859_5=m
280CONFIG_NLS_ISO8859_6=m
281CONFIG_NLS_ISO8859_7=m
282CONFIG_NLS_ISO8859_9=m
283CONFIG_NLS_ISO8859_13=m
284CONFIG_NLS_ISO8859_14=m
285CONFIG_NLS_ISO8859_15=m
286CONFIG_NLS_KOI8_R=m
287CONFIG_NLS_KOI8_U=m
288CONFIG_NLS_UTF8=y
289CONFIG_UNUSED_SYMBOLS=y
290CONFIG_DEBUG_FS=y
291CONFIG_MAGIC_SYSRQ=y
292CONFIG_DEBUG_MEMORY_INIT=y
293CONFIG_DEBUG_STACKOVERFLOW=y
294CONFIG_DEBUG_SHIRQ=y
295CONFIG_DETECT_HUNG_TASK=y
296CONFIG_TIMER_STATS=y
297CONFIG_DEBUG_RT_MUTEXES=y
298CONFIG_RT_MUTEX_TESTER=y
299CONFIG_DEBUG_SPINLOCK=y
300CONFIG_DEBUG_MUTEXES=y
301CONFIG_RCU_CPU_STALL_INFO=y
302CONFIG_LATENCYTOP=y
303CONFIG_LKDTM=m
304CONFIG_KEYS=y
305CONFIG_KEYS_DEBUG_PROC_KEYS=y
306CONFIG_CRYPTO_NULL=m
307CONFIG_CRYPTO_TEST=m
308CONFIG_CRYPTO_HMAC=y
309CONFIG_CRYPTO_MD5=y
310CONFIG_CRYPTO_MICHAEL_MIC=m
311CONFIG_CRYPTO_SHA1=y
312CONFIG_CRYPTO_SHA512=m
313CONFIG_CRYPTO_TGR192=m
314CONFIG_CRYPTO_WP512=m
315CONFIG_CRYPTO_ANUBIS=m
316CONFIG_CRYPTO_BLOWFISH=m
317CONFIG_CRYPTO_CAST5=m
318CONFIG_CRYPTO_CAST6=m
319CONFIG_CRYPTO_DES=y
320CONFIG_CRYPTO_KHAZAD=m
321CONFIG_CRYPTO_SERPENT=m
322CONFIG_CRYPTO_TEA=m
323CONFIG_CRYPTO_TWOFISH=m
324CONFIG_CRYPTO_DEFLATE=y
325# CONFIG_CRYPTO_ANSI_CPRNG is not set
326CONFIG_CRC_CCITT=m
327CONFIG_CRC_T10DIF=y
328CONFIG_FONTS=y
diff --git a/arch/parisc/configs/generic-64bit_defconfig b/arch/parisc/configs/generic-64bit_defconfig
new file mode 100644
index 000000000000..5874cebee077
--- /dev/null
+++ b/arch/parisc/configs/generic-64bit_defconfig
@@ -0,0 +1,346 @@
1CONFIG_LOCALVERSION="-64bit"
2# CONFIG_LOCALVERSION_AUTO is not set
3CONFIG_SYSVIPC=y
4CONFIG_POSIX_MQUEUE=y
5CONFIG_BSD_PROCESS_ACCT=y
6CONFIG_BSD_PROCESS_ACCT_V3=y
7CONFIG_TASKSTATS=y
8CONFIG_TASK_DELAY_ACCT=y
9CONFIG_TASK_XACCT=y
10CONFIG_TASK_IO_ACCOUNTING=y
11# CONFIG_UTS_NS is not set
12# CONFIG_IPC_NS is not set
13# CONFIG_PID_NS is not set
14# CONFIG_NET_NS is not set
15CONFIG_RELAY=y
16CONFIG_BLK_DEV_INITRD=y
17CONFIG_CC_OPTIMIZE_FOR_SIZE=y
18# CONFIG_COMPAT_BRK is not set
19CONFIG_MODULES=y
20CONFIG_MODULE_FORCE_LOAD=y
21CONFIG_MODULE_UNLOAD=y
22CONFIG_MODULE_FORCE_UNLOAD=y
23CONFIG_MODVERSIONS=y
24CONFIG_BLK_DEV_INTEGRITY=y
25# CONFIG_IOSCHED_DEADLINE is not set
26CONFIG_PA8X00=y
27CONFIG_MLONGCALLS=y
28CONFIG_64BIT=y
29CONFIG_SMP=y
30# CONFIG_COMPACTION is not set
31CONFIG_HPPB=y
32CONFIG_IOMMU_CCIO=y
33CONFIG_GSC_LASI=y
34CONFIG_GSC_WAX=y
35CONFIG_PCI=y
36CONFIG_PCI_STUB=m
37CONFIG_PCI_IOV=y
38CONFIG_GSC_DINO=y
39CONFIG_PCI_LBA=y
40CONFIG_BINFMT_MISC=m
41CONFIG_NET=y
42CONFIG_PACKET=y
43CONFIG_UNIX=y
44CONFIG_XFRM_USER=m
45CONFIG_XFRM_SUB_POLICY=y
46CONFIG_XFRM_MIGRATE=y
47CONFIG_INET=y
48CONFIG_IP_MULTICAST=y
49CONFIG_IP_PNP=y
50CONFIG_IP_PNP_BOOTP=y
51CONFIG_INET_AH=m
52CONFIG_INET_ESP=m
53CONFIG_INET_XFRM_MODE_TRANSPORT=m
54CONFIG_INET_XFRM_MODE_TUNNEL=m
55CONFIG_INET_XFRM_MODE_BEET=m
56CONFIG_INET_LRO=m
57CONFIG_INET_DIAG=m
58CONFIG_NETFILTER=y
59# CONFIG_NETFILTER_ADVANCED is not set
60CONFIG_NETFILTER_NETLINK_LOG=y
61CONFIG_DCB=y
62# CONFIG_WIRELESS is not set
63CONFIG_DEVTMPFS=y
64CONFIG_DEVTMPFS_MOUNT=y
65CONFIG_BLK_DEV_LOOP=y
66CONFIG_IDE=y
67CONFIG_IDE_GD=m
68CONFIG_IDE_GD_ATAPI=y
69CONFIG_BLK_DEV_IDECD=m
70CONFIG_BLK_DEV_NS87415=y
71CONFIG_BLK_DEV_SIIMAGE=y
72# CONFIG_SCSI_PROC_FS is not set
73CONFIG_BLK_DEV_SD=y
74CONFIG_BLK_DEV_SR=y
75CONFIG_SCSI_ISCSI_ATTRS=y
76CONFIG_SCSI_SRP_ATTRS=y
77CONFIG_ISCSI_BOOT_SYSFS=y
78CONFIG_SCSI_MPT2SAS=y
79CONFIG_SCSI_LASI700=m
80CONFIG_SCSI_SYM53C8XX_2=y
81CONFIG_SCSI_ZALON=y
82CONFIG_SCSI_QLA_ISCSI=m
83CONFIG_SCSI_DH=y
84CONFIG_ATA=y
85CONFIG_ATA_GENERIC=y
86CONFIG_MD=y
87CONFIG_MD_LINEAR=m
88CONFIG_MD_RAID0=m
89CONFIG_BLK_DEV_DM=m
90CONFIG_DM_RAID=m
91CONFIG_DM_UEVENT=y
92CONFIG_FUSION=y
93CONFIG_FUSION_SPI=y
94CONFIG_FUSION_SAS=y
95CONFIG_NETDEVICES=y
96CONFIG_DUMMY=m
97CONFIG_MACVLAN=m
98CONFIG_MACVTAP=m
99CONFIG_NETCONSOLE=m
100CONFIG_NETCONSOLE_DYNAMIC=y
101CONFIG_TUN=y
102# CONFIG_NET_VENDOR_3COM is not set
103# CONFIG_NET_VENDOR_ADAPTEC is not set
104# CONFIG_NET_VENDOR_ALTEON is not set
105# CONFIG_NET_VENDOR_AMD is not set
106# CONFIG_NET_VENDOR_ATHEROS is not set
107# CONFIG_NET_CADENCE is not set
108# CONFIG_NET_VENDOR_BROADCOM is not set
109# CONFIG_NET_VENDOR_BROCADE is not set
110# CONFIG_NET_VENDOR_CHELSIO is not set
111# CONFIG_NET_VENDOR_CISCO is not set
112CONFIG_NET_TULIP=y
113CONFIG_TULIP=y
114# CONFIG_NET_VENDOR_DLINK is not set
115# CONFIG_NET_VENDOR_EMULEX is not set
116# CONFIG_NET_VENDOR_EXAR is not set
117CONFIG_HP100=m
118CONFIG_E1000=y
119CONFIG_LASI_82596=y
120# CONFIG_NET_VENDOR_MARVELL is not set
121# CONFIG_NET_VENDOR_MELLANOX is not set
122# CONFIG_NET_VENDOR_MICREL is not set
123# CONFIG_NET_VENDOR_MYRI is not set
124# CONFIG_NET_VENDOR_NATSEMI is not set
125# CONFIG_NET_VENDOR_NVIDIA is not set
126# CONFIG_NET_VENDOR_OKI is not set
127CONFIG_QLA3XXX=m
128CONFIG_QLCNIC=m
129CONFIG_QLGE=m
130# CONFIG_NET_VENDOR_REALTEK is not set
131# CONFIG_NET_VENDOR_RDC is not set
132# CONFIG_NET_VENDOR_SEEQ is not set
133# CONFIG_NET_VENDOR_SILAN is not set
134# CONFIG_NET_VENDOR_SIS is not set
135# CONFIG_NET_VENDOR_SMSC is not set
136# CONFIG_NET_VENDOR_STMICRO is not set
137# CONFIG_NET_VENDOR_SUN is not set
138# CONFIG_NET_VENDOR_TEHUTI is not set
139# CONFIG_NET_VENDOR_TI is not set
140# CONFIG_NET_VENDOR_VIA is not set
141# CONFIG_NET_VENDOR_WIZNET is not set
142CONFIG_PHYLIB=y
143CONFIG_MARVELL_PHY=m
144CONFIG_DAVICOM_PHY=m
145CONFIG_QSEMI_PHY=m
146CONFIG_LXT_PHY=m
147CONFIG_CICADA_PHY=m
148CONFIG_VITESSE_PHY=m
149CONFIG_SMSC_PHY=m
150CONFIG_BROADCOM_PHY=m
151CONFIG_ICPLUS_PHY=m
152CONFIG_REALTEK_PHY=m
153CONFIG_NATIONAL_PHY=m
154CONFIG_STE10XP=m
155CONFIG_LSI_ET1011C_PHY=m
156CONFIG_MDIO_BITBANG=m
157CONFIG_SLIP=m
158CONFIG_SLIP_COMPRESSED=y
159CONFIG_SLIP_SMART=y
160CONFIG_SLIP_MODE_SLIP6=y
161# CONFIG_WLAN is not set
162CONFIG_INPUT_EVDEV=y
163# CONFIG_KEYBOARD_HIL_OLD is not set
164# CONFIG_KEYBOARD_HIL is not set
165# CONFIG_INPUT_MOUSE is not set
166CONFIG_INPUT_MISC=y
167CONFIG_SERIO_SERPORT=m
168# CONFIG_HP_SDC is not set
169CONFIG_SERIO_RAW=m
170CONFIG_DEVPTS_MULTIPLE_INSTANCES=y
171# CONFIG_LEGACY_PTYS is not set
172CONFIG_NOZOMI=m
173# CONFIG_DEVKMEM is not set
174CONFIG_SERIAL_8250=y
175# CONFIG_SERIAL_8250_DEPRECATED_OPTIONS is not set
176CONFIG_SERIAL_8250_CONSOLE=y
177CONFIG_SERIAL_8250_NR_UARTS=8
178CONFIG_SERIAL_8250_RUNTIME_UARTS=8
179CONFIG_SERIAL_8250_EXTENDED=y
180CONFIG_SERIAL_8250_MANY_PORTS=y
181CONFIG_SERIAL_8250_SHARE_IRQ=y
182CONFIG_SERIAL_JSM=m
183CONFIG_IPMI_HANDLER=y
184CONFIG_IPMI_DEVICE_INTERFACE=y
185CONFIG_IPMI_SI=y
186# CONFIG_HW_RANDOM is not set
187CONFIG_TCG_TPM=m
188CONFIG_TCG_ATMEL=m
189CONFIG_PTP_1588_CLOCK=m
190CONFIG_SENSORS_I5K_AMB=m
191CONFIG_SENSORS_F71882FG=m
192CONFIG_SENSORS_PC87427=m
193CONFIG_SENSORS_VT1211=m
194CONFIG_SENSORS_VT8231=m
195CONFIG_SENSORS_W83627EHF=m
196CONFIG_WATCHDOG=y
197CONFIG_SOFT_WATCHDOG=m
198CONFIG_SSB=m
199CONFIG_SSB_DRIVER_PCICORE=y
200CONFIG_HTC_PASIC3=m
201CONFIG_LPC_SCH=m
202CONFIG_MFD_SM501=m
203CONFIG_REGULATOR=y
204CONFIG_REGULATOR_FIXED_VOLTAGE=m
205CONFIG_REGULATOR_USERSPACE_CONSUMER=m
206CONFIG_MEDIA_SUPPORT=m
207CONFIG_AGP=y
208CONFIG_AGP_PARISC=y
209CONFIG_DRM=y
210CONFIG_DRM_RADEON=y
211CONFIG_DRM_RADEON_UMS=y
212CONFIG_FIRMWARE_EDID=y
213CONFIG_FB_MODE_HELPERS=y
214CONFIG_BACKLIGHT_LCD_SUPPORT=y
215# CONFIG_BACKLIGHT_GENERIC is not set
216CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
217CONFIG_LOGO=y
218# CONFIG_LOGO_LINUX_MONO is not set
219CONFIG_HID=m
220CONFIG_HIDRAW=y
221CONFIG_HID_DRAGONRISE=m
222CONFIG_DRAGONRISE_FF=y
223CONFIG_HID_KYE=m
224CONFIG_HID_GYRATION=m
225CONFIG_HID_TWINHAN=m
226CONFIG_LOGITECH_FF=y
227CONFIG_LOGIRUMBLEPAD2_FF=y
228CONFIG_HID_NTRIG=m
229CONFIG_HID_PANTHERLORD=m
230CONFIG_PANTHERLORD_FF=y
231CONFIG_HID_PETALYNX=m
232CONFIG_HID_SAMSUNG=m
233CONFIG_HID_SONY=m
234CONFIG_HID_SUNPLUS=m
235CONFIG_HID_GREENASIA=m
236CONFIG_GREENASIA_FF=y
237CONFIG_HID_SMARTJOYPLUS=m
238CONFIG_SMARTJOYPLUS_FF=y
239CONFIG_HID_TOPSEED=m
240CONFIG_HID_THRUSTMASTER=m
241CONFIG_THRUSTMASTER_FF=y
242CONFIG_HID_ZEROPLUS=m
243CONFIG_ZEROPLUS_FF=y
244CONFIG_USB_HID=m
245CONFIG_HID_PID=y
246CONFIG_USB_HIDDEV=y
247CONFIG_USB=y
248CONFIG_USB_DEBUG=y
249CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
250CONFIG_USB_DYNAMIC_MINORS=y
251CONFIG_USB_MON=m
252CONFIG_USB_WUSB_CBAF=m
253CONFIG_USB_XHCI_HCD=m
254CONFIG_USB_EHCI_HCD=m
255CONFIG_USB_OHCI_HCD=m
256CONFIG_USB_R8A66597_HCD=m
257CONFIG_USB_ACM=m
258CONFIG_USB_PRINTER=m
259CONFIG_USB_WDM=m
260CONFIG_USB_TMC=m
261CONFIG_NEW_LEDS=y
262CONFIG_LEDS_CLASS=y
263CONFIG_LEDS_TRIGGERS=y
264CONFIG_LEDS_TRIGGER_TIMER=y
265CONFIG_LEDS_TRIGGER_ONESHOT=y
266CONFIG_LEDS_TRIGGER_IDE_DISK=y
267CONFIG_LEDS_TRIGGER_HEARTBEAT=m
268CONFIG_LEDS_TRIGGER_BACKLIGHT=m
269CONFIG_LEDS_TRIGGER_DEFAULT_ON=m
270CONFIG_UIO=y
271CONFIG_UIO_PDRV_GENIRQ=m
272CONFIG_UIO_AEC=m
273CONFIG_UIO_SERCOS3=m
274CONFIG_UIO_PCI_GENERIC=m
275CONFIG_STAGING=y
276# CONFIG_NET_VENDOR_SILICOM is not set
277CONFIG_EXT2_FS=y
278CONFIG_EXT2_FS_XATTR=y
279CONFIG_EXT2_FS_SECURITY=y
280CONFIG_EXT3_FS=y
281CONFIG_EXT3_FS_SECURITY=y
282CONFIG_EXT4_FS=y
283CONFIG_EXT4_FS_SECURITY=y
284CONFIG_XFS_FS=m
285CONFIG_BTRFS_FS=m
286CONFIG_QUOTA=y
287CONFIG_QUOTA_NETLINK_INTERFACE=y
288CONFIG_QFMT_V2=y
289CONFIG_AUTOFS4_FS=y
290CONFIG_FUSE_FS=y
291CONFIG_CUSE=y
292CONFIG_ISO9660_FS=y
293CONFIG_UDF_FS=y
294CONFIG_VFAT_FS=m
295CONFIG_PROC_KCORE=y
296CONFIG_TMPFS=y
297CONFIG_TMPFS_XATTR=y
298CONFIG_CONFIGFS_FS=y
299CONFIG_SYSV_FS=y
300CONFIG_NFS_FS=m
301CONFIG_NFS_V4=m
302CONFIG_NFS_V4_1=y
303CONFIG_NFSD=m
304CONFIG_NFSD_V4=y
305CONFIG_NLS_DEFAULT="utf8"
306CONFIG_NLS_CODEPAGE_437=m
307CONFIG_NLS_CODEPAGE_850=m
308CONFIG_NLS_CODEPAGE_852=m
309CONFIG_NLS_CODEPAGE_1250=m
310CONFIG_NLS_CODEPAGE_1251=m
311CONFIG_NLS_ASCII=m
312CONFIG_NLS_ISO8859_1=m
313CONFIG_NLS_ISO8859_2=m
314CONFIG_NLS_UTF8=m
315CONFIG_PRINTK_TIME=y
316CONFIG_STRIP_ASM_SYMS=y
317CONFIG_UNUSED_SYMBOLS=y
318CONFIG_DEBUG_FS=y
319CONFIG_MAGIC_SYSRQ=y
320CONFIG_DEBUG_KERNEL=y
321CONFIG_DEBUG_STACKOVERFLOW=y
322CONFIG_LOCKUP_DETECTOR=y
323CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC=y
324CONFIG_BOOTPARAM_HUNG_TASK_PANIC=y
325# CONFIG_SCHED_DEBUG is not set
326CONFIG_TIMER_STATS=y
327CONFIG_DEBUG_STRICT_USER_COPY_CHECKS=y
328CONFIG_CRYPTO_MANAGER=y
329CONFIG_CRYPTO_ECB=m
330CONFIG_CRYPTO_PCBC=m
331CONFIG_CRYPTO_MD4=m
332CONFIG_CRYPTO_MD5=y
333CONFIG_CRYPTO_MICHAEL_MIC=m
334CONFIG_CRYPTO_SHA256=m
335CONFIG_CRYPTO_ARC4=m
336CONFIG_CRYPTO_FCRYPT=m
337CONFIG_CRYPTO_DEFLATE=m
338# CONFIG_CRYPTO_HW is not set
339CONFIG_CRC_CCITT=m
340CONFIG_LIBCRC32C=y
341CONFIG_XZ_DEC_X86=y
342CONFIG_XZ_DEC_POWERPC=y
343CONFIG_XZ_DEC_IA64=y
344CONFIG_XZ_DEC_ARM=y
345CONFIG_XZ_DEC_ARMTHUMB=y
346CONFIG_XZ_DEC_SPARC=y
diff --git a/arch/parisc/include/asm/Kbuild b/arch/parisc/include/asm/Kbuild
index ff4c9faed546..a603b9ebe54c 100644
--- a/arch/parisc/include/asm/Kbuild
+++ b/arch/parisc/include/asm/Kbuild
@@ -4,3 +4,4 @@ generic-y += word-at-a-time.h auxvec.h user.h cputime.h emergency-restart.h \
4 div64.h irq_regs.h kdebug.h kvm_para.h local64.h local.h param.h \ 4 div64.h irq_regs.h kdebug.h kvm_para.h local64.h local.h param.h \
5 poll.h xor.h clkdev.h exec.h 5 poll.h xor.h clkdev.h exec.h
6generic-y += trace_clock.h 6generic-y += trace_clock.h
7generic-y += preempt.h
diff --git a/arch/parisc/include/asm/assembly.h b/arch/parisc/include/asm/assembly.h
index 0da848232344..b3069fd83468 100644
--- a/arch/parisc/include/asm/assembly.h
+++ b/arch/parisc/include/asm/assembly.h
@@ -515,5 +515,17 @@
515 nop /* 7 */ 515 nop /* 7 */
516 .endm 516 .endm
517 517
518 /*
519 * ASM_EXCEPTIONTABLE_ENTRY
520 *
521 * Creates an exception table entry.
522 * Do not convert to a assembler macro. This won't work.
523 */
524#define ASM_EXCEPTIONTABLE_ENTRY(fault_addr, except_addr) \
525 .section __ex_table,"aw" ! \
526 ASM_ULONG_INSN fault_addr, except_addr ! \
527 .previous
528
529
518#endif /* __ASSEMBLY__ */ 530#endif /* __ASSEMBLY__ */
519#endif 531#endif
diff --git a/arch/parisc/include/asm/delay.h b/arch/parisc/include/asm/delay.h
index 912ee7e6a579..08e58e679e3e 100644
--- a/arch/parisc/include/asm/delay.h
+++ b/arch/parisc/include/asm/delay.h
@@ -1,15 +1,5 @@
1#ifndef _PARISC_DELAY_H 1#ifndef _ASM_PARISC_DELAY_H
2#define _PARISC_DELAY_H 2#define _ASM_PARISC_DELAY_H
3
4#include <asm/special_insns.h> /* for mfctl() */
5#include <asm/processor.h> /* for boot_cpu_data */
6
7
8/*
9 * Copyright (C) 1993 Linus Torvalds
10 *
11 * Delay routines
12 */
13 3
14static __inline__ void __delay(unsigned long loops) { 4static __inline__ void __delay(unsigned long loops) {
15 asm volatile( 5 asm volatile(
@@ -19,25 +9,14 @@ static __inline__ void __delay(unsigned long loops) {
19 : "=r" (loops) : "0" (loops)); 9 : "=r" (loops) : "0" (loops));
20} 10}
21 11
22static __inline__ void __cr16_delay(unsigned long clocks) { 12extern void __udelay(unsigned long usecs);
23 unsigned long start; 13extern void __udelay_bad(unsigned long usecs);
24
25 /*
26 * Note: Due to unsigned math, cr16 rollovers shouldn't be
27 * a problem here. However, on 32 bit, we need to make sure
28 * we don't pass in too big a value. The current default
29 * value of MAX_UDELAY_MS should help prevent this.
30 */
31 14
32 start = mfctl(16); 15static inline void udelay(unsigned long usecs)
33 while ((mfctl(16) - start) < clocks) 16{
34 ; 17 if (__builtin_constant_p(usecs) && (usecs) > 20000)
18 __udelay_bad(usecs);
19 __udelay(usecs);
35} 20}
36 21
37static __inline__ void __udelay(unsigned long usecs) { 22#endif /* _ASM_PARISC_DELAY_H */
38 __cr16_delay(usecs * ((unsigned long)boot_cpu_data.cpu_hz / 1000000UL));
39}
40
41#define udelay(n) __udelay(n)
42
43#endif /* defined(_PARISC_DELAY_H) */
diff --git a/arch/parisc/include/asm/hardirq.h b/arch/parisc/include/asm/hardirq.h
index 241c34518465..9b3bd039a609 100644
--- a/arch/parisc/include/asm/hardirq.h
+++ b/arch/parisc/include/asm/hardirq.h
@@ -21,7 +21,6 @@ typedef struct {
21 unsigned int irq_stack_usage; 21 unsigned int irq_stack_usage;
22#ifdef CONFIG_SMP 22#ifdef CONFIG_SMP
23 unsigned int irq_resched_count; 23 unsigned int irq_resched_count;
24 unsigned int irq_call_count;
25#endif 24#endif
26 unsigned int irq_unaligned_count; 25 unsigned int irq_unaligned_count;
27 unsigned int irq_fpassist_count; 26 unsigned int irq_fpassist_count;
diff --git a/arch/parisc/include/asm/pgalloc.h b/arch/parisc/include/asm/pgalloc.h
index fc987a1c12a8..f213f5b4c423 100644
--- a/arch/parisc/include/asm/pgalloc.h
+++ b/arch/parisc/include/asm/pgalloc.h
@@ -121,8 +121,12 @@ static inline pgtable_t
121pte_alloc_one(struct mm_struct *mm, unsigned long address) 121pte_alloc_one(struct mm_struct *mm, unsigned long address)
122{ 122{
123 struct page *page = alloc_page(GFP_KERNEL|__GFP_REPEAT|__GFP_ZERO); 123 struct page *page = alloc_page(GFP_KERNEL|__GFP_REPEAT|__GFP_ZERO);
124 if (page) 124 if (!page)
125 pgtable_page_ctor(page); 125 return NULL;
126 if (!pgtable_page_ctor(page)) {
127 __free_page(page);
128 return NULL;
129 }
126 return page; 130 return page;
127} 131}
128 132
diff --git a/arch/parisc/include/asm/ptrace.h b/arch/parisc/include/asm/ptrace.h
index a2db278a5def..3c3cb004b7e2 100644
--- a/arch/parisc/include/asm/ptrace.h
+++ b/arch/parisc/include/asm/ptrace.h
@@ -19,5 +19,9 @@
19#define user_stack_pointer(regs) ((regs)->gr[30]) 19#define user_stack_pointer(regs) ((regs)->gr[30])
20unsigned long profile_pc(struct pt_regs *); 20unsigned long profile_pc(struct pt_regs *);
21 21
22static inline unsigned long regs_return_value(struct pt_regs *regs)
23{
24 return regs->gr[20];
25}
22 26
23#endif 27#endif
diff --git a/arch/parisc/include/asm/thread_info.h b/arch/parisc/include/asm/thread_info.h
index 540c88fa8f86..bc7cf120106b 100644
--- a/arch/parisc/include/asm/thread_info.h
+++ b/arch/parisc/include/asm/thread_info.h
@@ -59,6 +59,7 @@ struct thread_info {
59#define TIF_32BIT 4 /* 32 bit binary */ 59#define TIF_32BIT 4 /* 32 bit binary */
60#define TIF_MEMDIE 5 /* is terminating due to OOM killer */ 60#define TIF_MEMDIE 5 /* is terminating due to OOM killer */
61#define TIF_RESTORE_SIGMASK 6 /* restore saved signal mask */ 61#define TIF_RESTORE_SIGMASK 6 /* restore saved signal mask */
62#define TIF_SYSCALL_AUDIT 7 /* syscall auditing active */
62#define TIF_NOTIFY_RESUME 8 /* callback before returning to user */ 63#define TIF_NOTIFY_RESUME 8 /* callback before returning to user */
63#define TIF_SINGLESTEP 9 /* single stepping? */ 64#define TIF_SINGLESTEP 9 /* single stepping? */
64#define TIF_BLOCKSTEP 10 /* branch stepping? */ 65#define TIF_BLOCKSTEP 10 /* branch stepping? */
@@ -68,6 +69,7 @@ struct thread_info {
68#define _TIF_NEED_RESCHED (1 << TIF_NEED_RESCHED) 69#define _TIF_NEED_RESCHED (1 << TIF_NEED_RESCHED)
69#define _TIF_POLLING_NRFLAG (1 << TIF_POLLING_NRFLAG) 70#define _TIF_POLLING_NRFLAG (1 << TIF_POLLING_NRFLAG)
70#define _TIF_32BIT (1 << TIF_32BIT) 71#define _TIF_32BIT (1 << TIF_32BIT)
72#define _TIF_SYSCALL_AUDIT (1 << TIF_SYSCALL_AUDIT)
71#define _TIF_NOTIFY_RESUME (1 << TIF_NOTIFY_RESUME) 73#define _TIF_NOTIFY_RESUME (1 << TIF_NOTIFY_RESUME)
72#define _TIF_SINGLESTEP (1 << TIF_SINGLESTEP) 74#define _TIF_SINGLESTEP (1 << TIF_SINGLESTEP)
73#define _TIF_BLOCKSTEP (1 << TIF_BLOCKSTEP) 75#define _TIF_BLOCKSTEP (1 << TIF_BLOCKSTEP)
@@ -75,7 +77,7 @@ struct thread_info {
75#define _TIF_USER_WORK_MASK (_TIF_SIGPENDING | _TIF_NOTIFY_RESUME | \ 77#define _TIF_USER_WORK_MASK (_TIF_SIGPENDING | _TIF_NOTIFY_RESUME | \
76 _TIF_NEED_RESCHED) 78 _TIF_NEED_RESCHED)
77#define _TIF_SYSCALL_TRACE_MASK (_TIF_SYSCALL_TRACE | _TIF_SINGLESTEP | \ 79#define _TIF_SYSCALL_TRACE_MASK (_TIF_SYSCALL_TRACE | _TIF_SINGLESTEP | \
78 _TIF_BLOCKSTEP) 80 _TIF_BLOCKSTEP | _TIF_SYSCALL_AUDIT)
79 81
80#endif /* __KERNEL__ */ 82#endif /* __KERNEL__ */
81 83
diff --git a/arch/parisc/include/asm/traps.h b/arch/parisc/include/asm/traps.h
index 1945f995f2df..4736020ba5ea 100644
--- a/arch/parisc/include/asm/traps.h
+++ b/arch/parisc/include/asm/traps.h
@@ -6,7 +6,7 @@ struct pt_regs;
6 6
7/* traps.c */ 7/* traps.c */
8void parisc_terminate(char *msg, struct pt_regs *regs, 8void parisc_terminate(char *msg, struct pt_regs *regs,
9 int code, unsigned long offset); 9 int code, unsigned long offset) __noreturn __cold;
10 10
11/* mm/fault.c */ 11/* mm/fault.c */
12void do_page_fault(struct pt_regs *regs, unsigned long code, 12void do_page_fault(struct pt_regs *regs, unsigned long code,
diff --git a/arch/parisc/include/asm/uaccess.h b/arch/parisc/include/asm/uaccess.h
index e0a82358517e..63f4dd0b49c2 100644
--- a/arch/parisc/include/asm/uaccess.h
+++ b/arch/parisc/include/asm/uaccess.h
@@ -4,11 +4,14 @@
4/* 4/*
5 * User space memory access functions 5 * User space memory access functions
6 */ 6 */
7#include <asm/processor.h>
7#include <asm/page.h> 8#include <asm/page.h>
8#include <asm/cache.h> 9#include <asm/cache.h>
9#include <asm/errno.h> 10#include <asm/errno.h>
10#include <asm-generic/uaccess-unaligned.h> 11#include <asm-generic/uaccess-unaligned.h>
11 12
13#include <linux/sched.h>
14
12#define VERIFY_READ 0 15#define VERIFY_READ 0
13#define VERIFY_WRITE 1 16#define VERIFY_WRITE 1
14 17
@@ -33,12 +36,43 @@ extern int __get_user_bad(void);
33extern int __put_kernel_bad(void); 36extern int __put_kernel_bad(void);
34extern int __put_user_bad(void); 37extern int __put_user_bad(void);
35 38
36static inline long access_ok(int type, const void __user * addr, 39
37 unsigned long size) 40/*
41 * Test whether a block of memory is a valid user space address.
42 * Returns 0 if the range is valid, nonzero otherwise.
43 */
44static inline int __range_not_ok(unsigned long addr, unsigned long size,
45 unsigned long limit)
38{ 46{
39 return 1; 47 unsigned long __newaddr = addr + size;
48 return (__newaddr < addr || __newaddr > limit || size > limit);
40} 49}
41 50
51/**
52 * access_ok: - Checks if a user space pointer is valid
53 * @type: Type of access: %VERIFY_READ or %VERIFY_WRITE. Note that
54 * %VERIFY_WRITE is a superset of %VERIFY_READ - if it is safe
55 * to write to a block, it is always safe to read from it.
56 * @addr: User space pointer to start of block to check
57 * @size: Size of block to check
58 *
59 * Context: User context only. This function may sleep.
60 *
61 * Checks if a pointer to a block of memory in user space is valid.
62 *
63 * Returns true (nonzero) if the memory block may be valid, false (zero)
64 * if it is definitely invalid.
65 *
66 * Note that, depending on architecture, this function probably just
67 * checks that the pointer is in the user space range - after calling
68 * this function, memory access functions may still return -EFAULT.
69 */
70#define access_ok(type, addr, size) \
71( __chk_user_ptr(addr), \
72 !__range_not_ok((unsigned long) (__force void *) (addr), \
73 size, user_addr_max()) \
74)
75
42#define put_user __put_user 76#define put_user __put_user
43#define get_user __get_user 77#define get_user __get_user
44 78
@@ -59,12 +93,13 @@ static inline long access_ok(int type, const void __user * addr,
59/* 93/*
60 * The exception table contains two values: the first is an address 94 * The exception table contains two values: the first is an address
61 * for an instruction that is allowed to fault, and the second is 95 * for an instruction that is allowed to fault, and the second is
62 * the address to the fixup routine. 96 * the address to the fixup routine. Even on a 64bit kernel we could
97 * use a 32bit (unsigned int) address here.
63 */ 98 */
64 99
65struct exception_table_entry { 100struct exception_table_entry {
66 unsigned long insn; /* address of insn that is allowed to fault. */ 101 unsigned long insn; /* address of insn that is allowed to fault. */
67 long fixup; /* fixup routine */ 102 unsigned long fixup; /* fixup routine */
68}; 103};
69 104
70#define ASM_EXCEPTIONTABLE_ENTRY( fault_addr, except_addr )\ 105#define ASM_EXCEPTIONTABLE_ENTRY( fault_addr, except_addr )\
@@ -218,7 +253,11 @@ extern long lstrnlen_user(const char __user *,long);
218/* 253/*
219 * Complex access routines -- macros 254 * Complex access routines -- macros
220 */ 255 */
221#define user_addr_max() (~0UL) 256#ifdef CONFIG_COMPAT
257#define user_addr_max() (TASK_SIZE)
258#else
259#define user_addr_max() (DEFAULT_TASK_SIZE)
260#endif
222 261
223#define strnlen_user lstrnlen_user 262#define strnlen_user lstrnlen_user
224#define strlen_user(str) lstrnlen_user(str, 0x7fffffffL) 263#define strlen_user(str) lstrnlen_user(str, 0x7fffffffL)
diff --git a/arch/parisc/include/uapi/asm/errno.h b/arch/parisc/include/uapi/asm/errno.h
index 135ad6047e51..f3a8aa554841 100644
--- a/arch/parisc/include/uapi/asm/errno.h
+++ b/arch/parisc/include/uapi/asm/errno.h
@@ -37,7 +37,7 @@
37#define EBADMSG 67 /* Not a data message */ 37#define EBADMSG 67 /* Not a data message */
38#define EUSERS 68 /* Too many users */ 38#define EUSERS 68 /* Too many users */
39#define EDQUOT 69 /* Quota exceeded */ 39#define EDQUOT 69 /* Quota exceeded */
40#define ESTALE 70 /* Stale NFS file handle */ 40#define ESTALE 70 /* Stale file handle */
41#define EREMOTE 71 /* Object is remote */ 41#define EREMOTE 71 /* Object is remote */
42#define EOVERFLOW 72 /* Value too large for defined data type */ 42#define EOVERFLOW 72 /* Value too large for defined data type */
43 43
diff --git a/arch/parisc/include/uapi/asm/socket.h b/arch/parisc/include/uapi/asm/socket.h
index 71700e636a8e..7c614d01f1fa 100644
--- a/arch/parisc/include/uapi/asm/socket.h
+++ b/arch/parisc/include/uapi/asm/socket.h
@@ -75,6 +75,8 @@
75 75
76#define SO_BUSY_POLL 0x4027 76#define SO_BUSY_POLL 0x4027
77 77
78#define SO_MAX_PACING_RATE 0x4048
79
78/* O_NONBLOCK clashes with the bits used for socket types. Therefore we 80/* O_NONBLOCK clashes with the bits used for socket types. Therefore we
79 * have to define SOCK_NONBLOCK to a different value here. 81 * have to define SOCK_NONBLOCK to a different value here.
80 */ 82 */
diff --git a/arch/parisc/install.sh b/arch/parisc/install.sh
index 4da682b466d0..6f68784fea25 100644
--- a/arch/parisc/install.sh
+++ b/arch/parisc/install.sh
@@ -19,20 +19,48 @@
19# $4 - default install path (blank if root directory) 19# $4 - default install path (blank if root directory)
20# 20#
21 21
22verify () {
23 if [ ! -f "$1" ]; then
24 echo "" 1>&2
25 echo " *** Missing file: $1" 1>&2
26 echo ' *** You need to run "make" before "make install".' 1>&2
27 echo "" 1>&2
28 exit 1
29 fi
30}
31
32# Make sure the files actually exist
33
34verify "$2"
35verify "$3"
36
22# User may have a custom install script 37# User may have a custom install script
23 38
24if [ -x ~/bin/${INSTALLKERNEL} ]; then exec ~/bin/${INSTALLKERNEL} "$@"; fi 39if [ -n "${INSTALLKERNEL}" ]; then
25if [ -x /sbin/${INSTALLKERNEL} ]; then exec /sbin/${INSTALLKERNEL} "$@"; fi 40 if [ -x ~/bin/${INSTALLKERNEL} ]; then exec ~/bin/${INSTALLKERNEL} "$@"; fi
41 if [ -x /sbin/${INSTALLKERNEL} ]; then exec /sbin/${INSTALLKERNEL} "$@"; fi
42fi
26 43
27# Default install 44# Default install
28 45
29if [ -f $4/vmlinuz ]; then 46if [ "$(basename $2)" = "zImage" ]; then
30 mv $4/vmlinuz $4/vmlinuz.old 47# Compressed install
48 echo "Installing compressed kernel"
49 base=vmlinuz
50else
51# Normal install
52 echo "Installing normal kernel"
53 base=vmlinux
54fi
55
56if [ -f $4/$base-$1 ]; then
57 mv $4/$base-$1 $4/$base-$1.old
31fi 58fi
59cat $2 > $4/$base-$1
32 60
33if [ -f $4/System.map ]; then 61# Install system map file
34 mv $4/System.map $4/System.old 62if [ -f $4/System.map-$1 ]; then
63 mv $4/System.map-$1 $4/System.map-$1.old
35fi 64fi
65cp $3 $4/System.map-$1
36 66
37cat $2 > $4/vmlinuz
38cp $3 $4/System.map
diff --git a/arch/parisc/kernel/Makefile b/arch/parisc/kernel/Makefile
index 66ee3f12df58..ff87b4603e3d 100644
--- a/arch/parisc/kernel/Makefile
+++ b/arch/parisc/kernel/Makefile
@@ -29,7 +29,9 @@ obj-$(CONFIG_PCI) += pci.o
29obj-$(CONFIG_MODULES) += module.o 29obj-$(CONFIG_MODULES) += module.o
30obj-$(CONFIG_64BIT) += binfmt_elf32.o sys_parisc32.o signal32.o 30obj-$(CONFIG_64BIT) += binfmt_elf32.o sys_parisc32.o signal32.o
31obj-$(CONFIG_STACKTRACE)+= stacktrace.o 31obj-$(CONFIG_STACKTRACE)+= stacktrace.o
32obj-$(CONFIG_AUDIT) += audit.o
33obj64-$(CONFIG_AUDIT) += compat_audit.o
32# only supported for PCX-W/U in 64-bit mode at the moment 34# only supported for PCX-W/U in 64-bit mode at the moment
33obj-$(CONFIG_64BIT) += perf.o perf_asm.o 35obj-$(CONFIG_64BIT) += perf.o perf_asm.o $(obj64-y)
34obj-$(CONFIG_FUNCTION_TRACER) += ftrace.o 36obj-$(CONFIG_FUNCTION_TRACER) += ftrace.o
35obj-$(CONFIG_FUNCTION_GRAPH_TRACER) += ftrace.o 37obj-$(CONFIG_FUNCTION_GRAPH_TRACER) += ftrace.o
diff --git a/arch/parisc/kernel/audit.c b/arch/parisc/kernel/audit.c
new file mode 100644
index 000000000000..eb64a6148c82
--- /dev/null
+++ b/arch/parisc/kernel/audit.c
@@ -0,0 +1,81 @@
1#include <linux/init.h>
2#include <linux/types.h>
3#include <linux/audit.h>
4#include <asm/unistd.h>
5
6static unsigned dir_class[] = {
7#include <asm-generic/audit_dir_write.h>
8~0U
9};
10
11static unsigned read_class[] = {
12#include <asm-generic/audit_read.h>
13~0U
14};
15
16static unsigned write_class[] = {
17#include <asm-generic/audit_write.h>
18~0U
19};
20
21static unsigned chattr_class[] = {
22#include <asm-generic/audit_change_attr.h>
23~0U
24};
25
26static unsigned signal_class[] = {
27#include <asm-generic/audit_signal.h>
28~0U
29};
30
31int audit_classify_arch(int arch)
32{
33#ifdef CONFIG_COMPAT
34 if (arch == AUDIT_ARCH_PARISC)
35 return 1;
36#endif
37 return 0;
38}
39
40int audit_classify_syscall(int abi, unsigned syscall)
41{
42#ifdef CONFIG_COMPAT
43 extern int parisc32_classify_syscall(unsigned);
44 if (abi == AUDIT_ARCH_PARISC)
45 return parisc32_classify_syscall(syscall);
46#endif
47 switch (syscall) {
48 case __NR_open:
49 return 2;
50 case __NR_openat:
51 return 3;
52 case __NR_execve:
53 return 5;
54 default:
55 return 0;
56 }
57}
58
59static int __init audit_classes_init(void)
60{
61#ifdef CONFIG_COMPAT
62 extern __u32 parisc32_dir_class[];
63 extern __u32 parisc32_write_class[];
64 extern __u32 parisc32_read_class[];
65 extern __u32 parisc32_chattr_class[];
66 extern __u32 parisc32_signal_class[];
67 audit_register_class(AUDIT_CLASS_WRITE_32, parisc32_write_class);
68 audit_register_class(AUDIT_CLASS_READ_32, parisc32_read_class);
69 audit_register_class(AUDIT_CLASS_DIR_WRITE_32, parisc32_dir_class);
70 audit_register_class(AUDIT_CLASS_CHATTR_32, parisc32_chattr_class);
71 audit_register_class(AUDIT_CLASS_SIGNAL_32, parisc32_signal_class);
72#endif
73 audit_register_class(AUDIT_CLASS_WRITE, write_class);
74 audit_register_class(AUDIT_CLASS_READ, read_class);
75 audit_register_class(AUDIT_CLASS_DIR_WRITE, dir_class);
76 audit_register_class(AUDIT_CLASS_CHATTR, chattr_class);
77 audit_register_class(AUDIT_CLASS_SIGNAL, signal_class);
78 return 0;
79}
80
81__initcall(audit_classes_init);
diff --git a/arch/parisc/kernel/compat_audit.c b/arch/parisc/kernel/compat_audit.c
new file mode 100644
index 000000000000..c74478f6bc74
--- /dev/null
+++ b/arch/parisc/kernel/compat_audit.c
@@ -0,0 +1,40 @@
1#include <asm/unistd.h>
2
3unsigned int parisc32_dir_class[] = {
4#include <asm-generic/audit_dir_write.h>
5~0U
6};
7
8unsigned int parisc32_chattr_class[] = {
9#include <asm-generic/audit_change_attr.h>
10~0U
11};
12
13unsigned int parisc32_write_class[] = {
14#include <asm-generic/audit_write.h>
15~0U
16};
17
18unsigned int parisc32_read_class[] = {
19#include <asm-generic/audit_read.h>
20~0U
21};
22
23unsigned int parisc32_signal_class[] = {
24#include <asm-generic/audit_signal.h>
25~0U
26};
27
28int parisc32_classify_syscall(unsigned syscall)
29{
30 switch (syscall) {
31 case __NR_open:
32 return 2;
33 case __NR_openat:
34 return 3;
35 case __NR_execve:
36 return 5;
37 default:
38 return 1;
39 }
40}
diff --git a/arch/parisc/kernel/head.S b/arch/parisc/kernel/head.S
index 37aabd772fbb..d2d58258aea6 100644
--- a/arch/parisc/kernel/head.S
+++ b/arch/parisc/kernel/head.S
@@ -195,6 +195,8 @@ common_stext:
195 ldw MEM_PDC_HI(%r0),%r6 195 ldw MEM_PDC_HI(%r0),%r6
196 depd %r6, 31, 32, %r3 /* move to upper word */ 196 depd %r6, 31, 32, %r3 /* move to upper word */
197 197
198 mfctl %cr30,%r6 /* PCX-W2 firmware bug */
199
198 ldo PDC_PSW(%r0),%arg0 /* 21 */ 200 ldo PDC_PSW(%r0),%arg0 /* 21 */
199 ldo PDC_PSW_SET_DEFAULTS(%r0),%arg1 /* 2 */ 201 ldo PDC_PSW_SET_DEFAULTS(%r0),%arg1 /* 2 */
200 ldo PDC_PSW_WIDE_BIT(%r0),%arg2 /* 2 */ 202 ldo PDC_PSW_WIDE_BIT(%r0),%arg2 /* 2 */
@@ -203,6 +205,8 @@ common_stext:
203 copy %r0,%arg3 205 copy %r0,%arg3
204 206
205stext_pdc_ret: 207stext_pdc_ret:
208 mtctl %r6,%cr30 /* restore task thread info */
209
206 /* restore rfi target address*/ 210 /* restore rfi target address*/
207 ldd TI_TASK-THREAD_SZ_ALGN(%sp), %r10 211 ldd TI_TASK-THREAD_SZ_ALGN(%sp), %r10
208 tophys_r1 %r10 212 tophys_r1 %r10
diff --git a/arch/parisc/kernel/irq.c b/arch/parisc/kernel/irq.c
index 2e6443b1e922..8ceac4785609 100644
--- a/arch/parisc/kernel/irq.c
+++ b/arch/parisc/kernel/irq.c
@@ -179,10 +179,6 @@ int arch_show_interrupts(struct seq_file *p, int prec)
179 for_each_online_cpu(j) 179 for_each_online_cpu(j)
180 seq_printf(p, "%10u ", irq_stats(j)->irq_resched_count); 180 seq_printf(p, "%10u ", irq_stats(j)->irq_resched_count);
181 seq_puts(p, " Rescheduling interrupts\n"); 181 seq_puts(p, " Rescheduling interrupts\n");
182 seq_printf(p, "%*s: ", prec, "CAL");
183 for_each_online_cpu(j)
184 seq_printf(p, "%10u ", irq_stats(j)->irq_call_count);
185 seq_puts(p, " Function call interrupts\n");
186#endif 182#endif
187 seq_printf(p, "%*s: ", prec, "UAH"); 183 seq_printf(p, "%*s: ", prec, "UAH");
188 for_each_online_cpu(j) 184 for_each_online_cpu(j)
@@ -499,22 +495,9 @@ static void execute_on_irq_stack(void *func, unsigned long param1)
499 *irq_stack_in_use = 1; 495 *irq_stack_in_use = 1;
500} 496}
501 497
502asmlinkage void do_softirq(void) 498void do_softirq_own_stack(void)
503{ 499{
504 __u32 pending; 500 execute_on_irq_stack(__do_softirq, 0);
505 unsigned long flags;
506
507 if (in_interrupt())
508 return;
509
510 local_irq_save(flags);
511
512 pending = local_softirq_pending();
513
514 if (pending)
515 execute_on_irq_stack(__do_softirq, 0);
516
517 local_irq_restore(flags);
518} 501}
519#endif /* CONFIG_IRQSTACKS */ 502#endif /* CONFIG_IRQSTACKS */
520 503
diff --git a/arch/parisc/kernel/module.c b/arch/parisc/kernel/module.c
index 2a625fb063e1..50dfafc3f2c1 100644
--- a/arch/parisc/kernel/module.c
+++ b/arch/parisc/kernel/module.c
@@ -219,7 +219,7 @@ void *module_alloc(unsigned long size)
219 * init_data correctly */ 219 * init_data correctly */
220 return __vmalloc_node_range(size, 1, VMALLOC_START, VMALLOC_END, 220 return __vmalloc_node_range(size, 1, VMALLOC_START, VMALLOC_END,
221 GFP_KERNEL | __GFP_HIGHMEM, 221 GFP_KERNEL | __GFP_HIGHMEM,
222 PAGE_KERNEL_RWX, -1, 222 PAGE_KERNEL_RWX, NUMA_NO_NODE,
223 __builtin_return_address(0)); 223 __builtin_return_address(0));
224} 224}
225 225
diff --git a/arch/parisc/kernel/ptrace.c b/arch/parisc/kernel/ptrace.c
index 534abd4936e1..e842ee233db4 100644
--- a/arch/parisc/kernel/ptrace.c
+++ b/arch/parisc/kernel/ptrace.c
@@ -19,6 +19,7 @@
19#include <linux/security.h> 19#include <linux/security.h>
20#include <linux/compat.h> 20#include <linux/compat.h>
21#include <linux/signal.h> 21#include <linux/signal.h>
22#include <linux/audit.h>
22 23
23#include <asm/uaccess.h> 24#include <asm/uaccess.h>
24#include <asm/pgtable.h> 25#include <asm/pgtable.h>
@@ -267,11 +268,28 @@ long compat_arch_ptrace(struct task_struct *child, compat_long_t request,
267 268
268long do_syscall_trace_enter(struct pt_regs *regs) 269long do_syscall_trace_enter(struct pt_regs *regs)
269{ 270{
271 long ret = 0;
272
270 if (test_thread_flag(TIF_SYSCALL_TRACE) && 273 if (test_thread_flag(TIF_SYSCALL_TRACE) &&
271 tracehook_report_syscall_entry(regs)) 274 tracehook_report_syscall_entry(regs))
272 return -1L; 275 ret = -1L;
273 276
274 return regs->gr[20]; 277#ifdef CONFIG_64BIT
278 if (!is_compat_task())
279 audit_syscall_entry(AUDIT_ARCH_PARISC64,
280 regs->gr[20],
281 regs->gr[26], regs->gr[25],
282 regs->gr[24], regs->gr[23]);
283 else
284#endif
285 audit_syscall_entry(AUDIT_ARCH_PARISC,
286 regs->gr[20] & 0xffffffff,
287 regs->gr[26] & 0xffffffff,
288 regs->gr[25] & 0xffffffff,
289 regs->gr[24] & 0xffffffff,
290 regs->gr[23] & 0xffffffff);
291
292 return ret ? : regs->gr[20];
275} 293}
276 294
277void do_syscall_trace_exit(struct pt_regs *regs) 295void do_syscall_trace_exit(struct pt_regs *regs)
@@ -279,6 +297,8 @@ void do_syscall_trace_exit(struct pt_regs *regs)
279 int stepping = test_thread_flag(TIF_SINGLESTEP) || 297 int stepping = test_thread_flag(TIF_SINGLESTEP) ||
280 test_thread_flag(TIF_BLOCKSTEP); 298 test_thread_flag(TIF_BLOCKSTEP);
281 299
300 audit_syscall_exit(regs);
301
282 if (stepping || test_thread_flag(TIF_SYSCALL_TRACE)) 302 if (stepping || test_thread_flag(TIF_SYSCALL_TRACE))
283 tracehook_report_syscall_exit(regs, stepping); 303 tracehook_report_syscall_exit(regs, stepping);
284} 304}
diff --git a/arch/parisc/kernel/setup.c b/arch/parisc/kernel/setup.c
index 7349a3fedfc7..72a3c658ad7b 100644
--- a/arch/parisc/kernel/setup.c
+++ b/arch/parisc/kernel/setup.c
@@ -318,8 +318,12 @@ static int __init parisc_init(void)
318 pdc_stable_write(0x40, &osid, sizeof(osid)); 318 pdc_stable_write(0x40, &osid, sizeof(osid));
319 319
320 processor_init(); 320 processor_init();
321 printk(KERN_INFO "CPU(s): %d x %s at %d.%06d MHz\n", 321#ifdef CONFIG_SMP
322 num_present_cpus(), 322 pr_info("CPU(s): %d out of %d %s at %d.%06d MHz online\n",
323 num_online_cpus(), num_present_cpus(),
324#else
325 pr_info("CPU(s): 1 x %s at %d.%06d MHz\n",
326#endif
323 boot_cpu_data.cpu_name, 327 boot_cpu_data.cpu_name,
324 boot_cpu_data.cpu_hz / 1000000, 328 boot_cpu_data.cpu_hz / 1000000,
325 boot_cpu_data.cpu_hz % 1000000 ); 329 boot_cpu_data.cpu_hz % 1000000 );
diff --git a/arch/parisc/kernel/signal32.c b/arch/parisc/kernel/signal32.c
index 6c6a271a6140..984abbee71ca 100644
--- a/arch/parisc/kernel/signal32.c
+++ b/arch/parisc/kernel/signal32.c
@@ -319,7 +319,7 @@ copy_siginfo_from_user32 (siginfo_t *to, compat_siginfo_t __user *from)
319} 319}
320 320
321int 321int
322copy_siginfo_to_user32 (compat_siginfo_t __user *to, siginfo_t *from) 322copy_siginfo_to_user32 (compat_siginfo_t __user *to, const siginfo_t *from)
323{ 323{
324 compat_uptr_t addr; 324 compat_uptr_t addr;
325 compat_int_t val; 325 compat_int_t val;
diff --git a/arch/parisc/kernel/signal32.h b/arch/parisc/kernel/signal32.h
index 72ab41a51f32..af51d4ccee42 100644
--- a/arch/parisc/kernel/signal32.h
+++ b/arch/parisc/kernel/signal32.h
@@ -34,7 +34,7 @@ struct compat_ucontext {
34 34
35/* ELF32 signal handling */ 35/* ELF32 signal handling */
36 36
37int copy_siginfo_to_user32 (compat_siginfo_t __user *to, siginfo_t *from); 37int copy_siginfo_to_user32 (compat_siginfo_t __user *to, const siginfo_t *from);
38int copy_siginfo_from_user32 (siginfo_t *to, compat_siginfo_t __user *from); 38int copy_siginfo_from_user32 (siginfo_t *to, compat_siginfo_t __user *from);
39 39
40/* In a deft move of uber-hackery, we decide to carry the top half of all 40/* In a deft move of uber-hackery, we decide to carry the top half of all
diff --git a/arch/parisc/kernel/smp.c b/arch/parisc/kernel/smp.c
index 8a252f2d6c08..ceda229ea6c2 100644
--- a/arch/parisc/kernel/smp.c
+++ b/arch/parisc/kernel/smp.c
@@ -72,7 +72,6 @@ enum ipi_message_type {
72 IPI_NOP=0, 72 IPI_NOP=0,
73 IPI_RESCHEDULE=1, 73 IPI_RESCHEDULE=1,
74 IPI_CALL_FUNC, 74 IPI_CALL_FUNC,
75 IPI_CALL_FUNC_SINGLE,
76 IPI_CPU_START, 75 IPI_CPU_START,
77 IPI_CPU_STOP, 76 IPI_CPU_STOP,
78 IPI_CPU_TEST 77 IPI_CPU_TEST
@@ -126,11 +125,6 @@ ipi_interrupt(int irq, void *dev_id)
126 unsigned long ops; 125 unsigned long ops;
127 unsigned long flags; 126 unsigned long flags;
128 127
129 /* Count this now; we may make a call that never returns. */
130 inc_irq_stat(irq_call_count);
131
132 mb(); /* Order interrupt and bit testing. */
133
134 for (;;) { 128 for (;;) {
135 spinlock_t *lock = &per_cpu(ipi_lock, this_cpu); 129 spinlock_t *lock = &per_cpu(ipi_lock, this_cpu);
136 spin_lock_irqsave(lock, flags); 130 spin_lock_irqsave(lock, flags);
@@ -164,11 +158,6 @@ ipi_interrupt(int irq, void *dev_id)
164 generic_smp_call_function_interrupt(); 158 generic_smp_call_function_interrupt();
165 break; 159 break;
166 160
167 case IPI_CALL_FUNC_SINGLE:
168 smp_debug(100, KERN_DEBUG "CPU%d IPI_CALL_FUNC_SINGLE\n", this_cpu);
169 generic_smp_call_function_single_interrupt();
170 break;
171
172 case IPI_CPU_START: 161 case IPI_CPU_START:
173 smp_debug(100, KERN_DEBUG "CPU%d IPI_CPU_START\n", this_cpu); 162 smp_debug(100, KERN_DEBUG "CPU%d IPI_CPU_START\n", this_cpu);
174 break; 163 break;
@@ -260,7 +249,7 @@ void arch_send_call_function_ipi_mask(const struct cpumask *mask)
260 249
261void arch_send_call_function_single_ipi(int cpu) 250void arch_send_call_function_single_ipi(int cpu)
262{ 251{
263 send_IPI_single(cpu, IPI_CALL_FUNC_SINGLE); 252 send_IPI_single(cpu, IPI_CALL_FUNC);
264} 253}
265 254
266/* 255/*
diff --git a/arch/parisc/kernel/syscall.S b/arch/parisc/kernel/syscall.S
index e767ab733e32..a63bb179f79a 100644
--- a/arch/parisc/kernel/syscall.S
+++ b/arch/parisc/kernel/syscall.S
@@ -649,10 +649,8 @@ cas_action:
649 /* Two exception table entries, one for the load, 649 /* Two exception table entries, one for the load,
650 the other for the store. Either return -EFAULT. 650 the other for the store. Either return -EFAULT.
651 Each of the entries must be relocated. */ 651 Each of the entries must be relocated. */
652 .section __ex_table,"aw" 652 ASM_EXCEPTIONTABLE_ENTRY(1b-linux_gateway_page, 3b-linux_gateway_page)
653 ASM_ULONG_INSN (1b - linux_gateway_page), (3b - linux_gateway_page) 653 ASM_EXCEPTIONTABLE_ENTRY(2b-linux_gateway_page, 3b-linux_gateway_page)
654 ASM_ULONG_INSN (2b - linux_gateway_page), (3b - linux_gateway_page)
655 .previous
656 654
657 655
658 /* Make sure nothing else is placed on this page */ 656 /* Make sure nothing else is placed on this page */
diff --git a/arch/parisc/kernel/traps.c b/arch/parisc/kernel/traps.c
index 04e47c6a4562..1cd1d0c83b6d 100644
--- a/arch/parisc/kernel/traps.c
+++ b/arch/parisc/kernel/traps.c
@@ -291,11 +291,6 @@ void die_if_kernel(char *str, struct pt_regs *regs, long err)
291 do_exit(SIGSEGV); 291 do_exit(SIGSEGV);
292} 292}
293 293
294int syscall_ipi(int (*syscall) (struct pt_regs *), struct pt_regs *regs)
295{
296 return syscall(regs);
297}
298
299/* gdb uses break 4,8 */ 294/* gdb uses break 4,8 */
300#define GDB_BREAK_INSN 0x10004 295#define GDB_BREAK_INSN 0x10004
301static void handle_gdb_break(struct pt_regs *regs, int wot) 296static void handle_gdb_break(struct pt_regs *regs, int wot)
@@ -805,14 +800,14 @@ void notrace handle_interruption(int code, struct pt_regs *regs)
805 else { 800 else {
806 801
807 /* 802 /*
808 * The kernel should never fault on its own address space. 803 * The kernel should never fault on its own address space,
804 * unless pagefault_disable() was called before.
809 */ 805 */
810 806
811 if (fault_space == 0) 807 if (fault_space == 0 && !in_atomic())
812 { 808 {
813 pdc_chassis_send_status(PDC_CHASSIS_DIRECT_PANIC); 809 pdc_chassis_send_status(PDC_CHASSIS_DIRECT_PANIC);
814 parisc_terminate("Kernel Fault", regs, code, fault_address); 810 parisc_terminate("Kernel Fault", regs, code, fault_address);
815
816 } 811 }
817 } 812 }
818 813
diff --git a/arch/parisc/lib/Makefile b/arch/parisc/lib/Makefile
index 5651536ac733..8fa92b8d839a 100644
--- a/arch/parisc/lib/Makefile
+++ b/arch/parisc/lib/Makefile
@@ -3,6 +3,6 @@
3# 3#
4 4
5lib-y := lusercopy.o bitops.o checksum.o io.o memset.o fixup.o memcpy.o \ 5lib-y := lusercopy.o bitops.o checksum.o io.o memset.o fixup.o memcpy.o \
6 ucmpdi2.o 6 ucmpdi2.o delay.o
7 7
8obj-y := iomap.o 8obj-y := iomap.o
diff --git a/arch/parisc/lib/delay.c b/arch/parisc/lib/delay.c
new file mode 100644
index 000000000000..ec9255f27a81
--- /dev/null
+++ b/arch/parisc/lib/delay.c
@@ -0,0 +1,73 @@
1/*
2 * Precise Delay Loops for parisc
3 *
4 * based on code by:
5 * Copyright (C) 1993 Linus Torvalds
6 * Copyright (C) 1997 Martin Mares <mj@atrey.karlin.mff.cuni.cz>
7 * Copyright (C) 2008 Jiri Hladky <hladky _dot_ jiri _at_ gmail _dot_ com>
8 *
9 * parisc implementation:
10 * Copyright (C) 2013 Helge Deller <deller@gmx.de>
11 */
12
13
14#include <linux/module.h>
15#include <linux/preempt.h>
16#include <linux/init.h>
17
18#include <asm/processor.h>
19#include <asm/delay.h>
20
21#include <asm/special_insns.h> /* for mfctl() */
22#include <asm/processor.h> /* for boot_cpu_data */
23
24/* CR16 based delay: */
25static void __cr16_delay(unsigned long __loops)
26{
27 /*
28 * Note: Due to unsigned math, cr16 rollovers shouldn't be
29 * a problem here. However, on 32 bit, we need to make sure
30 * we don't pass in too big a value. The current default
31 * value of MAX_UDELAY_MS should help prevent this.
32 */
33 u32 bclock, now, loops = __loops;
34 int cpu;
35
36 preempt_disable();
37 cpu = smp_processor_id();
38 bclock = mfctl(16);
39 for (;;) {
40 now = mfctl(16);
41 if ((now - bclock) >= loops)
42 break;
43
44 /* Allow RT tasks to run */
45 preempt_enable();
46 asm volatile(" nop\n");
47 barrier();
48 preempt_disable();
49
50 /*
51 * It is possible that we moved to another CPU, and
52 * since CR16's are per-cpu we need to calculate
53 * that. The delay must guarantee that we wait "at
54 * least" the amount of time. Being moved to another
55 * CPU could make the wait longer but we just need to
56 * make sure we waited long enough. Rebalance the
57 * counter for this CPU.
58 */
59 if (unlikely(cpu != smp_processor_id())) {
60 loops -= (now - bclock);
61 cpu = smp_processor_id();
62 bclock = mfctl(16);
63 }
64 }
65 preempt_enable();
66}
67
68
69void __udelay(unsigned long usecs)
70{
71 __cr16_delay(usecs * ((unsigned long)boot_cpu_data.cpu_hz / 1000000UL));
72}
73EXPORT_SYMBOL(__udelay);
diff --git a/arch/parisc/lib/lusercopy.S b/arch/parisc/lib/lusercopy.S
index 6f2d9355efe2..a512f07d4feb 100644
--- a/arch/parisc/lib/lusercopy.S
+++ b/arch/parisc/lib/lusercopy.S
@@ -88,9 +88,7 @@ ENDPROC(lclear_user)
88 ldo 1(%r25),%r25 88 ldo 1(%r25),%r25
89 .previous 89 .previous
90 90
91 .section __ex_table,"aw" 91 ASM_EXCEPTIONTABLE_ENTRY(1b,2b)
92 ASM_ULONG_INSN 1b,2b
93 .previous
94 92
95 .procend 93 .procend
96 94
@@ -129,10 +127,8 @@ ENDPROC(lstrnlen_user)
129 copy %r24,%r26 /* reset r26 so 0 is returned on fault */ 127 copy %r24,%r26 /* reset r26 so 0 is returned on fault */
130 .previous 128 .previous
131 129
132 .section __ex_table,"aw" 130 ASM_EXCEPTIONTABLE_ENTRY(1b,3b)
133 ASM_ULONG_INSN 1b,3b 131 ASM_EXCEPTIONTABLE_ENTRY(2b,3b)
134 ASM_ULONG_INSN 2b,3b
135 .previous
136 132
137 .procend 133 .procend
138 134
diff --git a/arch/parisc/lib/memcpy.c b/arch/parisc/lib/memcpy.c
index ac4370b1ca40..b5507ec06b84 100644
--- a/arch/parisc/lib/memcpy.c
+++ b/arch/parisc/lib/memcpy.c
@@ -56,7 +56,7 @@
56#ifdef __KERNEL__ 56#ifdef __KERNEL__
57#include <linux/module.h> 57#include <linux/module.h>
58#include <linux/compiler.h> 58#include <linux/compiler.h>
59#include <asm/uaccess.h> 59#include <linux/uaccess.h>
60#define s_space "%%sr1" 60#define s_space "%%sr1"
61#define d_space "%%sr2" 61#define d_space "%%sr2"
62#else 62#else
@@ -524,4 +524,17 @@ EXPORT_SYMBOL(copy_to_user);
524EXPORT_SYMBOL(copy_from_user); 524EXPORT_SYMBOL(copy_from_user);
525EXPORT_SYMBOL(copy_in_user); 525EXPORT_SYMBOL(copy_in_user);
526EXPORT_SYMBOL(memcpy); 526EXPORT_SYMBOL(memcpy);
527
528long probe_kernel_read(void *dst, const void *src, size_t size)
529{
530 unsigned long addr = (unsigned long)src;
531
532 if (size < 0 || addr < PAGE_SIZE)
533 return -EFAULT;
534
535 /* check for I/O space F_EXTEND(0xfff00000) access as well? */
536
537 return __probe_kernel_read(dst, src, size);
538}
539
527#endif 540#endif
diff --git a/arch/parisc/math-emu/float.h b/arch/parisc/math-emu/float.h
index ce76f6dfa25b..7a51f97e72e6 100644
--- a/arch/parisc/math-emu/float.h
+++ b/arch/parisc/math-emu/float.h
@@ -484,7 +484,6 @@ typedef int VOID;
484 * | |G|L|E|U|X| 484 * | |G|L|E|U|X|
485 * +-------+-------+-------+-------+-------+-------+-------+-------+ 485 * +-------+-------+-------+-------+-------+-------+-------+-------+
486 */ 486 */
487#define Allexception(object) (object)
488#define Greaterthanbit(object) Bitfield_extract( 27, 1,object) 487#define Greaterthanbit(object) Bitfield_extract( 27, 1,object)
489#define Lessthanbit(object) Bitfield_extract( 28, 1,object) 488#define Lessthanbit(object) Bitfield_extract( 28, 1,object)
490#define Equalbit(object) Bitfield_extract( 29, 1,object) 489#define Equalbit(object) Bitfield_extract( 29, 1,object)
diff --git a/arch/parisc/mm/fault.c b/arch/parisc/mm/fault.c
index d10d27a720c0..7584a5df0fa4 100644
--- a/arch/parisc/mm/fault.c
+++ b/arch/parisc/mm/fault.c
@@ -142,6 +142,12 @@ int fixup_exception(struct pt_regs *regs)
142{ 142{
143 const struct exception_table_entry *fix; 143 const struct exception_table_entry *fix;
144 144
145 /* If we only stored 32bit addresses in the exception table we can drop
146 * out if we faulted on a 64bit address. */
147 if ((sizeof(regs->iaoq[0]) > sizeof(fix->insn))
148 && (regs->iaoq[0] >> 32))
149 return 0;
150
145 fix = search_exception_tables(regs->iaoq[0]); 151 fix = search_exception_tables(regs->iaoq[0]);
146 if (fix) { 152 if (fix) {
147 struct exception_data *d; 153 struct exception_data *d;
@@ -171,17 +177,25 @@ void do_page_fault(struct pt_regs *regs, unsigned long code,
171 unsigned long address) 177 unsigned long address)
172{ 178{
173 struct vm_area_struct *vma, *prev_vma; 179 struct vm_area_struct *vma, *prev_vma;
174 struct task_struct *tsk = current; 180 struct task_struct *tsk;
175 struct mm_struct *mm = tsk->mm; 181 struct mm_struct *mm;
176 unsigned long acc_type; 182 unsigned long acc_type;
177 int fault; 183 int fault;
178 unsigned int flags = FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE; 184 unsigned int flags;
185
186 if (in_atomic())
187 goto no_context;
179 188
180 if (in_atomic() || !mm) 189 tsk = current;
190 mm = tsk->mm;
191 if (!mm)
181 goto no_context; 192 goto no_context;
182 193
194 flags = FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE;
183 if (user_mode(regs)) 195 if (user_mode(regs))
184 flags |= FAULT_FLAG_USER; 196 flags |= FAULT_FLAG_USER;
197
198 acc_type = parisc_acctyp(code, regs->iir);
185 if (acc_type & VM_WRITE) 199 if (acc_type & VM_WRITE)
186 flags |= FAULT_FLAG_WRITE; 200 flags |= FAULT_FLAG_WRITE;
187retry: 201retry:
@@ -196,8 +210,6 @@ retry:
196 210
197good_area: 211good_area:
198 212
199 acc_type = parisc_acctyp(code,regs->iir);
200
201 if ((vma->vm_flags & acc_type) != acc_type) 213 if ((vma->vm_flags & acc_type) != acc_type)
202 goto bad_area; 214 goto bad_area;
203 215
@@ -268,12 +280,22 @@ bad_area:
268 } 280 }
269 show_regs(regs); 281 show_regs(regs);
270#endif 282#endif
271 /* FIXME: actually we need to get the signo and code correct */ 283 switch (code) {
272 si.si_signo = SIGSEGV; 284 case 15: /* Data TLB miss fault/Data page fault */
285 case 17: /* NA data TLB miss / page fault */
286 case 18: /* Unaligned access - PCXS only */
287 si.si_signo = SIGBUS;
288 si.si_code = BUS_ADRERR;
289 break;
290 case 16: /* Non-access instruction TLB miss fault */
291 case 26: /* PCXL: Data memory access rights trap */
292 default:
293 si.si_signo = SIGSEGV;
294 si.si_code = SEGV_MAPERR;
295 }
273 si.si_errno = 0; 296 si.si_errno = 0;
274 si.si_code = SEGV_MAPERR;
275 si.si_addr = (void __user *) address; 297 si.si_addr = (void __user *) address;
276 force_sig_info(SIGSEGV, &si, current); 298 force_sig_info(si.si_signo, &si, current);
277 return; 299 return;
278 } 300 }
279 301