diff options
Diffstat (limited to 'drivers/staging/gasket/gasket_interrupt.c')
-rw-r--r-- | drivers/staging/gasket/gasket_interrupt.c | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/drivers/staging/gasket/gasket_interrupt.c b/drivers/staging/gasket/gasket_interrupt.c index 2d6195f7300e..864342acfd86 100644 --- a/drivers/staging/gasket/gasket_interrupt.c +++ b/drivers/staging/gasket/gasket_interrupt.c | |||
@@ -487,14 +487,16 @@ int gasket_interrupt_system_status(struct gasket_dev *gasket_dev) | |||
487 | int gasket_interrupt_set_eventfd(struct gasket_interrupt_data *interrupt_data, | 487 | int gasket_interrupt_set_eventfd(struct gasket_interrupt_data *interrupt_data, |
488 | int interrupt, int event_fd) | 488 | int interrupt, int event_fd) |
489 | { | 489 | { |
490 | struct eventfd_ctx *ctx = eventfd_ctx_fdget(event_fd); | 490 | struct eventfd_ctx *ctx; |
491 | |||
492 | if (IS_ERR(ctx)) | ||
493 | return PTR_ERR(ctx); | ||
494 | 491 | ||
495 | if (interrupt < 0 || interrupt >= interrupt_data->num_interrupts) | 492 | if (interrupt < 0 || interrupt >= interrupt_data->num_interrupts) |
496 | return -EINVAL; | 493 | return -EINVAL; |
497 | 494 | ||
495 | ctx = eventfd_ctx_fdget(event_fd); | ||
496 | |||
497 | if (IS_ERR(ctx)) | ||
498 | return PTR_ERR(ctx); | ||
499 | |||
498 | interrupt_data->eventfd_ctxs[interrupt] = ctx; | 500 | interrupt_data->eventfd_ctxs[interrupt] = ctx; |
499 | return 0; | 501 | return 0; |
500 | } | 502 | } |
@@ -505,6 +507,9 @@ int gasket_interrupt_clear_eventfd(struct gasket_interrupt_data *interrupt_data, | |||
505 | if (interrupt < 0 || interrupt >= interrupt_data->num_interrupts) | 507 | if (interrupt < 0 || interrupt >= interrupt_data->num_interrupts) |
506 | return -EINVAL; | 508 | return -EINVAL; |
507 | 509 | ||
508 | interrupt_data->eventfd_ctxs[interrupt] = NULL; | 510 | if (interrupt_data->eventfd_ctxs[interrupt]) { |
511 | eventfd_ctx_put(interrupt_data->eventfd_ctxs[interrupt]); | ||
512 | interrupt_data->eventfd_ctxs[interrupt] = NULL; | ||
513 | } | ||
509 | return 0; | 514 | return 0; |
510 | } | 515 | } |