Compare commits

...

27 Commits

Author SHA1 Message Date
chn
421a0854d0 devices.pc: default use cachyos kernel 2024-10-14 11:57:59 +08:00
chn
d70544a2d4 modules.bugs.bluetooth: remove 2024-10-14 11:53:32 +08:00
chn
fb6525d986 modules.bugs.plasma: init 2024-10-14 11:53:30 +08:00
chn
1fbd9f2f98 Merge branch 'next' into production 2024-10-14 11:43:49 +08:00
chn
5c579399d5 remove hdfview 2024-10-12 11:06:11 +08:00
chn
59552cb86e update everything 2024-10-09 08:02:53 +08:00
chn
447106a5e8 Merge branch 'production' into next 2024-10-08 20:48:17 +08:00
chn
9ce119ea5c devices.pc: use xanmod-latest 2024-10-01 10:17:52 +08:00
chn
2ccc906d42 Revert "update nixpkgs"
This reverts commit 92599b7419.
2024-10-01 10:15:38 +08:00
chn
92599b7419 update nixpkgs 2024-10-01 10:11:20 +08:00
chn
48388ee644 fix build 2024-10-01 09:55:38 +08:00
chn
da26391714 update nixos-hardware 2024-10-01 09:53:26 +08:00
chn
bdd2cca8d6 devices.pc: add xanmod variant 2024-10-01 09:44:45 +08:00
chn
f0097cddb4 devices.pc: use cachyos kernel 2024-10-01 09:33:25 +08:00
chn
738bcb7277 modules.system.kernel: use xanmod-lts as default 2024-09-30 20:59:46 +08:00
chn
1a1f36caed update everything 2024-09-30 20:51:20 +08:00
chn
4204981cd9 Merge branch 'production' into next 2024-09-30 20:45:55 +08:00
chn
e2b3735392 devices.pc: switch to lts kernel 2024-09-30 20:45:07 +08:00
chn
87b7ca3689 fix build 2024-09-30 20:40:53 +08:00
chn
61316148e1 Merge branch 'production' into next 2024-09-30 00:09:40 +08:00
chn
45cd321bce Merge branch 'production' into next 2024-09-26 21:42:49 +08:00
chn
4f35f43613 fix opencv 2024-09-26 21:42:02 +08:00
chn
6eee2f4eaf modules.system.kernel: remove unused patch 2024-09-26 13:10:27 +08:00
chn
a312f6c06b fix build 2024-09-26 00:10:48 +08:00
chn
965e8cc8dc modules.packages: cleanup 2024-09-25 20:41:28 +08:00
chn
85c41f98fe fix build 2024-09-25 18:29:17 +08:00
chn
5f134d09c2 update everything 2024-09-25 13:29:14 +08:00
20 changed files with 790 additions and 578 deletions

View File

@ -48,8 +48,8 @@ inputs:
{ march = "znver4"; cuda = { enable = true; capabilities = [ "8.9" ]; forwardCompat = false; }; }; { march = "znver4"; cuda = { enable = true; capabilities = [ "8.9" ]; forwardCompat = false; }; };
kernel = kernel =
{ {
variant = "xanmod-latest"; variant = "cachyos";
patches = [ "hibernate-progress" "amdgpu" ]; patches = [ "hibernate-progress" ];
modules.modprobeConfig = modules.modprobeConfig =
[ "options iwlwifi power_save=0" "options iwlmvm power_scheme=1" "options iwlwifi uapsd_disable=1" ]; [ "options iwlwifi power_save=0" "options iwlmvm power_scheme=1" "options iwlwifi uapsd_disable=1" ];
}; };
@ -142,7 +142,7 @@ inputs:
waydroid = {}; waydroid = {};
docker = {}; docker = {};
}; };
bugs = [ "xmunet" "backlight" "amdpstate" "bluetooth" ]; bugs = [ "xmunet" "backlight" "amdpstate" "plasma" ];
}; };
boot = boot =
{ {
@ -190,6 +190,11 @@ inputs:
}; };
system.nixos.tags = [ "nvidia" ]; system.nixos.tags = [ "nvidia" ];
}; };
xanmod.configuration =
{
nixos.system.kernel.variant = inputs.lib.mkForce "xanmod-latest";
system.nixos.tags = [ "xanmod" ];
};
}; };
}; };
} }

View File

@ -54,7 +54,7 @@ inputs:
waydroid = {}; waydroid = {};
docker = {}; docker = {};
}; };
bugs = [ "xmunet" "suspend-hibernate-no-platform" "bluetooth" ]; bugs = [ "xmunet" "suspend-hibernate-no-platform" "plasma" ];
packages.vasp = null; packages.vasp = null;
}; };
powerManagement.resumeCommands = ''${inputs.pkgs.systemd}/bin/systemctl restart iptsd''; powerManagement.resumeCommands = ''${inputs.pkgs.systemd}/bin/systemctl restart iptsd'';

File diff suppressed because it is too large Load Diff

View File

@ -3,7 +3,7 @@
inputs = inputs =
{ {
nixpkgs.url = "github:CHN-beta/nixpkgs/nixos-unstable"; nixpkgs.url = "github:CHN-beta/nixpkgs/next";
"nixpkgs-23.11".url = "github:CHN-beta/nixpkgs/nixos-23.11"; "nixpkgs-23.11".url = "github:CHN-beta/nixpkgs/nixos-23.11";
"nixpkgs-23.05".url = "github:CHN-beta/nixpkgs/nixos-23.05"; "nixpkgs-23.05".url = "github:CHN-beta/nixpkgs/nixos-23.05";
"nixpkgs-22.11".url = "github:NixOS/nixpkgs/nixos-22.11"; "nixpkgs-22.11".url = "github:NixOS/nixpkgs/nixos-22.11";
@ -26,7 +26,7 @@
inputs = { nixpkgs.follows = "nixpkgs"; home-manager.follows = "home-manager"; }; inputs = { nixpkgs.follows = "nixpkgs"; home-manager.follows = "home-manager"; };
}; };
nur-linyinfeng = { url = "github:linyinfeng/nur-packages"; inputs.nixpkgs.follows = "nixpkgs"; }; nur-linyinfeng = { url = "github:linyinfeng/nur-packages"; inputs.nixpkgs.follows = "nixpkgs"; };
nixos-hardware.url = "github:CHN-beta/nixos-hardware"; nixos-hardware.url = "github:CHN-beta/nixos-hardware/next";
envfs = { url = "github:Mic92/envfs"; inputs.nixpkgs.follows = "nixpkgs"; }; envfs = { url = "github:Mic92/envfs"; inputs.nixpkgs.follows = "nixpkgs"; };
nix-fast-build = { url = "github:/Mic92/nix-fast-build"; inputs.nixpkgs.follows = "nixpkgs"; }; nix-fast-build = { url = "github:/Mic92/nix-fast-build"; inputs.nixpkgs.follows = "nixpkgs"; };
nix-flatpak.url = "github:gmodena/nix-flatpak"; nix-flatpak.url = "github:gmodena/nix-flatpak";
@ -38,8 +38,8 @@
gricad = { url = "github:Gricad/nur-packages"; flake = false; }; gricad = { url = "github:Gricad/nur-packages"; flake = false; };
catppuccin.url = "github:catppuccin/nix"; catppuccin.url = "github:catppuccin/nix";
bscpkgs = { url = "git+https://git.chn.moe/chn/bscpkgs.git"; inputs.nixpkgs.follows = "nixpkgs"; }; bscpkgs = { url = "git+https://git.chn.moe/chn/bscpkgs.git"; inputs.nixpkgs.follows = "nixpkgs"; };
poetry2nix = { url = "github:CHN-beta/poetry2nix"; inputs.nixpkgs.follows = "nixpkgs"; }; poetry2nix = { url = "github:nix-community/poetry2nix"; inputs.nixpkgs.follows = "nixpkgs"; };
winapps = { url = "github:CHN-beta/winapps/feat-nix-packaging"; inputs.nixpkgs.follows = "nixpkgs"; }; winapps = { url = "github:winapps-org/winapps/feat-nix-packaging"; inputs.nixpkgs.follows = "nixpkgs"; };
misskey = { url = "git+https://github.com/CHN-beta/misskey?submodules=1"; flake = false; }; misskey = { url = "git+https://github.com/CHN-beta/misskey?submodules=1"; flake = false; };
rsshub = { url = "github:DIYgod/RSSHub"; flake = false; }; rsshub = { url = "github:DIYgod/RSSHub"; flake = false; };

View File

@ -1,2 +1,4 @@
{ inputs }: let inherit (inputs.self.packages.x86_64-linux) pkgs; in { inputs }: let inherit (inputs.self.packages.x86_64-linux) pkgs; in
{} {
git-lfs-transfer = "sha256-1cGlhLdnU6yTqzcB3J1cq3gawncbtdgkb3LFh2ZmXbM=";
}

View File

@ -40,9 +40,11 @@ inputs:
amdpstate.boot.kernelParams = [ "amd_pstate=active" ]; amdpstate.boot.kernelParams = [ "amd_pstate=active" ];
hibernate-mt7921e.powerManagement.resumeCommands = hibernate-mt7921e.powerManagement.resumeCommands =
let modprobe = "${inputs.pkgs.kmod}/bin/modprobe"; in "${modprobe} -r -w 3000 mt7921e && ${modprobe} mt7921e"; let modprobe = "${inputs.pkgs.kmod}/bin/modprobe"; in "${modprobe} -r -w 3000 mt7921e && ${modprobe} mt7921e";
# could not use bt keyboard # https://discuss.kde.org/t/bug-power-profiles-daemon-0-23-seems-starts-too-late-for-powerdevil/21416
# https://github.com/bluez/bluez/issues/745 # remove in plasma 6.2
bluetooth.hardware.bluetooth.settings.General.JustWorksRepairing = "always"; plasma.nixpkgs.overlays = [(final: prev: { kdePackages = prev.kdePackages.overrideScope
(final: prev: { powerdevil = prev.powerdevil.overrideAttrs
(prev: { patches = prev.patches or [] ++ [ ./plasma.patch ]; });});})];
}; };
in in
{ {

381
modules/bugs/plasma.patch Normal file
View File

@ -0,0 +1,381 @@
From 8e698dbcdc9ce95095ea2739713fde05ca4822f5 Mon Sep 17 00:00:00 2001
From: Jakob Petsovits <jpetso@petsovits.com>
Date: Fri, 13 Sep 2024 17:05:35 +0200
Subject: [PATCH] applets/batterymonitor: React to D-Bus service (un)register
events
Previously, the "Power and Battery" applet only checked for the
presence of PowerDevil's D-Bus services once when it starts up.
This appears to (mostly?) work for applets embedded in a panel,
but does not work for applets on the desktop itself.
Likely there's a timing issue and applets on the desktop start
sooner than PowerDevil will advertise its services.
A better way to work is for the applet to monitor the bus for when
the relevant services appear or disappear. When observing a service
registered or unregistered event, the applet gets set up accordingly.
This fixes the race condition for two out of three applet parts
(power profiles, inhibitions) but does not fix battery status;
the data for that is coming from `BatteryControlModel`
in plasma-workspace. A similar fix will have to be implemented there.
CCBUG: 488915
CCBUG: 489003
CCBUG: 492859
CCBUG: 492945
---
.../plugin/powermanagementcontrol.cpp | 100 +++++++++++++++---
.../plugin/powermanagementcontrol.h | 12 ++-
.../plugin/powerprofilescontrol.cpp | 78 +++++++++++++-
.../plugin/powerprofilescontrol.h | 11 +-
4 files changed, 185 insertions(+), 16 deletions(-)
diff --git a/applets/batterymonitor/plugin/powermanagementcontrol.cpp b/applets/batterymonitor/plugin/powermanagementcontrol.cpp
index fa3e59c49..72af079a7 100644
--- a/applets/batterymonitor/plugin/powermanagementcontrol.cpp
+++ b/applets/batterymonitor/plugin/powermanagementcontrol.cpp
@@ -14,6 +14,7 @@
#include <QDBusInterface>
#include <QDBusMetaType>
#include <QDBusReply>
+#include <QDBusServiceWatcher>
#include <QString>
#include <QVariant>
@@ -26,11 +27,53 @@ static constexpr QLatin1StringView FDO_POWERMANAGEMENT_SERVICE("org.freedesktop.
PowerManagementControl::PowerManagementControl(QObject *parent)
: QObject(parent)
+ , m_solidWatcher(new QDBusServiceWatcher)
+ , m_fdoWatcher(new QDBusServiceWatcher)
{
qDBusRegisterMetaType<QList<InhibitionInfo>>();
qDBusRegisterMetaType<InhibitionInfo>();
+ // Watch for PowerDevil's power management service
+ m_solidWatcher->setConnection(QDBusConnection::sessionBus());
+ m_solidWatcher->setWatchMode(QDBusServiceWatcher::WatchForRegistration | QDBusServiceWatcher::WatchForUnregistration);
+ m_solidWatcher->addWatchedService(SOLID_POWERMANAGEMENT_SERVICE);
+
+ connect(m_solidWatcher.get(), &QDBusServiceWatcher::serviceRegistered, this, &PowerManagementControl::onServiceRegistered);
+ connect(m_solidWatcher.get(), &QDBusServiceWatcher::serviceUnregistered, this, &PowerManagementControl::onServiceUnregistered);
+ // If it's up and running already, let's cache it
if (QDBusConnection::sessionBus().interface()->isServiceRegistered(SOLID_POWERMANAGEMENT_SERVICE)) {
+ onServiceRegistered(SOLID_POWERMANAGEMENT_SERVICE);
+ }
+
+ // Watch for the freedesktop.org power management service
+ m_fdoWatcher->setConnection(QDBusConnection::sessionBus());
+ m_fdoWatcher->setWatchMode(QDBusServiceWatcher::WatchForRegistration | QDBusServiceWatcher::WatchForUnregistration);
+ m_fdoWatcher->addWatchedService(FDO_POWERMANAGEMENT_SERVICE);
+
+ connect(m_fdoWatcher.get(), &QDBusServiceWatcher::serviceRegistered, this, &PowerManagementControl::onServiceRegistered);
+ connect(m_fdoWatcher.get(), &QDBusServiceWatcher::serviceUnregistered, this, &PowerManagementControl::onServiceUnregistered);
+ // If it's up and running already, let's cache it
+ if (QDBusConnection::sessionBus().interface()->isServiceRegistered(FDO_POWERMANAGEMENT_SERVICE)) {
+ onServiceRegistered(FDO_POWERMANAGEMENT_SERVICE);
+ }
+}
+
+PowerManagementControl::~PowerManagementControl()
+{
+}
+
+void PowerManagementControl::onServiceRegistered(const QString &serviceName)
+{
+ if (serviceName == FDO_POWERMANAGEMENT_SERVICE) {
+ if (!QDBusConnection::sessionBus().connect(FDO_POWERMANAGEMENT_SERVICE,
+ QStringLiteral("/org/freedesktop/PowerManagement"),
+ QStringLiteral("org.freedesktop.PowerManagement.Inhibit"),
+ QStringLiteral("HasInhibitChanged"),
+ this,
+ SLOT(onHasInhibitionChanged(bool)))) {
+ qCDebug(APPLETS::BATTERYMONITOR) << "Error connecting to fdo inhibition changes via dbus";
+ }
+ } else if (serviceName == SOLID_POWERMANAGEMENT_SERVICE) {
m_isManuallyInhibited = InhibitMonitor::self().getInhibit();
connect(&InhibitMonitor::self(), &InhibitMonitor::isManuallyInhibitedChanged, this, &PowerManagementControl::onIsManuallyInhibitedChanged);
connect(&InhibitMonitor::self(), &InhibitMonitor::isManuallyInhibitedChangeError, this, &PowerManagementControl::onisManuallyInhibitedErrorChanged);
@@ -119,21 +162,54 @@ PowerManagementControl::PowerManagementControl(QObject *parent)
qCDebug(APPLETS::BATTERYMONITOR) << "Error connecting to temporarily blocked inhibition changes via dbus";
}
}
-
- if (QDBusConnection::sessionBus().interface()->isServiceRegistered(FDO_POWERMANAGEMENT_SERVICE)) {
- if (!QDBusConnection::sessionBus().connect(FDO_POWERMANAGEMENT_SERVICE,
- QStringLiteral("/org/freedesktop/PowerManagement"),
- QStringLiteral("org.freedesktop.PowerManagement.Inhibit"),
- QStringLiteral("HasInhibitChanged"),
- this,
- SLOT(onHasInhibitionChanged(bool)))) {
- qCDebug(APPLETS::BATTERYMONITOR) << "Error connecting to fdo inhibition changes via dbus";
- }
- }
}
-PowerManagementControl::~PowerManagementControl()
+void PowerManagementControl::onServiceUnregistered(const QString &serviceName)
{
+ if (serviceName == FDO_POWERMANAGEMENT_SERVICE) {
+ QDBusConnection::sessionBus().disconnect(FDO_POWERMANAGEMENT_SERVICE,
+ QStringLiteral("/org/freedesktop/PowerManagement"),
+ QStringLiteral("org.freedesktop.PowerManagement.Inhibit"),
+ QStringLiteral("HasInhibitChanged"),
+ this,
+ SLOT(onHasInhibitionChanged(bool)));
+ } else if (serviceName == SOLID_POWERMANAGEMENT_SERVICE) {
+ disconnect(&InhibitMonitor::self(), &InhibitMonitor::isManuallyInhibitedChanged, this, &PowerManagementControl::onIsManuallyInhibitedChanged);
+ disconnect(&InhibitMonitor::self(), &InhibitMonitor::isManuallyInhibitedChangeError, this, &PowerManagementControl::onisManuallyInhibitedErrorChanged);
+
+ QDBusConnection::sessionBus().disconnect(SOLID_POWERMANAGEMENT_SERVICE,
+ QStringLiteral("/org/kde/Solid/PowerManagement/Actions/HandleButtonEvents"),
+ QStringLiteral("org.kde.Solid.PowerManagement.Actions.HandleButtonEvents"),
+ QStringLiteral("triggersLidActionChanged"),
+ this,
+ SLOT(triggersLidActionChanged(bool)));
+ QDBusConnection::sessionBus().disconnect(SOLID_POWERMANAGEMENT_SERVICE,
+ QStringLiteral("/org/kde/Solid/PowerManagement/PolicyAgent"),
+ QStringLiteral("org.kde.Solid.PowerManagement.PolicyAgent"),
+ QStringLiteral("InhibitionsChanged"),
+ this,
+ SLOT(onInhibitionsChanged(QList<InhibitionInfo>, QStringList)));
+ QDBusConnection::sessionBus().disconnect(SOLID_POWERMANAGEMENT_SERVICE,
+ QStringLiteral("/org/kde/Solid/PowerManagement/PolicyAgent"),
+ QStringLiteral("org.kde.Solid.PowerManagement.PolicyAgent"),
+ QStringLiteral("PermanentlyBlockedInhibitionsChanged"),
+ this,
+ SLOT(onPermanentlyBlockedInhibitionsChanged(QList<InhibitionInfo>, QList<InhibitionInfo>)));
+ QDBusConnection::sessionBus().disconnect(SOLID_POWERMANAGEMENT_SERVICE,
+ QStringLiteral("/org/kde/Solid/PowerManagement/PolicyAgent"),
+ QStringLiteral("org.kde.Solid.PowerManagement.PolicyAgent"),
+ QStringLiteral("TemporarilyBlockedInhibitionsChanged"),
+ this,
+ SLOT(onTemporarilyBlockedInhibitionsChanged(QList<InhibitionInfo>, QList<InhibitionInfo>)));
+
+ m_inhibitions = QList<QVariantMap>();
+ m_blockedInhibitions = QList<QVariantMap>();
+ m_hasInhibition = false;
+ m_isManuallyInhibited = false;
+ m_isManuallyInhibitedError = false;
+ m_isLidPresent = false;
+ m_triggersLidAction = false;
+ }
}
void PowerManagementControl::inhibit(const QString &reason)
diff --git a/applets/batterymonitor/plugin/powermanagementcontrol.h b/applets/batterymonitor/plugin/powermanagementcontrol.h
index 1057a5569..467993660 100644
--- a/applets/batterymonitor/plugin/powermanagementcontrol.h
+++ b/applets/batterymonitor/plugin/powermanagementcontrol.h
@@ -7,6 +7,8 @@
#pragma once
+#include "applicationdata_p.h"
+
#include <QHash>
#include <QIcon>
#include <QObject>
@@ -16,10 +18,12 @@
#include <qqmlregistration.h>
#include <qtmetamacros.h>
-#include "applicationdata_p.h"
+#include <memory>
using InhibitionInfo = QPair<QString, QString>;
+class QDBusServiceWatcher;
+
class PowerManagementControl : public QObject
{
Q_OBJECT
@@ -53,6 +57,8 @@ Q_SIGNALS:
void isManuallyInhibitedErrorChanged(bool status);
private Q_SLOTS:
+ void onServiceRegistered(const QString &serviceName);
+ void onServiceUnregistered(const QString &serviceName);
void onInhibitionsChanged(const QList<InhibitionInfo> &added, const QStringList &removed);
void onPermanentlyBlockedInhibitionsChanged(const QList<InhibitionInfo> &added, const QList<InhibitionInfo> &removed);
void onTemporarilyBlockedInhibitionsChanged(const QList<InhibitionInfo> &added, const QList<InhibitionInfo> &removed);
@@ -79,7 +85,7 @@ private:
Q_OBJECT_BINDABLE_PROPERTY(PowerManagementControl, QList<QVariantMap>, m_inhibitions, &PowerManagementControl::inhibitionsChanged)
Q_OBJECT_BINDABLE_PROPERTY(PowerManagementControl, QList<QVariantMap>, m_blockedInhibitions, &PowerManagementControl::blockedInhibitionsChanged)
- Q_OBJECT_BINDABLE_PROPERTY(PowerManagementControl, bool, m_hasInhibition, &PowerManagementControl::hasInhibitionChanged)
+ Q_OBJECT_BINDABLE_PROPERTY_WITH_ARGS(PowerManagementControl, bool, m_hasInhibition, false, &PowerManagementControl::hasInhibitionChanged)
Q_OBJECT_BINDABLE_PROPERTY_WITH_ARGS(PowerManagementControl, bool, m_isLidPresent, false, &PowerManagementControl::isLidPresentChanged)
Q_OBJECT_BINDABLE_PROPERTY_WITH_ARGS(PowerManagementControl, bool, m_triggersLidAction, false, &PowerManagementControl::triggersLidActionChanged)
Q_OBJECT_BINDABLE_PROPERTY_WITH_ARGS(PowerManagementControl, bool, m_isManuallyInhibited, false, &PowerManagementControl::isManuallyInhibitedChanged)
@@ -89,6 +95,8 @@ private:
false,
&PowerManagementControl::isManuallyInhibitedErrorChanged)
+ std::unique_ptr<QDBusServiceWatcher> m_solidWatcher;
+ std::unique_ptr<QDBusServiceWatcher> m_fdoWatcher;
bool m_isSilent = false;
ApplicationData m_data;
diff --git a/applets/batterymonitor/plugin/powerprofilescontrol.cpp b/applets/batterymonitor/plugin/powerprofilescontrol.cpp
index 2c5670b1b..d059095a3 100644
--- a/applets/batterymonitor/plugin/powerprofilescontrol.cpp
+++ b/applets/batterymonitor/plugin/powerprofilescontrol.cpp
@@ -13,6 +13,7 @@
#include <QDBusMetaType>
#include <QDBusPendingCallWatcher>
#include <QDBusReply>
+#include <QDBusServiceWatcher>
#include <QFile>
#include <QFileInfo>
#include <QIcon>
@@ -25,11 +26,31 @@ static constexpr QLatin1StringView SOLID_POWERMANAGEMENT_SERVICE("org.kde.Solid.
PowerProfilesControl::PowerProfilesControl(QObject *parent)
: QObject(parent)
+ , m_solidWatcher(new QDBusServiceWatcher)
{
qDBusRegisterMetaType<QList<QVariantMap>>();
qDBusRegisterMetaType<QVariantMap>();
+ // Watch for PowerDevil's power management service
+ m_solidWatcher->setConnection(QDBusConnection::sessionBus());
+ m_solidWatcher->setWatchMode(QDBusServiceWatcher::WatchForRegistration | QDBusServiceWatcher::WatchForUnregistration);
+ m_solidWatcher->addWatchedService(SOLID_POWERMANAGEMENT_SERVICE);
+
+ connect(m_solidWatcher.get(), &QDBusServiceWatcher::serviceRegistered, this, &PowerProfilesControl::onServiceRegistered);
+ connect(m_solidWatcher.get(), &QDBusServiceWatcher::serviceUnregistered, this, &PowerProfilesControl::onServiceUnregistered);
+ // If it's up and running already, let's cache it
if (QDBusConnection::sessionBus().interface()->isServiceRegistered(SOLID_POWERMANAGEMENT_SERVICE)) {
+ onServiceRegistered(SOLID_POWERMANAGEMENT_SERVICE);
+ }
+}
+
+PowerProfilesControl::~PowerProfilesControl()
+{
+}
+
+void PowerProfilesControl::onServiceRegistered(const QString &serviceName)
+{
+ if (serviceName == SOLID_POWERMANAGEMENT_SERVICE) {
if (QDBusConnection::systemBus().interface()->isServiceRegistered(QStringLiteral("org.freedesktop.UPower.PowerProfiles"))) {
QDBusMessage profileChoices = QDBusMessage::createMethodCall(QStringLiteral("org.kde.Solid.PowerManagement"),
QStringLiteral("/org/kde/Solid/PowerManagement/Actions/PowerProfile"),
@@ -181,6 +202,7 @@ PowerProfilesControl::PowerProfilesControl(QObject *parent)
SLOT(updatePowerProfileHolds(QList<QVariantMap>)))) {
qCDebug(APPLETS::BATTERYMONITOR) << "error connecting to profile hold changes via dbus";
}
+ m_isTlpInstalled = false;
m_isPowerProfileDaemonInstalled = true;
} else {
m_isTlpInstalled = !QStandardPaths::findExecutable(QStringLiteral("tlp")).isEmpty();
@@ -188,8 +210,62 @@ PowerProfilesControl::PowerProfilesControl(QObject *parent)
}
}
-PowerProfilesControl::~PowerProfilesControl()
+void PowerProfilesControl::onServiceUnregistered(const QString &serviceName)
{
+ if (serviceName == SOLID_POWERMANAGEMENT_SERVICE) {
+ m_isPowerProfileDaemonInstalled = false;
+ // leave m_isTlpInstalled as is, it's not going to change just because PowerDevil disappeared
+
+ QDBusConnection::sessionBus().disconnect(SOLID_POWERMANAGEMENT_SERVICE,
+ QStringLiteral("/org/kde/Solid/PowerManagement/Actions/PowerProfile"),
+ QStringLiteral("org.kde.Solid.PowerManagement.Actions.PowerProfile"),
+ QStringLiteral("configuredProfileChanged"),
+ this,
+ SLOT(updatePowerProfileConfiguredProfile(QString)));
+
+ QDBusConnection::sessionBus().disconnect(SOLID_POWERMANAGEMENT_SERVICE,
+ QStringLiteral("/org/kde/Solid/PowerManagement/Actions/PowerProfile"),
+ QStringLiteral("org.kde.Solid.PowerManagement.Actions.PowerProfile"),
+ QStringLiteral("currentProfileChanged"),
+ this,
+ SLOT(updatePowerProfileCurrentProfile(QString)));
+
+ QDBusConnection::sessionBus().disconnect(SOLID_POWERMANAGEMENT_SERVICE,
+ QStringLiteral("/org/kde/Solid/PowerManagement/Actions/PowerProfile"),
+ QStringLiteral("org.kde.Solid.PowerManagement.Actions.PowerProfile"),
+ QStringLiteral("profileChoicesChanged"),
+ this,
+ SLOT(updatePowerProfileChoices(QStringList)));
+
+ QDBusConnection::sessionBus().disconnect(SOLID_POWERMANAGEMENT_SERVICE,
+ QStringLiteral("/org/kde/Solid/PowerManagement/Actions/PowerProfile"),
+ QStringLiteral("org.kde.Solid.PowerManagement.Actions.PowerProfile"),
+ QStringLiteral("performanceInhibitedReasonChanged"),
+ this,
+ SLOT(updatePowerProfilePerformanceInhibitedReason(QString)));
+
+ QDBusConnection::sessionBus().disconnect(SOLID_POWERMANAGEMENT_SERVICE,
+ QStringLiteral("/org/kde/Solid/PowerManagement/Actions/PowerProfile"),
+ QStringLiteral("org.kde.Solid.PowerManagement.Actions.PowerProfile"),
+ QStringLiteral("performanceDegradedReasonChanged"),
+ this,
+ SLOT(updatePowerProfilePerformanceDegradedReason(QString)));
+
+ QDBusConnection::sessionBus().disconnect(SOLID_POWERMANAGEMENT_SERVICE,
+ QStringLiteral("/org/kde/Solid/PowerManagement/Actions/PowerProfile"),
+ QStringLiteral("org.kde.Solid.PowerManagement.Actions.PowerProfile"),
+ QStringLiteral("profileHoldsChanged"),
+ this,
+ SLOT(updatePowerProfileHolds(QList<QVariantMap>)));
+
+ updatePowerProfileHolds({});
+ updatePowerProfilePerformanceDegradedReason(QString());
+ updatePowerProfilePerformanceInhibitedReason(QString());
+ updatePowerProfileChoices({});
+ updatePowerProfileCurrentProfile(QString());
+ updatePowerProfileConfiguredProfile(QString());
+ m_profileError = QString();
+ }
}
bool PowerProfilesControl::isTlpInstalled() const
diff --git a/applets/batterymonitor/plugin/powerprofilescontrol.h b/applets/batterymonitor/plugin/powerprofilescontrol.h
index f54c9e813..dc2fd58a2 100644
--- a/applets/batterymonitor/plugin/powerprofilescontrol.h
+++ b/applets/batterymonitor/plugin/powerprofilescontrol.h
@@ -6,13 +6,17 @@
#pragma once
+#include "applicationdata_p.h"
+
#include <QDBusPendingCall>
#include <QObject>
#include <QObjectBindableProperty>
#include <QStringList>
#include <qqmlregistration.h>
-#include "applicationdata_p.h"
+#include <memory>
+
+class QDBusServiceWatcher;
class PowerProfilesControl : public QObject
{
@@ -52,6 +56,9 @@ private:
QBindable<QList<QVariantMap>> bindableProfileHolds();
private Q_SLOTS:
+ void onServiceRegistered(const QString &serviceName);
+ void onServiceUnregistered(const QString &serviceName);
+
void updatePowerProfileChoices(const QStringList &choices);
void updatePowerProfileConfiguredProfile(const QString &profile);
void updatePowerProfileCurrentProfile(const QString &profile);
@@ -83,6 +90,8 @@ private:
Q_OBJECT_BINDABLE_PROPERTY(PowerProfilesControl, QString, m_degradationReason, &PowerProfilesControl::degradationReasonChanged)
Q_OBJECT_BINDABLE_PROPERTY(PowerProfilesControl, QList<QVariantMap>, m_profileHolds, &PowerProfilesControl::profileHoldsChanged)
+ std::unique_ptr<QDBusServiceWatcher> m_solidWatcher;
+
bool m_isSilent = false;
bool m_isTlpInstalled = false;
--
GitLab

View File

@ -31,43 +31,43 @@ inputs:
# color management # color management
argyllcms xcalib argyllcms xcalib
# networking # networking
remmina putty mtr-gui remmina # putty mtr-gui
# media # media
mpv nomacs spotify yesplaymusic simplescreenrecorder imagemagick gimp netease-cloud-music-gtk vlc obs-studio mpv nomacs yesplaymusic simplescreenrecorder imagemagick gimp netease-cloud-music-gtk
waifu2x-converter-cpp inkscape blender whalebird paraview waifu2x-converter-cpp inkscape blender paraview vlc whalebird # spotify obs-studio
# themes # themes
catppuccin catppuccin-sddm catppuccin-cursors catppuccinifier-gui catppuccinifier-cli catppuccin-plymouth klassy localPackages.slate localPackages.blurred-wallpaper tela-circle-icon-theme
(catppuccin-kde.override { flavour = [ "latte" ]; }) (catppuccin-kvantum.override { variant = "latte"; }) # catppuccin catppuccin-sddm catppuccin-cursors catppuccinifier-gui catppuccinifier-cli catppuccin-plymouth
klassy # (catppuccin-kde.override { flavour = [ "latte" ]; }) (catppuccin-kvantum.override { variant = "latte"; })
localPackages.slate localPackages.blurred-wallpaper tela-circle-icon-theme
# terminal # terminal
warp-terminal # warp-terminal
# development # development
adb-sync scrcpy weston cage openbox krita jetbrains.clion android-studio dbeaver-bin cling fprettify adb-sync scrcpy dbeaver-bin cling aircrack-ng
aircrack-ng # weston cage openbox krita jetbrains.clion android-studio fprettify
# desktop sharing # desktop sharing
rustdesk-flutter # rustdesk-flutter
# password and key management # password and key management
yubikey-manager yubikey-manager-qt yubikey-personalization yubikey-personalization-gui bitwarden electrum yubikey-manager yubikey-manager-qt yubikey-personalization yubikey-personalization-gui bitwarden hashcat
jabref # electrum jabref john crunch
john crunch hashcat
# download # download
qbittorrent nur-xddxdd.baidupcs-go wgetpaste onedrive onedrivegui rclone qbittorrent # nur-xddxdd.baidupcs-go wgetpaste onedrive onedrivegui rclone
# editor # editor
typora appflowy notion-app-enhanced joplin-desktop standardnotes logseq typora # appflowy notion-app-enhanced joplin-desktop standardnotes logseq
# news # news
fluent-reader rssguard newsflash newsboat # fluent-reader rssguard newsflash newsboat
# nix tools # nix tools
nixpkgs-fmt appimage-run nixd nix-serve node2nix nix-prefetch-github prefetch-npm-deps nix-prefetch-docker nixpkgs-fmt appimage-run nixd nix-serve node2nix nix-prefetch-github prefetch-npm-deps nix-prefetch-docker
nix-template nil pnpm-lock-export bundix nix-template nil pnpm-lock-export bundix
# instant messager # instant messager
element-desktop telegram-desktop discord fluffychat zoom-us signal-desktop slack nur-linyinfeng.wemeet element-desktop telegram-desktop discord zoom-us slack nur-linyinfeng.wemeet nheko
nheko # qq nur-xddxdd.wechat-uos TODO: cinny-desktop # fluffychat signal-desktop qq nur-xddxdd.wechat-uos cinny-desktop
# browser # browser
google-chrome tor-browser microsoft-edge google-chrome tor-browser # microsoft-edge
# office # office
crow-translate zotero pandoc ydict libreoffice-qt texstudio poppler_utils pdftk pdfchain hdfview crow-translate zotero pandoc libreoffice-qt texliveFull poppler_utils pdftk pdfchain davinci-resolve
davinci-resolve texliveFull # TODO: enable in next release
# hdfview
# ydict texstudio
# matplot++ needs old gnuplot # matplot++ needs old gnuplot
inputs.pkgs."pkgs-23.11".gnuplot inputs.pkgs."pkgs-23.11".gnuplot
# math, physics and chemistry # math, physics and chemistry
@ -75,7 +75,7 @@ inputs:
(mathematica.overrideAttrs (prev: { postInstall = (prev.postInstall or "") + "ln -s ${prev.src} $out/src"; })) (mathematica.overrideAttrs (prev: { postInstall = (prev.postInstall or "") + "ln -s ${prev.src} $out/src"; }))
(quantum-espresso.override { stdenv = gcc14Stdenv; gfortran = gfortran14; }) jmol mpi localPackages.ufo (quantum-espresso.override { stdenv = gcc14Stdenv; gfortran = gfortran14; }) jmol mpi localPackages.ufo
# virtualization # virtualization
wineWowPackages.stagingFull virt-viewer bottles genymotion playonlinux virt-viewer bottles # wineWowPackages.stagingFull genymotion playonlinux
# media # media
nur-xddxdd.svp nur-xddxdd.svp
# for kdenlive auto subtitle # for kdenlive auto subtitle

View File

@ -10,15 +10,12 @@ inputs:
nixos.packages.packages._packages = nixos.packages.packages._packages =
let cuda = let inherit (inputs.config.nixos.system.nixpkgs) cuda; in cuda.enable && cuda.capabilities != null; let cuda = let inherit (inputs.config.nixos.system.nixpkgs) cuda; in cuda.enable && cuda.capabilities != null;
in in
if cuda then [((inputs.pkgs.lammps-mpi.override { stdenv = inputs.pkgs.cudaPackages.backendStdenv; }) if cuda then [((inputs.pkgs.lammps.override { stdenv = inputs.pkgs.cudaPackages.backendStdenv; })
.overrideAttrs (prev: .overrideAttrs (prev:
{ {
cmakeFlags = prev.cmakeFlags ++ inputs.lib.optionals cuda cmakeFlags = prev.cmakeFlags ++ [ "-DPKG_GPU=on" "-DGPU_API=cuda" "-DCMAKE_POLICY_DEFAULT_CMP0146=OLD" ];
[ nativeBuildInputs = prev.nativeBuildInputs ++ [ inputs.pkgs.cudaPackages.cudatoolkit ];
"-DPKG_GPU=on" "-DGPU_API=cuda" "-DCMAKE_POLICY_DEFAULT_CMP0146=OLD" buildInputs = prev.buildInputs ++ [ inputs.pkgs.mpi ];
];
nativeBuildInputs = prev.nativeBuildInputs ++ inputs.lib.optionals cuda
[ inputs.pkgs.cudaPackages.cudatoolkit ];
}))] }))]
else [ inputs.pkgs.lammps-mpi ]; else [ inputs.pkgs.lammps-mpi ];
}; };

View File

@ -32,13 +32,13 @@ inputs:
# networking # networking
ipset iptables iproute2 dig nettools traceroute tcping-go whois tcpdump nmap inetutils wireguard-tools ipset iptables iproute2 dig nettools traceroute tcping-go whois tcpdump nmap inetutils wireguard-tools
# nix tools # nix tools
nix-output-monitor nix-tree ssh-to-age (callPackage "${inputs.topInputs.nix-fast-build}" {}) nix-inspect nix-output-monitor nix-tree ssh-to-age nix-inspect # (callPackage "${inputs.topInputs.nix-fast-build}" {})
# development # development
gdb try inputs.topInputs.plasma-manager.packages.${inputs.pkgs.system}.rc2nix rr hexo-cli gh nix-init hugo gdb try inputs.topInputs.plasma-manager.packages.${inputs.pkgs.system}.rc2nix rr hexo-cli gh nix-init hugo
# stupid things # stupid things
toilet lolcat toilet lolcat
# office # office
todo-txt-cli pdfgrep ffmpeg-full pdfgrep ffmpeg-full # todo-txt-cli
] ]
++ (with inputs.config.boot.kernelPackages; [ cpupower usbip ]) ++ (with inputs.config.boot.kernelPackages; [ cpupower usbip ])
++ (inputs.lib.optional (inputs.config.nixos.system.nixpkgs.arch == "x86_64") rar); ++ (inputs.lib.optional (inputs.config.nixos.system.nixpkgs.arch == "x86_64") rar);

View File

@ -33,18 +33,7 @@ inputs:
enable = true; enable = true;
# TCP 139 445 UDP 137 138 # TCP 139 445 UDP 137 138
openFirewall = !samba.private; openFirewall = !samba.private;
securityType = "user"; settings = listToAttrs (map
extraConfig =
''
workgroup = WORKGROUP
server string = Samba Server
server role = standalone server
hosts allow = ${samba.hostsAllowed}
dns proxy = no
'';
# obey pam restrictions = yes
# encrypt passwords = no
shares = listToAttrs (map
(share: (share:
{ {
name = share.name; name = share.name;
@ -60,7 +49,8 @@ inputs:
"force directory mode" = "2755"; "force directory mode" = "2755";
}; };
}) })
(attrsToList samba.shares)); (attrsToList samba.shares))
// { global."hosts allow" = "${samba.hostsAllowed}"; };
}; };
}; };
nixos.services.xray.client.v2ray-forwarder = nixos.services.xray.client.v2ray-forwarder =

View File

@ -56,8 +56,6 @@ inputs:
{ {
enable = true; enable = true;
settingsFile = inputs.config.sops.templates."xray-client.json".path; settingsFile = inputs.config.sops.templates."xray-client.json".path;
package = inputs.pkgs.xray.overrideAttrs
(prev: { patches = prev.patches or [] ++ [ ./disable-splice.patch ];});
}; };
dnsmasq = dnsmasq =
{ {
@ -347,8 +345,6 @@ inputs:
{ {
enable = true; enable = true;
settingsFile = inputs.config.sops.templates."xray-server.json".path; settingsFile = inputs.config.sops.templates."xray-server.json".path;
package = inputs.pkgs.xray.overrideAttrs
(prev: { patches = prev.patches or [] ++ [ ./disable-splice.patch ];});
}; };
sops = sops =
{ {

View File

@ -1,14 +0,0 @@
diff --git a/proxy/proxy.go b/proxy/proxy.go
index db92051..54d36b4 100644
--- a/proxy/proxy.go
+++ b/proxy/proxy.go
@@ -504,7 +504,8 @@ func CopyRawConnIfExist(ctx context.Context, readerConn net.Conn, writerConn net
splice = false
}
}
- if splice {
+ _ = splice
+ if false {
newError("CopyRawConn splice").WriteToLog(session.ExportIDToError(ctx))
statWriter, _ := writer.(*dispatcher.SizeStatWriter)
//runtime.Gosched() // necessary

View File

@ -1,47 +0,0 @@
From 123c4d46272b7e72d7db3fe8b4131a8cc99613fb Mon Sep 17 00:00:00 2001
From: Alex Deucher <alexander.deucher@amd.com>
Date: Wed, 14 Aug 2024 10:28:24 -0400
Subject: [PATCH] drm/amdgpu/sdma5.2: limit wptr workaround to sdma 5.2.1
The workaround seems to cause stability issues on other
SDMA 5.2.x IPs.
Fixes: a03ebf116303 ("drm/amdgpu/sdma5.2: Update wptr registers as well as doorbell")
Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/3556
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
---
drivers/gpu/drm/amd/amdgpu/sdma_v5_2.c | 18 ++++++++++--------
1 file changed, 10 insertions(+), 8 deletions(-)
diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v5_2.c b/drivers/gpu/drm/amd/amdgpu/sdma_v5_2.c
index d740255edf5a..bc9b240a3488 100644
--- a/drivers/gpu/drm/amd/amdgpu/sdma_v5_2.c
+++ b/drivers/gpu/drm/amd/amdgpu/sdma_v5_2.c
@@ -225,14 +225,16 @@ static void sdma_v5_2_ring_set_wptr(struct amdgpu_ring *ring)
DRM_DEBUG("calling WDOORBELL64(0x%08x, 0x%016llx)\n",
ring->doorbell_index, ring->wptr << 2);
WDOORBELL64(ring->doorbell_index, ring->wptr << 2);
- /* SDMA seems to miss doorbells sometimes when powergating kicks in.
- * Updating the wptr directly will wake it. This is only safe because
- * we disallow gfxoff in begin_use() and then allow it again in end_use().
- */
- WREG32(sdma_v5_2_get_reg_offset(adev, ring->me, mmSDMA0_GFX_RB_WPTR),
- lower_32_bits(ring->wptr << 2));
- WREG32(sdma_v5_2_get_reg_offset(adev, ring->me, mmSDMA0_GFX_RB_WPTR_HI),
- upper_32_bits(ring->wptr << 2));
+ if (amdgpu_ip_version(adev, SDMA0_HWIP, 0) == IP_VERSION(5, 2, 1)) {
+ /* SDMA seems to miss doorbells sometimes when powergating kicks in.
+ * Updating the wptr directly will wake it. This is only safe because
+ * we disallow gfxoff in begin_use() and then allow it again in end_use().
+ */
+ WREG32(sdma_v5_2_get_reg_offset(adev, ring->me, mmSDMA0_GFX_RB_WPTR),
+ lower_32_bits(ring->wptr << 2));
+ WREG32(sdma_v5_2_get_reg_offset(adev, ring->me, mmSDMA0_GFX_RB_WPTR_HI),
+ upper_32_bits(ring->wptr << 2));
+ }
} else {
DRM_DEBUG("Not using doorbell -- "
"mmSDMA%i_GFX_RB_WPTR == 0x%08x "
--
2.46.0

View File

@ -1,141 +0,0 @@
From ae1e766f623f7a2a889a0b09eb076dd9a60efbe9 Mon Sep 17 00:00:00 2001
From: Filipe Manana <fdmanana@suse.com>
Date: Sun, 11 Aug 2024 11:53:42 +0100
Subject: btrfs: only run the extent map shrinker from kswapd tasks
Currently the extent map shrinker can be run by any task when attempting
to allocate memory and there's enough memory pressure to trigger it.
To avoid too much latency we stop iterating over extent maps and removing
them once the task needs to reschedule. This logic was introduced in commit
b3ebb9b7e92a ("btrfs: stop extent map shrinker if reschedule is needed").
While that solved high latency problems for some use cases, it's still
not enough because with a too high number of tasks entering the extent map
shrinker code, either due to memory allocations or because they are a
kswapd task, we end up having a very high level of contention on some
spin locks, namely:
1) The fs_info->fs_roots_radix_lock spin lock, which we need to find
roots to iterate over their inodes;
2) The spin lock of the xarray used to track open inodes for a root
(struct btrfs_root::inodes) - on 6.10 kernels and below, it used to
be a red black tree and the spin lock was root->inode_lock;
3) The fs_info->delayed_iput_lock spin lock since the shrinker adds
delayed iputs (calls btrfs_add_delayed_iput()).
Instead of allowing the extent map shrinker to be run by any task, make
it run only by kswapd tasks. This still solves the problem of running
into OOM situations due to an unbounded extent map creation, which is
simple to trigger by direct IO writes, as described in the changelog
of commit 956a17d9d050 ("btrfs: add a shrinker for extent maps"), and
by a similar case when doing buffered IO on files with a very large
number of holes (keeping the file open and creating many holes, whose
extent maps are only released when the file is closed).
Reported-by: kzd <kzd@56709.net>
Link: https://bugzilla.kernel.org/show_bug.cgi?id=219121
Reported-by: Octavia Togami <octavia.togami@gmail.com>
Link: https://lore.kernel.org/linux-btrfs/CAHPNGSSt-a4ZZWrtJdVyYnJFscFjP9S7rMcvEMaNSpR556DdLA@mail.gmail.com/
Fixes: 956a17d9d050 ("btrfs: add a shrinker for extent maps")
CC: stable@vger.kernel.org # 6.10+
Tested-by: kzd <kzd@56709.net>
Tested-by: Octavia Togami <octavia.togami@gmail.com>
Signed-off-by: Filipe Manana <fdmanana@suse.com>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
---
fs/btrfs/extent_map.c | 22 ++++++----------------
fs/btrfs/super.c | 10 ++++++++++
2 files changed, 16 insertions(+), 16 deletions(-)
diff --git a/fs/btrfs/extent_map.c b/fs/btrfs/extent_map.c
index 23b65dc73c0048..10ac5f657e3889 100644
--- a/fs/btrfs/extent_map.c
+++ b/fs/btrfs/extent_map.c
@@ -1147,8 +1147,7 @@ static long btrfs_scan_inode(struct btrfs_inode *inode, struct btrfs_em_shrink_c
return 0;
/*
- * We want to be fast because we can be called from any path trying to
- * allocate memory, so if the lock is busy we don't want to spend time
+ * We want to be fast so if the lock is busy we don't want to spend time
* waiting for it - either some task is about to do IO for the inode or
* we may have another task shrinking extent maps, here in this code, so
* skip this inode.
@@ -1191,9 +1190,7 @@ next:
/*
* Stop if we need to reschedule or there's contention on the
* lock. This is to avoid slowing other tasks trying to take the
- * lock and because the shrinker might be called during a memory
- * allocation path and we want to avoid taking a very long time
- * and slowing down all sorts of tasks.
+ * lock.
*/
if (need_resched() || rwlock_needbreak(&tree->lock))
break;
@@ -1222,12 +1219,7 @@ static long btrfs_scan_root(struct btrfs_root *root, struct btrfs_em_shrink_ctx
if (ctx->scanned >= ctx->nr_to_scan)
break;
- /*
- * We may be called from memory allocation paths, so we don't
- * want to take too much time and slowdown tasks.
- */
- if (need_resched())
- break;
+ cond_resched();
inode = btrfs_find_first_inode(root, min_ino);
}
@@ -1285,14 +1277,12 @@ long btrfs_free_extent_maps(struct btrfs_fs_info *fs_info, long nr_to_scan)
ctx.last_ino);
}
- /*
- * We may be called from memory allocation paths, so we don't want to
- * take too much time and slowdown tasks, so stop if we need reschedule.
- */
- while (ctx.scanned < ctx.nr_to_scan && !need_resched()) {
+ while (ctx.scanned < ctx.nr_to_scan) {
struct btrfs_root *root;
unsigned long count;
+ cond_resched();
+
spin_lock(&fs_info->fs_roots_radix_lock);
count = radix_tree_gang_lookup(&fs_info->fs_roots_radix,
(void **)&root,
diff --git a/fs/btrfs/super.c b/fs/btrfs/super.c
index 83478deada3bd2..11044e9e2cb110 100644
--- a/fs/btrfs/super.c
+++ b/fs/btrfs/super.c
@@ -28,6 +28,7 @@
#include <linux/btrfs.h>
#include <linux/security.h>
#include <linux/fs_parser.h>
+#include <linux/swap.h>
#include "messages.h"
#include "delayed-inode.h"
#include "ctree.h"
@@ -2409,6 +2410,15 @@ static long btrfs_free_cached_objects(struct super_block *sb, struct shrink_cont
const long nr_to_scan = min_t(unsigned long, LONG_MAX, sc->nr_to_scan);
struct btrfs_fs_info *fs_info = btrfs_sb(sb);
+ /*
+ * We may be called from any task trying to allocate memory and we don't
+ * want to slow it down with scanning and dropping extent maps. It would
+ * also cause heavy lock contention if many tasks concurrently enter
+ * here. Therefore only allow kswapd tasks to scan and drop extent maps.
+ */
+ if (!current_is_kswapd())
+ return 0;
+
return btrfs_free_extent_maps(fs_info, nr_to_scan);
}
--
cgit 1.2.3-korg

View File

@ -134,21 +134,8 @@ inputs:
let version = inputs.lib.versions.majorMinor inputs.config.boot.kernelPackages.kernel.version; let version = inputs.lib.versions.majorMinor inputs.config.boot.kernelPackages.kernel.version;
in ./hibernate-progress-${version}.patch; in ./hibernate-progress-${version}.patch;
}]; }];
# TODO: remove in 6.11
btrfs =
[{
name = "btrfs";
patch =
let version = inputs.lib.versions.majorMinor inputs.config.boot.kernelPackages.kernel.version;
in if version == "6.10" then ./btrfs.patch else null;
}];
amdgpu =
[{
name = "amdgpu";
patch = ./0001-drm-amdgpu-sdma5.2-limit-wptr-workaround-to-sdma-5.2.patch;
}];
}; };
in builtins.concatLists (builtins.map (name: patches.${name}) (kernel.patches ++ [ "btrfs" ])); in builtins.concatLists (builtins.map (name: patches.${name}) kernel.patches);
}; };
} }
( (

View File

@ -0,0 +1,128 @@
diff --git a/kernel/power/swap.c b/kernel/power/swap.c
index 5bc04bfe2db1..6e7b17b97de7 100644
--- a/kernel/power/swap.c
+++ b/kernel/power/swap.c
@@ -563,7 +563,7 @@ static int save_image(struct swap_map_handle *handle,
hib_init_batch(&hb);
- pr_info("Saving image data pages (%u pages)...\n",
+ pr_err("Saving image data pages (%u pages)...\n",
nr_to_write);
m = nr_to_write / 10;
if (!m)
@@ -578,7 +578,7 @@ static int save_image(struct swap_map_handle *handle,
if (ret)
break;
if (!(nr_pages % m))
- pr_info("Image saving progress: %3d%%\n",
+ pr_err("Image saving progress: %3d%%\n",
nr_pages / m * 10);
nr_pages++;
}
@@ -588,7 +588,7 @@ static int save_image(struct swap_map_handle *handle,
if (!ret)
ret = err2;
if (!ret)
- pr_info("Image saving done\n");
+ pr_err("Image saving done\n");
swsusp_show_speed(start, stop, nr_to_write, "Wrote");
return ret;
}
@@ -795,8 +795,8 @@ static int save_compressed_image(struct swap_map_handle *handle,
*/
handle->reqd_free_pages = reqd_free_pages();
- pr_info("Using %u thread(s) for %s compression\n", nr_threads, hib_comp_algo);
- pr_info("Compressing and saving image data (%u pages)...\n",
+ pr_err("Using %u thread(s) for %s compression\n", nr_threads, hib_comp_algo);
+ pr_err("Compressing and saving image data (%u pages)...\n",
nr_to_write);
m = nr_to_write / 10;
if (!m)
@@ -817,7 +817,7 @@ static int save_compressed_image(struct swap_map_handle *handle,
data_of(*snapshot), PAGE_SIZE);
if (!(nr_pages % m))
- pr_info("Image saving progress: %3d%%\n",
+ pr_err("Image saving progress: %3d%%\n",
nr_pages / m * 10);
nr_pages++;
}
@@ -888,9 +888,9 @@ static int save_compressed_image(struct swap_map_handle *handle,
if (!ret)
ret = err2;
if (!ret)
- pr_info("Image saving done\n");
+ pr_err("Image saving done\n");
swsusp_show_speed(start, stop, nr_to_write, "Wrote");
- pr_info("Image size after compression: %d kbytes\n",
+ pr_err("Image size after compression: %d kbytes\n",
(atomic_read(&compressed_size) / 1024));
out_clean:
@@ -1105,7 +1105,7 @@ static int load_image(struct swap_map_handle *handle,
hib_init_batch(&hb);
clean_pages_on_read = true;
- pr_info("Loading image data pages (%u pages)...\n", nr_to_read);
+ pr_err("Loading image data pages (%u pages)...\n", nr_to_read);
m = nr_to_read / 10;
if (!m)
m = 1;
@@ -1123,7 +1123,7 @@ static int load_image(struct swap_map_handle *handle,
if (ret)
break;
if (!(nr_pages % m))
- pr_info("Image loading progress: %3d%%\n",
+ pr_err("Image loading progress: %3d%%\n",
nr_pages / m * 10);
nr_pages++;
}
@@ -1133,7 +1133,7 @@ static int load_image(struct swap_map_handle *handle,
if (!ret)
ret = err2;
if (!ret) {
- pr_info("Image loading done\n");
+ pr_err("Image loading done\n");
ret = snapshot_write_finalize(snapshot);
if (!ret && !snapshot_image_loaded(snapshot))
ret = -ENODATA;
@@ -1328,8 +1328,8 @@ static int load_compressed_image(struct swap_map_handle *handle,
}
want = ring_size = i;
- pr_info("Using %u thread(s) for %s decompression\n", nr_threads, hib_comp_algo);
- pr_info("Loading and decompressing image data (%u pages)...\n",
+ pr_err("Using %u thread(s) for %s decompression\n", nr_threads, hib_comp_algo);
+ pr_err("Loading and decompressing image data (%u pages)...\n",
nr_to_read);
m = nr_to_read / 10;
if (!m)
@@ -1459,7 +1459,7 @@ static int load_compressed_image(struct swap_map_handle *handle,
data[thr].unc + off, PAGE_SIZE);
if (!(nr_pages % m))
- pr_info("Image loading progress: %3d%%\n",
+ pr_err("Image loading progress: %3d%%\n",
nr_pages / m * 10);
nr_pages++;
@@ -1485,7 +1485,7 @@ static int load_compressed_image(struct swap_map_handle *handle,
}
stop = ktime_get();
if (!ret) {
- pr_info("Image loading done\n");
+ pr_err("Image loading done\n");
ret = snapshot_write_finalize(snapshot);
if (!ret && !snapshot_image_loaded(snapshot))
ret = -ENODATA;
@@ -1593,7 +1593,7 @@ int swsusp_check(bool exclusive)
}
if (!error && swsusp_header->flags & SF_HW_SIG &&
swsusp_header->hw_sig != swsusp_hardware_signature) {
- pr_info("Suspend image hardware signature mismatch (%08x now %08x); aborting resume.\n",
+ pr_err("Suspend image hardware signature mismatch (%08x now %08x); aborting resume.\n",
swsusp_header->hw_sig, swsusp_hardware_signature);
error = -EINVAL;
}

View File

@ -11,7 +11,6 @@ inputs: rec
nodesoup = inputs.pkgs.callPackage ./nodesoup.nix { src = inputs.topInputs.nodesoup; }; nodesoup = inputs.pkgs.callPackage ./nodesoup.nix { src = inputs.topInputs.nodesoup; };
matplotplusplus = inputs.pkgs.callPackage ./matplotplusplus.nix matplotplusplus = inputs.pkgs.callPackage ./matplotplusplus.nix
{ {
inherit glad nodesoup;
src = inputs.topInputs.matplotplusplus; src = inputs.topInputs.matplotplusplus;
stdenv = inputs.pkgs.clang18Stdenv; stdenv = inputs.pkgs.clang18Stdenv;
}; };
@ -99,7 +98,8 @@ inputs: rec
chn-bsub = inputs.pkgs.callPackage ./chn-bsub { inherit biu; }; chn-bsub = inputs.pkgs.callPackage ./chn-bsub { inherit biu; };
winjob = inputs.pkgs.callPackage ./winjob { stdenv = inputs.pkgs.gcc14Stdenv; }; winjob = inputs.pkgs.callPackage ./winjob { stdenv = inputs.pkgs.gcc14Stdenv; };
sockpp = inputs.pkgs.callPackage ./sockpp.nix { src = inputs.topInputs.sockpp; }; sockpp = inputs.pkgs.callPackage ./sockpp.nix { src = inputs.topInputs.sockpp; };
git-lfs-transfer = inputs.pkgs.callPackage ./git-lfs-transfer.nix { src = inputs.topInputs.git-lfs-transfer; }; git-lfs-transfer = inputs.pkgs.callPackage ./git-lfs-transfer.nix
{ src = inputs.topInputs.git-lfs-transfer; hash = inputs.topInputs.self.src.git-lfs-transfer; };
py4vasp = inputs.pkgs.callPackage ./py4vasp.nix { src = inputs.topInputs.py4vasp; }; py4vasp = inputs.pkgs.callPackage ./py4vasp.nix { src = inputs.topInputs.py4vasp; };
pocketfft = inputs.pkgs.callPackage ./pocketfft.nix { src = inputs.topInputs.pocketfft; }; pocketfft = inputs.pkgs.callPackage ./pocketfft.nix { src = inputs.topInputs.pocketfft; };
spectroscopy = inputs.pkgs.callPackage ./spectroscopy.nix { src = inputs.topInputs.spectroscopy; }; spectroscopy = inputs.pkgs.callPackage ./spectroscopy.nix { src = inputs.topInputs.spectroscopy; };

View File

@ -1,6 +1,6 @@
{ buildGoModule, src }: buildGoModule { buildGoModule, src, hash }: buildGoModule
{ {
name = "git-lfs-transfer"; name = "git-lfs-transfer";
inherit src; inherit src;
vendorHash = "sha256-DYupPz6VnFeFWG4helRv5ahbTDQk+6w6alxwNGU9B9Q="; vendorHash = hash;
} }

View File

@ -1,18 +1,9 @@
{ {
stdenv, src, cmake, pkg-config, substituteAll, stdenv, src, cmake, pkg-config, substituteAll
gnuplot, libjpeg, libtiff, zlib, libpng, lapack, blas, fftw, opencv, nodesoup, cimg, glfw, libGL, python3, glad
}: stdenv.mkDerivation }: stdenv.mkDerivation
{ {
name = "matplotplusplus"; name = "matplotplusplus";
inherit src; inherit src;
cmakeFlags = cmakeFlags = [ "-DBUILD_SHARED_LIBS=ON" "-DMATPLOTPP_BUILD_EXAMPLES=OFF" ];
[ nativeBuildInputs = [ cmake pkg-config ];
"-DBUILD_SHARED_LIBS=ON" "-DMATPLOTPP_BUILD_SHARED_LIBS=ON" "-DMATPLOTPP_BUILD_EXAMPLES=OFF"
"-DMATPLOTPP_WITH_SYSTEM_NODESOUP=ON" "-DMATPLOTPP_WITH_SYSTEM_CIMG=ON"
"-DMATPLOTPP_BUILD_EXPERIMENTAL_OPENGL_BACKEND=ON" "-DGLAD_REPRODUCIBLE=ON"
];
buildInputs = [ gnuplot libjpeg libtiff zlib libpng lapack blas fftw opencv nodesoup cimg glfw libGL glad ];
nativeBuildInputs = [ cmake pkg-config python3 ];
propagatedBuildInputs = [ libGL glad glfw ];
propagatedNativeBuildInputs = [ python3 ];
} }