|
@@ -16,14 +16,22 @@
|
|
|
|
|
|
#include <starpu.h>
|
|
#include <starpu.h>
|
|
|
|
|
|
|
|
+#define TAG 0x42
|
|
|
|
+
|
|
static starpu_data_handle handle;
|
|
static starpu_data_handle handle;
|
|
static unsigned data = 42;
|
|
static unsigned data = 42;
|
|
|
|
|
|
static void wrong_func(starpu_data_interface_t *descr, void *arg)
|
|
static void wrong_func(starpu_data_interface_t *descr, void *arg)
|
|
{
|
|
{
|
|
|
|
+ int ret;
|
|
|
|
+
|
|
/* try to fetch data in the RAM while we are in a codelet, such a
|
|
/* try to fetch data in the RAM while we are in a codelet, such a
|
|
* blocking call is forbidden */
|
|
* blocking call is forbidden */
|
|
- int ret = starpu_sync_data_with_mem(handle);
|
|
|
|
|
|
+ ret = starpu_sync_data_with_mem(handle);
|
|
|
|
+ if (ret != -EDEADLK)
|
|
|
|
+ exit(-1);
|
|
|
|
+
|
|
|
|
+ ret = starpu_tag_wait(TAG);
|
|
if (ret != -EDEADLK)
|
|
if (ret != -EDEADLK)
|
|
exit(-1);
|
|
exit(-1);
|
|
}
|
|
}
|
|
@@ -39,7 +47,13 @@ static starpu_codelet wrong_codelet =
|
|
|
|
|
|
static void wrong_callback(void *arg)
|
|
static void wrong_callback(void *arg)
|
|
{
|
|
{
|
|
- int ret = starpu_sync_data_with_mem(handle);
|
|
|
|
|
|
+ int ret;
|
|
|
|
+
|
|
|
|
+ ret = starpu_sync_data_with_mem(handle);
|
|
|
|
+ if (ret != -EDEADLK)
|
|
|
|
+ exit(-1);
|
|
|
|
+
|
|
|
|
+ ret = starpu_tag_wait(TAG);
|
|
if (ret != -EDEADLK)
|
|
if (ret != -EDEADLK)
|
|
exit(-1);
|
|
exit(-1);
|
|
}
|
|
}
|
|
@@ -61,13 +75,19 @@ int main(int argc, char **argv)
|
|
task->buffers[0].handle = handle;
|
|
task->buffers[0].handle = handle;
|
|
task->buffers[0].mode = STARPU_RW;
|
|
task->buffers[0].mode = STARPU_RW;
|
|
|
|
|
|
|
|
+ task->use_tag = 1;
|
|
|
|
+ task->tag_id = TAG;
|
|
|
|
+
|
|
task->callback_func = wrong_callback;
|
|
task->callback_func = wrong_callback;
|
|
|
|
|
|
- task->synchronous = 1;
|
|
|
|
ret = starpu_submit_task(task);
|
|
ret = starpu_submit_task(task);
|
|
if (ret == -ENODEV)
|
|
if (ret == -ENODEV)
|
|
goto enodev;
|
|
goto enodev;
|
|
|
|
|
|
|
|
+ ret = starpu_tag_wait(TAG);
|
|
|
|
+ if (ret)
|
|
|
|
+ return -1;
|
|
|
|
+
|
|
/* This call is valid as it is done by the application outside a
|
|
/* This call is valid as it is done by the application outside a
|
|
* callback */
|
|
* callback */
|
|
ret = starpu_sync_data_with_mem(handle);
|
|
ret = starpu_sync_data_with_mem(handle);
|