--- Begin Message ---
- To: Debian Bug Tracking System <submit@bugs.debian.org>
- Subject: bullseye-pu: package nvidia-settings-tesla/525.125.06-1~deb12u1
- From: Andreas Beckmann <anbe@debian.org>
- Date: Wed, 12 Jul 2023 01:31:34 +0200
- Message-id: <168911829496.1980300.1678271597327932227.reportbug@zam504.zam.kfa-juelich.de>
Package: release.debian.org
Severity: normal
Tags: bullseye
User: release.debian.org@packages.debian.org
Usertags: pu
[ Reason ]
This is a rebuild of nvidia-settings/525.125.06-1~deb12u1 as
nvidia-settings-tesla/525.125.06-1~deb12u1 fixing a potential crash.
[ Impact ]
minor bugfix
[ Tests ]
none, requires nvidia GPU and driver usage to be tested
[ Risks ]
low, in contrib
[ Checklist ]
[x] *all* changes are documented in the d/changelog
[x] I reviewed all changes and I approve them
[x] attach debdiff against the package in (old)stable
[x] the issue is verified as fixed in unstable
[ Changes ]
[ Other info ]
I prefer to keep nvidia-settings and nvidia-settings-tesla in sync.
Andreas
diff --git a/debian/changelog b/debian/changelog
index f3df7e0..bddb60e 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,33 @@
+nvidia-settings-tesla (525.125.06-1~deb12u1) bookworm; urgency=medium
+
+ * Rebuild for bookworm.
+
+ -- Andreas Beckmann <anbe@debian.org> Wed, 12 Jul 2023 01:19:40 +0200
+
+nvidia-settings-tesla (525.125.06-1) unstable; urgency=medium
+
+ * Rebuild as nvidia-settings-tesla.
+
+ -- Andreas Beckmann <anbe@debian.org> Wed, 12 Jul 2023 00:04:57 +0200
+
+nvidia-settings (525.125.06-1) unstable; urgency=medium
+
+ * New upstream release 525.125.06.
+ * New upstream release 525.105.17.
+ - Fixed a bug that could cause the nvidia-settings control panel to
+ crash when resetting the display layout.
+ * Upload to unstable.
+
+ -- Andreas Beckmann <anbe@debian.org> Tue, 11 Jul 2023 23:27:45 +0200
+
+nvidia-settings (525.85.05-2) experimental; urgency=medium
+
+ * Move source package back to contrib.
+ * libxnvctrl0, libxnvctrl-dev are now built by src:libxnvctrl.
+ * Upload to experimental.
+
+ -- Andreas Beckmann <anbe@debian.org> Tue, 18 Apr 2023 22:28:02 +0200
+
nvidia-settings-tesla (525.85.05-1) unstable; urgency=medium
* Rebuild as nvidia-settings-tesla.
diff --git a/debian/copyright b/debian/copyright
index 1c62a8b..d41447d 100644
--- a/debian/copyright
+++ b/debian/copyright
@@ -10,7 +10,7 @@ Disclaimer:
proprietary NVIDIA drivers in non-free.
Files: *
-Copyright: (C) 2004-2021 NVIDIA Corporation
+Copyright: (C) 2004-2023 NVIDIA Corporation
License: GPL-2
Files: samples/*
diff --git a/doc/version.mk b/doc/version.mk
index 36f5738..33fa123 100644
--- a/doc/version.mk
+++ b/doc/version.mk
@@ -1,4 +1,4 @@
-NVIDIA_VERSION = 525.85.05
+NVIDIA_VERSION = 525.125.06
# This file.
VERSION_MK_FILE := $(lastword $(MAKEFILE_LIST))
diff --git a/samples/version.mk b/samples/version.mk
index 36f5738..33fa123 100644
--- a/samples/version.mk
+++ b/samples/version.mk
@@ -1,4 +1,4 @@
-NVIDIA_VERSION = 525.85.05
+NVIDIA_VERSION = 525.125.06
# This file.
VERSION_MK_FILE := $(lastword $(MAKEFILE_LIST))
diff --git a/src/gtk+-2.x/ctkslimm.c b/src/gtk+-2.x/ctkslimm.c
index ed1ca88..d476f59 100644
--- a/src/gtk+-2.x/ctkslimm.c
+++ b/src/gtk+-2.x/ctkslimm.c
@@ -1292,7 +1292,7 @@ static nvDisplayPtr setup_display(CtkMMDialog *ctk_mmdialog)
void update_mosaic_dialog_ui(CtkMMDialog *ctk_mmdialog, nvLayoutPtr layout)
{
nvModeLineItemPtr iter;
- char *id;
+ char *id = NULL;
if (ctk_mmdialog == NULL) {
return;
@@ -1300,6 +1300,7 @@ void update_mosaic_dialog_ui(CtkMMDialog *ctk_mmdialog, nvLayoutPtr layout)
if (layout) {
ctk_mmdialog->layout = layout;
+ ctk_mmdialog->cur_modeline = NULL;
}
parse_slimm_layout(ctk_mmdialog,
@@ -1307,12 +1308,14 @@ void update_mosaic_dialog_ui(CtkMMDialog *ctk_mmdialog, nvLayoutPtr layout)
&ctk_mmdialog->h_overlap_parsed,
&ctk_mmdialog->v_overlap_parsed);
- id = g_strdup(ctk_mmdialog->cur_modeline->data.identifier);
+ if (ctk_mmdialog->cur_modeline) {
+ id = g_strdup(ctk_mmdialog->cur_modeline->data.identifier);
+ }
setup_display(ctk_mmdialog);
iter = ctk_mmdialog->modelines;
- while (iter->next) {
+ while (id && iter->next) {
if (strcmp(id, iter->modeline->data.identifier) == 0) {
ctk_mmdialog->cur_modeline = iter->modeline;
break;
diff --git a/src/libXNVCtrl/version.mk b/src/libXNVCtrl/version.mk
index 36f5738..33fa123 100644
--- a/src/libXNVCtrl/version.mk
+++ b/src/libXNVCtrl/version.mk
@@ -1,4 +1,4 @@
-NVIDIA_VERSION = 525.85.05
+NVIDIA_VERSION = 525.125.06
# This file.
VERSION_MK_FILE := $(lastword $(MAKEFILE_LIST))
diff --git a/src/nvml.h b/src/nvml.h
index 0da0f8c..9ac2324 100644
--- a/src/nvml.h
+++ b/src/nvml.h
@@ -1,5 +1,5 @@
/*
- * Copyright 1993-2022 NVIDIA Corporation. All rights reserved.
+ * Copyright 1993-2023 NVIDIA Corporation. All rights reserved.
*
* NOTICE TO USER:
*
@@ -525,6 +525,7 @@ typedef enum nvmlValueType_enum
NVML_VALUE_TYPE_UNSIGNED_LONG = 2,
NVML_VALUE_TYPE_UNSIGNED_LONG_LONG = 3,
NVML_VALUE_TYPE_SIGNED_LONG_LONG = 4,
+ NVML_VALUE_TYPE_SIGNED_INT = 5,
// Keep this last
NVML_VALUE_TYPE_COUNT
@@ -537,6 +538,7 @@ typedef enum nvmlValueType_enum
typedef union nvmlValue_st
{
double dVal; //!< If the value is double
+ int siVal; //!< If the value is signed long long
unsigned int uiVal; //!< If the value is unsigned int
unsigned long ulVal; //!< If the value is unsigned long
unsigned long long ullVal; //!< If the value is unsigned long long
@@ -1730,7 +1732,39 @@ typedef struct nvmlGpuDynamicPstatesInfo_st
#define NVML_FI_DEV_PCIE_L0_TO_RECOVERY_COUNTER 169 //!< Device PEX error recovery counter
-#define NVML_FI_MAX 170 //!< One greater than the largest field ID defined above
+/*
+ * PCIe error counter
+ */
+#define NVML_FI_DEV_PCIE_COUNT_CORRECTABLE_ERRORS 173
+#define NVML_FI_DEV_PCIE_COUNT_NAKS_RECEIVED 174
+#define NVML_FI_DEV_PCIE_COUNT_RECEIVER_ERROR 175
+#define NVML_FI_DEV_PCIE_COUNT_BAD_TLP 176
+#define NVML_FI_DEV_PCIE_COUNT_NAKS_SENT 177
+#define NVML_FI_DEV_PCIE_COUNT_BAD_DLLP 178
+#define NVML_FI_DEV_PCIE_COUNT_NON_FATAL_ERROR 179
+#define NVML_FI_DEV_PCIE_COUNT_FATAL_ERROR 180
+#define NVML_FI_DEV_PCIE_COUNT_UNSUPPORTED_REQ 181
+#define NVML_FI_DEV_PCIE_COUNT_LCRC_ERROR 182
+
+/**
+ * Retrieves power usage for this GPU in milliwatts.
+ * It is only available if power management mode is supported. See \ref nvmlDeviceGetPowerManagementMode and
+ * \ref nvmlDeviceGetPowerUsage.
+ */
+#define NVML_FI_DEV_POWER_AVERAGE 185 //!< GPU power averaged over 1 sec interval, supported on Ampere (except GA100) or newer architectures.
+#define NVML_FI_DEV_POWER_INSTANT 186 //!< Current GPU power, supported on all architectures.
+
+/**
+ * GPU T.Limit temperature thresholds in degree Celsius
+ *
+ * These fields are supported on Ada and later architectures and supersedes \ref nvmlDeviceGetTemperatureThreshold.
+ */
+#define NVML_FI_DEV_TEMPERATURE_SHUTDOWN_TLIMIT 193 //!< T.Limit temperature after which GPU may shut down for HW protection
+#define NVML_FI_DEV_TEMPERATURE_SLOWDOWN_TLIMIT 194 //!< T.Limit temperature after which GPU may begin HW slowdown
+#define NVML_FI_DEV_TEMPERATURE_MEM_MAX_TLIMIT 195 //!< T.Limit temperature after which GPU may begin SW slowdown due to memory temperature
+#define NVML_FI_DEV_TEMPERATURE_GPU_MAX_TLIMIT 196 //!< T.Limit temperature after which GPU may be throttled below base clock
+
+#define NVML_FI_MAX 197 //!< One greater than the largest field ID defined above
/**
* Information for a Field Value Sample
@@ -2140,7 +2174,7 @@ typedef struct nvmlEncoderSessionInfo_st
*/
typedef enum nvmlFBCSessionType_enum
{
- NVML_FBC_SESSION_TYPE_UNKNOWN = 0, //!< Unknwon
+ NVML_FBC_SESSION_TYPE_UNKNOWN = 0, //!< Unknown
NVML_FBC_SESSION_TYPE_TOSYS, //!< ToSys
NVML_FBC_SESSION_TYPE_CUDA, //!< Cuda
NVML_FBC_SESSION_TYPE_VID, //!< Vid
@@ -3641,6 +3675,20 @@ nvmlReturn_t DECLDIR nvmlDeviceGetClockInfo(nvmlDevice_t device, nvmlClockType_t
*/
nvmlReturn_t DECLDIR nvmlDeviceGetMaxClockInfo(nvmlDevice_t device, nvmlClockType_t type, unsigned int *clock);
+/**
+ * Retrieve the GPCCLK VF offset value
+ * @param[in] device The identifier of the target device
+ * @param[out] offset The retrieved GPCCLK VF offset value
+ *
+ * @return
+ * - \ref NVML_SUCCESS if \a offset has been successfully queried
+ * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized
+ * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid or \a offset is NULL
+ * - \ref NVML_ERROR_NOT_SUPPORTED if the device does not support this feature
+ * - \ref NVML_ERROR_UNKNOWN on any unexpected error
+ */
+nvmlReturn_t DECLDIR nvmlDeviceGetGpcClkVfOffset(nvmlDevice_t device, int *offset);
+
/**
* Retrieves the current setting of a clock that applications will use unless an overspec situation occurs.
* Can be changed using \ref nvmlDeviceSetApplicationsClocks.
@@ -4097,6 +4145,14 @@ nvmlReturn_t DECLDIR nvmlDeviceGetTemperature(nvmlDevice_t device, nvmlTemperatu
*
* See \ref nvmlTemperatureThresholds_t for details on available temperature thresholds.
*
+ * Note: This API is no longer the preferred interface for retrieving the following temperature thresholds
+ * on Ada and later architectures: NVML_TEMPERATURE_THRESHOLD_SHUTDOWN, NVML_TEMPERATURE_THRESHOLD_SLOWDOWN,
+ * NVML_TEMPERATURE_THRESHOLD_MEM_MAX and NVML_TEMPERATURE_THRESHOLD_GPU_MAX.
+ *
+ * Support for reading these temperature thresholds for Ada and later architectures would be removed from this
+ * API in future releases. Please use \ref nvmlDeviceGetFieldValues with NVML_FI_DEV_TEMPERATURE_* fields to retrieve
+ * temperature thresholds on these architectures.
+ *
* @param device The identifier of the target device
* @param thresholdType The type of threshold value queried
* @param temp Reference in which to return the temperature reading
@@ -4237,6 +4293,113 @@ nvmlReturn_t DECLDIR nvmlDeviceGetSupportedClocksThrottleReasons(nvmlDevice_t de
*/
nvmlReturn_t DECLDIR nvmlDeviceGetPowerState(nvmlDevice_t device, nvmlPstates_t *pState);
+/**
+ * Retrieve performance monitor samples from the associated subdevice.
+ *
+ * @param device
+ * @param pDynamicPstatesInfo
+ *
+ * @return
+ * - \ref NVML_SUCCESS if \a pDynamicPstatesInfo has been set
+ * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized
+ * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid or \a pDynamicPstatesInfo is NULL
+ * - \ref NVML_ERROR_NOT_SUPPORTED if the device does not support this feature
+ * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible
+ * - \ref NVML_ERROR_UNKNOWN on any unexpected error
+ */
+nvmlReturn_t DECLDIR nvmlDeviceGetDynamicPstatesInfo(nvmlDevice_t device, nvmlGpuDynamicPstatesInfo_t *pDynamicPstatesInfo);
+
+/**
+ * Retrieve the MemClk (Memory Clock) VF offset value.
+ * @param[in] device The identifier of the target device
+ * @param[out] offset The retrieved MemClk VF offset value
+ *
+ * @return
+ * - \ref NVML_SUCCESS if \a offset has been successfully queried
+ * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized
+ * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid or \a offset is NULL
+ * - \ref NVML_ERROR_NOT_SUPPORTED if the device does not support this feature
+ * - \ref NVML_ERROR_UNKNOWN on any unexpected error
+ */
+nvmlReturn_t DECLDIR nvmlDeviceGetMemClkVfOffset(nvmlDevice_t device, int *offset);
+
+/**
+ * Retrieve min and max clocks of some clock domain for a given PState
+ *
+ * @param device The identifier of the target device
+ * @param type Clock domain
+ * @param pstate PState to query
+ * @param minClockMHz Reference in which to return min clock frequency
+ * @param maxClockMHz Reference in which to return max clock frequency
+ *
+ * @return
+ * - \ref NVML_SUCCESS if everything worked
+ * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized
+ * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device, \a type or \a pstate are invalid or both
+ * \a minClockMHz and \a maxClockMHz are NULL
+ * - \ref NVML_ERROR_NOT_SUPPORTED if the device does not support this feature
+ */
+nvmlReturn_t DECLDIR nvmlDeviceGetMinMaxClockOfPState(nvmlDevice_t device, nvmlClockType_t type, nvmlPstates_t pstate,
+ unsigned int * minClockMHz, unsigned int * maxClockMHz);
+
+/**
+ * Get all supported Performance States (P-States) for the device.
+ *
+ * The returned array would contain a contiguous list of valid P-States supported by
+ * the device. If the number of supported P-States is fewer than the size of the array
+ * supplied missing elements would contain \a NVML_PSTATE_UNKNOWN.
+ *
+ * The number of elements in the returned list will never exceed \a NVML_MAX_GPU_PERF_PSTATES.
+ *
+ * @param device The identifier of the target device
+ * @param pstates Container to return the list of performance states
+ * supported by device
+ * @param size Size of the supplied \a pstates array in bytes
+ *
+ * @return
+ * - \ref NVML_SUCCESS if \a pstates array has been retrieved
+ * - \ref NVML_ERROR_INSUFFICIENT_SIZE if the the container supplied was not large enough to
+ * hold the resulting list
+ * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized
+ * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device or \a pstates is invalid
+ * - \ref NVML_ERROR_NOT_SUPPORTED if the device does not support performance state readings
+ * - \ref NVML_ERROR_UNKNOWN on any unexpected error
+ */
+nvmlReturn_t DECLDIR nvmlDeviceGetSupportedPerformanceStates(nvmlDevice_t device,
+ nvmlPstates_t *pstates, unsigned int size);
+
+/**
+ * Retrieve the GPCCLK min max VF offset value.
+ * @param[in] device The identifier of the target device
+ * @param[out] minOffset The retrieved GPCCLK VF min offset value
+ * @param[out] maxOffset The retrieved GPCCLK VF max offset value
+ *
+ * @return
+ * - \ref NVML_SUCCESS if \a offset has been successfully queried
+ * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized
+ * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid or \a offset is NULL
+ * - \ref NVML_ERROR_NOT_SUPPORTED if the device does not support this feature
+ * - \ref NVML_ERROR_UNKNOWN on any unexpected error
+ */
+nvmlReturn_t DECLDIR nvmlDeviceGetGpcClkMinMaxVfOffset(nvmlDevice_t device,
+ int *minOffset, int *maxOffset);
+
+/**
+ * Retrieve the MemClk (Memory Clock) min max VF offset value.
+ * @param[in] device The identifier of the target device
+ * @param[out] minOffset The retrieved MemClk VF min offset value
+ * @param[out] maxOffset The retrieved MemClk VF max offset value
+ *
+ * @return
+ * - \ref NVML_SUCCESS if \a offset has been successfully queried
+ * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized
+ * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid or \a offset is NULL
+ * - \ref NVML_ERROR_NOT_SUPPORTED if the device does not support this feature
+ * - \ref NVML_ERROR_UNKNOWN on any unexpected error
+ */
+nvmlReturn_t DECLDIR nvmlDeviceGetMemClkMinMaxVfOffset(nvmlDevice_t device,
+ int *minOffset, int *maxOffset);
+
/**
* This API has been deprecated.
*
@@ -4336,7 +4499,12 @@ nvmlReturn_t DECLDIR nvmlDeviceGetPowerManagementDefaultLimit(nvmlDevice_t devic
*
* For Fermi &tm; or newer fully supported devices.
*
- * On Fermi and Kepler GPUs the reading is accurate to within +/- 5% of current power draw.
+ * On Fermi and Kepler GPUs the reading is accurate to within +/- 5% of current power draw. On Ampere
+ * (except GA100) or newer GPUs, the API returns power averaged over 1 sec interval. On GA100 and
+ * older architectures, instantaneous power is returned.
+ *
+ * See \ref NVML_FI_DEV_POWER_AVERAGE and \ref NVML_FI_DEV_POWER_INSTANT to query specific power
+ * values.
*
* It is only available if power management mode is supported. See \ref nvmlDeviceGetPowerManagementMode.
*
@@ -4792,10 +4960,10 @@ nvmlReturn_t DECLDIR nvmlDeviceGetEncoderStats (nvmlDevice_t device, unsigned in
* Retrieves information about active encoder sessions on a target device.
*
* An array of active encoder sessions is returned in the caller-supplied buffer pointed at by \a sessionInfos. The
- * array elememt count is passed in \a sessionCount, and \a sessionCount is used to return the number of sessions
+ * array element count is passed in \a sessionCount, and \a sessionCount is used to return the number of sessions
* written to the buffer.
*
- * If the supplied buffer is not large enough to accomodate the active session array, the function returns
+ * If the supplied buffer is not large enough to accommodate the active session array, the function returns
* NVML_ERROR_INSUFFICIENT_SIZE, with the element count of nvmlEncoderSessionInfo_t array required in \a sessionCount.
* To query the number of active encoder sessions, call this function with *sessionCount = 0. The code will return
* NVML_SUCCESS with number of active encoder sessions updated in *sessionCount.
@@ -4844,7 +5012,7 @@ nvmlReturn_t DECLDIR nvmlDeviceGetDecoderUtilization(nvmlDevice_t device, unsign
* For Maxwell &tm; or newer fully supported devices.
*
* @param device The identifier of the target device
-* @param fbcStats Reference to nvmlFBCStats_t structure contianing NvFBC stats
+* @param fbcStats Reference to nvmlFBCStats_t structure containing NvFBC stats
*
* @return
* - \ref NVML_SUCCESS if \a fbcStats is fetched
@@ -4862,7 +5030,7 @@ nvmlReturn_t DECLDIR nvmlDeviceGetFBCStats(nvmlDevice_t device, nvmlFBCStats_t *
* array element count is passed in \a sessionCount, and \a sessionCount is used to return the number of sessions
* written to the buffer.
*
-* If the supplied buffer is not large enough to accomodate the active session array, the function returns
+* If the supplied buffer is not large enough to accommodate the active session array, the function returns
* NVML_ERROR_INSUFFICIENT_SIZE, with the element count of nvmlFBCSessionInfo_t array required in \a sessionCount.
* To query the number of active FBC sessions, call this function with *sessionCount = 0. The code will return
* NVML_SUCCESS with number of active FBC sessions updated in *sessionCount.
@@ -5339,6 +5507,41 @@ nvmlReturn_t DECLDIR nvmlDeviceGetPcieSpeed(nvmlDevice_t device, unsigned int *p
*/
nvmlReturn_t DECLDIR nvmlDeviceGetAdaptiveClockInfoStatus(nvmlDevice_t device, unsigned int *adaptiveClockStatus);
+/**
+ * Get the type of the GPU Bus (PCIe, PCI, ...)
+ *
+ * @param device The identifier of the target device
+ * @param type The PCI Bus type
+ *
+ * return
+ * - \ref NVML_SUCCESS if the bus \a type is successfully retreived
+ * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized
+ * - \ref NVML_ERROR_INVALID_ARGUMENT if \device is invalid or \type is NULL
+ * - \ref NVML_ERROR_UNKNOWN on any unexpected error
+ */
+nvmlReturn_t DECLDIR nvmlDeviceGetBusType(nvmlDevice_t device, nvmlBusType_t *type);
+
+/**
+ * Get fabric information associated with the device.
+ *
+ * %HOPPER_OR_NEWER%
+ *
+ * On Hopper + NVSwitch systems, GPU is registered with the NVIDIA Fabric Manager
+ * Upon successful registration, the GPU is added to the NVLink fabric to enable
+ * peer-to-peer communication.
+ * This API reports the current state of the GPU in the NVLink fabric
+ * along with other useful information.
+ *
+ * @param device The identifier of the target device
+ * @param gpuFabricInfo Information about GPU fabric state
+ *
+ * @return
+ * - \ref NVML_SUCCESS Upon success
+ * - \ref NVML_ERROR_NOT_SUPPORTED If \a device doesn't support gpu fabric
+ */
+nvmlReturn_t DECLDIR nvmlDeviceGetGpuFabricInfo(nvmlDevice_t device, nvmlGpuFabricInfo_t *gpuFabricInfo);
+
+
/**
* @}
*/
@@ -5501,7 +5704,7 @@ nvmlReturn_t DECLDIR nvmlDeviceGetRetiredPages(nvmlDevice_t device, nvmlPageReti
* The address information provided from this API is the hardware address of the page that was retired. Note
* that this does not match the virtual address used in CUDA, but will match the address information in XID 63
*
- * \note nvmlDeviceGetRetiredPages_v2 adds an additional timestamps paramter to return the time of each page's
+ * \note nvmlDeviceGetRetiredPages_v2 adds an additional timestamps parameter to return the time of each page's
* retirement.
*
* For Kepler &tm; or newer fully supported devices.
@@ -5838,7 +6041,7 @@ typedef enum nvmlClockLimitId_enum {
* Set clocks that device will lock to.
*
* Sets the clocks that the device will be running at to the value in the range of minGpuClockMHz to maxGpuClockMHz.
- * Setting this will supercede application clock values and take effect regardless if a cuda app is running.
+ * Setting this will supersede application clock values and take effect regardless if a cuda app is running.
* See /ref nvmlDeviceSetApplicationsClocks
*
* Can be used as a setting to request constant performance.
@@ -6105,6 +6308,60 @@ nvmlReturn_t DECLDIR nvmlDeviceSetGpuOperationMode(nvmlDevice_t device, nvmlGpuO
*/
nvmlReturn_t DECLDIR nvmlDeviceSetAPIRestriction(nvmlDevice_t device, nvmlRestrictedAPI_t apiType, nvmlEnableState_t isRestricted);
+/**
+ * Sets the speed of a specified fan.
+ *
+ * WARNING: This function changes the fan control policy to manual. It means that YOU have to monitor
+ * the temperature and adjust the fan speed accordingly.
+ * If you set the fan speed too low you can burn your GPU!
+ * Use nvmlDeviceSetDefaultFanSpeed_v2 to restore default control policy.
+ *
+ * For all cuda-capable discrete products with fans that are Maxwell or Newer.
+ *
+ * device The identifier of the target device
+ * fan The index of the fan, starting at zero
+ * speed The target speed of the fan [0-100] in % of max speed
+ *
+ * return
+ * NVML_SUCCESS if the fan speed has been set
+ * NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized
+ * NVML_ERROR_INVALID_ARGUMENT if the device is not valid, or the speed is outside acceptable ranges,
+ * or if the fan index doesn't reference an actual fan.
+ * NVML_ERROR_NOT_SUPPORTED if the device is older than Maxwell.
+ * NVML_ERROR_UNKNOWN if there was an unexpected error.
+ */
+nvmlReturn_t DECLDIR nvmlDeviceSetFanSpeed_v2(nvmlDevice_t device, unsigned int fan, unsigned int speed);
+
+/**
+ * Set the GPCCLK VF offset value
+ * @param[in] device The identifier of the target device
+ * @param[in] offset The GPCCLK VF offset value to set
+ *
+ * @return
+ * - \ref NVML_SUCCESS if \a offset has been set
+ * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized
+ * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid or \a offset is NULL
+ * - \ref NVML_ERROR_NOT_SUPPORTED if the device does not support this feature
+ * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible
+ * - \ref NVML_ERROR_UNKNOWN on any unexpected error
+ */
+nvmlReturn_t DECLDIR nvmlDeviceSetGpcClkVfOffset(nvmlDevice_t device, int offset);
+
+/**
+ * Set the MemClk (Memory Clock) VF offset value. It requires elevated privileges.
+ * @param[in] device The identifier of the target device
+ * @param[in] offset The MemClk VF offset value to set
+ *
+ * @return
+ * - \ref NVML_SUCCESS if \a offset has been set
+ * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized
+ * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid or \a offset is NULL
+ * - \ref NVML_ERROR_NOT_SUPPORTED if the device does not support this feature
+ * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible
+ * - \ref NVML_ERROR_UNKNOWN on any unexpected error
+ */
+nvmlReturn_t DECLDIR nvmlDeviceSetMemClkVfOffset(nvmlDevice_t device, int offset);
+
/**
* @}
*/
@@ -6955,7 +7212,7 @@ nvmlReturn_t DECLDIR nvmlDeviceGetVgpuCapabilities(nvmlDevice_t device, nvmlDevi
* pointed at by \a vgpuTypeIds. The element count of nvmlVgpuTypeId_t array is passed in \a vgpuCount, and \a vgpuCount
* is used to return the number of vGPU types written to the buffer.
*
- * If the supplied buffer is not large enough to accomodate the vGPU type array, the function returns
+ * If the supplied buffer is not large enough to accommodate the vGPU type array, the function returns
* NVML_ERROR_INSUFFICIENT_SIZE, with the element count of nvmlVgpuTypeId_t array required in \a vgpuCount.
* To query the number of vGPU types supported for the GPU, call this function with *vgpuCount = 0.
* The code will return NVML_ERROR_INSUFFICIENT_SIZE, or NVML_SUCCESS if no vGPU types are supported.
@@ -6984,9 +7241,9 @@ nvmlReturn_t DECLDIR nvmlDeviceGetSupportedVgpus(nvmlDevice_t device, unsigned i
* can concurrently run on a device. For example, if only one vGPU type is allowed at a time on a device, then the creatable
* list will be restricted to whatever vGPU type is already running on the device.
*
- * If the supplied buffer is not large enough to accomodate the vGPU type array, the function returns
+ * If the supplied buffer is not large enough to accommodate the vGPU type array, the function returns
* NVML_ERROR_INSUFFICIENT_SIZE, with the element count of nvmlVgpuTypeId_t array required in \a vgpuCount.
- * To query the number of vGPU types createable for the GPU, call this function with *vgpuCount = 0.
+ * To query the number of vGPU types that can be created for the GPU, call this function with *vgpuCount = 0.
* The code will return NVML_ERROR_INSUFFICIENT_SIZE, or NVML_SUCCESS if no vGPU types are creatable.
*
* @param device The identifier of the target device
@@ -7066,7 +7323,7 @@ nvmlReturn_t DECLDIR nvmlVgpuTypeGetGpuInstanceProfileId(nvmlVgpuTypeId_t vgpuTy
*
* @param vgpuTypeId Handle to vGPU type
* @param deviceID Device ID and vendor ID of the device contained in single 32 bit value
- * @param subsystemID Subsytem ID and subsytem vendor ID of the device contained in single 32 bit value
+ * @param subsystemID Subsystem ID and subsystem vendor ID of the device contained in single 32 bit value
*
* @return
* - \ref NVML_SUCCESS successful completion
@@ -7205,10 +7462,10 @@ nvmlReturn_t DECLDIR nvmlVgpuTypeGetMaxInstancesPerVm(nvmlVgpuTypeId_t vgpuTypeI
* Retrieve the active vGPU instances on a device.
*
* An array of active vGPU instances is returned in the caller-supplied buffer pointed at by \a vgpuInstances. The
- * array elememt count is passed in \a vgpuCount, and \a vgpuCount is used to return the number of vGPU instances
+ * array element count is passed in \a vgpuCount, and \a vgpuCount is used to return the number of vGPU instances
* written to the buffer.
*
- * If the supplied buffer is not large enough to accomodate the vGPU instance array, the function returns
+ * If the supplied buffer is not large enough to accommodate the vGPU instance array, the function returns
* NVML_ERROR_INSUFFICIENT_SIZE, with the element count of nvmlVgpuInstance_t array required in \a vgpuCount.
* To query the number of active vGPU instances, call this function with *vgpuCount = 0. The code will return
* NVML_ERROR_INSUFFICIENT_SIZE, or NVML_SUCCESS if no vGPU Types are supported.
@@ -7409,7 +7666,7 @@ nvmlReturn_t DECLDIR nvmlVgpuInstanceGetEccMode(nvmlVgpuInstance_t vgpuInstance,
* @param encoderCapacity Reference to an unsigned int for the encoder capacity
*
* @return
- * - \ref NVML_SUCCESS if \a encoderCapacity has been retrived
+ * - \ref NVML_SUCCESS if \a encoderCapacity has been retrieved
* - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized
* - \ref NVML_ERROR_INVALID_ARGUMENT if \a vgpuInstance is 0, or \a encoderQueryType is invalid
* - \ref NVML_ERROR_NOT_FOUND if \a vgpuInstance does not match a valid active vGPU instance on the system
@@ -7462,7 +7719,7 @@ nvmlReturn_t DECLDIR nvmlVgpuInstanceGetEncoderStats(nvmlVgpuInstance_t vgpuInst
* array element count is passed in \a sessionCount, and \a sessionCount is used to return the number of sessions
* written to the buffer.
*
- * If the supplied buffer is not large enough to accomodate the active session array, the function returns
+ * If the supplied buffer is not large enough to accommodate the active session array, the function returns
* NVML_ERROR_INSUFFICIENT_SIZE, with the element count of nvmlEncoderSessionInfo_t array required in \a sessionCount.
* To query the number of active encoder sessions, call this function with *sessionCount = 0. The code will return
* NVML_SUCCESS with number of active encoder sessions updated in *sessionCount.
@@ -7492,7 +7749,7 @@ nvmlReturn_t DECLDIR nvmlVgpuInstanceGetEncoderSessions(nvmlVgpuInstance_t vgpuI
* For Maxwell &tm; or newer fully supported devices.
*
* @param vgpuInstance Identifier of the target vGPU instance
-* @param fbcStats Reference to nvmlFBCStats_t structure contianing NvFBC stats
+* @param fbcStats Reference to nvmlFBCStats_t structure containing NvFBC stats
*
* @return
* - \ref NVML_SUCCESS if \a fbcStats is fetched
@@ -7510,7 +7767,7 @@ nvmlReturn_t DECLDIR nvmlVgpuInstanceGetFBCStats(nvmlVgpuInstance_t vgpuInstance
* array element count is passed in \a sessionCount, and \a sessionCount is used to return the number of sessions
* written to the buffer.
*
-* If the supplied buffer is not large enough to accomodate the active session array, the function returns
+* If the supplied buffer is not large enough to accommodate the active session array, the function returns
* NVML_ERROR_INSUFFICIENT_SIZE, with the element count of nvmlFBCSessionInfo_t array required in \a sessionCount.
* To query the number of active FBC sessions, call this function with *sessionCount = 0. The code will return
* NVML_SUCCESS with number of active FBC sessions updated in *sessionCount.
@@ -7620,7 +7877,7 @@ typedef struct nvmlVgpuMetadata_st
char guestDriverVersion[NVML_SYSTEM_DRIVER_VERSION_BUFFER_SIZE]; //!< Version of driver installed in guest
char hostDriverVersion[NVML_SYSTEM_DRIVER_VERSION_BUFFER_SIZE]; //!< Version of driver installed in host
unsigned int reserved[6]; //!< Reserved for internal use
- unsigned int vgpuVirtualizationCaps; //!< vGPU virtualizaion capabilities bitfileld
+ unsigned int vgpuVirtualizationCaps; //!< vGPU virtualization capabilities bitfield
unsigned int guestVgpuVersion; //!< vGPU version of guest driver
unsigned int opaqueDataSize; //!< Size of opaque data field in bytes
char opaqueData[4]; //!< Opaque data
@@ -7634,7 +7891,7 @@ typedef struct nvmlVgpuPgpuMetadata_st
unsigned int version; //!< Current version of the structure
unsigned int revision; //!< Current revision of the structure
char hostDriverVersion[NVML_SYSTEM_DRIVER_VERSION_BUFFER_SIZE]; //!< Host driver version
- unsigned int pgpuVirtualizationCaps; //!< Pgpu virtualizaion capabilities bitfileld
+ unsigned int pgpuVirtualizationCaps; //!< Pgpu virtualization capabilities bitfield
unsigned int reserved[5]; //!< Reserved for internal use
nvmlVgpuVersion_t hostSupportedVgpuRange; //!< vGPU version range supported by host driver
unsigned int opaqueDataSize; //!< Size of opaque data field in bytes
@@ -7732,7 +7989,7 @@ nvmlReturn_t DECLDIR nvmlDeviceGetVgpuMetadata(nvmlDevice_t device, nvmlVgpuPgpu
*
* The caller passes in a buffer via \a compatibilityInfo, into which a compatibility information structure is written. The
* structure defines the states in which the vGPU / VM may be booted on the physical GPU. If the vGPU / VM compatibility
- * with the physical GPU is limited, a limit code indicates the factor limiting compability.
+ * with the physical GPU is limited, a limit code indicates the factor limiting compatability.
* (see \ref nvmlVgpuPgpuCompatibilityLimitCode_t for details).
*
* Note: vGPU compatibility does not take into account dynamic capacity conditions that may limit a system's ability to
@@ -9022,216 +9279,7 @@ nvmlReturn_t DECLDIR nvmlDeviceGetMigDeviceHandleByIndex(nvmlDevice_t device, un
*/
nvmlReturn_t DECLDIR nvmlDeviceGetDeviceHandleFromMigDeviceHandle(nvmlDevice_t migDevice, nvmlDevice_t *device);
-/**
- * Get the type of the GPU Bus (PCIe, PCI, ...)
- *
- * @param device The identifier of the target device
- * @param type The PCI Bus type
- *
- * return
- * - \ref NVML_SUCCESS if the bus \a type is successfully retreived
- * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized
- * - \ref NVML_ERROR_INVALID_ARGUMENT if \device is invalid or \type is NULL
- * - \ref NVML_ERROR_UNKNOWN on any unexpected error
- */
-nvmlReturn_t DECLDIR nvmlDeviceGetBusType(nvmlDevice_t device, nvmlBusType_t *type);
-
-/**
- * Retrieve performance monitor samples from the associated subdevice.
- *
- * @param device
- * @param pDynamicPstatesInfo
- *
- * @return
- * - \ref NVML_SUCCESS if \a pDynamicPstatesInfo has been set
- * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized
- * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid or \a pDynamicPstatesInfo is NULL
- * - \ref NVML_ERROR_NOT_SUPPORTED if the device does not support this feature
- * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible
- * - \ref NVML_ERROR_UNKNOWN on any unexpected error
- */
-nvmlReturn_t DECLDIR nvmlDeviceGetDynamicPstatesInfo(nvmlDevice_t device, nvmlGpuDynamicPstatesInfo_t *pDynamicPstatesInfo);
-
-/**
- * Sets the speed of a specified fan.
- *
- * WARNING: This function changes the fan control policy to manual. It means that YOU have to monitor
- * the temperature and adjust the fan speed accordingly.
- * If you set the fan speed too low you can burn your GPU!
- * Use nvmlDeviceSetDefaultFanSpeed_v2 to restore default control policy.
- *
- * For all cuda-capable discrete products with fans that are Maxwell or Newer.
- *
- * device The identifier of the target device
- * fan The index of the fan, starting at zero
- * speed The target speed of the fan [0-100] in % of max speed
- *
- * return
- * NVML_SUCCESS if the fan speed has been set
- * NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized
- * NVML_ERROR_INVALID_ARGUMENT if the device is not valid, or the speed is outside acceptable ranges,
- * or if the fan index doesn't reference an actual fan.
- * NVML_ERROR_NOT_SUPPORTED if the device is older than Maxwell.
- * NVML_ERROR_UNKNOWN if there was an unexpected error.
- */
-nvmlReturn_t DECLDIR nvmlDeviceSetFanSpeed_v2(nvmlDevice_t device, unsigned int fan, unsigned int speed);
-
-/**
- * Retrieve the GPCCLK VF offset value
- * @param[in] device The identifier of the target device
- * @param[out] offset The retrieved GPCCLK VF offset value
- *
- * @return
- * - \ref NVML_SUCCESS if \a offset has been successfully queried
- * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized
- * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid or \a offset is NULL
- * - \ref NVML_ERROR_NOT_SUPPORTED if the device does not support this feature
- * - \ref NVML_ERROR_UNKNOWN on any unexpected error
- */
-nvmlReturn_t DECLDIR nvmlDeviceGetGpcClkVfOffset(nvmlDevice_t device, int *offset);
-
-/**
- * Set the GPCCLK VF offset value
- * @param[in] device The identifier of the target device
- * @param[in] offset The GPCCLK VF offset value to set
- *
- * @return
- * - \ref NVML_SUCCESS if \a offset has been set
- * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized
- * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid or \a offset is NULL
- * - \ref NVML_ERROR_NOT_SUPPORTED if the device does not support this feature
- * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible
- * - \ref NVML_ERROR_UNKNOWN on any unexpected error
- */
-nvmlReturn_t DECLDIR nvmlDeviceSetGpcClkVfOffset(nvmlDevice_t device, int offset);
-
-/**
- * Retrieve the MemClk (Memory Clock) VF offset value.
- * @param[in] device The identifier of the target device
- * @param[out] offset The retrieved MemClk VF offset value
- *
- * @return
- * - \ref NVML_SUCCESS if \a offset has been successfully queried
- * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized
- * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid or \a offset is NULL
- * - \ref NVML_ERROR_NOT_SUPPORTED if the device does not support this feature
- * - \ref NVML_ERROR_UNKNOWN on any unexpected error
- */
-nvmlReturn_t DECLDIR nvmlDeviceGetMemClkVfOffset(nvmlDevice_t device, int *offset);
-
-/**
- * Set the MemClk (Memory Clock) VF offset value. It requires elevated privileges.
- * @param[in] device The identifier of the target device
- * @param[in] offset The MemClk VF offset value to set
- *
- * @return
- * - \ref NVML_SUCCESS if \a offset has been set
- * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized
- * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid or \a offset is NULL
- * - \ref NVML_ERROR_NOT_SUPPORTED if the device does not support this feature
- * - \ref NVML_ERROR_GPU_IS_LOST if the target GPU has fallen off the bus or is otherwise inaccessible
- * - \ref NVML_ERROR_UNKNOWN on any unexpected error
- */
-nvmlReturn_t DECLDIR nvmlDeviceSetMemClkVfOffset(nvmlDevice_t device, int offset);
-
-/**
- * Retrieve min and max clocks of some clock domain for a given PState
- *
- * @param device The identifier of the target device
- * @param type Clock domain
- * @param pstate PState to query
- * @param minClockMHz Reference in which to return min clock frequency
- * @param maxClockMHz Reference in which to return max clock frequency
- *
- * @return
- * - \ref NVML_SUCCESS if everything worked
- * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized
- * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device, \a type or \a pstate are invalid or both
- * \a minClockMHz and \a maxClockMHz are NULL
- * - \ref NVML_ERROR_NOT_SUPPORTED if the device does not support this feature
- */
-nvmlReturn_t DECLDIR nvmlDeviceGetMinMaxClockOfPState(nvmlDevice_t device, nvmlClockType_t type, nvmlPstates_t pstate,
- unsigned int * minClockMHz, unsigned int * maxClockMHz);
-
-/**
- * Get all supported Performance States (P-States) for the device.
- *
- * The returned array would contain a contiguous list of valid P-States supported by
- * the device. If the number of supported P-States is fewer than the size of the array
- * supplied missing elements would contain \a NVML_PSTATE_UNKNOWN.
- *
- * The number of elements in the returned list will never exceed \a NVML_MAX_GPU_PERF_PSTATES.
- *
- * @param device The identifier of the target device
- * @param pstates Container to return the list of performance states
- * supported by device
- * @param size Size of the supplied \a pstates array in bytes
- *
- * @return
- * - \ref NVML_SUCCESS if \a pstates array has been retrieved
- * - \ref NVML_ERROR_INSUFFICIENT_SIZE if the the container supplied was not large enough to
- * hold the resulting list
- * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized
- * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device or \a pstates is invalid
- * - \ref NVML_ERROR_NOT_SUPPORTED if the device does not support performance state readings
- * - \ref NVML_ERROR_UNKNOWN on any unexpected error
- */
-nvmlReturn_t DECLDIR nvmlDeviceGetSupportedPerformanceStates(nvmlDevice_t device,
- nvmlPstates_t *pstates, unsigned int size);
-
-/**
- * Retrieve the GPCCLK min max VF offset value.
- * @param[in] device The identifier of the target device
- * @param[out] minOffset The retrieved GPCCLK VF min offset value
- * @param[out] maxOffset The retrieved GPCCLK VF max offset value
- *
- * @return
- * - \ref NVML_SUCCESS if \a offset has been successfully queried
- * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized
- * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid or \a offset is NULL
- * - \ref NVML_ERROR_NOT_SUPPORTED if the device does not support this feature
- * - \ref NVML_ERROR_UNKNOWN on any unexpected error
- */
-nvmlReturn_t DECLDIR nvmlDeviceGetGpcClkMinMaxVfOffset(nvmlDevice_t device,
- int *minOffset, int *maxOffset);
-
-/**
- * Retrieve the MemClk (Memory Clock) min max VF offset value.
- * @param[in] device The identifier of the target device
- * @param[out] minOffset The retrieved MemClk VF min offset value
- * @param[out] maxOffset The retrieved MemClk VF max offset value
- *
- * @return
- * - \ref NVML_SUCCESS if \a offset has been successfully queried
- * - \ref NVML_ERROR_UNINITIALIZED if the library has not been successfully initialized
- * - \ref NVML_ERROR_INVALID_ARGUMENT if \a device is invalid or \a offset is NULL
- * - \ref NVML_ERROR_NOT_SUPPORTED if the device does not support this feature
- * - \ref NVML_ERROR_UNKNOWN on any unexpected error
- */
-nvmlReturn_t DECLDIR nvmlDeviceGetMemClkMinMaxVfOffset(nvmlDevice_t device,
- int *minOffset, int *maxOffset);
-
-/**
- * Get fabric information associated with the device.
- *
- * %HOPPER_OR_NEWER%
- *
- * On Hopper + NVSwitch systems, GPU is registered with the NVIDIA Fabric Manager
- * Upon successful registration, the GPU is added to the NVLink fabric to enable
- * peer-to-peer communication.
- * This API reports the current state of the GPU in the NVLink fabric
- * along with other useful information.
- *
- * @param device The identifier of the target device
- * @param gpuFabricInfo Information about GPU fabric state
- *
- * @return
- * - \ref NVML_SUCCESS Upon success
- * - \ref NVML_ERROR_NOT_SUPPORTED If \a device doesn't support gpu fabric
- */
-nvmlReturn_t DECLDIR nvmlDeviceGetGpuFabricInfo(nvmlDevice_t device, nvmlGpuFabricInfo_t *gpuFabricInfo);
-
-/** @} */
+/** @} */ // @defgroup nvmlMultiInstanceGPU
/***************************************************************************************************/
/** @defgroup GPM NVML GPM
diff --git a/src/version.mk b/src/version.mk
index 36f5738..33fa123 100644
--- a/src/version.mk
+++ b/src/version.mk
@@ -1,4 +1,4 @@
-NVIDIA_VERSION = 525.85.05
+NVIDIA_VERSION = 525.125.06
# This file.
VERSION_MK_FILE := $(lastword $(MAKEFILE_LIST))
diff --git a/version.mk b/version.mk
index 36f5738..33fa123 100644
--- a/version.mk
+++ b/version.mk
@@ -1,4 +1,4 @@
-NVIDIA_VERSION = 525.85.05
+NVIDIA_VERSION = 525.125.06
# This file.
VERSION_MK_FILE := $(lastword $(MAKEFILE_LIST))
--- End Message ---