Commit 840f51ff authored by Linus Torvalds's avatar Linus Torvalds

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: Fix IRQ ->set_affinity() methods.
  sparc: cpumask_of_node() should handle -1 as a node
  sparc64: Update defconfig.
  sparc: Add missing SW perf fault events.
  sparc64: Fully support both performance counters.
  sparc64: Add perf callchain support.
  sparc: convert to arch_gettimeoffset()
  sparc: leds_resource.end assigned to itself in clock_board_probe()
  sparc32: Fix page_to_phys().
  sparc: Simplify param.h by simply including <asm-generic/param.h>
  sparc32: Update defconfig.
  SPARC: use helpers for rlimits
  sparc: copy_from_user() should not return -EFAULT
parents e2197787 1091ce62
...@@ -64,8 +64,11 @@ config BITS ...@@ -64,8 +64,11 @@ config BITS
default 64 if SPARC64 default 64 if SPARC64
config GENERIC_TIME config GENERIC_TIME
def_bool y
config ARCH_USES_GETTIMEOFFSET
bool bool
default y if SPARC64 default y if SPARC32
config GENERIC_CMOS_UPDATE config GENERIC_CMOS_UPDATE
bool bool
......
# #
# Automatically generated make config: don't edit # Automatically generated make config: don't edit
# Linux kernel version: 2.6.31 # Linux kernel version: 2.6.33-rc2
# Wed Sep 16 00:03:43 2009 # Mon Jan 11 23:20:31 2010
# #
# CONFIG_64BIT is not set # CONFIG_64BIT is not set
CONFIG_SPARC=y CONFIG_SPARC=y
...@@ -41,6 +41,7 @@ CONFIG_POSIX_MQUEUE_SYSCTL=y ...@@ -41,6 +41,7 @@ CONFIG_POSIX_MQUEUE_SYSCTL=y
# #
CONFIG_TREE_RCU=y CONFIG_TREE_RCU=y
# CONFIG_TREE_PREEMPT_RCU is not set # CONFIG_TREE_PREEMPT_RCU is not set
# CONFIG_TINY_RCU is not set
# CONFIG_RCU_TRACE is not set # CONFIG_RCU_TRACE is not set
CONFIG_RCU_FANOUT=32 CONFIG_RCU_FANOUT=32
# CONFIG_RCU_FANOUT_EXACT is not set # CONFIG_RCU_FANOUT_EXACT is not set
...@@ -88,21 +89,21 @@ CONFIG_TIMERFD=y ...@@ -88,21 +89,21 @@ CONFIG_TIMERFD=y
CONFIG_EVENTFD=y CONFIG_EVENTFD=y
CONFIG_SHMEM=y CONFIG_SHMEM=y
CONFIG_AIO=y CONFIG_AIO=y
CONFIG_HAVE_PERF_COUNTERS=y CONFIG_HAVE_PERF_EVENTS=y
CONFIG_PERF_USE_VMALLOC=y
# #
# Performance Counters # Kernel Performance Events And Counters
# #
# CONFIG_PERF_EVENTS is not set
# CONFIG_PERF_COUNTERS is not set # CONFIG_PERF_COUNTERS is not set
CONFIG_VM_EVENT_COUNTERS=y CONFIG_VM_EVENT_COUNTERS=y
CONFIG_PCI_QUIRKS=y CONFIG_PCI_QUIRKS=y
# CONFIG_STRIP_ASM_SYMS is not set
CONFIG_COMPAT_BRK=y CONFIG_COMPAT_BRK=y
CONFIG_SLAB=y CONFIG_SLAB=y
# CONFIG_SLUB is not set # CONFIG_SLUB is not set
# CONFIG_SLOB is not set # CONFIG_SLOB is not set
# CONFIG_PROFILING is not set # CONFIG_PROFILING is not set
# CONFIG_MARKERS is not set
CONFIG_HAVE_OPROFILE=y CONFIG_HAVE_OPROFILE=y
CONFIG_HAVE_ARCH_TRACEHOOK=y CONFIG_HAVE_ARCH_TRACEHOOK=y
CONFIG_HAVE_DMA_ATTRS=y CONFIG_HAVE_DMA_ATTRS=y
...@@ -131,14 +132,41 @@ CONFIG_LBDAF=y ...@@ -131,14 +132,41 @@ CONFIG_LBDAF=y
# IO Schedulers # IO Schedulers
# #
CONFIG_IOSCHED_NOOP=y CONFIG_IOSCHED_NOOP=y
CONFIG_IOSCHED_AS=y
CONFIG_IOSCHED_DEADLINE=y CONFIG_IOSCHED_DEADLINE=y
CONFIG_IOSCHED_CFQ=y CONFIG_IOSCHED_CFQ=y
# CONFIG_DEFAULT_AS is not set
# CONFIG_DEFAULT_DEADLINE is not set # CONFIG_DEFAULT_DEADLINE is not set
CONFIG_DEFAULT_CFQ=y CONFIG_DEFAULT_CFQ=y
# CONFIG_DEFAULT_NOOP is not set # CONFIG_DEFAULT_NOOP is not set
CONFIG_DEFAULT_IOSCHED="cfq" CONFIG_DEFAULT_IOSCHED="cfq"
# CONFIG_INLINE_SPIN_TRYLOCK is not set
# CONFIG_INLINE_SPIN_TRYLOCK_BH is not set
# CONFIG_INLINE_SPIN_LOCK is not set
# CONFIG_INLINE_SPIN_LOCK_BH is not set
# CONFIG_INLINE_SPIN_LOCK_IRQ is not set
# CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set
CONFIG_INLINE_SPIN_UNLOCK=y
# CONFIG_INLINE_SPIN_UNLOCK_BH is not set
CONFIG_INLINE_SPIN_UNLOCK_IRQ=y
# CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set
# CONFIG_INLINE_READ_TRYLOCK is not set
# CONFIG_INLINE_READ_LOCK is not set
# CONFIG_INLINE_READ_LOCK_BH is not set
# CONFIG_INLINE_READ_LOCK_IRQ is not set
# CONFIG_INLINE_READ_LOCK_IRQSAVE is not set
CONFIG_INLINE_READ_UNLOCK=y
# CONFIG_INLINE_READ_UNLOCK_BH is not set
CONFIG_INLINE_READ_UNLOCK_IRQ=y
# CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set
# CONFIG_INLINE_WRITE_TRYLOCK is not set
# CONFIG_INLINE_WRITE_LOCK is not set
# CONFIG_INLINE_WRITE_LOCK_BH is not set
# CONFIG_INLINE_WRITE_LOCK_IRQ is not set
# CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set
CONFIG_INLINE_WRITE_UNLOCK=y
# CONFIG_INLINE_WRITE_UNLOCK_BH is not set
CONFIG_INLINE_WRITE_UNLOCK_IRQ=y
# CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set
# CONFIG_MUTEX_SPIN_ON_OWNER is not set
# CONFIG_FREEZER is not set # CONFIG_FREEZER is not set
# #
...@@ -168,8 +196,7 @@ CONFIG_SPLIT_PTLOCK_CPUS=4 ...@@ -168,8 +196,7 @@ CONFIG_SPLIT_PTLOCK_CPUS=4
# CONFIG_PHYS_ADDR_T_64BIT is not set # CONFIG_PHYS_ADDR_T_64BIT is not set
CONFIG_ZONE_DMA_FLAG=1 CONFIG_ZONE_DMA_FLAG=1
CONFIG_BOUNCE=y CONFIG_BOUNCE=y
CONFIG_HAVE_MLOCK=y # CONFIG_KSM is not set
CONFIG_HAVE_MLOCKED_PAGE_BIT=y
CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
CONFIG_SUN_PM=y CONFIG_SUN_PM=y
# CONFIG_SPARC_LED is not set # CONFIG_SPARC_LED is not set
...@@ -257,6 +284,7 @@ CONFIG_INET6_XFRM_MODE_TUNNEL=m ...@@ -257,6 +284,7 @@ CONFIG_INET6_XFRM_MODE_TUNNEL=m
CONFIG_INET6_XFRM_MODE_BEET=m CONFIG_INET6_XFRM_MODE_BEET=m
# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set # CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
CONFIG_IPV6_SIT=m CONFIG_IPV6_SIT=m
# CONFIG_IPV6_SIT_6RD is not set
CONFIG_IPV6_NDISC_NODETYPE=y CONFIG_IPV6_NDISC_NODETYPE=y
CONFIG_IPV6_TUNNEL=m CONFIG_IPV6_TUNNEL=m
# CONFIG_IPV6_MULTIPLE_TABLES is not set # CONFIG_IPV6_MULTIPLE_TABLES is not set
...@@ -295,9 +323,6 @@ CONFIG_NET_PKTGEN=m ...@@ -295,9 +323,6 @@ CONFIG_NET_PKTGEN=m
# CONFIG_AF_RXRPC is not set # CONFIG_AF_RXRPC is not set
CONFIG_WIRELESS=y CONFIG_WIRELESS=y
# CONFIG_CFG80211 is not set # CONFIG_CFG80211 is not set
CONFIG_CFG80211_DEFAULT_PS_VALUE=0
CONFIG_WIRELESS_OLD_REGULATORY=y
# CONFIG_WIRELESS_EXT is not set
# CONFIG_LIB80211 is not set # CONFIG_LIB80211 is not set
# #
...@@ -335,6 +360,10 @@ CONFIG_BLK_DEV=y ...@@ -335,6 +360,10 @@ CONFIG_BLK_DEV=y
# CONFIG_BLK_DEV_COW_COMMON is not set # CONFIG_BLK_DEV_COW_COMMON is not set
CONFIG_BLK_DEV_LOOP=m CONFIG_BLK_DEV_LOOP=m
CONFIG_BLK_DEV_CRYPTOLOOP=m CONFIG_BLK_DEV_CRYPTOLOOP=m
#
# DRBD disabled because PROC_FS, INET or CONNECTOR not selected
#
# CONFIG_BLK_DEV_NBD is not set # CONFIG_BLK_DEV_NBD is not set
# CONFIG_BLK_DEV_SX8 is not set # CONFIG_BLK_DEV_SX8 is not set
CONFIG_BLK_DEV_RAM=y CONFIG_BLK_DEV_RAM=y
...@@ -398,8 +427,11 @@ CONFIG_SCSI_LOWLEVEL=y ...@@ -398,8 +427,11 @@ CONFIG_SCSI_LOWLEVEL=y
# CONFIG_ISCSI_TCP is not set # CONFIG_ISCSI_TCP is not set
# CONFIG_SCSI_CXGB3_ISCSI is not set # CONFIG_SCSI_CXGB3_ISCSI is not set
# CONFIG_SCSI_BNX2_ISCSI is not set # CONFIG_SCSI_BNX2_ISCSI is not set
# CONFIG_BE2ISCSI is not set
# CONFIG_BLK_DEV_3W_XXXX_RAID is not set # CONFIG_BLK_DEV_3W_XXXX_RAID is not set
# CONFIG_SCSI_HPSA is not set
# CONFIG_SCSI_3W_9XXX is not set # CONFIG_SCSI_3W_9XXX is not set
# CONFIG_SCSI_3W_SAS is not set
# CONFIG_SCSI_ACARD is not set # CONFIG_SCSI_ACARD is not set
# CONFIG_SCSI_AACRAID is not set # CONFIG_SCSI_AACRAID is not set
# CONFIG_SCSI_AIC7XXX is not set # CONFIG_SCSI_AIC7XXX is not set
...@@ -434,7 +466,9 @@ CONFIG_SCSI_QLOGICPTI=m ...@@ -434,7 +466,9 @@ CONFIG_SCSI_QLOGICPTI=m
# CONFIG_SCSI_DEBUG is not set # CONFIG_SCSI_DEBUG is not set
CONFIG_SCSI_SUNESP=y CONFIG_SCSI_SUNESP=y
# CONFIG_SCSI_PMCRAID is not set # CONFIG_SCSI_PMCRAID is not set
# CONFIG_SCSI_PM8001 is not set
# CONFIG_SCSI_SRP is not set # CONFIG_SCSI_SRP is not set
# CONFIG_SCSI_BFA_FC is not set
# CONFIG_SCSI_DH is not set # CONFIG_SCSI_DH is not set
# CONFIG_SCSI_OSD_INITIATOR is not set # CONFIG_SCSI_OSD_INITIATOR is not set
# CONFIG_ATA is not set # CONFIG_ATA is not set
...@@ -450,7 +484,7 @@ CONFIG_SCSI_SUNESP=y ...@@ -450,7 +484,7 @@ CONFIG_SCSI_SUNESP=y
# #
# #
# See the help texts for more information. # The newer stack is recommended.
# #
# CONFIG_FIREWIRE is not set # CONFIG_FIREWIRE is not set
# CONFIG_IEEE1394 is not set # CONFIG_IEEE1394 is not set
...@@ -487,6 +521,7 @@ CONFIG_SUNQE=m ...@@ -487,6 +521,7 @@ CONFIG_SUNQE=m
# CONFIG_NET_PCI is not set # CONFIG_NET_PCI is not set
# CONFIG_B44 is not set # CONFIG_B44 is not set
# CONFIG_KS8842 is not set # CONFIG_KS8842 is not set
# CONFIG_KS8851_MLL is not set
# CONFIG_ATL2 is not set # CONFIG_ATL2 is not set
CONFIG_NETDEV_1000=y CONFIG_NETDEV_1000=y
# CONFIG_ACENIC is not set # CONFIG_ACENIC is not set
...@@ -546,6 +581,7 @@ CONFIG_CHELSIO_T3_DEPENDS=y ...@@ -546,6 +581,7 @@ CONFIG_CHELSIO_T3_DEPENDS=y
# CONFIG_NETCONSOLE is not set # CONFIG_NETCONSOLE is not set
# CONFIG_NETPOLL is not set # CONFIG_NETPOLL is not set
# CONFIG_NET_POLL_CONTROLLER is not set # CONFIG_NET_POLL_CONTROLLER is not set
# CONFIG_VMXNET3 is not set
# CONFIG_ISDN is not set # CONFIG_ISDN is not set
# CONFIG_PHONE is not set # CONFIG_PHONE is not set
...@@ -555,6 +591,7 @@ CONFIG_CHELSIO_T3_DEPENDS=y ...@@ -555,6 +591,7 @@ CONFIG_CHELSIO_T3_DEPENDS=y
CONFIG_INPUT=y CONFIG_INPUT=y
# CONFIG_INPUT_FF_MEMLESS is not set # CONFIG_INPUT_FF_MEMLESS is not set
# CONFIG_INPUT_POLLDEV is not set # CONFIG_INPUT_POLLDEV is not set
# CONFIG_INPUT_SPARSEKMAP is not set
# #
# Userland interfaces # Userland interfaces
...@@ -574,6 +611,7 @@ CONFIG_INPUT_KEYBOARD=y ...@@ -574,6 +611,7 @@ CONFIG_INPUT_KEYBOARD=y
CONFIG_KEYBOARD_ATKBD=m CONFIG_KEYBOARD_ATKBD=m
# CONFIG_KEYBOARD_LKKBD is not set # CONFIG_KEYBOARD_LKKBD is not set
# CONFIG_KEYBOARD_NEWTON is not set # CONFIG_KEYBOARD_NEWTON is not set
# CONFIG_KEYBOARD_OPENCORES is not set
# CONFIG_KEYBOARD_STOWAWAY is not set # CONFIG_KEYBOARD_STOWAWAY is not set
CONFIG_KEYBOARD_SUNKBD=m CONFIG_KEYBOARD_SUNKBD=m
# CONFIG_KEYBOARD_XTKBD is not set # CONFIG_KEYBOARD_XTKBD is not set
...@@ -604,6 +642,7 @@ CONFIG_SERIO_SERPORT=m ...@@ -604,6 +642,7 @@ CONFIG_SERIO_SERPORT=m
# CONFIG_SERIO_PCIPS2 is not set # CONFIG_SERIO_PCIPS2 is not set
CONFIG_SERIO_LIBPS2=m CONFIG_SERIO_LIBPS2=m
# CONFIG_SERIO_RAW is not set # CONFIG_SERIO_RAW is not set
# CONFIG_SERIO_ALTERA_PS2 is not set
# CONFIG_GAMEPORT is not set # CONFIG_GAMEPORT is not set
# #
...@@ -636,6 +675,7 @@ CONFIG_SERIAL_CORE=y ...@@ -636,6 +675,7 @@ CONFIG_SERIAL_CORE=y
CONFIG_SERIAL_CORE_CONSOLE=y CONFIG_SERIAL_CORE_CONSOLE=y
CONFIG_CONSOLE_POLL=y CONFIG_CONSOLE_POLL=y
# CONFIG_SERIAL_JSM is not set # CONFIG_SERIAL_JSM is not set
# CONFIG_SERIAL_GRLIB_GAISLER_APBUART is not set
CONFIG_UNIX98_PTYS=y CONFIG_UNIX98_PTYS=y
# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set # CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
CONFIG_LEGACY_PTYS=y CONFIG_LEGACY_PTYS=y
...@@ -661,6 +701,11 @@ CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y ...@@ -661,6 +701,11 @@ CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y
# CONFIG_POWER_SUPPLY is not set # CONFIG_POWER_SUPPLY is not set
CONFIG_HWMON=y CONFIG_HWMON=y
# CONFIG_HWMON_VID is not set # CONFIG_HWMON_VID is not set
# CONFIG_HWMON_DEBUG_CHIP is not set
#
# Native drivers
#
# CONFIG_SENSORS_I5K_AMB is not set # CONFIG_SENSORS_I5K_AMB is not set
# CONFIG_SENSORS_F71805F is not set # CONFIG_SENSORS_F71805F is not set
# CONFIG_SENSORS_F71882FG is not set # CONFIG_SENSORS_F71882FG is not set
...@@ -675,9 +720,7 @@ CONFIG_HWMON=y ...@@ -675,9 +720,7 @@ CONFIG_HWMON=y
# CONFIG_SENSORS_VT8231 is not set # CONFIG_SENSORS_VT8231 is not set
# CONFIG_SENSORS_W83627HF is not set # CONFIG_SENSORS_W83627HF is not set
# CONFIG_SENSORS_W83627EHF is not set # CONFIG_SENSORS_W83627EHF is not set
# CONFIG_HWMON_DEBUG_CHIP is not set
# CONFIG_THERMAL is not set # CONFIG_THERMAL is not set
# CONFIG_THERMAL_HWMON is not set
# CONFIG_WATCHDOG is not set # CONFIG_WATCHDOG is not set
CONFIG_SSB_POSSIBLE=y CONFIG_SSB_POSSIBLE=y
...@@ -699,6 +742,7 @@ CONFIG_SSB_POSSIBLE=y ...@@ -699,6 +742,7 @@ CONFIG_SSB_POSSIBLE=y
# #
# Graphics support # Graphics support
# #
CONFIG_VGA_ARB=y
# CONFIG_VGASTATE is not set # CONFIG_VGASTATE is not set
# CONFIG_VIDEO_OUTPUT_CONTROL is not set # CONFIG_VIDEO_OUTPUT_CONTROL is not set
# CONFIG_FB is not set # CONFIG_FB is not set
...@@ -776,7 +820,9 @@ CONFIG_RTC_INTF_DEV=y ...@@ -776,7 +820,9 @@ CONFIG_RTC_INTF_DEV=y
# CONFIG_RTC_DRV_M48T86 is not set # CONFIG_RTC_DRV_M48T86 is not set
# CONFIG_RTC_DRV_M48T35 is not set # CONFIG_RTC_DRV_M48T35 is not set
CONFIG_RTC_DRV_M48T59=y CONFIG_RTC_DRV_M48T59=y
# CONFIG_RTC_DRV_MSM6242 is not set
# CONFIG_RTC_DRV_BQ4802 is not set # CONFIG_RTC_DRV_BQ4802 is not set
# CONFIG_RTC_DRV_RP5C01 is not set
# CONFIG_RTC_DRV_V3020 is not set # CONFIG_RTC_DRV_V3020 is not set
# #
...@@ -955,6 +1001,7 @@ CONFIG_TRACE_IRQFLAGS_SUPPORT=y ...@@ -955,6 +1001,7 @@ CONFIG_TRACE_IRQFLAGS_SUPPORT=y
CONFIG_ENABLE_MUST_CHECK=y CONFIG_ENABLE_MUST_CHECK=y
CONFIG_FRAME_WARN=1024 CONFIG_FRAME_WARN=1024
CONFIG_MAGIC_SYSRQ=y CONFIG_MAGIC_SYSRQ=y
# CONFIG_STRIP_ASM_SYMS is not set
# CONFIG_UNUSED_SYMBOLS is not set # CONFIG_UNUSED_SYMBOLS is not set
# CONFIG_DEBUG_FS is not set # CONFIG_DEBUG_FS is not set
# CONFIG_HEADERS_CHECK is not set # CONFIG_HEADERS_CHECK is not set
...@@ -1003,9 +1050,9 @@ CONFIG_KGDB=y ...@@ -1003,9 +1050,9 @@ CONFIG_KGDB=y
CONFIG_KGDB_SERIAL_CONSOLE=y CONFIG_KGDB_SERIAL_CONSOLE=y
CONFIG_KGDB_TESTS=y CONFIG_KGDB_TESTS=y
# CONFIG_KGDB_TESTS_ON_BOOT is not set # CONFIG_KGDB_TESTS_ON_BOOT is not set
# CONFIG_KMEMCHECK is not set
# CONFIG_DEBUG_STACK_USAGE is not set # CONFIG_DEBUG_STACK_USAGE is not set
# CONFIG_STACK_DEBUG is not set # CONFIG_STACK_DEBUG is not set
# CONFIG_DEBUG_STRICT_USER_COPY_CHECKS is not set
# #
# Security options # Security options
...@@ -1013,7 +1060,11 @@ CONFIG_KGDB_TESTS=y ...@@ -1013,7 +1060,11 @@ CONFIG_KGDB_TESTS=y
# CONFIG_KEYS is not set # CONFIG_KEYS is not set
# CONFIG_SECURITY is not set # CONFIG_SECURITY is not set
# CONFIG_SECURITYFS is not set # CONFIG_SECURITYFS is not set
# CONFIG_SECURITY_FILE_CAPABILITIES is not set # CONFIG_DEFAULT_SECURITY_SELINUX is not set
# CONFIG_DEFAULT_SECURITY_SMACK is not set
# CONFIG_DEFAULT_SECURITY_TOMOYO is not set
CONFIG_DEFAULT_SECURITY_DAC=y
CONFIG_DEFAULT_SECURITY=""
CONFIG_CRYPTO=y CONFIG_CRYPTO=y
# #
......
This diff is collapsed.
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
#include <asm/page.h> /* IO address mapping routines need this */ #include <asm/page.h> /* IO address mapping routines need this */
#include <asm/system.h> #include <asm/system.h>
#define page_to_phys(page) (((page) - mem_map) << PAGE_SHIFT) #define page_to_phys(page) (page_to_pfn(page) << PAGE_SHIFT)
static inline u32 flip_dword (u32 l) static inline u32 flip_dword (u32 l)
{ {
......
...@@ -143,7 +143,7 @@ extern unsigned long pfn_base; ...@@ -143,7 +143,7 @@ extern unsigned long pfn_base;
#define phys_to_virt __va #define phys_to_virt __va
#define ARCH_PFN_OFFSET (pfn_base) #define ARCH_PFN_OFFSET (pfn_base)
#define virt_to_page(kaddr) (mem_map + ((((unsigned long)(kaddr)-PAGE_OFFSET)>>PAGE_SHIFT))) #define virt_to_page(kaddr) pfn_to_page(__pa(kaddr) >> PAGE_SHIFT)
#define pfn_valid(pfn) (((pfn) >= (pfn_base)) && (((pfn)-(pfn_base)) < max_mapnr)) #define pfn_valid(pfn) (((pfn) >= (pfn_base)) && (((pfn)-(pfn_base)) < max_mapnr))
#define virt_addr_valid(kaddr) ((((unsigned long)(kaddr)-PAGE_OFFSET)>>PAGE_SHIFT) < max_mapnr) #define virt_addr_valid(kaddr) ((((unsigned long)(kaddr)-PAGE_OFFSET)>>PAGE_SHIFT) < max_mapnr)
......
#ifndef _ASMSPARC_PARAM_H #ifndef _ASMSPARC_PARAM_H
#define _ASMSPARC_PARAM_H #define _ASMSPARC_PARAM_H
#ifdef __KERNEL__
# define HZ CONFIG_HZ /* Internal kernel timer frequency */
# define USER_HZ 100 /* .. some user interfaces are in "ticks" */
# define CLOCKS_PER_SEC (USER_HZ)
#endif
#ifndef HZ
#define HZ 100
#endif
#define EXEC_PAGESIZE 8192 /* Thanks for sun4's we carry baggage... */ #define EXEC_PAGESIZE 8192 /* Thanks for sun4's we carry baggage... */
#include <asm-generic/param.h>
#ifndef NOGROUP #endif /* _ASMSPARC_PARAM_H */
#define NOGROUP (-1)
#endif
#define MAXHOSTNAMELEN 64 /* max length of hostname */
#endif
...@@ -12,4 +12,5 @@ ...@@ -12,4 +12,5 @@
typedef unsigned long cycles_t; typedef unsigned long cycles_t;
#define get_cycles() (0) #define get_cycles() (0)
extern u32 (*do_arch_gettimeoffset)(void);
#endif #endif
...@@ -12,7 +12,9 @@ static inline int cpu_to_node(int cpu) ...@@ -12,7 +12,9 @@ static inline int cpu_to_node(int cpu)
#define parent_node(node) (node) #define parent_node(node) (node)
#define cpumask_of_node(node) (&numa_cpumask_lookup_table[node]) #define cpumask_of_node(node) ((node) == -1 ? \
cpu_all_mask : \
&numa_cpumask_lookup_table[node])
struct pci_bus; struct pci_bus;
#ifdef CONFIG_PCI #ifdef CONFIG_PCI
......
...@@ -274,7 +274,7 @@ static inline unsigned long copy_from_user(void *to, const void __user *from, un ...@@ -274,7 +274,7 @@ static inline unsigned long copy_from_user(void *to, const void __user *from, un
if (unlikely(sz != -1 && sz < n)) { if (unlikely(sz != -1 && sz < n)) {
copy_from_user_overflow(); copy_from_user_overflow();
return -EFAULT; return n;
} }
if (n && __access_ok((unsigned long) from, n)) if (n && __access_ok((unsigned long) from, n))
......
...@@ -221,8 +221,8 @@ extern unsigned long copy_from_user_fixup(void *to, const void __user *from, ...@@ -221,8 +221,8 @@ extern unsigned long copy_from_user_fixup(void *to, const void __user *from,
static inline unsigned long __must_check static inline unsigned long __must_check
copy_from_user(void *to, const void __user *from, unsigned long size) copy_from_user(void *to, const void __user *from, unsigned long size)
{ {
unsigned long ret = (unsigned long) -EFAULT;
int sz = __compiletime_object_size(to); int sz = __compiletime_object_size(to);
unsigned long ret = size;
if (likely(sz == -1 || sz >= size)) { if (likely(sz == -1 || sz >= size)) {
ret = ___copy_from_user(to, from, size); ret = ___copy_from_user(to, from, size);
......
...@@ -99,7 +99,7 @@ static int __devinit clock_board_probe(struct of_device *op, ...@@ -99,7 +99,7 @@ static int __devinit clock_board_probe(struct of_device *op,
p->leds_resource.start = (unsigned long) p->leds_resource.start = (unsigned long)
(p->clock_regs + CLOCK_CTRL); (p->clock_regs + CLOCK_CTRL);
p->leds_resource.end = p->leds_resource.end; p->leds_resource.end = p->leds_resource.start;
p->leds_resource.name = "leds"; p->leds_resource.name = "leds";
p->leds_pdev.name = "sunfire-clockboard-leds"; p->leds_pdev.name = "sunfire-clockboard-leds";
...@@ -194,7 +194,7 @@ static int __devinit fhc_probe(struct of_device *op, ...@@ -194,7 +194,7 @@ static int __devinit fhc_probe(struct of_device *op,
if (!p->central) { if (!p->central) {
p->leds_resource.start = (unsigned long) p->leds_resource.start = (unsigned long)
(p->pregs + FHC_PREGS_CTRL); (p->pregs + FHC_PREGS_CTRL);
p->leds_resource.end = p->leds_resource.end; p->leds_resource.end = p->leds_resource.start;
p->leds_resource.name = "leds"; p->leds_resource.name = "leds";
p->leds_pdev.name = "sunfire-fhc-leds"; p->leds_pdev.name = "sunfire-fhc-leds";
......
...@@ -250,12 +250,12 @@ struct irq_handler_data { ...@@ -250,12 +250,12 @@ struct irq_handler_data {
}; };
#ifdef CONFIG_SMP #ifdef CONFIG_SMP
static int irq_choose_cpu(unsigned int virt_irq) static int irq_choose_cpu(unsigned int virt_irq, const struct cpumask *affinity)
{ {
cpumask_t mask; cpumask_t mask;
int cpuid; int cpuid;
cpumask_copy(&mask, irq_desc[virt_irq].affinity); cpumask_copy(&mask, affinity);
if (cpus_equal(mask, cpu_online_map)) { if (cpus_equal(mask, cpu_online_map)) {
cpuid = map_to_cpu(virt_irq); cpuid = map_to_cpu(virt_irq);
} else { } else {
...@@ -268,7 +268,7 @@ static int irq_choose_cpu(unsigned int virt_irq) ...@@ -268,7 +268,7 @@ static int irq_choose_cpu(unsigned int virt_irq)
return cpuid; return cpuid;
} }
#else #else
static int irq_choose_cpu(unsigned int virt_irq) static int irq_choose_cpu(unsigned int virt_irq, const struct cpumask *affinity)
{ {
return real_hard_smp_processor_id(); return real_hard_smp_processor_id();
} }
...@@ -282,7 +282,8 @@ static void sun4u_irq_enable(unsigned int virt_irq) ...@@ -282,7 +282,8 @@ static void sun4u_irq_enable(unsigned int virt_irq)
unsigned long cpuid, imap, val; unsigned long cpuid, imap, val;
unsigned int tid; unsigned int tid;
cpuid = irq_choose_cpu(virt_irq); cpuid = irq_choose_cpu(virt_irq,
irq_desc[virt_irq].affinity);
imap = data->imap; imap = data->imap;
tid = sun4u_compute_tid(imap, cpuid); tid = sun4u_compute_tid(imap, cpuid);
...@@ -299,7 +300,24 @@ static void sun4u_irq_enable(unsigned int virt_irq) ...@@ -299,7 +300,24 @@ static void sun4u_irq_enable(unsigned int virt_irq)
static int sun4u_set_affinity(unsigned int virt_irq, static int sun4u_set_affinity(unsigned int virt_irq,
const struct cpumask *mask) const struct cpumask *mask)
{ {
sun4u_irq_enable(virt_irq); struct irq_handler_data *data = get_irq_chip_data(virt_irq);
if (likely(data)) {
unsigned long cpuid, imap, val;
unsigned int tid;
cpuid = irq_choose_cpu(virt_irq, mask);
imap = data->imap;
tid = sun4u_compute_tid(imap, cpuid);
val = upa_readq(imap);
val &= ~(IMAP_TID_UPA | IMAP_TID_JBUS |
IMAP_AID_SAFARI | IMAP_NID_SAFARI);
val |= tid | IMAP_VALID;
upa_writeq(val, imap);
upa_writeq(ICLR_IDLE, data->iclr);
}
return 0; return 0;
} }
...@@ -340,7 +358,8 @@ static void sun4u_irq_eoi(unsigned int virt_irq) ...@@ -340,7 +358,8 @@ static void sun4u_irq_eoi(unsigned int virt_irq)
static void sun4v_irq_enable(unsigned int virt_irq) static void sun4v_irq_enable(unsigned int virt_irq)
{ {
unsigned int ino = virt_irq_table[virt_irq].dev_ino; unsigned int ino = virt_irq_table[virt_irq].dev_ino;
unsigned long cpuid = irq_choose_cpu(virt_irq); unsigned long cpuid = irq_choose_cpu(virt_irq,
irq_desc[virt_irq].affinity);
int err; int err;
err = sun4v_intr_settarget(ino, cpuid); err = sun4v_intr_settarget(ino, cpuid);
...@@ -361,7 +380,7 @@ static int sun4v_set_affinity(unsigned int virt_irq, ...@@ -361,7 +380,7 @@ static int sun4v_set_affinity(unsigned int virt_irq,
const struct cpumask *mask) const struct cpumask *mask)
{ {
unsigned int ino = virt_irq_table[virt_irq].dev_ino; unsigned int ino = virt_irq_table[virt_irq].dev_ino;
unsigned long cpuid = irq_choose_cpu(virt_irq); unsigned long cpuid = irq_choose_cpu(virt_irq, mask);
int err; int err;
err = sun4v_intr_settarget(ino, cpuid); err = sun4v_intr_settarget(ino, cpuid);
...@@ -403,7 +422,7 @@ static void sun4v_virq_enable(unsigned int virt_irq) ...@@ -403,7 +422,7 @@ static void sun4v_virq_enable(unsigned int virt_irq)
unsigned long cpuid, dev_handle, dev_ino; unsigned long cpuid, dev_handle, dev_ino;
int err; int err;
cpuid = irq_choose_cpu(virt_irq); cpuid = irq_choose_cpu(virt_irq, irq_desc[virt_irq].affinity);
dev_handle = virt_irq_table[virt_irq].dev_handle; dev_handle = virt_irq_table[virt_irq].dev_handle;
dev_ino = virt_irq_table[virt_irq].dev_ino; dev_ino = virt_irq_table[virt_irq].dev_ino;
...@@ -433,7 +452,7 @@ static int sun4v_virt_set_affinity(unsigned int virt_irq, ...@@ -433,7 +452,7 @@ static int sun4v_virt_set_affinity(unsigned int virt_irq,
unsigned long cpuid, dev_handle, dev_ino; unsigned long cpuid, dev_handle, dev_ino;
int err; int err;
cpuid = irq_choose_cpu(virt_irq); cpuid = irq_choose_cpu(virt_irq, mask);
dev_handle = virt_irq_table[virt_irq].dev_handle; dev_handle = virt_irq_table[virt_irq].dev_handle;
dev_ino = virt_irq_table[virt_irq].dev_ino; dev_ino = virt_irq_table[virt_irq].dev_ino;
......
...@@ -30,6 +30,7 @@ ...@@ -30,6 +30,7 @@
#include <asm/oplib.h> #include <asm/oplib.h>
#include <asm/prom.h> #include <asm/prom.h>
#include <asm/pcic.h> #include <asm/pcic.h>
#include <asm/timex.h>
#include <asm/timer.h> #include <asm/timer.h>
#include <asm/uaccess.h> #include <asm/uaccess.h>
#include <asm/irq_regs.h> #include <asm/irq_regs.h>
...@@ -163,8 +164,6 @@ void __iomem *pcic_regs; ...@@ -163,8 +164,6 @@ void __iomem *pcic_regs;
volatile int pcic_speculative; volatile int pcic_speculative;
volatile int pcic_trapped; volatile int pcic_trapped;
static void pci_do_gettimeofday(struct timeval *tv);
static int pci_do_settimeofday(struct timespec *tv);
#define CONFIG_CMD(bus, device_fn, where) (0x80000000 | (((unsigned int)bus) << 16) | (((unsigned int)device_fn) << 8) | (where & ~3)) #define CONFIG_CMD(bus, device_fn, where) (0x80000000 | (((unsigned int)bus) << 16) | (((unsigned int)device_fn) << 8) | (where & ~3))
...@@ -716,19 +715,27 @@ static irqreturn_t pcic_timer_handler (int irq, void *h) ...@@ -716,19 +715,27 @@ static irqreturn_t pcic_timer_handler (int irq, void *h)
#define USECS_PER_JIFFY 10000 /* We have 100HZ "standard" timer for sparc */ #define USECS_PER_JIFFY 10000 /* We have 100HZ "standard" timer for sparc */
#define TICK_TIMER_LIMIT ((100*1000000/4)/100) #define TICK_TIMER_LIMIT ((100*1000000/4)/100)
u32 pci_gettimeoffset(void)
{
/*
* We divide all by 100
* to have microsecond resolution and to avoid overflow
*/
unsigned long count =
readl(pcic0.pcic_regs+PCI_SYS_COUNTER) & ~PCI_SYS_COUNTER_OVERFLOW;
count = ((count/100)*USECS_PER_JIFFY) / (TICK_TIMER_LIMIT/100);
return count * 1000;
}
void __init pci_time_init(void) void __init pci_time_init(void)
{ {
struct linux_pcic *pcic = &pcic0; struct linux_pcic *pcic = &pcic0;
unsigned long v; unsigned long v;
int timer_irq, irq; int timer_irq, irq;
/* A hack until do_gettimeofday prototype is moved to arch specific headers do_arch_gettimeoffset = pci_gettimeoffset;
and btfixupped. Patch do_gettimeofday with ba pci_do_gettimeofday; nop */
((unsigned int *)do_gettimeofday)[0] =
0x10800000 | ((((unsigned long)pci_do_gettimeofday -
(unsigned long)do_gettimeofday) >> 2) & 0x003fffff);
((unsigned int *)do_gettimeofday)[1] = 0x01000000;
BTFIXUPSET_CALL(bus_do_settimeofday, pci_do_settimeofday, BTFIXUPCALL_NORM);
btfixup(); btfixup();
writel (TICK_TIMER_LIMIT, pcic->pcic_regs+PCI_SYS_LIMIT); writel (TICK_TIMER_LIMIT, pcic->pcic_regs+PCI_SYS_LIMIT);
...@@ -746,84 +753,6 @@ void __init pci_time_init(void) ...@@ -746,84 +753,6 @@ void __init pci_time_init(void)
local_irq_enable(); local_irq_enable();
} }
static inline unsigned long do_gettimeoffset(void)
{
/*
* We divide all by 100
* to have microsecond resolution and to avoid overflow
*/
unsigned long count =
readl(pcic0.pcic_regs+PCI_SYS_COUNTER) & ~PCI_SYS_COUNTER_OVERFLOW;
count = ((count/100)*USECS_PER_JIFFY) / (TICK_TIMER_LIMIT/100);
return count;
}
static void pci_do_gettimeofday(struct timeval *tv)
{
unsigned long flags;
unsigned long seq;
unsigned long usec, sec;
unsigned long max_ntp_tick = tick_usec - tickadj;
do {
seq = read_seqbegin_irqsave(&xtime_lock, flags);
usec = do_gettimeoffset();
/*
* If time_adjust is negative then NTP is slowing the clock
* so make sure not to go into next possible interval.
* Better to lose some accuracy than have time go backwards..
*/
if (unlikely(time_adjust < 0))
usec = min(usec, max_ntp_tick);
sec = xtime.tv_sec;
usec += (xtime.tv_nsec / 1000);
} while (read_seqretry_irqrestore(&xtime_lock, seq, flags));
while (usec >= 1000000) {
usec -= 1000000;
sec++;
}
tv->tv_sec = sec;
tv->tv_usec = usec;
}
static int pci_do_settimeofday(struct timespec *tv)
{
if ((unsigned long)tv->tv_nsec >= NSEC_PER_SEC)
return -EINVAL;
/*
* This is revolting. We need to set "xtime" correctly. However, the
* value in this location is the value at the most recent update of
* wall time. Discover what correction gettimeofday() would have
* made, and then undo it!
*/
tv->tv_nsec -= 1000 * do_gettimeoffset();
while (tv->tv_nsec < 0) {
tv->tv_nsec += NSEC_PER_SEC;
tv->tv_sec--;
}
wall_to_monotonic.tv_sec += xtime.tv_sec - tv->tv_sec;
wall_to_monotonic.tv_nsec += xtime.tv_nsec - tv->tv_nsec;
if (wall_to_monotonic.tv_nsec > NSEC_PER_SEC) {
wall_to_monotonic.tv_nsec -= NSEC_PER_SEC;
wall_to_monotonic.tv_sec++;
}
if (wall_to_monotonic.tv_nsec < 0) {
wall_to_monotonic.tv_nsec += NSEC_PER_SEC;
wall_to_monotonic.tv_sec--;
}
xtime.tv_sec = tv->tv_sec;
xtime.tv_nsec = tv->tv_nsec;
ntp_clear();
return 0;
}
#if 0 #if 0
static void watchdog_reset() { static void watchdog_reset() {
......
This diff is collapsed.
...@@ -365,6 +365,7 @@ EXPORT_SYMBOL(get_fb_unmapped_area); ...@@ -365,6 +365,7 @@ EXPORT_SYMBOL(get_fb_unmapped_area);
void arch_pick_mmap_layout(struct mm_struct *mm) void arch_pick_mmap_layout(struct mm_struct *mm)
{ {
unsigned long random_factor = 0UL; unsigned long random_factor = 0UL;
unsigned long gap;
if (current->flags & PF_RANDOMIZE) { if (current->flags & PF_RANDOMIZE) {
random_factor = get_random_int(); random_factor = get_random_int();
...@@ -379,9 +380,10 @@ void arch_pick_mmap_layout(struct mm_struct *mm) ...@@ -379,9 +380,10 @@ void arch_pick_mmap_layout(struct mm_struct *mm)
* Fall back to the standard layout if the personality * Fall back to the standard layout if the personality
* bit is set, or if the expected stack growth is unlimited: * bit is set, or if the expected stack growth is unlimited:
*/ */
gap = rlimit(RLIMIT_STACK);
if (!test_thread_flag(TIF_32BIT) || if (!test_thread_flag(TIF_32BIT) ||
(current->personality & ADDR_COMPAT_LAYOUT) || (current->personality & ADDR_COMPAT_LAYOUT) ||
current->signal->rlim[RLIMIT_STACK].rlim_cur == RLIM_INFINITY || gap == RLIM_INFINITY ||
sysctl_legacy_va_layout) { sysctl_legacy_va_layout) {
mm->mmap_base = TASK_UNMAPPED_BASE + random_factor; mm->mmap_base = TASK_UNMAPPED_BASE + random_factor;
mm->get_unmapped_area = arch_get_unmapped_area; mm->get_unmapped_area = arch_get_unmapped_area;
...@@ -389,9 +391,7 @@ void arch_pick_mmap_layout(struct mm_struct *mm) ...@@ -389,9 +391,7 @@ void arch_pick_mmap_layout(struct mm_struct *mm)
} else { } else {
/* We know it's 32-bit */ /* We know it's 32-bit */
unsigned long task_size = STACK_TOP32; unsigned long task_size = STACK_TOP32;
unsigned long gap;
gap = current->signal->rlim[RLIMIT_STACK].rlim_cur;
if (gap < 128 * 1024 * 1024) if (gap < 128 * 1024 * 1024)
gap = 128 * 1024 * 1024; gap = 128 * 1024 * 1024;
if (gap > (task_size / 6 * 5)) if (gap > (task_size / 6 * 5))
......
...@@ -35,6 +35,7 @@ ...@@ -35,6 +35,7 @@
#include <linux/platform_device.h> #include <linux/platform_device.h>
#include <asm/oplib.h> #include <asm/oplib.h>
#include <asm/timex.h>
#include <asm/timer.h> #include <asm/timer.h>
#include <asm/system.h> #include <asm/system.h>
#include <asm/irq.h> #include <asm/irq.h>
...@@ -51,7 +52,6 @@ DEFINE_SPINLOCK(rtc_lock); ...@@ -51,7 +52,6 @@ DEFINE_SPINLOCK(rtc_lock);
EXPORT_SYMBOL(rtc_lock); EXPORT_SYMBOL(rtc_lock);
static int set_rtc_mmss(unsigned long); static int set_rtc_mmss(unsigned long);
static int sbus_do_settimeofday(struct timespec *tv);
unsigned long profile_pc(struct pt_regs *regs) unsigned long profile_pc(struct pt_regs *regs)
{ {
...@@ -76,6 +76,8 @@ EXPORT_SYMBOL(profile_pc); ...@@ -76,6 +76,8 @@ EXPORT_SYMBOL(profile_pc);
__volatile__ unsigned int *master_l10_counter; __volatile__ unsigned int *master_l10_counter;
u32 (*do_arch_gettimeoffset)(void);
/* /*
* timer_interrupt() needs to keep up the real-time clock, * timer_interrupt() needs to keep up the real-time clock,
* as well as call the "do_timer()" routine every clocktick * as well as call the "do_timer()" routine every clocktick
...@@ -196,35 +198,14 @@ static int __init clock_init(void) ...@@ -196,35 +198,14 @@ static int __init clock_init(void)
{ {
return of_register_driver(&clock_driver, &of_platform_bus_type); return of_register_driver(&clock_driver, &of_platform_bus_type);
} }
/* Must be after subsys_initcall() so that busses are probed. Must /* Must be after subsys_initcall() so that busses are probed. Must
* be before device_initcall() because things like the RTC driver * be before device_initcall() because things like the RTC driver
* need to see the clock registers. * need to see the clock registers.
*/ */
fs_initcall(clock_init); fs_initcall(clock_init);
static void __init sbus_time_init(void)
{
BTFIXUPSET_CALL(bus_do_settimeofday, sbus_do_settimeofday, BTFIXUPCALL_NORM);
btfixup();
sparc_init_timers(timer_interrupt);
}
void __init time_init(void)
{
#ifdef CONFIG_PCI
extern void pci_time_init(void);
if (pcic_present()) {
pci_time_init();
return;
}
#endif
sbus_time_init();
}
static inline unsigned long do_gettimeoffset(void) u32 sbus_do_gettimeoffset(void)
{ {
unsigned long val = *master_l10_counter; unsigned long val = *master_l10_counter;
unsigned long usec = (val >> 10) & 0x1fffff; unsigned long usec = (val >> 10) & 0x1fffff;
...@@ -233,86 +214,39 @@ static inline unsigned long do_gettimeoffset(void) ...@@ -233,86 +214,39 @@ static inline unsigned long do_gettimeoffset(void)
if (val & 0x80000000) if (val & 0x80000000)
usec += 1000000 / HZ; usec += 1000000 / HZ;
return usec; return usec * 1000;
}
/* Ok, my cute asm atomicity trick doesn't work anymore.
* There are just too many variables that need to be protected
* now (both members of xtime, et al.)
*/
void do_gettimeofday(struct timeval *tv)
{
unsigned long flags;
unsigned long seq;
unsigned long usec, sec;
unsigned long max_ntp_tick = tick_usec - tickadj;
do {
seq = read_seqbegin_irqsave(&xtime_lock, flags);
usec = do_gettimeoffset();
/*
* If time_adjust is negative then NTP is slowing the clock
* so make sure not to go into next possible interval.
* Better to lose some accuracy than have time go backwards..
*/
if (unlikely(time_adjust < 0))
usec = min(usec, max_ntp_tick);
sec = xtime.tv_sec;
usec += (xtime.tv_nsec / 1000);
} while (read_seqretry_irqrestore(&xtime_lock, seq, flags));
while (usec >= 1000000) {
usec -= 1000000;
sec++;
}
tv->tv_sec = sec;
tv->tv_usec = usec;
} }
EXPORT_SYMBOL(do_gettimeofday);
int do_settimeofday(struct timespec *tv) u32 arch_gettimeoffset(void)
{ {
int ret; if (unlikely(!do_arch_gettimeoffset))
return 0;
write_seqlock_irq(&xtime_lock); return do_arch_gettimeoffset();
ret = bus_do_settimeofday(tv);
write_sequnlock_irq(&xtime_lock);
clock_was_set();
return ret;
} }
EXPORT_SYMBOL(do_settimeofday); static void __init sbus_time_init(void)
static int sbus_do_settimeofday(struct timespec *tv)
{ {
time_t wtm_sec, sec = tv->tv_sec; do_arch_gettimeoffset = sbus_do_gettimeoffset;
long wtm_nsec, nsec = tv->tv_nsec;
if ((unsigned long)tv->tv_nsec >= NSEC_PER_SEC)
return -EINVAL;
/*
* This is revolting. We need to set "xtime" correctly. However, the
* value in this location is the value at the most recent update of
* wall time. Discover what correction gettimeofday() would have
* made, and then undo it!
*/
nsec -= 1000 * do_gettimeoffset();
wtm_sec = wall_to_monotonic.tv_sec + (xtime.tv_sec - sec); btfixup();
wtm_nsec = wall_to_monotonic.tv_nsec + (xtime.tv_nsec - nsec);
set_normalized_timespec(&xtime, sec, nsec); sparc_init_timers(timer_interrupt);
set_normalized_timespec(&wall_to_monotonic, wtm_sec, wtm_nsec); }
ntp_clear(); void __init time_init(void)
return 0; {
#ifdef CONFIG_PCI
extern void pci_time_init(void);
if (pcic_present()) {
pci_time_init();
return;
}
#endif
sbus_time_init();
} }
static int set_rtc_mmss(unsigned long secs) static int set_rtc_mmss(unsigned long secs)
{ {
struct rtc_device *rtc = rtc_class_open("rtc0"); struct rtc_device *rtc = rtc_class_open("rtc0");
......
...@@ -18,6 +18,7 @@ ...@@ -18,6 +18,7 @@
#include <linux/signal.h> #include <linux/signal.h>
#include <linux/mm.h> #include <linux/mm.h>
#include <linux/smp.h> #include <linux/smp.h>
#include <linux/perf_event.h>
#include <linux/interrupt.h> #include <linux/interrupt.h>
#include <linux/module.h> #include <linux/module.h>
#include <linux/kdebug.h> #include <linux/kdebug.h>
...@@ -203,6 +204,8 @@ asmlinkage void do_sparc_fault(struct pt_regs *regs, int text_fault, int write, ...@@ -203,6 +204,8 @@ asmlinkage void do_sparc_fault(struct pt_regs *regs, int text_fault, int write,
if (in_atomic() || !mm) if (in_atomic() || !mm)
goto no_context; goto no_context;
perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS, 1, 0, regs, address);
down_read(&mm->mmap_sem); down_read(&mm->mmap_sem);
/* /*
...@@ -249,10 +252,15 @@ good_area: ...@@ -249,10 +252,15 @@ good_area:
goto do_sigbus; goto do_sigbus;
BUG(); BUG();
} }
if (fault & VM_FAULT_MAJOR) if (fault & VM_FAULT_MAJOR) {
current->maj_flt++; current->maj_flt++;
else perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS_MAJ, 1, 0,
regs, address);
} else {
current->min_flt++; current->min_flt++;
perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS_MIN, 1, 0,
regs, address);
}
up_read(&mm->mmap_sem); up_read(&mm->mmap_sem);
return; return;
......
...@@ -16,6 +16,7 @@ ...@@ -16,6 +16,7 @@
#include <linux/mm.h> #include <linux/mm.h>
#include <linux/module.h> #include <linux/module.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/perf_event.h>
#include <linux/interrupt.h> #include <linux/interrupt.h>
#include <linux/kprobes.h> #include <linux/kprobes.h>
#include <linux/kdebug.h> #include <linux/kdebug.h>
...@@ -296,6 +297,8 @@ asmlinkage void __kprobes do_sparc64_fault(struct pt_regs *regs) ...@@ -296,6 +297,8 @@ asmlinkage void __kprobes do_sparc64_fault(struct pt_regs *regs)
if (in_atomic() || !mm) if (in_atomic() || !mm)
goto intr_or_no_mm; goto intr_or_no_mm;
perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS, 1, 0, regs, address);
if (!down_read_trylock(&mm->mmap_sem)) { if (!down_read_trylock(&mm->mmap_sem)) {
if ((regs->tstate & TSTATE_PRIV) && if ((regs->tstate & TSTATE_PRIV) &&
!search_exception_tables(regs->tpc)) { !search_exception_tables(regs->tpc)) {
...@@ -400,11 +403,15 @@ good_area: ...@@ -400,11 +403,15 @@ good_area:
goto do_sigbus; goto do_sigbus;
BUG(); BUG();
} }
if (fault & VM_FAULT_MAJOR) if (fault & VM_FAULT_MAJOR) {
current->maj_flt++; current->maj_flt++;
else perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS_MAJ, 1, 0,
regs, address);
} else {
current->min_flt++; current->min_flt++;
perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS_MIN, 1, 0,
regs, address);
}
up_read(&mm->mmap_sem); up_read(&mm->mmap_sem);
mm_rss = get_mm_rss(mm); mm_rss = get_mm_rss(mm);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment