All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH/RFC] rfkill: prevent unnecessary event generation
@ 2012-09-06 14:06 Vitaly Wool
  2012-09-06 15:03 ` Johannes Berg
  2012-09-06 22:44 ` Henrique de Moraes Holschuh
  0 siblings, 2 replies; 10+ messages in thread
From: Vitaly Wool @ 2012-09-06 14:06 UTC (permalink / raw)
  To: linux-wireless, vitalywool

Prevent unnecessary rfkill event generation when the state has
not actually changed. These events have to be delivered to
relevant userspace processes, causing these processes to wake
up and do something while they could as well have slept. This
obviously results in more CPU usage, longer time-to-sleep-again
and therefore higher power consumption.

Signed-off-by: Vitaly Wool <vitalywool@gmail.com>
Signed-off-by: Mykyta Iziumtsev <nikita.izyumtsev@gmail.com>

---
  net/rfkill/core.c |    8 +++++++-
  1 files changed, 7 insertions(+), 1 deletions(-)

diff --git a/net/rfkill/core.c b/net/rfkill/core.c
index 752b723..520617c 100644
--- a/net/rfkill/core.c
+++ b/net/rfkill/core.c
@@ -256,6 +256,7 @@ static bool __rfkill_set_hw_state(struct rfkill *rfkill,
  static void rfkill_set_block(struct rfkill *rfkill, bool blocked)
  {
  	unsigned long flags;
+	bool prev, curr;
  	int err;
  
  	if (unlikely(rfkill->dev.power.power_state.event & PM_EVENT_SLEEP))
@@ -270,6 +271,8 @@ static void rfkill_set_block(struct rfkill *rfkill, bool blocked)
  		rfkill->ops->query(rfkill, rfkill->data);
  
  	spin_lock_irqsave(&rfkill->lock, flags);
+	prev = rfkill->state & RFKILL_BLOCK_SW;
+
  	if (rfkill->state & RFKILL_BLOCK_SW)
  		rfkill->state |= RFKILL_BLOCK_SW_PREV;
  	else
@@ -299,10 +302,13 @@ static void rfkill_set_block(struct rfkill *rfkill, bool blocked)
  	}
  	rfkill->state &= ~RFKILL_BLOCK_SW_SETCALL;
  	rfkill->state &= ~RFKILL_BLOCK_SW_PREV;
+	curr = rfkill->state & RFKILL_BLOCK_SW;
  	spin_unlock_irqrestore(&rfkill->lock, flags);
  
  	rfkill_led_trigger_event(rfkill);
-	rfkill_event(rfkill);
+
+	if (prev != curr)
+		rfkill_event(rfkill);
  }
  
  #ifdef CONFIG_RFKILL_INPUT
-- 
1.7.5.4


^ permalink raw reply related	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2012-09-24  8:38 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-09-06 14:06 [PATCH/RFC] rfkill: prevent unnecessary event generation Vitaly Wool
2012-09-06 15:03 ` Johannes Berg
2012-09-06 20:34   ` Vitaly Wool
2012-09-06 22:44 ` Henrique de Moraes Holschuh
2012-09-07  6:54   ` Vitaly Wool
2012-09-07  8:21     ` Johannes Berg
2012-09-07 13:02       ` Vitaly Wool
2012-09-07 13:04         ` Johannes Berg
2012-09-22 19:37           ` Vitaly Wool
2012-09-24  8:38             ` Johannes Berg

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.