Files
linux-nvgpu/drivers/gpu/nvgpu/os/posix/file_ops.c
Prateek sethi 7d8757b9a4 gpu: nvgpu: add fault injection for file ops
This creates wrappers for read and fstat and adds the ability to
enable fault injection for these calls.

Jira NVGPU-2678

Change-Id: I8bdf38e7044aef5bb676b3c35dabccb0daf4f334
Signed-off-by: Prateek sethi <prsethi@nvidia.com>
Reviewed-on: https://git-master.nvidia.com/r/2171299
Reviewed-by: Dinesh T <dt@nvidia.com>
GVS: Gerrit_Virtual_Submit
Reviewed-by: Alex Waterman <alexw@nvidia.com>
Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com>
Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
2020-12-15 14:05:52 -06:00

76 lines
2.2 KiB
C

/*
* 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.
*/
#include <nvgpu/bug.h>
#include <nvgpu/log.h>
#include <nvgpu/posix/file_ops.h>
#ifdef NVGPU_UNITTEST_FAULT_INJECTION_ENABLEMENT
#include <nvgpu/posix/posix-fault-injection.h>
#endif
#ifdef NVGPU_UNITTEST_FAULT_INJECTION_ENABLEMENT
_Thread_local struct nvgpu_posix_fault_inj fstat_op;
_Thread_local struct nvgpu_posix_fault_inj fread_op;
struct nvgpu_posix_fault_inj *nvgpu_file_ops_get_fstat_injection(void)
{
return &fstat_op;
}
struct nvgpu_posix_fault_inj *nvgpu_file_ops_get_fread_injection(void)
{
return &fread_op;
}
#endif
int nvgpu_fstat(int fd, struct stat *buf)
{
#ifdef NVGPU_UNITTEST_FAULT_INJECTION_ENABLEMENT
if (nvgpu_posix_fault_injection_handle_call(&fstat_op)) {
return -1;
}
#endif
return fstat(fd, buf);
}
ssize_t nvgpu_fread(int fildes, void* buf, size_t nbytes)
{
#ifdef NVGPU_UNITTEST_FAULT_INJECTION_ENABLEMENT
if (nvgpu_posix_fault_injection_handle_call(&fread_op)) {
errno = -1;
return -1;
}
#endif
return read(fildes, buf, nbytes);
}
void nvgpu_close(int fd)
{
int ret;
ret = close(fd);
if (ret != 0) {
nvgpu_err(NULL, "close() failed %d", ret);
}
}