mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 02:30:34 +02:00 
			
		
		
		
	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:
 | 
						case CLOCK_EVT_NOTIFY_BROADCAST_FORCE:
 | 
				
			||||||
		if (!cpu_isset(cpu, tick_broadcast_mask)) {
 | 
							if (!cpu_isset(cpu, tick_broadcast_mask)) {
 | 
				
			||||||
			cpu_set(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);
 | 
									clockevents_shutdown(dev);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		if (*reason == CLOCK_EVT_NOTIFY_BROADCAST_FORCE)
 | 
							if (*reason == CLOCK_EVT_NOTIFY_BROADCAST_FORCE)
 | 
				
			||||||
| 
						 | 
					@ -245,7 +246,8 @@ static void tick_do_broadcast_on_off(void *why)
 | 
				
			||||||
		if (!tick_broadcast_force &&
 | 
							if (!tick_broadcast_force &&
 | 
				
			||||||
		    cpu_isset(cpu, tick_broadcast_mask)) {
 | 
							    cpu_isset(cpu, tick_broadcast_mask)) {
 | 
				
			||||||
			cpu_clear(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);
 | 
									tick_setup_periodic(dev, 0);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		break;
 | 
							break;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue