Page MenuHomeFreeBSD

D14566.diff
No OneTemporary

D14566.diff

Index: head/sys/powerpc/include/spr.h
===================================================================
--- head/sys/powerpc/include/spr.h
+++ head/sys/powerpc/include/spr.h
@@ -120,6 +120,20 @@
#define SPR_EIE 0x050 /* ..8 Exception Interrupt ??? */
#define SPR_EID 0x051 /* ..8 Exception Interrupt ??? */
#define SPR_NRI 0x052 /* ..8 Exception Interrupt ??? */
+#define SPR_FSCR 0x099 /* Facility Status and Control Register */
+#define FSCR_IC_MASK 0xFF00000000000000ULL /* FSCR[0:7] is Interrupt Cause */
+#define FSCR_IC_FP 0x0000000000000000ULL /* FP unavailable */
+#define FSCR_IC_VSX 0x0100000000000000ULL /* VSX unavailable */
+#define FSCR_IC_DSCR 0x0200000000000000ULL /* Access to the DSCR at SPRs 3 or 17 */
+#define FSCR_IC_PM 0x0300000000000000ULL /* Read or write access of a Performance Monitor SPR in group A */
+#define FSCR_IC_BHRB 0x0400000000000000ULL /* Execution of a BHRB Instruction */
+#define FSCR_IC_HTM 0x0500000000000000ULL /* Access to a Transactional Memory */
+/* Reserved 0x0500000000000000ULL */
+#define FSCR_IC_EBB 0x0700000000000000ULL /* Access to Event-Based Branch */
+#define FSCR_IC_TAR 0x0800000000000000ULL /* Access to Target Address Register */
+#define FSCR_IC_STOP 0x0900000000000000ULL /* Access to the 'stop' instruction in privileged non-hypervisor state */
+#define FSCR_IC_MSG 0x0A00000000000000ULL /* Access to 'msgsndp' or 'msgclrp' instructions */
+#define FSCR_IC_SCV 0x0C00000000000000ULL /* Execution of a 'scv' instruction */
#define SPR_USPRG0 0x100 /* 4.. User SPR General 0 */
#define SPR_VRSAVE 0x100 /* .6. AltiVec VRSAVE */
#define SPR_SPRG0 0x110 /* 468 SPR General 0 */
Index: head/sys/powerpc/powerpc/trap.c
===================================================================
--- head/sys/powerpc/powerpc/trap.c
+++ head/sys/powerpc/powerpc/trap.c
@@ -204,6 +204,7 @@
int sig, type, user;
u_int ucode;
ksiginfo_t ksi;
+ register_t fscr;
VM_CNT_INC(v_trap);
@@ -294,6 +295,13 @@
break;
case EXC_FAC:
+ fscr = mfspr(SPR_FSCR);
+ if ((fscr & FSCR_IC_MASK) == FSCR_IC_HTM) {
+ CTR0(KTR_TRAP, "Hardware Transactional Memory subsystem disabled");
+ }
+ sig = SIGILL;
+ ucode = ILL_ILLOPC;
+ break;
case EXC_HEA:
sig = SIGILL;
ucode = ILL_ILLOPC;

File Metadata

Mime Type
text/plain
Expires
Sun, Sep 29, 3:32 PM (22 h, 12 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
13138162
Default Alt Text
D14566.diff (2 KB)

Event Timeline