Merge tag 'v7.0' into android-mainline
Linux 7.0 Change-Id: I2a19c2195dd3a6a29f5f13a053b275baf951ad38 Signed-off-by: Carlos Llamas <cmllamas@google.com>
This commit is contained in:
commit
76ffe0c182
10 files changed
+50
-16
No files matched your search
@@ -2,7 +2,7 @@
|
||||
VERSION = 7
|
||||
PATCHLEVEL = 0
|
||||
SUBLEVEL = 0
|
||||
EXTRAVERSION = -rc7
|
||||
EXTRAVERSION =
|
||||
NAME = Baby Opossum Posse
|
||||
|
||||
# *DOCUMENTATION*
|
||||
|
||||
@@ -369,13 +369,13 @@ struct mem_ctl_info *edac_mc_alloc(unsigned int mc_num,
|
||||
if (!mci->layers)
|
||||
goto error;
|
||||
|
||||
mci->dev.release = mci_release;
|
||||
device_initialize(&mci->dev);
|
||||
|
||||
mci->pvt_info = kzalloc(sz_pvt, GFP_KERNEL);
|
||||
if (!mci->pvt_info)
|
||||
goto error;
|
||||
|
||||
mci->dev.release = mci_release;
|
||||
device_initialize(&mci->dev);
|
||||
|
||||
/* setup index and various internal pointers */
|
||||
mci->mc_idx = mc_num;
|
||||
mci->tot_dimms = tot_dimms;
|
||||
|
||||
@@ -80,6 +80,7 @@ enum clock_event_state {
|
||||
* @shift: nanoseconds to cycles divisor (power of two)
|
||||
* @state_use_accessors:current state of the device, assigned by the core code
|
||||
* @features: features
|
||||
* @next_event_forced: True if the last programming was a forced event
|
||||
* @retries: number of forced programming retries
|
||||
* @set_state_periodic: switch state to periodic
|
||||
* @set_state_oneshot: switch state to oneshot
|
||||
@@ -108,6 +109,7 @@ struct clock_event_device {
|
||||
u32 shift;
|
||||
enum clock_event_state state_use_accessors;
|
||||
unsigned int features;
|
||||
unsigned int next_event_forced;
|
||||
unsigned long retries;
|
||||
|
||||
int (*set_state_periodic)(struct clock_event_device *);
|
||||
|
||||
@@ -1027,7 +1027,7 @@ static void update_dl_entity(struct sched_dl_entity *dl_se)
|
||||
if (dl_time_before(dl_se->deadline, rq_clock(rq)) ||
|
||||
dl_entity_overflow(dl_se, rq_clock(rq))) {
|
||||
|
||||
if (unlikely(!dl_is_implicit(dl_se) &&
|
||||
if (unlikely((!dl_is_implicit(dl_se) || dl_se->dl_defer) &&
|
||||
!dl_time_before(dl_se->deadline, rq_clock(rq)) &&
|
||||
!is_dl_boosted(dl_se))) {
|
||||
update_dl_revised_wakeup(dl_se, rq);
|
||||
|
||||
@@ -172,6 +172,7 @@ void clockevents_shutdown(struct clock_event_device *dev)
|
||||
{
|
||||
clockevents_switch_state(dev, CLOCK_EVT_STATE_SHUTDOWN);
|
||||
dev->next_event = KTIME_MAX;
|
||||
dev->next_event_forced = 0;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -305,7 +306,6 @@ int clockevents_program_event(struct clock_event_device *dev, ktime_t expires,
|
||||
{
|
||||
unsigned long long clc;
|
||||
int64_t delta;
|
||||
int rc;
|
||||
|
||||
if (WARN_ON_ONCE(expires < 0))
|
||||
return -ETIME;
|
||||
@@ -324,16 +324,27 @@ int clockevents_program_event(struct clock_event_device *dev, ktime_t expires,
|
||||
return dev->set_next_ktime(expires, dev);
|
||||
|
||||
delta = ktime_to_ns(ktime_sub(expires, ktime_get()));
|
||||
if (delta <= 0)
|
||||
return force ? clockevents_program_min_delta(dev) : -ETIME;
|
||||
|
||||
delta = min(delta, (int64_t) dev->max_delta_ns);
|
||||
delta = max(delta, (int64_t) dev->min_delta_ns);
|
||||
/* Required for tick_periodic() during early boot */
|
||||
if (delta <= 0 && !force)
|
||||
return -ETIME;
|
||||
|
||||
clc = ((unsigned long long) delta * dev->mult) >> dev->shift;
|
||||
rc = dev->set_next_event((unsigned long) clc, dev);
|
||||
if (delta > (int64_t)dev->min_delta_ns) {
|
||||
delta = min(delta, (int64_t) dev->max_delta_ns);
|
||||
clc = ((unsigned long long) delta * dev->mult) >> dev->shift;
|
||||
if (!dev->set_next_event((unsigned long) clc, dev))
|
||||
return 0;
|
||||
}
|
||||
|
||||
return (rc && force) ? clockevents_program_min_delta(dev) : rc;
|
||||
if (dev->next_event_forced)
|
||||
return 0;
|
||||
|
||||
if (dev->set_next_event(dev->min_delta_ticks, dev)) {
|
||||
if (!force || clockevents_program_min_delta(dev))
|
||||
return -ETIME;
|
||||
}
|
||||
dev->next_event_forced = 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
@@ -1888,6 +1888,7 @@ void hrtimer_interrupt(struct clock_event_device *dev)
|
||||
BUG_ON(!cpu_base->hres_active);
|
||||
cpu_base->nr_events++;
|
||||
dev->next_event = KTIME_MAX;
|
||||
dev->next_event_forced = 0;
|
||||
|
||||
raw_spin_lock_irqsave(&cpu_base->lock, flags);
|
||||
entry_time = now = hrtimer_update_base(cpu_base);
|
||||
|
||||
@@ -76,8 +76,10 @@ const struct clock_event_device *tick_get_wakeup_device(int cpu)
|
||||
*/
|
||||
static void tick_broadcast_start_periodic(struct clock_event_device *bc)
|
||||
{
|
||||
if (bc)
|
||||
if (bc) {
|
||||
bc->next_event_forced = 0;
|
||||
tick_setup_periodic(bc, 1);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -403,6 +405,7 @@ static void tick_handle_periodic_broadcast(struct clock_event_device *dev)
|
||||
bool bc_local;
|
||||
|
||||
raw_spin_lock(&tick_broadcast_lock);
|
||||
tick_broadcast_device.evtdev->next_event_forced = 0;
|
||||
|
||||
/* Handle spurious interrupts gracefully */
|
||||
if (clockevent_state_shutdown(tick_broadcast_device.evtdev)) {
|
||||
@@ -696,6 +699,7 @@ static void tick_handle_oneshot_broadcast(struct clock_event_device *dev)
|
||||
|
||||
raw_spin_lock(&tick_broadcast_lock);
|
||||
dev->next_event = KTIME_MAX;
|
||||
tick_broadcast_device.evtdev->next_event_forced = 0;
|
||||
next_event = KTIME_MAX;
|
||||
cpumask_clear(tmpmask);
|
||||
now = ktime_get();
|
||||
@@ -1063,6 +1067,7 @@ static void tick_broadcast_setup_oneshot(struct clock_event_device *bc,
|
||||
|
||||
|
||||
bc->event_handler = tick_handle_oneshot_broadcast;
|
||||
bc->next_event_forced = 0;
|
||||
bc->next_event = KTIME_MAX;
|
||||
|
||||
/*
|
||||
@@ -1175,6 +1180,7 @@ void hotplug_cpu__broadcast_tick_pull(int deadcpu)
|
||||
}
|
||||
|
||||
/* This moves the broadcast assignment to this CPU: */
|
||||
bc->next_event_forced = 0;
|
||||
clockevents_program_event(bc, bc->next_event, 1);
|
||||
}
|
||||
raw_spin_unlock_irqrestore(&tick_broadcast_lock, flags);
|
||||
|
||||
@@ -112,6 +112,7 @@ void tick_handle_periodic(struct clock_event_device *dev)
|
||||
int cpu = smp_processor_id();
|
||||
ktime_t next = dev->next_event;
|
||||
|
||||
dev->next_event_forced = 0;
|
||||
tick_periodic(cpu);
|
||||
|
||||
/*
|
||||
|
||||
@@ -348,7 +348,7 @@ static bool check_tick_dependency(atomic_t *dep)
|
||||
int val = atomic_read(dep);
|
||||
|
||||
if (likely(!tracepoint_enabled(tick_stop)))
|
||||
return !val;
|
||||
return !!val;
|
||||
|
||||
if (val & TICK_DEP_MASK_POSIX_TIMER) {
|
||||
trace_tick_stop(0, TICK_DEP_MASK_POSIX_TIMER);
|
||||
@@ -1518,6 +1518,7 @@ static void tick_nohz_lowres_handler(struct clock_event_device *dev)
|
||||
struct tick_sched *ts = this_cpu_ptr(&tick_cpu_sched);
|
||||
|
||||
dev->next_event = KTIME_MAX;
|
||||
dev->next_event_forced = 0;
|
||||
|
||||
if (likely(tick_nohz_handler(&ts->sched_timer) == HRTIMER_RESTART))
|
||||
tick_program_event(hrtimer_get_expires(&ts->sched_timer), 1);
|
||||
|
||||
+13
-1
@@ -1849,8 +1849,20 @@ static void unplug_oldest_pwq(struct workqueue_struct *wq)
|
||||
raw_spin_lock_irq(&pwq->pool->lock);
|
||||
if (pwq->plugged) {
|
||||
pwq->plugged = false;
|
||||
if (pwq_activate_first_inactive(pwq, true))
|
||||
if (pwq_activate_first_inactive(pwq, true)) {
|
||||
/*
|
||||
* While plugged, queueing skips activation which
|
||||
* includes bumping the nr_active count and adding the
|
||||
* pwq to nna->pending_pwqs if the count can't be
|
||||
* obtained. We need to restore both for the pwq being
|
||||
* unplugged. The first call activates the first
|
||||
* inactive work item and the second, if there are more
|
||||
* inactive, puts the pwq on pending_pwqs.
|
||||
*/
|
||||
pwq_activate_first_inactive(pwq, false);
|
||||
|
||||
kick_pool(pwq->pool);
|
||||
}
|
||||
}
|
||||
raw_spin_unlock_irq(&pwq->pool->lock);
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user