mirror of
https://github.com/NVIDIA/open-gpu-kernel-modules.git
synced 2026-01-27 11:39:46 +00:00
515.76
This commit is contained in:
@@ -36,25 +36,25 @@
|
||||
// and then checked back in. You cannot make changes to these sections without
|
||||
// corresponding changes to the buildmeister script
|
||||
#ifndef NV_BUILD_BRANCH
|
||||
#define NV_BUILD_BRANCH r516_87
|
||||
#define NV_BUILD_BRANCH r515_00
|
||||
#endif
|
||||
#ifndef NV_PUBLIC_BRANCH
|
||||
#define NV_PUBLIC_BRANCH r516_87
|
||||
#define NV_PUBLIC_BRANCH r515_00
|
||||
#endif
|
||||
|
||||
#if defined(NV_LINUX) || defined(NV_BSD) || defined(NV_SUNOS)
|
||||
#define NV_BUILD_BRANCH_VERSION "rel/gpu_drv/r515/r516_87-317"
|
||||
#define NV_BUILD_CHANGELIST_NUM (31589401)
|
||||
#define NV_BUILD_BRANCH_VERSION "rel/gpu_drv/r515/r515_00-409"
|
||||
#define NV_BUILD_CHANGELIST_NUM (31799928)
|
||||
#define NV_BUILD_TYPE "Official"
|
||||
#define NV_BUILD_NAME "rel/gpu_drv/r515/r516_87-317"
|
||||
#define NV_LAST_OFFICIAL_CHANGELIST_NUM (31589401)
|
||||
#define NV_BUILD_NAME "rel/gpu_drv/r515/r515_00-409"
|
||||
#define NV_LAST_OFFICIAL_CHANGELIST_NUM (31799928)
|
||||
|
||||
#else /* Windows builds */
|
||||
#define NV_BUILD_BRANCH_VERSION "r516_87-1"
|
||||
#define NV_BUILD_CHANGELIST_NUM (31588177)
|
||||
#define NV_BUILD_BRANCH_VERSION "r515_00-323"
|
||||
#define NV_BUILD_CHANGELIST_NUM (31799928)
|
||||
#define NV_BUILD_TYPE "Official"
|
||||
#define NV_BUILD_NAME "516.90"
|
||||
#define NV_LAST_OFFICIAL_CHANGELIST_NUM (31588177)
|
||||
#define NV_BUILD_NAME "517.40"
|
||||
#define NV_LAST_OFFICIAL_CHANGELIST_NUM (31799928)
|
||||
#define NV_BUILD_BRANCH_BASE_VERSION R515
|
||||
#endif
|
||||
// End buildmeister python edited section
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
#if defined(NV_LINUX) || defined(NV_BSD) || defined(NV_SUNOS) || defined(NV_VMWARE) || defined(NV_QNX) || defined(NV_INTEGRITY) || \
|
||||
(defined(RMCFG_FEATURE_PLATFORM_GSP) && RMCFG_FEATURE_PLATFORM_GSP == 1)
|
||||
|
||||
#define NV_VERSION_STRING "515.65.01"
|
||||
#define NV_VERSION_STRING "515.76"
|
||||
|
||||
#else
|
||||
|
||||
|
||||
@@ -195,6 +195,11 @@ extern NVLOG_LOGGER NvLogLogger;
|
||||
#define NVLOG_BUFFER_FLAGS_FORMAT_LIBOS_LOG 1
|
||||
#define NVLOG_BUFFER_FLAGS_FORMAT_MEMTRACK 2
|
||||
|
||||
// Never deallocate this buffer until RM is unloaded
|
||||
#define NVLOG_BUFFER_FLAGS_PRESERVE 11:11
|
||||
#define NVLOG_BUFFER_FLAGS_PRESERVE_NO 0
|
||||
#define NVLOG_BUFFER_FLAGS_PRESERVE_YES 1
|
||||
|
||||
// Buffer GPU index
|
||||
#define NVLOG_BUFFER_FLAGS_GPU_INSTANCE 31:24
|
||||
|
||||
|
||||
@@ -4091,6 +4091,8 @@ typedef struct tagNVT_GAMUT_METADATA
|
||||
#define NVT_DPCD_ADDRESS_DOWN_REP_BUFFER_FIELD 0x01400
|
||||
#define NVT_DPCD_ADDRESS_UP_REQ_BUFFER_FIELD 0x01600
|
||||
#define NVT_DPCD_ADDRESS_DEVICE_SERVICE_IRQ_VECTOR_ESI0 0x02003
|
||||
#define NVT_DPCD_ADDRESS_DP_TUNNELING_DEVICE_IEEE_OUI 0xE0000
|
||||
#define NVT_DPCD_ADDRESS_DP_TUNNELING_DEVICE_ID_STRING 0xE0003
|
||||
#define NVT_DPCD_ADDRESS_DP_TUNNELING_CAPS_SUPPORT_FIELD 0xE000D
|
||||
#define NVT_DPCD_ADDRESS_DP_IN_ADAPTER_INFO_FIELD 0xE000E
|
||||
#define NVT_DPCD_ADDRESS_USB4_DRIVER_ID_FIELD 0xE000F
|
||||
@@ -5079,7 +5081,7 @@ typedef struct tagNVT_DPCD_CONFIG
|
||||
|
||||
typedef struct tagNVT_DPCD_DP_TUNNELING_CAPS
|
||||
{
|
||||
NvU8 dpTunnelingSupport : 1; // DP Tunneling through USB4 Support
|
||||
NvU8 dpTunneling : 1; // DP Tunneling through USB4 Support
|
||||
NvU8 reserved : 5; // Reserved.
|
||||
NvU8 dpPanelReplayTunnelingOptSupport : 1; // Panel Replay Tunneling Optimization Support
|
||||
NvU8 dpInBwAllocationModeSupport : 1; // DP IN Bandwidth Allocation Mode Support
|
||||
|
||||
@@ -64,7 +64,7 @@
|
||||
* Total number of nvlink endpoints core library can have
|
||||
* This is mapped to NVLINK_MAX_SYSTEM_LINK_NUM in drivers/nvlink/interface/nvlink.h
|
||||
*/
|
||||
#define NVLINK_MAX_NVLINK_ENDPOINTS 312
|
||||
#define NVLINK_MAX_NVLINK_ENDPOINTS 624
|
||||
|
||||
#define NVLINK_VERSION_STRING_LENGTH 64
|
||||
|
||||
|
||||
@@ -28,6 +28,7 @@
|
||||
#include "../nvlink_ctx.h"
|
||||
#include "../nvlink_helper.h"
|
||||
#include "nvlink_lock.h"
|
||||
#include "nvctassert.h"
|
||||
|
||||
#define NVLINK_IOC_GET_BUF(ctrlParams, type) (ctrlParams)->size >= sizeof(type) ? (type *) (ctrlParams)->buf : NULL
|
||||
|
||||
@@ -3423,6 +3424,8 @@ nvlink_lib_ctrl_get_device_link_states
|
||||
NvU32 numLinks = 0;
|
||||
NvU32 i = 0;
|
||||
|
||||
ct_assert(NVLINK_MAX_SYSTEM_LINK_NUM == NVLINK_MAX_NVLINK_ENDPOINTS);
|
||||
|
||||
nvlink_link **links = (nvlink_link **)nvlink_malloc(
|
||||
sizeof(nvlink_link *) * NVLINK_MAX_SYSTEM_LINK_NUM);
|
||||
if (links == NULL)
|
||||
|
||||
@@ -1041,24 +1041,41 @@ static NvBool libosCopyLogToNvlog_nowrap(LIBOS_LOG_DECODE_LOG *pLog)
|
||||
NvU64 putCopy = pLog->physicLogBuffer[0];
|
||||
NvU64 putOffset = putCopy * sizeof(NvU64) + sizeof(NvU64);
|
||||
|
||||
if (putOffset == pNvLogBuffer->pos)
|
||||
//
|
||||
// If RM was not unloaded, we will reuse a preserved nowrap nvlog buffer with the fresh
|
||||
// physical log buffer. In this case, we fix up all the offsets into the nvlog buffer to be
|
||||
// relative to its preserved position rather than the start.
|
||||
//
|
||||
NvU64 nvlogPos = pNvLogBuffer->pos - pLog->preservedNoWrapPos;
|
||||
|
||||
if (putOffset < nvlogPos)
|
||||
{
|
||||
// Buffer put counter unexpectedly reset. Terminate nowrap log collection.
|
||||
return NV_FALSE;
|
||||
}
|
||||
|
||||
if (putOffset == nvlogPos)
|
||||
{
|
||||
// No new data
|
||||
return NV_TRUE;
|
||||
}
|
||||
|
||||
if (putOffset > pNvLogBuffer->size - NV_OFFSETOF(LIBOS_LOG_NVLOG_BUFFER, data) - sizeof(NvU64))
|
||||
if (putOffset + pLog->preservedNoWrapPos >
|
||||
pNvLogBuffer->size - NV_OFFSETOF(LIBOS_LOG_NVLOG_BUFFER, data) - sizeof(NvU64))
|
||||
{
|
||||
// Are we done filling nowrap?
|
||||
return NV_FALSE;
|
||||
}
|
||||
|
||||
NvU64 len = putOffset - pNvLogBuffer->pos;
|
||||
NvU8 *pSrc = ((NvU8 *)pLog->physicLogBuffer) + pNvLogBuffer->pos;
|
||||
NvU64 len = putOffset - nvlogPos;
|
||||
NvU8 *pSrc = ((NvU8 *)pLog->physicLogBuffer) + nvlogPos;
|
||||
NvU8 *pDst = pNoWrapBuf->data + pNvLogBuffer->pos;
|
||||
|
||||
pLog->bDidPush = NV_TRUE;
|
||||
|
||||
portMemCopy(pDst, len, pSrc, len);
|
||||
pNvLogBuffer->pos = putOffset; // TODO: usage of NVLOG_BUFFER::pos is sus here, reconsider?
|
||||
*(NvU64 *)(pNoWrapBuf->data) = putCopy;
|
||||
pNvLogBuffer->pos = putOffset + pLog->preservedNoWrapPos; // TODO: usage of NVLOG_BUFFER::pos is sus here, reconsider?
|
||||
*(NvU64 *)(pNoWrapBuf->data) = putCopy + pLog->preservedNoWrapPos / sizeof(NvU64);
|
||||
return NV_TRUE;
|
||||
}
|
||||
|
||||
@@ -1095,6 +1112,46 @@ static void libosExtractLogs_nvlog(LIBOS_LOG_DECODE *logDecode, NvBool bSyncNvLo
|
||||
}
|
||||
}
|
||||
|
||||
void libosPreserveLogs(LIBOS_LOG_DECODE *pLogDecode)
|
||||
{
|
||||
NvU64 i;
|
||||
for (i = 0; i < pLogDecode->numLogBuffers; i++)
|
||||
{
|
||||
LIBOS_LOG_DECODE_LOG *pLog = &pLogDecode->log[i];
|
||||
|
||||
if (pLog->bDidPush)
|
||||
{
|
||||
NvHandle hNvlog = pLog->hNvLogNoWrap;
|
||||
NVLOG_BUFFER *pNvLogBuffer = NvLogLogger.pBuffers[hNvlog];
|
||||
|
||||
if (hNvlog == 0 || pNvLogBuffer == NULL)
|
||||
continue;
|
||||
|
||||
pNvLogBuffer->flags |= DRF_DEF(LOG, _BUFFER_FLAGS, _PRESERVE, _YES);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static NvBool findPreservedNvlogBuffer(NvU32 tag, NvU32 gpuInstance, NVLOG_BUFFER_HANDLE *pHandle)
|
||||
{
|
||||
NVLOG_BUFFER_HANDLE handle = 0;
|
||||
NV_STATUS status = nvlogGetBufferHandleFromTag(tag, &handle);
|
||||
|
||||
if (status != NV_OK)
|
||||
return NV_FALSE;
|
||||
|
||||
NVLOG_BUFFER *pNvLogBuffer = NvLogLogger.pBuffers[handle];
|
||||
if (FLD_TEST_DRF(LOG_BUFFER, _FLAGS, _PRESERVE, _YES, pNvLogBuffer->flags) &&
|
||||
DRF_VAL(LOG, _BUFFER_FLAGS, _GPU_INSTANCE, pNvLogBuffer->flags) == gpuInstance &&
|
||||
(pNvLogBuffer->pos < pNvLogBuffer->size - NV_OFFSETOF(LIBOS_LOG_NVLOG_BUFFER, data) - sizeof(NvU64)))
|
||||
{
|
||||
*pHandle = handle;
|
||||
return NV_TRUE;
|
||||
}
|
||||
|
||||
return NV_FALSE;
|
||||
}
|
||||
|
||||
#endif // LIBOS_LOG_TO_NVLOG
|
||||
|
||||
/**
|
||||
@@ -1211,39 +1268,60 @@ void libosLogAddLogEx(LIBOS_LOG_DECODE *logDecode, void *buffer, NvU64 bufferSiz
|
||||
pLog->hNvLogWrap = 0;
|
||||
pLog->bNvLogNoWrap = NV_FALSE;
|
||||
|
||||
pLog->bDidPush = NV_FALSE;
|
||||
pLog->preservedNoWrapPos = 0;
|
||||
|
||||
LIBOS_LOG_NVLOG_BUFFER *pNoWrapBuf;
|
||||
NvU32 tag = LIBOS_LOG_NVLOG_BUFFER_TAG(logDecode->sourceName, i * 2);
|
||||
NvBool bFoundPreserved = findPreservedNvlogBuffer(tag, gpuInstance, &pLog->hNvLogNoWrap);
|
||||
|
||||
status = nvlogAllocBuffer(
|
||||
bufferSize + NV_OFFSETOF(LIBOS_LOG_NVLOG_BUFFER, data), libosNoWrapBufferFlags,
|
||||
LIBOS_LOG_NVLOG_BUFFER_TAG(logDecode->sourceName, i * 2),
|
||||
&pLog->hNvLogNoWrap);
|
||||
|
||||
if (status == NV_OK)
|
||||
if (!bFoundPreserved)
|
||||
{
|
||||
pNoWrapBuf = (LIBOS_LOG_NVLOG_BUFFER *)NvLogLogger.pBuffers[pLog->hNvLogNoWrap]->data;
|
||||
if (name)
|
||||
status = nvlogAllocBuffer(
|
||||
bufferSize + NV_OFFSETOF(LIBOS_LOG_NVLOG_BUFFER, data), libosNoWrapBufferFlags,
|
||||
tag,
|
||||
&pLog->hNvLogNoWrap);
|
||||
|
||||
if (status == NV_OK)
|
||||
{
|
||||
portStringCopy(
|
||||
pNoWrapBuf->taskPrefix, sizeof pNoWrapBuf->taskPrefix, name, sizeof pNoWrapBuf->taskPrefix);
|
||||
pNoWrapBuf = (LIBOS_LOG_NVLOG_BUFFER *)NvLogLogger.pBuffers[pLog->hNvLogNoWrap]->data;
|
||||
if (name)
|
||||
{
|
||||
portStringCopy(
|
||||
pNoWrapBuf->taskPrefix, sizeof pNoWrapBuf->taskPrefix, name, sizeof pNoWrapBuf->taskPrefix);
|
||||
}
|
||||
|
||||
pNoWrapBuf->gpuArch = gpuArch;
|
||||
pNoWrapBuf->gpuImpl = gpuImpl;
|
||||
|
||||
NvLogLogger.pBuffers[pLog->hNvLogNoWrap]->pos = sizeof(NvU64); // offset to account for put pointer
|
||||
pLog->bNvLogNoWrap = NV_TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("nvlogAllocBuffer nowrap failed\n");
|
||||
}
|
||||
|
||||
pNoWrapBuf->gpuArch = gpuArch;
|
||||
pNoWrapBuf->gpuImpl = gpuImpl;
|
||||
|
||||
NvLogLogger.pBuffers[pLog->hNvLogNoWrap]->pos = sizeof(NvU64); // offset to account for put pointer
|
||||
pLog->bNvLogNoWrap = NV_TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("nvlogAllocBuffer nowrap failed\n");
|
||||
pLog->bNvLogNoWrap = NV_TRUE;
|
||||
pLog->preservedNoWrapPos = NvLogLogger.pBuffers[pLog->hNvLogNoWrap]->pos;
|
||||
|
||||
//
|
||||
// The 0th NvU64 is the last value of put pointer from the physical log buffer, which is
|
||||
// the number of NvU64 log buffer elements in it plus one.
|
||||
// Subtract one NvU64 from it to avoid off-by-one error.
|
||||
//
|
||||
if (pLog->preservedNoWrapPos >= sizeof(NvU64))
|
||||
pLog->preservedNoWrapPos -= sizeof(NvU64);
|
||||
}
|
||||
|
||||
LIBOS_LOG_NVLOG_BUFFER *pWrapBuf;
|
||||
tag = LIBOS_LOG_NVLOG_BUFFER_TAG(logDecode->sourceName, i * 2 + 1);
|
||||
|
||||
status = nvlogAllocBuffer(
|
||||
bufferSize + NV_OFFSETOF(LIBOS_LOG_NVLOG_BUFFER, data), libosWrapBufferFlags,
|
||||
LIBOS_LOG_NVLOG_BUFFER_TAG(logDecode->sourceName, i * 2 + 1),
|
||||
&pLog->hNvLogWrap);
|
||||
tag, &pLog->hNvLogWrap);
|
||||
|
||||
if (status == NV_OK)
|
||||
{
|
||||
@@ -1349,13 +1427,13 @@ void libosLogDestroy(LIBOS_LOG_DECODE *logDecode)
|
||||
|
||||
if (pLog->hNvLogNoWrap != 0)
|
||||
{
|
||||
nvlogDeallocBuffer(pLog->hNvLogNoWrap);
|
||||
nvlogDeallocBuffer(pLog->hNvLogNoWrap, NV_FALSE);
|
||||
pLog->hNvLogNoWrap = 0;
|
||||
}
|
||||
|
||||
if (pLog->hNvLogWrap != 0)
|
||||
{
|
||||
nvlogDeallocBuffer(pLog->hNvLogWrap);
|
||||
nvlogDeallocBuffer(pLog->hNvLogWrap, NV_FALSE);
|
||||
pLog->hNvLogWrap = 0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -108,6 +108,9 @@ struct LIBOS_LOG_DECODE_LOG
|
||||
NvU32 hNvLogNoWrap; // No wrap buffer captures first records.
|
||||
NvU32 hNvLogWrap; // Wrap buffer captures last records.
|
||||
NvBool bNvLogNoWrap; // NV_TRUE if no wrap buffer not full.
|
||||
|
||||
NvBool bDidPush; // NV_TRUE if this buffer was ever pushed to
|
||||
NvU64 preservedNoWrapPos; // Position in preserved nvlog buffer
|
||||
#endif
|
||||
|
||||
#if LIBOS_LOG_DECODE_ENABLE
|
||||
@@ -170,6 +173,8 @@ void libosLogDestroy(LIBOS_LOG_DECODE *logDecode);
|
||||
|
||||
void libosExtractLogs(LIBOS_LOG_DECODE *logDecode, NvBool bSyncNvLog);
|
||||
|
||||
void libosPreserveLogs(LIBOS_LOG_DECODE *pLogDecode);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user