RK3588 Android12禁止内核进入休眠

在linux5.10内核代码:drivers/base/power/wakeup.c中定义如下函数:

/**

* pm_stay_awake - Notify the PM core that a wakeup event is being processed.

* @dev: Device the wakeup event is related to.

*

* Notify the PM core of a wakeup event (signaled by @dev) by calling

* __pm_stay_awake for the @dev's wakeup source object.

*

* Call this function after detecting of a wakeup event if pm_relax() is going

* to be called directly after processing the event (and possibly passing it to

* user space for further processing).

*/

void pm_stay_awake(struct device *dev)

{

unsigned long flags;

if (!dev)

return;

spin_lock_irqsave(&dev->power.lock, flags);

__pm_stay_awake(dev->power.wakeup);

spin_unlock_irqrestore(&dev->power.lock, flags);

}

EXPORT_SYMBOL_GPL(pm_stay_awake);

/**

* pm_relax - Notify the PM core that processing of a wakeup event has ended.

* @dev: Device that signaled the event.

*

* Execute __pm_relax() for the @dev's wakeup source object.

*/

void pm_relax(struct device *dev)

{

unsigned long flags;

if (!dev)

return;

spin_lock_irqsave(&dev->power.lock, flags);

__pm_relax(dev->power.wakeup);

spin_unlock_irqrestore(&dev->power.lock, flags);

}

EXPORT_SYMBOL_GPL(pm_relax);

在其他内核驱动代码中可直接使用这两个函数加锁和解锁以实现禁止和放开内核休眠的功能。

比如某个驱动代码文件中,定义私有结构体:

struct demo{

struct device *dev;

};

struct demo *demo;

加锁禁用休眠:

pm_stay_awake(demo->dev);

解锁放开休眠:

pm_relax(demo->dev);

相关推荐
Junson1420991 年前
使用休眠的方式来解决电脑合盖后偶尔不能正常睡眠的问题
休眠·睡眠
阑梦清川1 年前
简明linux系统编程--互斥锁--TCP--UDP初识
linux·udp·tcp·互斥锁·信号·解锁·加锁
Junson1420991 年前
解决戴尔台式电脑休眠后无法唤醒问题
休眠·戴尔台式机·无法唤醒
放羊的牧码2 年前
MacOS - How to keep your MacBook awake, even when the lid is closed.
macos·禁止·关闭·caffeinated·休眠·睡眠·
zyh200504302 年前
Java EE之线程安全问题
java·开发语言·线程安全·synchronized关键字·死锁·加锁
howard20052 年前
国产替代MATLAB的征途
matlab·禁用·替代·差距·希望
川峰2 年前
《Kotlin核心编程》笔记:反射、注解和加锁
kotlin·注解·反射·元注解·加锁
globalcoding2 年前
springboot 去掉netflix 禁用Eureka
eureka·springboot·报错·netflix·禁用