Add support for rejected inference responses
Change-Id: I62e13df69c712ed4cf70766429b4cb13fc9c9dcb
diff --git a/kernel/ethosu_core_interface.h b/kernel/ethosu_core_interface.h
index 5a6e55d..76fe35e 100644
--- a/kernel/ethosu_core_interface.h
+++ b/kernel/ethosu_core_interface.h
@@ -95,7 +95,9 @@
*/
enum ethosu_core_status {
ETHOSU_CORE_STATUS_OK,
- ETHOSU_CORE_STATUS_ERROR
+ ETHOSU_CORE_STATUS_ERROR,
+ ETHOSU_CORE_STATUS_RUNNING,
+ ETHOSU_CORE_STATUS_REJECTED,
};
/**
diff --git a/kernel/ethosu_inference.c b/kernel/ethosu_inference.c
index 3c18bbd..73a8c06 100644
--- a/kernel/ethosu_inference.c
+++ b/kernel/ethosu_inference.c
@@ -70,6 +70,12 @@
case ETHOSU_UAPI_STATUS_ERROR: {
return "Error";
}
+ case ETHOSU_UAPI_STATUS_RUNNING: {
+ return "Running";
+ }
+ case ETHOSU_UAPI_STATUS_REJECTED: {
+ return "Rejected";
+ }
default: {
return "Unknown";
}
@@ -93,6 +99,8 @@
if (ret)
return ret;
+ inf->status = ETHOSU_UAPI_STATUS_RUNNING;
+
ethosu_inference_get(inf);
return 0;
@@ -412,30 +420,34 @@
if (ret)
inf->status = ETHOSU_UAPI_STATUS_ERROR;
}
+ } else if (rsp->status == ETHOSU_CORE_STATUS_REJECTED) {
+ inf->status = ETHOSU_UAPI_STATUS_REJECTED;
} else {
inf->status = ETHOSU_UAPI_STATUS_ERROR;
}
- for (i = 0; i < ETHOSU_CORE_PMU_MAX; i++) {
- inf->pmu_event_config[i] = rsp->pmu_event_config[i];
- inf->pmu_event_count[i] = rsp->pmu_event_count[i];
+ if (inf->status == ETHOSU_UAPI_STATUS_OK) {
+ for (i = 0; i < ETHOSU_CORE_PMU_MAX; i++) {
+ inf->pmu_event_config[i] = rsp->pmu_event_config[i];
+ inf->pmu_event_count[i] = rsp->pmu_event_count[i];
+ }
+
+ inf->pmu_cycle_counter_enable = rsp->pmu_cycle_counter_enable;
+ inf->pmu_cycle_counter_count = rsp->pmu_cycle_counter_count;
+
+ dev_info(edev->dev,
+ "PMU events. config=[%u, %u, %u, %u], count=[%u, %u, %u, %u]\n",
+ inf->pmu_event_config[0], inf->pmu_event_config[1],
+ inf->pmu_event_config[2], inf->pmu_event_config[3],
+ inf->pmu_event_count[0], inf->pmu_event_count[1],
+ inf->pmu_event_count[2], inf->pmu_event_count[3]);
+
+ dev_info(edev->dev,
+ "PMU cycle counter. enable=%u, count=%llu\n",
+ inf->pmu_cycle_counter_enable,
+ inf->pmu_cycle_counter_count);
}
- inf->pmu_cycle_counter_enable = rsp->pmu_cycle_counter_enable;
- inf->pmu_cycle_counter_count = rsp->pmu_cycle_counter_count;
-
- dev_info(edev->dev,
- "PMU events. config=[%u, %u, %u, %u], count=[%u, %u, %u, %u]\n",
- inf->pmu_event_config[0], inf->pmu_event_config[1],
- inf->pmu_event_config[2], inf->pmu_event_config[3],
- inf->pmu_event_count[0], inf->pmu_event_count[1],
- inf->pmu_event_count[2], inf->pmu_event_count[3]);
-
- dev_info(edev->dev,
- "PMU cycle counter. enable=%u, count=%llu\n",
- inf->pmu_cycle_counter_enable,
- inf->pmu_cycle_counter_count);
-
inf->done = true;
wake_up_interruptible(&inf->waitq);
diff --git a/kernel/uapi/ethosu.h b/kernel/uapi/ethosu.h
index fda7fc2..4627cb9 100644
--- a/kernel/uapi/ethosu.h
+++ b/kernel/uapi/ethosu.h
@@ -75,7 +75,9 @@
*/
enum ethosu_uapi_status {
ETHOSU_UAPI_STATUS_OK,
- ETHOSU_UAPI_STATUS_ERROR
+ ETHOSU_UAPI_STATUS_ERROR,
+ ETHOSU_UAPI_STATUS_RUNNING,
+ ETHOSU_UAPI_STATUS_REJECTED,
};
/**