On 06/16, Rodrigo Siqueira wrote: > On 06/16, Anson Jacob wrote: > > From: Victor Lu > > > > Test to ensure unloading and loading of amdgpu driver works > > > > Tested on: > > ASIC: NAVI14 > > > > Changes since v1: > > * Added documentaion > > * Updated commit message > > > > Signed-off-by: Victor Lu > > Co-developed-by: Anson Jacob > > Cc: Petri Latvala > > Cc: Rodrigo Siqueira > > Cc: Harry Wentland > > Cc: Mark Yacoub > > --- > > lib/igt_kmod.c | 59 ++++++++++++++++++++++++ > > lib/igt_kmod.h | 3 ++ > > tests/amdgpu/amd_module_load.c | 83 ++++++++++++++++++++++++++++++++++ > > tests/amdgpu/meson.build | 1 + > > 4 files changed, 146 insertions(+) > > create mode 100644 tests/amdgpu/amd_module_load.c > > > > diff --git a/lib/igt_kmod.c b/lib/igt_kmod.c > > index 55295fa5d09d..10e983844066 100644 > > --- a/lib/igt_kmod.c > > +++ b/lib/igt_kmod.c > > @@ -433,6 +433,65 @@ igt_i915_driver_unload(void) > > return IGT_EXIT_SUCCESS; > > } > > > > +/** > > + * igt_amdgpu_driver_load: > > + * @opts: options to pass to amdgpu driver > > + * > > + * Returns: IGT_EXIT_SUCCESS or IGT_EXIT_FAILURE. > > + * > > + * Loads the amdgpu driver and its dependencies. > > + * > > + */ > > +int > > +igt_amdgpu_driver_load(const char *opts) > > +{ > > + if (opts) > > + igt_info("Reloading amdgpu with %s\n\n", opts); > > + > > + if (igt_kmod_load("amdgpu", opts)) { > > + igt_warn("Could not load amdgpu\n"); > > + return IGT_EXIT_FAILURE; > > + } > > + > > + bind_fbcon(true); > > + > > + return IGT_EXIT_SUCCESS; > > +} > > + > > +/** > > + * igt_amdgpu_driver_unload: > > + * > > + * Returns: IGT_EXIT_SUCCESS on success, IGT_EXIT_FAILURE on failure > > + * and IGT_EXIT_SKIP if amdgpu could not be unloaded. > > + * > > + * Unloads the amdgpu driver and its dependencies. > > + * > > + */ > > +int > > +igt_amdgpu_driver_unload(void) > > +{ > > + bind_fbcon(false); > > + > > + if (igt_kmod_is_loaded("amdgpu")) { > > + if (igt_kmod_unload("amdgpu", 0)) { > > + igt_warn("Could not unload amdgpu\n"); > > + igt_kmod_list_loaded(); > > + igt_lsof("/dev/dri"); > > + return IGT_EXIT_SKIP; > > + } > > + } > > + > > + igt_kmod_unload("drm_kms_helper", 0); > > + igt_kmod_unload("drm", 0); > > + > > + if (igt_kmod_is_loaded("amdgpu")) { > > + igt_warn("amdgpu.ko still loaded!\n"); > > + return IGT_EXIT_FAILURE; > > + } > > + > > + return IGT_EXIT_SUCCESS; > > +} > > + > > static void kmsg_dump(int fd) > > { > > char record[4096 + 1]; > > diff --git a/lib/igt_kmod.h b/lib/igt_kmod.h > > index c71ec147621a..04c87516f1e6 100644 > > --- a/lib/igt_kmod.h > > +++ b/lib/igt_kmod.h > > @@ -39,6 +39,9 @@ int igt_kmod_unload(const char *mod_name, unsigned int flags); > > int igt_i915_driver_load(const char *opts); > > int igt_i915_driver_unload(void); > > > > +int igt_amdgpu_driver_load(const char *opts); > > +int igt_amdgpu_driver_unload(void); > > + > > void igt_kselftests(const char *module_name, > > const char *module_options, > > const char *result_option, > > diff --git a/tests/amdgpu/amd_module_load.c b/tests/amdgpu/amd_module_load.c > > new file mode 100644 > > index 000000000000..77df96d50bb6 > > --- /dev/null > > +++ b/tests/amdgpu/amd_module_load.c > > @@ -0,0 +1,83 @@ > > +/* > > + * Copyright 2021 Advanced Micro Devices, Inc. > > + * > > + * 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 COPYRIGHT HOLDER(S) OR AUTHOR(S) 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 "igt.h" > > +#include "igt_kmod.h" > > + > > +#include > > +#include > > +#include > > + > > +/** > > + * sanity_check: > > + * > > + * Ensures the driver is able to respond to DRM_IOCTL_AMDGPU_INFO ioctl > > + * with a timeout. > > + * > > + */ > > +static void sanity_check(void) > > +{ > > + int err = 0; > > + int fd; > > + int arg_ret; > > + struct drm_amdgpu_info args = {0}; > > + > > + args.return_pointer = (uintptr_t) &arg_ret; > > + args.return_size = sizeof(int); > > + args.query = AMDGPU_INFO_HW_IP_INFO; > > + args.query_hw_ip.type = AMDGPU_HW_IP_COMPUTE; > > + > > + fd = drm_open_driver(DRIVER_AMDGPU); > > + igt_set_timeout(1, "Module reload timeout!"); > > + > > + if (ioctl(fd, DRM_IOCTL_AMDGPU_INFO, &args) < 0) > > + err = -errno; > > + > > + igt_set_timeout(0, NULL); > > + close(fd); > > + > > + igt_assert_eq(err, 0); > > +} > > + > > +igt_main > > +{ > > + igt_describe("Make sure reloading amdgpu drivers works"); > > + igt_subtest("reload") { > > + int err; > > + igt_amdgpu_driver_unload(); > > + > > + err = igt_amdgpu_driver_load(NULL); > > + > > + igt_assert_eq(err, 0); > > + > > + sanity_check(); > > + > > + igt_amdgpu_driver_unload(); > > + } > > + > > + igt_fixture > > + { > > + /* load the module back in */ > > + igt_amdgpu_driver_load(NULL); > > + } > > +} > > diff --git a/tests/amdgpu/meson.build b/tests/amdgpu/meson.build > > index b92aa22b78e6..84179410b8d3 100644 > > --- a/tests/amdgpu/meson.build > > +++ b/tests/amdgpu/meson.build > > @@ -9,6 +9,7 @@ if libdrm_amdgpu.found() > > 'amd_cs_nop', > > 'amd_info', > > 'amd_prime', > > + 'amd_module_load', > > ] > > amdgpu_deps += libdrm_amdgpu > > endif > > -- > > 2.25.1 > > > > lgtm, thanks > > Reviewed-by: Rodrigo Siqueira > > -- > Rodrigo Siqueira > https://siqueira.tech Applied, Thanks a lot for your patch. -- Rodrigo Siqueira https://siqueira.tech