clockevents: check broadcast tick device not the clock events device
Impact: jiffies increment too fast. Hugh Dickins noted that with NOHZ=n and HIGHRES=n jiffies get incremented too fast. The reason is a wrong check in the broadcast enter/exit code, which keeps the local apic timer in periodic mode when the switch happens. Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
This commit is contained in:
		
					parent
					
						
							
								2165f631f0
							
						
					
				
			
			
				commit
				
					
						07454bfff1
					
				
			
		
					 1 changed files with 4 additions and 2 deletions
				
			
		|  | @ -235,7 +235,8 @@ static void tick_do_broadcast_on_off(void *why) | |||
| 	case CLOCK_EVT_NOTIFY_BROADCAST_FORCE: | ||||
| 		if (!cpu_isset(cpu, tick_broadcast_mask)) { | ||||
| 			cpu_set(cpu, tick_broadcast_mask); | ||||
| 			if (bc->mode == TICKDEV_MODE_PERIODIC) | ||||
| 			if (tick_broadcast_device.mode == | ||||
| 			    TICKDEV_MODE_PERIODIC) | ||||
| 				clockevents_shutdown(dev); | ||||
| 		} | ||||
| 		if (*reason == CLOCK_EVT_NOTIFY_BROADCAST_FORCE) | ||||
|  | @ -245,7 +246,8 @@ static void tick_do_broadcast_on_off(void *why) | |||
| 		if (!tick_broadcast_force && | ||||
| 		    cpu_isset(cpu, tick_broadcast_mask)) { | ||||
| 			cpu_clear(cpu, tick_broadcast_mask); | ||||
| 			if (bc->mode == TICKDEV_MODE_PERIODIC) | ||||
| 			if (tick_broadcast_device.mode == | ||||
| 			    TICKDEV_MODE_PERIODIC) | ||||
| 				tick_setup_periodic(dev, 0); | ||||
| 		} | ||||
| 		break; | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Thomas Gleixner
				Thomas Gleixner