diff --git a/driver/rsdRuntimeStubs.cpp b/driver/rsdRuntimeStubs.cpp
index b7e676e..1bfbf9f 100644
--- a/driver/rsdRuntimeStubs.cpp
+++ b/driver/rsdRuntimeStubs.cpp
@@ -157,6 +157,24 @@
 
 #endif
 
+// Some RS functions are not threadsafe but can be called from an invoke
+// function.  Instead of summarily marking scripts that call these functions as
+// not-threadable we detect calls to them in the driver and sends a fatal error
+// message.
+static bool failIfInKernel(Context *rsc, const char *funcName) {
+    RsdHal *dc = (RsdHal *)rsc->mHal.drv;
+    RsdCpuReference *impl = (RsdCpuReference *) dc->mCpuRef;
+
+    if (impl->getInForEach()) {
+        char buf[256];
+        sprintf(buf, "Error: Call to unsupported function %s "
+                         "in kernel", funcName);
+        rsc->setError(RS_ERROR_FATAL_DRIVER, buf);
+        return true;
+    }
+    return false;
+}
+
 //////////////////////////////////////////////////////////////////////////////
 // Allocation
 //////////////////////////////////////////////////////////////////////////////
@@ -181,6 +199,9 @@
                                      RS_TY_ALLOC srcAlloc,
                                      uint32_t srcOff, uint32_t srcMip) {
     Context *rsc = RsdCpuReference::getTlsContext();
+    if (failIfInKernel(rsc, "rsAllocationCopy1DRange"))
+        return;
+
     rsrAllocationCopy1DRange(rsc, rsGetObjPtr(dstAlloc), dstOff, dstMip, count,
                              rsGetObjPtr(srcAlloc), srcOff, srcMip);
 }
@@ -193,6 +214,9 @@
                                      uint32_t srcXoff, uint32_t srcYoff,
                                      uint32_t srcMip, uint32_t srcFace) {
     Context *rsc = RsdCpuReference::getTlsContext();
+    if (failIfInKernel(rsc, "rsAllocationCopy2DRange"))
+        return;
+
     rsrAllocationCopy2DRange(rsc, rsGetObjPtr(dstAlloc),
                              dstXoff, dstYoff, dstMip, dstFace,
                              width, height, rsGetObjPtr(srcAlloc),
@@ -201,12 +225,18 @@
 
 static void SC_AllocationIoSend(RS_TY_ALLOC alloc) {
     Context *rsc = RsdCpuReference::getTlsContext();
+    if (failIfInKernel(rsc, "rsAllocationIoSend"))
+        return;
+
     rsrAllocationIoSend(rsc, rsGetObjPtr(alloc));
 }
 
 
 static void SC_AllocationIoReceive(RS_TY_ALLOC alloc) {
     Context *rsc = RsdCpuReference::getTlsContext();
+    if (failIfInKernel(rsc, "rsAllocationIoReceive"))
+        return;
+
     rsrAllocationIoReceive(rsc, rsGetObjPtr(alloc));
 }
 
@@ -219,6 +249,9 @@
                                      RS_TY_ALLOC srcAlloc,
                                      uint32_t srcOff, uint32_t srcMip) {
     Context *rsc = RsdCpuReference::getTlsContext();
+    if (failIfInKernel(rsc, "rsAllocationCopy1DRange"))
+        return;
+
     rsrAllocationCopy1DRange(rsc, rsGetObjPtr(dstAlloc), dstOff, dstMip, count,
                              rsGetObjPtr(srcAlloc), srcOff, srcMip);
 }
@@ -231,6 +264,9 @@
                                      uint32_t srcXoff, uint32_t srcYoff,
                                      uint32_t srcMip, uint32_t srcFace) {
     Context *rsc = RsdCpuReference::getTlsContext();
+    if (failIfInKernel(rsc, "rsAllocationCopy2DRange"))
+        return;
+
     rsrAllocationCopy2DRange(rsc, rsGetObjPtr(dstAlloc),
                              dstXoff, dstYoff, dstMip, dstFace,
                              width, height,
@@ -240,12 +276,18 @@
 
 static void SC_AllocationIoSend(RS_TY_ALLOC alloc) {
     Context *rsc = RsdCpuReference::getTlsContext();
+    if (failIfInKernel(rsc, "rsAllocationIoSend"))
+        return;
+
     rsrAllocationIoSend(rsc, rsGetObjPtr(alloc));
 }
 
 
 static void SC_AllocationIoReceive(RS_TY_ALLOC alloc) {
     Context *rsc = RsdCpuReference::getTlsContext();
+    if (failIfInKernel(rsc, "rsAllocationIoReceive"))
+        return;
+
     rsrAllocationIoReceive(rsc, rsGetObjPtr(alloc));
 }
 
diff --git a/run_rs_cts.sh b/run_rs_cts.sh
index 48bc001..9022844 100755
--- a/run_rs_cts.sh
+++ b/run_rs_cts.sh
@@ -1,12 +1,22 @@
-#!/bin/bash
+#!/bin/bash -x
 
 # Run the general RS CTS tests. We can expand this script to run more tests
 # as we see fit, but this essentially should be a reasonable smoke test of
 # RenderScript (to be run on build/test bots).
 
 CTS_TRADEFED=$ANDROID_BUILD_TOP/out/host/linux-x86/bin/cts-tradefed
+TMP_PATH=`mktemp -d`
 
 #$CTS_TRADEFED run commandAndExit cts --force-abi 64 -p android.renderscript
 #$CTS_TRADEFED run commandAndExit cts --force-abi 32 -p android.renderscript
-$CTS_TRADEFED run commandAndExit cts -p android.renderscript
+$CTS_TRADEFED run commandAndExit cts --output-file-path $TMP_PATH -p android.renderscript
+
+CTS_RESULTS=$ANDROID_BUILD_TOP/cts-results
+RESULTS=$CTS_RESULTS/renderscript
+mkdir -p $CTS_RESULTS
+rm -rf $RESULTS
+mkdir $RESULTS
+find $TMP_PATH -name 'testResult.xml' -exec cp {} $RESULTS/ \;
+rm -rf $TMP_PATH
+
 exit $?
