diff --git a/control/descriptor.c b/control/descriptor.c
index bec07637c288d0db4bc7e8acd4f1d348046586f2..798c97f50dfe7c8945902c7e33a562012261c424 100644
--- a/control/descriptor.c
+++ b/control/descriptor.c
@@ -151,7 +151,7 @@ MORSE_desc_t morse_desc_init_user(MORSE_enum dtyp, int mb, int nb, int bsiz,
     desc.occurences = 0;
     desc.use_mat      = 1;
     desc.alloc_mat    = 1;
-    desc.register_mat = 1;
+    desc.register_mat = (morse->ncudas > 0) ? 1 : 0;
     desc.ooc          = 0;
 
     desc.myrank = RUNTIME_comm_rank( morse );
diff --git a/runtime/starpu/control/runtime_descriptor.c b/runtime/starpu/control/runtime_descriptor.c
index 39282f386736479b9b94b472f16e3e673c5d96aa..16308ce3fec54e38bb561a52963b06728b594b05 100644
--- a/runtime/starpu/control/runtime_descriptor.c
+++ b/runtime/starpu/control/runtime_descriptor.c
@@ -127,6 +127,8 @@ void RUNTIME_desc_create( MORSE_desc_t *desc )
         rc = cudaHostRegister( desc->mat, size, cudaHostRegisterPortable );
         if ( rc != cudaSuccess )
         {
+            /* Disable the unregister as register failed */
+            desc->register_mat = 0;
             morse_warning("RUNTIME_desc_create(StarPU): cudaHostRegister - ", cudaGetErrorString( rc ));
         }
     }