On Thu, 2012-09-06 at 16:06 +0200, Vitaly Wool wrote: > 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@xxxxxxxxx> > Signed-off-by: Mykyta Iziumtsev <nikita.izyumtsev@xxxxxxxxx> Looks fine to me, should I just pick it up? johannes > --- > 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 -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html