Skip to content

Commit 29f830f

Browse files
committed
535.86.10
1 parent 337e28e commit 29f830f

File tree

14 files changed

+61
-175
lines changed

14 files changed

+61
-175
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
## Release 535 Entries
44

5+
### [535.86.10] 2023-07-31
6+
57
### [535.86.05] 2023-07-18
68

79
### [535.54.03] 2023-06-14

README.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# NVIDIA Linux Open GPU Kernel Module Source
22

33
This is the source release of the NVIDIA Linux open GPU kernel modules,
4-
version 535.86.05.
4+
version 535.86.10.
55

66

77
## How to Build
@@ -17,7 +17,7 @@ as root:
1717

1818
Note that the kernel modules built here must be used with GSP
1919
firmware and user-space NVIDIA GPU driver components from a corresponding
20-
535.86.05 driver release. This can be achieved by installing
20+
535.86.10 driver release. This can be achieved by installing
2121
the NVIDIA GPU driver from the .run file using the `--no-kernel-modules`
2222
option. E.g.,
2323

@@ -180,15 +180,15 @@ software applications.
180180
## Compatible GPUs
181181

182182
The open-gpu-kernel-modules can be used on any Turing or later GPU
183-
(see the table below). However, in the 535.86.05 release,
183+
(see the table below). However, in the 535.86.10 release,
184184
GeForce and Workstation support is still considered alpha-quality.
185185

186186
To enable use of the open kernel modules on GeForce and Workstation GPUs,
187187
set the "NVreg_OpenRmEnableUnsupportedGpus" nvidia.ko kernel module
188188
parameter to 1. For more details, see the NVIDIA GPU driver end user
189189
README here:
190190

191-
https://us.download.nvidia.com/XFree86/Linux-x86_64/535.86.05/README/kernel_open.html
191+
https://us.download.nvidia.com/XFree86/Linux-x86_64/535.86.10/README/kernel_open.html
192192

193193
In the below table, if three IDs are listed, the first is the PCI Device
194194
ID, the second is the PCI Subsystem Vendor ID, and the third is the PCI

kernel-open/Kbuild

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ EXTRA_CFLAGS += -I$(src)/common/inc
7272
EXTRA_CFLAGS += -I$(src)
7373
EXTRA_CFLAGS += -Wall $(DEFINES) $(INCLUDES) -Wno-cast-qual -Wno-error -Wno-format-extra-args
7474
EXTRA_CFLAGS += -D__KERNEL__ -DMODULE -DNVRM
75-
EXTRA_CFLAGS += -DNV_VERSION_STRING=\"535.86.05\"
75+
EXTRA_CFLAGS += -DNV_VERSION_STRING=\"535.86.10\"
7676

7777
ifneq ($(SYSSRCHOST1X),)
7878
EXTRA_CFLAGS += -I$(SYSSRCHOST1X)

kernel-open/nvidia-uvm/uvm_channel.c

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2703,7 +2703,15 @@ static void init_channel_manager_conf(uvm_channel_manager_t *manager)
27032703
// access through the bus, because no cache coherence message is exchanged.
27042704
if (uvm_gpu_is_coherent(gpu->parent)) {
27052705
manager->conf.gpfifo_loc = UVM_BUFFER_LOCATION_SYS;
2706-
manager->conf.gpput_loc = UVM_BUFFER_LOCATION_SYS;
2706+
2707+
// On GPUs with limited ESCHED addressing range, e.g., Volta on P9, RM
2708+
// cannot guarantee that USERD/GPPUT physical address is accessible by
2709+
// ESCHED. We set GPPUT location to vidmem where physical addresses are
2710+
// all accessible by ESCHED. We use the max_host_va as a proxy for the
2711+
// PA limitation, since all architectures with 40b VA limits also have
2712+
// 40b PA limits.
2713+
manager->conf.gpput_loc = gpu->parent->max_host_va == (1ull << 40) ? UVM_BUFFER_LOCATION_VID :
2714+
UVM_BUFFER_LOCATION_SYS;
27072715
}
27082716
else {
27092717
// By default we place GPFIFO and GPPUT on vidmem as it potentially has

kernel-open/nvidia/nvlink_export.h

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -46,11 +46,6 @@ NvlStatus nvlink_lib_unload(void);
4646
*/
4747
NvlStatus nvlink_lib_ioctl_ctrl(nvlink_ioctrl_params *ctrl_params);
4848

49-
/*
50-
* Gets number of devices with type deviceType
51-
*/
52-
NvlStatus nvlink_lib_return_device_count_by_type(NvU32 deviceType, NvU32 *numDevices);
53-
5449
#ifdef __cplusplus
5550
}
5651
#endif

src/common/inc/nvBldVer.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,11 +43,11 @@
4343
#endif
4444

4545
#if defined(NV_LINUX) || defined(NV_BSD) || defined(NV_SUNOS)
46-
#define NV_BUILD_BRANCH_VERSION "rel/gpu_drv/r535/r536_62-214"
47-
#define NV_BUILD_CHANGELIST_NUM (33069717)
46+
#define NV_BUILD_BRANCH_VERSION "rel/gpu_drv/r535/r536_62-219"
47+
#define NV_BUILD_CHANGELIST_NUM (33114094)
4848
#define NV_BUILD_TYPE "Official"
49-
#define NV_BUILD_NAME "rel/gpu_drv/r535/r536_62-214"
50-
#define NV_LAST_OFFICIAL_CHANGELIST_NUM (33069717)
49+
#define NV_BUILD_NAME "rel/gpu_drv/r535/r536_62-219"
50+
#define NV_LAST_OFFICIAL_CHANGELIST_NUM (33114094)
5151

5252
#else /* Windows builds */
5353
#define NV_BUILD_BRANCH_VERSION "r536_62-3"

src/common/inc/nvUnixVersion.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
#if defined(NV_LINUX) || defined(NV_BSD) || defined(NV_SUNOS) || defined(NV_VMWARE) || defined(NV_QNX) || defined(NV_INTEGRITY) || \
55
(defined(RMCFG_FEATURE_PLATFORM_GSP) && RMCFG_FEATURE_PLATFORM_GSP == 1)
66

7-
#define NV_VERSION_STRING "535.86.05"
7+
#define NV_VERSION_STRING "535.86.10"
88

99
#else
1010

src/common/nvlink/interface/nvlink.h

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -439,11 +439,6 @@ NvlStatus nvlink_lib_register_link(nvlink_device *dev, nvlink_link *link);
439439
*/
440440
NvlStatus nvlink_lib_unregister_link(nvlink_link *link);
441441

442-
/*
443-
* Gets number of devices with type deviceType
444-
*/
445-
NvlStatus nvlink_lib_return_device_count_by_type(NvU32 deviceType, NvU32 *numDevices);
446-
447442

448443
/************************************************************************************************/
449444
/******************************* NVLink link management functions *******************************/

src/common/nvlink/interface/nvlink_export.h

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -46,11 +46,6 @@ NvlStatus nvlink_lib_unload(void);
4646
*/
4747
NvlStatus nvlink_lib_ioctl_ctrl(nvlink_ioctrl_params *ctrl_params);
4848

49-
/*
50-
* Gets number of devices with type deviceType
51-
*/
52-
NvlStatus nvlink_lib_return_device_count_by_type(NvU32 deviceType, NvU32 *numDevices);
53-
5449
#ifdef __cplusplus
5550
}
5651
#endif

src/common/nvlink/kernel/nvlink/nvlink_lib_mgmt.c

Lines changed: 5 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,7 @@ nvlink_lib_is_registerd_device_with_reduced_config(void)
171171
{
172172
NvlStatus lock_status = NVL_SUCCESS;
173173
nvlink_device *dev = NULL;
174+
NvBool bIsReducedConfg = NV_FALSE;
174175

175176
// Acquire top-level lock
176177
lock_status = nvlink_lib_top_lock_acquire();
@@ -187,58 +188,13 @@ nvlink_lib_is_registerd_device_with_reduced_config(void)
187188
{
188189
if (dev->bReducedNvlinkConfig == NV_TRUE)
189190
{
190-
return NV_TRUE;
191+
bIsReducedConfg = NV_TRUE;
192+
break;
191193
}
192194
}
193195

194-
// Release and free top-level lock
196+
// Release top-level lock
195197
nvlink_lib_top_lock_release();
196-
nvlink_lib_top_lock_free();
197198

198-
return NV_FALSE;
199-
}
200-
201-
/*
202-
* Get the number of devices that have the device type deviceType
203-
*/
204-
NvlStatus
205-
nvlink_lib_return_device_count_by_type
206-
(
207-
NvU32 deviceType,
208-
NvU32 *numDevices
209-
)
210-
{
211-
NvlStatus lock_status = NVL_SUCCESS;
212-
nvlink_device *dev = NULL;
213-
NvU32 device_count = 0;
214-
215-
if (nvlink_lib_is_initialized())
216-
{
217-
// Acquire top-level lock
218-
lock_status = nvlink_lib_top_lock_acquire();
219-
if (lock_status != NVL_SUCCESS)
220-
{
221-
NVLINK_PRINT((DBG_MODULE_NVLINK_CORE, NVLINK_DBG_LEVEL_ERRORS,
222-
"%s: Failed to acquire top-level lock\n",
223-
__FUNCTION__));
224-
225-
return lock_status;
226-
}
227-
228-
// Top-level lock is now acquired
229-
230-
// Loop through device list
231-
FOR_EACH_DEVICE_REGISTERED(dev, nvlinkLibCtx.nv_devicelist_head, node)
232-
{
233-
if (dev->type == deviceType)
234-
{
235-
device_count++;
236-
}
237-
}
238-
239-
// Release top-level lock
240-
nvlink_lib_top_lock_release();
241-
}
242-
*numDevices = device_count;
243-
return NVL_SUCCESS;
199+
return bIsReducedConfg;
244200
}

src/common/nvswitch/kernel/inc/lr10/lr10.h

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -583,12 +583,9 @@ typedef struct
583583
NvBool bDisabledRemoteEndLinkMaskCached;
584584
} lr10_device;
585585

586-
#define NVSWITCH_NUM_DEVICES_PER_DELTA_LR10 6
587-
588586
typedef struct {
589587
NvU32 switchPhysicalId;
590-
NvU64 accessLinkMask;
591-
NvU64 trunkLinkMask;
588+
NvU64 linkMask;
592589
} lr10_links_connected_to_disabled_remote_end;
593590

594591
#define NVSWITCH_GET_CHIP_DEVICE_LR10(_device) \

src/common/nvswitch/kernel/lr10/link_lr10.c

Lines changed: 33 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -43,68 +43,40 @@
4343
#include "nvswitch/lr10/dev_nvlipt_ip.h"
4444
#include "nvswitch/lr10/dev_nport_ip.h"
4545

46-
#define NUM_SWITCH_WITH_DISCONNETED_REMOTE_LINK 12 // This must be incremented if any entries are added to the array below
46+
#define NUM_SWITCH_WITH_DISCONNETED_REMOTE_LINK 8 // This must be incremented if any entries are added to the array below
4747
lr10_links_connected_to_disabled_remote_end nvswitchDisconnetedRemoteLinkMasks[] =
4848
{
4949
{
50-
0x8, // switchPhysicalId
51-
0x56A000500, // accessLinkMask
52-
0xFF00FF // trunkLinkMask
50+
0x8, // switchPhysicalId
51+
0x56A000500 //linkMask
5352
},
5453
{
55-
0x9, // switchPhysicalId
56-
0x509009900, // accessLinkMask
57-
0xFF00FF // trunkLinkMask
54+
0x9, // switchPhysicalId
55+
0x509009900 //linkMask
5856
},
5957
{
60-
0xa, // switchPhysicalId
61-
0x0, // accessLinkMask
62-
0xFF00FF // trunkLinkMask
58+
0xb, // switchPhysicalId
59+
0x56A000600 //linkMask
6360
},
6461
{
65-
0xb, // switchPhysicalId
66-
0x56A000600, // accessLinkMask
67-
0xFF00FF // trunkLinkMask
62+
0xc, // switchPhysicalId
63+
0x4A9009400 //linkMask
6864
},
6965
{
70-
0xc, // switchPhysicalId
71-
0x4A9009400, // accessLinkMask
72-
0xFF00FF // trunkLinkMask
66+
0x18, // switchPhysicalId
67+
0x56A000500 //linkMask
7368
},
7469
{
75-
0xd, // switchPhysicalId
76-
0x0, // accessLinkMask
77-
0xFF00FF // trunkLinkMask
70+
0x19, // switchPhysicalId
71+
0x509009900 //linkMask
7872
},
7973
{
80-
0x18, // switchPhysicalId
81-
0x56A000500, // accessLinkMask
82-
0xFF00FF // trunkLinkMask
74+
0x1b, // switchPhysicalId
75+
0x56A000600 //linkMask
8376
},
8477
{
85-
0x19, // switchPhysicalId
86-
0x509009900, // accessLinkMask
87-
0xFF00FF // trunkLinkMask
88-
},
89-
{
90-
0x1a, // switchPhysicalId
91-
0x0, // accessLinkMask
92-
0xFF00FF // trunkLinkMask
93-
},
94-
{
95-
0x1b, // switchPhysicalId
96-
0x56A000600, // accessLinkMask
97-
0xFF00FF // trunkLinkMask
98-
},
99-
{
100-
0x1c, // switchPhysicalId
101-
0x4A9009400, // accessLinkMask
102-
0xFF00FF // trunkLinkMask
103-
},
104-
{
105-
0x1d, // switchPhysicalId
106-
0x0, // accessLinkMask
107-
0xFF00FF // trunkLinkMask
78+
0x1c, // switchPhysicalId
79+
0x4A9009400 //linkMask
10880
},
10981
};
11082
ct_assert(sizeof(nvswitchDisconnetedRemoteLinkMasks)/sizeof(lr10_links_connected_to_disabled_remote_end) == NUM_SWITCH_WITH_DISCONNETED_REMOTE_LINK);
@@ -869,6 +841,7 @@ nvswitch_corelib_set_dl_link_mode_lr10
869841

870842
if (nvswitch_does_link_need_termination_enabled(device, link))
871843
{
844+
872845
if (mode == NVLINK_LINKSTATE_INITPHASE1)
873846
{
874847
status = nvswitch_link_termination_setup(device, link);
@@ -2399,8 +2372,6 @@ nvswitch_load_link_disable_settings_lr10
23992372
NvU32 val;
24002373
NVLINK_CONFIG_DATA_LINKENTRY *vbios_link_entry = NULL;
24012374
NVSWITCH_BIOS_NVLINK_CONFIG *bios_config;
2402-
NvlStatus status;
2403-
lr10_device *chip_device = NVSWITCH_GET_CHIP_DEVICE_LR10(device);
24042375

24052376
bios_config = nvswitch_get_bios_nvlink_config(device);
24062377
if ((bios_config == NULL) || (bios_config->bit_address == 0))
@@ -2441,16 +2412,15 @@ nvswitch_load_link_disable_settings_lr10
24412412
__FUNCTION__, link->linkNumber);
24422413
return;
24432414
}
2415+
val = FLD_SET_DRF(_NVLIPT_LNK, _CTRL_SYSTEM_LINK_MODE_CTRL, _LINK_DISABLE,
2416+
_DISABLED, val);
2417+
NVSWITCH_LINK_WR32_LR10(device, link->linkNumber,
2418+
NVLIPT_LNK, _NVLIPT_LNK, _CTRL_SYSTEM_LINK_MODE_CTRL, val);
24442419

2445-
status = nvswitch_link_termination_setup(device, link);
2446-
if (status != NVL_SUCCESS)
2447-
{
2448-
NVSWITCH_PRINT(device, ERROR,
2449-
"%s: Failed to enable termination on link #%d\n", __FUNCTION__, link->linkNumber);
2450-
return;
2451-
}
2452-
// add link to disabledRemoteEndLinkMask
2453-
chip_device->disabledRemoteEndLinkMask |= NVBIT64(link->linkNumber);
2420+
// Set link to invalid and unregister from corelib
2421+
device->link[link->linkNumber].valid = NV_FALSE;
2422+
nvlink_lib_unregister_link(link);
2423+
nvswitch_destroy_link(link);
24542424

24552425
return;
24562426
}
@@ -2518,8 +2488,6 @@ nvswitch_does_link_need_termination_enabled_lr10
25182488
NvU32 i;
25192489
NvU32 physicalId;
25202490
lr10_device *chip_device;
2521-
NvU32 numNvswitches;
2522-
NvlStatus status;
25232491

25242492
physicalId = nvswitch_read_physical_id(device);
25252493
chip_device = NVSWITCH_GET_CHIP_DEVICE_LR10(device);
@@ -2542,30 +2510,16 @@ nvswitch_does_link_need_termination_enabled_lr10
25422510
chip_device->disabledRemoteEndLinkMask = 0;
25432511
if (nvlink_lib_is_registerd_device_with_reduced_config())
25442512
{
2545-
for (i = 0; i < NUM_SWITCH_WITH_DISCONNETED_REMOTE_LINK; ++i)
2513+
for (i = 0; i < NUM_SWITCH_WITH_DISCONNETED_REMOTE_LINK; ++i)
2514+
{
2515+
if (nvswitchDisconnetedRemoteLinkMasks[i].switchPhysicalId == physicalId)
25462516
{
2547-
if (nvswitchDisconnetedRemoteLinkMasks[i].switchPhysicalId == physicalId)
2548-
{
2549-
chip_device->disabledRemoteEndLinkMask |=
2550-
nvswitchDisconnetedRemoteLinkMasks[i].accessLinkMask;
2551-
2552-
status = nvlink_lib_return_device_count_by_type(NVLINK_DEVICE_TYPE_NVSWITCH, &numNvswitches);
2553-
if (status != NVL_SUCCESS)
2554-
{
2555-
NVSWITCH_PRINT(device, ERROR,
2556-
"%s: Failed to get nvswitch device count!\n", __FUNCTION__);
2557-
break;
2558-
}
2559-
2560-
if (numNvswitches <= NVSWITCH_NUM_DEVICES_PER_DELTA_LR10)
2561-
{
2562-
chip_device->disabledRemoteEndLinkMask |=
2563-
nvswitchDisconnetedRemoteLinkMasks[i].trunkLinkMask;
2564-
}
2565-
break;
2566-
}
2517+
chip_device->disabledRemoteEndLinkMask =
2518+
nvswitchDisconnetedRemoteLinkMasks[i].linkMask;
2519+
break;
25672520
}
25682521
}
2522+
}
25692523

25702524
chip_device->bDisabledRemoteEndLinkMaskCached = NV_TRUE;
25712525
}

0 commit comments

Comments
 (0)