Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc-2.6
authorLinus Torvalds <torvalds@linux-foundation.org>
Thu, 4 Mar 2010 16:24:47 +0000 (08:24 -0800)
committerLinus Torvalds <torvalds@linux-foundation.org>
Thu, 4 Mar 2010 16:24:47 +0000 (08:24 -0800)
* 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().

17 files changed:
arch/sparc/configs/sparc32_defconfig
arch/sparc/configs/sparc64_defconfig
arch/sparc/include/asm/io_32.h
arch/sparc/include/asm/io_64.h
arch/sparc/include/asm/perfctr.h
arch/sparc/include/asm/system_64.h
arch/sparc/include/asm/thread_info_64.h
arch/sparc/kernel/entry.h
arch/sparc/kernel/process_64.c
arch/sparc/kernel/rtrap_64.S
arch/sparc/kernel/sys32.S
arch/sparc/kernel/sys_sparc_64.c
arch/sparc/kernel/syscalls.S
arch/sparc/kernel/systbls.h
arch/sparc/kernel/systbls_64.S
arch/sparc/kernel/traps_64.c
arch/sparc/prom/p1275.c

index 99a1f191497be29ce8e1cae10b5db72272551214..6a8d078070cafae20fbc1615da3dc014114e2528 100644 (file)
@@ -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
index 41c5a56aa6f28b5a20c6c9e25215dafde9b3099b..56e3163673e304d333cb856538f1e5544b64d4c7 100644 (file)
@@ -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
index 679c7504625acc86deab57d1e1feada4ef408317..2889574608db72f36b3ae1ea61309f77e22e282f 100644 (file)
@@ -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)
 {
index 4aee21dc9c6f10d8f6d0f908177f7c56f5095c72..9517d063c79c604d99d21967981f07b92cb1c70c 100644 (file)
@@ -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);
index 836873002b7515cc92a727447d4b13775ee5202d..8d8720a8770de451e3e1911e189327caf03e4a2d 100644 (file)
@@ -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.
index d47a98e66972021afff27a0c4aeb0679855eaf81..d24cfe16afc1babc4feb78f0c697555754304346 100644 (file)
@@ -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)
index 39be9f256e5a5b6f24d1f1604759b6cbad2b5f4b..9e2d9447f2ad094e7e1ef963675ee36fa51ba06f 100644 (file)
@@ -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)
 
 /*
index 4f53a2395ac6364ed3f52f8226dc94ecb7e5fc4e..c011b932bb17dd8450ac94527ab73c63c5e51b38 100644 (file)
@@ -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);
 
index cb70476bd8f5ccd72a6f72900195f8a74f6abfcb..a5cf3864b31f87dcabf7abe4ea1e96be693b54b4 100644 (file)
@@ -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;
index 1ddec403f512b9650620a8827da688f71771b8e9..83f1873c6c131bfc68b21290fbe0bb3bfb9ffefb 100644 (file)
@@ -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:
index e7061138c98a03ec15b51eca77877144a9ddd9b9..46a76ba3fb4bd21d2b911b9ce99cf5f235264b68 100644 (file)
@@ -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)
index d77f54316948e83cdc035c9e04d76cbd8d4702a1..cb1bef6f14b7240e3f87bb693b060fcbcb90a081 100644 (file)
@@ -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.
index dc4a458f74dcc590a9cbe391dbc14a7b8302353c..1d7e274f3f2b42bfac80354f1745c7ad48cd9e27 100644 (file)
@@ -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
index d2f999ae2b85a04495d31ab2c77ad91924342f5a..68312fe8da740fa967ea3f90bd1c6cd15a7cf8a4 100644 (file)
@@ -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);
index e575b46bd7a9ebd84eb29578ef0e04952d07fff2..17614251fb6d8cb34cdc79722f1e3137b006c7a2 100644 (file)
@@ -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
index 10f7bb9fc1404e77a6eb542dec98285e98762162..bdc05a21908b98afab4189b7307a72a6b81a985f 100644 (file)
@@ -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) ||
index 4b7c937bba61704cf386e76c7907bbdcf1bcb759..2d8b70d397f154318612858c1bf7811160ee7f49 100644 (file)
@@ -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;
 }