From 7adb4caf5ba6bdad8d69d4f11b5484e1408e64c4 Mon Sep 17 00:00:00 2001 From: Jon Hunter Date: Tue, 17 Sep 2024 17:30:02 +0100 Subject: [PATCH] misc: nvsciipc: Fix build for Linux v6.12 In Linux v6.12, commit 88a2f6468d01 ("struct fd: representation change") removed the 'struct file' pointer from 'struct fd'. This breaks building the NVSCIIPC driver that tries to directly access the 'file' pointer from the 'fd' structure. Fix this by using the helper macros 'fd_empty' and 'fd_file' as necessary to fix the build. Bug 4593750 Change-Id: I0f84736b408f533a732476175a8745091bc8542f Signed-off-by: Jon Hunter Reviewed-on: https://git-master.nvidia.com/r/c/linux-nv-oot/+/3217429 Reviewed-by: mobile promotions Tested-by: mobile promotions --- drivers/misc/nvsciipc/nvsciipc.c | 9 +++++++++ scripts/conftest/Makefile | 2 ++ scripts/conftest/conftest.sh | 34 ++++++++++++++++++++++++++++++++ 3 files changed, 45 insertions(+) diff --git a/drivers/misc/nvsciipc/nvsciipc.c b/drivers/misc/nvsciipc/nvsciipc.c index 27e25525..aae900d2 100644 --- a/drivers/misc/nvsciipc/nvsciipc.c +++ b/drivers/misc/nvsciipc/nvsciipc.c @@ -84,11 +84,20 @@ NvSciError NvSciIpcEndpointValidateAuthTokenLinuxCurrent( } f = fdget((int)authToken); +#if defined(NV_FD_EMPTY_PRESENT) /* Linux v6.12 */ + if (fd_empty(f)) { +#else if (!f.file) { +#endif ERR("invalid auth token\n"); return NvSciError_BadParameter; } + +#if defined(NV_FD_FILE_PRESENT) /* Linux v6.12 */ + filp = fd_file(f); +#else filp = f.file; +#endif devlen = strlen(filp->f_path.dentry->d_name.name); #if DEBUG_VALIDATE_TOKEN diff --git a/scripts/conftest/Makefile b/scripts/conftest/Makefile index b4e4544b..ab973f34 100644 --- a/scripts/conftest/Makefile +++ b/scripts/conftest/Makefile @@ -126,6 +126,8 @@ NV_CONFTEST_FUNCTION_COMPILE_TESTS += ethtool_kernel_ethtool_ts_info_struct_pres NV_CONFTEST_FUNCTION_COMPILE_TESTS += ethtool_ops_get_set_coalesce_has_coal_and_extack_args NV_CONFTEST_FUNCTION_COMPILE_TESTS += ethtool_ops_get_set_ringparam_has_ringparam_and_extack_args NV_CONFTEST_FUNCTION_COMPILE_TESTS += ethtool_ops_get_set_rxfh_has_rxfh_param_args +NV_CONFTEST_FUNCTION_COMPILE_TESTS += fd_empty +NV_CONFTEST_FUNCTION_COMPILE_TESTS += fd_file NV_CONFTEST_FUNCTION_COMPILE_TESTS += folio_entire_mapcount NV_CONFTEST_FUNCTION_COMPILE_TESTS += genpd_xlate_t_has_const_of_phandle_args NV_CONFTEST_FUNCTION_COMPILE_TESTS += get_file_rcu_has_double_ptr_file_arg diff --git a/scripts/conftest/conftest.sh b/scripts/conftest/conftest.sh index 65e148f7..63a25776 100755 --- a/scripts/conftest/conftest.sh +++ b/scripts/conftest/conftest.sh @@ -7246,6 +7246,40 @@ compile_test() { "NV_ETHTOOL_OPS_GET_SET_RXFH_HAS_RXFH_PARAM_ARGS" "" "types" ;; + fd_empty) + # + # Determine if macro fd_empty() is present. + # + # Added by commit 88a2f6468d01 ("struct fd: representation change") + # in Linux v6.12. + # + CODE=" + #include + void conftest(void) + { + fd_empty(); + }" + + compile_check_conftest "$CODE" "NV_FD_EMPTY_PRESENT" "" "functions" + ;; + + fd_file) + # + # Determine if macro fd_file() is present. + # + # Added by commit 88a2f6468d01 ("struct fd: representation change") + # in Linux v6.12. + # + CODE=" + #include + void conftest(void) + { + fd_file(); + }" + + compile_check_conftest "$CODE" "NV_FD_FILE_PRESENT" "" "functions" + ;; + folio_entire_mapcount) # # Determine if function folio_entire_mapcount() is present.