Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
69 changes: 69 additions & 0 deletions kernel-open/conftest.sh
Original file line number Diff line number Diff line change
Expand Up @@ -4450,7 +4450,11 @@ compile_test() {
# in v6.11.
#
CODE="
#if defined(NV_DRM_CLIENTS_DRM_FBDEV_HELPER_H_PRESENT)
#include <drm/clients/drm_fbdev_helper.h>
#else
#include <drm/drm_fb_helper.h>
#endif
#if defined(NV_DRM_DRM_FBDEV_GENERIC_H_PRESENT)
#include <drm/drm_fbdev_generic.h>
#endif
Expand All @@ -4470,7 +4474,11 @@ compile_test() {
# 1000634477d8 ("drm/fbdev-ttm:Convert to client-setup") in v6.13.
#
CODE="
#if defined(NV_DRM_CLIENTS_DRM_FBDEV_HELPER_H_PRESENT)
#include <drm/clients/drm_fbdev_helper.h>
#else
#include <drm/drm_fb_helper.h>
#endif
#if defined(NV_DRM_DRM_FBDEV_TTM_H_PRESENT)
#include <drm/drm_fbdev_ttm.h>
#endif
Expand All @@ -4492,7 +4500,11 @@ compile_test() {
# in linux-next b86711c6d6e2.
#
CODE="
#if defined(NV_DRM_CLIENTS_DRM_FBDEV_HELPER_H_PRESENT)
#include <drm/clients/drm_fbdev_helper.h>
#else
#include <drm/drm_fb_helper.h>
#endif
#if defined(NV_DRM_DRM_CLIENT_SETUP_H_PRESENT)
#include <drm/drm_client_setup.h>
#elif defined(NV_DRM_CLIENTS_DRM_CLIENT_SETUP_H_PRESENT)
Expand Down Expand Up @@ -5337,6 +5349,32 @@ compile_test() {
compile_check_conftest "$CODE" "NV_MEMORY_DEVICE_COHERENT_PRESENT" "" "types"
;;

drm_plane_funcs_has_atomic_create_state)
#
# Determine if drm_plane_funcs has an atomic_create_state callback.
#
CODE="
#include <drm/drm_plane.h>
int conftest_drm_plane_funcs_has_atomic_create_state(void) {
return offsetof(struct drm_plane_funcs, atomic_create_state);
}"

compile_check_conftest "$CODE" "NV_DRM_PLANE_FUNCS_HAS_ATOMIC_CREATE_STATE" "" "types"
;;

drm_crtc_funcs_has_atomic_create_state)
#
# Determine if drm_crtc_funcs has an atomic_create_state callback.
#
CODE="
#include <drm/drm_crtc.h>
int conftest_drm_crtc_funcs_has_atomic_create_state(void) {
return offsetof(struct drm_crtc_funcs, atomic_create_state);
}"

compile_check_conftest "$CODE" "NV_DRM_CRTC_FUNCS_HAS_ATOMIC_CREATE_STATE" "" "types"
;;

drm_crtc_funcs_has_get_vblank_timestamp)
#
# Determine if the 'drm_crtc_funcs' structure has a
Expand Down Expand Up @@ -5387,6 +5425,37 @@ compile_test() {
compile_check_conftest "$CODE" "NV_DMEM_CGROUP_PRESENT" "" "types"
;;

dmem_cgroup_register_region_has_init_arg)
#
# Determine if dmem_cgroup_register_region takes an initializer
# instead of the region size as its first argument.
#
CODE="
#include <linux/cgroup_dmem.h>
struct dmem_cgroup_init;
typeof(dmem_cgroup_register_region) conftest_dmem_cgroup_register_region_has_init_arg;
struct dmem_cgroup_region *conftest_dmem_cgroup_register_region_has_init_arg(
const struct dmem_cgroup_init *init, const char *fmt, ...) {
return NULL;
}"

compile_check_conftest "$CODE" "NV_DMEM_CGROUP_REGISTER_REGION_HAS_INIT_ARG" "" "types"
;;

vma_is_hugetlb)
#
# Determine if the renamed hugetlb VMA helper is present.
# typeof requires a declaration even when implicit function
# declaration warnings are disabled for other conftests.
#
CODE="
#include <linux/mm.h>
typeof(vma_is_hugetlb) conftest_vma_is_hugetlb;
"

compile_check_conftest "$CODE" "NV_VMA_IS_HUGETLB_PRESENT" "" "types"
;;

misc_cgrp_id)
#
# Check to see if the misc cgroup type is available
Expand Down
1 change: 1 addition & 0 deletions kernel-open/header-presence-tests.mk
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ NV_HEADER_PRESENCE_TESTS = \
drm/drm_client_setup.h \
drm/drm_probe_helper.h \
drm/clients/drm_client_setup.h \
drm/clients/drm_fbdev_helper.h \
dt-bindings/interconnect/tegra_icc_id.h \
generated/autoconf.h \
generated/compile.h \
Expand Down
51 changes: 51 additions & 0 deletions kernel-open/nvidia-drm/nvidia-drm-crtc.c
Original file line number Diff line number Diff line change
Expand Up @@ -2193,6 +2193,27 @@ static inline struct nv_drm_plane_state *nv_drm_plane_state_alloc(void)
return nv_plane_state;
}

#if defined(NV_DRM_PLANE_FUNCS_HAS_ATOMIC_CREATE_STATE)
/**
* nv_drm_plane_atomic_create_state - plane state creation hook
* @plane: DRM plane
*
* Allocate an empty DRM plane state.
*/
static struct drm_plane_state *
nv_drm_plane_atomic_create_state(struct drm_plane *plane)
{
struct nv_drm_plane_state *nv_plane_state =
nv_drm_plane_state_alloc();

if (!nv_plane_state) {
return ERR_PTR(-ENOMEM);
}

__drm_atomic_helper_plane_state_init(&nv_plane_state->base, plane);
return &nv_plane_state->base;
}
#else
/**
* nv_drm_plane_atomic_reset - plane state reset hook
* @plane: DRM plane
Expand Down Expand Up @@ -2223,6 +2244,7 @@ static void nv_drm_plane_atomic_reset(struct drm_plane *plane)
kfree(nv_plane_state);
}
}
#endif


static struct drm_plane_state *
Expand Down Expand Up @@ -2344,7 +2366,11 @@ static const struct drm_plane_funcs nv_plane_funcs = {
.update_plane = drm_atomic_helper_update_plane,
.disable_plane = drm_atomic_helper_disable_plane,
.destroy = nv_drm_plane_destroy,
#if defined(NV_DRM_PLANE_FUNCS_HAS_ATOMIC_CREATE_STATE)
.atomic_create_state = nv_drm_plane_atomic_create_state,
#else
.reset = nv_drm_plane_atomic_reset,
#endif
.atomic_get_property = nv_drm_plane_atomic_get_property,
.atomic_set_property = nv_drm_plane_atomic_set_property,
.atomic_duplicate_state = nv_drm_plane_atomic_duplicate_state,
Expand Down Expand Up @@ -2409,6 +2435,26 @@ static inline struct nv_drm_crtc_state *nv_drm_crtc_state_alloc(void)
}


#if defined(NV_DRM_CRTC_FUNCS_HAS_ATOMIC_CREATE_STATE)
/**
* nv_drm_atomic_crtc_create_state - crtc state creation hook
* @crtc: DRM crtc
*
* Allocate an empty DRM crtc state.
*/
static struct drm_crtc_state *
nv_drm_atomic_crtc_create_state(struct drm_crtc *crtc)
{
struct nv_drm_crtc_state *nv_state = nv_drm_crtc_state_alloc();

if (!nv_state) {
return ERR_PTR(-ENOMEM);
}

__drm_atomic_helper_crtc_state_init(&nv_state->base, crtc);
return &nv_state->base;
}
#else
/**
* nv_drm_atomic_crtc_reset - crtc state reset hook
* @crtc: DRM crtc
Expand Down Expand Up @@ -2438,6 +2484,7 @@ static void nv_drm_atomic_crtc_reset(struct drm_crtc *crtc)
kfree(nv_state);
}
}
#endif

/**
* nv_drm_atomic_crtc_duplicate_state - crtc state duplicate hook
Expand Down Expand Up @@ -2585,7 +2632,11 @@ static bool nv_drm_crtc_get_vblank_timestamp(
static struct drm_crtc_funcs nv_crtc_funcs = {
.set_config = drm_atomic_helper_set_config,
.page_flip = drm_atomic_helper_page_flip,
#if defined(NV_DRM_CRTC_FUNCS_HAS_ATOMIC_CREATE_STATE)
.atomic_create_state = nv_drm_atomic_crtc_create_state,
#else
.reset = nv_drm_atomic_crtc_reset,
#endif
.destroy = nv_drm_crtc_destroy,
.atomic_get_property = nv_drm_atomic_crtc_get_property,
.atomic_set_property = nv_drm_atomic_crtc_set_property,
Expand Down
4 changes: 4 additions & 0 deletions kernel-open/nvidia-drm/nvidia-drm-drv.c
Original file line number Diff line number Diff line change
Expand Up @@ -64,8 +64,12 @@
#endif

#if defined(NV_DRM_FBDEV_AVAILABLE)
#if defined(NV_DRM_CLIENTS_DRM_FBDEV_HELPER_H_PRESENT)
#include <drm/clients/drm_fbdev_helper.h>
#else
#include <drm/drm_fb_helper.h>
#endif
#endif

#if defined(NV_DRM_DRM_CLIENT_SETUP_H_PRESENT)
#include <drm/drm_client_setup.h>
Expand Down
2 changes: 2 additions & 0 deletions kernel-open/nvidia-drm/nvidia-drm-sources.mk
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,8 @@ NV_CONFTEST_TYPE_COMPILE_TESTS += drm_driver_prime_flag_present
NV_CONFTEST_TYPE_COMPILE_TESTS += vm_fault_t
NV_CONFTEST_TYPE_COMPILE_TESTS += drm_gem_object_has_resv
NV_CONFTEST_TYPE_COMPILE_TESTS += drm_crtc_state_has_async_flip
NV_CONFTEST_TYPE_COMPILE_TESTS += drm_crtc_funcs_has_atomic_create_state
NV_CONFTEST_TYPE_COMPILE_TESTS += drm_plane_funcs_has_atomic_create_state
NV_CONFTEST_TYPE_COMPILE_TESTS += drm_crtc_state_has_pageflip_flags
NV_CONFTEST_TYPE_COMPILE_TESTS += drm_crtc_state_has_vrr_enabled
NV_CONFTEST_TYPE_COMPILE_TESTS += mm_has_mmap_lock
Expand Down
1 change: 1 addition & 0 deletions kernel-open/nvidia-uvm/nvidia-uvm.Kbuild
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,7 @@ NV_CONFTEST_TYPE_COMPILE_TESTS += mmu_interval_notifier
NV_CONFTEST_TYPE_COMPILE_TESTS += sg_dma_page_iter
NV_CONFTEST_TYPE_COMPILE_TESTS += struct_page_has_zone_device_data
NV_CONFTEST_TYPE_COMPILE_TESTS += memory_device_coherent_present
NV_CONFTEST_TYPE_COMPILE_TESTS += vma_is_hugetlb
NV_CONFTEST_TYPE_COMPILE_TESTS += dma_buf_supports_dynamic_importer

NV_CONFTEST_SYMBOL_COMPILE_TESTS += is_export_symbol_present_int_active_memcg
Expand Down
8 changes: 6 additions & 2 deletions kernel-open/nvidia-uvm/uvm_hmm.c
Original file line number Diff line number Diff line change
Expand Up @@ -4032,14 +4032,18 @@ bool uvm_hmm_must_use_sysmem(uvm_va_block_t *va_block,
if (vma_has_cow_sharing(vma))
return true;

// migrate_vma_setup() can't migrate VM_SPECIAL so we have to force GPU
// migrate_vma_setup() can't migrate special mappings so we have to force GPU
// remote mapping.
// TODO: Bug 3660968: add support for file-backed migrations.
// TODO: Bug 3368756: add support for transparent huge page migrations.
return !vma_is_anonymous(vma) ||
(vma->vm_flags & VM_SPECIAL) ||
(vma->vm_flags & (VM_IO | VM_DONTEXPAND | VM_PFNMAP | VM_MIXEDMAP)) ||
vma_is_dax(vma) ||
#if defined(NV_VMA_IS_HUGETLB_PRESENT)
vma_is_hugetlb(vma);
#else
is_vm_hugetlb_page(vma);
#endif
}

#endif // UVM_IS_CONFIG_HMM()
1 change: 1 addition & 0 deletions kernel-open/nvidia/nvidia.Kbuild
Original file line number Diff line number Diff line change
Expand Up @@ -264,6 +264,7 @@ NV_CONFTEST_TYPE_COMPILE_TESTS += register_shrinker_has_format_arg
NV_CONFTEST_TYPE_COMPILE_TESTS += nr_kernel_misc_reclaimable
NV_CONFTEST_TYPE_COMPILE_TESTS += pci_resize_resource_has_exclude_bars_arg
NV_CONFTEST_TYPE_COMPILE_TESTS += dmem_cgrp_id
NV_CONFTEST_TYPE_COMPILE_TESTS += dmem_cgroup_register_region_has_init_arg
NV_CONFTEST_TYPE_COMPILE_TESTS += misc_cgrp_id
NV_CONFTEST_TYPE_COMPILE_TESTS += is_vma_write_locked_has_mm_lock_seq_arg
NV_CONFTEST_TYPE_COMPILE_TESTS += percpu_mm_counter
Expand Down
5 changes: 5 additions & 0 deletions kernel-open/nvidia/os-interface.c
Original file line number Diff line number Diff line change
Expand Up @@ -3028,7 +3028,12 @@ void* NV_API_CALL os_cgroup_parent(void *cgroup) { return NULL; }
#if defined(NV_DMEM_CGROUP_PRESENT)
void* NV_API_CALL os_dmem_cgroup_register_region(const char *name, NvU64 size, NvU64 precharge, void **prechargePool)
{
#if defined(NV_DMEM_CGROUP_REGISTER_REGION_HAS_INIT_ARG)
const struct dmem_cgroup_init init = { .size = size };
void *region = dmem_cgroup_register_region(&init, name);
#else
void *region = dmem_cgroup_register_region(size, name);
#endif
if (IS_ERR(region))
{
return NULL;
Expand Down