@@ -172,7 +172,6 @@ void clockevents_shutdown(struct clock_event_device *dev)
172172{
173173 clockevents_switch_state (dev , CLOCK_EVT_STATE_SHUTDOWN );
174174 dev -> next_event = KTIME_MAX ;
175- dev -> next_event_forced = 0 ;
176175}
177176
178177/**
@@ -306,6 +305,7 @@ int clockevents_program_event(struct clock_event_device *dev, ktime_t expires,
306305{
307306 unsigned long long clc ;
308307 int64_t delta ;
308+ int rc ;
309309
310310 if (WARN_ON_ONCE (expires < 0 ))
311311 return - ETIME ;
@@ -324,27 +324,16 @@ int clockevents_program_event(struct clock_event_device *dev, ktime_t expires,
324324 return dev -> set_next_ktime (expires , dev );
325325
326326 delta = ktime_to_ns (ktime_sub (expires , ktime_get ()));
327+ if (delta <= 0 )
328+ return force ? clockevents_program_min_delta (dev ) : - ETIME ;
327329
328- /* Required for tick_periodic() during early boot */
329- if (delta <= 0 && !force )
330- return - ETIME ;
331-
332- if (delta > (int64_t )dev -> min_delta_ns ) {
333- delta = min (delta , (int64_t ) dev -> max_delta_ns );
334- clc = ((unsigned long long ) delta * dev -> mult ) >> dev -> shift ;
335- if (!dev -> set_next_event ((unsigned long ) clc , dev ))
336- return 0 ;
337- }
330+ delta = min (delta , (int64_t ) dev -> max_delta_ns );
331+ delta = max (delta , (int64_t ) dev -> min_delta_ns );
338332
339- if ( dev -> next_event_forced )
340- return 0 ;
333+ clc = (( unsigned long long ) delta * dev -> mult ) >> dev -> shift ;
334+ rc = dev -> set_next_event (( unsigned long ) clc , dev ) ;
341335
342- if (dev -> set_next_event (dev -> min_delta_ticks , dev )) {
343- if (!force || clockevents_program_min_delta (dev ))
344- return - ETIME ;
345- }
346- dev -> next_event_forced = 1 ;
347- return 0 ;
336+ return (rc && force ) ? clockevents_program_min_delta (dev ) : rc ;
348337}
349338
350339/*
0 commit comments