Messages in this thread | | | Subject | Re: [PATCH 2/2] x86/idle: use dynamic halt poll | From | Yang Zhang <> | Date | Fri, 23 Jun 2017 12:04:40 +0800 |
| |
On 2017/6/22 22:32, Thomas Gleixner wrote: > On Thu, 22 Jun 2017, root wrote: >> @@ -962,6 +962,7 @@ __visible void __irq_entry smp_apic_timer_interrupt(struct pt_regs *regs) >> * interrupt lock, which is the WrongThing (tm) to do. >> */ >> entering_ack_irq(); >> + check_poll(); > > No way, that we sprinkle this function into every interrupt hotpath. There > are enough genuine ways to do that w/o touching a gazillion of files.
I will find a more correct place to call this function.
> >> #ifdef CONFIG_HYPERVISOR_GUEST >> +static unsigned int grow_poll_ns(unsigned int old, unsigned int grow, >> + unsigned int max) >> +{ >> + unsigned int val; >> + >> + /* 10us as base poll duration */ >> + if (old == 0 && grow) >> + return 10000; >> + >> + val = old * grow; >> + if (val > max) >> + val = max; >> + >> + return val; >> +} >> + >> +static unsigned int shrink_poll_ns(unsigned int old, unsigned int shrink) >> +{ >> + if (shrink == 0) >> + return 0; >> + >> + return old / shrink; >> +} >> + >> +void check_poll(void) >> +{ >> + unsigned int val, poll_duration; >> + unsigned long begin_ns, now_ns; >> + >> + if (!poll_threshold_ns) >> + return; > > If at all then this needs to be a static key based decision.
Sure, will do it.
> >> + >> + begin_ns = this_cpu_read(poll_begin_ns); >> + /* Not from halt state */ >> + if (!begin_ns) >> + return; > > If you integrate this stuff into the proper place, then the whole mess goes > away. We really do not need another facility to track idle state. We have > enough already, really.
Agree, I will check current code to find a more proper way to do the check.
> > Thanks, > > tglx >
-- Yang Alibaba Cloud Computing
| |