From dd8be7cb82a0f3d31e8c87c882a7014055c94710 Mon Sep 17 00:00:00 2001 From: Thomas Fleury Date: Tue, 26 Nov 2019 15:38:31 -0500 Subject: [PATCH] gpu: nvgpu: posix: add os_priv for channel Add os_priv for channel, to store error notifier. Updated the following functions to use error notifier in ch->os_priv, when present: - nvgpu_set_err_notifier_locked - nvgpu_set_err_notifier - nvgpu_set_err_notifier_if_emtpy - nvgpu_is_err_notifier_set Jira NVGPU-4387 Change-Id: I9718d045fc780f721548201981b038de46b36a7e Signed-off-by: Thomas Fleury Reviewed-on: https://git-master.nvidia.com/r/2248160 Reviewed-by: svc-mobile-coverity Reviewed-by: svc-mobile-cert GVS: Gerrit_Virtual_Submit Reviewed-by: Alex Waterman Reviewed-by: mobile promotions Tested-by: mobile promotions --- arch/nvgpu-posix.yaml | 1 + .../nvgpu/include/nvgpu/posix/posix-channel.h | 35 +++++++++++++++++++ drivers/gpu/nvgpu/os/posix/error_notifier.c | 17 +++++++++ 3 files changed, 53 insertions(+) create mode 100644 drivers/gpu/nvgpu/include/nvgpu/posix/posix-channel.h diff --git a/arch/nvgpu-posix.yaml b/arch/nvgpu-posix.yaml index 89580d5d9..d57d56584 100644 --- a/arch/nvgpu-posix.yaml +++ b/arch/nvgpu-posix.yaml @@ -49,6 +49,7 @@ headers: include/nvgpu/posix/nvgpu_mem.h, include/nvgpu/posix/pci.h, include/nvgpu/posix/posix-fault-injection.h, + include/nvgpu/posix/posix-channel.h, include/nvgpu/posix/probe.h, include/nvgpu/posix/soc_fuse.h, include/nvgpu/posix/vm.h, diff --git a/drivers/gpu/nvgpu/include/nvgpu/posix/posix-channel.h b/drivers/gpu/nvgpu/include/nvgpu/posix/posix-channel.h new file mode 100644 index 000000000..5649e8dab --- /dev/null +++ b/drivers/gpu/nvgpu/include/nvgpu/posix/posix-channel.h @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2019, NVIDIA CORPORATION. All rights reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ +#ifndef NVGPU_POSIX_CHANNEL_H +#define NVGPU_POSIX_CHANNEL_H + +#include +#include + +struct nvgpu_posix_channel { + struct { + u32 error; + u32 status; + } err_notifier; +}; + +#endif diff --git a/drivers/gpu/nvgpu/os/posix/error_notifier.c b/drivers/gpu/nvgpu/os/posix/error_notifier.c index 956119c1b..5b34c1277 100644 --- a/drivers/gpu/nvgpu/os/posix/error_notifier.c +++ b/drivers/gpu/nvgpu/os/posix/error_notifier.c @@ -21,20 +21,37 @@ */ #include +#include + +#include void nvgpu_set_err_notifier_locked(struct nvgpu_channel *ch, u32 error) { + struct nvgpu_posix_channel *cp = ch->os_priv; + if (cp != NULL) { + cp->err_notifier.error = error; + cp->err_notifier.status = 0xffff; + } } void nvgpu_set_err_notifier(struct nvgpu_channel *ch, u32 error) { + nvgpu_set_err_notifier_locked(ch, error); } void nvgpu_set_err_notifier_if_empty(struct nvgpu_channel *ch, u32 error) { + struct nvgpu_posix_channel *cp = ch->os_priv; + if (cp != NULL && cp->err_notifier.status == 0) { + nvgpu_set_err_notifier_locked(ch, error); + } } bool nvgpu_is_err_notifier_set(struct nvgpu_channel *ch, u32 error_notifier) { + struct nvgpu_posix_channel *cp = ch->os_priv; + if ((cp != NULL) && (cp->err_notifier.status != 0)) { + return cp->err_notifier.error == error_notifier; + } return false; }