Kernel – 5.18-rc1 Released. Breaks VMware and NVIDIA. VMware Fix Available.
Kernel 5.18-rc1 is out, and (brief) details are here: https://lkml.iu.edu/hypermail/linux/kernel/2204.0/02355.html
VMware 16.2.3 vmmon/vmnet compiles fail, but there is a fix available, at https://github.com/mkubecek/vmware-host-modules/tree/tmp/workstation-16.2.3-k5.18. I have applied this, and both compile OK.
NVIDIA 510.60.02 compile fails:
……………….
CONFTEST: drm_alpha_blending_available
CONFTEST: ib_peer_memory_symbols
CC [M] /home/rgadsdon/NVIDIA-Linux-x86_64-510.60.02/kernel/nvidia/nv.o
/home/rgadsdon/NVIDIA-Linux-x86_64-510.60.02/kernel/nvidia/nv.c: In function ‘nv_set_dma_address_size’:
/home/rgadsdon/NVIDIA-Linux-x86_64-510.60.02/kernel/nvidia/nv.c:2768:9: error: implicit declaration of function ‘pci_set_dma_mask’; did you mean ‘ipi_send_mask’? [-Werror=implicit-function-declaration]
2768 | pci_set_dma_mask(nvl->pci_dev, new_mask);
| ^~~~~~~~~~~~~~~~
| ipi_send_mask
/home/rgadsdon/NVIDIA-Linux-x86_64-510.60.02/kernel/nvidia/nv.c:2774:9: error: implicit declaration of function ‘pci_set_consistent_dma_mask’ [-Werror=implicit-function-declaration]
2774 | pci_set_consistent_dma_mask(nvl->pci_dev, new_mask);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~
cc1: some warnings being treated as errors
make[2]: *** [scripts/Makefile.build:288: /home/rgadsdon/NVIDIA-Linux-x86_64-510.60.02/kernel/nvidia/nv.o] Error 1
make[1]: *** [Makefile:1834: /home/rgadsdon/NVIDIA-Linux-x86_64-510.60.02/kernel] Error 2
make[1]: Leaving directory ‘/usr/src/linux-5.18-rc1’
make: *** [Makefile:82: modules] Error 2
– and so far, there does not appear to be a patch available to fix this.
Robert Gadsdon. April 3rd 2022.
Try this for nvidia patch for 5.18-rc1 …
— nvidia-510.54/nvidia/nv.c 2022-02-08 13:41:43.000000000 +0800
+++ nvidia-510.54/nvidia/nv.c 2022-04-04 13:15:50.459893021 +0800
@@ -22,6 +22,7 @@
*/
#include “nvmisc.h”
+#include “linux/dma-mapping.h”
#include “os-interface.h”
#include “nv-linux.h”
#include “nv-p2p.h”
@@ -2765,13 +2766,13 @@
*/
if (!nvl->tce_bypass_enabled)
{
– pci_set_dma_mask(nvl->pci_dev, new_mask);
+ dma_set_mask((struct device *) &nvl->pci_dev, new_mask);
/* Certain kernels have a bug which causes pci_set_consistent_dma_mask
* to call GPL sme_active symbol, this bug has already been fixed in a
* minor release update but detect the failure scenario here to prevent
* an installation regression */
#if !NV_IS_EXPORT_SYMBOL_GPL_sme_active
– pci_set_consistent_dma_mask(nvl->pci_dev, new_mask);
+ dma_set_coherent_mask((struct device *) &nvl->pci_dev, new_mask);
#endif
}
}
— nvidia-510.54/nvidia/linux_nvswitch.c 2022-02-08 13:41:43.000000000 +0800
+++ nvidia-510.54/nvidia/linux_nvswitch.c 2022-04-04 13:44:31.179882519 +0800
@@ -21,9 +21,8 @@
*******************************************************************************/
#include “linux_nvswitch.h”
–
#include
–
+#include “linux/dma-direction.h”
#include “conftest.h”
#include “nvlink_errors.h”
#include “nvlink_linux.h”
@@ -2140,11 +2139,11 @@
)
{
if (direction == NVSWITCH_DMA_DIR_TO_SYSMEM)
– return PCI_DMA_FROMDEVICE;
+ return DMA_FROM_DEVICE;
else if (direction == NVSWITCH_DMA_DIR_FROM_SYSMEM)
– return PCI_DMA_TODEVICE;
+ return DMA_TO_DEVICE;
else
– return PCI_DMA_BIDIRECTIONAL;
+ return DMA_BIDIRECTIONAL;
}
NvlStatus
@@ -2165,9 +2164,9 @@
dma_dir = _nvswitch_to_pci_dma_direction(direction);
– *dma_handle = (NvU64)pci_map_single(pdev, cpu_addr, size, dma_dir);
+ *dma_handle = (NvU64)dma_map_single(&pdev->dev, cpu_addr, size, (enum dma_data_direction) dma_dir);
– if (pci_dma_mapping_error(pdev, *dma_handle))
+ if (dma_mapping_error(&pdev->dev, *dma_handle))
{
pr_err(“nvidia-nvswitch: unable to create PCI DMA mapping\n”);
return -NVL_ERR_GENERIC;
@@ -2194,7 +2193,7 @@
dma_dir = _nvswitch_to_pci_dma_direction(direction);
– pci_unmap_single(pdev, dma_handle, size, dma_dir);
+ dma_unmap_single(&pdev->dev, dma_handle, size, (enum dma_data_direction) dma_dir);
return NVL_SUCCESS;
}
@@ -2211,7 +2210,7 @@
if (!pdev)
return -NVL_BAD_ARGS;
– if (pci_set_dma_mask(pdev, DMA_BIT_MASK(dma_addr_width)))
+ if (dma_set_mask(&pdev->dev, DMA_BIT_MASK(dma_addr_width)))
return -NVL_ERR_GENERIC;
return NVL_SUCCESS;
@@ -2234,7 +2233,7 @@
dma_dir = _nvswitch_to_pci_dma_direction(direction);
– pci_dma_sync_single_for_cpu(pdev, dma_handle, size, dma_dir);
+ dma_sync_single_for_cpu(&pdev->dev, dma_handle, size, dma_dir);
return NVL_SUCCESS;
}
@@ -2256,7 +2255,7 @@
dma_dir = _nvswitch_to_pci_dma_direction(direction);
– pci_dma_sync_single_for_device(pdev, dma_handle, size, dma_dir);
+ dma_sync_single_for_device(&pdev->dev, dma_handle, size, (enum dma_data_direction)dma_dir);
return NVL_SUCCESS;
}
Besides that, (at least in Ubuntu) it is needed to fix the following errors:
/var/lib/dkms/nvidia/510.60.02/build/nvidia-drm/nvidia-drm-gem.c:73:8: error: invalid use of undefined type ‘struct dma_buf_map’
due to dma_buf_map: Rename to iosys_map -> https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/commit/?h=next-20220325&id=7938f4218168ae9fc4bdddb15976f9ebbae41999
/var/lib/dkms/nvidia/510.60.02/build/nvidia-drm/nvidia-drm-drv.c:257:21: error: ‘struct drm_mode_config’ has no member named ‘allow_fb_modifiers’
257 | dev->mode_config.allow_fb_modifiers = true;
due to drm/sprd: remove allow_fb_modifiers setting -> https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/commit/?id=cf1c7fee7ef37cfc09b5e704eb52d9466ca49012
After to fix this, it still fails due to:
ERROR: modpost: GPL-incompatible module nvidia.ko uses GPL-only symbol ‘cc_mkdec’
Which I think is caused by x86/coco: Add API to handle encryption mask -> https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/commit/?id=b577f542f93cbba57f8d6185ef1fb13a41ddf162
That one I don’t know how to fix.
I patched with this below and with previous patch I posted, everything compiled fine. I’m using NVIDIA-Linux-x86_64-510.54.run and Linux 5.18.0-rc1.
— nvidia-510.54/nvidia-drm/nvidia-drm-drv.c 2022-03-25 09:16:55.819991621 +0800
+++ nvidia-510.54/nvidia-drm/nvidia-drm-drv.c 2022-03-25 09:17:36.219991374 +0800
@@ -251,12 +251,6 @@
dev->mode_config.async_page_flip = false;
#endif
-#if defined(NV_DRM_FORMAT_MODIFIERS_PRESENT)
– /* Allow clients to define framebuffer layouts using DRM format modifiers */
–
– dev->mode_config.allow_fb_modifiers = true;
-#endif
–
/* Initialize output polling support */
drm_kms_helper_poll_init(dev);
— nvidia-510.54/nvidia-drm/nvidia-drm-gem.c 2022-03-25 09:22:40.249989518 +0800
+++ nvidia-510.54/nvidia-drm/nvidia-drm-gem.c 2022-03-25 09:23:07.849989350 +0800
@@ -68,7 +68,7 @@
#if !defined(NV_DRM_DRIVER_HAS_GEM_PRIME_CALLBACKS) && \
defined(NV_DRM_GEM_OBJECT_VMAP_HAS_MAP_ARG)
static int nv_drm_gem_vmap(struct drm_gem_object *gem,
– struct dma_buf_map *map)
+ struct iosys_map *map)
{
map->vaddr = nv_drm_gem_prime_vmap(gem);
if (map->vaddr == NULL) {
@@ -79,7 +79,7 @@
}
static void nv_drm_gem_vunmap(struct drm_gem_object *gem,
– struct dma_buf_map *map)
+ struct iosys_map *map)
{
nv_drm_gem_prime_vunmap(gem, map->vaddr);
map->vaddr = NULL;
Sorry, first patch has one issue … fixed … now card is detected with nvidia-smi …
— nvidia-510.54/nvidia/nv.c 2022-02-08 13:41:43.000000000 +0800
+++ nvidia-510.54/nvidia/nv.c 2022-04-04 13:15:50.459893021 +0800
@@ -22,6 +22,7 @@
*/
#include “nvmisc.h”
+#include “linux/dma-mapping.h”
#include “os-interface.h”
#include “nv-linux.h”
#include “nv-p2p.h”
@@ -2765,13 +2766,13 @@
*/
if (!nvl->tce_bypass_enabled)
{
– pci_set_dma_mask(nvl->pci_dev, new_mask);
+ dma_set_mask(&nvl->pci_dev->dev, new_mask);
/* Certain kernels have a bug which causes pci_set_consistent_dma_mask
* to call GPL sme_active symbol, this bug has already been fixed in a
* minor release update but detect the failure scenario here to prevent
* an installation regression */
#if !NV_IS_EXPORT_SYMBOL_GPL_sme_active
– pci_set_consistent_dma_mask(nvl->pci_dev, new_mask);
+ dma_set_coherent_mask(&nvl->pci_dev->dev, new_mask);
#endif
}
}
— nvidia-510.54/nvidia/linux_nvswitch.c 2022-02-08 13:41:43.000000000 +0800
+++ nvidia-510.54/nvidia/linux_nvswitch.c 2022-04-04 13:44:31.179882519 +0800
@@ -21,9 +21,8 @@
*******************************************************************************/
#include “linux_nvswitch.h”
–
#include
–
+#include “linux/dma-direction.h”
#include “conftest.h”
#include “nvlink_errors.h”
#include “nvlink_linux.h”
@@ -2140,11 +2139,11 @@
)
{
if (direction == NVSWITCH_DMA_DIR_TO_SYSMEM)
– return PCI_DMA_FROMDEVICE;
+ return DMA_FROM_DEVICE;
else if (direction == NVSWITCH_DMA_DIR_FROM_SYSMEM)
– return PCI_DMA_TODEVICE;
+ return DMA_TO_DEVICE;
else
– return PCI_DMA_BIDIRECTIONAL;
+ return DMA_BIDIRECTIONAL;
}
NvlStatus
@@ -2165,9 +2164,9 @@
dma_dir = _nvswitch_to_pci_dma_direction(direction);
– *dma_handle = (NvU64)pci_map_single(pdev, cpu_addr, size, dma_dir);
+ *dma_handle = (NvU64)dma_map_single(&pdev->dev, cpu_addr, size, (enum dma_data_direction) dma_dir);
– if (pci_dma_mapping_error(pdev, *dma_handle))
+ if (dma_mapping_error(&pdev->dev, *dma_handle))
{
pr_err(“nvidia-nvswitch: unable to create PCI DMA mapping\n”);
return -NVL_ERR_GENERIC;
@@ -2194,7 +2193,7 @@
dma_dir = _nvswitch_to_pci_dma_direction(direction);
– pci_unmap_single(pdev, dma_handle, size, dma_dir);
+ dma_unmap_single(&pdev->dev, dma_handle, size, (enum dma_data_direction) dma_dir);
return NVL_SUCCESS;
}
@@ -2211,7 +2210,7 @@
if (!pdev)
return -NVL_BAD_ARGS;
– if (pci_set_dma_mask(pdev, DMA_BIT_MASK(dma_addr_width)))
+ if (dma_set_mask(&pdev->dev, DMA_BIT_MASK(dma_addr_width)))
return -NVL_ERR_GENERIC;
return NVL_SUCCESS;
@@ -2234,7 +2233,7 @@
dma_dir = _nvswitch_to_pci_dma_direction(direction);
– pci_dma_sync_single_for_cpu(pdev, dma_handle, size, dma_dir);
+ dma_sync_single_for_cpu(&pdev->dev, dma_handle, size, dma_dir);
return NVL_SUCCESS;
}
@@ -2256,7 +2255,7 @@
dma_dir = _nvswitch_to_pci_dma_direction(direction);
– pci_dma_sync_single_for_device(pdev, dma_handle, size, dma_dir);
+ dma_sync_single_for_device(&pdev->dev, dma_handle, size, (enum dma_data_direction)dma_dir);
return NVL_SUCCESS;
}
This time I’m trying with NVIDIA-Linux-x86_64-510.60.02 (I was using the packages provided by ubuntu. Also version 510.60.02). The patch is OK but it is still failing in the end with
ERROR: modpost: GPL-incompatible module nvidia.ko uses GPL-only symbol ‘cc_mkdec’
I think it is caused by this:
EXPORT_SYMBOL_GPL(cc_platform_has); (https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/commit/?id=b577f542f93cbba57f8d6185ef1fb13a41ddf162)
It is strange that I’m the only one getting this.
I’m getting the kernel packages from here:
https://kernel.ubuntu.com/~kernel-ppa/mainline/v5.18-rc1/
Here it is my nvidia driver build log, if anyone wants to take a look
https://drive.google.com/file/d/1ybVqoIU3lVnWQWbwui3W8GvUf5pCy2bk/view?usp=sharing
Thanks for the patches, Jeff. This worked for me on Debian Sid.
Hi!
AFAIK I applied all the changes, but still get the GPL-only symbol error, which Cristiano mentioned. Did I miss something? Do you have any idea how to fix this?
make -f ./scripts/Makefile.modpost
sed ‘s/\.ko$/\.o/’ /var/lib/dkms/nvidia/510.54/build/modules.order | scripts/mod/modpost -m -a -o /var/lib/dkms/nvidia/510.54/build/Module.symvers -e -i Module.symvers -T –
ERROR: modpost: GPL-incompatible module nvidia.ko uses GPL-only symbol ‘cc_mkdec’
make[2]: *** [scripts/Makefile.modpost:134: /var/lib/dkms/nvidia/510.54/build/Module.symvers] Error 1
make[2]: *** Deleting file ‘/var/lib/dkms/nvidia/510.54/build/Module.symvers’
make[1]: *** [Makefile:1755: modules] Error 2
make[1]: Leaving directory ‘/usr/src/linux-headers-5.18.0-051800rc1-generic’
make: *** [Makefile:82: modules] Error 2
The posted patches are ok but, for me, it is still failing to compile with:
ERROR: modpost: GPL-incompatible module nvidia.ko uses GPL-only symbol ‘cc_mkdec’
I’m getting my kernel packages from here:
https://kernel.ubuntu.com/~kernel-ppa/mainline/daily/
And the here it is the build log:
https://drive.google.com/file/d/1ybVqoIU3lVnWQWbwui3W8GvUf5pCy2bk/view?usp=sharing
I’m sorry for the repeated post. I thought the last one was lost
Cristiano, Gabor,
> ERROR: modpost: GPL-incompatible module nvidia.ko uses GPL-only symbol ‘cc_mkdec’
This errror seems to come from the linux kernel coco … try using the latest kernel git version, compile and install that, then try compiling nvidia again.
Thanks,
Jeff
Same error when kernel 5.18-rc1 is compiled from kernel.org. I haven’t tried from .run but it probably just doesn’t like the .deb files for the kernel. I’m sure Nvidia will get around to it “soon”.
Compiled with Ubuntu 21.10 kernel 5.17.2 (self compiled) using gcc 11.2
I think that, as a workaround, we need to change the
EXPORT_SYMBOL_GPL(cc_platform_has);
by
EXPORT_SYMBOL(cc_platform_has);
in arch/x86/coco/core.c
… and I don’t know if it is legal to do that, since we are changing the module licence type.
to whom should we report this? Nvidia or kernel developers?
When in doubt send it to both and let them fight each other over it claiming ignorance on our part! 🙂
I would think that removing EXPORT_SYMBOL_GPL(cc_platform_has); with EXPORT_SYMBOL(cc_platform_has);
is ok as long as you are not publishing a binary made from that change. They’re RC’s anyways. It’s expected that they will be torn to shreds and rewritten.
That change for core.c gave the same error anyways when installing the packaged 5.18-rc1.deb files I compiled.
I made the following in export.h and it installed and compiled (along with the other fixes from above). If it crashes i’ll update here.
— 518rc1/linux-5.18-rc1/include/linux/export.h 2022-04-03 17:08:21.000000000 -0400
+++ 518rc1/linux-5.18-rc1/include/linux/export.h 2022-04-09 20:07:30.536480202 -0400
@@ -161,9 +161,9 @@
#endif
#define EXPORT_SYMBOL(sym) _EXPORT_SYMBOL(sym, “”)
-#define EXPORT_SYMBOL_GPL(sym) _EXPORT_SYMBOL(sym, “_gpl”)
+#define EXPORT_SYMBOL_GPL(sym) _EXPORT_SYMBOL(sym, “”)
#define EXPORT_SYMBOL_NS(sym, ns) __EXPORT_SYMBOL(sym, “”, #ns)
-#define EXPORT_SYMBOL_NS_GPL(sym, ns) __EXPORT_SYMBOL(sym, “_gpl”, #ns)
+#define EXPORT_SYMBOL_NS_GPL(sym, ns) __EXPORT_SYMBOL(sym, “”, #ns)
#endif /* !__ASSEMBLY__ */
Changing arch/x86/coco/core.c requires recompiling the kernel, if I’m not mistaken. An easier workaround, at least for me, was changing all instances of MODULE_LICENSE(“NVIDIA”) to MODULE_LICENSE(“GPL”). This is for sure “illegal”, but I’m willing to accept that until there is an official fix from Nvidia. With the patches posted above _and_ this change the module loads and so far also seems to work.
Thank you Alex. That has done the trick to “bypass” the GPL license problem.
RC2 is here and a new patch is needed.
acpi_bus_get_device needs to be replaced by acpi_fetch_acpi_dev, in nv-acpi.c (https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=d017a3167bcb76caedf2b444645bf4db75f775a5)
… and a new GPL problem arises:
ERROR: modpost: GPL-incompatible module nvidia.ko uses GPL-only symbol ‘acpi_fetch_acpi_dev’
I made the same changes, and then hit the GPL-only error..
If you haven’t already, I would strongly suggest putting this all on the official NVIDIA support forum: https://forums.developer.nvidia.com/c/gpu-graphics/linux/148
RG.
Done
Here’s my attempt for a patch. It’s for nvidia-510.60.02, Ubuntu 20.04.4 latest(?) version. I have adapted Joan Bruguera’s ‘Tentative fix for NVIDIA 470.103.01 driver for Linux 5.18-rc1+’ (https://gist.github.com/joanbm/c00f9e19731d80269a4badc595f63b68) and it patches cleanly with this nvidia version. It compiles and the system boots, nvidia-smi works and no GPL errors… Hope it works for the later versions people above are using…
diff -rupN nvidia-510.60.02/common/inc/nv-linux.h nvidia-510.60.02p/common/inc/nv-linux.h
— nvidia-510.60.02/common/inc/nv-linux.h 2022-03-16 13:01:09.000000000 +0100
+++ nvidia-510.60.02p/common/inc/nv-linux.h 2022-04-12 22:24:58.508053548 +0200
@@ -24,6 +24,8 @@
#ifndef _NV_LINUX_H_
#define _NV_LINUX_H_
+#warning Do not buy NVIDIA for your next GPU!
+#include
#include “nvstatus.h”
#include “nv.h”
#include “nv-ioctl-numa.h”
@@ -984,8 +986,13 @@ static inline pgprot_t nv_adjust_pgprot(
* When AMD memory encryption is enabled, device memory mappings with the
* C-bit set read as 0xFF, so ensure the bit is cleared for user mappings.
*/
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 18, 0) && defined(_ASM_X86_PGTABLE_H))
+ // Rel. commit “x86/coco: Add API to handle encryption mask” (Kirill A. Shutemov, 22 Feb 2022)
+ prot = __pgprot(__sme_clr(pgprot_val(prot)));
+#else
prot = pgprot_decrypted(prot);
#endif
+#endif
return prot;
}
diff -rupN nvidia-510.60.02/nvidia/linux_nvswitch.c nvidia-510.60.02p/nvidia/linux_nvswitch.c
— nvidia-510.60.02/nvidia/linux_nvswitch.c 2022-03-16 13:00:50.000000000 +0100
+++ nvidia-510.60.02p/nvidia/linux_nvswitch.c 2022-04-12 22:24:58.512053558 +0200
@@ -2140,11 +2140,11 @@ _nvswitch_to_pci_dma_direction
)
{
if (direction == NVSWITCH_DMA_DIR_TO_SYSMEM)
– return PCI_DMA_FROMDEVICE;
+ return DMA_FROM_DEVICE;
else if (direction == NVSWITCH_DMA_DIR_FROM_SYSMEM)
– return PCI_DMA_TODEVICE;
+ return DMA_TO_DEVICE;
else
– return PCI_DMA_BIDIRECTIONAL;
+ return DMA_BIDIRECTIONAL;
}
NvlStatus
@@ -2165,9 +2165,9 @@ nvswitch_os_map_dma_region
dma_dir = _nvswitch_to_pci_dma_direction(direction);
– *dma_handle = (NvU64)pci_map_single(pdev, cpu_addr, size, dma_dir);
+ *dma_handle = (NvU64) dma_map_single(&pdev->dev, cpu_addr, size, dma_dir);
– if (pci_dma_mapping_error(pdev, *dma_handle))
+ if (dma_mapping_error(&pdev->dev, *dma_handle))
{
pr_err(“nvidia-nvswitch: unable to create PCI DMA mapping\n”);
return -NVL_ERR_GENERIC;
@@ -2194,7 +2194,7 @@ nvswitch_os_unmap_dma_region
dma_dir = _nvswitch_to_pci_dma_direction(direction);
– pci_unmap_single(pdev, dma_handle, size, dma_dir);
+ dma_unmap_single(&pdev->dev, dma_handle, size, dma_dir);
return NVL_SUCCESS;
}
@@ -2211,7 +2211,7 @@ nvswitch_os_set_dma_mask
if (!pdev)
return -NVL_BAD_ARGS;
– if (pci_set_dma_mask(pdev, DMA_BIT_MASK(dma_addr_width)))
+ if (dma_set_mask(&pdev->dev, DMA_BIT_MASK(dma_addr_width)))
return -NVL_ERR_GENERIC;
return NVL_SUCCESS;
@@ -2234,7 +2234,7 @@ nvswitch_os_sync_dma_region_for_cpu
dma_dir = _nvswitch_to_pci_dma_direction(direction);
– pci_dma_sync_single_for_cpu(pdev, dma_handle, size, dma_dir);
+ dma_sync_single_for_cpu(&pdev->dev, dma_handle, size, dma_dir);
return NVL_SUCCESS;
}
@@ -2256,7 +2256,7 @@ nvswitch_os_sync_dma_region_for_device
dma_dir = _nvswitch_to_pci_dma_direction(direction);
– pci_dma_sync_single_for_device(pdev, dma_handle, size, dma_dir);
+ dma_sync_single_for_device(&pdev->dev, dma_handle, size, dma_dir);
return NVL_SUCCESS;
}
diff -rupN nvidia-510.60.02/nvidia/nv-acpi.c nvidia-510.60.02p/nvidia/nv-acpi.c
— nvidia-510.60.02/nvidia/nv-acpi.c 2022-03-16 13:01:07.000000000 +0100
+++ nvidia-510.60.02p/nvidia/nv-acpi.c 2022-04-12 22:24:58.512053558 +0200
@@ -29,7 +29,8 @@
#include
-#if defined(NV_LINUX_ACPI_EVENTS_SUPPORTED)
+#include
+#if defined(NV_LINUX_ACPI_EVENTS_SUPPORTED) && (LINUX_VERSION_CODE tce_bypass_enabled)
{
– pci_set_dma_mask(nvl->pci_dev, new_mask);
+ dma_set_mask(&nvl->pci_dev->dev, new_mask);
/* Certain kernels have a bug which causes pci_set_consistent_dma_mask
* to call GPL sme_active symbol, this bug has already been fixed in a
* minor release update but detect the failure scenario here to prevent
* an installation regression */
#if !NV_IS_EXPORT_SYMBOL_GPL_sme_active
– pci_set_consistent_dma_mask(nvl->pci_dev, new_mask);
+ dma_set_coherent_mask(&nvl->pci_dev->dev, new_mask);
#endif
}
}
@@ -4514,19 +4514,19 @@ NvU64 NV_API_CALL nv_get_dma_start_addre
* as the starting address for all DMA mappings.
*/
saved_dma_mask = pci_dev->dma_mask;
– if (pci_set_dma_mask(pci_dev, DMA_BIT_MASK(64)) != 0)
+ if (dma_set_mask(&pci_dev->dev, DMA_BIT_MASK(64)) != 0)
{
goto done;
}
– dma_addr = pci_map_single(pci_dev, NULL, 1, DMA_BIDIRECTIONAL);
– if (pci_dma_mapping_error(pci_dev, dma_addr))
+ dma_addr = dma_map_single(&pci_dev->dev, NULL, 1, DMA_BIDIRECTIONAL);
+ if (dma_mapping_error(&pci_dev->dev, dma_addr))
{
– pci_set_dma_mask(pci_dev, saved_dma_mask);
+ dma_set_mask(&pci_dev->dev, saved_dma_mask);
goto done;
}
– pci_unmap_single(pci_dev, dma_addr, 1, DMA_BIDIRECTIONAL);
+ dma_unmap_single(&pci_dev->dev, dma_addr, 1, DMA_BIDIRECTIONAL);
/*
* From IBM: “For IODA2, native DMA bypass or KVM TCE-based implementation
@@ -4558,7 +4558,7 @@ NvU64 NV_API_CALL nv_get_dma_start_addre
*/
nv_printf(NV_DBG_WARNINGS,
“NVRM: DMA window limited by platform\n”);
– pci_set_dma_mask(pci_dev, saved_dma_mask);
+ dma_set_mask(&pci_dev->dev, saved_dma_mask);
goto done;
}
else if ((dma_addr & saved_dma_mask) != 0)
@@ -4577,7 +4577,7 @@ NvU64 NV_API_CALL nv_get_dma_start_addre
*/
nv_printf(NV_DBG_WARNINGS,
“NVRM: DMA window limited by memory size\n”);
– pci_set_dma_mask(pci_dev, saved_dma_mask);
+ dma_set_mask(&pci_dev->dev, saved_dma_mask);
goto done;
}
}
diff -rupN nvidia-510.60.02/nvidia-drm/nvidia-drm-drv.c nvidia-510.60.02p/nvidia-drm/nvidia-drm-drv.c
— nvidia-510.60.02/nvidia-drm/nvidia-drm-drv.c 2022-03-16 12:15:44.000000000 +0100
+++ nvidia-510.60.02p/nvidia-drm/nvidia-drm-drv.c 2022-04-12 22:24:58.508053548 +0200
@@ -20,6 +20,7 @@
* DEALINGS IN THE SOFTWARE.
*/
+#include
#include “nvidia-drm-conftest.h” /* NV_DRM_AVAILABLE and NV_DRM_DRM_GEM_H_PRESENT */
#include “nvidia-drm-priv.h”
@@ -254,8 +255,11 @@ nv_drm_init_mode_config(struct nv_drm_de
#if defined(NV_DRM_FORMAT_MODIFIERS_PRESENT)
/* Allow clients to define framebuffer layouts using DRM format modifiers */
+#if (LINUX_VERSION_CODE mode_config.allow_fb_modifiers = true;
#endif
+#endif
/* Initialize output polling support */
diff -rupN nvidia-510.60.02/nvidia-drm/nvidia-drm-gem.c nvidia-510.60.02p/nvidia-drm/nvidia-drm-gem.c
— nvidia-510.60.02/nvidia-drm/nvidia-drm-gem.c 2022-03-16 12:15:44.000000000 +0100
+++ nvidia-510.60.02p/nvidia-drm/nvidia-drm-gem.c 2022-04-12 22:24:58.508053548 +0200
@@ -51,6 +51,12 @@
#include “nv-mm.h”
+#include
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 18, 0))
+// Rel. commit “dma-buf-map: Rename to iosys-map” (Lucas De Marchi, 4 Feb 2022)
+#define dma_buf_map iosys_map
+#endif
+
void nv_drm_gem_free(struct drm_gem_object *gem)
{
struct nv_drm_gem_object *nv_gem = to_nv_gem_object(gem);
Hi,
All the above are now fixed in NVIDIA-Linux-x86_64-510.68.02.run .. I’ve tested on Linux-5.18.0-rc4. All good.
Jeff
Hi Jeff,
Do you mean error like this also got fixed ? After updated your NVIDIA-driver to version 510.68.02 ?
My Linux kernel is 5.17.14-300 and NVIDIA driver is 510.60.02. Good news to me 🙂
“`
NVIDIA-Linux-x86_64-510.60.02/kernel/nvidia/nv.c:2774:9: error: implicit declaration of function ‘pci_set_consistent_dma_mask’ [-Werror=implicit-function-declaration]
2774 | pci_set_consistent_dma_mask(nvl->pci_dev, new_mask);
“`
Thanks
Issue solved as what Jeff said: update my nvidia driver first.
The error occurs when linux kernel version and nvidia dkms version mismatch each other