aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/staging/gasket/gasket_interrupt.c')
-rw-r--r--drivers/staging/gasket/gasket_interrupt.c15
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)
487int gasket_interrupt_set_eventfd(struct gasket_interrupt_data *interrupt_data, 487int 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}