HwInputService::invoke (const DriverAPI *api, const Model *model,
SegmentTable *segt, outputCallback callback)
{
- const Metadata * meta = model->getMetadata ();
input_config_t input_config;
device_state_t state;
npuConstraint constraint;
input_config.output_mode = OUTPUT_HW;
/** Assumption: only a sigle pair of input/output segments in HW input service */
- input_config.hw_input_seg = meta->getInputSegmentIndex (0);
- input_config.hw_output_seg = meta->getOutputSegmentIndex (0);
+ input_config.hw_input_seg = model->getMetadata ()->getInputSegmentIndex (0);
+ input_config.hw_output_seg = model->getMetadata ()->getOutputSegmentIndex (0);
fd = open (segt->getHwDevice ().c_str (), O_RDONLY);
if (fd == -1) {
goto out_free_meta;
}
+ if (meta->input_seg_num > MAX_TENSORS ||
+ meta->output_seg_num > MAX_TENSORS) {
+ fprintf (stderr, "Invalid metadata detected\n");
+ err = -EINVAL;
+ goto out_free_meta;
+ }
+
arg_handle = calloc (meta->input_seg_num, sizeof(*arg_handle));
for (idx = 0; idx < meta->input_seg_num; idx++) {
struct drm_mode_create_dumb arg_create;
snprintf (input_path[idx], MAX_FILE_LEN, "%s/%s/input_fmap_%d.bin",
base_path, target, idx);
f = fopen (input_path[idx], "rb");
+ if (f == NULL) {
+ err = -errno;
+ goto out_close_drmfd;
+ }
input_size = get_file_size (input_path[idx]);
if (input_size <= 0) {
fprintf (stderr, "Wrong metadata; need %d input tensors\n",
meta->input_seg_num);
err = -EINVAL;
+ fclose (f);
goto out_close_drmfd;
}
arg_create.flags = 0;
err = drmIoctl (drm_fd, DRM_IOCTL_MODE_CREATE_DUMB, &arg_create);
- if (err)
+ if (err) {
+ fclose (f);
goto out_close_drmfd;
+ }
arg_handle[idx].handle = arg_create.handle;
arg_handle[idx].flags = DRM_CLOEXEC | DRM_RDWR;
arg_handle[idx].fd = -1;
err = drmIoctl (drm_fd, DRM_IOCTL_PRIME_HANDLE_TO_FD, &arg_handle[idx]);
- if (err)
+ if (err) {
+ fclose (f);
goto out_destroy_drm_dumb;
+ }
mapped = mmap (NULL, input_size, PROT_READ | PROT_WRITE, MAP_SHARED,
arg_handle[idx].fd, 0);
if (mapped == MAP_FAILED) {
err = errno;
+ fclose (f);
goto out_destroy_drm_dumb;
}