summaryrefslogtreecommitdiff
path: root/kde-plasma/ksystemstats/files/ksystemstats-5.27.6-nvidia-data-fields.patch
diff options
context:
space:
mode:
Diffstat (limited to 'kde-plasma/ksystemstats/files/ksystemstats-5.27.6-nvidia-data-fields.patch')
-rw-r--r--kde-plasma/ksystemstats/files/ksystemstats-5.27.6-nvidia-data-fields.patch131
1 files changed, 0 insertions, 131 deletions
diff --git a/kde-plasma/ksystemstats/files/ksystemstats-5.27.6-nvidia-data-fields.patch b/kde-plasma/ksystemstats/files/ksystemstats-5.27.6-nvidia-data-fields.patch
deleted file mode 100644
index 718bbd8c64e2..000000000000
--- a/kde-plasma/ksystemstats/files/ksystemstats-5.27.6-nvidia-data-fields.patch
+++ /dev/null
@@ -1,131 +0,0 @@
-From 4f7213e6e742b993feeaf300181a67923e60c0f4 Mon Sep 17 00:00:00 2001
-From: David Redondo <kde@david-redondo.de>
-Date: Wed, 10 May 2023 02:26:29 +0000
-Subject: [PATCH] gpu/nvidia: Discover data fields based on headers
-
-This guards us against the appearance of new fields or if they
-ever appear in a different order.
-BUG:470474
-FIXED-IN:5.27.7
-
-(cherry picked from commit 7f9ead6bddfdf6f13a1ea48791f8f5d5c80c6980)
-Because in Qt5 QVector<T>::indexOf only takes T's we have to provide
-our own indexOf here.
----
- plugins/gpu/NvidiaSmiProcess.cpp | 56 ++++++++++++++++++++++----------
- plugins/gpu/NvidiaSmiProcess.h | 14 ++++++++
- 2 files changed, 53 insertions(+), 17 deletions(-)
-
-diff --git a/plugins/gpu/NvidiaSmiProcess.cpp b/plugins/gpu/NvidiaSmiProcess.cpp
-index 7f8dd62..d92b396 100644
---- a/plugins/gpu/NvidiaSmiProcess.cpp
-+++ b/plugins/gpu/NvidiaSmiProcess.cpp
-@@ -155,19 +155,37 @@ void NvidiaSmiProcess::unref()
- void NvidiaSmiProcess::readStatisticsData()
- {
- while (m_process->canReadLine()) {
-- const QString line = m_process->readLine();
-- if (line.startsWith(QLatin1Char('#'))) {
-- continue;
-- }
-+ QString line = m_process->readLine();
- #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
-- const QVector<QStringRef> parts = QStringRef(&line).trimmed().split(QLatin1Char(' '), Qt::SkipEmptyParts);
-+ QVector<QStringRef> parts = QStringRef(&line).trimmed().split(QLatin1Char(' '), Qt::SkipEmptyParts);
- #else
-- const QVector<QStringView> parts = QStringView(line).trimmed().split(QLatin1Char(' '), Qt::SkipEmptyParts);
-+ QVector<QStringView> parts = QStringView(line).trimmed().split(QLatin1Char(' '), Qt::SkipEmptyParts);
- #endif
--
-- // format at time of writing is
-- // # gpu pwr gtemp mtemp sm mem enc dec mclk pclk fb bar1
-- if (parts.count() != 12) {
-+ // Because in Qt5 indexOf of QVector<T> only takes T's, write our own indexOf taking arbitrary types
-+ auto indexOf = [](const auto &stack, const auto& needle) {
-+ auto it = std::find(stack.cbegin(), stack.cend(), needle);
-+ return it != stack.cend() ? std::distance(stack.cbegin(), it) : -1;
-+ };
-+
-+ // discover index of fields in the header format is something like
-+ //# gpu pwr gtemp mtemp sm mem enc dec mclk pclk fb bar1
-+ // # Idx W C C % % % % MHz MHz MB MB
-+ // 0 25 29 - 1 1 0 0 4006 1506 891 22
-+ if (line.startsWith(QLatin1Char('#'))) {
-+ if (m_dmonIndices.gpu == -1) {
-+ // Remove First part because of leading '# ';
-+ parts.removeFirst();
-+ m_dmonIndices.gpu = indexOf(parts, QLatin1String("gpu"));
-+ m_dmonIndices.power = indexOf(parts, QLatin1String("pwr"));
-+ m_dmonIndices.gtemp = indexOf(parts, QLatin1String("gtemp"));
-+ m_dmonIndices.sm = indexOf(parts, QLatin1String("sm"));
-+ m_dmonIndices.enc = indexOf(parts, QLatin1String("enc"));
-+ m_dmonIndices.dec = indexOf(parts, QLatin1String("dec"));
-+ m_dmonIndices.fb = indexOf(parts, QLatin1String("fb"));
-+ m_dmonIndices.bar1 = indexOf(parts, QLatin1String("bar1"));
-+ m_dmonIndices.mclk = indexOf(parts, QLatin1String("mclk"));
-+ m_dmonIndices.pclk = indexOf(parts, QLatin1String("pclk"));
-+ }
- continue;
- }
-
-@@ -177,19 +195,23 @@ void NvidiaSmiProcess::readStatisticsData()
- continue;
- }
-
-+ auto readDataIfFound = [&parts, this] (int index) {
-+ return index > 0 ? parts[index].toUInt() : 0;
-+ };
-+
- GpuData data;
-- data.index = index;
-- data.power = parts[1].toUInt();
-- data.temperature = parts[2].toUInt();
-+ data.index = readDataIfFound(m_dmonIndices.gpu);
-+ data.power = readDataIfFound(m_dmonIndices.power);
-+ data.temperature = readDataIfFound(m_dmonIndices.gtemp);
-
- // GPU usage equals "SM" usage + "ENC" usage + "DEC" usage
-- data.usage = parts[4].toUInt() + parts[6].toUInt() + parts[7].toUInt();
-+ data.usage = readDataIfFound(m_dmonIndices.sm) + readDataIfFound(m_dmonIndices.enc) + readDataIfFound(m_dmonIndices.dec);
-
- // Total memory used equals "FB" usage + "BAR1" usage
-- data.memoryUsed = parts[10].toUInt() + parts[11].toUInt();
-+ data.memoryUsed = readDataIfFound(m_dmonIndices.fb) + readDataIfFound(m_dmonIndices.bar1);
-
-- data.memoryFrequency = parts[8].toUInt();
-- data.coreFrequency = parts[9].toUInt();
-+ data.memoryFrequency = readDataIfFound(m_dmonIndices.mclk);
-+ data.coreFrequency = readDataIfFound(m_dmonIndices.pclk);
-
- Q_EMIT dataReceived(data);
- }
-diff --git a/plugins/gpu/NvidiaSmiProcess.h b/plugins/gpu/NvidiaSmiProcess.h
-index f39cc9d..2cd8504 100644
---- a/plugins/gpu/NvidiaSmiProcess.h
-+++ b/plugins/gpu/NvidiaSmiProcess.h
-@@ -49,8 +49,22 @@ public:
- private:
- void readStatisticsData();
-
-+ struct dmonIndices {
-+ int gpu = -1;
-+ int gtemp = -1;
-+ int power = -1;
-+ int sm = -1;
-+ int enc = -1;
-+ int dec = -1;
-+ int fb = -1;
-+ int bar1 = -1;
-+ int mclk = -1;
-+ int pclk = -1;
-+ };
-+
- QString m_smiPath;
- std::vector<GpuQueryResult> m_queryResult;
- std::unique_ptr<QProcess> m_process = nullptr;
- int m_references = 0;
-+ dmonIndices m_dmonIndices;
- };
---
-GitLab
-