diff options
author | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2008-02-06 13:46:58 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2008-02-06 13:46:58 -0500 |
commit | e33f6635da037ed4d2634ee6bdf5c4d601946c18 (patch) | |
tree | 443367576b9a2e30eb32c9d1c422206c87e5a1ad /arch | |
parent | 55850f47333c6e7d932e6426eaed863b27c9cd7f (diff) | |
parent | 38192d52f159bc06b7f523800c10b583cdd661d5 (diff) |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc-2.6:
[SPARC64]: Temporarily remove IOMMU merging code.
[SPARC64]: Update defconfig.
[SPARC]: Add new timerfd syscall entries.
Diffstat (limited to 'arch')
-rw-r--r-- | arch/sparc/kernel/systbls.S | 6 | ||||
-rw-r--r-- | arch/sparc64/defconfig | 83 | ||||
-rw-r--r-- | arch/sparc64/kernel/Makefile | 2 | ||||
-rw-r--r-- | arch/sparc64/kernel/iommu.c | 142 | ||||
-rw-r--r-- | arch/sparc64/kernel/iommu_common.c | 248 | ||||
-rw-r--r-- | arch/sparc64/kernel/iommu_common.h | 26 | ||||
-rw-r--r-- | arch/sparc64/kernel/pci_sun4v.c | 170 | ||||
-rw-r--r-- | arch/sparc64/kernel/systbls.S | 9 |
8 files changed, 155 insertions, 531 deletions
diff --git a/arch/sparc/kernel/systbls.S b/arch/sparc/kernel/systbls.S index ee010f4532a0..9064485dc40b 100644 --- a/arch/sparc/kernel/systbls.S +++ b/arch/sparc/kernel/systbls.S | |||
@@ -79,7 +79,8 @@ sys_call_table: | |||
79 | /*295*/ .long sys_fchmodat, sys_faccessat, sys_pselect6, sys_ppoll, sys_unshare | 79 | /*295*/ .long sys_fchmodat, sys_faccessat, sys_pselect6, sys_ppoll, sys_unshare |
80 | /*300*/ .long sys_set_robust_list, sys_get_robust_list, sys_migrate_pages, sys_mbind, sys_get_mempolicy | 80 | /*300*/ .long sys_set_robust_list, sys_get_robust_list, sys_migrate_pages, sys_mbind, sys_get_mempolicy |
81 | /*305*/ .long sys_set_mempolicy, sys_kexec_load, sys_move_pages, sys_getcpu, sys_epoll_pwait | 81 | /*305*/ .long sys_set_mempolicy, sys_kexec_load, sys_move_pages, sys_getcpu, sys_epoll_pwait |
82 | /*310*/ .long sys_utimensat, sys_signalfd, sys_ni_syscall, sys_eventfd, sys_fallocate | 82 | /*310*/ .long sys_utimensat, sys_signalfd, sys_timerfd_create, sys_eventfd, sys_fallocate |
83 | /*315*/ .long sys_timerfd_settime, sys_timerfd_gettime | ||
83 | 84 | ||
84 | #ifdef CONFIG_SUNOS_EMUL | 85 | #ifdef CONFIG_SUNOS_EMUL |
85 | /* Now the SunOS syscall table. */ | 86 | /* Now the SunOS syscall table. */ |
@@ -197,6 +198,7 @@ sunos_sys_table: | |||
197 | .long sunos_nosys, sunos_nosys, sunos_nosys | 198 | .long sunos_nosys, sunos_nosys, sunos_nosys |
198 | .long sunos_nosys | 199 | .long sunos_nosys |
199 | /*310*/ .long sunos_nosys, sunos_nosys, sunos_nosys | 200 | /*310*/ .long sunos_nosys, sunos_nosys, sunos_nosys |
200 | .long sunos_nosys, sunos_nosys | 201 | .long sunos_nosys, sunos_nosys, sunos_nosys |
202 | .long sunos_nosys | ||
201 | 203 | ||
202 | #endif | 204 | #endif |
diff --git a/arch/sparc64/defconfig b/arch/sparc64/defconfig index f62d9f6c5e2a..833d74b2b192 100644 --- a/arch/sparc64/defconfig +++ b/arch/sparc64/defconfig | |||
@@ -1,7 +1,7 @@ | |||
1 | # | 1 | # |
2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
3 | # Linux kernel version: 2.6.24-rc4 | 3 | # Linux kernel version: 2.6.24 |
4 | # Tue Dec 4 00:37:59 2007 | 4 | # Tue Feb 5 17:28:19 2008 |
5 | # | 5 | # |
6 | CONFIG_SPARC=y | 6 | CONFIG_SPARC=y |
7 | CONFIG_SPARC64=y | 7 | CONFIG_SPARC64=y |
@@ -17,6 +17,7 @@ CONFIG_ARCH_MAY_HAVE_PC_FDC=y | |||
17 | # CONFIG_ARCH_HAS_ILOG2_U32 is not set | 17 | # CONFIG_ARCH_HAS_ILOG2_U32 is not set |
18 | # CONFIG_ARCH_HAS_ILOG2_U64 is not set | 18 | # CONFIG_ARCH_HAS_ILOG2_U64 is not set |
19 | CONFIG_AUDIT_ARCH=y | 19 | CONFIG_AUDIT_ARCH=y |
20 | CONFIG_HAVE_SETUP_PER_CPU_AREA=y | ||
20 | CONFIG_ARCH_NO_VIRT_TO_BUS=y | 21 | CONFIG_ARCH_NO_VIRT_TO_BUS=y |
21 | CONFIG_OF=y | 22 | CONFIG_OF=y |
22 | CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y | 23 | CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y |
@@ -30,13 +31,15 @@ CONFIG_HZ_100=y | |||
30 | # CONFIG_HZ_300 is not set | 31 | # CONFIG_HZ_300 is not set |
31 | # CONFIG_HZ_1000 is not set | 32 | # CONFIG_HZ_1000 is not set |
32 | CONFIG_HZ=100 | 33 | CONFIG_HZ=100 |
34 | # CONFIG_SCHED_HRTICK is not set | ||
35 | CONFIG_HOTPLUG_CPU=y | ||
33 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" | 36 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" |
34 | 37 | ||
35 | # | 38 | # |
36 | # General setup | 39 | # General setup |
37 | # | 40 | # |
38 | CONFIG_EXPERIMENTAL=y | 41 | CONFIG_EXPERIMENTAL=y |
39 | CONFIG_BROKEN_ON_SMP=y | 42 | CONFIG_LOCK_KERNEL=y |
40 | CONFIG_INIT_ENV_ARG_LIMIT=32 | 43 | CONFIG_INIT_ENV_ARG_LIMIT=32 |
41 | CONFIG_LOCALVERSION="" | 44 | CONFIG_LOCALVERSION="" |
42 | # CONFIG_LOCALVERSION_AUTO is not set | 45 | # CONFIG_LOCALVERSION_AUTO is not set |
@@ -76,6 +79,7 @@ CONFIG_FUTEX=y | |||
76 | CONFIG_ANON_INODES=y | 79 | CONFIG_ANON_INODES=y |
77 | CONFIG_EPOLL=y | 80 | CONFIG_EPOLL=y |
78 | CONFIG_SIGNALFD=y | 81 | CONFIG_SIGNALFD=y |
82 | CONFIG_TIMERFD=y | ||
79 | CONFIG_EVENTFD=y | 83 | CONFIG_EVENTFD=y |
80 | CONFIG_SHMEM=y | 84 | CONFIG_SHMEM=y |
81 | CONFIG_VM_EVENT_COUNTERS=y | 85 | CONFIG_VM_EVENT_COUNTERS=y |
@@ -83,6 +87,14 @@ CONFIG_SLUB_DEBUG=y | |||
83 | # CONFIG_SLAB is not set | 87 | # CONFIG_SLAB is not set |
84 | CONFIG_SLUB=y | 88 | CONFIG_SLUB=y |
85 | # CONFIG_SLOB is not set | 89 | # CONFIG_SLOB is not set |
90 | CONFIG_PROFILING=y | ||
91 | # CONFIG_MARKERS is not set | ||
92 | CONFIG_OPROFILE=m | ||
93 | CONFIG_HAVE_OPROFILE=y | ||
94 | CONFIG_KPROBES=y | ||
95 | CONFIG_HAVE_KPROBES=y | ||
96 | CONFIG_PROC_PAGE_MONITOR=y | ||
97 | CONFIG_SLABINFO=y | ||
86 | CONFIG_RT_MUTEXES=y | 98 | CONFIG_RT_MUTEXES=y |
87 | # CONFIG_TINY_SHMEM is not set | 99 | # CONFIG_TINY_SHMEM is not set |
88 | CONFIG_BASE_SMALL=0 | 100 | CONFIG_BASE_SMALL=0 |
@@ -92,6 +104,7 @@ CONFIG_MODULE_FORCE_UNLOAD=y | |||
92 | CONFIG_MODVERSIONS=y | 104 | CONFIG_MODVERSIONS=y |
93 | CONFIG_MODULE_SRCVERSION_ALL=y | 105 | CONFIG_MODULE_SRCVERSION_ALL=y |
94 | CONFIG_KMOD=y | 106 | CONFIG_KMOD=y |
107 | CONFIG_STOP_MACHINE=y | ||
95 | CONFIG_BLOCK=y | 108 | CONFIG_BLOCK=y |
96 | CONFIG_BLK_DEV_IO_TRACE=y | 109 | CONFIG_BLK_DEV_IO_TRACE=y |
97 | CONFIG_BLK_DEV_BSG=y | 110 | CONFIG_BLK_DEV_BSG=y |
@@ -109,6 +122,8 @@ CONFIG_DEFAULT_AS=y | |||
109 | # CONFIG_DEFAULT_CFQ is not set | 122 | # CONFIG_DEFAULT_CFQ is not set |
110 | # CONFIG_DEFAULT_NOOP is not set | 123 | # CONFIG_DEFAULT_NOOP is not set |
111 | CONFIG_DEFAULT_IOSCHED="anticipatory" | 124 | CONFIG_DEFAULT_IOSCHED="anticipatory" |
125 | CONFIG_CLASSIC_RCU=y | ||
126 | # CONFIG_PREEMPT_RCU is not set | ||
112 | CONFIG_SYSVIPC_COMPAT=y | 127 | CONFIG_SYSVIPC_COMPAT=y |
113 | CONFIG_GENERIC_HARDIRQS=y | 128 | CONFIG_GENERIC_HARDIRQS=y |
114 | 129 | ||
@@ -119,7 +134,8 @@ CONFIG_TICK_ONESHOT=y | |||
119 | CONFIG_NO_HZ=y | 134 | CONFIG_NO_HZ=y |
120 | CONFIG_HIGH_RES_TIMERS=y | 135 | CONFIG_HIGH_RES_TIMERS=y |
121 | CONFIG_GENERIC_CLOCKEVENTS_BUILD=y | 136 | CONFIG_GENERIC_CLOCKEVENTS_BUILD=y |
122 | # CONFIG_SMP is not set | 137 | CONFIG_SMP=y |
138 | CONFIG_NR_CPUS=64 | ||
123 | # CONFIG_CPU_FREQ is not set | 139 | # CONFIG_CPU_FREQ is not set |
124 | CONFIG_RWSEM_XCHGADD_ALGORITHM=y | 140 | CONFIG_RWSEM_XCHGADD_ALGORITHM=y |
125 | CONFIG_GENERIC_FIND_NEXT_BIT=y | 141 | CONFIG_GENERIC_FIND_NEXT_BIT=y |
@@ -169,9 +185,12 @@ CONFIG_BINFMT_ELF32=y | |||
169 | CONFIG_BINFMT_ELF=y | 185 | CONFIG_BINFMT_ELF=y |
170 | CONFIG_BINFMT_MISC=m | 186 | CONFIG_BINFMT_MISC=m |
171 | CONFIG_SOLARIS_EMUL=y | 187 | CONFIG_SOLARIS_EMUL=y |
188 | CONFIG_SCHED_SMT=y | ||
189 | CONFIG_SCHED_MC=y | ||
172 | # CONFIG_PREEMPT_NONE is not set | 190 | # CONFIG_PREEMPT_NONE is not set |
173 | CONFIG_PREEMPT_VOLUNTARY=y | 191 | CONFIG_PREEMPT_VOLUNTARY=y |
174 | # CONFIG_PREEMPT is not set | 192 | # CONFIG_PREEMPT is not set |
193 | # CONFIG_RCU_TRACE is not set | ||
175 | # CONFIG_CMDLINE_BOOL is not set | 194 | # CONFIG_CMDLINE_BOOL is not set |
176 | 195 | ||
177 | # | 196 | # |
@@ -189,6 +208,7 @@ CONFIG_XFRM=y | |||
189 | CONFIG_XFRM_USER=m | 208 | CONFIG_XFRM_USER=m |
190 | # CONFIG_XFRM_SUB_POLICY is not set | 209 | # CONFIG_XFRM_SUB_POLICY is not set |
191 | CONFIG_XFRM_MIGRATE=y | 210 | CONFIG_XFRM_MIGRATE=y |
211 | # CONFIG_XFRM_STATISTICS is not set | ||
192 | CONFIG_NET_KEY=m | 212 | CONFIG_NET_KEY=m |
193 | CONFIG_NET_KEY_MIGRATE=y | 213 | CONFIG_NET_KEY_MIGRATE=y |
194 | CONFIG_INET=y | 214 | CONFIG_INET=y |
@@ -249,9 +269,9 @@ CONFIG_IP_DCCP_ACKVEC=y | |||
249 | CONFIG_IP_DCCP_CCID2=m | 269 | CONFIG_IP_DCCP_CCID2=m |
250 | # CONFIG_IP_DCCP_CCID2_DEBUG is not set | 270 | # CONFIG_IP_DCCP_CCID2_DEBUG is not set |
251 | CONFIG_IP_DCCP_CCID3=m | 271 | CONFIG_IP_DCCP_CCID3=m |
252 | CONFIG_IP_DCCP_TFRC_LIB=m | ||
253 | # CONFIG_IP_DCCP_CCID3_DEBUG is not set | 272 | # CONFIG_IP_DCCP_CCID3_DEBUG is not set |
254 | CONFIG_IP_DCCP_CCID3_RTO=100 | 273 | CONFIG_IP_DCCP_CCID3_RTO=100 |
274 | CONFIG_IP_DCCP_TFRC_LIB=m | ||
255 | 275 | ||
256 | # | 276 | # |
257 | # DCCP Kernel Hacking | 277 | # DCCP Kernel Hacking |
@@ -279,6 +299,7 @@ CONFIG_VLAN_8021Q=m | |||
279 | CONFIG_NET_PKTGEN=m | 299 | CONFIG_NET_PKTGEN=m |
280 | CONFIG_NET_TCPPROBE=m | 300 | CONFIG_NET_TCPPROBE=m |
281 | # CONFIG_HAMRADIO is not set | 301 | # CONFIG_HAMRADIO is not set |
302 | # CONFIG_CAN is not set | ||
282 | # CONFIG_IRDA is not set | 303 | # CONFIG_IRDA is not set |
283 | # CONFIG_BT is not set | 304 | # CONFIG_BT is not set |
284 | # CONFIG_AF_RXRPC is not set | 305 | # CONFIG_AF_RXRPC is not set |
@@ -343,6 +364,7 @@ CONFIG_BLK_DEV_IDE=y | |||
343 | CONFIG_BLK_DEV_IDEDISK=y | 364 | CONFIG_BLK_DEV_IDEDISK=y |
344 | # CONFIG_IDEDISK_MULTI_MODE is not set | 365 | # CONFIG_IDEDISK_MULTI_MODE is not set |
345 | CONFIG_BLK_DEV_IDECD=y | 366 | CONFIG_BLK_DEV_IDECD=y |
367 | CONFIG_BLK_DEV_IDECD_VERBOSE_ERRORS=y | ||
346 | # CONFIG_BLK_DEV_IDETAPE is not set | 368 | # CONFIG_BLK_DEV_IDETAPE is not set |
347 | # CONFIG_BLK_DEV_IDEFLOPPY is not set | 369 | # CONFIG_BLK_DEV_IDEFLOPPY is not set |
348 | # CONFIG_BLK_DEV_IDESCSI is not set | 370 | # CONFIG_BLK_DEV_IDESCSI is not set |
@@ -359,7 +381,6 @@ CONFIG_IDE_GENERIC=y | |||
359 | # PCI IDE chipsets support | 381 | # PCI IDE chipsets support |
360 | # | 382 | # |
361 | CONFIG_BLK_DEV_IDEPCI=y | 383 | CONFIG_BLK_DEV_IDEPCI=y |
362 | # CONFIG_IDEPCI_SHARE_IRQ is not set | ||
363 | CONFIG_IDEPCI_PCIBUS_ORDER=y | 384 | CONFIG_IDEPCI_PCIBUS_ORDER=y |
364 | # CONFIG_BLK_DEV_GENERIC is not set | 385 | # CONFIG_BLK_DEV_GENERIC is not set |
365 | # CONFIG_BLK_DEV_OPTI621 is not set | 386 | # CONFIG_BLK_DEV_OPTI621 is not set |
@@ -389,7 +410,6 @@ CONFIG_BLK_DEV_ALI15X3=y | |||
389 | # CONFIG_BLK_DEV_TRM290 is not set | 410 | # CONFIG_BLK_DEV_TRM290 is not set |
390 | # CONFIG_BLK_DEV_VIA82CXXX is not set | 411 | # CONFIG_BLK_DEV_VIA82CXXX is not set |
391 | # CONFIG_BLK_DEV_TC86C001 is not set | 412 | # CONFIG_BLK_DEV_TC86C001 is not set |
392 | # CONFIG_IDE_ARM is not set | ||
393 | CONFIG_BLK_DEV_IDEDMA=y | 413 | CONFIG_BLK_DEV_IDEDMA=y |
394 | CONFIG_IDE_ARCH_OBSOLETE_INIT=y | 414 | CONFIG_IDE_ARCH_OBSOLETE_INIT=y |
395 | # CONFIG_BLK_DEV_HD is not set | 415 | # CONFIG_BLK_DEV_HD is not set |
@@ -501,7 +521,6 @@ CONFIG_NETDEVICES=y | |||
501 | # CONFIG_EQUALIZER is not set | 521 | # CONFIG_EQUALIZER is not set |
502 | # CONFIG_TUN is not set | 522 | # CONFIG_TUN is not set |
503 | # CONFIG_VETH is not set | 523 | # CONFIG_VETH is not set |
504 | # CONFIG_IP1000 is not set | ||
505 | # CONFIG_ARCNET is not set | 524 | # CONFIG_ARCNET is not set |
506 | # CONFIG_PHYLIB is not set | 525 | # CONFIG_PHYLIB is not set |
507 | CONFIG_NET_ETHERNET=y | 526 | CONFIG_NET_ETHERNET=y |
@@ -533,6 +552,7 @@ CONFIG_NET_PCI=y | |||
533 | # CONFIG_NE2K_PCI is not set | 552 | # CONFIG_NE2K_PCI is not set |
534 | # CONFIG_8139CP is not set | 553 | # CONFIG_8139CP is not set |
535 | # CONFIG_8139TOO is not set | 554 | # CONFIG_8139TOO is not set |
555 | # CONFIG_R6040 is not set | ||
536 | # CONFIG_SIS900 is not set | 556 | # CONFIG_SIS900 is not set |
537 | # CONFIG_EPIC100 is not set | 557 | # CONFIG_EPIC100 is not set |
538 | # CONFIG_SUNDANCE is not set | 558 | # CONFIG_SUNDANCE is not set |
@@ -545,6 +565,9 @@ CONFIG_E1000=m | |||
545 | CONFIG_E1000_NAPI=y | 565 | CONFIG_E1000_NAPI=y |
546 | # CONFIG_E1000_DISABLE_PACKET_SPLIT is not set | 566 | # CONFIG_E1000_DISABLE_PACKET_SPLIT is not set |
547 | # CONFIG_E1000E is not set | 567 | # CONFIG_E1000E is not set |
568 | # CONFIG_E1000E_ENABLED is not set | ||
569 | # CONFIG_IP1000 is not set | ||
570 | # CONFIG_IGB is not set | ||
548 | # CONFIG_MYRI_SBUS is not set | 571 | # CONFIG_MYRI_SBUS is not set |
549 | # CONFIG_NS83820 is not set | 572 | # CONFIG_NS83820 is not set |
550 | # CONFIG_HAMACHI is not set | 573 | # CONFIG_HAMACHI is not set |
@@ -570,6 +593,7 @@ CONFIG_NETDEV_10000=y | |||
570 | CONFIG_NIU=m | 593 | CONFIG_NIU=m |
571 | # CONFIG_MLX4_CORE is not set | 594 | # CONFIG_MLX4_CORE is not set |
572 | # CONFIG_TEHUTI is not set | 595 | # CONFIG_TEHUTI is not set |
596 | # CONFIG_BNX2X is not set | ||
573 | # CONFIG_TR is not set | 597 | # CONFIG_TR is not set |
574 | 598 | ||
575 | # | 599 | # |
@@ -602,7 +626,6 @@ CONFIG_PPPOE=m | |||
602 | # CONFIG_SLIP is not set | 626 | # CONFIG_SLIP is not set |
603 | CONFIG_SLHC=m | 627 | CONFIG_SLHC=m |
604 | # CONFIG_NET_FC is not set | 628 | # CONFIG_NET_FC is not set |
605 | # CONFIG_SHAPER is not set | ||
606 | # CONFIG_NETCONSOLE is not set | 629 | # CONFIG_NETCONSOLE is not set |
607 | # CONFIG_NETPOLL is not set | 630 | # CONFIG_NETPOLL is not set |
608 | # CONFIG_NET_POLL_CONTROLLER is not set | 631 | # CONFIG_NET_POLL_CONTROLLER is not set |
@@ -679,6 +702,7 @@ CONFIG_VT_CONSOLE=y | |||
679 | CONFIG_HW_CONSOLE=y | 702 | CONFIG_HW_CONSOLE=y |
680 | # CONFIG_VT_HW_CONSOLE_BINDING is not set | 703 | # CONFIG_VT_HW_CONSOLE_BINDING is not set |
681 | # CONFIG_SERIAL_NONSTANDARD is not set | 704 | # CONFIG_SERIAL_NONSTANDARD is not set |
705 | # CONFIG_NOZOMI is not set | ||
682 | 706 | ||
683 | # | 707 | # |
684 | # Serial drivers | 708 | # Serial drivers |
@@ -747,13 +771,13 @@ CONFIG_I2C_ALGOBIT=y | |||
747 | # | 771 | # |
748 | # Miscellaneous I2C Chip support | 772 | # Miscellaneous I2C Chip support |
749 | # | 773 | # |
750 | # CONFIG_SENSORS_DS1337 is not set | ||
751 | # CONFIG_SENSORS_DS1374 is not set | ||
752 | # CONFIG_DS1682 is not set | 774 | # CONFIG_DS1682 is not set |
753 | # CONFIG_SENSORS_EEPROM is not set | 775 | # CONFIG_SENSORS_EEPROM is not set |
754 | # CONFIG_SENSORS_PCF8574 is not set | 776 | # CONFIG_SENSORS_PCF8574 is not set |
777 | # CONFIG_PCF8575 is not set | ||
755 | # CONFIG_SENSORS_PCA9539 is not set | 778 | # CONFIG_SENSORS_PCA9539 is not set |
756 | # CONFIG_SENSORS_PCF8591 is not set | 779 | # CONFIG_SENSORS_PCF8591 is not set |
780 | # CONFIG_TPS65010 is not set | ||
757 | # CONFIG_SENSORS_MAX6875 is not set | 781 | # CONFIG_SENSORS_MAX6875 is not set |
758 | # CONFIG_SENSORS_TSL2550 is not set | 782 | # CONFIG_SENSORS_TSL2550 is not set |
759 | # CONFIG_I2C_DEBUG_CORE is not set | 783 | # CONFIG_I2C_DEBUG_CORE is not set |
@@ -990,6 +1014,7 @@ CONFIG_SND_ALI5451=m | |||
990 | # CONFIG_SND_BT87X is not set | 1014 | # CONFIG_SND_BT87X is not set |
991 | # CONFIG_SND_CA0106 is not set | 1015 | # CONFIG_SND_CA0106 is not set |
992 | # CONFIG_SND_CMIPCI is not set | 1016 | # CONFIG_SND_CMIPCI is not set |
1017 | # CONFIG_SND_OXYGEN is not set | ||
993 | # CONFIG_SND_CS4281 is not set | 1018 | # CONFIG_SND_CS4281 is not set |
994 | # CONFIG_SND_CS46XX is not set | 1019 | # CONFIG_SND_CS46XX is not set |
995 | # CONFIG_SND_DARLA20 is not set | 1020 | # CONFIG_SND_DARLA20 is not set |
@@ -1014,6 +1039,7 @@ CONFIG_SND_ALI5451=m | |||
1014 | # CONFIG_SND_HDA_INTEL is not set | 1039 | # CONFIG_SND_HDA_INTEL is not set |
1015 | # CONFIG_SND_HDSP is not set | 1040 | # CONFIG_SND_HDSP is not set |
1016 | # CONFIG_SND_HDSPM is not set | 1041 | # CONFIG_SND_HDSPM is not set |
1042 | # CONFIG_SND_HIFIER is not set | ||
1017 | # CONFIG_SND_ICE1712 is not set | 1043 | # CONFIG_SND_ICE1712 is not set |
1018 | # CONFIG_SND_ICE1724 is not set | 1044 | # CONFIG_SND_ICE1724 is not set |
1019 | # CONFIG_SND_INTEL8X0 is not set | 1045 | # CONFIG_SND_INTEL8X0 is not set |
@@ -1031,6 +1057,7 @@ CONFIG_SND_ALI5451=m | |||
1031 | # CONFIG_SND_TRIDENT is not set | 1057 | # CONFIG_SND_TRIDENT is not set |
1032 | # CONFIG_SND_VIA82XX is not set | 1058 | # CONFIG_SND_VIA82XX is not set |
1033 | # CONFIG_SND_VIA82XX_MODEM is not set | 1059 | # CONFIG_SND_VIA82XX_MODEM is not set |
1060 | # CONFIG_SND_VIRTUOSO is not set | ||
1034 | # CONFIG_SND_VX222 is not set | 1061 | # CONFIG_SND_VX222 is not set |
1035 | # CONFIG_SND_YMFPCI is not set | 1062 | # CONFIG_SND_YMFPCI is not set |
1036 | # CONFIG_SND_AC97_POWER_SAVE is not set | 1063 | # CONFIG_SND_AC97_POWER_SAVE is not set |
@@ -1058,6 +1085,10 @@ CONFIG_SND_SUN_CS4231=m | |||
1058 | # | 1085 | # |
1059 | 1086 | ||
1060 | # | 1087 | # |
1088 | # ALSA SoC audio for Freescale SOCs | ||
1089 | # | ||
1090 | |||
1091 | # | ||
1061 | # Open Sound System | 1092 | # Open Sound System |
1062 | # | 1093 | # |
1063 | # CONFIG_SOUND_PRIME is not set | 1094 | # CONFIG_SOUND_PRIME is not set |
@@ -1080,6 +1111,7 @@ CONFIG_USB_ARCH_HAS_OHCI=y | |||
1080 | CONFIG_USB_ARCH_HAS_EHCI=y | 1111 | CONFIG_USB_ARCH_HAS_EHCI=y |
1081 | CONFIG_USB=y | 1112 | CONFIG_USB=y |
1082 | # CONFIG_USB_DEBUG is not set | 1113 | # CONFIG_USB_DEBUG is not set |
1114 | # CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set | ||
1083 | 1115 | ||
1084 | # | 1116 | # |
1085 | # Miscellaneous USB options | 1117 | # Miscellaneous USB options |
@@ -1093,7 +1125,6 @@ CONFIG_USB_DEVICEFS=y | |||
1093 | # USB Host Controller Drivers | 1125 | # USB Host Controller Drivers |
1094 | # | 1126 | # |
1095 | CONFIG_USB_EHCI_HCD=m | 1127 | CONFIG_USB_EHCI_HCD=m |
1096 | # CONFIG_USB_EHCI_SPLIT_ISO is not set | ||
1097 | # CONFIG_USB_EHCI_ROOT_HUB_TT is not set | 1128 | # CONFIG_USB_EHCI_ROOT_HUB_TT is not set |
1098 | # CONFIG_USB_EHCI_TT_NEWSCHED is not set | 1129 | # CONFIG_USB_EHCI_TT_NEWSCHED is not set |
1099 | # CONFIG_USB_ISP116X_HCD is not set | 1130 | # CONFIG_USB_ISP116X_HCD is not set |
@@ -1143,10 +1174,6 @@ CONFIG_USB_STORAGE=m | |||
1143 | # | 1174 | # |
1144 | # USB port drivers | 1175 | # USB port drivers |
1145 | # | 1176 | # |
1146 | |||
1147 | # | ||
1148 | # USB Serial Converter support | ||
1149 | # | ||
1150 | # CONFIG_USB_SERIAL is not set | 1177 | # CONFIG_USB_SERIAL is not set |
1151 | 1178 | ||
1152 | # | 1179 | # |
@@ -1172,14 +1199,6 @@ CONFIG_USB_STORAGE=m | |||
1172 | # CONFIG_USB_TRANCEVIBRATOR is not set | 1199 | # CONFIG_USB_TRANCEVIBRATOR is not set |
1173 | # CONFIG_USB_IOWARRIOR is not set | 1200 | # CONFIG_USB_IOWARRIOR is not set |
1174 | # CONFIG_USB_TEST is not set | 1201 | # CONFIG_USB_TEST is not set |
1175 | |||
1176 | # | ||
1177 | # USB DSL modem support | ||
1178 | # | ||
1179 | |||
1180 | # | ||
1181 | # USB Gadget Support | ||
1182 | # | ||
1183 | # CONFIG_USB_GADGET is not set | 1202 | # CONFIG_USB_GADGET is not set |
1184 | # CONFIG_MMC is not set | 1203 | # CONFIG_MMC is not set |
1185 | # CONFIG_NEW_LEDS is not set | 1204 | # CONFIG_NEW_LEDS is not set |
@@ -1332,11 +1351,6 @@ CONFIG_NLS_DEFAULT="iso8859-1" | |||
1332 | # CONFIG_NLS_KOI8_U is not set | 1351 | # CONFIG_NLS_KOI8_U is not set |
1333 | # CONFIG_NLS_UTF8 is not set | 1352 | # CONFIG_NLS_UTF8 is not set |
1334 | # CONFIG_DLM is not set | 1353 | # CONFIG_DLM is not set |
1335 | CONFIG_INSTRUMENTATION=y | ||
1336 | CONFIG_PROFILING=y | ||
1337 | CONFIG_OPROFILE=m | ||
1338 | CONFIG_KPROBES=y | ||
1339 | # CONFIG_MARKERS is not set | ||
1340 | 1354 | ||
1341 | # | 1355 | # |
1342 | # Kernel hacking | 1356 | # Kernel hacking |
@@ -1374,6 +1388,8 @@ CONFIG_DEBUG_BUGVERBOSE=y | |||
1374 | CONFIG_FORCED_INLINING=y | 1388 | CONFIG_FORCED_INLINING=y |
1375 | # CONFIG_BOOT_PRINTK_DELAY is not set | 1389 | # CONFIG_BOOT_PRINTK_DELAY is not set |
1376 | # CONFIG_RCU_TORTURE_TEST is not set | 1390 | # CONFIG_RCU_TORTURE_TEST is not set |
1391 | # CONFIG_KPROBES_SANITY_TEST is not set | ||
1392 | # CONFIG_BACKTRACE_SELF_TEST is not set | ||
1377 | # CONFIG_LKDTM is not set | 1393 | # CONFIG_LKDTM is not set |
1378 | # CONFIG_FAULT_INJECTION is not set | 1394 | # CONFIG_FAULT_INJECTION is not set |
1379 | # CONFIG_SAMPLES is not set | 1395 | # CONFIG_SAMPLES is not set |
@@ -1396,8 +1412,9 @@ CONFIG_ASYNC_MEMCPY=m | |||
1396 | CONFIG_ASYNC_XOR=m | 1412 | CONFIG_ASYNC_XOR=m |
1397 | CONFIG_CRYPTO=y | 1413 | CONFIG_CRYPTO=y |
1398 | CONFIG_CRYPTO_ALGAPI=y | 1414 | CONFIG_CRYPTO_ALGAPI=y |
1399 | CONFIG_CRYPTO_AEAD=m | 1415 | CONFIG_CRYPTO_AEAD=y |
1400 | CONFIG_CRYPTO_BLKCIPHER=y | 1416 | CONFIG_CRYPTO_BLKCIPHER=y |
1417 | # CONFIG_CRYPTO_SEQIV is not set | ||
1401 | CONFIG_CRYPTO_HASH=y | 1418 | CONFIG_CRYPTO_HASH=y |
1402 | CONFIG_CRYPTO_MANAGER=y | 1419 | CONFIG_CRYPTO_MANAGER=y |
1403 | CONFIG_CRYPTO_HMAC=y | 1420 | CONFIG_CRYPTO_HMAC=y |
@@ -1416,6 +1433,9 @@ CONFIG_CRYPTO_CBC=y | |||
1416 | CONFIG_CRYPTO_PCBC=m | 1433 | CONFIG_CRYPTO_PCBC=m |
1417 | CONFIG_CRYPTO_LRW=m | 1434 | CONFIG_CRYPTO_LRW=m |
1418 | CONFIG_CRYPTO_XTS=m | 1435 | CONFIG_CRYPTO_XTS=m |
1436 | # CONFIG_CRYPTO_CTR is not set | ||
1437 | # CONFIG_CRYPTO_GCM is not set | ||
1438 | # CONFIG_CRYPTO_CCM is not set | ||
1419 | # CONFIG_CRYPTO_CRYPTD is not set | 1439 | # CONFIG_CRYPTO_CRYPTD is not set |
1420 | CONFIG_CRYPTO_DES=y | 1440 | CONFIG_CRYPTO_DES=y |
1421 | CONFIG_CRYPTO_FCRYPT=m | 1441 | CONFIG_CRYPTO_FCRYPT=m |
@@ -1431,13 +1451,16 @@ CONFIG_CRYPTO_ARC4=m | |||
1431 | CONFIG_CRYPTO_KHAZAD=m | 1451 | CONFIG_CRYPTO_KHAZAD=m |
1432 | CONFIG_CRYPTO_ANUBIS=m | 1452 | CONFIG_CRYPTO_ANUBIS=m |
1433 | CONFIG_CRYPTO_SEED=m | 1453 | CONFIG_CRYPTO_SEED=m |
1454 | # CONFIG_CRYPTO_SALSA20 is not set | ||
1434 | CONFIG_CRYPTO_DEFLATE=y | 1455 | CONFIG_CRYPTO_DEFLATE=y |
1435 | CONFIG_CRYPTO_MICHAEL_MIC=m | 1456 | CONFIG_CRYPTO_MICHAEL_MIC=m |
1436 | CONFIG_CRYPTO_CRC32C=m | 1457 | CONFIG_CRYPTO_CRC32C=m |
1437 | CONFIG_CRYPTO_CAMELLIA=m | 1458 | CONFIG_CRYPTO_CAMELLIA=m |
1438 | CONFIG_CRYPTO_TEST=m | 1459 | CONFIG_CRYPTO_TEST=m |
1439 | CONFIG_CRYPTO_AUTHENC=m | 1460 | CONFIG_CRYPTO_AUTHENC=m |
1461 | # CONFIG_CRYPTO_LZO is not set | ||
1440 | CONFIG_CRYPTO_HW=y | 1462 | CONFIG_CRYPTO_HW=y |
1463 | # CONFIG_CRYPTO_DEV_HIFN_795X is not set | ||
1441 | 1464 | ||
1442 | # | 1465 | # |
1443 | # Library routines | 1466 | # Library routines |
diff --git a/arch/sparc64/kernel/Makefile b/arch/sparc64/kernel/Makefile index ef50d217432f..4b78b24ef413 100644 --- a/arch/sparc64/kernel/Makefile +++ b/arch/sparc64/kernel/Makefile | |||
@@ -11,7 +11,7 @@ obj-y := process.o setup.o cpu.o idprom.o \ | |||
11 | traps.o auxio.o una_asm.o sysfs.o iommu.o \ | 11 | traps.o auxio.o una_asm.o sysfs.o iommu.o \ |
12 | irq.o ptrace.o time.o sys_sparc.o signal.o \ | 12 | irq.o ptrace.o time.o sys_sparc.o signal.o \ |
13 | unaligned.o central.o pci.o starfire.o semaphore.o \ | 13 | unaligned.o central.o pci.o starfire.o semaphore.o \ |
14 | power.o sbus.o iommu_common.o sparc64_ksyms.o chmc.o \ | 14 | power.o sbus.o sparc64_ksyms.o chmc.o \ |
15 | visemul.o prom.o of_device.o hvapi.o sstate.o mdesc.o | 15 | visemul.o prom.o of_device.o hvapi.o sstate.o mdesc.o |
16 | 16 | ||
17 | obj-$(CONFIG_STACKTRACE) += stacktrace.o | 17 | obj-$(CONFIG_STACKTRACE) += stacktrace.o |
diff --git a/arch/sparc64/kernel/iommu.c b/arch/sparc64/kernel/iommu.c index 4b9115a4d92e..5623a4d59dff 100644 --- a/arch/sparc64/kernel/iommu.c +++ b/arch/sparc64/kernel/iommu.c | |||
@@ -472,94 +472,15 @@ static void dma_4u_unmap_single(struct device *dev, dma_addr_t bus_addr, | |||
472 | spin_unlock_irqrestore(&iommu->lock, flags); | 472 | spin_unlock_irqrestore(&iommu->lock, flags); |
473 | } | 473 | } |
474 | 474 | ||
475 | #define SG_ENT_PHYS_ADDRESS(SG) (__pa(sg_virt((SG)))) | ||
476 | |||
477 | static void fill_sg(iopte_t *iopte, struct scatterlist *sg, | ||
478 | int nused, int nelems, | ||
479 | unsigned long iopte_protection) | ||
480 | { | ||
481 | struct scatterlist *dma_sg = sg; | ||
482 | int i; | ||
483 | |||
484 | for (i = 0; i < nused; i++) { | ||
485 | unsigned long pteval = ~0UL; | ||
486 | u32 dma_npages; | ||
487 | |||
488 | dma_npages = ((dma_sg->dma_address & (IO_PAGE_SIZE - 1UL)) + | ||
489 | dma_sg->dma_length + | ||
490 | ((IO_PAGE_SIZE - 1UL))) >> IO_PAGE_SHIFT; | ||
491 | do { | ||
492 | unsigned long offset; | ||
493 | signed int len; | ||
494 | |||
495 | /* If we are here, we know we have at least one | ||
496 | * more page to map. So walk forward until we | ||
497 | * hit a page crossing, and begin creating new | ||
498 | * mappings from that spot. | ||
499 | */ | ||
500 | for (;;) { | ||
501 | unsigned long tmp; | ||
502 | |||
503 | tmp = SG_ENT_PHYS_ADDRESS(sg); | ||
504 | len = sg->length; | ||
505 | if (((tmp ^ pteval) >> IO_PAGE_SHIFT) != 0UL) { | ||
506 | pteval = tmp & IO_PAGE_MASK; | ||
507 | offset = tmp & (IO_PAGE_SIZE - 1UL); | ||
508 | break; | ||
509 | } | ||
510 | if (((tmp ^ (tmp + len - 1UL)) >> IO_PAGE_SHIFT) != 0UL) { | ||
511 | pteval = (tmp + IO_PAGE_SIZE) & IO_PAGE_MASK; | ||
512 | offset = 0UL; | ||
513 | len -= (IO_PAGE_SIZE - (tmp & (IO_PAGE_SIZE - 1UL))); | ||
514 | break; | ||
515 | } | ||
516 | sg = sg_next(sg); | ||
517 | nelems--; | ||
518 | } | ||
519 | |||
520 | pteval = iopte_protection | (pteval & IOPTE_PAGE); | ||
521 | while (len > 0) { | ||
522 | *iopte++ = __iopte(pteval); | ||
523 | pteval += IO_PAGE_SIZE; | ||
524 | len -= (IO_PAGE_SIZE - offset); | ||
525 | offset = 0; | ||
526 | dma_npages--; | ||
527 | } | ||
528 | |||
529 | pteval = (pteval & IOPTE_PAGE) + len; | ||
530 | sg = sg_next(sg); | ||
531 | nelems--; | ||
532 | |||
533 | /* Skip over any tail mappings we've fully mapped, | ||
534 | * adjusting pteval along the way. Stop when we | ||
535 | * detect a page crossing event. | ||
536 | */ | ||
537 | while (nelems && | ||
538 | (pteval << (64 - IO_PAGE_SHIFT)) != 0UL && | ||
539 | (pteval == SG_ENT_PHYS_ADDRESS(sg)) && | ||
540 | ((pteval ^ | ||
541 | (SG_ENT_PHYS_ADDRESS(sg) + sg->length - 1UL)) >> IO_PAGE_SHIFT) == 0UL) { | ||
542 | pteval += sg->length; | ||
543 | sg = sg_next(sg); | ||
544 | nelems--; | ||
545 | } | ||
546 | if ((pteval << (64 - IO_PAGE_SHIFT)) == 0UL) | ||
547 | pteval = ~0UL; | ||
548 | } while (dma_npages != 0); | ||
549 | dma_sg = sg_next(dma_sg); | ||
550 | } | ||
551 | } | ||
552 | |||
553 | static int dma_4u_map_sg(struct device *dev, struct scatterlist *sglist, | 475 | static int dma_4u_map_sg(struct device *dev, struct scatterlist *sglist, |
554 | int nelems, enum dma_data_direction direction) | 476 | int nelems, enum dma_data_direction direction) |
555 | { | 477 | { |
556 | struct iommu *iommu; | 478 | unsigned long flags, ctx, i, npages, iopte_protection; |
479 | struct scatterlist *sg; | ||
557 | struct strbuf *strbuf; | 480 | struct strbuf *strbuf; |
558 | unsigned long flags, ctx, npages, iopte_protection; | 481 | struct iommu *iommu; |
559 | iopte_t *base; | 482 | iopte_t *base; |
560 | u32 dma_base; | 483 | u32 dma_base; |
561 | struct scatterlist *sgtmp; | ||
562 | int used; | ||
563 | 484 | ||
564 | /* Fast path single entry scatterlists. */ | 485 | /* Fast path single entry scatterlists. */ |
565 | if (nelems == 1) { | 486 | if (nelems == 1) { |
@@ -578,11 +499,7 @@ static int dma_4u_map_sg(struct device *dev, struct scatterlist *sglist, | |||
578 | if (unlikely(direction == DMA_NONE)) | 499 | if (unlikely(direction == DMA_NONE)) |
579 | goto bad_no_ctx; | 500 | goto bad_no_ctx; |
580 | 501 | ||
581 | /* Step 1: Prepare scatter list. */ | 502 | npages = calc_npages(sglist, nelems); |
582 | |||
583 | npages = prepare_sg(dev, sglist, nelems); | ||
584 | |||
585 | /* Step 2: Allocate a cluster and context, if necessary. */ | ||
586 | 503 | ||
587 | spin_lock_irqsave(&iommu->lock, flags); | 504 | spin_lock_irqsave(&iommu->lock, flags); |
588 | 505 | ||
@@ -599,18 +516,6 @@ static int dma_4u_map_sg(struct device *dev, struct scatterlist *sglist, | |||
599 | dma_base = iommu->page_table_map_base + | 516 | dma_base = iommu->page_table_map_base + |
600 | ((base - iommu->page_table) << IO_PAGE_SHIFT); | 517 | ((base - iommu->page_table) << IO_PAGE_SHIFT); |
601 | 518 | ||
602 | /* Step 3: Normalize DMA addresses. */ | ||
603 | used = nelems; | ||
604 | |||
605 | sgtmp = sglist; | ||
606 | while (used && sgtmp->dma_length) { | ||
607 | sgtmp->dma_address += dma_base; | ||
608 | sgtmp = sg_next(sgtmp); | ||
609 | used--; | ||
610 | } | ||
611 | used = nelems - used; | ||
612 | |||
613 | /* Step 4: Create the mappings. */ | ||
614 | if (strbuf->strbuf_enabled) | 519 | if (strbuf->strbuf_enabled) |
615 | iopte_protection = IOPTE_STREAMING(ctx); | 520 | iopte_protection = IOPTE_STREAMING(ctx); |
616 | else | 521 | else |
@@ -618,13 +523,27 @@ static int dma_4u_map_sg(struct device *dev, struct scatterlist *sglist, | |||
618 | if (direction != DMA_TO_DEVICE) | 523 | if (direction != DMA_TO_DEVICE) |
619 | iopte_protection |= IOPTE_WRITE; | 524 | iopte_protection |= IOPTE_WRITE; |
620 | 525 | ||
621 | fill_sg(base, sglist, used, nelems, iopte_protection); | 526 | for_each_sg(sglist, sg, nelems, i) { |
527 | unsigned long paddr = SG_ENT_PHYS_ADDRESS(sg); | ||
528 | unsigned long slen = sg->length; | ||
529 | unsigned long this_npages; | ||
622 | 530 | ||
623 | #ifdef VERIFY_SG | 531 | this_npages = iommu_num_pages(paddr, slen); |
624 | verify_sglist(sglist, nelems, base, npages); | ||
625 | #endif | ||
626 | 532 | ||
627 | return used; | 533 | sg->dma_address = dma_base | (paddr & ~IO_PAGE_MASK); |
534 | sg->dma_length = slen; | ||
535 | |||
536 | paddr &= IO_PAGE_MASK; | ||
537 | while (this_npages--) { | ||
538 | iopte_val(*base) = iopte_protection | paddr; | ||
539 | |||
540 | base++; | ||
541 | paddr += IO_PAGE_SIZE; | ||
542 | dma_base += IO_PAGE_SIZE; | ||
543 | } | ||
544 | } | ||
545 | |||
546 | return nelems; | ||
628 | 547 | ||
629 | bad: | 548 | bad: |
630 | iommu_free_ctx(iommu, ctx); | 549 | iommu_free_ctx(iommu, ctx); |
@@ -637,11 +556,10 @@ bad_no_ctx: | |||
637 | static void dma_4u_unmap_sg(struct device *dev, struct scatterlist *sglist, | 556 | static void dma_4u_unmap_sg(struct device *dev, struct scatterlist *sglist, |
638 | int nelems, enum dma_data_direction direction) | 557 | int nelems, enum dma_data_direction direction) |
639 | { | 558 | { |
640 | struct iommu *iommu; | 559 | unsigned long flags, ctx, i, npages; |
641 | struct strbuf *strbuf; | 560 | struct strbuf *strbuf; |
561 | struct iommu *iommu; | ||
642 | iopte_t *base; | 562 | iopte_t *base; |
643 | unsigned long flags, ctx, i, npages; | ||
644 | struct scatterlist *sg, *sgprv; | ||
645 | u32 bus_addr; | 563 | u32 bus_addr; |
646 | 564 | ||
647 | if (unlikely(direction == DMA_NONE)) { | 565 | if (unlikely(direction == DMA_NONE)) { |
@@ -654,15 +572,7 @@ static void dma_4u_unmap_sg(struct device *dev, struct scatterlist *sglist, | |||
654 | 572 | ||
655 | bus_addr = sglist->dma_address & IO_PAGE_MASK; | 573 | bus_addr = sglist->dma_address & IO_PAGE_MASK; |
656 | 574 | ||
657 | sgprv = NULL; | 575 | npages = calc_npages(sglist, nelems); |
658 | for_each_sg(sglist, sg, nelems, i) { | ||
659 | if (sg->dma_length == 0) | ||
660 | break; | ||
661 | sgprv = sg; | ||
662 | } | ||
663 | |||
664 | npages = (IO_PAGE_ALIGN(sgprv->dma_address + sgprv->dma_length) - | ||
665 | bus_addr) >> IO_PAGE_SHIFT; | ||
666 | 576 | ||
667 | base = iommu->page_table + | 577 | base = iommu->page_table + |
668 | ((bus_addr - iommu->page_table_map_base) >> IO_PAGE_SHIFT); | 578 | ((bus_addr - iommu->page_table_map_base) >> IO_PAGE_SHIFT); |
diff --git a/arch/sparc64/kernel/iommu_common.c b/arch/sparc64/kernel/iommu_common.c deleted file mode 100644 index 72a4acfe8c7b..000000000000 --- a/arch/sparc64/kernel/iommu_common.c +++ /dev/null | |||
@@ -1,248 +0,0 @@ | |||
1 | /* $Id: iommu_common.c,v 1.9 2001/12/17 07:05:09 davem Exp $ | ||
2 | * iommu_common.c: UltraSparc SBUS/PCI common iommu code. | ||
3 | * | ||
4 | * Copyright (C) 1999 David S. Miller (davem@redhat.com) | ||
5 | */ | ||
6 | |||
7 | #include <linux/dma-mapping.h> | ||
8 | #include "iommu_common.h" | ||
9 | |||
10 | /* You are _strongly_ advised to enable the following debugging code | ||
11 | * any time you make changes to the sg code below, run it for a while | ||
12 | * with filesystems mounted read-only before buying the farm... -DaveM | ||
13 | */ | ||
14 | |||
15 | #ifdef VERIFY_SG | ||
16 | static int verify_lengths(struct scatterlist *sglist, int nents, int npages) | ||
17 | { | ||
18 | int sg_len, dma_len; | ||
19 | int i, pgcount; | ||
20 | struct scatterlist *sg; | ||
21 | |||
22 | sg_len = 0; | ||
23 | for_each_sg(sglist, sg, nents, i) | ||
24 | sg_len += sg->length; | ||
25 | |||
26 | dma_len = 0; | ||
27 | for_each_sg(sglist, sg, nents, i) { | ||
28 | if (!sg->dma_length) | ||
29 | break; | ||
30 | dma_len += sg->dma_length; | ||
31 | } | ||
32 | |||
33 | if (sg_len != dma_len) { | ||
34 | printk("verify_lengths: Error, different, sg[%d] dma[%d]\n", | ||
35 | sg_len, dma_len); | ||
36 | return -1; | ||
37 | } | ||
38 | |||
39 | pgcount = 0; | ||
40 | for_each_sg(sglist, sg, nents, i) { | ||
41 | unsigned long start, end; | ||
42 | |||
43 | if (!sg->dma_length) | ||
44 | break; | ||
45 | |||
46 | start = sg->dma_address; | ||
47 | start = start & IO_PAGE_MASK; | ||
48 | |||
49 | end = sg->dma_address + sg->dma_length; | ||
50 | end = (end + (IO_PAGE_SIZE - 1)) & IO_PAGE_MASK; | ||
51 | |||
52 | pgcount += ((end - start) >> IO_PAGE_SHIFT); | ||
53 | } | ||
54 | |||
55 | if (pgcount != npages) { | ||
56 | printk("verify_lengths: Error, page count wrong, " | ||
57 | "npages[%d] pgcount[%d]\n", | ||
58 | npages, pgcount); | ||
59 | return -1; | ||
60 | } | ||
61 | |||
62 | /* This test passes... */ | ||
63 | return 0; | ||
64 | } | ||
65 | |||
66 | static int verify_one_map(struct scatterlist *dma_sg, struct scatterlist **__sg, int nents, iopte_t **__iopte) | ||
67 | { | ||
68 | struct scatterlist *sg = *__sg; | ||
69 | iopte_t *iopte = *__iopte; | ||
70 | u32 dlen = dma_sg->dma_length; | ||
71 | u32 daddr; | ||
72 | unsigned int sglen; | ||
73 | unsigned long sgaddr; | ||
74 | |||
75 | daddr = dma_sg->dma_address; | ||
76 | sglen = sg->length; | ||
77 | sgaddr = (unsigned long) sg_virt(sg); | ||
78 | while (dlen > 0) { | ||
79 | unsigned long paddr; | ||
80 | |||
81 | /* SG and DMA_SG must begin at the same sub-page boundary. */ | ||
82 | if ((sgaddr & ~IO_PAGE_MASK) != (daddr & ~IO_PAGE_MASK)) { | ||
83 | printk("verify_one_map: Wrong start offset " | ||
84 | "sg[%08lx] dma[%08x]\n", | ||
85 | sgaddr, daddr); | ||
86 | nents = -1; | ||
87 | goto out; | ||
88 | } | ||
89 | |||
90 | /* Verify the IOPTE points to the right page. */ | ||
91 | paddr = iopte_val(*iopte) & IOPTE_PAGE; | ||
92 | if ((paddr + PAGE_OFFSET) != (sgaddr & IO_PAGE_MASK)) { | ||
93 | printk("verify_one_map: IOPTE[%08lx] maps the " | ||
94 | "wrong page, should be [%08lx]\n", | ||
95 | iopte_val(*iopte), (sgaddr & IO_PAGE_MASK) - PAGE_OFFSET); | ||
96 | nents = -1; | ||
97 | goto out; | ||
98 | } | ||
99 | |||
100 | /* If this SG crosses a page, adjust to that next page | ||
101 | * boundary and loop. | ||
102 | */ | ||
103 | if ((sgaddr & IO_PAGE_MASK) ^ ((sgaddr + sglen - 1) & IO_PAGE_MASK)) { | ||
104 | unsigned long next_page, diff; | ||
105 | |||
106 | next_page = (sgaddr + IO_PAGE_SIZE) & IO_PAGE_MASK; | ||
107 | diff = next_page - sgaddr; | ||
108 | sgaddr += diff; | ||
109 | daddr += diff; | ||
110 | sglen -= diff; | ||
111 | dlen -= diff; | ||
112 | if (dlen > 0) | ||
113 | iopte++; | ||
114 | continue; | ||
115 | } | ||
116 | |||
117 | /* SG wholly consumed within this page. */ | ||
118 | daddr += sglen; | ||
119 | dlen -= sglen; | ||
120 | |||
121 | if (dlen > 0 && ((daddr & ~IO_PAGE_MASK) == 0)) | ||
122 | iopte++; | ||
123 | |||
124 | sg = sg_next(sg); | ||
125 | if (--nents <= 0) | ||
126 | break; | ||
127 | sgaddr = (unsigned long) sg_virt(sg); | ||
128 | sglen = sg->length; | ||
129 | } | ||
130 | if (dlen < 0) { | ||
131 | /* Transfer overrun, big problems. */ | ||
132 | printk("verify_one_map: Transfer overrun by %d bytes.\n", | ||
133 | -dlen); | ||
134 | nents = -1; | ||
135 | } else { | ||
136 | /* Advance to next dma_sg implies that the next iopte will | ||
137 | * begin it. | ||
138 | */ | ||
139 | iopte++; | ||
140 | } | ||
141 | |||
142 | out: | ||
143 | *__sg = sg; | ||
144 | *__iopte = iopte; | ||
145 | return nents; | ||
146 | } | ||
147 | |||
148 | static int verify_maps(struct scatterlist *sg, int nents, iopte_t *iopte) | ||
149 | { | ||
150 | struct scatterlist *dma_sg = sg; | ||
151 | struct scatterlist *orig_dma_sg = dma_sg; | ||
152 | int orig_nents = nents; | ||
153 | |||
154 | for (;;) { | ||
155 | nents = verify_one_map(dma_sg, &sg, nents, &iopte); | ||
156 | if (nents <= 0) | ||
157 | break; | ||
158 | dma_sg = sg_next(dma_sg); | ||
159 | if (dma_sg->dma_length == 0) | ||
160 | break; | ||
161 | } | ||
162 | |||
163 | if (nents > 0) { | ||
164 | printk("verify_maps: dma maps consumed by some sgs remain (%d)\n", | ||
165 | nents); | ||
166 | return -1; | ||
167 | } | ||
168 | |||
169 | if (nents < 0) { | ||
170 | printk("verify_maps: Error, messed up mappings, " | ||
171 | "at sg %d dma_sg %d\n", | ||
172 | (int) (orig_nents + nents), (int) (dma_sg - orig_dma_sg)); | ||
173 | return -1; | ||
174 | } | ||
175 | |||
176 | /* This test passes... */ | ||
177 | return 0; | ||
178 | } | ||
179 | |||
180 | void verify_sglist(struct scatterlist *sglist, int nents, iopte_t *iopte, int npages) | ||
181 | { | ||
182 | struct scatterlist *sg; | ||
183 | |||
184 | if (verify_lengths(sglist, nents, npages) < 0 || | ||
185 | verify_maps(sglist, nents, iopte) < 0) { | ||
186 | int i; | ||
187 | |||
188 | printk("verify_sglist: Crap, messed up mappings, dumping, iodma at "); | ||
189 | printk("%016lx.\n", sglist->dma_address & IO_PAGE_MASK); | ||
190 | |||
191 | for_each_sg(sglist, sg, nents, i) { | ||
192 | printk("sg(%d): page_addr(%p) off(%x) length(%x) " | ||
193 | "dma_address[%016x] dma_length[%016x]\n", | ||
194 | i, | ||
195 | page_address(sg_page(sg)), sg->offset, | ||
196 | sg->length, | ||
197 | sg->dma_address, sg->dma_length); | ||
198 | } | ||
199 | } | ||
200 | |||
201 | /* Seems to be ok */ | ||
202 | } | ||
203 | #endif | ||
204 | |||
205 | unsigned long prepare_sg(struct device *dev, struct scatterlist *sg, int nents) | ||
206 | { | ||
207 | struct scatterlist *dma_sg = sg; | ||
208 | unsigned long prev; | ||
209 | u32 dent_addr, dent_len; | ||
210 | unsigned int max_seg_size; | ||
211 | |||
212 | prev = (unsigned long) sg_virt(sg); | ||
213 | prev += (unsigned long) (dent_len = sg->length); | ||
214 | dent_addr = (u32) ((unsigned long)(sg_virt(sg)) & (IO_PAGE_SIZE - 1UL)); | ||
215 | max_seg_size = dma_get_max_seg_size(dev); | ||
216 | while (--nents) { | ||
217 | unsigned long addr; | ||
218 | |||
219 | sg = sg_next(sg); | ||
220 | addr = (unsigned long) sg_virt(sg); | ||
221 | if (! VCONTIG(prev, addr) || | ||
222 | dent_len + sg->length > max_seg_size) { | ||
223 | dma_sg->dma_address = dent_addr; | ||
224 | dma_sg->dma_length = dent_len; | ||
225 | dma_sg = sg_next(dma_sg); | ||
226 | |||
227 | dent_addr = ((dent_addr + | ||
228 | dent_len + | ||
229 | (IO_PAGE_SIZE - 1UL)) >> IO_PAGE_SHIFT); | ||
230 | dent_addr <<= IO_PAGE_SHIFT; | ||
231 | dent_addr += addr & (IO_PAGE_SIZE - 1UL); | ||
232 | dent_len = 0; | ||
233 | } | ||
234 | dent_len += sg->length; | ||
235 | prev = addr + sg->length; | ||
236 | } | ||
237 | dma_sg->dma_address = dent_addr; | ||
238 | dma_sg->dma_length = dent_len; | ||
239 | |||
240 | if (dma_sg != sg) { | ||
241 | dma_sg = sg_next(dma_sg); | ||
242 | dma_sg->dma_length = 0; | ||
243 | } | ||
244 | |||
245 | return ((unsigned long) dent_addr + | ||
246 | (unsigned long) dent_len + | ||
247 | (IO_PAGE_SIZE - 1UL)) >> IO_PAGE_SHIFT; | ||
248 | } | ||
diff --git a/arch/sparc64/kernel/iommu_common.h b/arch/sparc64/kernel/iommu_common.h index a90d046e8024..4b5cafa2877a 100644 --- a/arch/sparc64/kernel/iommu_common.h +++ b/arch/sparc64/kernel/iommu_common.h | |||
@@ -30,6 +30,32 @@ | |||
30 | */ | 30 | */ |
31 | #define IOMMU_PAGE_SHIFT 13 | 31 | #define IOMMU_PAGE_SHIFT 13 |
32 | 32 | ||
33 | #define SG_ENT_PHYS_ADDRESS(SG) (__pa(sg_virt((SG)))) | ||
34 | |||
35 | static inline unsigned long iommu_num_pages(unsigned long vaddr, | ||
36 | unsigned long slen) | ||
37 | { | ||
38 | unsigned long npages; | ||
39 | |||
40 | npages = IO_PAGE_ALIGN(vaddr + slen) - (vaddr & IO_PAGE_MASK); | ||
41 | npages >>= IO_PAGE_SHIFT; | ||
42 | |||
43 | return npages; | ||
44 | } | ||
45 | |||
46 | static inline unsigned long calc_npages(struct scatterlist *sglist, int nelems) | ||
47 | { | ||
48 | unsigned long i, npages = 0; | ||
49 | struct scatterlist *sg; | ||
50 | |||
51 | for_each_sg(sglist, sg, nelems, i) { | ||
52 | unsigned long paddr = SG_ENT_PHYS_ADDRESS(sg); | ||
53 | npages += iommu_num_pages(paddr, sg->length); | ||
54 | } | ||
55 | |||
56 | return npages; | ||
57 | } | ||
58 | |||
33 | /* You are _strongly_ advised to enable the following debugging code | 59 | /* You are _strongly_ advised to enable the following debugging code |
34 | * any time you make changes to the sg code below, run it for a while | 60 | * any time you make changes to the sg code below, run it for a while |
35 | * with filesystems mounted read-only before buying the farm... -DaveM | 61 | * with filesystems mounted read-only before buying the farm... -DaveM |
diff --git a/arch/sparc64/kernel/pci_sun4v.c b/arch/sparc64/kernel/pci_sun4v.c index 5ea2eab1ccda..61baf8dc095e 100644 --- a/arch/sparc64/kernel/pci_sun4v.c +++ b/arch/sparc64/kernel/pci_sun4v.c | |||
@@ -365,113 +365,14 @@ static void dma_4v_unmap_single(struct device *dev, dma_addr_t bus_addr, | |||
365 | spin_unlock_irqrestore(&iommu->lock, flags); | 365 | spin_unlock_irqrestore(&iommu->lock, flags); |
366 | } | 366 | } |
367 | 367 | ||
368 | #define SG_ENT_PHYS_ADDRESS(SG) (__pa(sg_virt((SG)))) | ||
369 | |||
370 | static long fill_sg(long entry, struct device *dev, | ||
371 | struct scatterlist *sg, | ||
372 | int nused, int nelems, unsigned long prot) | ||
373 | { | ||
374 | struct scatterlist *dma_sg = sg; | ||
375 | unsigned long flags; | ||
376 | int i; | ||
377 | |||
378 | local_irq_save(flags); | ||
379 | |||
380 | iommu_batch_start(dev, prot, entry); | ||
381 | |||
382 | for (i = 0; i < nused; i++) { | ||
383 | unsigned long pteval = ~0UL; | ||
384 | u32 dma_npages; | ||
385 | |||
386 | dma_npages = ((dma_sg->dma_address & (IO_PAGE_SIZE - 1UL)) + | ||
387 | dma_sg->dma_length + | ||
388 | ((IO_PAGE_SIZE - 1UL))) >> IO_PAGE_SHIFT; | ||
389 | do { | ||
390 | unsigned long offset; | ||
391 | signed int len; | ||
392 | |||
393 | /* If we are here, we know we have at least one | ||
394 | * more page to map. So walk forward until we | ||
395 | * hit a page crossing, and begin creating new | ||
396 | * mappings from that spot. | ||
397 | */ | ||
398 | for (;;) { | ||
399 | unsigned long tmp; | ||
400 | |||
401 | tmp = SG_ENT_PHYS_ADDRESS(sg); | ||
402 | len = sg->length; | ||
403 | if (((tmp ^ pteval) >> IO_PAGE_SHIFT) != 0UL) { | ||
404 | pteval = tmp & IO_PAGE_MASK; | ||
405 | offset = tmp & (IO_PAGE_SIZE - 1UL); | ||
406 | break; | ||
407 | } | ||
408 | if (((tmp ^ (tmp + len - 1UL)) >> IO_PAGE_SHIFT) != 0UL) { | ||
409 | pteval = (tmp + IO_PAGE_SIZE) & IO_PAGE_MASK; | ||
410 | offset = 0UL; | ||
411 | len -= (IO_PAGE_SIZE - (tmp & (IO_PAGE_SIZE - 1UL))); | ||
412 | break; | ||
413 | } | ||
414 | sg = sg_next(sg); | ||
415 | nelems--; | ||
416 | } | ||
417 | |||
418 | pteval = (pteval & IOPTE_PAGE); | ||
419 | while (len > 0) { | ||
420 | long err; | ||
421 | |||
422 | err = iommu_batch_add(pteval); | ||
423 | if (unlikely(err < 0L)) | ||
424 | goto iommu_map_failed; | ||
425 | |||
426 | pteval += IO_PAGE_SIZE; | ||
427 | len -= (IO_PAGE_SIZE - offset); | ||
428 | offset = 0; | ||
429 | dma_npages--; | ||
430 | } | ||
431 | |||
432 | pteval = (pteval & IOPTE_PAGE) + len; | ||
433 | sg = sg_next(sg); | ||
434 | nelems--; | ||
435 | |||
436 | /* Skip over any tail mappings we've fully mapped, | ||
437 | * adjusting pteval along the way. Stop when we | ||
438 | * detect a page crossing event. | ||
439 | */ | ||
440 | while (nelems && | ||
441 | (pteval << (64 - IO_PAGE_SHIFT)) != 0UL && | ||
442 | (pteval == SG_ENT_PHYS_ADDRESS(sg)) && | ||
443 | ((pteval ^ | ||
444 | (SG_ENT_PHYS_ADDRESS(sg) + sg->length - 1UL)) >> IO_PAGE_SHIFT) == 0UL) { | ||
445 | pteval += sg->length; | ||
446 | sg = sg_next(sg); | ||
447 | nelems--; | ||
448 | } | ||
449 | if ((pteval << (64 - IO_PAGE_SHIFT)) == 0UL) | ||
450 | pteval = ~0UL; | ||
451 | } while (dma_npages != 0); | ||
452 | dma_sg = sg_next(dma_sg); | ||
453 | } | ||
454 | |||
455 | if (unlikely(iommu_batch_end() < 0L)) | ||
456 | goto iommu_map_failed; | ||
457 | |||
458 | local_irq_restore(flags); | ||
459 | return 0; | ||
460 | |||
461 | iommu_map_failed: | ||
462 | local_irq_restore(flags); | ||
463 | return -1L; | ||
464 | } | ||
465 | |||
466 | static int dma_4v_map_sg(struct device *dev, struct scatterlist *sglist, | 368 | static int dma_4v_map_sg(struct device *dev, struct scatterlist *sglist, |
467 | int nelems, enum dma_data_direction direction) | 369 | int nelems, enum dma_data_direction direction) |
468 | { | 370 | { |
371 | unsigned long flags, npages, i, prot; | ||
372 | struct scatterlist *sg; | ||
469 | struct iommu *iommu; | 373 | struct iommu *iommu; |
470 | unsigned long flags, npages, prot; | ||
471 | u32 dma_base; | ||
472 | struct scatterlist *sgtmp; | ||
473 | long entry, err; | 374 | long entry, err; |
474 | int used; | 375 | u32 dma_base; |
475 | 376 | ||
476 | /* Fast path single entry scatterlists. */ | 377 | /* Fast path single entry scatterlists. */ |
477 | if (nelems == 1) { | 378 | if (nelems == 1) { |
@@ -489,10 +390,8 @@ static int dma_4v_map_sg(struct device *dev, struct scatterlist *sglist, | |||
489 | if (unlikely(direction == DMA_NONE)) | 390 | if (unlikely(direction == DMA_NONE)) |
490 | goto bad; | 391 | goto bad; |
491 | 392 | ||
492 | /* Step 1: Prepare scatter list. */ | 393 | npages = calc_npages(sglist, nelems); |
493 | npages = prepare_sg(dev, sglist, nelems); | ||
494 | 394 | ||
495 | /* Step 2: Allocate a cluster and context, if necessary. */ | ||
496 | spin_lock_irqsave(&iommu->lock, flags); | 395 | spin_lock_irqsave(&iommu->lock, flags); |
497 | entry = arena_alloc(&iommu->arena, npages); | 396 | entry = arena_alloc(&iommu->arena, npages); |
498 | spin_unlock_irqrestore(&iommu->lock, flags); | 397 | spin_unlock_irqrestore(&iommu->lock, flags); |
@@ -503,27 +402,45 @@ static int dma_4v_map_sg(struct device *dev, struct scatterlist *sglist, | |||
503 | dma_base = iommu->page_table_map_base + | 402 | dma_base = iommu->page_table_map_base + |
504 | (entry << IO_PAGE_SHIFT); | 403 | (entry << IO_PAGE_SHIFT); |
505 | 404 | ||
506 | /* Step 3: Normalize DMA addresses. */ | ||
507 | used = nelems; | ||
508 | |||
509 | sgtmp = sglist; | ||
510 | while (used && sgtmp->dma_length) { | ||
511 | sgtmp->dma_address += dma_base; | ||
512 | sgtmp = sg_next(sgtmp); | ||
513 | used--; | ||
514 | } | ||
515 | used = nelems - used; | ||
516 | |||
517 | /* Step 4: Create the mappings. */ | ||
518 | prot = HV_PCI_MAP_ATTR_READ; | 405 | prot = HV_PCI_MAP_ATTR_READ; |
519 | if (direction != DMA_TO_DEVICE) | 406 | if (direction != DMA_TO_DEVICE) |
520 | prot |= HV_PCI_MAP_ATTR_WRITE; | 407 | prot |= HV_PCI_MAP_ATTR_WRITE; |
521 | 408 | ||
522 | err = fill_sg(entry, dev, sglist, used, nelems, prot); | 409 | local_irq_save(flags); |
410 | |||
411 | iommu_batch_start(dev, prot, entry); | ||
412 | |||
413 | for_each_sg(sglist, sg, nelems, i) { | ||
414 | unsigned long paddr = SG_ENT_PHYS_ADDRESS(sg); | ||
415 | unsigned long slen = sg->length; | ||
416 | unsigned long this_npages; | ||
417 | |||
418 | this_npages = iommu_num_pages(paddr, slen); | ||
419 | |||
420 | sg->dma_address = dma_base | (paddr & ~IO_PAGE_MASK); | ||
421 | sg->dma_length = slen; | ||
422 | |||
423 | paddr &= IO_PAGE_MASK; | ||
424 | while (this_npages--) { | ||
425 | err = iommu_batch_add(paddr); | ||
426 | if (unlikely(err < 0L)) { | ||
427 | local_irq_restore(flags); | ||
428 | goto iommu_map_failed; | ||
429 | } | ||
430 | |||
431 | paddr += IO_PAGE_SIZE; | ||
432 | dma_base += IO_PAGE_SIZE; | ||
433 | } | ||
434 | } | ||
435 | |||
436 | err = iommu_batch_end(); | ||
437 | |||
438 | local_irq_restore(flags); | ||
439 | |||
523 | if (unlikely(err < 0L)) | 440 | if (unlikely(err < 0L)) |
524 | goto iommu_map_failed; | 441 | goto iommu_map_failed; |
525 | 442 | ||
526 | return used; | 443 | return nelems; |
527 | 444 | ||
528 | bad: | 445 | bad: |
529 | if (printk_ratelimit()) | 446 | if (printk_ratelimit()) |
@@ -541,12 +458,11 @@ iommu_map_failed: | |||
541 | static void dma_4v_unmap_sg(struct device *dev, struct scatterlist *sglist, | 458 | static void dma_4v_unmap_sg(struct device *dev, struct scatterlist *sglist, |
542 | int nelems, enum dma_data_direction direction) | 459 | int nelems, enum dma_data_direction direction) |
543 | { | 460 | { |
461 | unsigned long flags, npages; | ||
544 | struct pci_pbm_info *pbm; | 462 | struct pci_pbm_info *pbm; |
463 | u32 devhandle, bus_addr; | ||
545 | struct iommu *iommu; | 464 | struct iommu *iommu; |
546 | unsigned long flags, i, npages; | ||
547 | struct scatterlist *sg, *sgprv; | ||
548 | long entry; | 465 | long entry; |
549 | u32 devhandle, bus_addr; | ||
550 | 466 | ||
551 | if (unlikely(direction == DMA_NONE)) { | 467 | if (unlikely(direction == DMA_NONE)) { |
552 | if (printk_ratelimit()) | 468 | if (printk_ratelimit()) |
@@ -558,16 +474,8 @@ static void dma_4v_unmap_sg(struct device *dev, struct scatterlist *sglist, | |||
558 | devhandle = pbm->devhandle; | 474 | devhandle = pbm->devhandle; |
559 | 475 | ||
560 | bus_addr = sglist->dma_address & IO_PAGE_MASK; | 476 | bus_addr = sglist->dma_address & IO_PAGE_MASK; |
561 | sgprv = NULL; | ||
562 | for_each_sg(sglist, sg, nelems, i) { | ||
563 | if (sg->dma_length == 0) | ||
564 | break; | ||
565 | |||
566 | sgprv = sg; | ||
567 | } | ||
568 | 477 | ||
569 | npages = (IO_PAGE_ALIGN(sgprv->dma_address + sgprv->dma_length) - | 478 | npages = calc_npages(sglist, nelems); |
570 | bus_addr) >> IO_PAGE_SHIFT; | ||
571 | 479 | ||
572 | entry = ((bus_addr - iommu->page_table_map_base) >> IO_PAGE_SHIFT); | 480 | entry = ((bus_addr - iommu->page_table_map_base) >> IO_PAGE_SHIFT); |
573 | 481 | ||
diff --git a/arch/sparc64/kernel/systbls.S b/arch/sparc64/kernel/systbls.S index b8058906e727..adc62f490f36 100644 --- a/arch/sparc64/kernel/systbls.S +++ b/arch/sparc64/kernel/systbls.S | |||
@@ -80,7 +80,8 @@ sys_call_table32: | |||
80 | .word sys_fchmodat, sys_faccessat, compat_sys_pselect6, compat_sys_ppoll, sys_unshare | 80 | .word sys_fchmodat, sys_faccessat, compat_sys_pselect6, compat_sys_ppoll, sys_unshare |
81 | /*300*/ .word compat_sys_set_robust_list, compat_sys_get_robust_list, compat_sys_migrate_pages, compat_sys_mbind, compat_sys_get_mempolicy | 81 | /*300*/ .word compat_sys_set_robust_list, compat_sys_get_robust_list, compat_sys_migrate_pages, compat_sys_mbind, compat_sys_get_mempolicy |
82 | .word compat_sys_set_mempolicy, compat_sys_kexec_load, compat_sys_move_pages, sys_getcpu, compat_sys_epoll_pwait | 82 | .word compat_sys_set_mempolicy, compat_sys_kexec_load, compat_sys_move_pages, sys_getcpu, compat_sys_epoll_pwait |
83 | /*310*/ .word compat_sys_utimensat, compat_sys_signalfd, sys_ni_syscall, sys_eventfd, compat_sys_fallocate | 83 | /*310*/ .word compat_sys_utimensat, compat_sys_signalfd, sys_timerfd_create, sys_eventfd, compat_sys_fallocate |
84 | .word compat_sys_timerfd_settime, compat_sys_timerfd_gettime | ||
84 | 85 | ||
85 | #endif /* CONFIG_COMPAT */ | 86 | #endif /* CONFIG_COMPAT */ |
86 | 87 | ||
@@ -152,7 +153,8 @@ sys_call_table: | |||
152 | .word sys_fchmodat, sys_faccessat, sys_pselect6, sys_ppoll, sys_unshare | 153 | .word sys_fchmodat, sys_faccessat, sys_pselect6, sys_ppoll, sys_unshare |
153 | /*300*/ .word sys_set_robust_list, sys_get_robust_list, sys_migrate_pages, sys_mbind, sys_get_mempolicy | 154 | /*300*/ .word sys_set_robust_list, sys_get_robust_list, sys_migrate_pages, sys_mbind, sys_get_mempolicy |
154 | .word sys_set_mempolicy, sys_kexec_load, sys_move_pages, sys_getcpu, sys_epoll_pwait | 155 | .word sys_set_mempolicy, sys_kexec_load, sys_move_pages, sys_getcpu, sys_epoll_pwait |
155 | /*310*/ .word sys_utimensat, sys_signalfd, sys_ni_syscall, sys_eventfd, sys_fallocate | 156 | /*310*/ .word sys_utimensat, sys_signalfd, sys_timerfd_create, sys_eventfd, sys_fallocate |
157 | .word sys_timerfd_settime, sys_timerfd_gettime | ||
156 | 158 | ||
157 | #if defined(CONFIG_SUNOS_EMUL) || defined(CONFIG_SOLARIS_EMUL) || \ | 159 | #if defined(CONFIG_SUNOS_EMUL) || defined(CONFIG_SOLARIS_EMUL) || \ |
158 | defined(CONFIG_SOLARIS_EMUL_MODULE) | 160 | defined(CONFIG_SOLARIS_EMUL_MODULE) |
@@ -271,6 +273,7 @@ sunos_sys_table: | |||
271 | .word sunos_nosys, sunos_nosys, sunos_nosys | 273 | .word sunos_nosys, sunos_nosys, sunos_nosys |
272 | .word sunos_nosys | 274 | .word sunos_nosys |
273 | /*310*/ .word sunos_nosys, sunos_nosys, sunos_nosys | 275 | /*310*/ .word sunos_nosys, sunos_nosys, sunos_nosys |
274 | .word sunos_nosys, sunos_nosys | 276 | .word sunos_nosys, sunos_nosys, sunos_nosys |
277 | .word sunos_nosys | ||
275 | 278 | ||
276 | #endif | 279 | #endif |