From 176a1bff8d9a1e36f08a73e0883730088a6eab4d Mon Sep 17 00:00:00 2001 From: Laxman Dewangan Date: Fri, 8 Dec 2023 06:37:09 +0000 Subject: [PATCH] tegra_hv: Use conftest to find if class_attribute function has const type arg Determine if struct class_attribute function has const type "struct class_attribute" argument or not. Modified the argument by change commit 75a2d4226b5371 ("driver core: class: mark the struct class for sysfs callbacks as constant") for Linux 6.3 Bug 4346767 Change-Id: I2a36025b23af80761faf1da406481731289eedd2 Signed-off-by: Laxman Dewangan Reviewed-on: https://git-master.nvidia.com/r/c/linux-nv-oot/+/3030734 (cherry picked from commit de4295cfa6b8973c4bfd946eef3f564cd9bbaffa) Reviewed-on: https://git-master.nvidia.com/r/c/linux-nv-oot/+/3059278 Tested-by: Jonathan Hunter Reviewed-by: Jonathan Hunter GVS: Gerrit_Virtual_Submit --- Makefile | 9 --------- drivers/virt/tegra/tegra_hv.c | 2 +- scripts/conftest/Makefile | 1 + scripts/conftest/conftest.sh | 20 ++++++++++++++++++++ 4 files changed, 22 insertions(+), 10 deletions(-) diff --git a/Makefile b/Makefile index ea06bf2c..de4f6b10 100644 --- a/Makefile +++ b/Makefile @@ -7,15 +7,6 @@ LINUXINCLUDE += -I$(srctree.nvidia-oot)/include subdir-ccflags-y += -Werror subdir-ccflags-y += -Wmissing-prototypes -LINUX_VERSION := $(shell expr $(VERSION) \* 256 + $(PATCHLEVEL)) -LINUX_VERSION_6_4 := $(shell expr 6 \* 256 + 4) - -# Changes done in Linux 6.4 onwards -ifeq ($(shell test $(LINUX_VERSION) -ge $(LINUX_VERSION_6_4); echo $$?),0) -# Argument on class attribute callback changed to constant type -subdir-ccflags-y += -DNV_CLASS_ATTRIBUTE_STRUCT_HAS_CONST_STRUCT_CLASS_ARG -endif - ifeq ($(CONFIG_TEGRA_VIRTUALIZATION),y) subdir-ccflags-y += -DCONFIG_TEGRA_VIRTUALIZATION endif diff --git a/drivers/virt/tegra/tegra_hv.c b/drivers/virt/tegra/tegra_hv.c index 134f5e78..37eeb6af 100644 --- a/drivers/virt/tegra/tegra_hv.c +++ b/drivers/virt/tegra/tegra_hv.c @@ -416,7 +416,7 @@ static void tegra_hv_cleanup(struct tegra_hv_data *hvd) } } -#if defined(NV_CLASS_ATTRIBUTE_STRUCT_HAS_CONST_STRUCT_CLASS_ARG) +#if defined(NV_CLASS_ATTRIBUTE_STRUCT_HAS_CONST_STRUCT_CLASS_ATTRIBUTE_ARG) static ssize_t vmid_show(const struct class *class, const struct class_attribute *attr, char *buf) #else diff --git a/scripts/conftest/Makefile b/scripts/conftest/Makefile index 00ebb3ec..e4e68320 100644 --- a/scripts/conftest/Makefile +++ b/scripts/conftest/Makefile @@ -96,6 +96,7 @@ NV_CONFTEST_FUNCTION_COMPILE_TESTS += block_device_operations_open_has_gendisk_a NV_CONFTEST_FUNCTION_COMPILE_TESTS += block_device_operations_release_has_no_mode_arg NV_CONFTEST_FUNCTION_COMPILE_TESTS += bus_type_struct_remove_has_int_return_type NV_CONFTEST_FUNCTION_COMPILE_TESTS += bus_type_struct_uevent_has_const_dev_arg +NV_CONFTEST_FUNCTION_COMPILE_TESTS += class_attribute_struct_has_const_struct_class_attribute NV_CONFTEST_FUNCTION_COMPILE_TESTS += class_create_has_no_owner_arg NV_CONFTEST_FUNCTION_COMPILE_TESTS += class_struct_devnode_has_const_dev_arg NV_CONFTEST_FUNCTION_COMPILE_TESTS += define_semaphore_has_number_arg diff --git a/scripts/conftest/conftest.sh b/scripts/conftest/conftest.sh index fbead866..a7fb0197 100755 --- a/scripts/conftest/conftest.sh +++ b/scripts/conftest/conftest.sh @@ -6604,6 +6604,26 @@ compile_test() { compile_check_conftest "$CODE" "NV_BUS_TYPE_STRUCT_UEVENT_HAS_CONST_DEV_ARG" "" "types" ;; + class_attribute_struct_has_const_struct_class_attribute) + # + # Determine if struct class_attribute function has const type "struct class_attribute" + # argument or not. + # + # Modified the argument by change commit 75a2d4226b5371 ("driver core: class: mark + # the struct class for sysfs callbacks as constant") for Linux 6.3 + # + CODE=" + #include + static ssize_t show_cb(struct class *class, struct class_attribute *attr, char *buf) { + return 0; + } + static struct class_attribute ca = { + .show = show_cb, + };" + + compile_check_conftest "$CODE" "NV_CLASS_ATTRIBUTE_STRUCT_HAS_CONST_STRUCT_CLASS_ATTRIBUTE_ARG" "" "functions" + ;; + class_create_has_no_owner_arg) # # Determine if the class_create() function has the 'owner' argument.