diff options
Diffstat (limited to 'include/os/linux/ioctl_tsg.c')
-rw-r--r-- | include/os/linux/ioctl_tsg.c | 26 |
1 files changed, 13 insertions, 13 deletions
diff --git a/include/os/linux/ioctl_tsg.c b/include/os/linux/ioctl_tsg.c index 2f8cb3a..296b02b 100644 --- a/include/os/linux/ioctl_tsg.c +++ b/include/os/linux/ioctl_tsg.c | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright (c) 2014-2020, NVIDIA CORPORATION. All rights reserved. | 2 | * Copyright (c) 2014-2021, NVIDIA CORPORATION. All rights reserved. |
3 | * | 3 | * |
4 | * This program is free software; you can redistribute it and/or modify it | 4 | * This program is free software; you can redistribute it and/or modify it |
5 | * under the terms and conditions of the GNU General Public License, | 5 | * under the terms and conditions of the GNU General Public License, |
@@ -134,7 +134,10 @@ static int gk20a_tsg_unbind_channel_fd(struct tsg_gk20a *tsg, int ch_fd) | |||
134 | goto out; | 134 | goto out; |
135 | } | 135 | } |
136 | 136 | ||
137 | err = gk20a_tsg_unbind_channel(ch); | 137 | err = gk20a_tsg_unbind_channel(ch, false); |
138 | if (err == -EAGAIN) { | ||
139 | goto out; | ||
140 | } | ||
138 | 141 | ||
139 | /* | 142 | /* |
140 | * Mark the channel timedout since channel unbound from TSG | 143 | * Mark the channel timedout since channel unbound from TSG |
@@ -307,17 +310,10 @@ static int gk20a_tsg_event_id_enable(struct tsg_gk20a *tsg, | |||
307 | snprintf(name, sizeof(name), "nvgpu-event%d-fd%d", | 310 | snprintf(name, sizeof(name), "nvgpu-event%d-fd%d", |
308 | event_id, local_fd); | 311 | event_id, local_fd); |
309 | 312 | ||
310 | file = anon_inode_getfile(name, &gk20a_event_id_ops, | ||
311 | NULL, O_RDWR); | ||
312 | if (IS_ERR(file)) { | ||
313 | err = PTR_ERR(file); | ||
314 | goto clean_up; | ||
315 | } | ||
316 | |||
317 | event_id_data = nvgpu_kzalloc(tsg->g, sizeof(*event_id_data)); | 313 | event_id_data = nvgpu_kzalloc(tsg->g, sizeof(*event_id_data)); |
318 | if (!event_id_data) { | 314 | if (!event_id_data) { |
319 | err = -ENOMEM; | 315 | err = -ENOMEM; |
320 | goto clean_up_file; | 316 | goto clean_up; |
321 | } | 317 | } |
322 | event_id_data->g = g; | 318 | event_id_data->g = g; |
323 | event_id_data->id = tsg->tsgid; | 319 | event_id_data->id = tsg->tsgid; |
@@ -330,12 +326,18 @@ static int gk20a_tsg_event_id_enable(struct tsg_gk20a *tsg, | |||
330 | 326 | ||
331 | nvgpu_init_list_node(&event_id_data->event_id_node); | 327 | nvgpu_init_list_node(&event_id_data->event_id_node); |
332 | 328 | ||
329 | file = anon_inode_getfile(name, &gk20a_event_id_ops, | ||
330 | event_id_data, O_RDWR); | ||
331 | if (IS_ERR(file)) { | ||
332 | err = PTR_ERR(file); | ||
333 | goto clean_up_free; | ||
334 | } | ||
335 | |||
333 | nvgpu_mutex_acquire(&tsg->event_id_list_lock); | 336 | nvgpu_mutex_acquire(&tsg->event_id_list_lock); |
334 | nvgpu_list_add_tail(&event_id_data->event_id_node, &tsg->event_id_list); | 337 | nvgpu_list_add_tail(&event_id_data->event_id_node, &tsg->event_id_list); |
335 | nvgpu_mutex_release(&tsg->event_id_list_lock); | 338 | nvgpu_mutex_release(&tsg->event_id_list_lock); |
336 | 339 | ||
337 | fd_install(local_fd, file); | 340 | fd_install(local_fd, file); |
338 | file->private_data = event_id_data; | ||
339 | 341 | ||
340 | *fd = local_fd; | 342 | *fd = local_fd; |
341 | 343 | ||
@@ -343,8 +345,6 @@ static int gk20a_tsg_event_id_enable(struct tsg_gk20a *tsg, | |||
343 | 345 | ||
344 | clean_up_free: | 346 | clean_up_free: |
345 | nvgpu_kfree(g, event_id_data); | 347 | nvgpu_kfree(g, event_id_data); |
346 | clean_up_file: | ||
347 | fput(file); | ||
348 | clean_up: | 348 | clean_up: |
349 | put_unused_fd(local_fd); | 349 | put_unused_fd(local_fd); |
350 | free_ref: | 350 | free_ref: |