virt: hvc_sysfs: Fix build for Linux v6.13

In Linux v6.13, commit 94a20fb9af16 ("sysfs: treewide: constify
attribute callback of bin_attribute::mmap()") changed the type of the
'struct bin_attribute' argument of the bin_attribute:mmap function
pointer to const. Use conftest to detect if this argument is const or
not in the kernel the driver is being compiled against to fix the build.

Bug 4991705

Change-Id: I791d6c9dde50f1444d0339ebd8a18434045f9026
Signed-off-by: Jon Hunter <jonathanh@nvidia.com>
Reviewed-on: https://git-master.nvidia.com/r/c/linux-nv-oot/+/3261699
Reviewed-by: Manish Bhardwaj <mbhardwaj@nvidia.com>
GVS: buildbot_gerritrpt <buildbot_gerritrpt@nvidia.com>
This commit is contained in:
Jon Hunter
2024-12-03 17:54:29 +00:00
parent ef57537991
commit 66ddf2ba6f
3 changed files with 31 additions and 2 deletions

View File

@@ -1,5 +1,5 @@
/*
* SPDX-FileCopyrightText: Copyright (c) 2022-2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
* SPDX-FileCopyrightText: Copyright (c) 2022-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
* SPDX-License-Identifier: GPL-2.0-only
*
* This program is free software; you can redistribute it and/or modify it
@@ -15,6 +15,8 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <nvidia/conftest.h>
#include <linux/module.h>
#include <linux/init.h>
#include <linux/errno.h>
@@ -52,7 +54,12 @@ static struct hyp_shared_memory_info hyp_shared_memory_attrs[HYP_SHM_ID_NUM];
/* Map the HV trace buffer to the calling user process */
static int hvc_sysfs_mmap(struct file *fp, struct kobject *ko,
struct bin_attribute *attr, struct vm_area_struct *vma)
#if defined(NV_BIN_ATTRIBUTE_STRUCT_MMAP_HAS_CONST_BIN_ATTRIBUTE_ARG) /* Linux v6.13 */
const struct bin_attribute *attr,
#else
struct bin_attribute *attr,
#endif
struct vm_area_struct *vma)
{
struct hyp_shared_memory_info *hyp_shm_info =
container_of(attr, struct hyp_shared_memory_info, attr);

View File

@@ -91,6 +91,7 @@ endef
NV_CONFTEST_FUNCTION_COMPILE_TESTS += __alloc_disk_node_has_lkclass_arg
NV_CONFTEST_FUNCTION_COMPILE_TESTS += __assign_str_has_no_src_arg
NV_CONFTEST_FUNCTION_COMPILE_TESTS += aperture_remove_all_conflicting_devices
NV_CONFTEST_FUNCTION_COMPILE_TESTS += bin_attribute_struct_mmap_has_const_bin_attribute_arg
NV_CONFTEST_FUNCTION_COMPILE_TESTS += blk_execute_rq_has_no_gendisk_arg
NV_CONFTEST_FUNCTION_COMPILE_TESTS += blk_mq_alloc_disk_for_queue
NV_CONFTEST_FUNCTION_COMPILE_TESTS += blk_mq_alloc_queue

View File

@@ -6556,6 +6556,27 @@ compile_test() {
compile_check_conftest "$CODE" "NV_APERTURE_REMOVE_ALL_CONFLICTING_DEVICES_PRESENT" "" "types"
;;
bin_attribute_struct_mmap_has_const_bin_attribute_arg)
#
# Determine if the 'bin_attribute' structure 'mmap' function pointer
# has const 'struct bin_attribute' argument.
#
# Commit 94a20fb9af16 ("sysfs: treewide: constify attribute callback
# of bin_attribute::mmap()") updated the 'mmap' function pointer to
# take a const 'bin_attribute' structure in Linux v6.13.
#
CODE="
#include <linux/sysfs.h>
void conftest(struct bin_attribute *attr) {
int (*fn)(struct file *, struct kobject *,
const struct bin_attribute *,
struct vm_area_struct *) = attr->mmap;
}"
compile_check_conftest "$CODE" \
"NV_BIN_ATTRIBUTE_STRUCT_MMAP_HAS_CONST_BIN_ATTRIBUTE_ARG" "" "types"
;;
blk_execute_rq_has_no_gendisk_arg)
#
# Determine if the function blk_execute_rq() has an argument of