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: Make prom entry spinlock NMI safe. sparc64: Kill off old sys_perfctr system call and state. sparc: Update defconfigs. sparc: Provide io{read,write}{16,32}be().
This commit is contained in:
commit
6895210e89
17 changed files with 99 additions and 276 deletions
|
@ -1,7 +1,7 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.33-rc2
|
||||
# Mon Jan 11 23:20:31 2010
|
||||
# Linux kernel version: 2.6.33
|
||||
# Wed Mar 3 02:52:23 2010
|
||||
#
|
||||
# CONFIG_64BIT is not set
|
||||
CONFIG_SPARC=y
|
||||
|
@ -9,6 +9,8 @@ CONFIG_SPARC32=y
|
|||
# CONFIG_SPARC64 is not set
|
||||
CONFIG_ARCH_DEFCONFIG="arch/sparc/configs/sparc32_defconfig"
|
||||
CONFIG_BITS=32
|
||||
CONFIG_GENERIC_TIME=y
|
||||
CONFIG_ARCH_USES_GETTIMEOFFSET=y
|
||||
CONFIG_AUDIT_ARCH=y
|
||||
CONFIG_MMU=y
|
||||
CONFIG_HIGHMEM=y
|
||||
|
@ -48,11 +50,6 @@ CONFIG_RCU_FANOUT=32
|
|||
# CONFIG_TREE_RCU_TRACE is not set
|
||||
# CONFIG_IKCONFIG is not set
|
||||
CONFIG_LOG_BUF_SHIFT=14
|
||||
CONFIG_GROUP_SCHED=y
|
||||
CONFIG_FAIR_GROUP_SCHED=y
|
||||
CONFIG_RT_GROUP_SCHED=y
|
||||
CONFIG_USER_SCHED=y
|
||||
# CONFIG_CGROUP_SCHED is not set
|
||||
# CONFIG_CGROUPS is not set
|
||||
CONFIG_SYSFS_DEPRECATED=y
|
||||
CONFIG_SYSFS_DEPRECATED_V2=y
|
||||
|
@ -68,6 +65,7 @@ CONFIG_INITRAMFS_SOURCE=""
|
|||
CONFIG_RD_GZIP=y
|
||||
CONFIG_RD_BZIP2=y
|
||||
CONFIG_RD_LZMA=y
|
||||
CONFIG_RD_LZO=y
|
||||
# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
|
||||
CONFIG_SYSCTL=y
|
||||
CONFIG_ANON_INODES=y
|
||||
|
@ -211,7 +209,6 @@ CONFIG_SBUSCHAR=y
|
|||
CONFIG_PCI=y
|
||||
CONFIG_PCI_SYSCALL=y
|
||||
# CONFIG_ARCH_SUPPORTS_MSI is not set
|
||||
CONFIG_PCI_LEGACY=y
|
||||
# CONFIG_PCI_DEBUG is not set
|
||||
# CONFIG_PCI_STUB is not set
|
||||
# CONFIG_PCI_IOV is not set
|
||||
|
@ -232,7 +229,6 @@ CONFIG_NET=y
|
|||
# Networking options
|
||||
#
|
||||
CONFIG_PACKET=y
|
||||
# CONFIG_PACKET_MMAP is not set
|
||||
CONFIG_UNIX=y
|
||||
CONFIG_XFRM=y
|
||||
CONFIG_XFRM_USER=m
|
||||
|
@ -379,11 +375,13 @@ CONFIG_MISC_DEVICES=y
|
|||
# CONFIG_TIFM_CORE is not set
|
||||
# CONFIG_ENCLOSURE_SERVICES is not set
|
||||
# CONFIG_HP_ILO is not set
|
||||
# CONFIG_TI_DAC7512 is not set
|
||||
# CONFIG_C2PORT is not set
|
||||
|
||||
#
|
||||
# EEPROM support
|
||||
#
|
||||
# CONFIG_EEPROM_AT25 is not set
|
||||
# CONFIG_EEPROM_93CX6 is not set
|
||||
# CONFIG_CB710_CORE is not set
|
||||
CONFIG_HAVE_IDE=y
|
||||
|
@ -507,7 +505,9 @@ CONFIG_SUNQE=m
|
|||
# CONFIG_SUNGEM is not set
|
||||
# CONFIG_CASSINI is not set
|
||||
# CONFIG_NET_VENDOR_3COM is not set
|
||||
# CONFIG_ENC28J60 is not set
|
||||
# CONFIG_ETHOC is not set
|
||||
# CONFIG_GRETH is not set
|
||||
# CONFIG_DNET is not set
|
||||
# CONFIG_NET_TULIP is not set
|
||||
# CONFIG_HP100 is not set
|
||||
|
@ -521,6 +521,7 @@ CONFIG_SUNQE=m
|
|||
# CONFIG_NET_PCI is not set
|
||||
# CONFIG_B44 is not set
|
||||
# CONFIG_KS8842 is not set
|
||||
# CONFIG_KS8851 is not set
|
||||
# CONFIG_KS8851_MLL is not set
|
||||
# CONFIG_ATL2 is not set
|
||||
CONFIG_NETDEV_1000=y
|
||||
|
@ -563,6 +564,7 @@ CONFIG_CHELSIO_T3_DEPENDS=y
|
|||
# CONFIG_MLX4_CORE is not set
|
||||
# CONFIG_TEHUTI is not set
|
||||
# CONFIG_BNX2X is not set
|
||||
# CONFIG_QLCNIC is not set
|
||||
# CONFIG_QLGE is not set
|
||||
# CONFIG_SFC is not set
|
||||
# CONFIG_BE2NET is not set
|
||||
|
@ -665,6 +667,7 @@ CONFIG_DEVKMEM=y
|
|||
#
|
||||
# Non-8250 serial port support
|
||||
#
|
||||
# CONFIG_SERIAL_MAX3100 is not set
|
||||
CONFIG_SERIAL_SUNCORE=y
|
||||
CONFIG_SERIAL_SUNZILOG=y
|
||||
CONFIG_SERIAL_SUNZILOG_CONSOLE=y
|
||||
|
@ -689,7 +692,23 @@ CONFIG_HW_RANDOM=m
|
|||
# CONFIG_TCG_TPM is not set
|
||||
CONFIG_DEVPORT=y
|
||||
# CONFIG_I2C is not set
|
||||
# CONFIG_SPI is not set
|
||||
CONFIG_SPI=y
|
||||
# CONFIG_SPI_DEBUG is not set
|
||||
CONFIG_SPI_MASTER=y
|
||||
|
||||
#
|
||||
# SPI Master Controller Drivers
|
||||
#
|
||||
CONFIG_SPI_BITBANG=m
|
||||
CONFIG_SPI_XILINX=m
|
||||
CONFIG_SPI_XILINX_PLTFM=m
|
||||
# CONFIG_SPI_DESIGNWARE is not set
|
||||
|
||||
#
|
||||
# SPI Protocol Masters
|
||||
#
|
||||
# CONFIG_SPI_SPIDEV is not set
|
||||
# CONFIG_SPI_TLE62X0 is not set
|
||||
|
||||
#
|
||||
# PPS support
|
||||
|
@ -706,10 +725,13 @@ CONFIG_HWMON=y
|
|||
#
|
||||
# Native drivers
|
||||
#
|
||||
# CONFIG_SENSORS_ADCXX is not set
|
||||
# CONFIG_SENSORS_I5K_AMB is not set
|
||||
# CONFIG_SENSORS_F71805F is not set
|
||||
# CONFIG_SENSORS_F71882FG is not set
|
||||
# CONFIG_SENSORS_IT87 is not set
|
||||
# CONFIG_SENSORS_LM70 is not set
|
||||
# CONFIG_SENSORS_MAX1111 is not set
|
||||
# CONFIG_SENSORS_PC87360 is not set
|
||||
# CONFIG_SENSORS_PC87427 is not set
|
||||
# CONFIG_SENSORS_SIS5595 is not set
|
||||
|
@ -720,6 +742,7 @@ CONFIG_HWMON=y
|
|||
# CONFIG_SENSORS_VT8231 is not set
|
||||
# CONFIG_SENSORS_W83627HF is not set
|
||||
# CONFIG_SENSORS_W83627EHF is not set
|
||||
# CONFIG_SENSORS_LIS3_SPI is not set
|
||||
# CONFIG_THERMAL is not set
|
||||
# CONFIG_WATCHDOG is not set
|
||||
CONFIG_SSB_POSSIBLE=y
|
||||
|
@ -736,6 +759,8 @@ CONFIG_SSB_POSSIBLE=y
|
|||
# CONFIG_MFD_SM501 is not set
|
||||
# CONFIG_HTC_PASIC3 is not set
|
||||
# CONFIG_MFD_TMIO is not set
|
||||
# CONFIG_MFD_MC13783 is not set
|
||||
# CONFIG_AB4500_CORE is not set
|
||||
# CONFIG_REGULATOR is not set
|
||||
# CONFIG_MEDIA_SUPPORT is not set
|
||||
|
||||
|
@ -743,6 +768,7 @@ CONFIG_SSB_POSSIBLE=y
|
|||
# Graphics support
|
||||
#
|
||||
CONFIG_VGA_ARB=y
|
||||
CONFIG_VGA_ARB_MAX_GPUS=16
|
||||
# CONFIG_VGASTATE is not set
|
||||
# CONFIG_VIDEO_OUTPUT_CONTROL is not set
|
||||
# CONFIG_FB is not set
|
||||
|
@ -808,6 +834,14 @@ CONFIG_RTC_INTF_DEV=y
|
|||
#
|
||||
# SPI RTC drivers
|
||||
#
|
||||
# CONFIG_RTC_DRV_M41T94 is not set
|
||||
# CONFIG_RTC_DRV_DS1305 is not set
|
||||
# CONFIG_RTC_DRV_DS1390 is not set
|
||||
# CONFIG_RTC_DRV_MAX6902 is not set
|
||||
# CONFIG_RTC_DRV_R9701 is not set
|
||||
# CONFIG_RTC_DRV_RS5C348 is not set
|
||||
# CONFIG_RTC_DRV_DS3234 is not set
|
||||
# CONFIG_RTC_DRV_PCF2123 is not set
|
||||
|
||||
#
|
||||
# Platform RTC drivers
|
||||
|
@ -1180,9 +1214,11 @@ CONFIG_CRC32=y
|
|||
CONFIG_LIBCRC32C=m
|
||||
CONFIG_ZLIB_INFLATE=y
|
||||
CONFIG_ZLIB_DEFLATE=y
|
||||
CONFIG_LZO_DECOMPRESS=y
|
||||
CONFIG_DECOMPRESS_GZIP=y
|
||||
CONFIG_DECOMPRESS_BZIP2=y
|
||||
CONFIG_DECOMPRESS_LZMA=y
|
||||
CONFIG_DECOMPRESS_LZO=y
|
||||
CONFIG_HAS_IOMEM=y
|
||||
CONFIG_HAS_IOPORT=y
|
||||
CONFIG_HAS_DMA=y
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.33-rc2
|
||||
# Wed Jan 20 16:31:47 2010
|
||||
# Linux kernel version: 2.6.33
|
||||
# Wed Mar 3 02:54:29 2010
|
||||
#
|
||||
CONFIG_64BIT=y
|
||||
CONFIG_SPARC=y
|
||||
|
@ -55,14 +55,10 @@ CONFIG_TREE_RCU=y
|
|||
# CONFIG_RCU_TRACE is not set
|
||||
CONFIG_RCU_FANOUT=64
|
||||
# CONFIG_RCU_FANOUT_EXACT is not set
|
||||
# CONFIG_RCU_FAST_NO_HZ is not set
|
||||
# CONFIG_TREE_RCU_TRACE is not set
|
||||
# CONFIG_IKCONFIG is not set
|
||||
CONFIG_LOG_BUF_SHIFT=18
|
||||
CONFIG_GROUP_SCHED=y
|
||||
CONFIG_FAIR_GROUP_SCHED=y
|
||||
CONFIG_RT_GROUP_SCHED=y
|
||||
CONFIG_USER_SCHED=y
|
||||
# CONFIG_CGROUP_SCHED is not set
|
||||
# CONFIG_CGROUPS is not set
|
||||
# CONFIG_SYSFS_DEPRECATED_V2 is not set
|
||||
CONFIG_RELAY=y
|
||||
|
@ -77,6 +73,7 @@ CONFIG_INITRAMFS_SOURCE=""
|
|||
CONFIG_RD_GZIP=y
|
||||
CONFIG_RD_BZIP2=y
|
||||
CONFIG_RD_LZMA=y
|
||||
CONFIG_RD_LZO=y
|
||||
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
|
||||
CONFIG_SYSCTL=y
|
||||
CONFIG_ANON_INODES=y
|
||||
|
@ -105,7 +102,6 @@ CONFIG_PERF_USE_VMALLOC=y
|
|||
# Kernel Performance Events And Counters
|
||||
#
|
||||
CONFIG_PERF_EVENTS=y
|
||||
CONFIG_EVENT_PROFILE=y
|
||||
CONFIG_PERF_COUNTERS=y
|
||||
# CONFIG_DEBUG_PERF_USE_VMALLOC is not set
|
||||
CONFIG_VM_EVENT_COUNTERS=y
|
||||
|
@ -266,7 +262,6 @@ CONFIG_PCI_DOMAINS=y
|
|||
CONFIG_PCI_SYSCALL=y
|
||||
CONFIG_ARCH_SUPPORTS_MSI=y
|
||||
CONFIG_PCI_MSI=y
|
||||
# CONFIG_PCI_LEGACY is not set
|
||||
# CONFIG_PCI_DEBUG is not set
|
||||
# CONFIG_PCI_STUB is not set
|
||||
# CONFIG_PCI_IOV is not set
|
||||
|
@ -290,7 +285,6 @@ CONFIG_NET=y
|
|||
# Networking options
|
||||
#
|
||||
CONFIG_PACKET=y
|
||||
CONFIG_PACKET_MMAP=y
|
||||
CONFIG_UNIX=y
|
||||
CONFIG_XFRM=y
|
||||
CONFIG_XFRM_USER=m
|
||||
|
@ -425,10 +419,6 @@ CONFIG_BLK_DEV=y
|
|||
# CONFIG_BLK_DEV_COW_COMMON is not set
|
||||
CONFIG_BLK_DEV_LOOP=m
|
||||
CONFIG_BLK_DEV_CRYPTOLOOP=m
|
||||
|
||||
#
|
||||
# DRBD disabled because PROC_FS, INET or CONNECTOR not selected
|
||||
#
|
||||
# CONFIG_BLK_DEV_DRBD is not set
|
||||
CONFIG_BLK_DEV_NBD=m
|
||||
# CONFIG_BLK_DEV_SX8 is not set
|
||||
|
@ -677,6 +667,7 @@ CONFIG_SUNGEM=m
|
|||
CONFIG_SUNVNET=m
|
||||
# CONFIG_NET_VENDOR_3COM is not set
|
||||
# CONFIG_ETHOC is not set
|
||||
# CONFIG_GRETH is not set
|
||||
# CONFIG_DNET is not set
|
||||
# CONFIG_NET_TULIP is not set
|
||||
# CONFIG_HP100 is not set
|
||||
|
@ -691,6 +682,7 @@ CONFIG_NET_PCI=y
|
|||
# CONFIG_PCNET32 is not set
|
||||
# CONFIG_AMD8111_ETH is not set
|
||||
# CONFIG_ADAPTEC_STARFIRE is not set
|
||||
# CONFIG_KSZ884X_PCI is not set
|
||||
# CONFIG_B44 is not set
|
||||
# CONFIG_FORCEDETH is not set
|
||||
# CONFIG_E100 is not set
|
||||
|
@ -741,6 +733,7 @@ CONFIG_CHELSIO_T3_DEPENDS=y
|
|||
# CONFIG_CHELSIO_T3 is not set
|
||||
# CONFIG_ENIC is not set
|
||||
# CONFIG_IXGBE is not set
|
||||
# CONFIG_IXGBEVF is not set
|
||||
# CONFIG_IXGB is not set
|
||||
# CONFIG_S2IO is not set
|
||||
# CONFIG_VXGE is not set
|
||||
|
@ -751,6 +744,7 @@ CONFIG_NIU=m
|
|||
# CONFIG_MLX4_CORE is not set
|
||||
# CONFIG_TEHUTI is not set
|
||||
# CONFIG_BNX2X is not set
|
||||
# CONFIG_QLCNIC is not set
|
||||
# CONFIG_QLGE is not set
|
||||
# CONFIG_SFC is not set
|
||||
# CONFIG_BE2NET is not set
|
||||
|
@ -1028,6 +1022,7 @@ CONFIG_HWMON=y
|
|||
# CONFIG_SENSORS_SMSC47M192 is not set
|
||||
# CONFIG_SENSORS_SMSC47B397 is not set
|
||||
# CONFIG_SENSORS_ADS7828 is not set
|
||||
# CONFIG_SENSORS_AMC6821 is not set
|
||||
# CONFIG_SENSORS_THMC50 is not set
|
||||
# CONFIG_SENSORS_TMP401 is not set
|
||||
# CONFIG_SENSORS_TMP421 is not set
|
||||
|
@ -1076,6 +1071,7 @@ CONFIG_SSB_POSSIBLE=y
|
|||
# Graphics support
|
||||
#
|
||||
CONFIG_VGA_ARB=y
|
||||
CONFIG_VGA_ARB_MAX_GPUS=16
|
||||
# CONFIG_DRM is not set
|
||||
# CONFIG_VGASTATE is not set
|
||||
# CONFIG_VIDEO_OUTPUT_CONTROL is not set
|
||||
|
@ -1279,6 +1275,7 @@ CONFIG_SND_ALI5451=m
|
|||
# CONFIG_SND_YMFPCI is not set
|
||||
CONFIG_SND_USB=y
|
||||
# CONFIG_SND_USB_AUDIO is not set
|
||||
# CONFIG_SND_USB_UA101 is not set
|
||||
# CONFIG_SND_USB_CAIAQ is not set
|
||||
CONFIG_SND_SPARC=y
|
||||
# CONFIG_SND_SUN_AMD7930 is not set
|
||||
|
@ -1301,6 +1298,7 @@ CONFIG_USB_HIDDEV=y
|
|||
#
|
||||
# Special HID drivers
|
||||
#
|
||||
# CONFIG_HID_3M_PCT is not set
|
||||
CONFIG_HID_A4TECH=y
|
||||
CONFIG_HID_APPLE=y
|
||||
CONFIG_HID_BELKIN=y
|
||||
|
@ -1317,14 +1315,19 @@ CONFIG_HID_KENSINGTON=y
|
|||
CONFIG_HID_LOGITECH=y
|
||||
# CONFIG_LOGITECH_FF is not set
|
||||
# CONFIG_LOGIRUMBLEPAD2_FF is not set
|
||||
# CONFIG_LOGIG940_FF is not set
|
||||
CONFIG_HID_MICROSOFT=y
|
||||
# CONFIG_HID_MOSART is not set
|
||||
CONFIG_HID_MONTEREY=y
|
||||
CONFIG_HID_NTRIG=y
|
||||
CONFIG_HID_ORTEK=y
|
||||
CONFIG_HID_PANTHERLORD=y
|
||||
# CONFIG_PANTHERLORD_FF is not set
|
||||
CONFIG_HID_PETALYNX=y
|
||||
# CONFIG_HID_QUANTA is not set
|
||||
CONFIG_HID_SAMSUNG=y
|
||||
CONFIG_HID_SONY=y
|
||||
# CONFIG_HID_STANTUM is not set
|
||||
CONFIG_HID_SUNPLUS=y
|
||||
CONFIG_HID_GREENASIA=y
|
||||
# CONFIG_GREENASIA_FF is not set
|
||||
|
@ -1807,6 +1810,7 @@ CONFIG_CRYPTO_MANAGER=y
|
|||
CONFIG_CRYPTO_MANAGER2=y
|
||||
CONFIG_CRYPTO_GF128MUL=m
|
||||
CONFIG_CRYPTO_NULL=m
|
||||
# CONFIG_CRYPTO_PCRYPT is not set
|
||||
CONFIG_CRYPTO_WORKQUEUE=y
|
||||
# CONFIG_CRYPTO_CRYPTD is not set
|
||||
CONFIG_CRYPTO_AUTHENC=y
|
||||
|
@ -1904,9 +1908,11 @@ CONFIG_CRC32=y
|
|||
CONFIG_LIBCRC32C=m
|
||||
CONFIG_ZLIB_INFLATE=y
|
||||
CONFIG_ZLIB_DEFLATE=y
|
||||
CONFIG_LZO_DECOMPRESS=y
|
||||
CONFIG_DECOMPRESS_GZIP=y
|
||||
CONFIG_DECOMPRESS_BZIP2=y
|
||||
CONFIG_DECOMPRESS_LZMA=y
|
||||
CONFIG_DECOMPRESS_LZO=y
|
||||
CONFIG_HAS_IOMEM=y
|
||||
CONFIG_HAS_IOPORT=y
|
||||
CONFIG_HAS_DMA=y
|
||||
|
|
|
@ -249,10 +249,14 @@ extern void iounmap(volatile void __iomem *addr);
|
|||
|
||||
#define ioread8(X) readb(X)
|
||||
#define ioread16(X) readw(X)
|
||||
#define ioread16be(X) __raw_readw(X)
|
||||
#define ioread32(X) readl(X)
|
||||
#define ioread32be(X) __raw_readl(X)
|
||||
#define iowrite8(val,X) writeb(val,X)
|
||||
#define iowrite16(val,X) writew(val,X)
|
||||
#define iowrite16be(val,X) __raw_writew(val,X)
|
||||
#define iowrite32(val,X) writel(val,X)
|
||||
#define iowrite32be(val,X) __raw_writel(val,X)
|
||||
|
||||
static inline void ioread8_rep(void __iomem *port, void *buf, unsigned long count)
|
||||
{
|
||||
|
|
|
@ -468,10 +468,14 @@ static inline void iounmap(volatile void __iomem *addr)
|
|||
|
||||
#define ioread8(X) readb(X)
|
||||
#define ioread16(X) readw(X)
|
||||
#define ioread16be(X) __raw_readw(X)
|
||||
#define ioread32(X) readl(X)
|
||||
#define ioread32be(X) __raw_readl(X)
|
||||
#define iowrite8(val,X) writeb(val,X)
|
||||
#define iowrite16(val,X) writew(val,X)
|
||||
#define iowrite16be(val,X) __raw_writew(val,X)
|
||||
#define iowrite32(val,X) writel(val,X)
|
||||
#define iowrite32be(val,X) __raw_writel(val,X)
|
||||
|
||||
/* Create a virtual mapping cookie for an IO port range */
|
||||
extern void __iomem *ioport_map(unsigned long port, unsigned int nr);
|
||||
|
|
|
@ -10,8 +10,8 @@
|
|||
* from enumeration below. The meaning of further arguments
|
||||
* are determined by the operation code.
|
||||
*
|
||||
* int sys_perfctr(int opcode, unsigned long arg0,
|
||||
* unsigned long arg1, unsigned long arg2)
|
||||
* NOTE: This system call is no longer provided, use the perf_events
|
||||
* infrastructure.
|
||||
*
|
||||
* Pointers which are passed by the user are pointers to 64-bit
|
||||
* integers.
|
||||
|
|
|
@ -143,15 +143,7 @@ do { \
|
|||
* and 2 stores in this critical code path. -DaveM
|
||||
*/
|
||||
#define switch_to(prev, next, last) \
|
||||
do { if (test_thread_flag(TIF_PERFCTR)) { \
|
||||
unsigned long __tmp; \
|
||||
read_pcr(__tmp); \
|
||||
current_thread_info()->pcr_reg = __tmp; \
|
||||
read_pic(__tmp); \
|
||||
current_thread_info()->kernel_cntd0 += (unsigned int)(__tmp);\
|
||||
current_thread_info()->kernel_cntd1 += ((__tmp) >> 32); \
|
||||
} \
|
||||
flush_tlb_pending(); \
|
||||
do { flush_tlb_pending(); \
|
||||
save_and_clear_fpu(); \
|
||||
/* If you are tempted to conditionalize the following */ \
|
||||
/* so that ASI is only written if it changes, think again. */ \
|
||||
|
@ -197,11 +189,6 @@ do { if (test_thread_flag(TIF_PERFCTR)) { \
|
|||
"l1", "l2", "l3", "l4", "l5", "l6", "l7", \
|
||||
"i0", "i1", "i2", "i3", "i4", "i5", \
|
||||
"o0", "o1", "o2", "o3", "o4", "o5", "o7"); \
|
||||
/* If you fuck with this, update ret_from_syscall code too. */ \
|
||||
if (test_thread_flag(TIF_PERFCTR)) { \
|
||||
write_pcr(current_thread_info()->pcr_reg); \
|
||||
reset_pic(); \
|
||||
} \
|
||||
} while(0)
|
||||
|
||||
static inline unsigned long xchg32(__volatile__ unsigned int *m, unsigned int val)
|
||||
|
|
|
@ -58,11 +58,6 @@ struct thread_info {
|
|||
unsigned long gsr[7];
|
||||
unsigned long xfsr[7];
|
||||
|
||||
__u64 __user *user_cntd0;
|
||||
__u64 __user *user_cntd1;
|
||||
__u64 kernel_cntd0, kernel_cntd1;
|
||||
__u64 pcr_reg;
|
||||
|
||||
struct restart_block restart_block;
|
||||
|
||||
struct pt_regs *kern_una_regs;
|
||||
|
@ -96,15 +91,10 @@ struct thread_info {
|
|||
#define TI_RWIN_SPTRS 0x000003c8
|
||||
#define TI_GSR 0x00000400
|
||||
#define TI_XFSR 0x00000438
|
||||
#define TI_USER_CNTD0 0x00000470
|
||||
#define TI_USER_CNTD1 0x00000478
|
||||
#define TI_KERN_CNTD0 0x00000480
|
||||
#define TI_KERN_CNTD1 0x00000488
|
||||
#define TI_PCR 0x00000490
|
||||
#define TI_RESTART_BLOCK 0x00000498
|
||||
#define TI_KUNA_REGS 0x000004c8
|
||||
#define TI_KUNA_INSN 0x000004d0
|
||||
#define TI_FPREGS 0x00000500
|
||||
#define TI_RESTART_BLOCK 0x00000470
|
||||
#define TI_KUNA_REGS 0x000004a0
|
||||
#define TI_KUNA_INSN 0x000004a8
|
||||
#define TI_FPREGS 0x000004c0
|
||||
|
||||
/* We embed this in the uppermost byte of thread_info->flags */
|
||||
#define FAULT_CODE_WRITE 0x01 /* Write access, implies D-TLB */
|
||||
|
@ -199,7 +189,7 @@ register struct thread_info *current_thread_info_reg asm("g6");
|
|||
*
|
||||
* On trap return we need to test several values:
|
||||
*
|
||||
* user: need_resched, notify_resume, sigpending, wsaved, perfctr
|
||||
* user: need_resched, notify_resume, sigpending, wsaved
|
||||
* kernel: fpdepth
|
||||
*
|
||||
* So to check for work in the kernel case we simply load the fpdepth
|
||||
|
@ -220,7 +210,7 @@ register struct thread_info *current_thread_info_reg asm("g6");
|
|||
#define TIF_NOTIFY_RESUME 1 /* callback before returning to user */
|
||||
#define TIF_SIGPENDING 2 /* signal pending */
|
||||
#define TIF_NEED_RESCHED 3 /* rescheduling necessary */
|
||||
#define TIF_PERFCTR 4 /* performance counters active */
|
||||
/* flag bit 4 is available */
|
||||
#define TIF_UNALIGNED 5 /* allowed to do unaligned accesses */
|
||||
/* flag bit 6 is available */
|
||||
#define TIF_32BIT 7 /* 32-bit binary */
|
||||
|
@ -241,7 +231,6 @@ register struct thread_info *current_thread_info_reg asm("g6");
|
|||
#define _TIF_NOTIFY_RESUME (1<<TIF_NOTIFY_RESUME)
|
||||
#define _TIF_SIGPENDING (1<<TIF_SIGPENDING)
|
||||
#define _TIF_NEED_RESCHED (1<<TIF_NEED_RESCHED)
|
||||
#define _TIF_PERFCTR (1<<TIF_PERFCTR)
|
||||
#define _TIF_UNALIGNED (1<<TIF_UNALIGNED)
|
||||
#define _TIF_32BIT (1<<TIF_32BIT)
|
||||
#define _TIF_SECCOMP (1<<TIF_SECCOMP)
|
||||
|
@ -252,7 +241,7 @@ register struct thread_info *current_thread_info_reg asm("g6");
|
|||
|
||||
#define _TIF_USER_WORK_MASK ((0xff << TI_FLAG_WSAVED_SHIFT) | \
|
||||
_TIF_DO_NOTIFY_RESUME_MASK | \
|
||||
_TIF_NEED_RESCHED | _TIF_PERFCTR)
|
||||
_TIF_NEED_RESCHED)
|
||||
#define _TIF_DO_NOTIFY_RESUME_MASK (_TIF_NOTIFY_RESUME | _TIF_SIGPENDING)
|
||||
|
||||
/*
|
||||
|
|
|
@ -48,7 +48,6 @@ extern void __init boot_cpu_id_too_large(int cpu);
|
|||
extern unsigned int dcache_parity_tl1_occurred;
|
||||
extern unsigned int icache_parity_tl1_occurred;
|
||||
|
||||
extern asmlinkage void update_perfctrs(void);
|
||||
extern asmlinkage void sparc_breakpoint(struct pt_regs *regs);
|
||||
extern void timer_interrupt(int irq, struct pt_regs *regs);
|
||||
|
||||
|
|
|
@ -352,12 +352,6 @@ void exit_thread(void)
|
|||
else
|
||||
t->utraps[0]--;
|
||||
}
|
||||
|
||||
if (test_and_clear_thread_flag(TIF_PERFCTR)) {
|
||||
t->user_cntd0 = t->user_cntd1 = NULL;
|
||||
t->pcr_reg = 0;
|
||||
write_pcr(0);
|
||||
}
|
||||
}
|
||||
|
||||
void flush_thread(void)
|
||||
|
@ -371,13 +365,6 @@ void flush_thread(void)
|
|||
|
||||
set_thread_wsaved(0);
|
||||
|
||||
/* Turn off performance counters if on. */
|
||||
if (test_and_clear_thread_flag(TIF_PERFCTR)) {
|
||||
t->user_cntd0 = t->user_cntd1 = NULL;
|
||||
t->pcr_reg = 0;
|
||||
write_pcr(0);
|
||||
}
|
||||
|
||||
/* Clear FPU register state. */
|
||||
t->fpsaved[0] = 0;
|
||||
|
||||
|
@ -591,16 +578,6 @@ int copy_thread(unsigned long clone_flags, unsigned long sp,
|
|||
t->kregs->u_regs[UREG_FP] =
|
||||
((unsigned long) child_sf) - STACK_BIAS;
|
||||
|
||||
/* Special case, if we are spawning a kernel thread from
|
||||
* a userspace task (usermode helper, NFS or similar), we
|
||||
* must disable performance counters in the child because
|
||||
* the address space and protection realm are changing.
|
||||
*/
|
||||
if (t->flags & _TIF_PERFCTR) {
|
||||
t->user_cntd0 = t->user_cntd1 = NULL;
|
||||
t->pcr_reg = 0;
|
||||
t->flags &= ~_TIF_PERFCTR;
|
||||
}
|
||||
t->flags |= ((long)ASI_P << TI_FLAG_CURRENT_DS_SHIFT);
|
||||
t->kregs->u_regs[UREG_G6] = (unsigned long) t;
|
||||
t->kregs->u_regs[UREG_G4] = (unsigned long) t->task;
|
||||
|
|
|
@ -65,48 +65,6 @@ __handle_user_windows:
|
|||
ba,pt %xcc, __handle_user_windows_continue
|
||||
|
||||
andn %l1, %l4, %l1
|
||||
__handle_perfctrs:
|
||||
call update_perfctrs
|
||||
wrpr %g0, RTRAP_PSTATE, %pstate
|
||||
wrpr %g0, RTRAP_PSTATE_IRQOFF, %pstate
|
||||
ldub [%g6 + TI_WSAVED], %o2
|
||||
brz,pt %o2, 1f
|
||||
nop
|
||||
/* Redo userwin+sched+sig checks */
|
||||
call fault_in_user_windows
|
||||
|
||||
wrpr %g0, RTRAP_PSTATE, %pstate
|
||||
wrpr %g0, RTRAP_PSTATE_IRQOFF, %pstate
|
||||
ldx [%g6 + TI_FLAGS], %l0
|
||||
andcc %l0, _TIF_NEED_RESCHED, %g0
|
||||
be,pt %xcc, 1f
|
||||
|
||||
nop
|
||||
call schedule
|
||||
wrpr %g0, RTRAP_PSTATE, %pstate
|
||||
wrpr %g0, RTRAP_PSTATE_IRQOFF, %pstate
|
||||
ldx [%g6 + TI_FLAGS], %l0
|
||||
1: andcc %l0, _TIF_DO_NOTIFY_RESUME_MASK, %g0
|
||||
|
||||
be,pt %xcc, __handle_perfctrs_continue
|
||||
sethi %hi(TSTATE_PEF), %o0
|
||||
mov %l5, %o1
|
||||
add %sp, PTREGS_OFF, %o0
|
||||
mov %l0, %o2
|
||||
call do_notify_resume
|
||||
|
||||
wrpr %g0, RTRAP_PSTATE, %pstate
|
||||
wrpr %g0, RTRAP_PSTATE_IRQOFF, %pstate
|
||||
/* Signal delivery can modify pt_regs tstate, so we must
|
||||
* reload it.
|
||||
*/
|
||||
ldx [%sp + PTREGS_OFF + PT_V9_TSTATE], %l1
|
||||
sethi %hi(0xf << 20), %l4
|
||||
and %l1, %l4, %l4
|
||||
andn %l1, %l4, %l1
|
||||
ba,pt %xcc, __handle_perfctrs_continue
|
||||
|
||||
sethi %hi(TSTATE_PEF), %o0
|
||||
__handle_userfpu:
|
||||
rd %fprs, %l5
|
||||
andcc %l5, FPRS_FEF, %g0
|
||||
|
@ -191,9 +149,9 @@ rtrap_no_irq_enable:
|
|||
* take until the next local IRQ before the signal/resched
|
||||
* event would be handled.
|
||||
*
|
||||
* This also means that if we have to deal with performance
|
||||
* counters or user windows, we have to redo all of these
|
||||
* sched+signal checks with IRQs disabled.
|
||||
* This also means that if we have to deal with user
|
||||
* windows, we have to redo all of these sched+signal checks
|
||||
* with IRQs disabled.
|
||||
*/
|
||||
to_user: wrpr %g0, RTRAP_PSTATE_IRQOFF, %pstate
|
||||
wrpr 0, %pil
|
||||
|
@ -214,12 +172,8 @@ __handle_signal_continue:
|
|||
brnz,pn %o2, __handle_user_windows
|
||||
nop
|
||||
__handle_user_windows_continue:
|
||||
ldx [%g6 + TI_FLAGS], %l5
|
||||
andcc %l5, _TIF_PERFCTR, %g0
|
||||
sethi %hi(TSTATE_PEF), %o0
|
||||
bne,pn %xcc, __handle_perfctrs
|
||||
__handle_perfctrs_continue:
|
||||
andcc %l1, %o0, %g0
|
||||
andcc %l1, %o0, %g0
|
||||
|
||||
/* This fpdepth clear is necessary for non-syscall rtraps only */
|
||||
user_nowork:
|
||||
|
|
|
@ -51,7 +51,6 @@ SIGN1(sys32_exit_group, sys_exit_group, %o0)
|
|||
SIGN1(sys32_wait4, compat_sys_wait4, %o2)
|
||||
SIGN1(sys32_creat, sys_creat, %o1)
|
||||
SIGN1(sys32_mknod, sys_mknod, %o1)
|
||||
SIGN1(sys32_perfctr, sys_perfctr, %o0)
|
||||
SIGN1(sys32_umount, sys_umount, %o1)
|
||||
SIGN1(sys32_signal, sys_signal, %o0)
|
||||
SIGN1(sys32_access, sys_access, %o1)
|
||||
|
|
|
@ -27,7 +27,6 @@
|
|||
|
||||
#include <asm/uaccess.h>
|
||||
#include <asm/utrap.h>
|
||||
#include <asm/perfctr.h>
|
||||
#include <asm/unistd.h>
|
||||
|
||||
#include "entry.h"
|
||||
|
@ -766,109 +765,6 @@ SYSCALL_DEFINE5(rt_sigaction, int, sig, const struct sigaction __user *, act,
|
|||
return ret;
|
||||
}
|
||||
|
||||
/* Invoked by rtrap code to update performance counters in
|
||||
* user space.
|
||||
*/
|
||||
asmlinkage void update_perfctrs(void)
|
||||
{
|
||||
unsigned long pic, tmp;
|
||||
|
||||
read_pic(pic);
|
||||
tmp = (current_thread_info()->kernel_cntd0 += (unsigned int)pic);
|
||||
__put_user(tmp, current_thread_info()->user_cntd0);
|
||||
tmp = (current_thread_info()->kernel_cntd1 += (pic >> 32));
|
||||
__put_user(tmp, current_thread_info()->user_cntd1);
|
||||
reset_pic();
|
||||
}
|
||||
|
||||
SYSCALL_DEFINE4(perfctr, int, opcode, unsigned long, arg0,
|
||||
unsigned long, arg1, unsigned long, arg2)
|
||||
{
|
||||
int err = 0;
|
||||
|
||||
switch(opcode) {
|
||||
case PERFCTR_ON:
|
||||
current_thread_info()->pcr_reg = arg2;
|
||||
current_thread_info()->user_cntd0 = (u64 __user *) arg0;
|
||||
current_thread_info()->user_cntd1 = (u64 __user *) arg1;
|
||||
current_thread_info()->kernel_cntd0 =
|
||||
current_thread_info()->kernel_cntd1 = 0;
|
||||
write_pcr(arg2);
|
||||
reset_pic();
|
||||
set_thread_flag(TIF_PERFCTR);
|
||||
break;
|
||||
|
||||
case PERFCTR_OFF:
|
||||
err = -EINVAL;
|
||||
if (test_thread_flag(TIF_PERFCTR)) {
|
||||
current_thread_info()->user_cntd0 =
|
||||
current_thread_info()->user_cntd1 = NULL;
|
||||
current_thread_info()->pcr_reg = 0;
|
||||
write_pcr(0);
|
||||
clear_thread_flag(TIF_PERFCTR);
|
||||
err = 0;
|
||||
}
|
||||
break;
|
||||
|
||||
case PERFCTR_READ: {
|
||||
unsigned long pic, tmp;
|
||||
|
||||
if (!test_thread_flag(TIF_PERFCTR)) {
|
||||
err = -EINVAL;
|
||||
break;
|
||||
}
|
||||
read_pic(pic);
|
||||
tmp = (current_thread_info()->kernel_cntd0 += (unsigned int)pic);
|
||||
err |= __put_user(tmp, current_thread_info()->user_cntd0);
|
||||
tmp = (current_thread_info()->kernel_cntd1 += (pic >> 32));
|
||||
err |= __put_user(tmp, current_thread_info()->user_cntd1);
|
||||
reset_pic();
|
||||
break;
|
||||
}
|
||||
|
||||
case PERFCTR_CLRPIC:
|
||||
if (!test_thread_flag(TIF_PERFCTR)) {
|
||||
err = -EINVAL;
|
||||
break;
|
||||
}
|
||||
current_thread_info()->kernel_cntd0 =
|
||||
current_thread_info()->kernel_cntd1 = 0;
|
||||
reset_pic();
|
||||
break;
|
||||
|
||||
case PERFCTR_SETPCR: {
|
||||
u64 __user *user_pcr = (u64 __user *)arg0;
|
||||
|
||||
if (!test_thread_flag(TIF_PERFCTR)) {
|
||||
err = -EINVAL;
|
||||
break;
|
||||
}
|
||||
err |= __get_user(current_thread_info()->pcr_reg, user_pcr);
|
||||
write_pcr(current_thread_info()->pcr_reg);
|
||||
current_thread_info()->kernel_cntd0 =
|
||||
current_thread_info()->kernel_cntd1 = 0;
|
||||
reset_pic();
|
||||
break;
|
||||
}
|
||||
|
||||
case PERFCTR_GETPCR: {
|
||||
u64 __user *user_pcr = (u64 __user *)arg0;
|
||||
|
||||
if (!test_thread_flag(TIF_PERFCTR)) {
|
||||
err = -EINVAL;
|
||||
break;
|
||||
}
|
||||
err |= __put_user(current_thread_info()->pcr_reg, user_pcr);
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
err = -EINVAL;
|
||||
break;
|
||||
};
|
||||
return err;
|
||||
}
|
||||
|
||||
/*
|
||||
* Do a system call from kernel instead of calling sys_execve so we
|
||||
* end up with proper pt_regs.
|
||||
|
|
|
@ -110,31 +110,12 @@ sys_clone:
|
|||
|
||||
.globl ret_from_syscall
|
||||
ret_from_syscall:
|
||||
/* Clear current_thread_info()->new_child, and
|
||||
* check performance counter stuff too.
|
||||
*/
|
||||
/* Clear current_thread_info()->new_child. */
|
||||
stb %g0, [%g6 + TI_NEW_CHILD]
|
||||
ldx [%g6 + TI_FLAGS], %l0
|
||||
call schedule_tail
|
||||
mov %g7, %o0
|
||||
andcc %l0, _TIF_PERFCTR, %g0
|
||||
be,pt %icc, 1f
|
||||
nop
|
||||
ldx [%g6 + TI_PCR], %o7
|
||||
wr %g0, %o7, %pcr
|
||||
|
||||
/* Blackbird errata workaround. See commentary in
|
||||
* smp.c:smp_percpu_timer_interrupt() for more
|
||||
* information.
|
||||
*/
|
||||
ba,pt %xcc, 99f
|
||||
nop
|
||||
|
||||
.align 64
|
||||
99: wr %g0, %g0, %pic
|
||||
rd %pic, %g0
|
||||
|
||||
1: ba,pt %xcc, ret_sys_call
|
||||
ba,pt %xcc, ret_sys_call
|
||||
ldx [%sp + PTREGS_OFF + PT_V9_I0], %o0
|
||||
|
||||
.globl sparc_exit
|
||||
|
|
|
@ -36,8 +36,6 @@ extern asmlinkage long sys_rt_sigaction(int sig,
|
|||
struct sigaction __user *oact,
|
||||
void __user *restorer,
|
||||
size_t sigsetsize);
|
||||
extern asmlinkage long sys_perfctr(int opcode, unsigned long arg0,
|
||||
unsigned long arg1, unsigned long arg2);
|
||||
|
||||
extern asmlinkage void sparc64_set_context(struct pt_regs *regs);
|
||||
extern asmlinkage void sparc64_get_context(struct pt_regs *regs);
|
||||
|
|
|
@ -21,7 +21,7 @@ sys_call_table32:
|
|||
/*0*/ .word sys_restart_syscall, sys32_exit, sys_fork, sys_read, sys_write
|
||||
/*5*/ .word sys32_open, sys_close, sys32_wait4, sys32_creat, sys_link
|
||||
/*10*/ .word sys_unlink, sunos_execv, sys_chdir, sys_chown16, sys32_mknod
|
||||
/*15*/ .word sys_chmod, sys_lchown16, sys_brk, sys32_perfctr, sys32_lseek
|
||||
/*15*/ .word sys_chmod, sys_lchown16, sys_brk, sys_nis_syscall, sys32_lseek
|
||||
/*20*/ .word sys_getpid, sys_capget, sys_capset, sys_setuid16, sys_getuid16
|
||||
/*25*/ .word sys32_vmsplice, compat_sys_ptrace, sys_alarm, sys32_sigaltstack, sys_pause
|
||||
/*30*/ .word compat_sys_utime, sys_lchown, sys_fchown, sys32_access, sys32_nice
|
||||
|
@ -96,7 +96,7 @@ sys_call_table:
|
|||
/*0*/ .word sys_restart_syscall, sparc_exit, sys_fork, sys_read, sys_write
|
||||
/*5*/ .word sys_open, sys_close, sys_wait4, sys_creat, sys_link
|
||||
/*10*/ .word sys_unlink, sys_nis_syscall, sys_chdir, sys_chown, sys_mknod
|
||||
/*15*/ .word sys_chmod, sys_lchown, sys_brk, sys_perfctr, sys_lseek
|
||||
/*15*/ .word sys_chmod, sys_lchown, sys_brk, sys_nis_syscall, sys_lseek
|
||||
/*20*/ .word sys_getpid, sys_capget, sys_capset, sys_setuid, sys_getuid
|
||||
/*25*/ .word sys_vmsplice, sys_ptrace, sys_alarm, sys_sigaltstack, sys_nis_syscall
|
||||
/*30*/ .word sys_utime, sys_nis_syscall, sys_nis_syscall, sys_access, sys_nice
|
||||
|
|
|
@ -2548,15 +2548,6 @@ void __init trap_init(void)
|
|||
rwbuf_stkptrs) ||
|
||||
TI_GSR != offsetof(struct thread_info, gsr) ||
|
||||
TI_XFSR != offsetof(struct thread_info, xfsr) ||
|
||||
TI_USER_CNTD0 != offsetof(struct thread_info,
|
||||
user_cntd0) ||
|
||||
TI_USER_CNTD1 != offsetof(struct thread_info,
|
||||
user_cntd1) ||
|
||||
TI_KERN_CNTD0 != offsetof(struct thread_info,
|
||||
kernel_cntd0) ||
|
||||
TI_KERN_CNTD1 != offsetof(struct thread_info,
|
||||
kernel_cntd1) ||
|
||||
TI_PCR != offsetof(struct thread_info, pcr_reg) ||
|
||||
TI_PRE_COUNT != offsetof(struct thread_info,
|
||||
preempt_count) ||
|
||||
TI_NEW_CHILD != offsetof(struct thread_info, new_child) ||
|
||||
|
|
|
@ -32,10 +32,9 @@ extern void prom_cif_interface(void);
|
|||
extern void prom_cif_callback(void);
|
||||
|
||||
/*
|
||||
* This provides SMP safety on the p1275buf. prom_callback() drops this lock
|
||||
* to allow recursuve acquisition.
|
||||
* This provides SMP safety on the p1275buf.
|
||||
*/
|
||||
DEFINE_SPINLOCK(prom_entry_lock);
|
||||
DEFINE_RAW_SPINLOCK(prom_entry_lock);
|
||||
|
||||
long p1275_cmd(const char *service, long fmt, ...)
|
||||
{
|
||||
|
@ -47,7 +46,9 @@ long p1275_cmd(const char *service, long fmt, ...)
|
|||
|
||||
p = p1275buf.prom_buffer;
|
||||
|
||||
spin_lock_irqsave(&prom_entry_lock, flags);
|
||||
raw_local_save_flags(flags);
|
||||
raw_local_irq_restore(PIL_NMI);
|
||||
raw_spin_lock(&prom_entry_lock);
|
||||
|
||||
p1275buf.prom_args[0] = (unsigned long)p; /* service */
|
||||
strcpy (p, service);
|
||||
|
@ -139,7 +140,8 @@ long p1275_cmd(const char *service, long fmt, ...)
|
|||
va_end(list);
|
||||
x = p1275buf.prom_args [nargs + 3];
|
||||
|
||||
spin_unlock_irqrestore(&prom_entry_lock, flags);
|
||||
raw_spin_unlock(&prom_entry_lock);
|
||||
raw_local_irq_restore(flags);
|
||||
|
||||
return x;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue