diff --git a/drivers/gpu/nvgpu/gk20a/channel_gk20a.c b/drivers/gpu/nvgpu/gk20a/channel_gk20a.c index 4ad9d85b9..468ee7f13 100644 --- a/drivers/gpu/nvgpu/gk20a/channel_gk20a.c +++ b/drivers/gpu/nvgpu/gk20a/channel_gk20a.c @@ -2583,6 +2583,28 @@ static int gk20a_channel_get_event_data_from_id(struct channel_gk20a *ch, } } +void gk20a_channel_event_id_post_event(struct channel_gk20a *ch, + int event_id) +{ + struct gk20a_event_id_data *event_id_data; + int err = 0; + + err = gk20a_channel_get_event_data_from_id(ch, event_id, + &event_id_data); + if (err) + return; + + mutex_lock(&event_id_data->lock); + + gk20a_dbg_info( + "posting event for event_id=%d on ch=%d\n", + event_id, ch->hw_chid); + + wake_up_interruptible_all(&event_id_data->event_id_wq); + + mutex_unlock(&event_id_data->lock); +} + static int gk20a_channel_event_id_enable(struct channel_gk20a *ch, int event_id, int *fd) diff --git a/drivers/gpu/nvgpu/gk20a/channel_gk20a.h b/drivers/gpu/nvgpu/gk20a/channel_gk20a.h index 577e3861a..ca11739e3 100644 --- a/drivers/gpu/nvgpu/gk20a/channel_gk20a.h +++ b/drivers/gpu/nvgpu/gk20a/channel_gk20a.h @@ -281,5 +281,7 @@ int gk20a_channel_get_timescale_from_timeslice(struct gk20a *g, int *__timeslice_timeout, int *__timeslice_scale); int gk20a_channel_set_priority(struct channel_gk20a *ch, u32 priority); int gk20a_channel_set_timeslice(struct channel_gk20a *ch, u32 timeslice); +void gk20a_channel_event_id_post_event(struct channel_gk20a *ch, + int event_id); #endif /* CHANNEL_GK20A_H */ diff --git a/drivers/gpu/nvgpu/gk20a/tsg_gk20a.c b/drivers/gpu/nvgpu/gk20a/tsg_gk20a.c index a0232a693..51e6407c2 100644 --- a/drivers/gpu/nvgpu/gk20a/tsg_gk20a.c +++ b/drivers/gpu/nvgpu/gk20a/tsg_gk20a.c @@ -212,6 +212,28 @@ static int gk20a_tsg_get_event_data_from_id(struct tsg_gk20a *tsg, } } +void gk20a_tsg_event_id_post_event(struct tsg_gk20a *tsg, + int event_id) +{ + struct gk20a_event_id_data *event_id_data; + int err = 0; + + err = gk20a_tsg_get_event_data_from_id(tsg, event_id, + &event_id_data); + if (err) + return; + + mutex_lock(&event_id_data->lock); + + gk20a_dbg_info( + "posting event for event_id=%d on tsg=%d\n", + event_id, tsg->tsgid); + + wake_up_interruptible_all(&event_id_data->event_id_wq); + + mutex_unlock(&event_id_data->lock); +} + static int gk20a_tsg_event_id_enable(struct tsg_gk20a *tsg, int event_id, int *fd) diff --git a/drivers/gpu/nvgpu/gk20a/tsg_gk20a.h b/drivers/gpu/nvgpu/gk20a/tsg_gk20a.h index ac872e306..9a23c9739 100644 --- a/drivers/gpu/nvgpu/gk20a/tsg_gk20a.h +++ b/drivers/gpu/nvgpu/gk20a/tsg_gk20a.h @@ -59,4 +59,7 @@ struct tsg_gk20a { int gk20a_enable_tsg(struct tsg_gk20a *tsg); int gk20a_disable_tsg(struct tsg_gk20a *tsg); +void gk20a_tsg_event_id_post_event(struct tsg_gk20a *tsg, + int event_id); + #endif /* __TSG_GK20A_H_ */