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; }