mirror of
git://nv-tegra.nvidia.com/linux-nvgpu.git
synced 2025-12-22 17:36:20 +03:00
gpu: nvgpu: define error_notifiers in common code
All the linux specific error_notifier codes are defined in linux specific header file <uapi/linux/nvgpu.h> and used in all the common driver But since they are defined in linux specific file, we need to move all the uses of those error_notifiers in linux specific code only Hence define new error_notifiers in include/nvgpu/error_notifier.h and use them in the common code Add new API nvgpu_error_notifier_to_channel_notifier() to convert common error_notifier of the form NVGPU_ERR_NOTIFIER_* to linux specific error notifier of the form NVGPU_CHANNEL_* Any future additions to error notifiers requires update to both the form of error notifiers Move all error notifier related metadata from channel_gk20a (common code) to linux specific structure nvgpu_channel_linux Update all accesses to this data from new structure instead of channel_gk20a Move and rename below APIs to linux specific file and declare them in error_notifier.h nvgpu_set_error_notifier_locked() nvgpu_set_error_notifier() nvgpu_is_error_notifier_set() Add below new API and use it in fifo_vgpu.c nvgpu_set_error_notifier_if_empty() Include <nvgpu/error_notifier.h> wherever new error_notifier codes are used NVGPU-426 Change-Id: Iaa5bfc150e6e9ec17d797d445c2d6407afe9f4bd Signed-off-by: Deepak Nibade <dnibade@nvidia.com> Reviewed-on: https://git-master.nvidia.com/r/1593361 Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com> Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
This commit is contained in:
committed by
mobile promotions
parent
a0cea295e7
commit
c6b9177cff
@@ -30,6 +30,7 @@
|
||||
#include <nvgpu/list.h>
|
||||
#include <nvgpu/debug.h>
|
||||
#include <nvgpu/enabled.h>
|
||||
#include <nvgpu/error_notifier.h>
|
||||
|
||||
#include "gk20a/gk20a.h"
|
||||
#include "gk20a/dbg_gpu_gk20a.h"
|
||||
@@ -227,15 +228,17 @@ static int gk20a_channel_set_wdt_status(struct channel_gk20a *ch,
|
||||
|
||||
static void gk20a_channel_free_error_notifiers(struct channel_gk20a *ch)
|
||||
{
|
||||
nvgpu_mutex_acquire(&ch->error_notifier_mutex);
|
||||
if (ch->error_notifier_ref) {
|
||||
dma_buf_vunmap(ch->error_notifier_ref, ch->error_notifier_va);
|
||||
dma_buf_put(ch->error_notifier_ref);
|
||||
ch->error_notifier_ref = NULL;
|
||||
ch->error_notifier = NULL;
|
||||
ch->error_notifier_va = NULL;
|
||||
struct nvgpu_channel_linux *priv = ch->os_priv;
|
||||
|
||||
nvgpu_mutex_acquire(&priv->error_notifier.mutex);
|
||||
if (priv->error_notifier.dmabuf) {
|
||||
dma_buf_vunmap(priv->error_notifier.dmabuf, priv->error_notifier.vaddr);
|
||||
dma_buf_put(priv->error_notifier.dmabuf);
|
||||
priv->error_notifier.dmabuf = NULL;
|
||||
priv->error_notifier.notification = NULL;
|
||||
priv->error_notifier.vaddr = NULL;
|
||||
}
|
||||
nvgpu_mutex_release(&ch->error_notifier_mutex);
|
||||
nvgpu_mutex_release(&priv->error_notifier.mutex);
|
||||
}
|
||||
|
||||
static int gk20a_init_error_notifier(struct channel_gk20a *ch,
|
||||
@@ -244,6 +247,7 @@ static int gk20a_init_error_notifier(struct channel_gk20a *ch,
|
||||
struct dma_buf *dmabuf;
|
||||
void *va;
|
||||
u64 end = args->offset + sizeof(struct nvgpu_notification);
|
||||
struct nvgpu_channel_linux *priv = ch->os_priv;
|
||||
|
||||
if (!args->mem) {
|
||||
pr_err("gk20a_init_error_notifier: invalid memory handle\n");
|
||||
@@ -273,14 +277,15 @@ static int gk20a_init_error_notifier(struct channel_gk20a *ch,
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
ch->error_notifier = va + args->offset;
|
||||
ch->error_notifier_va = va;
|
||||
memset(ch->error_notifier, 0, sizeof(struct nvgpu_notification));
|
||||
priv->error_notifier.notification = va + args->offset;
|
||||
priv->error_notifier.vaddr = va;
|
||||
memset(priv->error_notifier.notification, 0,
|
||||
sizeof(struct nvgpu_notification));
|
||||
|
||||
/* set channel notifiers pointer */
|
||||
nvgpu_mutex_acquire(&ch->error_notifier_mutex);
|
||||
ch->error_notifier_ref = dmabuf;
|
||||
nvgpu_mutex_release(&ch->error_notifier_mutex);
|
||||
nvgpu_mutex_acquire(&priv->error_notifier.mutex);
|
||||
priv->error_notifier.dmabuf = dmabuf;
|
||||
nvgpu_mutex_release(&priv->error_notifier.mutex);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -1361,7 +1366,7 @@ long gk20a_channel_ioctl(struct file *filp,
|
||||
break;
|
||||
}
|
||||
err = ch->g->ops.fifo.force_reset_ch(ch,
|
||||
NVGPU_CHANNEL_RESETCHANNEL_VERIF_ERROR, true);
|
||||
NVGPU_ERR_NOTIFIER_RESETCHANNEL_VERIF_ERROR, true);
|
||||
gk20a_idle(ch->g);
|
||||
break;
|
||||
case NVGPU_IOCTL_CHANNEL_EVENT_ID_CTRL:
|
||||
|
||||
Reference in New Issue
Block a user